Sofia-SIP辅助文档十一 - Sofia SIP用户代理库 - nea - SIP事件模块
http://sofia-sip.sourceforge.net/refdocs/nea/index.html,翻译自官网的这张网页。
模块元信息
Sofia Event API提供操作SIP在线和会议服务中使用的事件接口。<sofia-sip/nea.h>头文件中定义了无论是服务端还是客户端都可以使用的接口。
- 联系人:
- Pekka Pessi < Pekka.Pessi@nokia-email.address.hidden>
- 状态:
- Sofia SIP Core library
- 许可:
- LGPL
NEA服务器和事件
创建NEA服务器
NEA服务器生成、接收和发送事件给订阅方。服务器是发布特定的,为每个发布功能创建一个服务器(need translate again)。
首先,server对象被创建。server对象使用NTA agent(nta_agent_t)用来处理出入的SIP消息。
下面的例子展示了创建NEA服务器的一种方式。函数nea_server_create()创建服务器。参数agent和root定义了事务引擎。第三个参数是发布者的地址。event_callback是回调函数指针,当一个新的用户订阅一个不存在的事件或者请求了一个不匹配的负载类型,回调函数会被调用。
presence_t *presence_create(su_root_t *root,nta_agent_t *agent,sip_contact_t const *m){presentity_t *pr = su_home_clone(p->p_home, sizeof (*pr));...pr->pr_nes =nea_server_create(agent, root,m->m_url,MAX_SUBSCRIBERS,event_callback, pr,SIPTAG_CONTACT(m),SIPTAG_SERVER_STR("Sofia-SIP NEA"),TAG_NULL());...}
创建事件
下一步创建事件。nea_event_create ()函数定义一个事件,它的包和内容类型(逗号分隔的列表)。presence_callback参数是一个回调函数。当有人订阅一个预定义的事件时会调用回调函数。
#define PRESENCE_PACKAGE "presence" #define XPIDF_MIME_TYPE "application/xpidf+xml" #define PIDF_MIME_TYPE "application/cpim-pidf+xml" ne = nea_event_create(pr->pr_nes, presence_callback, ep,PRESENCE_PACKAGE, NULL,PIDF_MIME_TYPE,PIDF_MIME_TYPE "," XPIDF_MIME_TYPE);
Operating with event payloads
一个新的负载可以通过nea_server_update()函数插入到事件中。第四个参数描述了是否已更新的内容是假的(为非授权订阅者)。如果第四个参数是0那么一个真的负载会被插入。如果事件之前未被内容类型ct所更新,那么将会为事件创建新的内容类型格式。否则,老的负载将会被新的所替换。
更新后,事件的订阅者会收到通知,被告知负载改变了。
nea_server_update(pr->pr_nes, home, event, 1,SIPTAG_CONTENT_TYPE(ct),SIPTAG_PAYLOAD(pl),TAG_END());nea_server_notify(pr->pr_nes, event);
在下面的代码中展示了获取事件的负载以及移除它。事件作为package_t结构体的一部分被定义。nea_payloads_get()函数被用来返回负载(在这个例子中内容类型被预定义为application/cpim-pidf+xml)。真的和假的负载被保存在nea_payloads_t结构体中。最后可以用nea_payload_remove()函数移除负载。
int remove_old_payload(package_t *ep){nea_payloads_t *np;sip_content_type_t *ct;sip_payload_t *real;sip_payload_t *fake;event = ep->ep_event;np = nea_payloads_get(event, PIDF_MIME_TYPE);ct = nea_content_type_get(np);real = nea_payload_get(np);fake = nea_fake_get(np);nea_payload_remove(ep->ep_home, np);return 0;}
Sofia-SIP辅助文档十一 - Sofia SIP用户代理库 - nea - SIP事件模块相关推荐
- 一个简单的解决方法:word文档打不开,错误提示mso.dll模块错误。
一个简单的解决方法:word文档打不开,错误提示mso.dll模块错误. 参考文章: (1)一个简单的解决方法:word文档打不开,错误提示mso.dll模块错误. (2)https://www.cn ...
- mamcache登录、_gomemcache首页、文档和下载 - memcache客户端库 - Go语言中文网 - Golang中文社区...
**安装 ** 使用 go get $ go get github.com/bradfitz/gomemcache/memcache 此命令后gomemcache即可使用.它的来源将是: $GOPAT ...
- Sofia-SIP辅助文档二四 - Sofia SIP用户代理库 - features特性模块
http://sofia-sip.sourceforge.net/refdocs/features/index.html,翻译自官网的这张网页. 模块元信息 features模块提供sofia-sip ...
- Sofia-SIP辅助文档十六 - Sofia SIP用户代理库 - msg - 消息解析模块
http://sofia-sip.sourceforge.net/refdocs/msg/index.html,翻译自官网的这张网页. MIME介绍参考:http://blog.csdn.net/cx ...
- 《鸟哥的Linux私房菜》第四版辅助文档
0.计算机概论 0.1.电脑:辅助人脑的好工具 0.1.2.一切设计的起点:CPU的架构 关于32位CPU和64位CPU的说明 32位CPU的意思就是CPU每次解析数据是32bits,也就是4B,那么 ...
- python读取pdf文档书签 bookmark_Python利用PyPDF2库获取PDF文件总页码实例
Python中可以利用PyPDF2库来获取该pdf文件的总页码,可以根据下面的方法一步步进行下去: 1.首先,要安装PyPDF2库,利用以下命令即可: pip install PyPDF2 2.接着, ...
- Qt文档阅读笔记-Qt跨平台库(Qt基本库)
Qt基本库是所有Qt平台的基础分.他能在所有支持开发的平台和测试平台上跑.这些库在Qt5中已经保持源代码和二进制的兼容. 基本模块(基本库)被其他特殊模块所附加. 下面是Qt基本模块(基本库)的列表: ...
- Qt文档阅读笔记-Qt单元测试中模拟GUI事件
这里先提下基本概念 官方的模拟GUI事件,就是调用QTest提供的函数,去模拟用户鼠标点击,用户输入等效果.从而达到模拟的功能,感觉这个功能非常的好. 如: QTest::keyClicks()主要是 ...
- AS3文档类调用FLASH元件库中元件
其实这个方法和调用FLASH中自带组件的方法是一样的. 图中我建了一个元件1,一个黑色的正方形,导出为 ak 在FlashDevelop里面写的代码如下: package { import flas ...
最新文章
- IT规划宜分步走 忌盲目好大喜功(载)
- JQuery UI之Autocomplete(2)后端获取数据
- 终极结束进程方法API
- postman使用过程中body中的form-data,x-www-form-urlencoded,raw,binary的简单记录
- Android开发 GradientDrawable详解
- .java中jar_java中的jar
- 关于计算机的病毒案例分析,实例解析蠕虫病毒的原理 -电脑资料
- 怎么把ide改成ahci_怎么IDE改成AHCI
- MongoDB数据库练习题
- 【机器学习】注意力机制
- 微型计算机登录密码忘记了怎么办,一种基于微型计算机的密码锁的制作方法
- Python 与 Matlab 矩阵操作对应表
- 能给客户带来什么价值_您给公司带来什么价值?
- 统一论:3G手机、云计算、SaaS、业务开发平台、SOA、BPEL
- 支付宝给微信好友转账!转了?好像又没转
- 《JS学习》Object对象
- 数学模型天气预测方法_预测即将到来的天气的新方法
- C++助教篇3_Week2不完全知识点
- 不可忽视的UPS电源电池除尘
- FPGA学习之路-ZCU106板子点亮PS侧LED