comparison src/protocols/msn/command.c @ 19783:995aea35b05c

[gaim-migrate @ 16329] change it to windows Live Messenger Basic TWN authentication OK now committer: Ethan Blanton <elb@pidgin.im>
author Ma Yuan <mayuan2006@gmail.com>
date Sat, 24 Jun 2006 12:04:32 +0000
parents 5e2a365af01b
children bc30c6270d9f
comparison
equal deleted inserted replaced
13850:0e1e59770cb0 19783:995aea35b05c
34 } 34 }
35 35
36 return TRUE; 36 return TRUE;
37 } 37 }
38 38
39 /*
40 * check the command is the command with payload content
41 * if it is return TRUE
42 * else return FALSE
43 */
44 static gboolean
45 isPayloadCmd(char *str)
46 {
47 if( (!strcmp(str,"ADL")) ||
48 (!strcmp(str,"GCF")) ||
49 (!strcmp(str,"MSG")) ||
50 (!strcmp(str,"QRY")) ||
51 (!strcmp(str,"RML")) ||
52 (!strcmp(str,"UBX")) ||
53 (!strcmp(str,"UBN")) ||
54 (!strcmp(str,"UUN")) ||
55 (!strcmp(str,"UUX"))){
56 return TRUE;
57 }
58
59 return FALSE;
60 }
61
62 /*get the payload positon*/
63 int getPayloadPosition(char *str)
64 {
65 /*because MSG has "MSG hotmail hotmail [payload length]"*/
66 if(!(strcmp(str,"MSG"))){
67 return 2;
68 }
69 return 1;
70 }
71 /*
72 * set command Payload length
73 */
74 int
75 setPayloadLen(MsnCommand *cmd)
76 {
77 char * param;
78
79 if(isPayloadCmd(cmd->command)){
80 if(!(strcmp(cmd->command,"MSG"))){
81 param = cmd->params[2];
82 }else{
83 param = cmd->params[1];
84 }
85 cmd->payload_len = is_num(param) ? atoi(param) : 0;
86 }else{
87 cmd->payload_len = 0;
88 }
89 return 0;
90 }
91
39 MsnCommand * 92 MsnCommand *
40 msn_command_from_string(const char *string) 93 msn_command_from_string(const char *string)
41 { 94 {
42 MsnCommand *cmd; 95 MsnCommand *cmd;
43 char *tmp; 96 char *tmp;
44 char *param_start; 97 char *param_start;
98 char *param;
99 int c;
45 100
46 g_return_val_if_fail(string != NULL, NULL); 101 g_return_val_if_fail(string != NULL, NULL);
47 102
48 tmp = g_strdup(string); 103 tmp = g_strdup(string);
49 param_start = strchr(tmp, ' '); 104 param_start = strchr(tmp, ' ');
50 105
51 cmd = g_new0(MsnCommand, 1); 106 cmd = g_new0(MsnCommand, 1);
52 cmd->command = tmp; 107 cmd->command = tmp;
53 108
54 if (param_start) 109 if (param_start){
55 {
56 char *param;
57 int c;
58
59 *param_start++ = '\0'; 110 *param_start++ = '\0';
60 cmd->params = g_strsplit(param_start, " ", 0); 111 cmd->params = g_strsplit(param_start, " ", 0);
61 112
62 for (c = 0; cmd->params[c]; c++); 113 for (c = 0; cmd->params[c]; c++);
63 cmd->param_count = c; 114 cmd->param_count = c;
64 115
65 param = cmd->params[0]; 116 param = cmd->params[0];
66 117
67 cmd->trId = is_num(param) ? atoi(param) : 0; 118 cmd->trId = is_num(param) ? atoi(param) : 0;
119 }else{
120 cmd->trId = 0;
68 } 121 }
69 else 122
70 cmd->trId = 0; 123 /*add payload Length checking*/
124 setPayloadLen(cmd);
125 gaim_debug_info("MaYuan","get payload len:%d\n",cmd->payload_len);
71 126
72 msn_command_ref(cmd); 127 msn_command_ref(cmd);
73 128
74 return cmd; 129 return cmd;
75 } 130 }