Harald Welte has submitted this change and it was merged.

Change subject: strct mgcp_rtp_state: Group + document struct members related 
to patching
......................................................................


strct mgcp_rtp_state: Group + document struct members related to patching

Change-Id: I403ddcafe0a11290103bb017568cfacaf5c04412
---
M include/osmocom/mgcp/mgcp_internal.h
M src/libosmo-mgcp/mgcp_network.c
2 files changed, 31 insertions(+), 24 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/include/osmocom/mgcp/mgcp_internal.h 
b/include/osmocom/mgcp/mgcp_internal.h
index c3f9ba1..8d82b14 100644
--- a/include/osmocom/mgcp/mgcp_internal.h
+++ b/include/osmocom/mgcp/mgcp_internal.h
@@ -50,14 +50,21 @@
 };
 
 struct mgcp_rtp_state {
+       /* has this state structure been initialized? */
        int initialized;
-       int patch_ssrc;
 
-       uint32_t orig_ssrc;
+       struct {
+               /* are we patching the SSRC value? */
+               int patch_ssrc;
+               /* original SSRC (to which we shall patch any different SSRC) */
+               uint32_t orig_ssrc;
+               /* offset to apply on the sequence number */
+               int seq_offset;
+               /* offset to apply on the timestamp number */
+               int32_t timestamp_offset;
+       } patch;
 
-       int seq_offset;
-
-       int32_t  timestamp_offset;
+       /* duration of a packet (FIXME: in which unit?) */
        uint32_t packet_duration;
 
        struct mgcp_rtp_stream_state in_stream;
diff --git a/src/libosmo-mgcp/mgcp_network.c b/src/libosmo-mgcp/mgcp_network.c
index aac3e51..8c0a7e3 100644
--- a/src/libosmo-mgcp/mgcp_network.c
+++ b/src/libosmo-mgcp/mgcp_network.c
@@ -231,7 +231,7 @@
                             "on 0x%x SSRC: %u timestamp: %u "
                             "from %s:%d\n",
                             text, seq,
-                            state->timestamp_offset, state->seq_offset,
+                            state->patch.timestamp_offset, 
state->patch.seq_offset,
                             ENDPOINT_NUMBER(endp), sstate->ssrc, timestamp,
                             inet_ntoa(addr->sin_addr), ntohs(addr->sin_port));
                }
@@ -325,15 +325,15 @@
        out_timestamp = state->out_stream.last_timestamp + delta_seq * tsdelta;
        timestamp_offset = out_timestamp - in_timestamp;
 
-       if (state->timestamp_offset != timestamp_offset) {
-               state->timestamp_offset = timestamp_offset;
+       if (state->patch.timestamp_offset != timestamp_offset) {
+               state->patch.timestamp_offset = timestamp_offset;
 
                LOGP(DRTP, LOGL_NOTICE,
                     "Timestamp offset change on 0x%x SSRC: %u "
                     "SeqNo delta: %d, TS offset: %d, "
                     "from %s:%d\n",
                     ENDPOINT_NUMBER(endp), state->in_stream.ssrc,
-                    delta_seq, state->timestamp_offset,
+                    delta_seq, state->patch.timestamp_offset,
                     inet_ntoa(addr->sin_addr), ntohs(addr->sin_port));
        }
 
@@ -354,11 +354,11 @@
        /* Align according to: T + Toffs - Tlast = k * Tptime */
 
        ts_error = ts_alignment_error(&state->out_stream, ptime,
-                                     timestamp + state->timestamp_offset);
+                                     timestamp + 
state->patch.timestamp_offset);
 
        /* If there is an alignment error, we have to compensate it */
        if (ts_error) {
-               state->timestamp_offset += ptime - ts_error;
+               state->patch.timestamp_offset += ptime - ts_error;
 
                LOGP(DRTP, LOGL_NOTICE,
                     "Corrected timestamp alignment error of %d on 0x%x SSRC: 
%u "
@@ -366,7 +366,7 @@
                     "from %s:%d\n",
                     ts_error,
                     ENDPOINT_NUMBER(endp), state->in_stream.ssrc,
-                    state->timestamp_offset, inet_ntoa(addr->sin_addr),
+                    state->patch.timestamp_offset, inet_ntoa(addr->sin_addr),
                     ntohs(addr->sin_port));
        }
 
