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