Proyecto de graduación Implementación del protocolo SIP
El proceso principal es el siguiente:
Inicializar la biblioteca eXosip - iniciar el hilo de escucha de eventos - registrarse con el proxy SIP - iniciar una llamada al punto final SIP (número de teléfono) - establecer la conexión - finalizar la conexión
Código de inicialización:
int ret = 0
ret = eXosip_init (
eXosip_set_user_agent; ("##YouToo0.1");
if(0 ! = ret)
{
AfxMessageBox("No se pudo inicializar eXosip!\n ");
devuelve falso;
}
ret = eXosip_listen_addr (IPPROTO_UDP, NULL, 0, AF_INET, 0);
if (0 != ret) p>
{
eXosip_quit ();
AfxMessageBox("¡No se pudo inicializar la capa de transporte!\n");
return false;
}
Iniciar hilo de escucha de eventos:
AfxBeginThread(sip_uac, (void *)this
Registrarse con proxy SIP:
eXosip_clear_authentication_info();
eXosip_add_ authentication_info(uname, uname, upwd, "md5", NULL
); real_send_register(30); /* Acerca del código de función de personalización, consulte el código fuente */
Iniciar una llamada (crea una descripción SDP falsa que el softphone real utilizará para establecer una conexión de medios RTP):
osip_message_t *invite = NULL ; /* Texto del mensaje de inicio de llamada */
int i = eXosip_call_build_initial_invite (amp; invite, dest_call, source_call.NULL, "## ¡Demostración de prueba de YouToo!");
if ( i ! = 0)
{
AfxMessageBox("¡La INVITACIÓN inicial falló! \n");
}
char localip[128];
eXosip_guess_localip (AF_INET, localip, 128);
snprintf (tmp, 4096,
"v=0\r\n"
"o=josua 0 0 IN IP4 s\r\n"
" s=conversación\r\n"
"c=IN IP4 s\r\n n"
"t=0 0\r\n"
"m=audio s RTP/AVP 0 101 8\r\n"
"a=rtpmap:0 PCMU/8000\r\n"
"a=r
tpmap:8 PCMA/8000\r\n"
"a= rtpmap:101 evento telefónico/8000\r\n"
"a=fmtp:101 0-11 \r\n", localip, localip, "9900");
osip_message_set_body (invitación, tmp, strlen(tmp));
osip_message_set_content_type (invitación, "aplicación/sdp"
eXosip_lock ();
i = eXosip_call_send_initial _invite (invitar);
eXosip_unlock (); llamada:
int ret
ret = eXosip_call_terminate(call_id, dialog_id
if( 0 != ret)
{
AfxMessageBox("¡Error al colgar/terminar!"
}
if ( 0 !
);