Hi!
I wrote the attached patch to aim-t. It implements service discovery
("disco") for aim-t.
Tot kijk
Matthias
--
Fon: +49-(0)70 0770 07770 http://matthias.wimmer.name/
HAM: DB1MW xmpp:[EMAIL PROTECTED]
diff -Naur aim-transport/src/aimtrans.h aim-transport-disco/src/aimtrans.h --- aim-transport/src/aimtrans.h 2003-01-17 20:51:31.000000000 +0100 +++ aim-transport-disco/src/aimtrans.h 2003-12-05 11:26:06.000000000 +0100 @@ -18,6 +18,8 @@ #define AT_TRANS_VERSION "0.9" #define AT_NS_AUTH "aimtrans:data" #define AT_NS_ROSTER "aimtrans:roster" +#define NS_DISCO_ITEMS "http://jabber.org/protocol/disco#items" +#define NS_DISCO_INFO "http://jabber.org/protocol/disco#info" typedef struct { @@ -183,6 +185,8 @@ int at_iq_search(ati ti, jpacket jp); int at_iq_size(ati ti, jpacket jp); int at_iq_browse(ati ti, jpacket jp); +int at_iq_disco_items(ati ti, jpacket jp); +int at_iq_disco_info(ati ti, jpacket jp); /* messages.c */ int at_parse_incoming_im(aim_session_t *ass, diff -Naur aim-transport/src/iq.c aim-transport-disco/src/iq.c --- aim-transport/src/iq.c 2001-11-28 19:05:41.000000000 +0100 +++ aim-transport-disco/src/iq.c 2003-12-05 11:30:34.000000000 +0100 @@ -42,4 +42,6 @@ at_register_iqns(ti, NS_VERSION, &at_iq_version); at_register_iqns(ti, NS_SEARCH, &at_iq_search); at_register_iqns(ti, NS_BROWSE, &at_iq_browse); + at_register_iqns(ti, NS_DISCO_ITEMS, &at_iq_disco_items); + at_register_iqns(ti, NS_DISCO_INFO, &at_iq_disco_info); } diff -Naur aim-transport/src/iq_cb.c aim-transport-disco/src/iq_cb.c --- aim-transport/src/iq_cb.c 2003-01-15 17:51:02.000000000 +0100 +++ aim-transport-disco/src/iq_cb.c 2003-12-05 11:26:06.000000000 +0100 @@ -251,3 +251,90 @@ // WHY! DAMNIT! WHY? return 1; } + + +int at_iq_disco_items(ati ti, jpacket jp) +{ + xmlnode q; + + if(jpacket_subtype(jp) != JPACKET__GET) + { + at_bounce(ti, jp, TERROR_BAD); + return 1; + } + + jutil_iqresult(jp->x); + q = xmlnode_insert_tag(jp->x, "query"); + xmlnode_put_attrib(q, "xmlns", NS_DISCO_ITEMS); + + at_deliver(ti,jp->x); + + return 1; + +} + +int at_iq_disco_info(ati ti, jpacket jp) +{ + xmlnode q, info; + + if(jpacket_subtype(jp) != JPACKET__GET) + { + at_bounce(ti, jp, TERROR_BAD); + return 1; + } + + if(jp->to->user != NULL) + { + q = xmlnode_insert_tag(jutil_iqresult(jp->x),"query"); + xmlnode_put_attrib(q,"xmlns",NS_DISCO_INFO); + + info = xmlnode_insert_tag(q, "identity"); + xmlnode_put_attrib(info, "category", "client"); + xmlnode_put_attrib(info, "type", "pc"); + xmlnode_put_attrib(info, "name", jp->to->user); + + info = xmlnode_insert_tag(q, "feature"); + xmlnode_put_attrib(info, "var", NS_VCARD); + + info = xmlnode_insert_tag(q, "feature"); + xmlnode_put_attrib(info, "var", NS_LAST); + + info = xmlnode_insert_tag(q, "feature"); + xmlnode_put_attrib(info, "var", NS_TIME); + + info = xmlnode_insert_tag(q, "feature"); + xmlnode_put_attrib(info, "var", NS_VERSION); + + at_deliver(ti,jp->x); + return 1; + } + + q = xmlnode_insert_tag(jutil_iqresult(jp->x),"query"); + xmlnode_put_attrib(q,"xmlns",NS_DISCO_INFO); + + info = xmlnode_insert_tag(q, "identity"); + xmlnode_put_attrib(info, "category", "gateway"); + xmlnode_put_attrib(info, "type", "aim"); + xmlnode_put_attrib(info,"name",xmlnode_get_tag_data(ti->vcard,"FN")); + + info = xmlnode_insert_tag(q, "feature"); + xmlnode_put_attrib(info, "var", NS_VCARD); + + info = xmlnode_insert_tag(q, "feature"); + xmlnode_put_attrib(info, "var", NS_LAST); + + info = xmlnode_insert_tag(q, "feature"); + xmlnode_put_attrib(info, "var", NS_TIME); + + info = xmlnode_insert_tag(q, "feature"); + xmlnode_put_attrib(info, "var", NS_VERSION); + + info = xmlnode_insert_tag(q, "feature"); + xmlnode_put_attrib(info, "var", NS_GATEWAY); + + info = xmlnode_insert_tag(q, "feature"); + xmlnode_put_attrib(info, "var", NS_REGISTER); + + at_deliver(ti,jp->x); + return 1; +}
signature.asc
Description: Digital signature
