复旦光华之exosip-publish.docVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
复旦光华之exosip-publish

eXosip之publish 2010-12-07 13:22 publish客户端在osip库中的生存期: 客户端会是用来发送publish请求消息。在eXpublish_api.c文件中,调用eXosip_build_publish()函数,构造一个osip_message_t*结构的消息体,通过函数eXosip_publish (osip_message_t * message, const char *to)发送出去,这里的的第二个参数to,是用来指明这个publish消息是谁的。与服务端不同的是,在客户端里面有一个管理publish消息的结构(eXosip_pub_t),每一个to,对应一个eXosip_pub_t结构,在这个结构中包含了以下信息 struct eXosip_pub_t{ int p_id; int p_period; /* delay between registration 也就是在publish消息中的Expires头域值*/ char p_aor[256]; /* sip identity对应第二个参数const char *to */ char p_sip_etag[64]; /* sip_etag from 200ok 在客户端收到服务端的200Ok时,用其中的SIP-Etag头域值填充该字段*/ osip_transaction_t *p_last_tr;/*代表当前或者最后一个的事务结构指针*/ int p_retry; eXosip_pub_t *next; eXosip_pub_t *parent; }; 从最后两个字段来看,在osip库中,其实是用一个链表来管理所有用户的publish消息(也就是全局eXosip-j_pub来管理,当然此时是为空的,不一会儿这里将有一个publish消息要发送,此时会分配一个eXosip_pub_t结构给这个用户,因为这里第一个,所以这里eXosip-j_pub就指向了这个用户的eXosip_put_t结构,也就是说这个用户将会是在j_pub链表上的第一个用户,当这里有另一个用户B上来时,会将B的eXosip_pub_t结构加入到eXosip-j_pub链表中去,在这条链表中,查找用户的KEY就是结构中的p_aor字段。所以当B再一次发送时,就会在j_pub链表中找到一个eXosip_put_t的结构,然后只需要更新这个结构的某些字段即可,而不需要再分配亲的结构了)。这里可以先说下不同用户上来和相同用来上来,eXosip_pub_t结构的链表的变化。当用户A发送publish请求消息到服务端,首先会用to去eXosip-j_pub链表中查找有没有对应于用户A的eXosip_pub_t结构,这里是没有的(A第一次上来),所以会分配一个新的结构(这个过程中,会填充p_aor, p_period,p_id值),然后把这个结构添加到eXosip-j_pub链表中去,然后创建一个事务,这里会有个判断,看p_last_tr是否空,如果是不为空,则会将这个事务发到eXosip-j_transactions链表中去,等待释放事务,然后将p_last_tr指向新创建的事务;否则,将p_last_tr指向新创建的事务。这里用户A是第一次,所以会直接指向新的事务。等了一会儿,用户再来一次publish,这时就在eXosip-j_pub链表中能够找到用户A(根据p_aor字段),然后就会用p_sip_etag字段来填充这次的publish消息SIP-If-Match头域,同时将p_period字段值赋予当前这次publish消息中的Expires头域值,然后分配一个新的事务,由于用户A对应的eXosip_pub_t结构中p_last_tr是指向上一次publish消息产生的事务结构,所以在这里,先将上次的事务添加到eXosip-j_transactions链表中,等待释放事务,然后再将p_last_tr指向新分配的事务结构。publish在客户端几乎就是这种流程了。 下面将以一个完整的publish流程来举例说明下publish在osip库中的生存期。 step 1: 用户A initial publish 在应用程序中,调用函数 eXosip_build_publish (osip_message_t ** message, const char *to, const char *from, const char *route, const char *event, const char *expires, const char *

您可能关注的文档

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档