从网站上看到了这样的一篇博文 :Windows下编译eXosip、osip,以及UAC和UAS的例子 (链接:http://www.cnblogs.com/dyllove98/archive/2013/06/25/3155427.html)

觉得对学习sip的初学者,包括我,都是很有帮助的。但是那是在window下的编译,我在这里稍微改了一下,让它支持在linux下编译测试运行通过。

我们这里使用库的版本:libosip2-3.6.0.tar,libeXosip2-3.6.0.tar,大家可以自己进入正面的链接去下载。

osip:   http://ftp.twaren.net/Unix/NonGNU//osip/libosip2-3.6.0.tar.gz
eXosip: http://download.savannah.gnu.org/releases/exosip/libeXosip2-3.6.0.tar.gz

1、解压libosip2-3.6.0.tar ,比如解压目录为 /usr/local/src/,
        #tar zxvf libosip2-3.6.0.tar -C /usr/local/src

编译该lib库:
        #./configure
        #make
        #make install

2、同理编译libeXosip2
      注意最后要更新库,否则在程序执行时,可能会提示找不到库,编译后的库文件及头文件会默认放在/usr/local目录下:
      #ldconfig

3、编译代码uac.c 和 uas.c
       #gcc uac.c -o uac -losip2 -leXosip2 -lpthread
       #gcc uas.c -o uas -losip2 -leXosip2 -lpthread

4、测试运行uas 和 uac,最好打开两个shell来运行
       #./uas
       #./uac
       注意:如果在运行过程中提示找不到libosip2.so.6等类似的提示,说明osip动态库的路径可能还没有包含进去,可以使用下面的命令手动包含动态库的路径
       #export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

代码uac.c

 #include <eXosip2/eXosip.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <netinet/in.h>
//#include <winsock2.h> int main(int argc,char *argv[])
{ struct eXosip_t *context_eXosip; eXosip_event_t *je;
osip_message_t *reg=NULL;
osip_message_t *invite=NULL;
osip_message_t *ack=NULL;
osip_message_t *info=NULL;
osip_message_t *message=NULL; int call_id,dialog_id;
int i,flag;
int flag1=; char *identity="sip:140@127.0.0.1"; //UAC1,端口是15060
char *registar="sip:133@127.0.0.1:15061"; //UAS,端口是15061
char *source_call="sip:140@127.0.0.1";
char *dest_call="sip:133@127.0.0.1:15061";
//identify和register这一组地址是和source和destination地址相同的
//在这个例子中,uac和uas通信,则source就是自己的地址,而目的地址就是uac1的地址
char command;
char tmp[]; printf("r 向服务器注册\n\n");
printf("c 取消注册\n\n");
printf("i 发起呼叫请求\n\n");
printf("h 挂断\n\n");
printf("q 推出程序\n\n");
printf("s 执行方法INFO\n\n");
printf("m 执行方法MESSAGE\n\n"); //初始化
i=eXosip_init(); if(i!=)
{
printf("Couldn't initialize eXosip!\n");
return -;
}
else
{
printf("eXosip_init successfully!\n");
} //绑定uac自己的端口15060,并进行端口监听
i=eXosip_listen_addr(IPPROTO_UDP,NULL,,AF_INET,);
if(i!=)
{
eXosip_quit();
fprintf(stderr,"Couldn't initialize transport layer!\n");
return -;
}
flag=; while(flag)
{
//输入命令
printf("Please input the command:\n");
scanf("%c",&command);
getchar(); switch(command)
{
case 'r':
printf("This modal is not completed!\n");
break;
case 'i'://INVITE,发起呼叫请求
i=eXosip_call_build_initial_invite(&invite,dest_call,source_call,NULL,"This is a call for conversation");
if(i!=)
{
printf("Initial INVITE failed!\n");
break;
}
//符合SDP格式,其中属性a是自定义格式,也就是说可以存放自己的信息,
//但是只能有两列,比如帐户信息
//但是经过测试,格式vot必不可少,原因未知,估计是协议栈在传输时需要检查的
snprintf(tmp,,
"v=0\r\n"
"o=anonymous 0 0 IN IP4 0.0.0.0\r\n"
"t=1 10\r\n"
"a=username:rainfish\r\n"
"a=password:123\r\n"); osip_message_set_body(invite,tmp,strlen(tmp));
osip_message_set_content_type(invite,"application/sdp"); eXosip_lock();
i=eXosip_call_send_initial_invite(invite); //invite SIP INVITE message to send
eXosip_unlock(); //发送了INVITE消息,等待应答
flag1=;
while(flag1)
{
je=eXosip_event_wait(,); //Wait for an eXosip event
//(超时时间秒,超时时间毫秒)
if(je==NULL)
{
printf("No response or the time is over!\n");
break;
}
switch(je->type) //可能会到来的事件类型
{
case EXOSIP_CALL_INVITE: //收到一个INVITE请求
printf("a new invite received!\n");
break;
case EXOSIP_CALL_PROCEEDING: //收到100 trying消息,表示请求正在处理中
printf("proceeding!\n");
break;
case EXOSIP_CALL_RINGING: //收到180 Ringing应答,表示接收到INVITE请求的UAS正在向被叫用户振铃
printf("ringing!\n");
printf("call_id is %d,dialog_id is %d \n",je->cid,je->did);
break;
case EXOSIP_CALL_ANSWERED: //收到200 OK,表示请求已经被成功接受,用户应答
printf("ok!connected!\n");
call_id=je->cid;
dialog_id=je->did;
printf("call_id is %d,dialog_id is %d \n",je->cid,je->did); //回送ack应答消息
eXosip_call_build_ack(je->did,&ack);
eXosip_call_send_ack(je->did,ack);
flag1=; //推出While循环
break;
case EXOSIP_CALL_CLOSED: //a BYE was received for this call
printf("the other sid closed!\n");
break;
case EXOSIP_CALL_ACK: //ACK received for 200ok to INVITE
printf("ACK received!\n");
break;
default: //收到其他应答
printf("other response!\n");
break;
}
eXosip_event_free(je); //Free ressource in an eXosip event
}
break; case 'h': //挂断
printf("Holded!\n"); eXosip_lock();
eXosip_call_terminate(call_id,dialog_id);
eXosip_unlock();
break; case 'c':
printf("This modal is not commpleted!\n");
break; case 's': //传输INFO方法
eXosip_call_build_info(dialog_id,&info);
snprintf(tmp,,"\nThis is a sip message(Method:INFO)");
osip_message_set_body(info,tmp,strlen(tmp));
//格式可以任意设定,text/plain代表文本信息;
osip_message_set_content_type(info,"text/plain");
eXosip_call_send_request(dialog_id,info);
break; case 'm':
//传输MESSAGE方法,也就是即时消息,和INFO方法相比,我认为主要区别是:
//MESSAGE不用建立连接,直接传输信息,而INFO消息必须在建立INVITE的基础上传输
printf("the method : MESSAGE\n");
eXosip_message_build_request(&message,"MESSAGE",dest_call,source_call,NULL);
//内容,方法, to ,from ,route
snprintf(tmp,,"This is a sip message(Method:MESSAGE)");
osip_message_set_body(message,tmp,strlen(tmp));
//假设格式是xml
osip_message_set_content_type(message,"text/xml");
eXosip_message_send_request(message);
break; case 'q':
eXosip_quit();
printf("Exit the setup!\n");
flag=;
break;
}
} return();
}

代码uas.c

 # include <eXosip2/eXosip.h>
# include <stdio.h>
# include <stdlib.h>
# include <stdarg.h>
# include <netinet/in.h> //# include <Winsock2.h> int main (int argc, char *argv[])
{
eXosip_event_t *je = NULL;
osip_message_t *ack = NULL;
osip_message_t *invite = NULL;
osip_message_t *answer = NULL;
sdp_message_t *remote_sdp = NULL;
int call_id, dialog_id;
int i,j;
int id;
char *sour_call = "sip:140@127.0.0.1";
char *dest_call = "sip:133@127.0.0.1:15060";//client ip
char command;
char tmp[];
char localip[];
int pos = ;
//初始化sip
i = eXosip_init ();
if (i != )
{
printf ("Can't initialize eXosip!\n");
return -;
}
else
{
printf ("eXosip_init successfully!\n");
}
i = eXosip_listen_addr (IPPROTO_UDP, NULL, , AF_INET, );
if (i != )
{
eXosip_quit ();
fprintf (stderr, "eXosip_listen_addr error!\nCouldn't initialize transport layer!\n");
}
for(;;)
{
//侦听是否有消息到来
je = eXosip_event_wait (,);
//协议栈带有此语句,具体作用未知
eXosip_lock ();
eXosip_default_action (je);
eXosip_automatic_refresh ();
eXosip_unlock ();
if (je == NULL)//没有接收到消息
continue;
// printf ("the cid is %s, did is %s/n", je->did, je->cid);
switch (je->type)
{
case EXOSIP_MESSAGE_NEW://新的消息到来
printf (" EXOSIP_MESSAGE_NEW!\n");
if (MSG_IS_MESSAGE (je->request))//如果接受到的消息类型是MESSAGE
{
{
osip_body_t *body;
osip_message_get_body (je->request, , &body);
printf ("I get the msg is: %s\n", body->body);
//printf ("the cid is %s, did is %s/n", je->did, je->cid);
}
//按照规则,需要回复OK信息
eXosip_message_build_answer (je->tid, ,&answer);
eXosip_message_send_answer (je->tid, ,answer);
}
break;
case EXOSIP_CALL_INVITE:
//得到接收到消息的具体信息
printf ("Received a INVITE msg from %s:%s, UserName is %s, password is %s\n",je->request->req_uri->host,
je->request->req_uri->port, je->request->req_uri->username, je->request->req_uri->password);
//得到消息体,认为该消息就是SDP格式.
remote_sdp = eXosip_get_remote_sdp (je->did);
call_id = je->cid;
dialog_id = je->did; eXosip_lock ();
eXosip_call_send_answer (je->tid, , NULL);
i = eXosip_call_build_answer (je->tid, , &answer);
if (i != )
{
printf ("This request msg is invalid!Cann't response!\n");
eXosip_call_send_answer (je->tid, , NULL);
}
else
{
snprintf (tmp, ,
"v=0\r\n"
"o=anonymous 0 0 IN IP4 0.0.0.0\r\n"
"t=1 10\r\n"
"a=username:rainfish\r\n"
"a=password:123\r\n"); //设置回复的SDP消息体,下一步计划分析消息体
//没有分析消息体,直接回复原来的消息,这一块做的不好。
osip_message_set_body (answer, tmp, strlen(tmp));
osip_message_set_content_type (answer, "application/sdp"); eXosip_call_send_answer (je->tid, , answer);
printf ("send 200 over!\n");
}
eXosip_unlock (); //显示出在sdp消息体中的attribute 的内容,里面计划存放我们的信息
printf ("the INFO is :\n");
while (!osip_list_eol ( &(remote_sdp->a_attributes), pos))
{
sdp_attribute_t *at; at = (sdp_attribute_t *) osip_list_get ( &remote_sdp->a_attributes, pos);
printf ("%s : %s\n", at->a_att_field, at->a_att_value);//这里解释了为什么在SDP消息体中属性a里面存放必须是两列 pos ++;
}
break;
case EXOSIP_CALL_ACK:
printf ("ACK recieved!\n");
// printf ("the cid is %s, did is %s/n", je->did, je->cid);
break;
case EXOSIP_CALL_CLOSED:
printf ("the remote hold the session!\n");
// eXosip_call_build_ack(dialog_id, &ack);
//eXosip_call_send_ack(dialog_id, ack);
i = eXosip_call_build_answer (je->tid, , &answer);
if (i != )
{
printf ("This request msg is invalid!Cann't response!\n");
eXosip_call_send_answer (je->tid, , NULL); }
else
{
eXosip_call_send_answer (je->tid, , answer);
printf ("bye send 200 over!\n");
}
break;
case EXOSIP_CALL_MESSAGE_NEW://至于该类型和EXOSIP_MESSAGE_NEW的区别,源代码这么解释的
/*
// request related events within calls (except INVITE)
EXOSIP_CALL_MESSAGE_NEW, < announce new incoming request.
// response received for request outside calls
EXOSIP_MESSAGE_NEW, < announce new incoming request.
我也不是很明白,理解是:EXOSIP_CALL_MESSAGE_NEW是一个呼叫中的新的消息到来,比如ring trying都算,所以在接受到后必须判断
该消息类型,EXOSIP_MESSAGE_NEW而是表示不是呼叫内的消息到来。
该解释有不妥地方,仅供参考。
*/
printf(" EXOSIP_CALL_MESSAGE_NEW\n");
if (MSG_IS_INFO(je->request) ) //如果传输的是INFO方法
{
eXosip_lock ();
i = eXosip_call_build_answer (je->tid, , &answer);
if (i == )
{
eXosip_call_send_answer (je->tid, , answer);
}
eXosip_unlock ();
{
osip_body_t *body;
osip_message_get_body (je->request, , &body);
printf ("the body is %s\n", body->body);
}
}
break;
default:
printf ("Could not parse the msg!\n");
}
}
}

运行截图:

uac运行结果:
aaarticlea/png;base64,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" alt="" />

uas运行结果:
aaarticlea/png;base64,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" alt="" />

linux下编译eXosip、osip,以及UAC和UAS的例子的更多相关文章

  1. linux下编译gcc6.2.0

    linux下编译gcc6.2.0 在archlinx的下gcc已经更新到6.2.1了,win10的WSL下还是gcc4.8.官方源没有比较新的版本,于是自己编译使用. GCC6的几个新特性 GCC 6 ...

  2. LINUX下编译安装PHP各种报错大集合

    本文为大家整理汇总了一些linux下编译安装php各种报错大集合 ,感兴趣的同学参考下. nginx1.6.2-mysql5.5.32二进制,php安装报错解决: 123456 [root@clien ...

  3. linux下编译安装vim7.4并安装clang_complete插件

    linux下编译安装vim7.4并安装clang_complete插件 因为debian里软件仓库中下载安装的vim是不支持python写的插件的(可以打开vim,在命令模式先输入:py测试一下),导 ...

  4. linux下编译出现空间不足解决办法

    linux下编译出现空间不足解决办法 编译内核出现问题: AS      .tmp_kallsyms1.o .tmp_kallsyms1.S:2: fatal error: when writing ...

  5. linux下编译安装curl

    linux下编译安装curl 1.下载curl git clone https://github.com/curl/curl.git 2.在curl目录下生成configure文件 ./buldcon ...

  6. 如何在Kali Linux下编译Windows Exploit

    前言 微软的Windows在企业或是个人应用领域占据着最大的市场份额,在渗透测试过程中你会经常遇到很多Windows的工作站和服务器.另一方面,大多数渗透测试人员主要使用基于Linux的发行版渗透测试 ...

  7. 如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序

    如何用javac 和java 编译运行整个Java工程 (转载)  http://blog.csdn.net/huagong_adu/article/details/6929817 [转]在Linux ...

  8. linux下编译qt5.6.0静态库——configure配置

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  9. linux下编译安装boost库

    linux下编译安装boost库 linux下编译安装boost库 1.下载并解压boost 1.58 源代码 下载 解压 2.运行bootstrap.sh 3.使用b2进行构建 构建成功的提示 4. ...

随机推荐

  1. [Angular 2] Using ngrx/store and Reducers for Angular 2 Application State

    ngrx/store is a library that simplifies common RxJS patterns for managing state and gives you an eas ...

  2. Jquery UI的datepicker插件使用

    原文链接;http://www.ido321.com/375.html Jquery UI是一个非常丰富的Jquery插件,而且UI的各部分插件能够独自分离出来使用.这是其它非常多Jquery插件没有 ...

  3. DecimalFormat用法

    DecimalFormat用法   DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字. DecimalFormat 包含一个模式 和一组符号 符号含义: ...

  4. linux下U盘的读取

    1.虚拟机vmware右下角,找到大容量存储设备图标,右键->connect(disconect from host):使U盘连接到虚拟机中来. 2.打开终端:fdisk -l [root@lo ...

  5. html01基本标签

    01. <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8 ...

  6. -webkit-appearance改变任何元素的浏览器默认风格

    前段时间,公司有个紧急发布会,需要在移动端做一个邀请函的页面.但是在实现下拉框的时候,IOS和安卓展示的效果总是不一样.经过我一番查找,偶然间发现了-webkit-appearance这个样式属性.后 ...

  7. (转)用JS判断ckeditor3.6版本编辑器内容为空的方法

    因为编者我还是一个初学入门者,无论是JS还是PHP,都是懂了点皮毛.今天在研究ckeditor编辑器的时候遇到了一些问题,虽然这只是我的个人问题,但觉得可以分享给其他人,或许也有像我这样的初学者也会遇 ...

  8. SQL从入门到基础 - 01 数据库开发及ADO.Net

    一.数据库概述 1. 用自定义文件格式保存数据的劣势:并发性差,查找数据的速度差. 2. DBMS(DataBase Management System数据库管理系统)和数据库.平时谈到“数据库”的含 ...

  9. Cacti监控Linux主机

    1 要监视一台Linux主机,需要在被监控的主机上安装net-snmp相关软件包,CentOS安装可使用“yum -y install net-snmp”命令:# yum -y install net ...

  10. python zip文件密码爆破

    #!/usr/bin/env # coding=UTF-8 import zipfile import threading import os import sys class CrackZip: d ...