#include "main.h"
int g_call_id = 0;/*INVITE连接ID/用来分辨不同的INVITE连接,每个时刻只允许有一个INVITE连接*/
int g_did_realPlay = 0;/*会话ID/用来分辨不同的会话:实时视音频点播*/
int g_did_backPlay = 0;/*会话ID/用来分辨不同的会话:历史视音频回放*/
int g_did_fileDown = 0;/*会话ID/用来分辨不同的会话:视音频文件下载*/
int eXosip_message_GetCallID_API(int type)
{
int Id = 0;
switch(type)
{
case ENUM_CALL_ID:
{
Id = g_call_id;
}
break;
case ENUM_REALPLAY_ID:
{
Id = g_did_realPlay;
}
break;
case ENUM_BACKPLAY_ID:
{
Id = g_did_backPlay;
}
break;
case ENUM_FILEDOWN_ID:
{
Id = g_did_fileDown;
}
break;
}
return Id;
}
/*设备目录查询*/
int eXosip_message_DevQuery_Dir_FUN(char *rsp_body,char * xml_cmd_sn,char * xml_device_id)
{
sprintf(rsp_body,"<?xml version=\"1.0\"?>\r\n"
"<Response>\r\n"
"<CmdType>Catalog</CmdType>\r\n"/*命令类型*/
"<SN>%s</SN>\r\n"/*命令序列号*/
"<DeviceID>%s</DeviceID>\r\n"/*目标设备/区域/系统的编码*/
"<SumNum>1</SumNum>\r\n"/*查询结果总数*/
"<DeviceList Num=\"1\">\r\n"/*设备目录项列表*/
"<Item>\r\n"
"<DeviceID>%s</DeviceID>\r\n"/*目标设备/区域/系统的编码*/
"<Name>%s</Name>\r\n"/*设备/区域/系统名称*/
"<Manufacturer>%s</Manufacturer>\r\n"/*设备厂商*/
"<Model>%s</Model>\r\n"/*设备型号*/
"<Owner>Owner1</Owner>\r\n"/*设备归属*/
"<CivilCode>CivilCode1</CivilCode>\r\n"/*行政区域*/
"<Block>Block1</Block>\r\n"/*警区*/
"<Address>Address1</Address>\r\n"/*安装地址*/
"<Parental>0</Parental>\r\n"/*是否有子设备*/
"<ParentID>%s</ParentID>\r\n"/*父设备/区域/系统ID*/
"<SafetyWay>0</SafetyWay>\r\n"/*信令安全模式/0为不采用/2为S/MIME签名方式/3为S/MIME加密签名同时采用方式/4为数字摘要方式*/
"<RegisterWay>1</RegisterWay>\r\n"/*注册方式/1为符合sip3261标准的认证注册模式/2为基于口令的双向认证注册模式/3为基于数字证书的双向认证注册模式*/
"<CertNum>CertNum1</CertNum>\r\n"/*证书序列号*/
"<Certifiable>0</Certifiable>\r\n"/*证书有效标识/0为无效/1为有效*/
"<ErrCode>400</ErrCode>\r\n"/*无效原因码*/
"<EndTime>2099-12-31T23:59:59</EndTime>\r\n"/*证书终止有效期*/
"<Secrecy>0</Secrecy>\r\n"/*保密属性/0为不涉密/1为涉密*/
"<IPAddress>%s</IPAddress>\r\n"/*设备/区域/系统IP地址*/
"<Port>%d</Port>\r\n"/*设备/区域/系统端口*/
"<Password>Password1</Password>\r\n"/*设备口令*/
"<Status>OK</Status>\r\n"/*设备状态*/
"<Longitude>%d</Longitude>\r\n"/*经度*/
"<Latitude>%d</Latitude>\r\n"/*纬度*/
"</Item>\r\n"
"</DeviceList>\r\n"
"</Response>\r\n\0",
xml_cmd_sn,
xml_device_id,
DEV_ID,
DEV_NAME,
"CSENN",
"GB28181",
xml_device_id,
DEV_IP,
DEV_PORT,
100,
100);
return 0;
}
/*设备信息查询*/
int eXosip_message_DevQuery_Info_FUN(char *rsp_body,char * xml_cmd_sn,char * xml_device_id)
{
sprintf(rsp_body,"<?xml version=\"1.0\"?>\r\n"
"<Response>\r\n"
"<CmdType>DeviceInfo</CmdType>\r\n"/*命令类型*/
"<SN>%s</SN>\r\n"/*命令序列号*/
"<DeviceID>%s</DeviceID>\r\n"/*目标设备/区域/系统的编码*/
"<Result>OK</Result>\r\n"/*查询结果*/
"<Manufacturer>%s</Manufacturer>\r\n"/*设备生产商*/
"<Model>%s</Model>\r\n"/*设备型号*/
"<Firmware>%s</Firmware>\r\n"/*设备固件版本*/
"</Response>\r\n\0",
xml_cmd_sn,
xml_device_id,
"CSENN",
"GB28181",
"v1.0");
return 0;
}
/*设备状态查询*/
int eXosip_message_DevQuery_Status_FUN(char *rsp_body,char * xml_cmd_sn,char * xml_device_id)
{
char curTime[20];
time_t ctime = time(NULL);
struct tm tmtime = { 0 };
gmtime_r(&ctime,&tmtime);
sprintf(curTime,"%04d %02d %02d %02d:%02d:%02d",1900+tmtime.tm_year,tmtime.tm_mon+ 1,
tmtime.tm_mday,tmtime.tm_hour,tmtime.tm_min,tmtime.tm_sec);
sprintf(rsp_body,"<?xml version=\"1.0\"?>\r\n"
"<Response>\r\n"
"<CmdType>DeviceStatus</CmdType>\r\n"/*命令类型*/
"<SN>%s</SN>\r\n"/*命令序列号*/
"<DeviceID>%s</DeviceID>\r\n"/*目标设备/区域/系统的编码*/
"<Result>OK</Result>\r\n"/*查询结果标志*/
"<Online>ONLINE</Online>\r\n"/*是否在线/ONLINE/OFFLINE*/
"<Status>OK</Status>\r\n"/*是否正常工作*/
"<Encode>OK</Encode>\r\n"/*是否编码*/
"<Record>OK</Record>\r\n"/*是否录像*/
"<DeviceTime>%s</DeviceTime>\r\n"/*设备时间和日期*/
"<Alarmstatus Num=\"1\">\r\n"/*报警设备状态列表*/
"<Item>\r\n"
"<DeviceID>%s</DeviceID>\r\n"/*报警设备编码*/
"<DutyStatus>OK</DutyStatus>\r\n"/*报警设备状态*/
"</Item>\r\n"
"</Alarmstatus>\r\n"
"</Response>\r\n\0",
xml_cmd_sn,
xml_device_id,
curTime,
xml_device_id);
return 0;
}
int eXosip_message_DevQuery_Rec_FUN(char *rsp_body,char * xml_cmd_sn,char * xml_device_id)
{
int rNum = 1;
char rspData[3072] = { 0 };
sprintf(rsp_body,"<?xml version=\"1.0\"?>\r\n"
"<Response>\r\n"
"<CmdType>RecordInfo</CmdType>\r\n"/*命令类型*/
"<SN>%s</SN>\r\n"/*命令序列号*/
"<DeviceID>%s</DeviceID>\r\n"/*设备/区域编码*/
"<Name>usr</Name>\r\n"/*设备/区域名称*/
"<SumNum>%d</SumNum>\r\n"/*查询结果总数*/
"<RecordList Num=\"%d\">\r\n"/*文件目录项列表*/
"<Item>\r\n"
"<DeviceID>%s</DeviceID>\r\n"
"<Name>sip_test.dat</Name>\r\n"
"<StartTime>2017-02-27T10:20:48.026</StartTime>\r\n"
"<EndTime>2017-02-27T10:20:48.026</EndTime>\r\n"
"<Secrecy></Secrecy>\r\n"
"<Type>0</Type>\r\n"
"<RecorderID></RecorderID>\r\n"
"</Item>\r\n"
"</RecordList>\r\n"
"</Response>\r\n",
xml_cmd_sn,
xml_device_id,
rNum,rNum);
return 0;
}
int eXosip_message_Process_FUN(eXosip_event_t *msg)
{
char xml_cmd_type[20] = { 0 };
char xml_cmd_sn[10] = { 0 };
char xml_device_id[30] = { 0 };
char rsp_xml_body[4096]= { 0 };
char to[100] = { 0 };/*sip:被叫IP地址:被叫IP端口*/
char from[100] = { 0 };/*sip:主叫用户名@被叫IP地址*/
char *p_str_begin = NULL;
char *p_str_end = NULL;
osip_body_t *body;
osip_message_t *rsp_msg = NULL;
/*获取接收到的消息*/
osip_message_get_body (msg->request, 0, &body);
if (NULL == body)
{
printf("osip_message_get_body null!\r\n");
return;
}
printf ("I get the msg is: /n%s/n", body->body);
/*先获取cmdtype的值*/
p_str_begin = strstr( body->body,"<CmdType>");
p_str_end = strstr( body->body,"</CmdType>");
memcpy(xml_cmd_type,p_str_begin+strlen("<CmdType>"),p_str_end-p_str_begin-strlen("<CmdType>"));
/*先获取SN的值*/
p_str_begin = strstr( body->body,"<SN>");
p_str_end = strstr( body->body,"</SN>");
memcpy(xml_cmd_sn,p_str_begin+strlen("<SN>"),p_str_end-p_str_begin-strlen("<SN>"));
/*先获取DeviceID的值*/
p_str_begin = strstr( body->body,"<DeviceID>");
p_str_end = strstr( body->body,"</DeviceID>");
memcpy(xml_device_id,p_str_begin+strlen("<DeviceID>"),p_str_end-p_str_begin-strlen("<DeviceID>"));
printf("xml_cmd_type = %s xml_cmd_sn = %s xml_device_id = %s \n",xml_cmd_type,xml_cmd_sn,xml_device_id);
/*获取指令*/
/*网络设备信息查询:设备目录查询*/
if (0 == strcmp(xml_cmd_type, "Catalog"))
{
eXosip_message_DevQuery_Dir_FUN(rsp_xml_body,xml_cmd_sn,xml_device_id);
}
/*网络设备信息查询:设备信息查询*/
else if (0 == strcmp(xml_cmd_type, "DeviceInfo"))
{
eXosip_message_DevQuery_Info_FUN(rsp_xml_body,xml_cmd_sn,xml_device_id);
}
/*网络设备信息查询:设备状态查询*/
else if (0 == strcmp(xml_cmd_type, "DeviceStatus"))
{
eXosip_message_DevQuery_Status_FUN(rsp_xml_body,xml_cmd_sn,xml_device_id);
}
/*设备视音频文件检索*/
else if (0 == strcmp(xml_cmd_type, "RecordInfo"))
{
eXosip_
没有合适的资源?快使用搜索试试~ 我知道了~
GB28281之sip协议
共67个文件
h:55个
c:3个
a:3个
3星 · 超过75%的资源 需积分: 49 139 下载量 54 浏览量
2017-02-28
15:03:12
上传
评论 5
收藏 39.68MB RAR 举报
温馨提示
sip协议的注册到看实时视频和回放的代码,已经测试完全可用使用,是我通过查资料抓包等方法研究了三个星期做出来的测试程序,希望对后面朋友有一点点帮助,测试代码和工具一整套都是齐全的
资源推荐
资源详情
资源评论
收起资源包目录
sip.rar (67个子文件)
sip
测试工具.rar 38.54MB
sip_test
res
sip_test.avi 14.93MB
libinc
osip2
osip_mt.h 4KB
osip.h 35KB
osip_time.h 2KB
osip_condv.h 3KB
osip_fifo.h 3KB
osip_dialog.h 7KB
eXosip2
eX_register.h 3KB
eX_options.h 3KB
eX_publish.h 2KB
eX_refer.h 2KB
eX_setup.h 7KB
eX_call.h 7KB
eX_subscribe.h 6KB
eX_message.h 3KB
eXosip.h 16KB
osipparser2
osip_uri.h 14KB
osip_list.h 5KB
sdp_message.h 20KB
osip_md5.h 2KB
osip_parser.h 34KB
osip_headers.h 3KB
headers
osip_route.h 4KB
osip_mime_version.h 2KB
osip_call_info.h 3KB
osip_content_length.h 3KB
osip_accept_encoding.h 4KB
osip_proxy_authenticate.h 7KB
osip_authentication_info.h 5KB
osip_allow.h 2KB
osip_content_disposition.h 3KB
osip_accept.h 3KB
osip_authorization.h 8KB
osip_proxy_authorization.h 8KB
osip_call_id.h 3KB
osip_alert_info.h 3KB
osip_header.h 3KB
osip_cseq.h 3KB
osip_via.h 7KB
osip_record_route.h 4KB
osip_proxy_authentication_info.h 5KB
osip_error_info.h 3KB
osip_contact.h 4KB
osip_to.h 5KB
osip_from.h 5KB
osip_www_authenticate.h 7KB
osip_content_encoding.h 2KB
osip_accept_language.h 3KB
osip_content_type.h 3KB
osip_port.h 12KB
osip_body.h 3KB
osip_message.h 15KB
osip_const.h 6KB
inc
csenn_eXosip2.h.bak 5KB
recplay.h 2KB
rtp.h 2KB
main.h 1KB
test_sip 489KB
src
csenn_eXosip2.c.bak 40KB
main.c 17KB
rtp.c 15KB
recplay.c 6KB
lib
libeXosip2.a 1.01MB
libosip2.a 329KB
libosipparser2.a 591KB
Makefile 414B
共 67 条
- 1
阿木小呆呆
- 粉丝: 45
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页