exosip 对比osip

oSIP是GNU的标准sip库,exosip是对osip的‘封装’,但不属于gnu。接下去介绍下区别。

osip:不带传输层(socket自己管理) exosip带传输层(socket协议栈管理) 

osip:无SSL exosip:有SSL

osip:只提供线程函数封装(让用户自己决定)exosip运行时直接带线程(默认有,直接提供会话的状态机的运行线程_eXosip_thread) 


其实osip基本工作是完成了rfc3261中的17章会话层状态机和SIP域的解析。那osip怎么把其他工作交给其他程序?回调。所以osip在 直接使用时要注册一堆回调函数,而exosip已经完成了这些工作

另外exosip默认提供了会话状态机的运行线程_eXosip_thread。这样更方便了用户的使用。(但话说回来,这模型似乎是个ActiveObject,如果并发呼入量大的话,会成为瓶颈,猜想这可能也是osip直接不带线程原因)


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用exosip和osip协议栈来打印服务器发送过来的信令信息,你可以使用以下的C程序代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <signal.h> #include <exosip2/exosip.h> int running = 1; void sigint_handler(int signal) { running = 0; } int main(int argc, char **argv) { osip_message_t *message; int status, duration; exosip_event_t *evt; struct timeval tv; exosip_t *ctx; signal(SIGINT, sigint_handler); ctx = exosip_malloc(); status = exosip_init(ctx); if (status != 0) { fprintf(stderr, "Failed to initialize exosip.\n"); exit(EXIT_FAILURE); } /* Register with server */ exosip_listen_address_set(ctx, "udp", "0.0.0.0", 5060, AF_INET6, IPPROTO_UDP, 0); exosip_add_authentication_info(ctx, "example.com", "username", "password", NULL, "MD5", NULL); exosip_register_build_initial_register(ctx, "sip:example.com", "sip:username@example.com", "sip:example.com", NULL, 3600, &message); exosip_register_send_register(ctx, message); while (running) { tv.tv_sec = 1; tv.tv_usec = 0; evt = exosip_event_wait(ctx, tv); if (evt == NULL) { continue; } switch (evt->type) { case EXOSIP_REGISTRATION_FAILURE: fprintf(stderr, "Registration failed.\n"); running = 0; break; case EXOSIP_REGISTRATION_SUCCESS: printf("Registered with server.\n"); break; case EXOSIP_MESSAGE_NEW: message = evt->request; printf("Received message: %s\n", message->sip); break; default: break; } exosip_event_free(evt); } /* Unregister from server */ exosip_register_build_initial_register(ctx, "sip:example.com", "sip:username@example.com", "sip:example.com", NULL, 0, &message); exosip_register_send_register(ctx, message); /* Cleanup */ exosip_quit(ctx); exosip_free(ctx); osip_free(message); return 0; } ``` 这个程序会使用exosip协议栈来注册到服务器,并且监听服务器发送过来的信令信息。当程序接收到新的信令信息时,它会将信息打印出来。如果你想要修改程序,可以在`case EXOSIP_MESSAGE_NEW`中添加你自己的处理逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值