static int __pri_lpwrap_read(struct pri *pri, void *buf, int buflen) { struct lpwrap_pri *spri = (struct lpwrap_pri *) pri_get_userdata(pri); ftdm_size_t len = buflen; ftdm_status_t zst; int res; if ((zst = ftdm_channel_read(spri->dchan, buf, &len)) != FTDM_SUCCESS) { if (zst == FTDM_FAIL) { ftdm_log(FTDM_LOG_CRIT, "span %d D-READ FAIL! [%s]\n", spri->span->span_id, spri->dchan->last_error); spri->errs++; } else { ftdm_log(FTDM_LOG_CRIT, "span %d D-READ TIMEOUT\n", spri->span->span_id); } /* we cannot return -1, libpri seems to expect values >= 0 */ return 0; } spri->errs = 0; res = (int)len; if (res > 0) { memset(&((unsigned char*)buf)[res], 0, 2); res += 2; #ifdef IODEBUG { char bb[2048] = { 0 }; print_hex_bytes(buf, res - 2, bb, sizeof(bb)); ftdm_log(FTDM_LOG_DEBUG, "READ %d\n", res - 2); } #endif } return res; }
static int __pri_lpwrap_read(struct pri *pri, void *buf, int buflen) { struct lpwrap_pri *spri = (struct lpwrap_pri *) pri_get_userdata(pri); zap_size_t len = buflen; int res; zap_status_t zst; if ((zst = zap_channel_read(spri->dchan, buf, &len)) != ZAP_SUCCESS) { if (zst == ZAP_FAIL) { zap_log(ZAP_LOG_CRIT, "span %d D-READ FAIL! [%s]\n", spri->span->span_id, spri->dchan->last_error); spri->errs++; } else { zap_log(ZAP_LOG_CRIT, "span %d D-READ TIMEOUT\n", spri->span->span_id); } zap_clear_flag(spri, LPWRAP_PRI_READY); return -1; } spri->errs = 0; res = (int)len; memset(&((unsigned char*)buf)[res],0,2); res+=2; #ifdef IODEBUG { char bb[2048] = { 0 }; print_hex_bytes(buf, res - 2, bb, sizeof(bb)); zap_log(ZAP_LOG_DEBUG, "READ %d\n", res-2); } #endif return res; }
static int pri_io_read(struct pri *pri, void *buf, int buflen) { int res; ftdm_status_t zst; pritap_t *pritap = pri_get_userdata(pri); ftdm_size_t len = buflen; if ((zst = ftdm_channel_read(pritap->dchan, buf, &len)) != FTDM_SUCCESS) { if (zst == FTDM_FAIL) { ftdm_log(FTDM_LOG_CRIT, "span %d D channel read fail! [%s]\n", pritap->span->span_id, pritap->dchan->last_error); } else { ftdm_log(FTDM_LOG_CRIT, "span %d D channel read timeout!\n", pritap->span->span_id); } return -1; } 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 void s_pri_message(struct pri *pri, char *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); } }
static void s_pri_error(struct pri *pri, char *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 int pri_io_write(struct pri *pri, void *buf, int buflen) { pritap_t *pritap = pri_get_userdata(pri); 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); return -1; } return (int)buflen; }
static int __pri_lpwrap_write(struct pri *pri, void *buf, int buflen) { struct lpwrap_pri *spri = (struct lpwrap_pri *) pri_get_userdata(pri); ftdm_size_t len = buflen - 2; if (ftdm_channel_write(spri->dchan, buf, buflen, &len) != FTDM_SUCCESS) { ftdm_log(FTDM_LOG_CRIT, "span %d D-WRITE FAIL! [%s]\n", spri->span->span_id, spri->dchan->last_error); /* we cannot return -1, libpri seems to expect values >= 0 */ return 0; } #ifdef IODEBUG { char bb[2048] = { 0 }; print_hex_bytes(buf, buflen - 2, bb, sizeof(bb)); ftdm_log(FTDM_LOG_DEBUG, "WRITE %d\n", (int)buflen - 2); } #endif return (int)buflen; }
static int __pri_lpwrap_write(struct pri *pri, void *buf, int buflen) { struct lpwrap_pri *spri = (struct lpwrap_pri *) pri_get_userdata(pri); zap_size_t len = buflen -2; if (zap_channel_write(spri->dchan, buf, buflen, &len) != ZAP_SUCCESS) { zap_log(ZAP_LOG_CRIT, "span %d D-WRITE FAIL! [%s]\n", spri->span->span_id, spri->dchan->last_error); zap_clear_flag(spri, LPWRAP_PRI_READY); return -1; } #ifdef IODEBUG { char bb[2048] = { 0 }; print_hex_bytes(buf, buflen - 2, bb, sizeof(bb)); zap_log(ZAP_LOG_DEBUG, "WRITE %d\n", (int)buflen-2); } #endif return (int) buflen; }