@@ -375,7 +375,7 @@
         * here would point to a serous problem with the alingnment
         * error computation fuction */
        ts_check = ts_alignment_error(&state->out_stream, ptime,
-                                     timestamp + state->timestamp_offset);
+                                     timestamp + 
state->patch.timestamp_offset);
        OSMO_ASSERT(ts_check == 0);
 
        /* Return alignment error before compensation */
@@ -508,7 +508,7 @@
        if (!state->initialized) {
                state->initialized = 1;
                state->in_stream.last_seq = seq - 1;
-               state->in_stream.ssrc = state->orig_ssrc = ssrc;
+               state->in_stream.ssrc = state->patch.orig_ssrc = ssrc;
                state->in_stream.last_tsdelta = 0;
                state->packet_duration =
                    mgcp_rtp_packet_duration(endp, rtp_end);
@@ -519,7 +519,7 @@
                     "endpoint:0x%x initializing stream, SSRC: %u timestamp: %u 
"
                     "pkt-duration: %d, from %s:%d\n",
                     ENDPOINT_NUMBER(endp), state->in_stream.ssrc,
-                    state->seq_offset, state->packet_duration,
+                    state->patch.seq_offset, state->packet_duration,
                     inet_ntoa(addr->sin_addr), ntohs(addr->sin_port));
                if (state->packet_duration == 0) {
                        state->packet_duration =
@@ -543,7 +543,7 @@
                        int16_t delta_seq;
 
                        /* Always increment seqno by 1 */
-                       state->seq_offset =
+                       state->patch.seq_offset =
                            (state->out_stream.last_seq + 1) - seq;
 
                        /* Estimate number of packets that would have been sent 
*/
@@ -555,8 +555,8 @@
                        adjust_rtp_timestamp_offset(endp, state, rtp_end, addr,
                                                    delta_seq, timestamp);
 
-                       state->patch_ssrc = 1;
-                       ssrc = state->orig_ssrc;
+                       state->patch.patch_ssrc = 1;
+                       ssrc = state->patch.orig_ssrc;
                        if (rtp_end->force_constant_ssrc != -1)
                                rtp_end->force_constant_ssrc -= 1;
 
@@ -565,7 +565,7 @@
                             "SeqNo offset: %d, TS offset: %d "
                             "from %s:%d\n",
                             ENDPOINT_NUMBER(endp), state->in_stream.ssrc,
-                            state->seq_offset, state->timestamp_offset,
+                            state->patch.seq_offset, 
state->patch.timestamp_offset,
                             inet_ntoa(addr->sin_addr), ntohs(addr->sin_port));
                }
 
@@ -576,8 +576,8 @@
                                    addr, seq, timestamp, "input",
                                    &state->in_stream.last_tsdelta);
 
-               if (state->patch_ssrc)
-                       ssrc = state->orig_ssrc;
+               if (state->patch.patch_ssrc)
+                       ssrc = state->patch.orig_ssrc;
        }
 
        /* Save before patching */
@@ -592,15 +592,15 @@
                                           timestamp);
 
        /* Store the updated SSRC back to the packet */
-       if (state->patch_ssrc)
+       if (state->patch.patch_ssrc)
                rtp_hdr->ssrc = htonl(ssrc);
 
        /* Apply the offset and store it back to the packet.
         * This won't change anything if the offset is 0, so the conditional is
         * omitted. */
-       seq += state->seq_offset;
+       seq += state->patch.seq_offset;
        rtp_hdr->sequence = htons(seq);
-       timestamp += state->timestamp_offset;
+       timestamp += state->patch.timestamp_offset;
        rtp_hdr->timestamp = htonl(timestamp);
 
        /* Check again, whether the timestamps are still valid */

-- 
To view, visit https://gerrit.osmocom.org/5581
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I403ddcafe0a11290103bb017568cfacaf5c04412
Gerrit-PatchSet: 2
Gerrit-Project: osmo-mgw
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <lafo...@gnumonks.org>
Gerrit-Reviewer: Harald Welte <lafo...@gnumonks.org>
Gerrit-Reviewer: Jenkins Builder

Reply via email to