Workaround for "noise" problems with app_rxfax in current LCR.
[lcr.git] / chan_lcr.c
index 20d522f..f4d8378 100644 (file)
@@ -246,8 +246,8 @@ void chan_lcr_log(int type, const char *file, int line, const char *function, st
                strncpy(ast_text, ast->name, sizeof(ast_text)-1);
        ast_text[sizeof(ast_text)-1] = '\0';
 
-printf("\n[call=%s ast=%s] %s\n", call_text, ast_text, buffer);
 //     ast_log(type, file, line, function, "[call=%s ast=%s] %s", call_text, ast_text, buffer);
+       printf("[call=%s ast=%s] %s", call_text, ast_text, buffer);
 
        ast_mutex_unlock(&log_lock);
 }
@@ -881,8 +881,11 @@ static void lcr_in_setup(struct chan_call *call, int message_type, union paramet
                strncpy(ast->context, param->setup.context, AST_MAX_CONTEXT-1);
        else
                strncpy(ast->context, param->setup.callerinfo.interface, AST_MAX_CONTEXT-1);
+       memset(&ast->cid, 0, sizeof(ast->cid));
        if (param->setup.callerinfo.id[0])
                ast->cid.cid_num = strdup(param->setup.callerinfo.id);
+       if (param->setup.callerinfo.id2[0])
+               ast->cid.cid_ani = strdup(param->setup.callerinfo.id2);
        if (param->setup.callerinfo.name[0])
                ast->cid.cid_name = strdup(param->setup.callerinfo.name);
        if (param->setup.redirinfo.id[0])
@@ -1669,7 +1672,7 @@ again:
                if (*p && ast) {
                        if (ast_channel_trylock(ast)) {
                                ast_mutex_unlock(&chan_lock);
-                               usleep(1000);
+                               usleep(1);
                                ast_mutex_lock(&chan_lock);
                                goto again;
                        }
@@ -1977,8 +1980,8 @@ static void send_digit_to_chan(struct ast_channel * ast, char digit )
                 ast_playtones_start(ast,0,dtmf_tones[15], 0);
         else {
                 /* not handled */
-//                ast_log(LOG_DEBUG, "Unable to handle DTMF tone "
-//                     "'%c' for '%s'\n", digit, ast->name);
+               CDEBUG(NULL, ast, "Unable to handle DTMF tone "
+                       "'%c' for '%s'\n", digit, ast->name);
         }
 }
 
@@ -2169,24 +2172,38 @@ static int lcr_hangup(struct ast_channel *ast)
        return 0;
 }
 
-static int lcr_write(struct ast_channel *ast, struct ast_frame *f)
+static int lcr_write(struct ast_channel *ast, struct ast_frame *fr)
 {
         struct chan_call *call;
+       struct ast_frame * f = fr;
 
        if (!f->subclass)
                CDEBUG(NULL, ast, "No subclass\n");
-       if (!(f->subclass & ast->nativeformats))
-               CDEBUG(NULL, ast, "Unexpected format.\n");
+       if (!(f->subclass & ast->nativeformats)) {
+               CDEBUG(NULL, ast, 
+                      "Unexpected format. "
+                      "Activating emergency conversion...\n");
+
+               ast_set_write_format(ast, f->subclass);
+               f = (ast->writetrans) ? ast_translate(
+                       ast->writetrans, fr, 0) : fr;
+       }
        
        ast_mutex_lock(&chan_lock);
         call = ast->tech_pvt;
        if (!call) {
                ast_mutex_unlock(&chan_lock);
+               if (f != fr) {
+                       ast_frfree(f);
+               }
                return -1;
        }
        if (call->bchannel && f->samples)
                bchannel_transmit(call->bchannel, *((unsigned char **)&(f->data)), f->samples);
        ast_mutex_unlock(&chan_lock);
+       if (f != fr) {
+               ast_frfree(f);
+       }
        return 0;
 }
 
@@ -2194,7 +2211,7 @@ static int lcr_write(struct ast_channel *ast, struct ast_frame *f)
 static struct ast_frame *lcr_read(struct ast_channel *ast)
 {
         struct chan_call *call;
-       int len;
+       int len = 0;
 
        ast_mutex_lock(&chan_lock);
         call = ast->tech_pvt;