/* If consecutive voice frame timestamps jump by more than this many milliseconds, then jitter buffer will resync */
#define TS_GAP_FOR_JB_RESYNC 5000
+/* used for first_iax_message and last_iax_message. If this bit is set it was TX, else RX */
+#define MARK_IAX_SUBCLASS_TX 0x8000
+
static int iaxthreadcount = DEFAULT_THREAD_COUNT;
static int iaxmaxthreadcount = DEFAULT_MAX_THREAD_COUNT;
static int iaxdynamicthreadcount = 0;
}
if (f->frametype == AST_FRAME_IAX) {
/* 0x8000 marks this message as TX:, this bit will be stripped later */
- pvt->last_iax_message = f->subclass | 0x8000;
+ pvt->last_iax_message = f->subclass | MARK_IAX_SUBCLASS_TX;
if (!pvt->first_iax_message) {
pvt->first_iax_message = pvt->last_iax_message;
}
localdelay = 0;
}
- iax_frame_subclass2str(iaxs[x]->first_iax_message & ~0x8000, first_message, sizeof(first_message));
- iax_frame_subclass2str(iaxs[x]->last_iax_message & ~0x8000, last_message, sizeof(last_message));
+ iax_frame_subclass2str(iaxs[x]->first_iax_message & ~MARK_IAX_SUBCLASS_TX, first_message, sizeof(first_message));
+ iax_frame_subclass2str(iaxs[x]->last_iax_message & ~MARK_IAX_SUBCLASS_TX, last_message, sizeof(last_message));
lag = iaxs[x]->remote_rr.delay;
ast_cli(fd, FORMAT,
iaxs[x]->owner ? iaxs[x]->owner->name : "(None)",
jitter,
localdelay,
ast_getformatname(iaxs[x]->voiceformat),
- (iaxs[x]->first_iax_message & 0x8000) ? "Tx:" : "Rx:",
+ (iaxs[x]->first_iax_message & MARK_IAX_SUBCLASS_TX) ? "Tx:" : "Rx:",
first_message,
- (iaxs[x]->last_iax_message & 0x8000) ? "Tx:" : "Rx:",
+ (iaxs[x]->last_iax_message & MARK_IAX_SUBCLASS_TX) ? "Tx:" : "Rx:",
last_message);
numchans++;
}
localdropped = 0;
localooo = -1;
}
- iax_frame_subclass2str(iaxs[x]->first_iax_message & ~0x8000, first_message, sizeof(first_message));
- iax_frame_subclass2str(iaxs[x]->last_iax_message & ~0x8000, last_message, sizeof(last_message));
+ iax_frame_subclass2str(iaxs[x]->first_iax_message & ~MARK_IAX_SUBCLASS_TX, first_message, sizeof(first_message));
+ iax_frame_subclass2str(iaxs[x]->last_iax_message & ~MARK_IAX_SUBCLASS_TX, last_message, sizeof(last_message));
if (limit_fmt)
fmt = "%-20.25s %4d %4d %4d %5d %3d %5d %4d %6d %4d %4d %5d %3d %5d %4d %6d %s%s %4s%s\n";
else
iaxs[x]->remote_rr.dropped,
iaxs[x]->remote_rr.ooo,
iaxs[x]->remote_rr.packets/1000,
- (iaxs[x]->first_iax_message & 0x8000) ? "Tx:" : "Rx:",
+ (iaxs[x]->first_iax_message & MARK_IAX_SUBCLASS_TX) ? "Tx:" : "Rx:",
first_message,
- (iaxs[x]->last_iax_message & 0x8000) ? "Tx:" : "Rx:",
+ (iaxs[x]->last_iax_message & MARK_IAX_SUBCLASS_TX) ? "Tx:" : "Rx:",
last_message);
else
ast_cli(fd, fmt,
iaxs[x]->remote_rr.dropped,
iaxs[x]->remote_rr.ooo,
iaxs[x]->remote_rr.packets/1000,
- (iaxs[x]->first_iax_message & 0x8000) ? "Tx:" : "Rx:",
+ (iaxs[x]->first_iax_message & MARK_IAX_SUBCLASS_TX) ? "Tx:" : "Rx:",
first_message,
- (iaxs[x]->last_iax_message & 0x8000) ? "Tx:" : "Rx:",
+ (iaxs[x]->last_iax_message & MARK_IAX_SUBCLASS_TX) ? "Tx:" : "Rx:",
last_message);
numchans++;
}
void iax_frame_subclass2str(int subclass, char *str, size_t len)
{
- int copylen = 8;
+ static const size_t copylen = 8;
const char *iaxs[] = {
"(0?) ",
"NEW ",
"FWDATA ",
"TXMEDIA"
};
- if ((copylen > len) || !subclass) {
+ if ((copylen > len) || !subclass || (subclass < 0)) {
str[0] = '\0';
} else if (subclass < ARRAY_LEN(iaxs)) {
- memcpy(str, iaxs[subclass], len);
+ ast_copy_string(str, iaxs[subclass], len);
} else {
- memcpy(str, "Unknown", len);
+ ast_copy_string(str, "Unknown", len);
}
}