exosip2和osip2协议栈如何将相机发过来的注册信息printf打印显示出来,写一个C程序
时间: 2024-02-23 14:59:43 浏览: 20
以下是一个简单的C程序示例,演示如何使用exosip2和osip2协议栈将相机发过来的注册信息打印显示出来:
```c
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <eXosip2/eXosip.h>
#include <osipparser2/osip_parser.h>
int main()
{
int iRet = 0;
iRet = eXosip_init();
if (iRet != 0) {
printf("eXosip_init failed, iRet = %d\n", iRet);
return -1;
}
iRet = eXosip_listen_addr(IPPROTO_UDP, NULL, 5060, AF_INET, 0);
if (iRet != 0) {
printf("eXosip_listen_addr failed, iRet = %d\n", iRet);
eXosip_quit();
return -1;
}
while (true) {
eXosip_event_t *pEvent = NULL;
iRet = eXosip_event_wait(0, 100);
if (iRet <= 0) {
continue;
}
pEvent = eXosip_event_get();
if (pEvent == NULL) {
continue;
}
switch (pEvent->type) {
case EXOSIP_REGISTRATION_NEW:
{
osip_message_t *pSipMsg = NULL;
iRet = osip_message_init(&pSipMsg);
if (iRet != 0) {
printf("osip_message_init failed, iRet = %d\n", iRet);
break;
}
iRet = osip_message_parse(pSipMsg, pEvent->request->buf);
if (iRet != 0) {
printf("osip_message_parse failed, iRet = %d\n", iRet);
break;
}
char *pszFrom = osip_message_get_header(pSipMsg, OSIP_FROM);
if (pszFrom != NULL) {
printf("From: %s\n", pszFrom);
}
char *pszTo = osip_message_get_header(pSipMsg, OSIP_TO);
if (pszTo != NULL) {
printf("To: %s\n", pszTo);
}
osip_message_free(pSipMsg);
break;
}
}
eXosip_event_free(pEvent);
}
eXosip_quit();
return 0;
}
```
这个程序使用了eXosip2和osip2协议栈来监听5060端口,等待相机发来的注册信息。当收到注册信息时,程序会使用osip2协议栈来解析SIP消息,并将From和To字段的值打印到控制台上。使用这个程序可以方便地调试相机注册相关的问题。