⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 call.c~

📁 在linux下的osip小程序
💻 C~
字号:
#include <eXosip2/eXosip.h>#include <osip2/osip_mt.h>#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>//拨打电话int call(){    eXosip_event_t *je;        osip_message_t *invite = NULL;    osip_message_t *ack = NULL;    int call_id, dialog_id;    int i,flag;    int id;    char *source_call = "sip:77001234@61.233.3.35:5060"; // @后的格式一样,均为服务ip和端口,@前是username    char *dest_call = "sip:015840642982@61.233.3.35:5060";// 015840642982 为电话号码,外地号,前+0	//初始化    i = eXosip_call_build_initial_invite (&invite, dest_call, source_call, NULL, "This si a call for a conversation");    if (i != 0)    {	printf ("Intial INVITE failed!\n");	return -1;    }    char tmp[4096];    char localip[128];    char *port = "8989";//获取本机ip    eXosip_guess_localip (AF_INET, localip, 128);    snprintf (tmp, 4096,	    "v=0\r\n"	    "o=josua 0 0 IN IP4 %s\r\n"	    "s=conversation\r\n"	    "c=IN IP4 %s\r\n"	    "t=0 0\r\n"	    "m=audio %s RTP/AVP 0 8 101\r\n"	    "a=rtpmap:0 PCMU/8000\r\n"	    "a=rtpmap:8 PCMA/8000\r\n"	    "a=rtpmap:101 telephone-event/8000\r\n"	    "a=fmtp:101 0-11\r\n", localip, localip, "9900");    osip_message_set_body (invite, tmp, strlen (tmp));    osip_message_set_content_type (invite, "application/sdp");//发送invite请求    eXosip_lock ();    i = eXosip_call_send_initial_invite (invite);    eXosip_unlock ();    flag = 1;    while (flag)    {	je = eXosip_event_wait (0, 20000);	if (je == NULL)	{	    printf ("No response or the time is over!\n");	    break;	}	eXosip_lock ();	eXosip_default_action(je);  	eXosip_unlock ();//消息循环	switch (je->type)	{	    case EXOSIP_CALL_INVITE:		printf ("a new invite reveived!\n");		break;	    case EXOSIP_CALL_PROCEEDING:		printf ("proceeding!\n");		call_id = je->cid;		break;	    case EXOSIP_CALL_RINGING:		printf ("ringing!\n");		printf ("call_id is %d, dialog_id is %d \n", je->cid, je->did);		break;	    case EXOSIP_CALL_ANSWERED:		printf ("ok! connected!\n");		call_id = je->cid;		dialog_id = je->did;		printf ("call_id is %d, dialog_id is %d \n", je->cid, je->did);		eXosip_call_build_ack (je->did, &ack);		eXosip_call_send_ack (je->did, ack);		break;	    case EXOSIP_CALL_CLOSED:		printf ("the other sid closed!\n");		break;	    case EXOSIP_CALL_ACK:		printf ("ACK received!\n");		break;#if 0	    case EXOSIP_CALL_REQUESTFAILURE:		printf("REQUESTFAILURE:%d\n",je->type);		break;#endif	}	eXosip_event_free (je);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -