<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-mgw/+/15138">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mgcp_codec: codec_set(): log about all possible errors<br><br>In codec_set(), for each 'goto error', log the specific error cause.<br><br>Also add a TODO and a FIXME comment about inventing dynamic payload type<br>numbers.<br><br>Change-Id: I0b44b574c814882b6f8ae7cd738a6f481cd721fd<br>---<br>M src/libosmo-mgcp/mgcp_codec.c<br>1 file changed, 27 insertions(+), 9 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-mgw refs/changes/38/15138/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/libosmo-mgcp/mgcp_codec.c b/src/libosmo-mgcp/mgcp_codec.c</span><br><span>index a947bb3..93a8157 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_codec.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_codec.c</span><br><span>@@ -121,12 +121,13 @@</span><br><span> if (payload_type != PTYPE_UNDEFINED) {</span><br><span> /* Make sure we do not get any reserved or undefined type numbers */</span><br><span> /* See also: https://www.iana.org/assignments/rtp-parameters/rtp-parameters.xhtml */</span><br><span style="color: hsl(0, 100%, 40%);">- if (payload_type == 1 || payload_type == 2 || payload_type == 19)</span><br><span style="color: hsl(120, 100%, 40%);">+ if ((payload_type == 1 || payload_type == 2 || payload_type == 19)</span><br><span style="color: hsl(120, 100%, 40%);">+ || (payload_type >= 72 && payload_type <= 76)</span><br><span style="color: hsl(120, 100%, 40%);">+ || (payload_type >= 127)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGP(DLMGCP, LOGL_ERROR, "Cannot add codec, payload type number %d is reserved\n",</span><br><span style="color: hsl(120, 100%, 40%);">+ payload_type);</span><br><span> goto error;</span><br><span style="color: hsl(0, 100%, 40%);">- if (payload_type >= 72 && payload_type <= 76)</span><br><span style="color: hsl(0, 100%, 40%);">- goto error;</span><br><span style="color: hsl(0, 100%, 40%);">- if (payload_type >= 127)</span><br><span style="color: hsl(0, 100%, 40%);">- goto error;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> </span><br><span> codec->payload_type = payload_type;</span><br><span> }</span><br><span>@@ -152,6 +153,8 @@</span><br><span> /* The given payload type is not known to us, or it</span><br><span> * it is a dynamic payload type for which we do not</span><br><span> * know the audio name. We must give up here */</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGP(DLMGCP, LOGL_ERROR, "No audio codec name given, and payload type %d unknown\n",</span><br><span style="color: hsl(120, 100%, 40%);">+ payload_type);</span><br><span> goto error;</span><br><span> }</span><br><span> }</span><br><span>@@ -159,16 +162,23 @@</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(120, 100%, 40%);">+ if (strlen(audio_name) > sizeof(audio_codec)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGP(DLMGCP, LOGL_ERROR, "Audio codec too long: %s\n", osmo_quote_str(audio_name, -1));</span><br><span> goto error;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</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(120, 100%, 40%);">+ if (sscanf(audio_name, "%63[^/]/%d/%d", audio_codec, &rate, &channels) < 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGP(DLMGCP, LOGL_ERROR, "Invalid audio codec: %s\n", osmo_quote_str(audio_name, -1));</span><br><span> goto error;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> </span><br><span> /* Note: We only accept configurations with one audio channel! */</span><br><span style="color: hsl(0, 100%, 40%);">- if (channels != 1)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (channels != 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGP(DLMGCP, LOGL_ERROR, "Cannot handle audio codec with more than one channel: %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_quote_str(audio_name, -1));</span><br><span> goto error;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> </span><br><span> codec->rate = rate;</span><br><span> codec->channels = channels;</span><br><span>@@ -186,6 +196,9 @@</span><br><span> </span><br><span> /* Derive the payload type if it is unknown */</span><br><span> if (codec->payload_type == PTYPE_UNDEFINED) {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* TODO: since all codecs are ultimately added by SDP lines like 'a=rtpmap:98 AMR/8000' I can't</span><br><span style="color: hsl(120, 100%, 40%);">+ * currently see any practical use case for this condition: is there really ever a situation where the</span><br><span style="color: hsl(120, 100%, 40%);">+ * payload type number is unknown in this function??? */</span><br><span> </span><br><span> /* For the known codecs from the static range we restore</span><br><span> * the IANA or 3GPP assigned payload type number */</span><br><span>@@ -221,9 +234,14 @@</span><br><span> * 110 onwards 3gpp defines prefered codec types, which are</span><br><span> * also fixed, see above) */</span><br><span> if (codec->payload_type < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: pt_offset is completely unrelated and useless here, any of those numbers may already</span><br><span style="color: hsl(120, 100%, 40%);">+ * have been added to the codecs. Instead, there should be an iterator checking for an actually</span><br><span style="color: hsl(120, 100%, 40%);">+ * unused dynamic payload type number. */</span><br><span> codec->payload_type = 96 + pt_offset;</span><br><span style="color: hsl(0, 100%, 40%);">- if (codec->payload_type > 109)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (codec->payload_type > 109) {</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGP(DLMGCP, LOGL_ERROR, "Ran out of payload type numbers to assign dynamically\n");</span><br><span> goto error;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> }</span><br><span> }</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-mgw/+/15138">change 15138</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/+/15138"/><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: I0b44b574c814882b6f8ae7cd738a6f481cd721fd </div>
<div style="display:none"> Gerrit-Change-Number: 15138 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>