FreeCalypso > hg > sipout-test-utils
comparison libsip/sdp_gen.c @ 0:35c0d9f03c0a
beginning with sipout-test-voice,
a copy of sip-manual-out from themwi-system-sw
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Sun, 03 Mar 2024 23:20:19 -0800 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:35c0d9f03c0a |
|---|---|
| 1 /* | |
| 2 * Here we implement generation of outgoing SDP descriptions. | |
| 3 */ | |
| 4 | |
| 5 #include <sys/types.h> | |
| 6 #include <sys/socket.h> | |
| 7 #include <netinet/in.h> | |
| 8 #include <arpa/inet.h> | |
| 9 #include <stdio.h> | |
| 10 #include <stdlib.h> | |
| 11 #include <string.h> | |
| 12 #include <strings.h> | |
| 13 #include "sdp.h" | |
| 14 #include "out_msg.h" | |
| 15 | |
| 16 format_sdp_in_buffer(gen, buf, lenptr) | |
| 17 struct sdp_gen *gen; | |
| 18 char *buf; | |
| 19 unsigned *lenptr; | |
| 20 { | |
| 21 char *dp, *codec_list; | |
| 22 | |
| 23 dp = buf; | |
| 24 strcpy(dp, "v=0\r\n"); | |
| 25 dp += 5; | |
| 26 sprintf(dp, "o=- %u %u IN IP4 %s\r\n", gen->session_id, gen->version, | |
| 27 inet_ntoa(gen->owner_ip)); | |
| 28 dp = index(dp, '\0'); | |
| 29 strcpy(dp, "s=-\r\n"); | |
| 30 dp += 5; | |
| 31 sprintf(dp, "c=IN IP4 %s\r\n", inet_ntoa(gen->conn_ip)); | |
| 32 dp = index(dp, '\0'); | |
| 33 strcpy(dp, "t=0 0\r\n"); | |
| 34 dp += 7; | |
| 35 switch (gen->codec_mask) { | |
| 36 case SDP_CODEC_MASK_PCMU: | |
| 37 codec_list = "0"; | |
| 38 break; | |
| 39 case SDP_CODEC_MASK_PCMA: | |
| 40 codec_list = "8"; | |
| 41 break; | |
| 42 case SDP_CODEC_MASK_BOTH: | |
| 43 codec_list = "0 8"; | |
| 44 break; | |
| 45 case SDP_CODEC_MASK_BOTH | SDP_CODEC_MASK_PCMA_PREF: | |
| 46 codec_list = "8 0"; | |
| 47 break; | |
| 48 default: | |
| 49 return(-2); | |
| 50 } | |
| 51 sprintf(dp, "m=audio %u RTP/AVP %s\r\n", gen->conn_port, codec_list); | |
| 52 dp = index(dp, '\0'); | |
| 53 if (gen->codec_mask & SDP_CODEC_MASK_PCMU) { | |
| 54 strcpy(dp, "a=rtpmap:0 PCMU/8000\r\n"); | |
| 55 dp += 22; | |
| 56 } | |
| 57 if (gen->codec_mask & SDP_CODEC_MASK_PCMA) { | |
| 58 strcpy(dp, "a=rtpmap:8 PCMA/8000\r\n"); | |
| 59 dp += 22; | |
| 60 } | |
| 61 strcpy(dp, "a=sendrecv\r\n"); | |
| 62 dp += 12; | |
| 63 strcpy(dp, "a=ptime:20\r\n"); | |
| 64 dp += 12; | |
| 65 *lenptr = (dp - buf); | |
| 66 return(0); | |
| 67 } | |
| 68 | |
| 69 out_msg_finish_sdp(msg, gen) | |
| 70 struct sip_msg_out *msg; | |
| 71 struct sdp_gen *gen; | |
| 72 { | |
| 73 char sdp_buf[256]; | |
| 74 unsigned sdp_len; | |
| 75 int rc; | |
| 76 | |
| 77 rc = format_sdp_in_buffer(gen, sdp_buf, &sdp_len); | |
| 78 if (rc < 0) | |
| 79 return rc; | |
| 80 return out_msg_finish_body(msg, sdp_buf, sdp_len); | |
| 81 } |
