comparison mcabber/src/jabglue.c @ 438:b44be19d6229

Handle multiple resources for the same buddy
author Mikael Berthe <mikael@lilotux.net>
date Mon, 19 Sep 2005 23:32:42 +0200
parents 802da817a684
children 51b8f10cfeb8
comparison
equal deleted inserted replaced
437:170f1aa12989 438:b44be19d6229
97 char *jidtodisp(const char *jid) 97 char *jidtodisp(const char *jid)
98 { 98 {
99 char *ptr; 99 char *ptr;
100 char *alias; 100 char *alias;
101 101
102 while ((alias = g_strdup(jid)) == NULL) 102 alias = g_strdup(jid);
103 safe_usleep(100);
104 103
105 if ((ptr = strchr(alias, '/')) != NULL) { 104 if ((ptr = strchr(alias, '/')) != NULL) {
106 *ptr = 0; 105 *ptr = 0;
107 } 106 }
108 return alias; 107 return alias;
708 } 707 }
709 708
710 void packethandler(jconn conn, jpacket packet) 709 void packethandler(jconn conn, jpacket packet)
711 { 710 {
712 char *p, *r; 711 char *p, *r;
713 const char *m; 712 const char *m, *rname;
714 xmlnode x, y; 713 xmlnode x, y;
715 char *from=NULL, *type=NULL, *body=NULL, *enc=NULL; 714 char *from=NULL, *type=NULL, *body=NULL, *enc=NULL;
716 char *ns=NULL; 715 char *ns=NULL;
717 char *id=NULL; 716 char *id=NULL;
718 enum imstatus ust; 717 enum imstatus ust;
718 char bpprio;
719 719
720 jb_reset_keepalive(); // reset keepalive delay 720 jb_reset_keepalive(); // reset keepalive delay
721 jpacket_reset(packet); 721 jpacket_reset(packet);
722 722
723 p = xmlnode_get_attrib(packet->x, "from"); if (p) from = p; 723 p = xmlnode_get_attrib(packet->x, "from"); if (p) from = p;
901 if ((x = xmlnode_get_tag(packet->x, "error")) != NULL) 901 if ((x = xmlnode_get_tag(packet->x, "error")) != NULL)
902 display_server_error(x); 902 display_server_error(x);
903 g_free(r); 903 g_free(r);
904 break; 904 break;
905 } 905 }
906 x = xmlnode_get_tag(packet->x, "show"); 906
907 p = xmlnode_get_tag_data(packet->x, "priority");
908 if (p && *p) bpprio = (gchar)atoi(p);
909 else bpprio = 0;
910
907 ust = available; 911 ust = available;
908 912 p = xmlnode_get_tag_data(packet->x, "show");
909 if (x) { 913 if (p) {
910 p = xmlnode_get_data(x); if (p) ns = p; 914 if (!strcmp(p, "away")) ust = away;
911 915 else if (!strcmp(p, "dnd")) ust = dontdisturb;
912 if (ns) { 916 else if (!strcmp(p, "xa")) ust = notavail;
913 if (!strcmp(ns, "away")) ust = away; 917 else if (!strcmp(p, "chat")) ust = freeforchat;
914 else if (!strcmp(ns, "dnd")) ust = dontdisturb;
915 else if (!strcmp(ns, "xa")) ust = notavail;
916 else if (!strcmp(ns, "chat")) ust = freeforchat;
917 }
918 } 918 }
919 919
920 if (type && !strcmp(type, "unavailable")) 920 if (type && !strcmp(type, "unavailable"))
921 ust = offline; 921 ust = offline;
922 922
925 else 925 else
926 p = NULL; 926 p = NULL;
927 927
928 // Call hk_statuschange() if status has changed or if the 928 // Call hk_statuschange() if status has changed or if the
929 // status message is different 929 // status message is different
930 m = roster_getstatusmsg(r); 930 rname = strchr(from, '/');
931 if ((ust != roster_getstatus(r)) || (p && (!m || strcmp(p, m)))) 931 if (rname) rname++;
932 hk_statuschange(r, 0, ust, p); 932 m = roster_getstatusmsg(r, rname);
933 if ((ust != roster_getstatus(r, rname)) || (p && (!m || strcmp(p, m))))
934 hk_statuschange(r, rname, bpprio, 0, ust, p);
933 g_free(r); 935 g_free(r);
934 if (p) g_free(p); 936 if (p) g_free(p);
935 break; 937 break;
936 938
937 case JPACKET_S10N: 939 case JPACKET_S10N: