diff --git a/libs/openzap/src/include/openzap.h b/libs/openzap/src/include/openzap.h index b47acfdbbe..61981dd9fb 100644 --- a/libs/openzap/src/include/openzap.h +++ b/libs/openzap/src/include/openzap.h @@ -175,6 +175,7 @@ struct zap_channel { zap_chan_type_t type; zap_socket_t sockfd; zap_channel_flag_t flags; + void *mod_data; struct zap_software_interface *zint; }; typedef struct zap_channel zap_channel_t; @@ -189,8 +190,8 @@ struct zap_span { typedef struct zap_span zap_span_t; #define ZINT_CONFIGURE_ARGS (struct zap_software_interface *zint) -#define ZINT_OPEN_ARGS (unsigned span_id, unsigned chan_id, zap_channel_t **zchan) -#define ZINT_CLOSE_ARGS (zap_channel_t **zchan) +#define ZINT_OPEN_ARGS (zap_channel_t *zchan) +#define ZINT_CLOSE_ARGS (zap_channel_t *zchan) #define ZINT_SET_CODEC_ARGS (zap_channel_t *zchan, zap_codec_t codec) #define ZINT_SET_INTERVAL_ARGS (zap_channel_t *zchan, unsigned ms) #define ZINT_WAIT_ARGS (zap_channel_t *zchan, zap_wait_flag_t flags, unsigned to) @@ -216,7 +217,7 @@ typedef zap_status_t (*zint_write_t) ZINT_WRITE_ARGS ; #define ZINT_WRITE_FUNCTION(name) zap_status_t name ZINT_WRITE_ARGS #define ZINT_CONFIGURE_MUZZLE assert(zint != NULL) -#define ZINT_OPEN_MUZZLE assert(span_id != 0); assert(chan_id != 0); assert(zchan != NULL) +#define ZINT_OPEN_MUZZLEE assert(zchan != NULL) #define ZINT_CLOSE_MUZZLE assert(zchan != NULL) #define ZINT_SET_CODEC_MUZZLE assert(zchan != NULL); assert(codec != 0) #define ZINT_SET_INTERVAL_MUZZLE assert(zchan != NULL); assert(ms != 0) diff --git a/libs/openzap/src/openzap.c b/libs/openzap/src/openzap.c index 4644444811..8f3383b759 100644 --- a/libs/openzap/src/openzap.c +++ b/libs/openzap/src/openzap.c @@ -189,35 +189,43 @@ zap_status_t zap_span_add_channel(zap_span_t *span, zap_socket_t sockfd, zap_cha zap_status_t zap_channel_open(const char *name, unsigned span_id, unsigned chan_id, zap_channel_t **zchan) { zap_software_interface_t *zint = (zap_software_interface_t *) hashtable_search(globals.interface_hash, (char *)name); + zap_status_t status = ZAP_FAIL; if (span_id < ZAP_MAX_SPANS_INTERFACE && chan_id < ZAP_MAX_CHANNELS_SPAN && zint) { zap_channel_t *check; check = &zint->spans[span_id].channels[chan_id]; if (zap_test_flag(check, ZAP_CHANNEL_READY) && ! zap_test_flag(check, ZAP_CHANNEL_OPEN)) { - zap_set_flag(check, ZAP_CHANNEL_OPEN); - *zchan = check; - return ZAP_SUCCESS; + status = check->zint->open(check); + if (status == ZAP_SUCCESS) { + zap_set_flag(check, ZAP_CHANNEL_OPEN); + *zchan = check; + } + return status; } } - return ZAP_FAIL; + return status; } zap_status_t zap_channel_close(zap_channel_t **zchan) { zap_channel_t *check; + zap_status_t status = ZAP_FAIL; + *zchan = NULL; - assert(zchan != NULL); check = *zchan; assert(check != NULL); if (zap_test_flag(check, ZAP_CHANNEL_OPEN)) { - zap_clear_flag(check, ZAP_CHANNEL_OPEN); - return ZAP_SUCCESS; + status = check->zint->close(check); + if (status == ZAP_SUCCESS) { + zap_clear_flag(check, ZAP_CHANNEL_OPEN); + *zchan = NULL; + } } - return ZAP_FAIL; + return status; } diff --git a/libs/openzap/src/zap_wanpipe.c b/libs/openzap/src/zap_wanpipe.c index d76b802988..a165afea70 100644 --- a/libs/openzap/src/zap_wanpipe.c +++ b/libs/openzap/src/zap_wanpipe.c @@ -74,58 +74,6 @@ typedef unsigned __int32 u_int32_t; static zap_software_interface_t wanpipe_interface; -struct wanpipe_channel { - struct zap_channel zchan; - int x; -}; - - - -unsigned wp_open_lapd(zap_span_t *span, const char *name) -{ - struct wan_sockaddr_ll sa; - zap_socket_t sock = -1; - - errno = 0; - sock = socket(AF_WANPIPE, SOCK_RAW, 0); - memset(&sa,0,sizeof(struct wan_sockaddr_ll)); - - zap_log(ZAP_LOG_DEBUG, "attempting to open lapd device socket %s\n", name); - - if( sock < 0 ) { - zap_log(ZAP_LOG_ERROR, "socket error!\n"); - return 0; - } - - zap_copy_string(sa.sll_device, name, sizeof(sa.sll_device)); - zap_copy_string(sa.sll_card, "wanpipe1", sizeof(sa.sll_card)); - - sa.sll_protocol = htons(PVC_PROT); - sa.sll_family = AF_WANPIPE; - - if(bind(sock, (struct sockaddr *)&sa, sizeof(struct wan_sockaddr_ll)) < 0){ - zap_log(ZAP_LOG_ERROR, "socket bind error!\n"); - return 0; - } - - { - unsigned customer_id; - int err = ioctl(sock,SIOC_AFT_CUSTOMER_ID,&customer_id); - if (err){ - perror("Customer ID: "); - }else{ - printf("Customer ID 0x%X\n",customer_id); - return 1; - } - - - } - - - return 0; -} - - static zap_socket_t wp_open_device(int span, int chan) { char fname[256]; @@ -186,26 +134,6 @@ static unsigned wp_configure_channel(zap_config_t *cfg, const char *str, zap_spa assert(str != NULL); - if (type == ZAP_CHAN_TYPE_DQ921) { - char *flag, *name; - - flag = str; - if ((name = strchr(flag, ':'))) { - name++; - } else { - name = flag; - flag = NULL; - } - - if (flag) { - if (strstr(flag, "q931")) { - type = ZAP_CHAN_TYPE_DQ931; - configured += wp_open_lapd(span, name); - return configured; - } - - } - } mydata = strdup(str); assert(mydata != NULL); @@ -315,7 +243,14 @@ static ZINT_CONFIGURE_FUNCTION(wanpipe_configure) if (d) { zap_log(ZAP_LOG_WARNING, "ignoring extra d-channel\n"); } else { - configured += wp_configure_channel(&cfg, val, span, ZAP_CHAN_TYPE_DQ921); + zap_chan_type_t qtype; + if (!strncasecmp(val, "lapd:", 5)) { + qtype = ZAP_CHAN_TYPE_DQ931; + val += 5; + } else { + qtype = ZAP_CHAN_TYPE_DQ921; + } + configured += wp_configure_channel(&cfg, val, span, qtype); d++; } }