static void s_pri_error(struct pri *pri, char *s)
{
- ftdm_log(FTDM_LOG_ERROR, "%s", s);
+ pritap_t *pritap = pri_get_userdata(pri);
+
+ if (pritap && pritap->dchan) {
+ ftdm_log_chan(pritap->dchan, FTDM_LOG_ERROR, "%s", s);
+ } else {
+ ftdm_log(FTDM_LOG_ERROR, "%s", s);
+ }
}
static void s_pri_message(struct pri *pri, char *s)
{
- ftdm_log(FTDM_LOG_DEBUG, "%s", s);
+ pritap_t *pritap = pri_get_userdata(pri);
+
+ if (pritap && pritap->dchan) {
+ ftdm_log_chan(pritap->dchan, FTDM_LOG_DEBUG, "%s", s);
+ } else {
+ ftdm_log(FTDM_LOG_DEBUG, "%s", s);
+ }
}
+#define PRI_DEBUG_Q921_ALL (PRI_DEBUG_Q921_RAW | PRI_DEBUG_Q921_DUMP | PRI_DEBUG_Q921_STATE)
+#define PRI_DEBUG_Q931_ALL (PRI_DEBUG_Q931_DUMP | PRI_DEBUG_Q931_STATE | PRI_DEBUG_Q931_ANOMALY)
+
static int parse_debug(const char *in)
{
int flags = 0;
return 0;
}
+ if (strstr(in, "all")) {
+ return PRI_DEBUG_ALL;
+ }
+
+ if (strstr(in, "none")) {
+ return 0;
+ }
+
+ if (strstr(in, "q921_all")) {
+ flags |= PRI_DEBUG_Q921_ALL;
+ }
+
if (strstr(in, "q921_raw")) {
flags |= PRI_DEBUG_Q921_RAW;
}
flags |= PRI_DEBUG_CONFIG;
}
+ if (strstr(in, "q931_all")) {
+ flags |= PRI_DEBUG_Q931_ALL;
+ }
+
if (strstr(in, "q931_dump")) {
flags |= PRI_DEBUG_Q931_DUMP;
}
flags |= PRI_DEBUG_AOC;
}
- if (strstr(in, "all")) {
- flags |= PRI_DEBUG_ALL;
- }
-
- if (strstr(in, "none")) {
- flags = 0;
- }
-
return flags;
}
res = (int)len;
memset(&((unsigned char*)buf)[res],0,2);
-
res += 2;
+ /* libpri passive q921 raw dump does not work for all frames */
+ if (pritap->debug & PRI_DEBUG_Q921_RAW) {
+ char hbuf[2048] = { 0 };
+
+ print_hex_bytes(buf, len, hbuf, sizeof(hbuf));
+ ftdm_log_chan(pritap->dchan, FTDM_LOG_DEBUG, "READ %"FTDM_SIZE_FMT"\n%s\n", len, hbuf);
+ }
return res;
}
static int pri_io_write(struct pri *pri, void *buf, int buflen)
{
pritap_t *pritap = pri_get_userdata(pri);
- ftdm_size_t len = buflen - 2;
+ ftdm_size_t len = buflen - 2;
+
+ /* libpri passive q921 raw dump does not work for all frames */
+ if (pritap->debug & PRI_DEBUG_Q921_RAW) {
+ char hbuf[2048] = { 0 };
+
+ print_hex_bytes(buf, len, hbuf, sizeof(hbuf));
+ ftdm_log_chan(pritap->dchan, FTDM_LOG_DEBUG, "WRITE %"FTDM_SIZE_FMT"\n%s\n", len, hbuf);
+ }
if (ftdm_channel_write(pritap->dchan, buf, buflen, &len) != FTDM_SUCCESS) {
ftdm_log(FTDM_LOG_CRIT, "span %d D channel write failed! [%s]\n", pritap->span->span_id, pritap->dchan->last_error);