一个基于exosip的软电话例子
【程序编程相关:单击菜单只运行一个子窗体实例的简单方法】 转贴自:http://www.coolboysky.com/oblog/more.asp?name=tucket&id=72 【推荐阅读:Java Map 集合类简介】 【扩展信息:利用JDBC编写能实现数据库连接与断开的】 http://blog.csdn.net/wffy由于这两个地方都有.exosip针对ua是对osip进行扩展,osip不提供任何快速产生请求消息与响应消息的方法,所有请求消息与响应消息的形成必须调用一组sip message api来手动组装完成,所以作者在osip上基础上开发了exosip,用exosip开发软电话非常方便,仅需几个api就可以完成.exosip中附带一个例子:josua,不过josua相对复杂了点,下面给出一个最简单的例子供大家参考,因为例子实在太简单所以没有给出注释,用到exosip的api的参数请参看exosip源代码,看懂这个例子再研究josua就很简单了.我使用的是osip 2.0.9+exosip 0.77.
#include "assert.h"
#include <conio.h> #include <iostream> #include <osip2/osip_mt.h> #include <exosip/exosip.h> #include <exosip/exosip_cfg.h>using namespace std;
class jcall;
class jcall {
public: int cid; int did; char reason_phrase[50]; int status_code; char textinfo[256]; char req_uri[256]; char local_uri[256]; char remote_uri[256]; char subject[256]; char remote_sdp_audio_ip[50]; int remote_sdp_audio_port; int payload; char payload_name[50]; int state; jcall() {} int build(exosip_event_t *je) { jcall *ca = this; ca->cid = je->cid; ca->did = je->did; if (ca->did<1 && ca->cid<1) { assert(0); return -1; /* not enough information for this event?? */ } osip_strncpy(ca->textinfo, je->textinfo, 255); osip_strncpy(ca->req_uri, je->req_uri, 255); osip_strncpy(ca->local_uri, je->local_uri, 255); osip_strncpy(ca->remote_uri, je->remote_uri, 255); osip_strncpy(ca->subject, je->subject, 255); if (ca->remote_sdp_audio_ip[0]==´\0´) { osip_strncpy(ca->remote_sdp_audio_ip, je->remote_sdp_audio_ip, 49); ca->remote_sdp_audio_port = je->remote_sdp_audio_port; ca->payload = je->payload; osip_strncpy(ca->payload_name, je->payload_name, 49); } if (je->reason_phrase[0]!=´\0´) { osip_strncpy(ca->reason_phrase, je->reason_phrase, 49); ca->status_code = je->status_code; ... 下一页