? rtpproxy-1.1.tar.gz ? rtpproxy-1.2.alpha.200807161.tar.gz ? rtpproxy-1.2.alpha.200807211.tar.gz Index: main.c =================================================================== RCS file: /cvsroot/ser/rtpproxy/main.c,v retrieving revision 1.83 diff -d -u -r1.83 main.c --- main.c 17 Sep 2008 01:11:20 -0000 1.83 +++ main.c 9 Oct 2008 20:41:30 -0000 @@ -641,7 +641,7 @@ } else { sp->pcount[2]++; for (i = (cf->dmode && packet->size < LBR_THRS) ? 2 : 1; i > 0; i--) { - sendto(sp->fds[sidx], packet->buf, packet->size, 0, sp->addr[sidx], + sendto(sp->fds[sidx], packet->data.buf, packet->size, 0, sp->addr[sidx], SA_LEN(sp->addr[sidx])); } } Index: rtp.c =================================================================== RCS file: /cvsroot/ser/rtpproxy/rtp.c,v retrieving revision 1.7 diff -d -u -r1.7 rtp.c --- rtp.c 17 Apr 2008 22:38:00 -0000 1.7 +++ rtp.c 9 Oct 2008 20:41:30 -0000 @@ -154,7 +154,7 @@ return; } - buf = &pkt->buf[pkt->data_offset]; + buf = &pkt->data.buf[pkt->data_offset]; while (pos < pkt->data_size && samples > found_samples) { found_samples += 240; n = g723_len(buf[pos]); @@ -178,7 +178,7 @@ assert(pkt->nsamples > min_nsamples); ret->whole_packet_matched = 0; - switch (pkt->header.pt) { + switch (pkt->data.header.pt) { case RTP_PCMU: case RTP_PCMA: rtp_packet_chunk_find_g711(pkt, ret, min_nsamples); @@ -213,25 +213,26 @@ pkt->data_offset = 0; pkt->nsamples = RTP_NSAMPLES_UNKNOWN; - if (pkt->header.version != 2) + if (pkt->data.header.version != 2) return; - pkt->data_offset = RTP_HDR_LEN(&pkt->header); + pkt->data_offset = RTP_HDR_LEN(&pkt->data.header); - if (pkt->header.p) + if (pkt->data.header.p) padding_size = ((unsigned char *) pkt)[pkt->size - 1]; pkt->data_size = pkt->size - pkt->data_offset - padding_size; - pkt->nsamples = rtp_calc_samples(pkt->header.pt, pkt->data_size, &pkt->buf[pkt->data_offset]); - pkt->ts = ntohl(pkt->header.ts); - pkt->seq = ntohs(pkt->header.seq); + pkt->nsamples = rtp_calc_samples(pkt->data.header.pt, pkt->data_size, + &pkt->data.buf[pkt->data_offset]); + pkt->ts = ntohl(pkt->data.header.ts); + pkt->seq = ntohs(pkt->data.header.seq); pkt->appendable = 1; /* * G.729 comfort noise frame as the last frame causes * packet to be non-appendable */ - if (pkt->header.pt == RTP_G729 && (pkt->data_size % 10) != 0) + if (pkt->data.header.pt == RTP_G729 && (pkt->data_size % 10) != 0) pkt->appendable = 0; } @@ -268,7 +269,7 @@ return NULL; pkt->rlen = sizeof(pkt->raddr); - pkt->size = recvfrom(fd, pkt->buf, sizeof(pkt->buf), 0, + pkt->size = recvfrom(fd, pkt->data.buf, sizeof(pkt->data.buf), 0, sstosa(&pkt->raddr), &pkt->rlen); if (pkt->size == -1) { @@ -284,7 +285,7 @@ { p->seq = seq; - p->header.seq = htons(seq); + p->data.header.seq = htons(seq); } void @@ -292,5 +293,5 @@ { p->ts = ts; - p->header.ts = htonl(ts); + p->data.header.ts = htonl(ts); } Index: rtp.h =================================================================== RCS file: /cvsroot/ser/rtpproxy/rtp.h,v retrieving revision 1.9 diff -d -u -r1.9 rtp.h --- rtp.h 16 Jul 2008 20:42:21 -0000 1.9 +++ rtp.h 9 Oct 2008 20:41:30 -0000 @@ -102,7 +102,7 @@ union { rtp_hdr_t header; unsigned char buf[8192]; - }; + } data; }; struct rtp_packet_chunk { Index: rtp_resizer.c =================================================================== RCS file: /cvsroot/ser/rtpproxy/rtp_resizer.c,v retrieving revision 1.4 diff -d -u -r1.4 rtp_resizer.c --- rtp_resizer.c 15 Jul 2008 23:14:52 -0000 1.4 +++ rtp_resizer.c 9 Oct 2008 20:41:31 -0000 @@ -151,8 +151,8 @@ append_packet(struct rtp_packet *dst, struct rtp_packet *src) { - memcpy(&dst->buf[dst->data_offset + dst->data_size], - &src->buf[src->data_offset], src->data_size); + memcpy(&dst->data.buf[dst->data_offset + dst->data_size], + &src->data.buf[src->data_offset], src->data_size); dst->nsamples += src->nsamples; dst->data_size += src->data_size; dst->size += src->data_size; @@ -164,8 +164,8 @@ { /* Copy chunk */ - memcpy(&dst->buf[dst->data_offset + dst->data_size], - &src->buf[src->data_offset], chunk->bytes); + memcpy(&dst->data.buf[dst->data_offset + dst->data_size], + &src->data.buf[src->data_offset], chunk->bytes); dst->nsamples += chunk->nsamples; dst->data_size += chunk->bytes; dst->size += chunk->bytes; @@ -175,14 +175,16 @@ rtp_packet_set_ts(src, src->ts + chunk->nsamples); src->data_size -= chunk->bytes; src->size -= chunk->bytes; - memmove(&src->buf[src->data_offset], &src->buf[src->data_offset + chunk->bytes], src->data_size); + memmove(&src->data.buf[src->data_offset], + &src->data.buf[src->data_offset + chunk->bytes], src->data_size); } static void move_chunk(struct rtp_packet *dst, struct rtp_packet *src, const struct rtp_packet_chunk *chunk) { /* Copy chunk */ - memcpy(&dst->buf[dst->data_offset], &src->buf[src->data_offset], chunk->bytes); + memcpy(&dst->data.buf[dst->data_offset], + &src->data.buf[src->data_offset], chunk->bytes); dst->nsamples = chunk->nsamples; dst->data_size = chunk->bytes; dst->size = dst->data_size + dst->data_offset; @@ -192,7 +194,8 @@ rtp_packet_set_ts(src, src->ts + chunk->nsamples); src->data_size -= chunk->bytes; src->size -= chunk->bytes; - memmove(&src->buf[src->data_offset], &src->buf[src->data_offset + chunk->bytes], src->data_size); + memmove(&src->data.buf[src->data_offset], + &src->data.buf[src->data_offset + chunk->bytes], src->data_size); } struct rtp_packet * @@ -221,7 +224,7 @@ } output_nsamples = this->output_nsamples; - max = max_nsamples(this->queue.first->header.pt); + max = max_nsamples(this->queue.first->data.header.pt); if (max > 0 && output_nsamples > max) output_nsamples = max; @@ -241,7 +244,7 @@ ret = rtp_packet_alloc(); if (ret == NULL) break; - memcpy(ret, p, offsetof(struct rtp_packet, buf)); + memcpy(ret, p, offsetof(struct rtp_packet, data.buf)); move_chunk(ret, p, &chunk); ++split; } @@ -257,7 +260,7 @@ { /* detect holes and payload changes in RTP stream */ if ((ret->ts + ret->nsamples) != p->ts || - ret->header.pt != p->header.pt) + ret->data.header.pt != p->data.header.pt) { break; } @@ -269,7 +272,7 @@ rtp_packet_first_chunk_find(p, &chunk, nsamples_left); if (chunk.whole_packet_matched) { /* Prevent RTP packet buffer overflow */ - if ((ret->size + p->data_size) > sizeof(ret->buf)) + if ((ret->size + p->data_size) > sizeof(ret->data.buf)) break; append_packet(ret, p); detach_queue_head(this); @@ -277,7 +280,7 @@ } else { /* Prevent RTP packet buffer overflow */ - if ((ret->size + chunk.bytes) > sizeof(ret->buf)) + if ((ret->size + chunk.bytes) > sizeof(ret->data.buf)) break; /* Append chunk to output */ append_chunk(ret, p, &chunk); @@ -292,7 +295,7 @@ /* * Prevent RTP packet buffer overflow */ - if (ret != NULL && (ret->size + p->data_size) > sizeof(ret->buf)) + if (ret != NULL && (ret->size + p->data_size) > sizeof(ret->data.buf)) break; /* Detach head packet from the queue */ @@ -323,7 +326,7 @@ this->last_sent_ts_inited = 1; this->last_sent_ts = ret->ts + ret->nsamples; /* - printf("Payload %d, %d packets aggregated, %d splits done, final size %dms\n", ret->header.pt, count, split, ret->nsamples / 8); + printf("Payload %d, %d packets aggregated, %d splits done, final size %dms\n", ret->data.header.pt, count, split, ret->nsamples / 8); */ } return ret; Index: rtpp_command.c =================================================================== RCS file: /cvsroot/ser/rtpproxy/rtpp_command.c,v retrieving revision 1.18 diff -d -u -r1.18 rtpp_command.c --- rtpp_command.c 17 Sep 2008 01:11:20 -0000 1.18 +++ rtpp_command.c 9 Oct 2008 20:41:31 -0000 @@ -289,7 +289,7 @@ cp = buf; argc = 0; memset(argv, 0, sizeof(argv)); - for (ap = argv; (*ap = strsep(&cp, "\r\n\t ")) != NULL;) + for (ap = argv; (*ap = rtpp_strsep(&cp, "\r\n\t ")) != NULL;) if (**ap != '\0') { argc++; if (++ap >= &argv[10]) Index: rtpp_defines.h =================================================================== RCS file: /cvsroot/ser/rtpproxy/rtpp_defines.h,v retrieving revision 1.19 diff -d -u -r1.19 rtpp_defines.h --- rtpp_defines.h 17 Sep 2008 01:12:41 -0000 1.19 +++ rtpp_defines.h 9 Oct 2008 20:41:31 -0000 @@ -39,6 +39,10 @@ #include #endif +#if !defined(__solaris__) && defined(__sun) && defined(__svr4__) +#define __solaris__ 1 +#endif + #include "rtpp_log.h" /* Index: rtpp_record.c =================================================================== RCS file: /cvsroot/ser/rtpproxy/rtpp_record.c,v retrieving revision 1.11 diff -d -u -r1.11 rtpp_record.c --- rtpp_record.c 18 Jul 2008 00:17:25 -0000 1.11 +++ rtpp_record.c 9 Oct 2008 20:41:32 -0000 @@ -309,7 +309,7 @@ switch (RRC_CAST(rrc)->mode) { case MODE_REMOTE_RTP: - send(RRC_CAST(rrc)->fd, packet->buf, packet->size, 0); + send(RRC_CAST(rrc)->fd, packet->data.buf, packet->size, 0); return; case MODE_LOCAL_PKT: @@ -335,7 +335,7 @@ v[0].iov_base = (void *)&hdr; v[0].iov_len = hdr_size; - v[1].iov_base = packet->buf; + v[1].iov_base = packet->data.buf; v[1].iov_len = packet->size; rval = writev(RRC_CAST(rrc)->fd, v, 2); @@ -352,7 +352,7 @@ if (prepare_pkt_hdr(sp, packet, (void *)(RRC_CAST(rrc)->rbuf + RRC_CAST(rrc)->rbuf_len)) != 0) return; RRC_CAST(rrc)->rbuf_len += hdr_size; - memcpy(RRC_CAST(rrc)->rbuf + RRC_CAST(rrc)->rbuf_len, packet->buf, packet->size); + memcpy(RRC_CAST(rrc)->rbuf + RRC_CAST(rrc)->rbuf_len, packet->data.buf, packet->size); RRC_CAST(rrc)->rbuf_len += packet->size; } Index: rtpp_util.c =================================================================== RCS file: /cvsroot/ser/rtpproxy/rtpp_util.c,v retrieving revision 1.10 diff -d -u -r1.10 rtpp_util.c --- rtpp_util.c 14 Aug 2008 01:40:50 -0000 1.10 +++ rtpp_util.c 9 Oct 2008 20:41:32 -0000 @@ -263,3 +263,36 @@ /* Set the last used element to be the last element */ cf->port_table_idx = cf->port_table_len - 1; } + +/* + * Portable strsep(3) implementation, borrowed from FreeBSD. For license + * and other information see: + * + * $FreeBSD: src/lib/libc/string/strsep.c,v 1.6 2007/01/09 00:28:12 imp Exp $ + */ +char * +rtpp_strsep(char **stringp, const char *delim) +{ + char *s; + const char *spanp; + int c, sc; + char *tok; + + if ((s = *stringp) == NULL) + return (NULL); + for (tok = s;;) { + c = *s++; + spanp = delim; + do { + if ((sc = *spanp++) == c) { + if (c == 0) + s = NULL; + else + s[-1] = 0; + *stringp = s; + return (tok); + } + } while (sc != 0); + } + /* NOTREACHED */ +} Index: rtpp_util.h =================================================================== RCS file: /cvsroot/ser/rtpproxy/rtpp_util.h,v retrieving revision 1.11 diff -d -u -r1.11 rtpp_util.h --- rtpp_util.h 14 Aug 2008 01:40:50 -0000 1.11 +++ rtpp_util.h 9 Oct 2008 20:41:32 -0000 @@ -59,6 +59,7 @@ int drop_privileges(struct cfg *); uint16_t rtpp_in_cksum(void *, int); void init_port_table(struct cfg *); +char *rtpp_strsep(char **, const char *); /* Stripped down version of sockaddr_in* for saving space */ struct sockaddr_in4_s {