<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-mgw/+/25421">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved
  pespin: Looks good to me, but someone else must approve

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">libosmo-mgcp: cleanup audio codex alloc<br><br>No need to complicate audio codes with pointers, our "usual" string is<br>barely larger than a poointer, five times smaller than a talloc header,<br>and most importantly not really optional anyway...<br><br>Change-Id: Icc41643050a5e1ca3c66f307d60b6911ba1b8032<br>---<br>M include/osmocom/mgcp/mgcp_network.h<br>M src/libosmo-mgcp/mgcp_codec.c<br>M src/libosmo-mgcp/mgcp_sdp.c<br>3 files changed, 18 insertions(+), 22 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/mgcp/mgcp_network.h b/include/osmocom/mgcp/mgcp_network.h</span><br><span>index d6d90dd..b9cf5e3 100644</span><br><span>--- a/include/osmocom/mgcp/mgcp_network.h</span><br><span>+++ b/include/osmocom/mgcp/mgcp_network.h</span><br><span>@@ -81,8 +81,8 @@</span><br><span>       uint32_t frame_duration_den;</span><br><span> </span><br><span>     int payload_type;</span><br><span style="color: hsl(0, 100%, 40%);">-       char *audio_name;</span><br><span style="color: hsl(0, 100%, 40%);">-       char *subtype_name;</span><br><span style="color: hsl(120, 100%, 40%);">+   char audio_name[64];</span><br><span style="color: hsl(120, 100%, 40%);">+  char subtype_name[64];</span><br><span> </span><br><span>   bool param_present;</span><br><span>  struct mgcp_codec_param param;</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_codec.c b/src/libosmo-mgcp/mgcp_codec.c</span><br><span>index f237e38..06dcedc 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_codec.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_codec.c</span><br><span>@@ -89,15 +89,13 @@</span><br><span>                .frame_duration_den = DEFAULT_RTP_AUDIO_FRAME_DUR_DEN,</span><br><span>               .rate = DEFAULT_RTP_AUDIO_DEFAULT_RATE,</span><br><span>              .channels = DEFAULT_RTP_AUDIO_DEFAULT_CHANNELS,</span><br><span style="color: hsl(120, 100%, 40%);">+               .subtype_name = "",</span><br><span style="color: hsl(120, 100%, 40%);">+         .audio_name = "",</span><br><span>  };</span><br><span> }</span><br><span> </span><br><span> static void codec_free(struct mgcp_rtp_codec *codec)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-        if (codec->subtype_name)</span><br><span style="color: hsl(0, 100%, 40%);">-             talloc_free(codec->subtype_name);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (codec->audio_name)</span><br><span style="color: hsl(0, 100%, 40%);">-               talloc_free(codec->audio_name);</span><br><span>   *codec = (struct mgcp_rtp_codec){};</span><br><span> }</span><br><span> </span><br><span>@@ -124,10 +122,8 @@</span><br><span> {</span><br><span>     int rate;</span><br><span>    int channels;</span><br><span style="color: hsl(0, 100%, 40%);">-   char audio_codec[64];</span><br><span>        struct mgcp_rtp_codec *codec;</span><br><span>        unsigned int pt_offset = conn->end.codecs_assigned;</span><br><span style="color: hsl(0, 100%, 40%);">-  void *ctx = conn->conn;</span><br><span> </span><br><span>       /* The amount of codecs we can store is limited, make sure we do not</span><br><span>          * overrun this limit. */</span><br><span>@@ -160,16 +156,16 @@</span><br><span>    if (!audio_name) {</span><br><span>           switch (payload_type) {</span><br><span>              case 0:</span><br><span style="color: hsl(0, 100%, 40%);">-                 audio_name = talloc_strdup(ctx, "PCMU/8000/1");</span><br><span style="color: hsl(120, 100%, 40%);">+                     strcpy(codec->audio_name, "PCMU/8000/1");</span><br><span>                       break;</span><br><span>               case 3:</span><br><span style="color: hsl(0, 100%, 40%);">-                 audio_name = talloc_strdup(ctx, "GSM/8000/1");</span><br><span style="color: hsl(120, 100%, 40%);">+                      strcpy(codec->audio_name, "GSM/8000/1");</span><br><span>                        break;</span><br><span>               case 8:</span><br><span style="color: hsl(0, 100%, 40%);">-                 audio_name = talloc_strdup(ctx, "PCMA/8000/1");</span><br><span style="color: hsl(120, 100%, 40%);">+                     strcpy(codec->audio_name, "PCMA/8000/1");</span><br><span>                       break;</span><br><span>               case 18:</span><br><span style="color: hsl(0, 100%, 40%);">-                        audio_name = talloc_strdup(ctx, "G729/8000/1");</span><br><span style="color: hsl(120, 100%, 40%);">+                     strcpy(codec->audio_name, "G729/8000/1");</span><br><span>                       break;</span><br><span>               default:</span><br><span>                     /* The given payload type is not known to us, or it</span><br><span>@@ -179,36 +175,36 @@</span><br><span>                       payload_type);</span><br><span>                  goto error;</span><br><span>          }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              strncpy(codec->audio_name, audio_name, sizeof(codec->audio_name));</span><br><span>     }</span><br><span> </span><br><span>        /* Now we extract the codec subtype name, rate and channels. The latter</span><br><span>       * two are optional. If they are not present we use the safe defaults</span><br><span>         * above. */</span><br><span style="color: hsl(0, 100%, 40%);">-    if (strlen(audio_name) >= sizeof(audio_codec)) {</span><br><span style="color: hsl(0, 100%, 40%);">-             LOGP(DLMGCP, LOGL_ERROR, "Audio codec too long: %s\n", osmo_quote_str(audio_name, -1));</span><br><span style="color: hsl(120, 100%, 40%);">+     if (strlen(codec->audio_name) >= sizeof(codec->subtype_name)) {</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGP(DLMGCP, LOGL_ERROR, "Audio codec too long: %s\n", osmo_quote_str(codec->audio_name, -1));</span><br><span>          goto error;</span><br><span>  }</span><br><span>    channels = DEFAULT_RTP_AUDIO_DEFAULT_CHANNELS;</span><br><span>       rate = DEFAULT_RTP_AUDIO_DEFAULT_RATE;</span><br><span style="color: hsl(0, 100%, 40%);">-  if (sscanf(audio_name, "%63[^/]/%d/%d", audio_codec, &rate, &channels) < 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-              LOGP(DLMGCP, LOGL_ERROR, "Invalid audio codec: %s\n", osmo_quote_str(audio_name, -1));</span><br><span style="color: hsl(120, 100%, 40%);">+      if (sscanf(codec->audio_name, "%63[^/]/%d/%d", codec->subtype_name, &rate, &channels) < 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+               LOGP(DLMGCP, LOGL_ERROR, "Invalid audio codec: %s\n", osmo_quote_str(codec->audio_name, -1));</span><br><span>           goto error;</span><br><span>  }</span><br><span> </span><br><span>        /* Note: We only accept configurations with one audio channel! */</span><br><span>    if (channels != 1) {</span><br><span>                 LOGP(DLMGCP, LOGL_ERROR, "Cannot handle audio codec with more than one channel: %s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                     osmo_quote_str(audio_name, -1));</span><br><span style="color: hsl(120, 100%, 40%);">+              osmo_quote_str(codec->audio_name, -1));</span><br><span>              goto error;</span><br><span>  }</span><br><span> </span><br><span>        codec->rate = rate;</span><br><span>       codec->channels = channels;</span><br><span style="color: hsl(0, 100%, 40%);">-  codec->subtype_name = talloc_strdup(ctx, audio_codec);</span><br><span style="color: hsl(0, 100%, 40%);">-       codec->audio_name = talloc_strdup(ctx, audio_name);</span><br><span>       codec->payload_type = payload_type;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      if (!strcmp(audio_codec, "G729")) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!strcmp(codec->subtype_name, "G729")) {</span><br><span>             codec->frame_duration_num = 10;</span><br><span>           codec->frame_duration_den = 1000;</span><br><span>         } else {</span><br><span>@@ -287,7 +283,7 @@</span><br><span>       /* A codec name must be set, if not, this might mean that the codec</span><br><span>   * (payload type) that was assigned is unknown to us so we must stop</span><br><span>          * here. */</span><br><span style="color: hsl(0, 100%, 40%);">-     if (!codec->subtype_name)</span><br><span style="color: hsl(120, 100%, 40%);">+  if (!strlen(codec->subtype_name))</span><br><span>                 return false;</span><br><span> </span><br><span>    /* FIXME: implement meaningful checks to make sure that the given codec</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_sdp.c b/src/libosmo-mgcp/mgcp_sdp.c</span><br><span>index eabaf53..077ac96 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_sdp.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_sdp.c</span><br><span>@@ -439,7 +439,7 @@</span><br><span>       for (i = 0; i < codecs_used; i++) {</span><br><span>               LOGPC(DLMGCP, LOGL_NOTICE, "%d=%s",</span><br><span>                      rtp->codecs[i].payload_type,</span><br><span style="color: hsl(0, 100%, 40%);">-                 rtp->codecs[i].subtype_name ? rtp-> codecs[i].subtype_name : "unknown");</span><br><span style="color: hsl(120, 100%, 40%);">+                      strlen(rtp->codecs[i].subtype_name) ? rtp->codecs[i].subtype_name : "unknown");</span><br><span>                LOGPC(DLMGCP, LOGL_NOTICE, " ");</span><br><span>   }</span><br><span>    LOGPC(DLMGCP, LOGL_NOTICE, "\n");</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-mgw/+/25421">change 25421</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-mgw/+/25421"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-mgw </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Icc41643050a5e1ca3c66f307d60b6911ba1b8032 </div>
<div style="display:none"> Gerrit-Change-Number: 25421 </div>
<div style="display:none"> Gerrit-PatchSet: 8 </div>
<div style="display:none"> Gerrit-Owner: Hoernchen <ewild@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-CC: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>