src/protocols/jabber/roster.c

changeset 7310
1346a99cba40
parent 7244
9ca1ebdc9213
child 7316
60ea2e0f1a97
equal deleted inserted replaced
7309:d332a31a840f 7310:1346a99cba40
115 115
116 void jabber_roster_parse(JabberStream *js, xmlnode *packet) 116 void jabber_roster_parse(JabberStream *js, xmlnode *packet)
117 { 117 {
118 xmlnode *query, *item, *group; 118 xmlnode *query, *item, *group;
119 const char *from = xmlnode_get_attrib(packet, "from"); 119 const char *from = xmlnode_get_attrib(packet, "from");
120 char *me1, *me2; 120
121 121 if(from) {
122 me1 = g_strdup_printf("%s@%s", js->user->node, js->user->domain); 122 char *me, *from_norm;
123 me2 = g_strdup_printf("%s/%s", me1, js->user->resource); 123 JabberID *from_jid = jabber_id_new(from);
124 124 gboolean invalid;
125 if(from && strcmp(from, me1) && strcmp(from, me2)) { 125
126 g_free(me1); 126 if(!from_jid)
127 g_free(me2); 127 return;
128 return; 128
129 } 129 from_norm = g_strdup_printf("%s@%s%s%s",
130 130 from_jid->node ? from_jid->node : "",
131 g_free(me1); 131 from_jid->domain,
132 g_free(me2); 132 from_jid->resource ? "/" : "",
133 from_jid->resource ? from_jid->resource : "");
134
135 if(from_jid->resource)
136 me = g_strdup_printf("%s@%s/%s", js->user->node, js->user->domain,
137 js->user->resource);
138 else
139 me = g_strdup_printf("%s@%s", js->user->node, js->user->domain);
140
141 invalid = g_utf8_collate(from_norm, me);
142 g_free(from_norm);
143 g_free(me);
144 jabber_id_free(from_jid);
145
146 if(invalid)
147 return;
148 }
133 149
134 query = xmlnode_get_child(packet, "query"); 150 query = xmlnode_get_child(packet, "query");
135 if(!query) 151 if(!query)
136 return; 152 return;
137 153

mercurial