aboutsummaryrefslogtreecommitdiffstats
path: root/channels/chan_misdn.c
diff options
context:
space:
mode:
authorrmudgett <rmudgett@f38db490-d61c-443f-a65b-d21fe96a405b>2008-08-07 19:01:03 +0000
committerrmudgett <rmudgett@f38db490-d61c-443f-a65b-d21fe96a405b>2008-08-07 19:01:03 +0000
commitc93982a3c7d4220d2733183806a35735ef957eb9 (patch)
tree6321bf2d7f117d547633f63526d7766690a03298 /channels/chan_misdn.c
parent24e4321fc2cbfe48680b152d5373f3cf8cd6c12c (diff)
Merged revisions 136241 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r136241 | rmudgett | 2008-08-06 16:18:53 -0500 (Wed, 06 Aug 2008) | 5 lines * The allowed_bearers setting in misdn.conf misspelled one of its options: digital_restricted. * Fixed some other spelling errors and typos. ........ git-svn-id: http://svn.digium.com/svn/asterisk/trunk@136594 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_misdn.c')
-rw-r--r--channels/chan_misdn.c113
1 files changed, 58 insertions, 55 deletions
diff --git a/channels/chan_misdn.c b/channels/chan_misdn.c
index d2bf63242..d8a127b81 100644
--- a/channels/chan_misdn.c
+++ b/channels/chan_misdn.c
@@ -90,14 +90,14 @@ struct misdn_jb{
-/*! \brief allocates the jb-structure and initialise the elements*/
+/*! \brief allocates the jb-structure and initialize the elements */
struct misdn_jb *misdn_jb_init(int size, int upper_threshold);
/*! \brief frees the data and destroys the given jitterbuffer struct */
void misdn_jb_destroy(struct misdn_jb *jb);
/*! \brief fills the jitterbuffer with len data returns < 0 if there was an
-error (bufferoverun). */
+error (buffer overrun). */
int misdn_jb_fill(struct misdn_jb *jb, const char *data, int len);
/*! \brief gets len bytes out of the jitterbuffer if available, else only the
@@ -116,7 +116,7 @@ ast_mutex_t release_lock;
enum misdn_chan_state {
MISDN_NOTHING=0, /*!< at beginning */
MISDN_WAITING4DIGS, /*!< when waiting for infos */
- MISDN_EXTCANTMATCH, /*!< when asterisk couldnt match our ext */
+ MISDN_EXTCANTMATCH, /*!< when asterisk couldn't match our ext */
MISDN_INCOMING_SETUP, /*!< for incoming setups*/
MISDN_DIALING, /*!< when pbx_start */
MISDN_PROGRESS, /*!< we got a progress */
@@ -131,9 +131,8 @@ enum misdn_chan_state {
MISDN_RELEASED, /*!< when connected */
MISDN_BRIDGED, /*!< when bridged */
MISDN_CLEANING, /*!< when hangup from * but we were connected before */
- MISDN_HUNGUP_FROM_MISDN, /*!< when DISCONNECT/RELEASE/REL_COMP cam from misdn */
- MISDN_HUNGUP_FROM_AST, /*!< when DISCONNECT/RELEASE/REL_COMP came out of */
- /* misdn_hangup */
+ MISDN_HUNGUP_FROM_MISDN, /*!< when DISCONNECT/RELEASE/REL_COMP came from misdn */
+ MISDN_HUNGUP_FROM_AST, /*!< when DISCONNECT/RELEASE/REL_COMP came out of misdn_hangup */
MISDN_HOLDED, /*!< if this chan is holded */
MISDN_HOLD_DISCONNECT, /*!< if this chan is holded */
@@ -363,11 +362,6 @@ static int update_ec_config(struct misdn_bchannel *bc);
-
-/*protos*/
-
-int chan_misdn_jb_empty ( struct misdn_bchannel *bc, char *buf, int len);
-
/*************** Helpers *****************/
static struct chan_list * get_chan_by_ast(struct ast_channel *ast)
@@ -398,13 +392,15 @@ struct allowed_bearers {
int cap;
int val;
char *name;
+ int deprecated;
};
-struct allowed_bearers allowed_bearers_array[]={
+static struct allowed_bearers allowed_bearers_array[]= {
{INFO_CAPABILITY_SPEECH,1,"speech"},
{INFO_CAPABILITY_AUDIO_3_1K,2,"3_1khz"},
{INFO_CAPABILITY_DIGITAL_UNRESTRICTED,4,"digital_unrestricted"},
- {INFO_CAPABILITY_DIGITAL_RESTRICTED,8,"digital_restriced"},
+ {INFO_CAPABILITY_DIGITAL_RESTRICTED,8,"digital_restricted"},
+ {INFO_CAPABILITY_DIGITAL_RESTRICTED,8,"digital_restriced", 1}, /* Allow misspelling for backwards compatibility */
{INFO_CAPABILITY_VIDEO,16,"video"}
};
@@ -802,7 +798,7 @@ static char *handle_cli_misdn_set_debug(struct ast_cli_entry *e, int cmd, struct
ast_cli(a->fd, "port number not valid! no ports available so you won't get lucky with any number here...\n");
break;
case 1:
- ast_cli(a->fd, "port number not valid! only port 1 is availble.\n");
+ ast_cli(a->fd, "port number not valid! only port 1 is available.\n");
break;
default:
ast_cli(a->fd, "port number not valid! only ports 1 to %d are available.\n", max_ports);
@@ -958,7 +954,7 @@ static char *handle_cli_misdn_port_down(struct ast_cli_entry *e, int cmd, struct
e->command = "misdn port down";
e->usage =
"Usage: misdn port down <port>\n"
- " Try to deacivate the L1 on the given port.\n";
+ " Try to deactivate the L1 on the given port.\n";
return NULL;
case CLI_GENERATE:
return NULL;
@@ -1092,7 +1088,7 @@ struct state_struct {
static struct state_struct state_array[] = {
{MISDN_NOTHING,"NOTHING"}, /* at beginning */
{MISDN_WAITING4DIGS,"WAITING4DIGS"}, /* when waiting for infos */
- {MISDN_EXTCANTMATCH,"EXTCANTMATCH"}, /* when asterisk couldnt match our ext */
+ {MISDN_EXTCANTMATCH,"EXTCANTMATCH"}, /* when asterisk couldn't match our ext */
{MISDN_INCOMING_SETUP,"INCOMING SETUP"}, /* when pbx_start */
{MISDN_DIALING,"DIALING"}, /* when pbx_start */
{MISDN_PROGRESS,"PROGRESS"}, /* when pbx_start */
@@ -1107,11 +1103,10 @@ static struct state_struct state_array[] = {
{MISDN_RELEASED,"RELEASED"}, /* when connected */
{MISDN_BRIDGED,"BRIDGED"}, /* when bridged */
{MISDN_CLEANING,"CLEANING"}, /* when hangup from * but we were connected before */
- {MISDN_HUNGUP_FROM_MISDN,"HUNGUP_FROM_MISDN"}, /* when DISCONNECT/RELEASE/REL_COMP cam from misdn */
- {MISDN_HOLDED,"HOLDED"}, /* when DISCONNECT/RELEASE/REL_COMP cam from misdn */
- {MISDN_HOLD_DISCONNECT,"HOLD_DISCONNECT"}, /* when DISCONNECT/RELEASE/REL_COMP cam from misdn */
- {MISDN_HUNGUP_FROM_AST,"HUNGUP_FROM_AST"} /* when DISCONNECT/RELEASE/REL_COMP came out of */
- /* misdn_hangup */
+ {MISDN_HUNGUP_FROM_MISDN,"HUNGUP_FROM_MISDN"}, /* when DISCONNECT/RELEASE/REL_COMP came from misdn */
+ {MISDN_HOLDED,"HOLDED"}, /* when DISCONNECT/RELEASE/REL_COMP came from misdn */
+ {MISDN_HOLD_DISCONNECT,"HOLD_DISCONNECT"}, /* when DISCONNECT/RELEASE/REL_COMP came from misdn */
+ {MISDN_HUNGUP_FROM_AST,"HUNGUP_FROM_AST"} /* when DISCONNECT/RELEASE/REL_COMP came out of misdn_hangup */
};
static const char *misdn_get_ch_state(struct chan_list *p)
@@ -1754,7 +1749,7 @@ static char *complete_show_config(struct ast_cli_args *a)
static struct ast_cli_entry chan_misdn_clis[] = {
AST_CLI_DEFINE(handle_cli_misdn_port_block, "Block the given port"),
- AST_CLI_DEFINE(handle_cli_misdn_port_down, "Try to deacivate the L1 on the given port"),
+ AST_CLI_DEFINE(handle_cli_misdn_port_down, "Try to deactivate the L1 on the given port"),
AST_CLI_DEFINE(handle_cli_misdn_port_unblock, "Unblock the given port"),
AST_CLI_DEFINE(handle_cli_misdn_port_up, "Try to establish L1 on the given port"),
AST_CLI_DEFINE(handle_cli_misdn_reload, "Reload internal mISDN config, read from the config file"),
@@ -2378,7 +2373,7 @@ static int misdn_digit_end(struct ast_channel *ast, char digit, unsigned int dur
chan_misdn_log(1, bc ? bc->port : 0, "* IND : Digit %c\n", digit);
if (!bc) {
- ast_log(LOG_WARNING, " --> !! Got Digit Event withut having bchannel Object\n");
+ ast_log(LOG_WARNING, " --> !! Got Digit Event without having bchannel Object\n");
return -1;
}
@@ -2461,7 +2456,7 @@ static int misdn_indication(struct ast_channel *ast, int cond, const void *data,
chan_misdn_log(1, p->bc->port, "* IND :\tringing pid:%d\n", p->bc ? p->bc->pid : -1);
switch (p->state) {
case MISDN_ALERTING:
- chan_misdn_log(2, p->bc->port, " --> * IND :\tringing pid:%d but I was Ringing before, so ignoreing it\n", p->bc ? p->bc->pid : -1);
+ chan_misdn_log(2, p->bc->port, " --> * IND :\tringing pid:%d but I was Ringing before, so ignoring it\n", p->bc ? p->bc->pid : -1);
break;
case MISDN_CONNECTED:
chan_misdn_log(2, p->bc->port, " --> * IND :\tringing pid:%d but Connected, so just send TONE_ALERTING without state changes \n", p->bc ? p->bc->pid : -1);
@@ -2667,7 +2662,7 @@ static int misdn_hangup(struct ast_channel *ast)
break;
case MISDN_CONNECTED:
case MISDN_PRECONNECTED:
- /* Alerting or Disconect */
+ /* Alerting or Disconnect */
if (p->bc->nt) {
start_bc_tones(p);
hanguptone_indicate(p);
@@ -2903,7 +2898,7 @@ static int misdn_write(struct ast_channel *ast, struct ast_frame *frame)
}
if (ch->notxtone) {
- chan_misdn_log(7, ch->bc->port, "misdn_write: Returning because notxone\n");
+ chan_misdn_log(7, ch->bc->port, "misdn_write: Returning because notxtone\n");
return 0;
}
@@ -2958,13 +2953,12 @@ static int misdn_write(struct ast_channel *ast, struct ast_frame *frame)
break;
default:
if (!ch->dropped_frame_cnt)
- chan_misdn_log(5, ch->bc->port, "BC not active (nor bridged) droping: %d frames addr:%x exten:%s cid:%s ch->state:%s bc_state:%d l3id:%x\n", frame->samples, ch->bc->addr, ast->exten, ast->cid.cid_num, misdn_get_ch_state( ch), ch->bc->bc_state, ch->bc->l3_id);
+ chan_misdn_log(5, ch->bc->port, "BC not active (nor bridged) dropping: %d frames addr:%x exten:%s cid:%s ch->state:%s bc_state:%d l3id:%x\n", frame->samples, ch->bc->addr, ast->exten, ast->cid.cid_num, misdn_get_ch_state( ch), ch->bc->bc_state, ch->bc->l3_id);
ch->dropped_frame_cnt++;
if (ch->dropped_frame_cnt > 100) {
ch->dropped_frame_cnt = 0;
- chan_misdn_log(5, ch->bc->port, "BC not active (nor bridged) droping: %d frames addr:%x dropped > 100 frames!\n", frame->samples, ch->bc->addr);
-
+ chan_misdn_log(5, ch->bc->port, "BC not active (nor bridged) dropping: %d frames addr:%x dropped > 100 frames!\n", frame->samples, ch->bc->addr);
}
return 0;
@@ -2972,7 +2966,7 @@ static int misdn_write(struct ast_channel *ast, struct ast_frame *frame)
chan_misdn_log(9, ch->bc->port, "Sending :%d bytes 2 MISDN\n", frame->samples);
if ( !ch->bc->nojitter && misdn_cap_is_speech(ch->bc->capability) ) {
- /* Buffered Transmit (triggert by read from isdn side)*/
+ /* Buffered Transmit (triggered by read from isdn side)*/
if (misdn_jb_fill(ch->jb, frame->data.ptr, frame->samples) < 0) {
if (ch->bc->active)
cb_log(0, ch->bc->port, "Misdn Jitterbuffer Overflow.\n");
@@ -3053,11 +3047,10 @@ static enum ast_bridge_result misdn_bridge (struct ast_channel *c0,
if (!f)
chan_misdn_log(4, ch1->bc->port, "Read Null Frame\n");
else
- chan_misdn_log(4, ch1->bc->port, "Read Frame Controll class:%d\n", f->subclass);
+ chan_misdn_log(4, ch1->bc->port, "Read Frame Control class:%d\n", f->subclass);
*fo = f;
*rc = who;
-
break;
}
@@ -3624,7 +3617,7 @@ static void cl_dequeue_chan(struct chan_list **list, struct chan_list *chan)
/** Channel Queue End **/
-int pbx_start_chan(struct chan_list *ch)
+static int pbx_start_chan(struct chan_list *ch)
{
int ret = ast_pbx_start(ch->ast);
@@ -3691,7 +3684,7 @@ static void release_chan(struct misdn_bchannel *bc) {
chan_misdn_log(5, bc->port, "release_chan: bc with l3id: %x\n", bc->l3_id);
- /*releaseing jitterbuffer*/
+ /*releasing jitterbuffer*/
if (ch->jb ) {
misdn_jb_destroy(ch->jb);
ch->jb = NULL;
@@ -3744,7 +3737,7 @@ static void release_chan(struct misdn_bchannel *bc) {
static void misdn_transfer_bc(struct chan_list *tmp_ch, struct chan_list *holded_chan)
{
- chan_misdn_log(4, 0, "TRANSFERING %s to %s\n", holded_chan->ast->name, tmp_ch->ast->name);
+ chan_misdn_log(4, 0, "TRANSFERRING %s to %s\n", holded_chan->ast->name, tmp_ch->ast->name);
tmp_ch->state = MISDN_HOLD_DISCONNECT;
@@ -4097,7 +4090,7 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
chan_misdn_log(2, bc->port, " --> DTMF:%c\n", bc->dtmf);
ast_queue_frame(ch->ast, &fr);
} else {
- chan_misdn_log(2, bc->port, " --> Ingoring DTMF:%c due to bridge flags\n", bc->dtmf);
+ chan_misdn_log(2, bc->port, " --> Ignoring DTMF:%c due to bridge flags\n", bc->dtmf);
}
}
break;
@@ -4343,18 +4336,28 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
if (!strstr(ch->allowed_bearers, "all")) {
int i;
- for (i = 0; i < sizeof(allowed_bearers_array) / sizeof(struct allowed_bearers); i++) {
- if (allowed_bearers_array[i].cap == bc->capability) {
- if (!strstr(ch->allowed_bearers, allowed_bearers_array[i].name)) {
- chan_misdn_log(0, bc->port, "Bearer Not allowed\b");
- bc->out_cause = AST_CAUSE_INCOMPATIBLE_DESTINATION;
- ch->state = MISDN_EXTCANTMATCH;
- misdn_lib_send_event(bc, EVENT_RELEASE_COMPLETE );
- return RESPONSE_OK;
+ for (i = 0; i < ARRAY_LEN(allowed_bearers_array); ++i) {
+ if (allowed_bearers_array[i].cap == bc->capability) {
+ if (strstr(ch->allowed_bearers, allowed_bearers_array[i].name)) {
+ /* The bearer capability is allowed */
+ if (allowed_bearers_array[i].deprecated) {
+ chan_misdn_log(0, bc->port, "%s in allowed_bearers list is deprecated\n",
+ allowed_bearers_array[i].name);
+ }
+ break;
}
}
+ } /* end for */
+ if (i == ARRAY_LEN(allowed_bearers_array)) {
+ /* We did not find the bearer capability */
+ chan_misdn_log(0, bc->port, "Bearer capability not allowed: %s(%d)\n",
+ bearer2str(bc->capability), bc->capability);
+ bc->out_cause = AST_CAUSE_INCOMPATIBLE_DESTINATION;
+ ch->state = MISDN_EXTCANTMATCH;
+ misdn_lib_send_event(bc, EVENT_RELEASE_COMPLETE);
+ return RESPONSE_OK;
}
}
@@ -4464,7 +4467,7 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
break;
}
- /* If the extension does not exist and we're not TE_PTMP we wait for more digis
+ /* If the extension does not exist and we're not TE_PTMP we wait for more digits
* without interdigit timeout.
* */
if (!ast_exists_extension(ch->ast, ch->context, bc->dad, 1, bc->oad)) {
@@ -4833,7 +4836,7 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
break;
case MISDN_CLEANING:
- chan_misdn_log(1,bc->port," --> in state cleaning .. so ingoring, the stack should clean it for us\n");
+ chan_misdn_log(1,bc->port," --> in state cleaning .. so ignoring, the stack should clean it for us\n");
break;
default:
@@ -4843,9 +4846,9 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
break;
- /***************************/
- /** Suplementary Services **/
- /***************************/
+ /****************************/
+ /** Supplementary Services **/
+ /****************************/
case EVENT_RETRIEVE:
{
struct ast_channel *hold_ast;
@@ -5127,7 +5130,7 @@ static int load_module(void)
" s - send Non Inband DTMF as inband\n"
" vr - rxgain control\n"
" vt - txgain control\n"
- " i - Ignore detected dtmf tones, don't signal them to asterisk, they will be transported inband.\n"
+ " i - Ignore detected dtmf tones, don't signal them to asterisk, they will be transported inband.\n"
);
@@ -5531,7 +5534,7 @@ int chan_misdn_jb_empty ( struct misdn_bchannel *bc, char *buf, int len)
/*******************************************************/
-/* allocates the jb-structure and initialise the elements*/
+/* allocates the jb-structure and initialize the elements*/
struct misdn_jb *misdn_jb_init(int size, int upper_threshold)
{
int i;
@@ -5584,7 +5587,7 @@ void misdn_jb_destroy(struct misdn_jb *jb)
}
/* fills the jitterbuffer with len data returns < 0 if there was an
- error (bufferoverflow). */
+ error (buffer overflow). */
int misdn_jb_fill(struct misdn_jb *jb, const char *data, int len)
{
int i, j, rp, wp;
@@ -5610,7 +5613,7 @@ int misdn_jb_fill(struct misdn_jb *jb, const char *data, int len)
jb->state_buffer = wp - rp;
else
jb->state_buffer = jb->size - rp + wp;
- chan_misdn_log(9, 0, "misdn_jb_fill: written:%d | Bufferstatus:%d p:%p\n", len, jb->state_buffer, jb);
+ chan_misdn_log(9, 0, "misdn_jb_fill: written:%d | Buffer status:%d p:%p\n", len, jb->state_buffer, jb);
if (jb->state_full) {
jb->wp = wp;
@@ -5676,7 +5679,7 @@ int misdn_jb_empty(struct misdn_jb *jb, char *data, int len)
jb->state_buffer = wp - rp;
else
jb->state_buffer = jb->size - rp + wp;
- chan_misdn_log(9, 0, "misdn_jb_empty: read:%d | Bufferstatus:%d p:%p\n", len, jb->state_buffer, jb);
+ chan_misdn_log(9, 0, "misdn_jb_empty: read:%d | Buffer status:%d p:%p\n", len, jb->state_buffer, jb);
jb->rp = rp;
} else
@@ -5697,7 +5700,7 @@ int misdn_jb_empty(struct misdn_jb *jb, char *data, int len)
-void chan_misdn_log(int level, int port, char *tmpl, ...)
+static void chan_misdn_log(int level, int port, char *tmpl, ...)
{
va_list ap;
char buf[1024];