X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=ortp_recv.c;h=12a990c3fc322f8be59f5ed12f19fe08381ec96b;hb=03498e08cc4905654b8623b5a2983943b00e5f42;hp=d9b260980e89f0a0c06d9de72cb390de0075aeef;hpb=7d1805d1559e08e0af701155574aef220925d411;p=paraslash.git diff --git a/ortp_recv.c b/ortp_recv.c index d9b26098..12a990c3 100644 --- a/ortp_recv.c +++ b/ortp_recv.c @@ -32,8 +32,6 @@ #define CHUNK_SIZE 128 * 1024 -extern int msg_to_buf(mblk_t *, char *, int); - /** * data specific to the ortp receiver * @@ -67,6 +65,37 @@ uint32_t timestamp; uint32_t chunk_ts; }; + +static int msg_to_buf(mblk_t *mp, char *buffer, int len) +{ + int rlen = len; + mblk_t *m, *mprev; + int mlen; + + m = mp->b_cont; + mprev = mp; + while (m != NULL) { + mlen = (int) (m->b_wptr - m->b_rptr); + if (mlen <= rlen) { + mblk_t *consumed = m; + memcpy (buffer, m->b_rptr, mlen); + /* go to next mblk_t */ + mprev->b_cont = m->b_cont; + m = m->b_cont; + consumed->b_cont = NULL; + freeb (consumed); + buffer += mlen; + rlen -= mlen; + } else { /*if mlen>rlen */ + memcpy (buffer, m->b_rptr, rlen); + m->b_rptr += rlen; + return len; + } + } + return len - rlen; +} + + static void ortp_recv_pre_select(struct sched *s, struct task *t) { struct receiver_node *rn = t->private_data;