资源描述:
《一个eXosip的例子》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一个基于exosip的软电话例子exosip针对UA是对osip进行扩展,oSIP不提供任何快速产生请求消息和响应消息的方法,所有请求消息和响应消息的形成必须调用一组sipmessageapi来手动组装完成,所以作者在osip上基础上开发了exosip,用exosip开发软电话非常方便,仅需几个API就可以完成.exosip中附带一个例子:josua,不过josua相对复杂了点,下面给出一个最简单的例子供大家参考,因为例子实在太简单所以没有给出注释,用到exosip的API的参数请参看exosip源代码,看懂这个例子再研究josu
2、a就很简单了.我使用的是osip2.0.9+exosip0.77.#include"assert.h"#include#include#include#include#includeusingnamespacestd;classjcall;classjcall{public: intcid; intdid; charreason_phrase[50]; int status_code
3、; chartextinfo[256]; charreq_uri[256]; charlocal_uri[256]; charremote_uri[256]; charsubject[256]; charremote_sdp_audio_ip[50]; int remote_sdp_audio_port; int payload; charpayload_name[50]; intstate; jcall(){} intbuild(eXosip_event_t*je) { jcall*ca=this; ca->c
4、id=je->cid; ca->did=je->did; if(ca->did<1&&ca->cid<1) { assert(0); return-1;/*notenoughinformationforthisevent??*/ } osip_strncpy(ca->textinfo, je->textinfo,255); osip_strncpy(ca->req_uri, je->req_uri,255); osip_strncpy(ca->local_uri, je->local_uri,2
5、55); osip_strncpy(ca->remote_uri,je->remote_uri,255); osip_strncpy(ca->subject, je->subject,255); if(ca->remote_sdp_audio_ip[0]==' ') { osip_strncpy(ca->remote_sdp_audio_ip,je->remote_sdp_audio_ip,49); ca->remote_sdp_audio_port=je->remote_sdp_audio_port;
6、 ca->payload=je->payload; osip_strncpy(ca->payload_name,je->payload_name,49); } if(je->reason_phrase[0]!=' ') { osip_strncpy(ca->reason_phrase,je->reason_phrase,49); ca->status_code=je->status_code; } ca->state=je->type; return0; } };jcallcall;voi
7、d__exit(intr){ charline[256]; gets(line); exit(r);}voidjosua_printf(char*buf){ printf("");}intjosua_event_get(){ intcounter=0; /*useeventstoprintsomeinfo*/ eXosip_event_t*je; for(;;) { charbuf[100]; je=eXosip_event_wait(0,50); if(je==NULL) break; counter++; i
8、f(je->type==EXOSIP_CALL_NEW) { printf("<-(%i%i)INVITEfrom:%s", je->cid,je->did, je->remote_uri); josua_printf(buf