Changeset 4694

Show
Ignore:
Timestamp:
02/23/07 14:04:15 (2 years ago)
Author:
morris
Message:

More p7 tests

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • wired/branches/p7/Makefile.in

    r4686 r4694  
    1717 
    1818DISTFILES               = INSTALL LICENSE NEWS README Makefile Makefile.in \ 
    19                                   config.guess config.status config.h.in config.sub configure \ 
     19                                  config.guess config.staus config.h.in config.sub configure \ 
    2020                                  configure.in install-sh libwired man run wired 
    2121SUBDIRS                 = libwired 
  • wired/branches/p7/run/wired.xml

    r4686 r4694  
    99                <p7:field name="wired.error.code" type="uint32" id="1001" /> 
    1010 
    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" /> 
    1515                <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" /> 
    2121 
    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" /> 
    2841        </p7:fields> 
    2942 
     
    4457                <p7:message name="wired.client_info" id="1003"> 
    4558                        <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" /> 
    5063                        <p7:parameter field="wired.info.arch" use="required" /> 
    5164                </p7:message> 
     
    5366                <p7:message name="wired.server_info" id="1004"> 
    5467                        <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" /> 
    5972                        <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" /> 
    6578                </p7:message> 
    6679 
     
    6881                        <p7:parameter field="wired.transaction" /> 
    6982                        <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" /> 
    7184                </p7:message> 
    7285 
     
    89102                        <p7:parameter field="wired.transaction" /> 
    90103                        <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" /> 
    91154                </p7:message> 
    92155        </p7:messages> 
     
    113176                 
    114177                <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" /> 
    115197        </p7:transactions> 
    116198</p7:protocol> 
  • wired/branches/p7/wired/chats.c

    r4683 r4694  
    260260                wi_hash_unlock(wd_chats); 
    261261        } 
    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 
     270void 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; 
    269274         
    270275        wi_array_rdlock(chat->clients); 
     
    272277        enumerator = wi_array_data_enumerator(chat->clients); 
    273278         
    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); 
    288290                } 
    289291        } 
     
    291293        wi_array_unlock(chat->clients); 
    292294 
    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); 
    294298} 
    295299 
     
    348352                                 chat->topic.topic); 
    349353} 
    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  
    7777void                                                                    wd_chat_add_client(wd_chat_t *, wd_client_t *); 
    7878void                                                                    wd_chat_remove_client(wd_chat_t *, wd_client_t *); 
    79 void                                                                    wd_chat_reply_client_list(wd_chat_t *); 
     79void                                                                    wd_chat_reply_client_list(wd_chat_t *, wd_client_t *); 
    8080 
    8181void                                                                    wd_chat_set_topic(wd_chat_t *, wi_string_t *); 
    8282void                                                                    wd_chat_reply_topic(wd_chat_t *); 
    8383void                                                                    wd_chat_broadcast_topic(wd_chat_t *); 
    84 void                                                                    wd_chat_broadcast_leave(wd_chat_t *, wd_client_t *); 
    8584 
    8685 
  • wired/branches/p7/wired/clients.c

    r4683 r4694  
    284284#pragma mark - 
    285285 
     286void 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 
    286331void wd_client_broadcast_status(wd_client_t *client) { 
    287332        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  
    3838 
    3939 
    40 enum wd_client_state { 
     40enum _wd_client_state { 
    4141        WD_CLIENT_STATE_CONNECTED                       = 0, 
    42         WD_CLIENT_STATE_SAID_HELLO, 
    43         WD_CLIENT_STATE_GAVE_USER, 
     42        WD_CLIENT_STATE_GAVE_INFO, 
    4443        WD_CLIENT_STATE_LOGGED_IN, 
    4544        WD_CLIENT_STATE_DISCONNECTED 
    4645}; 
    47 typedef enum wd_client_state                  wd_client_state_t; 
     46typedef enum _wd_client_state                 wd_client_state_t; 
    4847 
    4948 
     
    105104wd_client_t *                                                   wd_client_with_uid(wd_uid_t); 
    106105 
     106void                                                                    wd_client_reply_client_info(wd_client_t *, wd_client_t *); 
    107107void                                                                    wd_client_broadcast_status(wd_client_t *); 
    108108 
  • wired/branches/p7/wired/commands.c

    r4683 r4694  
    128128   WD_CLIENT_STATE_LOGGED_IN,           0,              true,           wd_cmd_clearnews }, 
    129129 { "CLIENT", 
    130    WD_CLIENT_STATE_SAID_HELLO,                0,              true,           wd_cmd_client }, 
     130   WD_CLIENT_STATE_LOGGED_IN,         0,              true,           wd_cmd_client }, 
    131131 { "COMMENT", 
    132132   WD_CLIENT_STATE_LOGGED_IN,           2,              true,           wd_cmd_comment }, 
     
    156156   WD_CLIENT_STATE_CONNECTED,           0,              true,           wd_cmd_hello }, 
    157157 { "ICON", 
    158    WD_CLIENT_STATE_SAID_HELLO,                1,              true,           wd_cmd_icon }, 
     158   WD_CLIENT_STATE_CONNECTED,         1,              true,           wd_cmd_icon }, 
    159159 { "INFO", 
    160160   WD_CLIENT_STATE_LOGGED_IN,           1,              true,           wd_cmd_info }, 
     
    180180   WD_CLIENT_STATE_LOGGED_IN,           0,              true,           wd_cmd_news }, 
    181181 { "NICK", 
    182    WD_CLIENT_STATE_SAID_HELLO,                1,              true,           wd_cmd_nick }, 
     182   WD_CLIENT_STATE_CONNECTED,         1,              true,           wd_cmd_nick }, 
    183183 { "PASS", 
    184    WD_CLIENT_STATE_GAVE_USER,         1,              true,           wd_cmd_pass }, 
     184   WD_CLIENT_STATE_CONNECTED,         1,              true,           wd_cmd_pass }, 
    185185 { "PING", 
    186186   WD_CLIENT_STATE_CONNECTED,           0,              false,          wd_cmd_ping }, 
     
    204204   WD_CLIENT_STATE_LOGGED_IN,           1,              true,           wd_cmd_stat }, 
    205205 { "STATUS", 
    206    WD_CLIENT_STATE_SAID_HELLO,                1,              true,           wd_cmd_status }, 
     206   WD_CLIENT_STATE_CONNECTED,         1,              true,           wd_cmd_status }, 
    207207 { "TOPIC", 
    208208   WD_CLIENT_STATE_LOGGED_IN,           1,              true,           wd_cmd_topic }, 
     
    210210   WD_CLIENT_STATE_LOGGED_IN,           2,              true,           wd_cmd_type }, 
    211211 { "USER", 
    212    WD_CLIENT_STATE_SAID_HELLO,                1,              true,           wd_cmd_user }, 
     212   WD_CLIENT_STATE_CONNECTED,         1,              true,           wd_cmd_user }, 
    213213 { "USERS", 
    214214   WD_CLIENT_STATE_LOGGED_IN,           0,              true,           wd_cmd_users }, 
     
    273273                client->state = WD_CLIENT_STATE_DISCONNECTED; 
    274274 
    275                 wd_chat_broadcast_leave(wd_public_chat, client); 
     275                wd_chat_remove_client(wd_public_chat, client); 
    276276        } 
    277277 
     
    471471        wd_client_t             *client = wd_client(); 
    472472 
    473         if(client->state != WD_CLIENT_STATE_SAID_HELLO
     473        if(client->state != WD_CLIENT_STATE_CONNECTED
    474474                return; 
    475475 
     
    918918                         wd_files_unique_size); 
    919919         
    920         client->state = WD_CLIENT_STATE_SAID_HELLO
     920        client->state = WD_CLIENT_STATE_CONNECTED
    921921} 
    922922 
     
    11721172 
    11731173        wd_chat_remove_client(chat, client); 
    1174         wd_chat_broadcast_leave(chat, client); 
    11751174} 
    11761175 
     
    13381337        wi_string_t             *nick; 
    13391338 
    1340         if(client->state < WD_CLIENT_STATE_SAID_HELLO
     1339        if(client->state <= WD_CLIENT_STATE_CONNECTED
    13411340                return; 
    13421341         
     
    13631362        wd_chat_t               *chat; 
    13641363 
    1365         if(client->state != WD_CLIENT_STATE_GAVE_USER
     1364        if(client->state != WD_CLIENT_STATE_CONNECTED
    13661365                return; 
    13671366         
     
    16391638        wi_string_t             *status; 
    16401639 
    1641         if(client->state < WD_CLIENT_STATE_SAID_HELLO
     1640        if(client->state <= WD_CLIENT_STATE_CONNECTED
    16421641                return; 
    16431642 
     
    17341733        wd_client_t             *client = wd_client(); 
    17351734 
    1736         if(client->state != WD_CLIENT_STATE_SAID_HELLO
     1735        if(client->state != WD_CLIENT_STATE_CONNECTED
    17371736                return; 
    17381737 
     
    17421741                client->nick = wi_retain(client->login); 
    17431742 
    1744         client->state = WD_CLIENT_STATE_GAVE_USER
     1743        client->state = WD_CLIENT_STATE_CONNECTED
    17451744} 
    17461745 
     
    17831782                return; 
    17841783 
    1785       wd_chat_reply_client_list(chat); 
    1786 } 
     1784//    wd_chat_reply_client_list(chat); 
     1785} 
  • wired/branches/p7/wired/messages.c

    r4686 r4694  
    5050 
    5151static void                                                     wd_message_client_info(wd_client_t *, wi_p7_message_t *); 
     52static void                                                     wd_message_get_user_info(wd_client_t *, wi_p7_message_t *); 
     53static void                                                     wd_message_join_chat(wd_client_t *, wi_p7_message_t *); 
    5254static void                                                     wd_message_login(wd_client_t *, wi_p7_message_t *); 
    5355static void                                                     wd_message_ping(wd_client_t *, wi_p7_message_t *); 
     
    7375 
    7476        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")); 
    7579        wi_hash_set_data_for_key(wd_message_handlers, wd_message_login, WI_STR("wired.login")); 
    7680        wi_hash_set_data_for_key(wd_message_handlers, wd_message_ping, WI_STR("wired.ping")); 
     
    96100 
    97101        while(client->state <= WD_CLIENT_STATE_LOGGED_IN) { 
     102                if(++i % 10 == 0) 
     103                        wi_pool_drain(pool); 
     104 
    98105                do { 
    99106                        state = wi_socket_wait(client->socket, 0.1); 
     
    132139                } 
    133140                 
     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                 
    134156                client->message = message; 
    135157                 
    136158                handler = wi_hash_data_for_key(wd_message_handlers, wi_p7_message_name(message)); 
    137159                 
    138                 if(handler) 
     160                if(handler) { 
    139161                        (*handler)(client, message); 
    140                 else 
     162                } else { 
    141163                        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                } 
    145167        } 
    146168         
     
    149171                client->state = WD_CLIENT_STATE_DISCONNECTED; 
    150172 
    151                 wd_chat_broadcast_leave(wd_public_chat, client); 
     173                wd_chat_remove_client(wd_public_chat, client); 
    152174        } 
    153175 
     
    177199        wi_process_t            *process; 
    178200         
     201        client->state = WD_CLIENT_STATE_GAVE_INFO; 
     202 
    179203        process = wi_process(); 
    180204 
    181205        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")); 
    186210        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")); 
    190214         
    191215        wd_reply_message(client, reply); 
     216} 
     217 
     218 
     219 
     220static 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 
     243static 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); 
    192269} 
    193270 
     
    231308           client->nick, client->login, client->ip); 
    232309 
    233         wi_lock_lock(client->flag_lock); 
    234310        client->admin = (client->account->kick_users || client->account->ban_users); 
    235311        client->state = WD_CLIENT_STATE_LOGGED_IN; 
    236         wi_lock_unlock(client->flag_lock); 
    237312 
    238313        wi_lock_lock(wd_status_lock); 
     
    263338        icon = wi_p7_message_data_for_name(message, WI_STR("wired.user.icon")); 
    264339 
     340        if(!icon) { 
     341                wd_reply_error2(client, 2); 
     342                 
     343                return; 
     344        } 
     345 
    265346        if(!wi_is_equal(icon, client->icon)) { 
    266347                wi_release(client->icon); 
     
    278359 
    279360        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        } 
    280367 
    281368        if(!wi_is_equal(nick, client->nick)) { 
     
    295382        status = wi_p7_message_string_for_name(message, WI_STR("wired.user.status")); 
    296383 
     384        if(!status) { 
     385                wd_reply_error2(client, 2); 
     386                 
     387                return; 
     388        } 
     389 
    297390        if(!wi_is_equal(status, client->status)) { 
    298391                wi_release(client->status);