📄 call.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 + -