Red de conocimiento informático - Conocimiento de la instalación - Proyecto de graduación Implementación del protocolo SIP

Proyecto de graduación Implementación del protocolo SIP

Primero llevamos a cabo un experimento de desarrollo de programa de terminal UAC SIP simple y puro de señalización SIP (sin establecimiento de conexión de voz) (es decir, un modo de softphone SIP que solo se puede utilizar como parte que llama pero no como parte llamada). Creamos una aplicación MFC. Modo de conversación, de acuerdo con las instrucciones anteriores, el proyecto de configuración contiene las bibliotecas relevantes y las bibliotecas de desarrollo SDK que obtuvimos en oSIP. Debido a que algunas bibliotecas de desarrollo entran en conflicto con la LIBC predeterminada, debe excluir la biblioteca de desarrollo MSVCRT [D] (donde D representa el modo de depuración y ninguna D representa el modo de lanzamiento). Puede crear un modelo de softphone SIP básico utilizando directamente varias funciones principales. de eXosip.

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)

{

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 !

);