osmux_snprintf: Support different types of Osmux frames
Previous implementation handled all types as if they were Osmux AMR frames. For Dummy frames, we account the padding but we don't care about the padding content. For Signalling ones, as they are not in the specification yet, it is better avoid using unespecified fields and return an error because it's still not known how extra data will be handled in the input msgb. Change-Id: I48565472b47c2a0e5db50881fbb005537af8c70d
This commit is contained in:
parent
05bb1c2b2e
commit
77d08a67b5
56
src/osmux.c
56
src/osmux.c
|
@ -921,30 +921,44 @@ int osmux_snprintf(char *buf, size_t size, struct msgb *msg)
|
|||
msg_off += sizeof(struct osmux_hdr);
|
||||
msg_len -= sizeof(struct osmux_hdr);
|
||||
|
||||
if (!osmo_amr_ft_valid(osmuxh->amr_ft)) {
|
||||
LOGP(DLMIB, LOGL_ERROR, "Bad AMR FT %d, skipping\n",
|
||||
osmuxh->amr_ft);
|
||||
switch (osmuxh->ft) {
|
||||
case OSMUX_FT_SIGNAL:
|
||||
ret = snprintf(buf + offset, remain, "[signal]");
|
||||
SNPRINTF_BUFFER_SIZE(ret, remain, offset);
|
||||
return -1;
|
||||
case OSMUX_FT_DUMMY:
|
||||
case OSMUX_FT_VOICE_AMR:
|
||||
if (!osmo_amr_ft_valid(osmuxh->amr_ft)) {
|
||||
LOGP(DLMIB, LOGL_ERROR, "Bad AMR FT %d, skipping\n",
|
||||
osmuxh->amr_ft);
|
||||
return -1;
|
||||
}
|
||||
|
||||
payload_len = osmux_get_payload_len(osmuxh);
|
||||
|
||||
if (msg_len < payload_len) {
|
||||
LOGP(DLMIB, LOGL_ERROR,
|
||||
"No room for OSMUX payload: only %d bytes\n",
|
||||
msg_len);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (osmuxh->ft == OSMUX_FT_VOICE_AMR) {
|
||||
ret = osmux_snprintf_payload(buf + offset, remain,
|
||||
osmux_get_payload(osmuxh),
|
||||
payload_len);
|
||||
SNPRINTF_BUFFER_SIZE(ret, remain, offset);
|
||||
}
|
||||
|
||||
msg_off += payload_len;
|
||||
msg_len -= payload_len;
|
||||
break;
|
||||
default:
|
||||
LOGP(DLMIB, LOGL_ERROR, "Unknown OSMUX ft value %d\n",
|
||||
osmuxh->ft);
|
||||
return -1;
|
||||
}
|
||||
|
||||
payload_len = osmux_get_payload_len(osmuxh);
|
||||
|
||||
if (msg_len < payload_len) {
|
||||
LOGP(DLMIB, LOGL_ERROR,
|
||||
"No room for OSMUX payload: only %d bytes\n",
|
||||
msg_len);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = osmux_snprintf_payload(buf + offset, remain,
|
||||
osmux_get_payload(osmuxh),
|
||||
payload_len);
|
||||
SNPRINTF_BUFFER_SIZE(ret, remain, offset);
|
||||
|
||||
msg_off += payload_len;
|
||||
msg_len -= payload_len;
|
||||
}
|
||||
|
||||
return offset;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue