comparison mcabber/src/jabglue.c @ 611:ad737139a144

Improve subscription management
author Mikael Berthe <mikael@lilotux.net>
date Thu, 15 Dec 2005 22:35:34 +0100
parents 0e8247cf2bd1
children 789ec6aed764
comparison
equal deleted inserted replaced
610:0e8247cf2bd1 611:ad737139a144
475 xmlnode_insert_tag(y, "remove"); 475 xmlnode_insert_tag(y, "remove");
476 jab_send(jc, x); 476 jab_send(jc, x);
477 xmlnode_free(x); 477 xmlnode_free(x);
478 } 478 }
479 479
480 // Unsubscribe this buddy from our presence notification 480 // Cancel the subscriptions
481 x = jutil_presnew(JPACKET__UNSUBSCRIBE, cleanjid, 0); 481 x = jutil_presnew(JPACKET__UNSUBSCRIBED, cleanjid, 0); // Cancel "from"
482 jab_send(jc, x);
483 xmlnode_free(x);
484 x = jutil_presnew(JPACKET__UNSUBSCRIBE, cleanjid, 0); // Cancel "to"
482 jab_send(jc, x); 485 jab_send(jc, x);
483 xmlnode_free(x); 486 xmlnode_free(x);
484 487
485 // Ask for removal from roster 488 // Ask for removal from roster
486 x = jutil_iqnew(JPACKET__SET, NS_ROSTER); 489 x = jutil_iqnew(JPACKET__SET, NS_ROSTER);
1223 1226
1224 static void handle_packet_s10n(jconn conn, char *type, char *from, 1227 static void handle_packet_s10n(jconn conn, char *type, char *from,
1225 xmlnode xmldata) 1228 xmlnode xmldata)
1226 { 1229 {
1227 xmlnode x; 1230 xmlnode x;
1231 char *r;
1232 char *buf;
1233
1234 r = jidtodisp(from);
1228 1235
1229 if (!strcmp(type, "subscribe")) { 1236 if (!strcmp(type, "subscribe")) {
1230 char *r; 1237 /* The sender wishes to subscribe to our presence */
1238 char *msg;
1231 int isagent; 1239 int isagent;
1232 r = jidtodisp(from); 1240
1233 isagent = (roster_gettype(r) & ROSTER_TYPE_AGENT) != 0; 1241 isagent = (roster_gettype(r) & ROSTER_TYPE_AGENT) != 0;
1234 g_free(r); 1242
1243 msg = xmlnode_get_tag_data(xmldata, "status");
1235 scr_LogPrint(LPRINT_LOGNORM, "<%s> wants to subscribe " 1244 scr_LogPrint(LPRINT_LOGNORM, "<%s> wants to subscribe "
1236 "to your network presence updates", from); 1245 "to your network presence updates", from);
1237 if (!isagent) { 1246 if (msg) {
1238 // FIXME we accept everybody... 1247 char *msg_noutf8 = from_utf8(msg);
1239 x = jutil_presnew(JPACKET__SUBSCRIBED, from, 0); 1248 if (msg_noutf8) {
1240 jab_send(jc, x); 1249 buf = g_strdup_printf("<%s> said: %s", from, msg_noutf8);
1241 xmlnode_free(x); 1250 scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO);
1242 } else { 1251 msg = strchr(buf, '\n');
1243 x = jutil_presnew(JPACKET__SUBSCRIBED, from, 0); 1252 if (msg) *msg = 0;
1244 jab_send(jc, x); 1253 scr_LogPrint(LPRINT_LOGNORM, buf);
1245 xmlnode_free(x); 1254 g_free(buf);
1255 g_free(msg_noutf8);
1256 }
1246 } 1257 }
1258
1259 // FIXME We accept everybody...
1260 x = jutil_presnew(JPACKET__SUBSCRIBED, from, 0);
1261 jab_send(jc, x);
1262 xmlnode_free(x);
1263 buf = g_strdup_printf("<%s> has subscribed to your presence updates", from);
1264 scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO);
1265 g_free(buf);
1247 } else if (!strcmp(type, "unsubscribe")) { 1266 } else if (!strcmp(type, "unsubscribe")) {
1267 /* The sender is unsubscribing from our presence */
1248 x = jutil_presnew(JPACKET__UNSUBSCRIBED, from, 0); 1268 x = jutil_presnew(JPACKET__UNSUBSCRIBED, from, 0);
1249 jab_send(jc, x); 1269 jab_send(jc, x);
1250 xmlnode_free(x); 1270 xmlnode_free(x);
1251 scr_LogPrint(LPRINT_LOGNORM, "<%s> wants to unsubscribe from " 1271 buf = g_strdup_printf("<%s> is unsubscribing from your "
1252 "your presence updates", from); 1272 "presence updates", from);
1273 scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO);
1274 scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
1275 g_free(buf);
1253 } else if (!strcmp(type, "subscribed")) { 1276 } else if (!strcmp(type, "subscribed")) {
1254 scr_LogPrint(LPRINT_LOGNORM, "<%s> has subscribed to your presence " 1277 /* The sender has allowed us to receive their presence */
1255 "updates", from); 1278 buf = g_strdup_printf("<%s> has allowed you to receive their "
1279 "presence updates", from);
1280 scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO);
1281 scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
1282 g_free(buf);
1256 } else if (!strcmp(type, "unsubscribed")) { 1283 } else if (!strcmp(type, "unsubscribed")) {
1257 scr_LogPrint(LPRINT_LOGNORM, "<%s> has unsubscribed from your presence " 1284 /* The subscription request has been denied or a previously-granted
1258 "updates", from); 1285 subscription has been cancelled */
1259 roster_unsubscribed(from); 1286 roster_unsubscribed(from);
1287 buf = g_strdup_printf("<%s> has cancelled your subscription to "
1288 "their presence updates", from);
1289 scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO);
1290 scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
1291 g_free(buf);
1260 } else { 1292 } else {
1261 scr_LogPrint(LPRINT_LOGNORM, "Received (un)subscription packet from <%s>" 1293 scr_LogPrint(LPRINT_LOGNORM, "Received unrecognized packet from <%s>, "
1262 " (type=%s)", from, (type ? type : "")); 1294 "type=%s", from, (type ? type : ""));
1263 1295
1264 } 1296 }
1297 g_free(r);
1265 } 1298 }
1266 1299
1267 static void packethandler(jconn conn, jpacket packet) 1300 static void packethandler(jconn conn, jpacket packet)
1268 { 1301 {
1269 char *p, *r, *s; 1302 char *p, *r, *s;