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

📄 sdp.c

📁 linux下的sip voip程序
💻 C
字号:
#include"sip_util.h"#include"sdp.h"#include"stack_if.h"extern SAVE_MSG     g_SipMsg;extern STACK_INFO   g_StackInfo;/* SDPを侯喇する */int make_SDP(char* sdp, char* username, char* addr,             char* fqdn, char* protocol, int rtptype,             int audiorate,int rtpport, char* o){    /* v¨SDPのバ〖ジョン */    set_v(sdp, "0");    /* o¨セッション急侍攫鼠 */    {        if(o == NULL){            char buff[MAX_FIELD];            int time;            long timestamp;            struct timeval tv;            struct timezone tz;            if (-1 == gettimeofday(&tv, &tz)){                return -1;            }else{                 time = tv.tv_sec*1000 + tv.tv_usec/1000;            }            timestamp = (long) (time & 0x7FFFFFFF);            sprintf(buff,"%s %d %d IN %s %s", username, timestamp, timestamp, IP_TYPE, fqdn);            set_o((sdp+strlen(sdp)), buff);        }else{            /* for OK msg. */            char buf[MAX_FIELD]={""};            char buf2[MAX_FIELD]={""};            char *pchr1, *pchr2;            strcpy(buf, o);            pchr1=strstr(buf, " ");            pchr2=strstr(buf, IP_TYPE);            *(pchr2+strlen(IP_TYPE)) = 0;            sprintf(buf2, "%s %s %s", username, pchr1+1, fqdn);                    set_o((sdp+strlen(sdp)), buf2);        }    }    /* s¨セッション叹 */    set_s((sdp+strlen(sdp)), "Call");    /* c¨コネクション攫鼠 */    {        char buff[MAX_FIELD];        sprintf(buff, "IN %s %s", IP_TYPE, addr);        set_c((sdp+strlen(sdp)), buff);    }    /* t¨セッションの倡幌、姜位箕癸 */    {        char buff[MAX_FIELD];        sprintf(buff, "0 0");        set_t((sdp+strlen(sdp)), buff);    }    /* m¨メディア硷侍、トランスポ〖トアドレス */    {        char buff[MAX_FIELD];        sprintf(buff, "audio %d RTP/AVP %d", rtpport, rtptype);        set_m((sdp+strlen(sdp)), buff);    }    /* a¨メディア掳拉 */    {        char buff[MAX_FIELD];        sprintf(buff, "rtpmap:%d %s/%d", rtptype, protocol, audiorate);        set_a((sdp+strlen(sdp)), buff);    }    return 0;}/* SDP攫鼠を肋年する簇眶 */void set_v(char* sdp, char* buff){    sprintf(sdp, "v=%s\r\n",buff);}void set_o(char* sdp, char* buff){    sprintf(sdp, "o=%s\r\n",buff);}void set_s(char* sdp, char* buff){    sprintf(sdp, "s=%s\r\n",buff);}void set_c(char* sdp, char* buff){    sprintf(sdp, "c=%s\r\n",buff);}void set_t(char* sdp, char* buff){    sprintf(sdp, "t=%s\r\n",buff);}void set_m(char* sdp, char* buff){    sprintf(sdp, "m=%s\r\n",buff);}void set_a(char* sdp, char* buff){    sprintf(sdp, "a=%s\r\n",buff);}void set_SDP(char* msg, char* buff){    char* sp;    sp = strrchr(msg, '\n');    strcat(sp+1, buff);}/* SDP攫鼠を艰评する簇眶 */void get_o(char* sdp, char* buff){    char* sp;    char* ep;    sp = strstr(sdp, "o=");    ep = strstr(sp, "\r\n");    strncpy(buff, (sp+2), (strlen(sp+2)-strlen(ep)));}void get_c(char* sdp, char* buff){        char* sp;        char* ep;        sp = strstr(sdp, "c=");        ep = strstr(sp, "\r\n");        strncpy(buff, (sp+2), (strlen(sp+2)-strlen(ep)));}void get_m(char* sdp, char* buff){        char *sp, *ep;        sp = strstr(sdp, "m=");        ep = strstr(sp, "\r\n");        strncpy(buff, (sp+2), (strlen(sp+2)-strlen(ep)));}/* RTP攫鼠を艰评する簇眶 */int get_rtpaddr(char* sdp, char* rtp_addr){    char* sp;    char line[MAX_FIELD];    if(rtp_addr == NULL){        debug("Error!!get_rtpaddr failed.\n");    }    memset(line, 0, MAX_FIELD);    memset(rtp_addr, 0, ADDR_SIZE);    get_c(sdp, line);    sp = strrchr(line, ' ');    strncpy(rtp_addr, sp+1, strlen(sp+1));}int get_rtpport(char* sdp, char* rtpport){    char* sp;    char* ep;    char line[MAX_FIELD];    char* pchr;    memset(line, 0, MAX_FIELD);    get_m(sdp, line);    sp = strchr(line, ' ');    ep = strchr(sp+1, ' ');    pchr = strncpy(rtpport, sp+1, (strlen(sp+1)-strlen(ep)));    if(pchr ==NULL){        debug("Error!!get_rtpport failed.\n");    }}

⌨️ 快捷键说明

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