src/protocols/msn/notification.c

branch
soc.2006.msnp13
changeset 13856
a6511183749e
parent 13855
24cff9e060d7
child 13857
c890f17bf06d
equal deleted inserted replaced
13855:24cff9e060d7 13856:a6511183749e
111 111
112 *c++ = g_strdup("CVR0"); 112 *c++ = g_strdup("CVR0");
113 113
114 vers = g_strjoinv(" ", a); 114 vers = g_strjoinv(" ", a);
115 115
116 if (session->login_step == MSN_LOGIN_STEP_START) 116 if (session->login_step == MSN_LOGIN_STEP_START){
117 msn_session_set_login_step(session, MSN_LOGIN_STEP_HANDSHAKE); 117 msn_session_set_login_step(session, MSN_LOGIN_STEP_HANDSHAKE);
118 else 118 }else{
119 msn_session_set_login_step(session, MSN_LOGIN_STEP_HANDSHAKE2); 119 msn_session_set_login_step(session, MSN_LOGIN_STEP_HANDSHAKE2);
120 }
120 121
121 msn_cmdproc_send(cmdproc, "VER", "%s", vers); 122 msn_cmdproc_send(cmdproc, "VER", "%s", vers);
122 123
123 g_strfreev(a); 124 g_strfreev(a);
124 g_free(vers); 125 g_free(vers);
242 /* Parse the challenge data. */ 243 /* Parse the challenge data. */
243 244
244 elems = g_strsplit(cmd->params[3], ",", 0); 245 elems = g_strsplit(cmd->params[3], ",", 0);
245 246
246 for (cur = elems; *cur != NULL; cur++){ 247 for (cur = elems; *cur != NULL; cur++){
247 tokens = g_strsplit(*cur, "=", 2); 248 tokens = g_strsplit(*cur, "=", 2);
249 // gaim_debug_info("MaYuan","challenge %p,key:%s,value:%s\n",
250 // session->nexus->challenge_data,tokens[0],tokens[1]);
251 if(tokens[0]&&tokens[1])
248 g_hash_table_insert(session->nexus->challenge_data, tokens[0], tokens[1]); 252 g_hash_table_insert(session->nexus->challenge_data, tokens[0], tokens[1]);
249 /* Don't free each of the tokens, only the array. */ 253 /* Don't free each of the tokens, only the array. */
250 g_free(tokens); 254 g_free(tokens);
251 } 255 }
252 256
253 g_strfreev(elems); 257 g_strfreev(elems);
254 258
255 msn_session_set_login_step(session, MSN_LOGIN_STEP_AUTH_START); 259 msn_session_set_login_step(session, MSN_LOGIN_STEP_AUTH_START);
294 session = cmdproc->session; 298 session = cmdproc->session;
295 account = session->account; 299 account = session->account;
296 300
297 g_snprintf(proto_str, sizeof(proto_str), "MSNP%d", session->protocol_ver); 301 g_snprintf(proto_str, sizeof(proto_str), "MSNP%d", session->protocol_ver);
298 302
299 for (i = 1; i < cmd->param_count; i++){ 303 for (i = 1; i < cmd->param_count -1; i++){
300 // gaim_debug_info("MaYuan","%s\,proto_str:%s\n",cmd->params[i],proto_str); 304 gaim_debug_info("MaYuan","%s\,proto_str:%s\n",cmd->params[i],proto_str);
301 if (!strcmp(cmd->params[i], proto_str)) { 305 if (strcmp(cmd->params[i], proto_str) >= 0) {
302 protocol_supported = TRUE; 306 protocol_supported = TRUE;
303 break; 307 break;
304 } 308 }
305 } 309 }
306 310
311 } 315 }
312 316
313 /* 317 /*
314 * Windows Live Messenger 8.0 318 * Windows Live Messenger 8.0
315 * Notice :CVR String discriminate! 319 * Notice :CVR String discriminate!
320 * reference of http://www.microsoft.com/globaldev/reference/oslocversion.mspx
321 * to see the Local ID
316 */ 322 */
317 msn_cmdproc_send(cmdproc, "CVR", 323 msn_cmdproc_send(cmdproc, "CVR",
318 // "0x0409 winnt 5.1 i386 MSG80BETA 8.0.0689 msmsgs %s", 324 // "0x0409 winnt 5.1 i386 MSG80BETA 8.0.0689 msmsgs %s",
319 "0x0804 winnt 5.1 i386 MSNMSGR 8.0.0792 msmsgs %s", 325 "0x0804 winnt 5.1 i386 MSNMSGR 8.0.0792 msmsgs %s",
320 gaim_account_get_username(account)); 326 gaim_account_get_username(account));
414 g_snprintf(buf + (i*2), 3, "%02x", digest[i]); 420 g_snprintf(buf + (i*2), 3, "%02x", digest[i]);
415 } 421 }
416 #else 422 #else
417 msn_handle_chl(cmd->params[1], buf); 423 msn_handle_chl(cmd->params[1], buf);
418 #endif 424 #endif
419 gaim_debug_info("MaYuan","<<challenge:{%s}:{%s}\n",cmd->params[1],buf); 425 // gaim_debug_info("MaYuan","<<challenge:{%s}:{%s}\n",cmd->params[1],buf);
420 trans = msn_transaction_new(cmdproc, "QRY", "%s 32", MSNP13_WLM_PRODUCT_ID); 426 trans = msn_transaction_new(cmdproc, "QRY", "%s 32", MSNP13_WLM_PRODUCT_ID);
421 427
422 msn_transaction_set_payload(trans, buf, 32); 428 msn_transaction_set_payload(trans, buf, 32);
423 429
424 msn_cmdproc_send_trans(cmdproc, trans); 430 msn_cmdproc_send_trans(cmdproc, trans);
436 MsnUser *user; 442 MsnUser *user;
437 GList *l; 443 GList *l;
438 xmlnode *adl_node,*d_node,*c_node; 444 xmlnode *adl_node,*d_node,*c_node;
439 char **tokens; 445 char **tokens;
440 char *email,*domain; 446 char *email,*domain;
441 char * payload,*attr; 447 char *payload;
442 char *list_op,*type; 448 char *list_op,*type;
443 int payload_len; 449 int payload_len;
444 450
445 cmdproc = session->notification->cmdproc; 451 cmdproc = session->notification->cmdproc;
446 userlist = session->userlist; 452 userlist = session->userlist;
457 email = tokens[0]; 463 email = tokens[0];
458 domain = tokens[1]; 464 domain = tokens[1];
459 465
460 /*find a domain node*/ 466 /*find a domain node*/
461 for(d_node = xmlnode_get_child(adl_node,"d"); d_node; d_node = xmlnode_get_next_twin(d_node)){ 467 for(d_node = xmlnode_get_child(adl_node,"d"); d_node; d_node = xmlnode_get_next_twin(d_node)){
468 const char * attr = NULL;
462 gaim_debug_info("MaYuan","d_node:%s\n",d_node->name); 469 gaim_debug_info("MaYuan","d_node:%s\n",d_node->name);
463 attr = xmlnode_get_attrib(d_node,"n"); 470 attr = xmlnode_get_attrib(d_node,"n");
464 if(attr == NULL){ 471 if(attr == NULL){
465 continue; 472 continue;
466 } 473 }
480 xmlnode_set_attrib(c_node,"n",email); 487 xmlnode_set_attrib(c_node,"n",email);
481 488
482 list_op = g_strdup_printf("%d",user->list_op); 489 list_op = g_strdup_printf("%d",user->list_op);
483 gaim_debug_info("MaYuan","list_op:%d\n",user->list_op); 490 gaim_debug_info("MaYuan","list_op:%d\n",user->list_op);
484 xmlnode_set_attrib(c_node,"l",list_op); 491 xmlnode_set_attrib(c_node,"l",list_op);
485 #if 1 492 #if 0
486 type = g_strdup_printf("%d",user->type); 493 type = g_strdup_printf("%d",user->type);
487 xmlnode_set_attrib(c_node,"t",type); 494 xmlnode_set_attrib(c_node,"t",type);
488 #else 495 #else
489 xmlnode_set_attrib(c_node,"t","1"); 496 type = g_strdup_printf("1");
497 xmlnode_set_attrib(c_node,"t",type);
490 #endif 498 #endif
491 xmlnode_insert_child(d_node, c_node); 499 xmlnode_insert_child(d_node, c_node);
492 500
493 g_free(list_op); 501 g_free(list_op);
494 g_free(type); 502 g_free(type);
495 } 503 }
496 504
497 payload = xmlnode_to_str(adl_node,payload_len); 505 payload = xmlnode_to_str(adl_node,&payload_len);
498 506
499 gaim_debug_info("MaYuan","ADL{%s}\n",payload); 507 gaim_debug_info("MaYuan","ADL{%s}\n",payload);
500 trans = msn_transaction_new(cmdproc, "ADL","%d",strlen(payload)); 508 trans = msn_transaction_new(cmdproc, "ADL","%d",strlen(payload));
501 509
502 msn_transaction_set_payload(trans, payload, strlen(payload)); 510 msn_transaction_set_payload(trans, payload, strlen(payload));
503 511
504 msn_cmdproc_send_trans(cmdproc, trans); 512 msn_cmdproc_send_trans(cmdproc, trans);
505 } 513 }
506 514
507 static void 515 static void
516 blp_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
517 {
518 gaim_debug_info("MaYuan","Process BLP\n");
519 }
520
521 static void
508 adl_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 522 adl_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
509 { 523 {
510 524 gaim_debug_info("MaYuan","Process ADL\n");
511 } 525 }
512 526
513 static void 527 static void
514 rml_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 528 rml_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
515 { 529 {
764 778
765 msn_user_set_friendly_name(user, friendly); 779 msn_user_set_friendly_name(user, friendly);
766 780
767 if (session->protocol_ver >= 9){ 781 if (session->protocol_ver >= 9){
768 if (cmd->param_count == 5){ 782 if (cmd->param_count == 5){
769 msnobj = 783 msnobj = msn_object_new_from_string(gaim_url_decode(cmd->params[4]));
770 msn_object_new_from_string(gaim_url_decode(cmd->params[4]));
771 msn_user_set_object(user, msnobj); 784 msn_user_set_object(user, msnobj);
772 }else{ 785 }else{
773 msn_user_set_object(user, NULL); 786 msn_user_set_object(user, NULL);
774 } 787 }
775 } 788 }
1201 gaim_debug_info("MaYuan","Processing GCF... \n"); 1214 gaim_debug_info("MaYuan","Processing GCF... \n");
1202 if(cmd->payload_len == 0){ 1215 if(cmd->payload_len == 0){
1203 return; 1216 return;
1204 } 1217 }
1205 /*get the payload content*/ 1218 /*get the payload content*/
1219 gaim_debug_info("MaYuan","GCF{%s}\n",cmd->payload);
1206 } 1220 }
1207 1221
1208 static void 1222 static void
1209 sbs_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 1223 sbs_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
1210 { 1224 {
1211 gaim_debug_info("MaYuan","Processing SBS... \n"); 1225 gaim_debug_info("MaYuan","Processing SBS... \n");
1212 if(cmd->payload_len == 0){ 1226 if(cmd->payload_len == 0){
1213 return; 1227 return;
1214 } 1228 }
1215 /*get the payload content*/ 1229 /*get the payload content*/
1230 }
1231
1232 static void
1233 ubx_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
1234 {
1235 gaim_debug_info("MaYuan","UBX... \n");
1236 }
1237
1238 static void
1239 uux_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
1240 {
1241 gaim_debug_info("MaYuan","UUX... \n");
1216 } 1242 }
1217 1243
1218 /************************************************************************** 1244 /**************************************************************************
1219 * Message Types 1245 * Message Types
1220 **************************************************************************/ 1246 **************************************************************************/
1436 } 1462 }
1437 1463
1438 void 1464 void
1439 msn_notification_add_buddy(MsnNotification *notification, const char *list, 1465 msn_notification_add_buddy(MsnNotification *notification, const char *list,
1440 const char *who, const char *store_name, 1466 const char *who, const char *store_name,
1441 int group_id) 1467 const char *group_id)
1442 { 1468 {
1443 MsnCmdProc *cmdproc; 1469 MsnCmdProc *cmdproc;
1444 cmdproc = notification->servconn->cmdproc; 1470 cmdproc = notification->servconn->cmdproc;
1445 1471
1446 if (group_id < 0 && !strcmp(list, "FL")) 1472 if (group_id != NULL && !strcmp(list, "FL"))
1447 group_id = 0; 1473
1448 1474 if (group_id >= 0){
1449 if (group_id >= 0)
1450 {
1451 msn_cmdproc_send(cmdproc, "ADD", "%s %s %s %d", 1475 msn_cmdproc_send(cmdproc, "ADD", "%s %s %s %d",
1452 list, who, store_name, group_id); 1476 list, who, store_name, group_id);
1453 } 1477 }else{
1454 else
1455 {
1456 msn_cmdproc_send(cmdproc, "ADD", "%s %s %s", list, who, store_name); 1478 msn_cmdproc_send(cmdproc, "ADD", "%s %s %s", list, who, store_name);
1457 } 1479 }
1458 } 1480 }
1459 1481
1460 void 1482 void
1461 msn_notification_rem_buddy(MsnNotification *notification, const char *list, 1483 msn_notification_rem_buddy(MsnNotification *notification, const char *list,
1462 const char *who, int group_id) 1484 const char *who, const char *group_id)
1463 { 1485 {
1464 MsnCmdProc *cmdproc; 1486 MsnCmdProc *cmdproc;
1465 cmdproc = notification->servconn->cmdproc; 1487 cmdproc = notification->servconn->cmdproc;
1466 1488
1467 if (group_id >= 0) 1489 if (group_id != NULL){
1468 {
1469 msn_cmdproc_send(cmdproc, "REM", "%s %s %d", list, who, group_id); 1490 msn_cmdproc_send(cmdproc, "REM", "%s %s %d", list, who, group_id);
1470 } 1491 }else{
1471 else
1472 {
1473 msn_cmdproc_send(cmdproc, "REM", "%s %s", list, who); 1492 msn_cmdproc_send(cmdproc, "REM", "%s %s", list, who);
1474 } 1493 }
1475 } 1494 }
1476 1495
1477 /************************************************************************** 1496 /**************************************************************************
1487 1506
1488 /* Synchronous */ 1507 /* Synchronous */
1489 msn_table_add_cmd(cbs_table, "CHG", "CHG", NULL); 1508 msn_table_add_cmd(cbs_table, "CHG", "CHG", NULL);
1490 msn_table_add_cmd(cbs_table, "CHG", "ILN", iln_cmd); 1509 msn_table_add_cmd(cbs_table, "CHG", "ILN", iln_cmd);
1491 msn_table_add_cmd(cbs_table, "ADD", "ADD", add_cmd); 1510 msn_table_add_cmd(cbs_table, "ADD", "ADD", add_cmd);
1492 msn_table_add_cmd(cbs_table, "ADD", "ILN", iln_cmd); 1511 msn_table_add_cmd(cbs_table, "ADL", "ILN", iln_cmd);
1493 msn_table_add_cmd(cbs_table, "REM", "REM", rem_cmd); 1512 msn_table_add_cmd(cbs_table, "REM", "REM", rem_cmd);
1494 msn_table_add_cmd(cbs_table, "USR", "USR", usr_cmd); 1513 msn_table_add_cmd(cbs_table, "USR", "USR", usr_cmd);
1495 msn_table_add_cmd(cbs_table, "USR", "XFR", xfr_cmd); 1514 msn_table_add_cmd(cbs_table, "USR", "XFR", xfr_cmd);
1496 msn_table_add_cmd(cbs_table, "USR", "GCF", gcf_cmd); 1515 msn_table_add_cmd(cbs_table, "USR", "GCF", gcf_cmd);
1497 msn_table_add_cmd(cbs_table, "SYN", "SYN", syn_cmd); 1516 msn_table_add_cmd(cbs_table, "SYN", "SYN", syn_cmd);
1498 msn_table_add_cmd(cbs_table, "CVR", "CVR", cvr_cmd); 1517 msn_table_add_cmd(cbs_table, "CVR", "CVR", cvr_cmd);
1499 msn_table_add_cmd(cbs_table, "VER", "VER", ver_cmd); 1518 msn_table_add_cmd(cbs_table, "VER", "VER", ver_cmd);
1500 msn_table_add_cmd(cbs_table, "REA", "REA", rea_cmd); 1519 msn_table_add_cmd(cbs_table, "REA", "REA", rea_cmd);
1501 msn_table_add_cmd(cbs_table, "PRP", "PRP", prp_cmd); 1520 msn_table_add_cmd(cbs_table, "PRP", "PRP", prp_cmd);
1502 /* msn_table_add_cmd(cbs_table, "BLP", "BLP", blp_cmd); */ 1521 msn_table_add_cmd(cbs_table, "BLP", "BLP", blp_cmd);
1503 msn_table_add_cmd(cbs_table, "BLP", "BLP", NULL); 1522 // msn_table_add_cmd(cbs_table, "BLP", "BLP", NULL);
1504 msn_table_add_cmd(cbs_table, "REG", "REG", reg_cmd); 1523 msn_table_add_cmd(cbs_table, "REG", "REG", reg_cmd);
1505 msn_table_add_cmd(cbs_table, "ADG", "ADG", adg_cmd); 1524 msn_table_add_cmd(cbs_table, "ADG", "ADG", adg_cmd);
1506 msn_table_add_cmd(cbs_table, "RMG", "RMG", rmg_cmd); 1525 msn_table_add_cmd(cbs_table, "RMG", "RMG", rmg_cmd);
1507 msn_table_add_cmd(cbs_table, "XFR", "XFR", xfr_cmd); 1526 msn_table_add_cmd(cbs_table, "XFR", "XFR", xfr_cmd);
1508 1527
1513 msn_table_add_cmd(cbs_table, NULL, "SBS", sbs_cmd); 1532 msn_table_add_cmd(cbs_table, NULL, "SBS", sbs_cmd);
1514 msn_table_add_cmd(cbs_table, NULL, "NOT", not_cmd); 1533 msn_table_add_cmd(cbs_table, NULL, "NOT", not_cmd);
1515 1534
1516 msn_table_add_cmd(cbs_table, NULL, "CHL", chl_cmd); 1535 msn_table_add_cmd(cbs_table, NULL, "CHL", chl_cmd);
1517 msn_table_add_cmd(cbs_table, NULL, "REM", rem_cmd); 1536 msn_table_add_cmd(cbs_table, NULL, "REM", rem_cmd);
1518 msn_table_add_cmd(cbs_table, NULL, "ADD", add_cmd); 1537 msn_table_add_cmd(cbs_table, NULL, "ADL", adl_cmd);
1519 1538
1520 msn_table_add_cmd(cbs_table, NULL, "QRY", NULL); 1539 msn_table_add_cmd(cbs_table, NULL, "QRY", NULL);
1521 msn_table_add_cmd(cbs_table, NULL, "QNG", NULL); 1540 msn_table_add_cmd(cbs_table, NULL, "QNG", NULL);
1522 msn_table_add_cmd(cbs_table, NULL, "FLN", fln_cmd); 1541 msn_table_add_cmd(cbs_table, NULL, "FLN", fln_cmd);
1523 msn_table_add_cmd(cbs_table, NULL, "NLN", nln_cmd); 1542 msn_table_add_cmd(cbs_table, NULL, "NLN", nln_cmd);
1524 msn_table_add_cmd(cbs_table, NULL, "ILN", iln_cmd); 1543 msn_table_add_cmd(cbs_table, NULL, "ILN", iln_cmd);
1525 msn_table_add_cmd(cbs_table, NULL, "OUT", out_cmd); 1544 msn_table_add_cmd(cbs_table, NULL, "OUT", out_cmd);
1526 msn_table_add_cmd(cbs_table, NULL, "RNG", rng_cmd); 1545 msn_table_add_cmd(cbs_table, NULL, "RNG", rng_cmd);
1546
1547 msn_table_add_cmd(cbs_table, NULL, "UBX", ubx_cmd);
1548 msn_table_add_cmd(cbs_table, NULL, "UUX", uux_cmd);
1527 1549
1528 msn_table_add_cmd(cbs_table, NULL, "URL", url_cmd); 1550 msn_table_add_cmd(cbs_table, NULL, "URL", url_cmd);
1529 1551
1530 msn_table_add_cmd(cbs_table, "fallback", "XFR", xfr_cmd); 1552 msn_table_add_cmd(cbs_table, "fallback", "XFR", xfr_cmd);
1531 1553

mercurial