Changeset 408 for pjproject/trunk/pjmedia/src/pjmedia/rtp.c
- Timestamp:
- Apr 24, 2006 11:13:00 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjmedia/src/pjmedia/rtp.c
r390 r408 20 20 #include <pjmedia/errno.h> 21 21 #include <pj/log.h> 22 #include <pj/os.h> /* pj_gettimeofday() */23 22 #include <pj/sock.h> /* pj_htonx, pj_htonx */ 24 23 #include <pj/assert.h> 24 #include <pj/rand.h> 25 25 #include <pj/string.h> 26 26 … … 40 40 41 41 PJ_DEF(pj_status_t) pjmedia_rtp_session_init( pjmedia_rtp_session *ses, 42 int default_pt, pj_uint32_t sender_ssrc ) 43 { 44 PJ_LOG(5, (THIS_FILE, "pjmedia_rtp_session_init: ses=%p, default_pt=%d, ssrc=0x%x", 42 int default_pt, 43 pj_uint32_t sender_ssrc ) 44 { 45 PJ_LOG(5, (THIS_FILE, 46 "pjmedia_rtp_session_init: ses=%p, default_pt=%d, ssrc=0x%x", 45 47 ses, default_pt, sender_ssrc)); 46 48 … … 51 53 } 52 54 53 /* If sender_ssrc is not specified, create from timevalue. */55 /* If sender_ssrc is not specified, create from random value. */ 54 56 if (sender_ssrc == 0 || sender_ssrc == (pj_uint32_t)-1) { 55 pj_time_val tv; 56 57 pj_gettimeofday(&tv); 58 sender_ssrc = (pj_uint32_t) pj_htonl(tv.sec); 57 sender_ssrc = pj_htonl(pj_rand()); 59 58 } else { 60 59 sender_ssrc = pj_htonl(sender_ssrc); 61 60 } 62 61 63 /* Initialize session. */ 64 ses->out_extseq = 0; 62 /* Initialize session. 63 * Initial sequence number SHOULD be random, according to RFC 3550. 64 */ 65 ses->out_extseq = pj_rand(); 65 66 ses->peer_ssrc = 0; 66 67 67 /* Sequence number will be initialized when the first RTP packet is receieved. */ 68 /* Sequence number will be initialized when the first RTP packet 69 * is receieved. 70 */ 68 71 69 72 /* Build default header for outgoing RTP packet. */ … … 86 89 87 90 88 PJ_DEF(pj_status_t) pjmedia_rtp_encode_rtp( pjmedia_rtp_session *ses, int pt, int m, 89 int payload_len, int ts_len, 90 const void **rtphdr, int *hdrlen ) 91 { 92 PJ_UNUSED_ARG(payload_len) 93 94 PJ_LOG(6, (THIS_FILE, 95 "pjmedia_rtp_encode_rtp: ses=%p, pt=%d, m=%d, pt_len=%d, ts_len=%d", 96 ses, pt, m, payload_len, ts_len)); 91 PJ_DEF(pj_status_t) pjmedia_rtp_encode_rtp( pjmedia_rtp_session *ses, 92 int pt, int m, 93 int payload_len, int ts_len, 94 const void **rtphdr, int *hdrlen ) 95 { 96 PJ_UNUSED_ARG(payload_len); 97 97 98 98 /* Update timestamp */ … … 122 122 123 123 PJ_DEF(pj_status_t) pjmedia_rtp_decode_rtp( pjmedia_rtp_session *ses, 124 125 126 127 124 const void *pkt, int pkt_len, 125 const pjmedia_rtp_hdr **hdr, 126 const void **payload, 127 unsigned *payloadlen) 128 128 { 129 129 int offset; 130 130 131 PJ_UNUSED_ARG(ses) 132 133 PJ_LOG(6, (THIS_FILE, 134 "pjmedia_rtp_decode_rtp: ses=%p, pkt=%p, pkt_len=%d", 135 ses, pkt, pkt_len)); 131 PJ_UNUSED_ARG(ses); 136 132 137 133 /* Assume RTP header at the start of packet. We'll verify this later. */ … … 140 136 /* Check RTP header sanity. */ 141 137 if ((*hdr)->v != RTP_VERSION) { 142 PJ_LOG(4, (THIS_FILE, " invalid RTP version!"));143 138 return PJMEDIA_RTP_EINVER; 144 139 } … … 149 144 /* Adjust offset if RTP extension is used. */ 150 145 if ((*hdr)->x) { 151 pjmedia_rtp_ext_hdr *ext = (pjmedia_rtp_ext_hdr*) (((pj_uint8_t*)pkt) + offset); 146 pjmedia_rtp_ext_hdr *ext = (pjmedia_rtp_ext_hdr*) 147 (((pj_uint8_t*)pkt) + offset); 152 148 offset += (pj_ntohs(ext->length) * sizeof(pj_uint32_t)); 153 149 } … … 171 167 pjmedia_rtp_status seq_st; 172 168 173 /* Check SSRC. */174 if (ses->peer_ssrc == 0) ses->peer_ssrc = pj_ntohl(hdr->ssrc);175 /*176 if (pj_ntohl(ses->peer_ssrc) != hdr->ssrc) {177 PJ_LOG(4, (THIS_FILE, "pjmedia_rtp_session_update: ses=%p, invalid ssrc 0x%p (!=0x%p)",178 ses, pj_ntohl(hdr->ssrc), ses->peer_ssrc));179 return PJMEDIA_RTP_EINSSRC;180 }181 */182 183 169 /* Init status */ 184 170 seq_st.status.value = 0; 185 171 seq_st.diff = 0; 186 172 173 /* Check SSRC. */ 174 if (ses->peer_ssrc == 0) ses->peer_ssrc = pj_ntohl(hdr->ssrc); 175 176 if (pj_ntohl(hdr->ssrc) != ses->peer_ssrc) { 177 seq_st.status.flag.badssrc = 1; 178 ses->peer_ssrc = pj_ntohl(hdr->ssrc); 179 } 180 187 181 /* Check payload type. */ 188 182 if (hdr->pt != ses->out_pt) { 189 PJ_LOG(4, (THIS_FILE,190 "pjmedia_rtp_session_update: ses=%p, invalid payload "191 "type %d (expecting %d)",192 ses, hdr->pt, ses->out_pt));193 183 if (p_seq_st) { 184 p_seq_st->status.value = seq_st.status.value; 194 185 p_seq_st->status.flag.bad = 1; 195 186 p_seq_st->status.flag.badpt = 1;
Note: See TracChangeset
for help on using the changeset viewer.