X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=chan_lcr.c;h=a396013cbaf2813f3c5a26d20bb0a1f35bc66014;hp=657edf8590fe4c4218ec1b40d6a0319b658cb90c;hb=refs%2Fheads%2Fbackup2;hpb=bd2aa91302a9d2de07d2210cbd6da499f3e45e53 diff --git a/chan_lcr.c b/chan_lcr.c index 657edf8..a396013 100644 --- a/chan_lcr.c +++ b/chan_lcr.c @@ -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"