comparison src/protocols/msn/notification.c @ 19796:3a15b4e5c336

[gaim-migrate @ 16716] add/delete contact function OK committed by MaYuan<mayuan2006@gmail.com> committer: Ethan Blanton <elb@pidgin.im>
author Ma Yuan <mayuan2006@gmail.com>
date Sat, 12 Aug 2006 10:30:30 +0000
parents 38e4a4b404e5
children 1ffbe358c877
comparison
equal deleted inserted replaced
19795:38e4a4b404e5 19796:3a15b4e5c336
32 #include "sync.h" 32 #include "sync.h"
33 #include "slplink.h" 33 #include "slplink.h"
34 34
35 static MsnTable *cbs_table; 35 static MsnTable *cbs_table;
36 36
37 /****************************************************************************
38 * Local Function Prototype
39 ****************************************************************************/
40 void msn_add_contact_xml(xmlnode *mlNode,char *passport,int list_op,int type);
41
37 /************************************************************************** 42 /**************************************************************************
38 * Main 43 * Main
39 **************************************************************************/ 44 **************************************************************************/
40 45
41 static void 46 static void
432 } 437 }
433 438
434 /************************************************************************** 439 /**************************************************************************
435 * Buddy Lists 440 * Buddy Lists
436 **************************************************************************/ 441 **************************************************************************/
442 /* add contact to xmlnode */
443 void
444 msn_add_contact_xml(xmlnode *mlNode,char *passport,int list_op,int type)
445 {
446 xmlnode *d_node,*c_node;
447 char **tokens;
448 char *email,*domain;
449 char *list_op_str,*type_str;
450
451 gaim_debug_info("MaYuan","passport:%s\n",passport);
452 tokens = g_strsplit(passport, "@", 2);
453 email = tokens[0];
454 domain = tokens[1];
455
456 /*find a domain Node*/
457 for(d_node = xmlnode_get_child(mlNode,"d"); d_node; d_node = xmlnode_get_next_twin(d_node)){
458 const char * attr = NULL;
459 gaim_debug_info("MaYuan","d_node:%s\n",d_node->name);
460 attr = xmlnode_get_attrib(d_node,"n");
461 if(attr == NULL){
462 continue;
463 }
464 if(!strcmp(attr,domain)){
465 break;
466 }
467 }
468 if(d_node == NULL){
469 /*domain not found, create a new domain Node*/
470 gaim_debug_info("MaYuan","get No d_node\n");
471 d_node = xmlnode_new("d");
472 xmlnode_set_attrib(d_node,"n",domain);
473 xmlnode_insert_child(mlNode,d_node);
474 }
475
476 /*create contact node*/
477 c_node = xmlnode_new("c");
478 xmlnode_set_attrib(c_node,"n",email);
479
480 list_op_str = g_strdup_printf("%d",list_op);
481 gaim_debug_info("MaYuan","list_op:%d\n",list_op_str);
482 xmlnode_set_attrib(c_node,"l",list_op_str);
483 g_free(list_op_str);
484 #if 0
485 type_str = g_strdup_printf("%d",type);
486 xmlnode_set_attrib(c_node,"t",type_str);
487 #else
488 type_str = g_strdup_printf("1");
489 xmlnode_set_attrib(c_node,"t",type_str);
490 g_free(type_str);
491 #endif
492 xmlnode_insert_child(d_node, c_node);
493 }
494
495 /*dump contact info to NS*/
437 void 496 void
438 dump_adl_cmd(MsnSession *session) 497 msn_notification_dump_contact(MsnSession *session)
439 { 498 {
440 MsnCmdProc *cmdproc; 499 MsnCmdProc *cmdproc;
441 MsnTransaction *trans; 500 MsnTransaction *trans;
442 MsnUserList *userlist; 501 MsnUserList *userlist;
443 MsnUser *user; 502 MsnUser *user;
444 GList *l; 503 GList *l;
445 xmlnode *adl_node,*d_node,*c_node; 504 xmlnode *adl_node;
446 char **tokens;
447 char *email,*domain;
448 char *payload; 505 char *payload;
449 char *list_op,*type;
450 int payload_len; 506 int payload_len;
451 507
452 cmdproc = session->notification->cmdproc; 508 cmdproc = session->notification->cmdproc;
453 userlist = session->userlist; 509 userlist = session->userlist;
454 adl_node = xmlnode_new("ml"); 510 adl_node = xmlnode_new("ml");
456 xmlnode_set_attrib(adl_node, "l", "1"); 512 xmlnode_set_attrib(adl_node, "l", "1");
457 513
458 /*get the userlist*/ 514 /*get the userlist*/
459 for (l = userlist->users; l != NULL; l = l->next){ 515 for (l = userlist->users; l != NULL; l = l->next){
460 user = l->data; 516 user = l->data;
461 517 msn_add_contact_xml(adl_node,user->passport,user->list_op,user->type);
462 gaim_debug_info("MaYuan","passport:%s\n",user->passport);
463 tokens = g_strsplit(user->passport, "@", 2);
464 email = tokens[0];
465 domain = tokens[1];
466
467 /*find a domain node*/
468 for(d_node = xmlnode_get_child(adl_node,"d"); d_node; d_node = xmlnode_get_next_twin(d_node)){
469 const char * attr = NULL;
470 gaim_debug_info("MaYuan","d_node:%s\n",d_node->name);
471 attr = xmlnode_get_attrib(d_node,"n");
472 if(attr == NULL){
473 continue;
474 }
475 if(!strcmp(attr,domain)){
476 break;
477 }
478 }
479 if(d_node == NULL){
480 gaim_debug_info("MaYuan","get No d_node\n");
481 d_node = xmlnode_new("d");
482 xmlnode_set_attrib(d_node,"n",domain);
483 xmlnode_insert_child(adl_node,d_node);
484 }
485
486 /*create contact node*/
487 c_node = xmlnode_new("c");
488 xmlnode_set_attrib(c_node,"n",email);
489
490 list_op = g_strdup_printf("%d",user->list_op);
491 gaim_debug_info("MaYuan","list_op:%d\n",user->list_op);
492 xmlnode_set_attrib(c_node,"l",list_op);
493 #if 0
494 type = g_strdup_printf("%d",user->type);
495 xmlnode_set_attrib(c_node,"t",type);
496 #else
497 type = g_strdup_printf("1");
498 xmlnode_set_attrib(c_node,"t",type);
499 #endif
500 xmlnode_insert_child(d_node, c_node);
501
502 g_free(list_op);
503 g_free(type);
504 } 518 }
505 519
506 payload = xmlnode_to_str(adl_node,&payload_len); 520 payload = xmlnode_to_str(adl_node,&payload_len);
521 xmlnode_free(adl_node);
507 522
508 gaim_debug_info("MaYuan","ADL{%s}\n",payload); 523 gaim_debug_info("MaYuan","ADL{%s}\n",payload);
509 trans = msn_transaction_new(cmdproc, "ADL","%d",strlen(payload)); 524 trans = msn_transaction_new(cmdproc, "ADL","%d",strlen(payload));
510
511 msn_transaction_set_payload(trans, payload, strlen(payload)); 525 msn_transaction_set_payload(trans, payload, strlen(payload));
512
513 msn_cmdproc_send_trans(cmdproc, trans); 526 msn_cmdproc_send_trans(cmdproc, trans);
514 } 527 }
515 528
516 static void 529 static void
517 blp_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 530 blp_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
1528 msn_notification_add_buddy(MsnNotification *notification, const char *list, 1541 msn_notification_add_buddy(MsnNotification *notification, const char *list,
1529 const char *who, const char *store_name, 1542 const char *who, const char *store_name,
1530 const char *group_id) 1543 const char *group_id)
1531 { 1544 {
1532 MsnCmdProc *cmdproc; 1545 MsnCmdProc *cmdproc;
1546 MsnTransaction *trans;
1547 xmlnode *adl_node;
1548 char *payload;
1549 int payload_len;
1550
1533 cmdproc = notification->servconn->cmdproc; 1551 cmdproc = notification->servconn->cmdproc;
1534 1552
1535 if (group_id != NULL && !strcmp(list, "FL")) 1553 if (strcmp(list, "FL") != 0){
1536 1554 }
1537 if (group_id >= 0){ 1555
1538 msn_cmdproc_send(cmdproc, "ADD", "%s %s %s %d", 1556 adl_node = xmlnode_new("ml");
1539 list, who, store_name, group_id); 1557 adl_node->child = NULL;
1540 }else{ 1558 xmlnode_set_attrib(adl_node, "l", "1");
1541 msn_cmdproc_send(cmdproc, "ADD", "%s %s %s", list, who, store_name); 1559
1542 } 1560 msn_add_contact_xml(adl_node,who,3,1);
1561
1562 payload = xmlnode_to_str(adl_node,&payload_len);
1563 xmlnode_free(adl_node);
1564
1565 gaim_debug_info("MaYuan","ADL{%s}\n",payload);
1566 trans = msn_transaction_new(cmdproc, "ADL","%d",strlen(payload));
1567 msn_transaction_set_payload(trans, payload, strlen(payload));
1568 msn_cmdproc_send_trans(cmdproc, trans);
1543 } 1569 }
1544 1570
1545 void 1571 void
1546 msn_notification_rem_buddy(MsnNotification *notification, const char *list, 1572 msn_notification_rem_buddy(MsnNotification *notification, const char *list,
1547 const char *who, const char *group_id) 1573 const char *who, const char *group_id)
1548 { 1574 {
1549 MsnCmdProc *cmdproc; 1575 MsnCmdProc *cmdproc;
1576 MsnTransaction *trans;
1577 xmlnode *rml_node;
1578 char *payload;
1579 int payload_len;
1580
1550 cmdproc = notification->servconn->cmdproc; 1581 cmdproc = notification->servconn->cmdproc;
1551 1582
1552 if (group_id != NULL){ 1583 rml_node = xmlnode_new("ml");
1553 msn_cmdproc_send(cmdproc, "REM", "%s %s %d", list, who, group_id); 1584 rml_node->child = NULL;
1554 }else{ 1585 xmlnode_set_attrib(rml_node, "l", "1");
1555 msn_cmdproc_send(cmdproc, "REM", "%s %s", list, who); 1586
1556 } 1587 msn_add_contact_xml(rml_node,who,3,1);
1588
1589 payload = xmlnode_to_str(rml_node,&payload_len);
1590 xmlnode_free(rml_node);
1591
1592 gaim_debug_info("MaYuan","RML{%s}\n",payload);
1593 trans = msn_transaction_new(cmdproc, "RML","%d",strlen(payload));
1594 msn_transaction_set_payload(trans, payload, strlen(payload));
1595 msn_cmdproc_send_trans(cmdproc, trans);
1557 } 1596 }
1558 1597
1559 /************************************************************************** 1598 /**************************************************************************
1560 * Init 1599 * Init
1561 **************************************************************************/ 1600 **************************************************************************/
1562
1563 void 1601 void
1564 msn_notification_init(void) 1602 msn_notification_init(void)
1565 { 1603 {
1566 /* TODO: check prp, blp */ 1604 /* TODO: check prp, blp */
1567 1605