]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add disable_ec app
authorAnthony Minessale <anthony.minessale@gmail.com>
Wed, 30 Jul 2008 15:05:07 +0000 (15:05 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Wed, 30 Jul 2008 15:05:07 +0000 (15:05 +0000)
git-svn-id: http://svn.openzap.org/svn/openzap/trunk@506 a93c3328-9c30-0410-af19-c9cd2b2d52af

libs/openzap/mod_openzap/mod_openzap.c
libs/openzap/src/include/zap_types.h
libs/openzap/src/zap_buffer.c
libs/openzap/src/zap_zt.c

index c27870e45c5892c40f941c956f4c136b499de232..10aa079f033c3479ccf6e14d4def69e2d72d0f40 100644 (file)
@@ -1848,10 +1848,28 @@ SWITCH_STANDARD_API(oz_function)
 }
 
 
+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;
 
@@ -1875,6 +1893,8 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_openzap_load)
        
        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;
 }
index 483bddfb82a5982c50772f2684d99315988e72b3..be43d0d0694b498c47dd29f4ba3d9a17554ba214 100644 (file)
@@ -260,6 +260,10 @@ typedef enum {
        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;
 
index 525a3e21005073c8b71217b019f6fe671d2e5c72..d5d7f1ef7d5f5cfe311f1eb8afdd8fc187cb2178 100644 (file)
@@ -204,6 +204,7 @@ zap_size_t zap_buffer_write(zap_buffer_t *buffer, const void *data, zap_size_t d
        
        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;
@@ -212,10 +213,11 @@ zap_size_t zap_buffer_write(zap_buffer_t *buffer, const void *data, zap_size_t d
                        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;
        }
index ec6872b78292434164e669d50a354c2fcaeee32f..38c55ffae585c97fbdd50460165b78f150c875af 100644 (file)
@@ -377,6 +377,32 @@ static ZIO_COMMAND_FUNCTION(zt_command)
        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;