}
+SWITCH_STANDARD_APP(disable_ec_function)
+{
+ private_t *tech_pvt;
+ int x = 0;
+
+ if (!switch_core_session_check_interface(session, openzap_endpoint_interface)) {
+ zap_log(ZAP_LOG_ERROR, "This application is only for OpenZAP channels.\n");
+ return;
+ }
+
+ tech_pvt = switch_core_session_get_private(session);
+ zap_channel_command(tech_pvt->zchan, ZAP_COMMAND_DISABLE_ECHOCANCEL, &x);
+ zap_channel_command(tech_pvt->zchan, ZAP_COMMAND_DISABLE_ECHOTRAIN, &x);
+ zap_log(ZAP_LOG_ERROR, "Echo Canceller Disabled\n");
+}
+
+
SWITCH_MODULE_LOAD_FUNCTION(mod_openzap_load)
{
switch_api_interface_t *commands_api_interface;
+ switch_application_interface_t *app_interface;
module_pool = pool;
SWITCH_ADD_API(commands_api_interface, "oz", "OpenZAP commands", oz_function, OZ_SYNTAX);
+ SWITCH_ADD_APP(app_interface, "disable_ec", "Disable Echo Canceller", "Disable Echo Canceller", disable_ec_function, "", SAF_NONE);
+
/* indicate that the module should continue to be loaded */
return SWITCH_STATUS_SUCCESS;
}
ZAP_COMMAND_TRACE_OUTPUT,
ZAP_COMMAND_ENABLE_CALLERID_DETECT,
ZAP_COMMAND_DISABLE_CALLERID_DETECT,
+ ZAP_COMMAND_ENABLE_ECHOCANCEL,
+ ZAP_COMMAND_DISABLE_ECHOCANCEL,
+ ZAP_COMMAND_ENABLE_ECHOTRAIN,
+ ZAP_COMMAND_DISABLE_ECHOTRAIN,
ZAP_COMMAND_COUNT
} zap_command_t;
if (freespace < datalen) {
zap_size_t new_size, new_block_size;
+ void *data;
new_size = buffer->datalen + datalen;
new_block_size = buffer->datalen + buffer->blocksize;
new_size = new_block_size;
}
buffer->head = buffer->data;
- buffer->data = realloc(buffer->data, new_size);
- if (!buffer->data) {
+ data = realloc(buffer->data, new_size);
+ if (!data) {
return 0;
}
+ buffer->data = data;
buffer->head = buffer->data;
buffer->datalen = new_size;
}
memset(&ztp, 0, sizeof(ztp));
switch(command) {
+ case ZAP_COMMAND_ENABLE_ECHOCANCEL:
+ {
+ int level = ZAP_COMMAND_OBJ_INT;
+ err = ioctl(zchan->sockfd, ZT_ECHOCANCEL, &level);
+ ZAP_COMMAND_OBJ_INT = level;
+ }
+ case ZAP_COMMAND_DISABLE_ECHOCANCEL:
+ {
+ int level = 0;
+ err = ioctl(zchan->sockfd, ZT_ECHOCANCEL, &level);
+ ZAP_COMMAND_OBJ_INT = level;
+ }
+ break;
+ case ZAP_COMMAND_ENABLE_ECHOTRAIN:
+ {
+ int level = ZAP_COMMAND_OBJ_INT;
+ err = ioctl(zchan->sockfd, ZT_ECHOTRAIN, &level);
+ ZAP_COMMAND_OBJ_INT = level;
+ }
+ case ZAP_COMMAND_DISABLE_ECHOTRAIN:
+ {
+ int level = 0;
+ err = ioctl(zchan->sockfd, ZT_ECHOTRAIN, &level);
+ ZAP_COMMAND_OBJ_INT = level;
+ }
+ break;
case ZAP_COMMAND_OFFHOOK:
{
int command = ZT_OFFHOOK;