| 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 } |