libstrophe库链接http://strophe.im/libstrophe/
libstrophe库在github上的链接https://github.com/Metajack/libstrophe
LIBSTROPHE
libstrophe是一个XMPP客户端和组件通信的C库。其目标是建立一个可移植的,可用快捷的,可靠的,文档齐全的,并能完全实现XMPP规范的开发工具库。
主要有两个部分组成:
1. 对基于XMPP信息体的解析与组装
2. 实现基于XMPP协议与XMPP SERVER或者其他XMPP实体间的通讯
eg:数据流
<iq from= "google.com" type="set" id="1">\
<pubsub xmlns="http://jabber.org/protocol/pubsub">\
<publish node="http://xmppgoogle.org/google_event">\
<item>\
<status xmlns="http://xmppgoogle.org/google/commands/objects/status\" object_type=\"dev\" event=\"added\" from="google.com">\
<object object_type=\"dev\" object_id=\"devid\" owner_id=\"owner_id\">\
</status>\
</item>\
</publish>\
</pubsub>\
</iq>
eg:C语言
void send_iq(xmpp_conn_t *const conn,)
{
xmpp_stanza_t *iq,*pubsub,*publish,*item,*status,*object;
iq = xmpp_stanza_new(ctx);
xmpp_stanza_set_name(iq,"iq");
xmpp_stanza_set_attribute(iq,"from","google.com");
xmpp_stanza_set_type(iq,"set");
xmpp_stanza_set_id(iq,"1");
pubsub = xmpp_stanza_new(ctx);
xmpp_stanza_set_name(pubsub,"pubsub");
xmpp_stanza_set_ns(pubsub,"http://jabber.org/protocol/pubsub");
xmpp_stanza_add_child(iq,pubsub);
item= xmpp_stanza_new(ctx);
xmpp_stanza_set_name(item,"item");
xmpp_stanza_add_child(publish,item);
status = xmpp_stanza_new(ctx);
xmpp_stanza_set_name(status,"status");
xmpp_stanza_set_ns(status,"http://xmppgoogle.org/google/commands/objects/status");
xmpp_stanza_set_attribute(status,"object_type","dev");
xmpp_stanza_set_attribute(status,"event","added");
xmpp_stanza_set_attribute(status,"google.com");
xmpp_stanza_add_child(item,status);
object= xmpp_stanza_new(ctx);
xmpp_stanza_set_name(object,"object");
xmpp_stanza_set_attribute(object,"dev");
xmpp_stanza_set_attribute(object,"object_id","devid");
xmpp_stanza_set_attribute(object,"owner_id","owner_id");
xmpp_stanza_add_child(status,object);
xmpp_stanza_release(object);
xmpp_stanza_release(status);
xmpp_stanza_release(item);
xmpp_stanza_release(publish);
xmpp_stanza_release(pubsub);
xmpp_stanza_send(conn,iq);
xmpp_stanza_release(iq);
}