Changeset 4694
- Timestamp:
- 02/23/07 14:04:15 (2 years ago)
- Files:
-
- wired/branches/p7/Makefile.in (modified) (1 diff)
- wired/branches/p7/run/wired.xml (modified) (6 diffs)
- wired/branches/p7/wired/chats.c (modified) (4 diffs)
- wired/branches/p7/wired/chats.h (modified) (1 diff)
- wired/branches/p7/wired/clients.c (modified) (1 diff)
- wired/branches/p7/wired/clients.h (modified) (2 diffs)
- wired/branches/p7/wired/commands.c (modified) (15 diffs)
- wired/branches/p7/wired/messages.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
wired/branches/p7/Makefile.in
r4686 r4694 17 17 18 18 DISTFILES = INSTALL LICENSE NEWS README Makefile Makefile.in \ 19 config.guess config.sta tus config.h.in config.sub configure \19 config.guess config.staus config.h.in config.sub configure \ 20 20 configure.in install-sh libwired man run wired 21 21 SUBDIRS = libwired wired/branches/p7/run/wired.xml
r4686 r4694 9 9 <p7:field name="wired.error.code" type="uint32" id="1001" /> 10 10 11 <p7:field name="wired.info.application .name" type="string" id="1002" />12 <p7:field name="wired.info.application .version" type="string" id="1003" />13 <p7:field name="wired.info.os .name" type="string" id="1004" />14 <p7:field name="wired.info.os .version" type="string" id="1005" />11 <p7:field name="wired.info.application_name" type="string" id="1002" /> 12 <p7:field name="wired.info.application_version" type="string" id="1003" /> 13 <p7:field name="wired.info.os_name" type="string" id="1004" /> 14 <p7:field name="wired.info.os_version" type="string" id="1005" /> 15 15 <p7:field name="wired.info.arch" type="string" id="1006" /> 16 <p7:field name="wired. server_info.name" type="string" id="1007" />17 <p7:field name="wired. server_info.description" type="string" id="1008" />18 <p7:field name="wired. server_info.launch" type="date" id="1009" />19 <p7:field name="wired. server_info.files.count" type="uint64" id="1010" />20 <p7:field name="wired. server_info.files.size" type="uint64" id="1011" />16 <p7:field name="wired.info.name" type="string" id="1007" /> 17 <p7:field name="wired.info.description" type="string" id="1008" /> 18 <p7:field name="wired.info.start_time" type="date" id="1009" /> 19 <p7:field name="wired.info.files.count" type="uint64" id="1010" /> 20 <p7:field name="wired.info.files.size" type="uint64" id="1011" /> 21 21 22 <p7:field name="wired.user.id" type="uint32" id="1012" /> 23 <p7:field name="wired.user.nick" type="string" id="1013" /> 24 <p7:field name="wired.user.login" type="string" id="1014" /> 25 <p7:field name="wired.user.password" type="string" id="1015" /> 26 <p7:field name="wired.user.status" type="string" id="1016" /> 27 <p7:field name="wired.user.icon" type="data" id="1017" /> 22 <p7:field name="wired.login.password" type="string" id="1012" /> 23 24 <p7:field name="wired.user.id" type="uint32" id="1013" /> 25 <p7:field name="wired.user.idle" type="bool" id="1014" /> 26 <p7:field name="wired.user.admin" type="bool" id="1015" /> 27 <p7:field name="wired.user.nick" type="string" id="1016" /> 28 <p7:field name="wired.user.login" type="string" id="1017" /> 29 <p7:field name="wired.user.status" type="string" id="1018" /> 30 <p7:field name="wired.user.icon" type="data" id="1019" /> 31 <p7:field name="wired.user.ip" type="string" id="1020" /> 32 <p7:field name="wired.user.host" type="string" id="1021" /> 33 <p7:field name="wired.user.cipher_name" type="string" id="1022" /> 34 <p7:field name="wired.user.cipher_bits" type="uint32" id="1023" /> 35 <p7:field name="wired.user.login_time" type="date" id="1024" /> 36 <p7:field name="wired.user.idle_time" type="date" id="1025" /> 37 38 <p7:field name="wired.chat.id" type="uint32" id="1026" /> 39 40 <p7:field name="wired.dummy.string" type="string" id="2000" /> 28 41 </p7:fields> 29 42 … … 44 57 <p7:message name="wired.client_info" id="1003"> 45 58 <p7:parameter field="wired.transaction" /> 46 <p7:parameter field="wired.info.application .name" use="required" />47 <p7:parameter field="wired.info.application .version" use="required" />48 <p7:parameter field="wired.info.os .name" use="required" />49 <p7:parameter field="wired.info.os .version" use="required" />59 <p7:parameter field="wired.info.application_name" use="required" /> 60 <p7:parameter field="wired.info.application_version" use="required" /> 61 <p7:parameter field="wired.info.os_name" use="required" /> 62 <p7:parameter field="wired.info.os_version" use="required" /> 50 63 <p7:parameter field="wired.info.arch" use="required" /> 51 64 </p7:message> … … 53 66 <p7:message name="wired.server_info" id="1004"> 54 67 <p7:parameter field="wired.transaction" /> 55 <p7:parameter field="wired.info.application .name" use="required" />56 <p7:parameter field="wired.info.application .version" use="required" />57 <p7:parameter field="wired.info.os .name" use="required" />58 <p7:parameter field="wired.info.os .version" use="required" />68 <p7:parameter field="wired.info.application_name" use="required" /> 69 <p7:parameter field="wired.info.application_version" use="required" /> 70 <p7:parameter field="wired.info.os_name" use="required" /> 71 <p7:parameter field="wired.info.os_version" use="required" /> 59 72 <p7:parameter field="wired.info.arch" use="required" /> 60 <p7:parameter field="wired. server_info.name" use="required" />61 <p7:parameter field="wired. server_info.description" use="required" />62 <p7:parameter field="wired. server_info.launch" use="required" />63 <p7:parameter field="wired. server_info.files.count" use="required" />64 <p7:parameter field="wired. server_info.files.size" use="required" />73 <p7:parameter field="wired.info.name" use="required" /> 74 <p7:parameter field="wired.info.description" use="required" /> 75 <p7:parameter field="wired.info.start_time" use="required" /> 76 <p7:parameter field="wired.info.files.count" use="required" /> 77 <p7:parameter field="wired.info.files.size" use="required" /> 65 78 </p7:message> 66 79 … … 68 81 <p7:parameter field="wired.transaction" /> 69 82 <p7:parameter field="wired.user.login" use="required" /> 70 <p7:parameter field="wired. user.password" use="required" />83 <p7:parameter field="wired.login.password" use="required" /> 71 84 </p7:message> 72 85 … … 89 102 <p7:parameter field="wired.transaction" /> 90 103 <p7:parameter field="wired.user.icon" use="required" /> 104 </p7:message> 105 106 <p7:message name="wired.join_chat" id="1010"> 107 <p7:parameter field="wired.transaction" /> 108 <p7:parameter field="wired.chat.id" use="required" /> 109 </p7:message> 110 111 <p7:message name="wired.user_list" id="1011"> 112 <p7:parameter field="wired.transaction" /> 113 <p7:parameter field="wired.chat.id" use="required" /> 114 <p7:parameter field="wired.user.id" use="required" /> 115 <p7:parameter field="wired.user.admin" use="required" /> 116 <p7:parameter field="wired.user.idle" use="required" /> 117 <p7:parameter field="wired.user.nick" use="required" /> 118 <p7:parameter field="wired.user.status" use="required" /> 119 <p7:parameter field="wired.user.icon" use="required" /> 120 </p7:message> 121 122 <p7:message name="wired.user_list.done" id="1012"> 123 <p7:parameter field="wired.transaction" /> 124 <p7:parameter field="wired.chat.id" use="required" /> 125 </p7:message> 126 127 <p7:message name="wired.get_user_info" id="1013"> 128 <p7:parameter field="wired.transaction" /> 129 <p7:parameter field="wired.user.id" use="required" /> 130 </p7:message> 131 132 <p7:message name="wired.user_info" id="1014"> 133 <p7:parameter field="wired.transaction" /> 134 <p7:parameter field="wired.user.id" use="required" /> 135 <p7:parameter field="wired.user.admin" use="required" /> 136 <p7:parameter field="wired.user.idle" use="required" /> 137 <p7:parameter field="wired.user.nick" use="required" /> 138 <p7:parameter field="wired.user.status" use="required" /> 139 <p7:parameter field="wired.user.icon" use="required" /> 140 <p7:parameter field="wired.user.ip" use="required" /> 141 <p7:parameter field="wired.user.host" use="required" /> 142 <p7:parameter field="wired.user.cipher_name" use="required" /> 143 <p7:parameter field="wired.user.cipher_bits" use="required" /> 144 <p7:parameter field="wired.info.application_name" use="required" /> 145 <p7:parameter field="wired.info.application_version" use="required" /> 146 <p7:parameter field="wired.info.os_name" use="required" /> 147 <p7:parameter field="wired.info.os_version" use="required" /> 148 <p7:parameter field="wired.info.arch" use="required" /> 149 </p7:message> 150 151 <p7:message name="wired.dummy" id="2000"> 152 <p7:parameter field="wired.transaction" /> 153 <p7:parameter field="wired.dummy.string" use="required" /> 91 154 </p7:message> 92 155 </p7:messages> … … 113 176 114 177 <p7:transaction message="wired.set_icon" originator="client" use="required" /> 178 179 <p7:transaction message="wired.join_chat" originator="client" use="required"> 180 <p7:or> 181 <p7:and> 182 <p7:reply message="wired.user_list" count="+" use="required" /> 183 <p7:reply message="wired.user_list.done" count="1" use="required" /> 184 </p7:and> 185 <p7:reply message="wired.error" count="1" use="required" /> 186 </p7:or> 187 </p7:transaction> 188 189 <p7:transaction message="wired.get_user_info" originator="client" use="required"> 190 <p7:or> 191 <p7:reply message="wired.user_info" count="1" use="required" /> 192 <p7:reply message="wired.error" count="1" use="required" /> 193 </p7:or> 194 </p7:transaction> 195 196 <p7:transaction message="wired.dummy" originator="client" use="required" /> 115 197 </p7:transactions> 116 198 </p7:protocol> wired/branches/p7/wired/chats.c
r4683 r4694 260 260 wi_hash_unlock(wd_chats); 261 261 } 262 } 263 264 265 266 void wd_chat_reply_client_list(wd_chat_t *chat) { 267 wi_enumerator_t *enumerator; 268 wd_client_t *client; 262 263 wd_broadcast(chat, 303, WI_STR("%u%c%u"), 264 chat->cid, WD_FIELD_SEPARATOR, 265 client->uid); 266 } 267 268 269 270 void wd_chat_reply_client_list(wd_chat_t *chat, wd_client_t *client) { 271 wi_p7_message_t *message; 272 wi_enumerator_t *enumerator; 273 wd_client_t *peer; 269 274 270 275 wi_array_rdlock(chat->clients); … … 272 277 enumerator = wi_array_data_enumerator(chat->clients); 273 278 274 while((client = wi_enumerator_next_data(enumerator))) { 275 if(client->state == WD_CLIENT_STATE_LOGGED_IN) { 276 /* wd_reply(310, WI_STR("%u%c%u%c%u%c%u%c%u%c%#@%c%#@%c%#@%c%#@%c%#@%c%#@"), 277 chat->cid, WD_FIELD_SEPARATOR, 278 client->uid, WD_FIELD_SEPARATOR, 279 client->idle, WD_FIELD_SEPARATOR, 280 client->admin, WD_FIELD_SEPARATOR, 281 client->icon, WD_FIELD_SEPARATOR, 282 client->nick, WD_FIELD_SEPARATOR, 283 client->login, WD_FIELD_SEPARATOR, 284 client->ip, WD_FIELD_SEPARATOR, 285 client->host, WD_FIELD_SEPARATOR, 286 client->status, WD_FIELD_SEPARATOR, 287 client->image);*/ 279 while((peer = wi_enumerator_next_data(enumerator))) { 280 if(peer->state == WD_CLIENT_STATE_LOGGED_IN) { 281 message = wi_p7_message_with_name(WI_STR("wired.user_list"), client->p7_socket); 282 wi_p7_message_set_uint32_for_name(message, chat->cid, WI_STR("wired.chat.id")); 283 wi_p7_message_set_uint32_for_name(message, client->uid, WI_STR("wired.user.id")); 284 wi_p7_message_set_bool_for_name(message, client->admin, WI_STR("wired.user.admin")); 285 wi_p7_message_set_bool_for_name(message, client->idle, WI_STR("wired.user.idle")); 286 wi_p7_message_set_string_for_name(message, client->nick, WI_STR("wired.user.nick")); 287 wi_p7_message_set_string_for_name(message, client->status, WI_STR("wired.user.status")); 288 wi_p7_message_set_data_for_name(message, client->icon, WI_STR("wired.user.icon")); 289 wd_reply_message(client, message); 288 290 } 289 291 } … … 291 293 wi_array_unlock(chat->clients); 292 294 293 wd_reply(311, WI_STR("%u"), chat->cid); 295 message = wi_p7_message_with_name(WI_STR("wired.user_list.done"), client->p7_socket); 296 wi_p7_message_set_uint32_for_name(message, chat->cid, WI_STR("wired.chat.id")); 297 wd_reply_message(client, message); 294 298 } 295 299 … … 348 352 chat->topic.topic); 349 353 } 350 351 352 353 void wd_chat_broadcast_leave(wd_chat_t *chat, wd_client_t *client) {354 wd_broadcast(chat, 303, WI_STR("%u%c%u"),355 chat->cid, WD_FIELD_SEPARATOR,356 client->uid);357 }wired/branches/p7/wired/chats.h
r4508 r4694 77 77 void wd_chat_add_client(wd_chat_t *, wd_client_t *); 78 78 void wd_chat_remove_client(wd_chat_t *, wd_client_t *); 79 void wd_chat_reply_client_list(wd_chat_t * );79 void wd_chat_reply_client_list(wd_chat_t *, wd_client_t *); 80 80 81 81 void wd_chat_set_topic(wd_chat_t *, wi_string_t *); 82 82 void wd_chat_reply_topic(wd_chat_t *); 83 83 void wd_chat_broadcast_topic(wd_chat_t *); 84 void wd_chat_broadcast_leave(wd_chat_t *, wd_client_t *);85 84 86 85 wired/branches/p7/wired/clients.c
r4683 r4694 284 284 #pragma mark - 285 285 286 void wd_client_reply_client_info(wd_client_t *peer, wd_client_t *client) { 287 wi_p7_message_t *message; 288 wi_cipher_t *cipher; 289 290 cipher = wi_p7_socket_cipher(peer->p7_socket); 291 292 message = wi_p7_message_with_name(WI_STR("wired.user_info"), client->p7_socket); 293 wi_p7_message_set_uint32_for_name(message, client->uid, WI_STR("wired.user.id")); 294 wi_p7_message_set_bool_for_name(message, client->admin, WI_STR("wired.user.admin")); 295 wi_p7_message_set_bool_for_name(message, client->idle, WI_STR("wired.user.idle")); 296 wi_p7_message_set_string_for_name(message, client->nick, WI_STR("wired.user.nick")); 297 wi_p7_message_set_string_for_name(message, client->status, WI_STR("wired.user.status")); 298 wi_p7_message_set_data_for_name(message, client->icon, WI_STR("wired.user.icon")); 299 wi_p7_message_set_string_for_name(message, client->ip, WI_STR("wired.user.ip")); 300 wi_p7_message_set_string_for_name(message, client->host, WI_STR("wired.user.host")); 301 wi_p7_message_set_string_for_name(message, wi_cipher_name(cipher), WI_STR("wired.user.cipher_name")); 302 wi_p7_message_set_uint32_for_name(message, wi_cipher_bits(cipher), WI_STR("wired.user.cipher_bits")); 303 wi_p7_message_set_date_for_name(message, wi_date_with_time_interval(peer->login_time), WI_STR("wired.user.login_time")); 304 wi_p7_message_set_date_for_name(message, wi_date_with_time_interval(peer->idle_time), WI_STR("wired.user.idle_time")); 305 wd_reply_message(client, message); 306 307 308 /* wd_reply(308, WI_STR("%u%c%u%c%u%c%u%c%#@%c%#@%c%#@%c%#@%c%#@%c%#@%c%u%c%#@%c%#@%c%#@%c%#@%c%#@%c%#@"), 309 peer->uid, WD_FIELD_SEPARATOR, 310 peer->idle, WD_FIELD_SEPARATOR, 311 peer->admin, WD_FIELD_SEPARATOR, 312 peer->icon, WD_FIELD_SEPARATOR, 313 peer->nick, WD_FIELD_SEPARATOR, 314 peer->login, WD_FIELD_SEPARATOR, 315 peer->ip, WD_FIELD_SEPARATOR, 316 peer->host, WD_FIELD_SEPARATOR, 317 peer->version, WD_FIELD_SEPARATOR, 318 wi_socket_cipher_name(peer->socket), WD_FIELD_SEPARATOR, 319 wi_socket_cipher_bits(peer->socket), WD_FIELD_SEPARATOR, 320 login, WD_FIELD_SEPARATOR, 321 idle, WD_FIELD_SEPARATOR, 322 downloads, WD_FIELD_SEPARATOR, 323 uploads, WD_FIELD_SEPARATOR, 324 peer->status, WD_FIELD_SEPARATOR, 325 peer->image);*/ 326 327 } 328 329 330 286 331 void wd_client_broadcast_status(wd_client_t *client) { 287 332 wd_broadcast(wd_public_chat, 304, WI_STR("%u%c%u%c%u%c%u%c%#@%c%#@"), wired/branches/p7/wired/clients.h
r4683 r4694 38 38 39 39 40 enum wd_client_state {40 enum _wd_client_state { 41 41 WD_CLIENT_STATE_CONNECTED = 0, 42 WD_CLIENT_STATE_SAID_HELLO, 43 WD_CLIENT_STATE_GAVE_USER, 42 WD_CLIENT_STATE_GAVE_INFO, 44 43 WD_CLIENT_STATE_LOGGED_IN, 45 44 WD_CLIENT_STATE_DISCONNECTED 46 45 }; 47 typedef enum wd_client_state wd_client_state_t;46 typedef enum _wd_client_state wd_client_state_t; 48 47 49 48 … … 105 104 wd_client_t * wd_client_with_uid(wd_uid_t); 106 105 106 void wd_client_reply_client_info(wd_client_t *, wd_client_t *); 107 107 void wd_client_broadcast_status(wd_client_t *); 108 108 wired/branches/p7/wired/commands.c
r4683 r4694 128 128 WD_CLIENT_STATE_LOGGED_IN, 0, true, wd_cmd_clearnews }, 129 129 { "CLIENT", 130 WD_CLIENT_STATE_ SAID_HELLO, 0, true, wd_cmd_client },130 WD_CLIENT_STATE_LOGGED_IN, 0, true, wd_cmd_client }, 131 131 { "COMMENT", 132 132 WD_CLIENT_STATE_LOGGED_IN, 2, true, wd_cmd_comment }, … … 156 156 WD_CLIENT_STATE_CONNECTED, 0, true, wd_cmd_hello }, 157 157 { "ICON", 158 WD_CLIENT_STATE_ SAID_HELLO, 1, true, wd_cmd_icon },158 WD_CLIENT_STATE_CONNECTED, 1, true, wd_cmd_icon }, 159 159 { "INFO", 160 160 WD_CLIENT_STATE_LOGGED_IN, 1, true, wd_cmd_info }, … … 180 180 WD_CLIENT_STATE_LOGGED_IN, 0, true, wd_cmd_news }, 181 181 { "NICK", 182 WD_CLIENT_STATE_ SAID_HELLO, 1, true, wd_cmd_nick },182 WD_CLIENT_STATE_CONNECTED, 1, true, wd_cmd_nick }, 183 183 { "PASS", 184 WD_CLIENT_STATE_ GAVE_USER, 1, true, wd_cmd_pass },184 WD_CLIENT_STATE_CONNECTED, 1, true, wd_cmd_pass }, 185 185 { "PING", 186 186 WD_CLIENT_STATE_CONNECTED, 0, false, wd_cmd_ping }, … … 204 204 WD_CLIENT_STATE_LOGGED_IN, 1, true, wd_cmd_stat }, 205 205 { "STATUS", 206 WD_CLIENT_STATE_ SAID_HELLO, 1, true, wd_cmd_status },206 WD_CLIENT_STATE_CONNECTED, 1, true, wd_cmd_status }, 207 207 { "TOPIC", 208 208 WD_CLIENT_STATE_LOGGED_IN, 1, true, wd_cmd_topic }, … … 210 210 WD_CLIENT_STATE_LOGGED_IN, 2, true, wd_cmd_type }, 211 211 { "USER", 212 WD_CLIENT_STATE_ SAID_HELLO, 1, true, wd_cmd_user },212 WD_CLIENT_STATE_CONNECTED, 1, true, wd_cmd_user }, 213 213 { "USERS", 214 214 WD_CLIENT_STATE_LOGGED_IN, 0, true, wd_cmd_users }, … … 273 273 client->state = WD_CLIENT_STATE_DISCONNECTED; 274 274 275 wd_chat_ broadcast_leave(wd_public_chat, client);275 wd_chat_remove_client(wd_public_chat, client); 276 276 } 277 277 … … 471 471 wd_client_t *client = wd_client(); 472 472 473 if(client->state != WD_CLIENT_STATE_ SAID_HELLO)473 if(client->state != WD_CLIENT_STATE_CONNECTED) 474 474 return; 475 475 … … 918 918 wd_files_unique_size); 919 919 920 client->state = WD_CLIENT_STATE_ SAID_HELLO;920 client->state = WD_CLIENT_STATE_CONNECTED; 921 921 } 922 922 … … 1172 1172 1173 1173 wd_chat_remove_client(chat, client); 1174 wd_chat_broadcast_leave(chat, client);1175 1174 } 1176 1175 … … 1338 1337 wi_string_t *nick; 1339 1338 1340 if(client->state < WD_CLIENT_STATE_SAID_HELLO)1339 if(client->state <= WD_CLIENT_STATE_CONNECTED) 1341 1340 return; 1342 1341 … … 1363 1362 wd_chat_t *chat; 1364 1363 1365 if(client->state != WD_CLIENT_STATE_ GAVE_USER)1364 if(client->state != WD_CLIENT_STATE_CONNECTED) 1366 1365 return; 1367 1366 … … 1639 1638 wi_string_t *status; 1640 1639 1641 if(client->state < WD_CLIENT_STATE_SAID_HELLO)1640 if(client->state <= WD_CLIENT_STATE_CONNECTED) 1642 1641 return; 1643 1642 … … 1734 1733 wd_client_t *client = wd_client(); 1735 1734 1736 if(client->state != WD_CLIENT_STATE_ SAID_HELLO)1735 if(client->state != WD_CLIENT_STATE_CONNECTED) 1737 1736 return; 1738 1737 … … 1742 1741 client->nick = wi_retain(client->login); 1743 1742 1744 client->state = WD_CLIENT_STATE_ GAVE_USER;1743 client->state = WD_CLIENT_STATE_CONNECTED; 1745 1744 } 1746 1745 … … 1783 1782 return; 1784 1783 1785 wd_chat_reply_client_list(chat);1786 } 1784 // wd_chat_reply_client_list(chat); 1785 } wired/branches/p7/wired/messages.c
r4686 r4694 50 50 51 51 static void wd_message_client_info(wd_client_t *, wi_p7_message_t *); 52 static void wd_message_get_user_info(wd_client_t *, wi_p7_message_t *); 53 static void wd_message_join_chat(wd_client_t *, wi_p7_message_t *); 52 54 static void wd_message_login(wd_client_t *, wi_p7_message_t *); 53 55 static void wd_message_ping(wd_client_t *, wi_p7_message_t *); … … 73 75 74 76 wi_hash_set_data_for_key(wd_message_handlers, wd_message_client_info, WI_STR("wired.client_info")); 77 wi_hash_set_data_for_key(wd_message_handlers, wd_message_get_user_info, WI_STR("wired.get_user_info")); 78 wi_hash_set_data_for_key(wd_message_handlers, wd_message_join_chat, WI_STR("wired.join_chat")); 75 79 wi_hash_set_data_for_key(wd_message_handlers, wd_message_login, WI_STR("wired.login")); 76 80 wi_hash_set_data_for_key(wd_message_handlers, wd_message_ping, WI_STR("wired.ping")); … … 96 100 97 101 while(client->state <= WD_CLIENT_STATE_LOGGED_IN) { 102 if(++i % 10 == 0) 103 wi_pool_drain(pool); 104 98 105 do { 99 106 state = wi_socket_wait(client->socket, 0.1); … … 132 139 } 133 140 141 if(client->state == WD_CLIENT_STATE_CONNECTED) { 142 if(!wi_is_equal(wi_p7_message_name(message), WI_STR("wired.client_info"))) { 143 wi_log_warn(WI_STR("Message should be wired.client_info")); 144 145 continue; 146 } 147 } 148 else if(client->state == WD_CLIENT_STATE_GAVE_INFO) { 149 if(!wi_is_equal(wi_p7_message_name(message), WI_STR("wired.login"))) { 150 wi_log_warn(WI_STR("Message should be wired.login")); 151 152 continue; 153 } 154 } 155 134 156 client->message = message; 135 157 136 158 handler = wi_hash_data_for_key(wd_message_handlers, wi_p7_message_name(message)); 137 159 138 if(handler) 160 if(handler) { 139 161 (*handler)(client, message); 140 else162 } else { 141 163 wi_log_warn(WI_STR("No handler for message %@"), wi_p7_message_name(message)); 142 143 if(++i % 10 == 0)144 wi_pool_drain(pool);164 165 continue; 166 } 145 167 } 146 168 … … 149 171 client->state = WD_CLIENT_STATE_DISCONNECTED; 150 172 151 wd_chat_ broadcast_leave(wd_public_chat, client);173 wd_chat_remove_client(wd_public_chat, client); 152 174 } 153 175 … … 177 199 wi_process_t *process; 178 200 201 client->state = WD_CLIENT_STATE_GAVE_INFO; 202 179 203 process = wi_process(); 180 204 181 205 reply = wi_p7_message_with_name(WI_STR("wired.server_info"), client->p7_socket); 182 wi_p7_message_set_string_for_name(reply, WI_STR("Wired Server"), WI_STR("wired.info.application .name"));183 wi_p7_message_set_string_for_name(reply, WI_STR(WD_VERSION), WI_STR("wired.info.application .version"));184 wi_p7_message_set_string_for_name(reply, wi_process_os_name(process), WI_STR("wired.info.os .name"));185 wi_p7_message_set_string_for_name(reply, wi_process_os_release(process), WI_STR("wired.info.os .version"));206 wi_p7_message_set_string_for_name(reply, WI_STR("Wired Server"), WI_STR("wired.info.application_name")); 207 wi_p7_message_set_string_for_name(reply, WI_STR(WD_VERSION), WI_STR("wired.info.application_version")); 208 wi_p7_message_set_string_for_name(reply, wi_process_os_name(process), WI_STR("wired.info.os_name")); 209 wi_p7_message_set_string_for_name(reply, wi_process_os_release(process), WI_STR("wired.info.os_version")); 186 210 wi_p7_message_set_string_for_name(reply, wi_process_os_arch(process), WI_STR("wired.info.arch")); 187 wi_p7_message_set_string_for_name(reply, wd_settings.name, WI_STR("wired. server_info.name"));188 wi_p7_message_set_string_for_name(reply, wd_settings.description, WI_STR("wired. server_info.description"));189 wi_p7_message_set_date_for_name(reply, wd_start_date, WI_STR("wired. server_info.launch"));211 wi_p7_message_set_string_for_name(reply, wd_settings.name, WI_STR("wired.info.name")); 212 wi_p7_message_set_string_for_name(reply, wd_settings.description, WI_STR("wired.info.description")); 213 wi_p7_message_set_date_for_name(reply, wd_start_date, WI_STR("wired.info.start_time")); 190 214 191 215 wd_reply_message(client, reply); 216 } 217 218 219 220 static void wd_message_get_user_info(wd_client_t *client, wi_p7_message_t *message) { 221 wd_client_t *peer; 222 uint32_t uid; 223 224 if(!wi_p7_message_get_uint32_for_name(message, &uid, WI_STR("wired.user.id"))) { 225 wd_reply_error2(client, 2); 226 227 return; 228 } 229 230 peer = wd_client_with_uid(uid); 231 232 if(!peer) { 233 wd_reply_error2(client, 6); 234 235 return; 236 } 237 238 wd_client_reply_client_info(peer, client); 239 } 240 241 242 243 static void wd_message_join_chat(wd_client_t *client, wi_p7_message_t *message) { 244 wd_chat_t *chat; 245 uint32_t cid; 246 247 if(!wi_p7_message_get_uint32_for_name(message, &cid, WI_STR("wired.chat.id"))) { 248 wd_reply_error2(client, 2); 249 250 return; 251 } 252 253 chat = wd_chats_chat_with_cid(cid); 254 255 if(!chat) { 256 wd_reply_error2(client, 3); 257 258 return; 259 } 260 261 if(wd_chat_contains_client(chat, client)) { 262 wd_reply_error2(client, 4); 263 264 return; 265 } 266 267 wd_chat_add_client(chat, client); 268 wd_chat_reply_client_list(chat, client); 192 269 } 193 270 … … 231 308 client->nick, client->login, client->ip); 232 309 233 wi_lock_lock(client->flag_lock);234 310 client->admin = (client->account->kick_users || client->account->ban_users); 235 311 client->state = WD_CLIENT_STATE_LOGGED_IN; 236 wi_lock_unlock(client->flag_lock);237 312 238 313 wi_lock_lock(wd_status_lock); … … 263 338 icon = wi_p7_message_data_for_name(message, WI_STR("wired.user.icon")); 264 339 340 if(!icon) { 341 wd_reply_error2(client, 2); 342 343 return; 344 } 345 265 346 if(!wi_is_equal(icon, client->icon)) { 266 347 wi_release(client->icon); … … 278 359 279 360 nick = wi_p7_message_string_for_name(message, WI_STR("wired.user.nick")); 361 362 if(!nick) { 363 wd_reply_error2(client, 2); 364 365 return; 366 } 280 367 281 368 if(!wi_is_equal(nick, client->nick)) { … … 295 382 status = wi_p7_message_string_for_name(message, WI_STR("wired.user.status")); 296 383 384 if(!status) { 385 wd_reply_error2(client, 2); 386 387 return; 388 } 389 297 390 if(!wi_is_equal(status, client->status)) { 298 391 wi_release(client->status);
