Mercurial > pidgin
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 |