X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=chan_lcr.c;h=95972a90f47b0595eceb00708a27b4362956dad8;hp=657edf8590fe4c4218ec1b40d6a0319b658cb90c;hb=729893ae61a8c4a9ffbcd4efbfda4fac5713c736;hpb=bd2aa91302a9d2de07d2210cbd6da499f3e45e53 diff --git a/chan_lcr.c b/chan_lcr.c index 657edf8..95972a9 100644 --- a/chan_lcr.c +++ b/chan_lcr.c @@ -168,9 +168,6 @@ struct ast_channel; #include #include #include -#if ASTERISK_VERSION_NUM < 110000 -#include -#endif #include "extension.h" #include "message.h" #include "callerid.h" @@ -178,6 +175,7 @@ struct ast_channel; #include "cause.h" #include "select.h" #include "options.h" +#include "config.h" #include "chan_lcr.h" CHAN_LCR_STATE // state description structure @@ -331,6 +329,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 +428,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 +1002,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 @@ -1189,6 +1191,10 @@ static void lcr_in_setup(struct chan_call *call, int message_type, union paramet /* configure channel */ #if ASTERISK_VERSION_NUM < 100000 + wat een onzin +#endif + +#if ASTERISK_VERSION_NUM < 100000 ast->nativeformats = (options.law=='a')?AST_FORMAT_ALAW:AST_FORMAT_ULAW; ast->readformat = ast->rawreadformat = ast->nativeformats; ast->writeformat = ast->rawwriteformat = ast->nativeformats; @@ -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)); @@ -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"