structeXosip_event{eXosip_event_type_ttype;chartextinfo[256];void*external_reference;osip_message_t*request;osip_message_t*response;osip_message_t*ack;inttid;/**unique id for transations(to be used for answers)**/intdid;/**unique id for SIP dialogs**/intrid;/**unique id for registration**/intcid;/**unique id for calls(but multiple dialogs!)**/intsid;/**unique id for outgoing subscriptions*/intnid;/**unique id for incoming subscription*/intss_status;intss_reason;}
库的使用:初始化eXosip
123456789101112131415161718
#include <eXosip2/eXosip.h>eXosip_t*ctx;inti;intport=5060;TRACE_INITIALIZE(6,NULL);ctx=eXosip_malloc();if(ctx==NULL)return-1;i=eXosip_init(ctx);if(i!=0)return-1;i=eXosip_listen_addr(ctx,IPPROTO_UDP,NULL,port,AF_INET,0);/*Open a UDP socket for signalling*/if(i!=0){eXosip_quit(ctx);fprintf(stderr,"could not initialize transport layer\n");return-1;}
eXosip_event_t*evt;for(;;){evt=eXosip_event_wait(ctx,0,50);eXosip_lock(ctx);eXosip_automatic_action(ctx);eXosip_unlock(ctx);if(evt==NULL)continue;if(evt->type==EXOSIP_CALL_NEW)/**Answer 180 Ringing to an incoming INVITE**/{eXosip_lock(ctx);eXosip_call_send_answer(ctx,evt->tid,180,NULL);eXosip_unlock(ctx);}elseif(evt->type==EXOSIP_CALL_ACK){........}elseif(evt->type==EXOSIP_CALL_ANSWERED){........}else.............eXosip_event_free(evt);}