SIP代理服务器(一)

一直想弄一个SIP代理服务器用在ARM板上,可惜好多都是注册加代理,功能多而且不易修改,所以最后决定自己改写一个简易的慢慢完善。

测试软件如下:

SIP客户端   X-Lite

SIP服务器  SIP Server 2008  和 partysip

编译环境:Ubuntu 10.04

框架采用一个SIP终端sipua-1.1的程序,在www.ohmsha.co.jp/data/link/4-274-06559-6/index.html可下载,CSDN下载区也有,纯C代码写,适合各种移植和学习,但是内容不全,比如没有摘要认证的代码,音频驱动已经淘汰(在Ubuntu10.04中还可以用),很难实际应用,在另一篇文章中会讲到如何添加摘要认证,修改主要准备如下:

  1. 在sipua中发送的端口是随机的,却只监听5060端口,在和SIP server 2008通信时,服务器根据发送的端口号返回,partysip中则是发送端口号和5060都会返回,所以还是需要修改,将发送端口使用5060端口发送,也就是需要将创建的socket句柄设置为全局变量,或者放入状态变量结构体g_StackInfo中。
  2. 添加头部状态信息,包括407,401,404以及其他需要添加状态信息callstate结构体,头命令字添加部分为宏定义以及method结构体。
然后开始一步步改写,先了解sipua工作模式,从main函数开始:
  1. 首先是两个全局变量g_SipMsg和g_StackInfo,用于保存状态信息;
  2. loadsetting()函数,读取配置信息,包括服务器地址,用户名,密码,RTP端口,保存在g_StackInfo中;
  3. 生成线程sipthreadid,用于监听SIP会话信息,监听5060端口,函数为RecvSipMsg(),也是下一步首先需要改动的;
  4. 生成线程r_rtpthreadid,监听RTP数据,端口为配置文件中的端口,之后需要改为两个端口,分别用于客户端和服务器的收发;
  5. 监听用户输入命令字,后面可能全删除不需要,也可以添加新的来用。

你可能感兴趣的:(Linux,代理服务器,c,sip)