Add -lncurses to LDD flags
[lcr.git] / chan_lcr.c
index 657edf8..a396013 100644 (file)
@@ -238,6 +238,8 @@ void chan_lcr_log(int type, const char *file, int line, const char *function, st
        char ast_text[128] = "NULL";
        va_list args;
 
+       if (!option_debug) return;
+
        ast_mutex_lock(&log_lock);
 
        va_start(args,fmt);
@@ -255,8 +257,8 @@ void chan_lcr_log(int type, const char *file, int line, const char *function, st
 #endif
        ast_text[sizeof(ast_text)-1] = '\0';
 
-//     ast_log(type, file, line, function, "[call=%s ast=%s] %s", call_text, ast_text, buffer);
-       printf("[call=%s ast=%s line=%d] %s", call_text, ast_text, line, buffer);
+       ast_log(type, file, line, function, "[call=%s ast=%s] %s", call_text, ast_text, buffer);
+//     printf("[call=%s ast=%s line=%d] %s", call_text, ast_text, line, buffer);
 
        ast_mutex_unlock(&log_lock);
 }
@@ -331,6 +333,10 @@ struct chan_call *alloc_call(void)
        }
        fcntl((*callp)->pipe[0], F_SETFL, O_NONBLOCK);
        CDEBUG(*callp, NULL, "Call instance allocated.\n");
+
+       /* unset dtmf (default, use option 'd' to enable) */
+       (*callp)->dsp_dtmf = 0;
+
        return *callp;
 }
 
@@ -426,13 +432,13 @@ void apply_opt(struct chan_call *call, char *data)
                                send_message(MESSAGE_NOTIFY, call->ref, &newparam);
                        }
                        break;
-               case 'n':
+               case 'D':
                        if (opt[1] != '\0') {
-                               CERROR(call, call->ast, "Option 'n' (no DTMF) expects no parameter.\n", opt);
+                               CERROR(call, call->ast, "Option 'D' (DTMF) expects no parameter.\n", opt);
                                break;
                        }
-                       CDEBUG(call, call->ast, "Option 'n' (no DTMF).\n");
-                       call->dsp_dtmf = 0;
+                       CDEBUG(call, call->ast, "Option 'D' (DTMF).\n");
+                       call->dsp_dtmf = 1;
                        break;
 #if 0
                case 'c':
@@ -1000,8 +1006,8 @@ static void lcr_in_setup(struct chan_call *call, int message_type, union paramet
                strncpy(ast->context, param->setup.callerinfo.interface, AST_MAX_CONTEXT-1);
 #else
                ast_channel_exten_set(ast, param->setup.dialinginfo.id);
-       if (param->setup.context[0])
-               ast_channel_context_set(ast, param->setup.context);
+       if (param->setup.dialinginfo.context[0])
+               ast_channel_context_set(ast, param->setup.dialinginfo.context);
        else
                ast_channel_context_set(ast, param->setup.callerinfo.interface);
 #endif
@@ -1412,7 +1418,9 @@ static void lcr_in_information(struct chan_call *call, int message_type, union p
 #if ASTERISK_VERSION_NUM < 110000
                strncat(ast->exten, param->information.id, AST_MAX_EXTENSION-1);
 #else
-               ast_channel_exten_set(ast, param->information.id);
+               char *tmp[AST_MAX_EXTENSION];
+               snprintf(tmp,AST_MAX_EXTENSION,"%s%s",ast_channel_exten(ast),param->information.id);
+               ast_channel_exten_set(ast, tmp);
 #endif
                lcr_start_pbx(call, ast, param->information.sending_complete);
                return;
@@ -1572,8 +1580,6 @@ int receive_message(int message_type, unsigned int ref, union parameter *param)
                        /* set ref */
                        call->ref = ref;
                        call->ref_was_assigned = 1;
-                       /* set dtmf (default, use option 'n' to disable */
-                       call->dsp_dtmf = 1;
                        /* wait for setup (or release from asterisk) */
                } else {
                        /* new ref, as requested from this remote application */
@@ -1587,8 +1593,6 @@ int receive_message(int message_type, unsigned int ref, union parameter *param)
                        /* store new ref */
                        call->ref = ref;
                        call->ref_was_assigned = 1;
-                       /* set dtmf (default, use option 'n' to disable */
-                       call->dsp_dtmf = 1;
                        /* send pending setup info */
                        if (call->state == CHAN_LCR_STATE_OUT_PREPARE)
                                send_setup_to_lcr(call);
@@ -2896,7 +2900,11 @@ static struct ast_frame *lcr_read(struct ast_channel *ast)
        if (call->dsp)
                f = ast_dsp_process(ast, call->dsp, &call->read_fr);
        if (f && f->frametype == AST_FRAME_DTMF)
+#ifdef AST_1_8_OR_HIGHER
                CDEBUG(call, ast, "Asterisk detected inband DTMF: %c.\n", f->subclass.integer);
+#else
+               CDEBUG(call, ast, "Asterisk detected inband DTMF: %c.\n", f->subclass);
+#endif
 
        ast_mutex_unlock(&chan_lock);
 
@@ -3006,6 +3014,15 @@ static int lcr_indicate(struct ast_channel *ast, int cond, const void *data, siz
                        break;
                case AST_CONTROL_PROGRESS:
                        CDEBUG(call, ast, "Received indicate AST_CONTROL_PROGRESS from Asterisk.\n");
+                       if (call->state == CHAN_LCR_STATE_IN_SETUP
+                        || call->state == CHAN_LCR_STATE_IN_DIALING) {
+                               CDEBUG(call, ast, "Changing to proceeding state, because no more dialing possible.\n");
+                               /* send message to lcr */
+                               memset(&newparam, 0, sizeof(union parameter));
+                               send_message(MESSAGE_PROCEEDING, call->ref, &newparam);
+                               /* change state */
+                               call->state = CHAN_LCR_STATE_IN_PROCEEDING;
+                       }
                        /* request bchannel */
                        CDEBUG(call, ast, "Requesting audio path.\n");
                        memset(&newparam, 0, sizeof(union parameter));
@@ -3445,7 +3462,7 @@ static int lcr_config_exec(struct ast_channel *ast, void *data, char **argv)
                        break;
                call = call->next;
        }
-       if (call)
+       if (call) {
 
                #ifdef LCR_FOR_ASTERISK
                apply_opt(call, (char *)data);
@@ -3463,7 +3480,7 @@ static int lcr_config_exec(struct ast_channel *ast, void *data, char **argv)
                        newparam.queue = call->tx_queue * 8;
                        send_message(MESSAGE_DISABLE_DEJITTER, call->ref, &newparam);
                }
-       else
+       else
                CERROR(NULL, ast, "lcr_config app not called by chan_lcr channel.\n");
 
        ast_mutex_unlock(&chan_lock);
@@ -3536,7 +3553,7 @@ int load_module(void)
                                 "\n"
                                 "The available options are:\n"
                                 "    d - Send display text on called phone, text is the optarg.\n"
-                                "    n - Don't detect dtmf tones from LCR.\n"
+                                "    D - Forward detected dtmf tones from LCR.\n"
                                 "    h - Force data call (HDLC).\n"
                                 "    q - Add queue to make fax stream seamless (required for fax app).\n"
                                 "        Use queue size in miliseconds for optarg. (try 250)\n"