libpurple/protocols/msn/command.c

branch
soc.2008.vv
changeset 26095
0eea4b8fd48c
parent 23842
5d868d301756
child 30945
b875cf477e19
equal deleted inserted replaced
23754:e4022bc47232 26095:0eea4b8fd48c
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 msn_check_payload_cmd(const char *str)
46 {
47 g_return_val_if_fail(str != NULL, FALSE);
48
49 if((!strcmp(str,"ADL")) ||
50 (!strcmp(str,"GCF")) ||
51 (!strcmp(str,"SG")) ||
52 (!strcmp(str,"MSG")) ||
53 (!strcmp(str,"RML")) ||
54 (!strcmp(str,"UBX")) ||
55 (!strcmp(str,"UBN")) ||
56 (!strcmp(str,"UUM")) ||
57 (!strcmp(str,"UBM")) ||
58 (!strcmp(str,"FQY")) ||
59 (!strcmp(str,"UUN")) ||
60 (!strcmp(str,"UUX")) ||
61 (!strcmp(str,"IPG")) ||
62 (is_num(str))){
63 return TRUE;
64 }
65
66 return FALSE;
67 }
68
69 /*
70 * set command Payload length
71 */
72 static void
73 msn_set_payload_len(MsnCommand *cmd)
74 {
75 char *param;
76 int len = 0;
77
78 if (msn_check_payload_cmd(cmd->command) && (cmd->param_count > 0)){
79 param = cmd->params[cmd->param_count - 1];
80 len = is_num(param) ? atoi(param) : 0;
81 }
82
83 cmd->payload_len = len;
84 }
85
86 MsnCommand * 39 MsnCommand *
87 msn_command_from_string(const char *string) 40 msn_command_from_string(const char *string)
88 { 41 {
89 MsnCommand *cmd; 42 MsnCommand *cmd;
90 char *param_start; 43 char *param_start;
96 param_start = strchr(cmd->command, ' '); 49 param_start = strchr(cmd->command, ' ');
97 50
98 if (param_start) 51 if (param_start)
99 { 52 {
100 *param_start++ = '\0'; 53 *param_start++ = '\0';
101 cmd->params = g_strsplit(param_start, " ", 0); 54 cmd->params = g_strsplit_set(param_start, " ", 0);
102 } 55 }
103 56
104 if (cmd->params != NULL) 57 if (cmd->params != NULL)
105 { 58 {
106 char *param;
107 int c; 59 int c;
108 60
109 for (c = 0; cmd->params[c]; c++); 61 for (c = 0; cmd->params[c] && cmd->params[c][0]; c++);
110 cmd->param_count = c; 62 cmd->param_count = c;
111 63
112 param = cmd->params[0]; 64 if (cmd->param_count) {
113 65 char *param = cmd->params[0];
114 cmd->trId = is_num(param) ? atoi(param) : 0; 66 cmd->trId = is_num(param) ? atoi(param) : 0;
67 } else {
68 cmd->trId = 0;
69 }
115 } 70 }
116 else 71 else
117 { 72 {
118 cmd->trId = 0; 73 cmd->trId = 0;
119 } 74 }
120
121 /* khc: Huh! */
122 /*add payload Length checking*/
123 msn_set_payload_len(cmd);
124 purple_debug_info("MSNP14","get payload len:%" G_GSIZE_FORMAT "\n", cmd->payload_len);
125 75
126 msn_command_ref(cmd); 76 msn_command_ref(cmd);
127 77
128 return cmd; 78 return cmd;
129 } 79 }

mercurial