ast_mutex_t release_lock;
enum misdn_chan_state {
- MISDN_NOTHING=0, /*!< at beginning */
- MISDN_WAITING4DIGS, /*!< when waiting for infos */
- 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 */
- MISDN_PROCEEDING, /*!< we got a progress */
- MISDN_CALLING, /*!< when misdn_call is called */
- MISDN_CALLING_ACKNOWLEDGE, /*!< when we get SETUP_ACK */
- MISDN_ALERTING, /*!< when Alerting */
- MISDN_BUSY, /*!< when BUSY */
- MISDN_CONNECTED, /*!< when connected */
- MISDN_PRECONNECTED, /*!< when connected */
- MISDN_DISCONNECTED, /*!< when connected */
- 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 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 */
+ MISDN_NOTHING = 0, /*!< at beginning */
+ MISDN_WAITING4DIGS, /*!< when waiting for info */
+ MISDN_EXTCANTMATCH, /*!< when asterisk couldn't match our ext */
+ MISDN_INCOMING_SETUP, /*!< for incoming setup */
+ MISDN_DIALING, /*!< when pbx_start */
+ MISDN_PROGRESS, /*!< we have progress */
+ MISDN_PROCEEDING, /*!< we have progress */
+ MISDN_CALLING, /*!< when misdn_call is called */
+ MISDN_CALLING_ACKNOWLEDGE, /*!< when we get SETUP_ACK */
+ MISDN_ALERTING, /*!< when Alerting */
+ MISDN_BUSY, /*!< when BUSY */
+ MISDN_CONNECTED, /*!< when connected */
+ MISDN_PRECONNECTED, /*!< when connected */
+ MISDN_DISCONNECTED, /*!< when connected */
+ 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 came from misdn */
+ MISDN_HUNGUP_FROM_AST, /*!< when DISCONNECT/RELEASE/REL_COMP came out of misdn_hangup */
+ MISDN_HOLDED, /*!< when on hold */
+ MISDN_HOLD_DISCONNECT, /*!< when on hold */
};
*/
int noautorespond_on_setup;
- int norxtone; /* Boolean assigned values but the value is not used. */
+ int norxtone; /*!< Boolean assigned values but the value is not used. */
/*!
* \brief TRUE if we are not to generate tones (Playtones)
*/
char mohinterpret[MAX_MUSICCLASS];
- //int zero_read_cnt; /* Not used */
+#if 0
+ int zero_read_cnt; /* Not used */
+#endif
/*!
* \brief Number of outgoing audio frames dropped since last debug gripe message.
* \brief Overlap timer start time. Timer restarted for every digit received.
*/
struct timeval overlap_tv;
-
- //struct chan_list *peer; /* Not used */
+
+#if 0
+ struct chan_list *peer; /* Not used */
+#endif
/*!
* \brief Next channel call record in the list.
*/
struct chan_list *next;
- //struct chan_list *prev; /* Not used */
- //struct chan_list *first; /* Not used */
+#if 0
+ struct chan_list *prev; /* Not used */
+ struct chan_list *first; /* Not used */
+#endif
};
+int MAXTICS = 8;
+
void export_ch(struct ast_channel *chan, struct misdn_bchannel *bc, struct chan_list *ch);
void import_ch(struct ast_channel *chan, struct misdn_bchannel *bc, struct chan_list *ch);
+static struct ast_frame *process_ast_dsp(struct chan_list *tmp, struct ast_frame *frame);
-struct robin_list {
+static struct robin_list {
char *group;
int port;
int channel;
struct robin_list *next;
struct robin_list *prev;
-};
-static struct robin_list *robin = NULL;
-
+} *robin = NULL;
-static struct ast_frame *process_ast_dsp(struct chan_list *tmp, struct ast_frame *frame);
-
-
-
-static inline void free_robin_list_r (struct robin_list *r)
+static inline void free_robin_list_r(struct robin_list *r)
{
if (r) {
if (r->next)
}
}
-static void free_robin_list ( void )
+static void free_robin_list(void)
{
free_robin_list_r(robin);
robin = NULL;
}
-static struct robin_list* get_robin_position (char *group)
+static struct robin_list* get_robin_position(char *group)
{
struct robin_list *new;
struct robin_list *iter = robin;
for (; iter; iter = iter->next) {
- if (!strcasecmp(iter->group, group))
+ if (!strcasecmp(iter->group, group)) {
return iter;
+ }
}
new = ast_calloc(1, sizeof(*new));
- new->group = strndup(group, strlen(group));
+ new->group = strdup(group);
new->channel = 1;
if (robin) {
new->next = robin;
static const char misdn_type[] = "mISDN";
-static int tracing = 0 ;
+static int tracing = 0;
/*! \brief Only alaw and mulaw is allowed for now */
static int prefformat = AST_FORMAT_ALAW ; /* AST_FORMAT_SLINEAR ; AST_FORMAT_ULAW | */
static int *misdn_in_calls;
static int *misdn_out_calls;
-
struct chan_list dummy_cl;
/*!
static struct chan_list *find_chan_by_bc(struct chan_list *list, struct misdn_bchannel *bc);
static struct chan_list *find_chan_by_pid(struct chan_list *list, int pid);
-
-
static int dialtone_indicate(struct chan_list *cl);
static int hanguptone_indicate(struct chan_list *cl);
static int stop_indicate(struct chan_list *cl);
int chan_misdn_jb_empty(struct misdn_bchannel *bc, char *buf, int len);
-
void debug_numplan(int port, int numplan, char *type);
-
int add_out_calls(int port);
int add_in_calls(int port);
{
struct chan_list *tmp;
- for (tmp=cl_te; tmp; tmp = tmp->next) {
- if ( tmp->ast == ast ) return tmp;
+ for (tmp = cl_te; tmp; tmp = tmp->next) {
+ if (tmp->ast == ast) {
+ return tmp;
+ }
}
return NULL;
{
struct chan_list *tmp;
- for (tmp=cl_te; tmp; tmp = tmp->next) {
- if ( tmp->ast && strcmp(tmp->ast->name,name) == 0) return tmp;
+ for (tmp = cl_te; tmp; tmp = tmp->next) {
+ if (tmp->ast && strcmp(tmp->ast->name, name) == 0) {
+ return tmp;
+ }
}
return NULL;
struct allowed_bearers {
- char *name; /*!< Bearer capability name string used in /etc/misdn.conf allowed_bearers */
- char *display; /*!< Bearer capability displayable name */
- int cap; /*!< SETUP message bearer capability field code value */
- int deprecated; /*!< TRUE if this entry is deprecated. (Misspelled or bad name to use) */
+ char *name; /*!< Bearer capability name string used in /etc/misdn.conf allowed_bearers */
+ char *display; /*!< Bearer capability displayable name */
+ int cap; /*!< SETUP message bearer capability field code value */
+ int deprecated; /*!< TRUE if this entry is deprecated. (Misspelled or bad name to use) */
};
/* *INDENT-OFF* */
switch (fac->Function) {
#ifdef HAVE_MISDN_FAC_RESULT
case Fac_RESULT:
- chan_misdn_log(0, bc->port," --> Received RESULT Operation\n");
+ chan_misdn_log(0, bc->port, " --> Received RESULT Operation\n");
break;
#endif
#ifdef HAVE_MISDN_FAC_ERROR
case Fac_ERROR:
- chan_misdn_log(0, bc->port," --> Received Error Operation\n");
- chan_misdn_log(0, bc->port," --> Value:%d Error:%s\n",fac->u.ERROR.errorValue, fac->u.ERROR.error);
+ chan_misdn_log(0, bc->port, " --> Received Error Operation\n");
+ chan_misdn_log(0, bc->port, " --> Value:%d Error:%s\n", fac->u.ERROR.errorValue, fac->u.ERROR.error);
break;
#endif
case Fac_CD:
- chan_misdn_log(1,bc->port," --> calldeflect to: %s, presentable: %s\n", fac->u.CDeflection.DeflectedToNumber,
+ chan_misdn_log(1, bc->port, " --> calldeflect to: %s, presentable: %s\n", fac->u.CDeflection.DeflectedToNumber,
fac->u.CDeflection.PresentationAllowed ? "yes" : "no");
break;
case Fac_AOCDCurrency:
- if (fac->u.AOCDcur.chargeNotAvailable)
- chan_misdn_log(1,bc->port," --> AOCD currency: charge not available\n");
- else if (fac->u.AOCDcur.freeOfCharge)
- chan_misdn_log(1,bc->port," --> AOCD currency: free of charge\n");
- else if (fac->u.AOCDchu.billingId >= 0)
- chan_misdn_log(1,bc->port," --> AOCD currency: currency:%s amount:%d multiplier:%d typeOfChargingInfo:%s billingId:%d\n",
+ if (fac->u.AOCDcur.chargeNotAvailable) {
+ chan_misdn_log(1, bc->port, " --> AOCD currency: charge not available\n");
+ } else if (fac->u.AOCDcur.freeOfCharge) {
+ chan_misdn_log(1, bc->port, " --> AOCD currency: free of charge\n");
+ } else if (fac->u.AOCDchu.billingId >= 0) {
+ chan_misdn_log(1, bc->port, " --> AOCD currency: currency:%s amount:%d multiplier:%d typeOfChargingInfo:%s billingId:%d\n",
fac->u.AOCDcur.currency, fac->u.AOCDcur.currencyAmount, fac->u.AOCDcur.multiplier,
(fac->u.AOCDcur.typeOfChargingInfo == 0) ? "subTotal" : "total", fac->u.AOCDcur.billingId);
- else
- chan_misdn_log(1,bc->port," --> AOCD currency: currency:%s amount:%d multiplier:%d typeOfChargingInfo:%s\n",
+ } else {
+ chan_misdn_log(1, bc->port, " --> AOCD currency: currency:%s amount:%d multiplier:%d typeOfChargingInfo:%s\n",
fac->u.AOCDcur.currency, fac->u.AOCDcur.currencyAmount, fac->u.AOCDcur.multiplier,
(fac->u.AOCDcur.typeOfChargingInfo == 0) ? "subTotal" : "total");
+ }
break;
case Fac_AOCDChargingUnit:
- if (fac->u.AOCDchu.chargeNotAvailable)
- chan_misdn_log(1,bc->port," --> AOCD charging unit: charge not available\n");
- else if (fac->u.AOCDchu.freeOfCharge)
- chan_misdn_log(1,bc->port," --> AOCD charging unit: free of charge\n");
- else if (fac->u.AOCDchu.billingId >= 0)
- chan_misdn_log(1,bc->port," --> AOCD charging unit: recordedUnits:%d typeOfChargingInfo:%s billingId:%d\n",
+ if (fac->u.AOCDchu.chargeNotAvailable) {
+ chan_misdn_log(1, bc->port, " --> AOCD charging unit: charge not available\n");
+ } else if (fac->u.AOCDchu.freeOfCharge) {
+ chan_misdn_log(1, bc->port, " --> AOCD charging unit: free of charge\n");
+ } else if (fac->u.AOCDchu.billingId >= 0) {
+ chan_misdn_log(1, bc->port, " --> AOCD charging unit: recordedUnits:%d typeOfChargingInfo:%s billingId:%d\n",
fac->u.AOCDchu.recordedUnits, (fac->u.AOCDchu.typeOfChargingInfo == 0) ? "subTotal" : "total", fac->u.AOCDchu.billingId);
- else
- chan_misdn_log(1,bc->port," --> AOCD charging unit: recordedUnits:%d typeOfChargingInfo:%s\n",
+ } else {
+ chan_misdn_log(1, bc->port, " --> AOCD charging unit: recordedUnits:%d typeOfChargingInfo:%s\n",
fac->u.AOCDchu.recordedUnits, (fac->u.AOCDchu.typeOfChargingInfo == 0) ? "subTotal" : "total");
+ }
break;
case Fac_None:
default:
- chan_misdn_log(1,bc->port," --> unknown facility\n");
+ chan_misdn_log(1, bc->port, " --> unknown facility\n");
break;
}
}
static void print_bearer(struct misdn_bchannel *bc)
{
-
- chan_misdn_log(2, bc->port, " --> Bearer: %s\n",bearer2str(bc->capability));
+ chan_misdn_log(2, bc->port, " --> Bearer: %s\n", bearer2str(bc->capability));
switch(bc->law) {
case INFO_CODEC_ALAW:
{
char buf[128];
- if (!bc->AOCD_need_export || !ast)
+ if (!bc->AOCD_need_export || !ast) {
return;
+ }
if (originator == ORG_AST) {
- ast = ast_bridged_channel(ast);
- if (!ast)
+ if (!(ast = ast_bridged_channel(ast))) {
return;
+ }
}
switch (bc->AOCDtype) {
case Fac_AOCDCurrency:
pbx_builtin_setvar_helper(ast, "AOCD_Type", "currency");
- if (bc->AOCD.currency.chargeNotAvailable)
+ if (bc->AOCD.currency.chargeNotAvailable) {
pbx_builtin_setvar_helper(ast, "AOCD_ChargeAvailable", "no");
- else {
+ } else {
pbx_builtin_setvar_helper(ast, "AOCD_ChargeAvailable", "yes");
- if (bc->AOCD.currency.freeOfCharge)
+ if (bc->AOCD.currency.freeOfCharge) {
pbx_builtin_setvar_helper(ast, "AOCD_FreeOfCharge", "yes");
- else {
+ } else {
pbx_builtin_setvar_helper(ast, "AOCD_FreeOfCharge", "no");
if (snprintf(buf, sizeof(buf), "%d %s", bc->AOCD.currency.currencyAmount * bc->AOCD.currency.multiplier, bc->AOCD.currency.currency) < sizeof(buf)) {
pbx_builtin_setvar_helper(ast, "AOCD_Amount", buf);
- if (bc->AOCD.currency.billingId >= 0 && snprintf(buf, sizeof(buf), "%d", bc->AOCD.currency.billingId) < sizeof(buf))
+ if (bc->AOCD.currency.billingId >= 0 && snprintf(buf, sizeof(buf), "%d", bc->AOCD.currency.billingId) < sizeof(buf)) {
pbx_builtin_setvar_helper(ast, "AOCD_BillingId", buf);
+ }
}
}
}
break;
case Fac_AOCDChargingUnit:
pbx_builtin_setvar_helper(ast, "AOCD_Type", "charging_unit");
- if (bc->AOCD.chargingUnit.chargeNotAvailable)
+ if (bc->AOCD.chargingUnit.chargeNotAvailable) {
pbx_builtin_setvar_helper(ast, "AOCD_ChargeAvailable", "no");
- else {
+ } else {
pbx_builtin_setvar_helper(ast, "AOCD_ChargeAvailable", "yes");
- if (bc->AOCD.chargingUnit.freeOfCharge)
+ if (bc->AOCD.chargingUnit.freeOfCharge) {
pbx_builtin_setvar_helper(ast, "AOCD_FreeOfCharge", "yes");
- else {
+ } else {
pbx_builtin_setvar_helper(ast, "AOCD_FreeOfCharge", "no");
if (snprintf(buf, sizeof(buf), "%d", bc->AOCD.chargingUnit.recordedUnits) < sizeof(buf)) {
pbx_builtin_setvar_helper(ast, "AOCD_RecordedUnits", buf);
- if (bc->AOCD.chargingUnit.billingId >= 0 && snprintf(buf, sizeof(buf), "%d", bc->AOCD.chargingUnit.billingId) < sizeof(buf))
+ if (bc->AOCD.chargingUnit.billingId >= 0 && snprintf(buf, sizeof(buf), "%d", bc->AOCD.chargingUnit.billingId) < sizeof(buf)) {
pbx_builtin_setvar_helper(ast, "AOCD_BillingId", buf);
+ }
}
}
}
static void sighandler(int sig)
{}
-static void* misdn_tasks_thread_func (void *data)
+static void *misdn_tasks_thread_func(void *data)
{
int wait;
struct sigaction sa;
while (1) {
wait = ast_sched_wait(misdn_tasks);
- if (wait < 0)
+ if (wait < 0) {
wait = 8000;
- if (poll(NULL, 0, wait) < 0)
+ }
+ if (poll(NULL, 0, wait) < 0) {
chan_misdn_log(4, 0, "Waking up misdn_tasks thread\n");
+ }
ast_sched_runq(misdn_tasks);
}
return NULL;
}
-static void misdn_tasks_init (void)
+static void misdn_tasks_init(void)
{
sem_t blocker;
int i = 5;
sem_destroy(&blocker);
}
-static void misdn_tasks_destroy (void)
+static void misdn_tasks_destroy(void)
{
if (misdn_tasks) {
chan_misdn_log(4, 0, "Killing misdn_tasks thread\n");
}
}
-static inline void misdn_tasks_wakeup (void)
+static inline void misdn_tasks_wakeup(void)
{
pthread_kill(misdn_tasks_thread, SIGUSR1);
}
-static inline int _misdn_tasks_add_variable (int timeout, ast_sched_cb callback, const void *data, int variable)
+static inline int _misdn_tasks_add_variable(int timeout, ast_sched_cb callback, const void *data, int variable)
{
int task_id;
return task_id;
}
-static int misdn_tasks_add (int timeout, ast_sched_cb callback, const void *data)
+static int misdn_tasks_add(int timeout, ast_sched_cb callback, const void *data)
{
return _misdn_tasks_add_variable(timeout, callback, data, 0);
}
-static int misdn_tasks_add_variable (int timeout, ast_sched_cb callback, const void *data)
+static int misdn_tasks_add_variable(int timeout, ast_sched_cb callback, const void *data)
{
return _misdn_tasks_add_variable(timeout, callback, data, 1);
}
-static void misdn_tasks_remove (int task_id)
+static void misdn_tasks_remove(int task_id)
{
AST_SCHED_DEL(misdn_tasks, task_id);
}
-static int misdn_l1_task (const void *data)
+static int misdn_l1_task(const void *vdata)
{
- misdn_lib_isdn_l1watcher(*(int *)data);
- chan_misdn_log(5, *(int *)data, "L1watcher timeout\n");
+ const int *data = vdata;
+ misdn_lib_isdn_l1watcher(*data);
+ chan_misdn_log(5, *data, "L1watcher timeout\n");
return 1;
}
-static int misdn_overlap_dial_task (const void *data)
+static int misdn_overlap_dial_task(const void *data)
{
struct timeval tv_end, tv_now;
int diff;
- struct chan_list *ch = (struct chan_list *)data;
+ struct chan_list *ch = (struct chan_list *) data;
+ char *dad;
chan_misdn_log(4, ch->bc->port, "overlap dial task, chan_state: %d\n", ch->state);
ch->overlap_dial_task = -1;
return 0;
}
-
+
ast_mutex_lock(&ch->overlap_tv_lock);
tv_end = ch->overlap_tv;
ast_mutex_unlock(&ch->overlap_tv_lock);
-
+
tv_end.tv_sec += ch->overlap_dial;
tv_now = ast_tvnow();
- diff = ast_tvdiff_ms(tv_end, tv_now);
+ if ((diff = ast_tvdiff_ms(tv_end, tv_now)) > 100) {
+ return diff;
+ }
- if (diff <= 100) {
- char *dad=ch->bc->dad, sexten[]="s";
- /* if we are 100ms near the timeout, we are satisfied.. */
- stop_indicate(ch);
-
- if (ast_strlen_zero(ch->bc->dad)) {
- dad=sexten;
- strcpy(ch->ast->exten, sexten);
- }
+ /* if we are 100ms near the timeout, we are satisfied.. */
+ stop_indicate(ch);
- if (ast_exists_extension(ch->ast, ch->context, dad, 1, ch->bc->oad)) {
- ch->state=MISDN_DIALING;
- if (pbx_start_chan(ch) < 0) {
- chan_misdn_log(-1, ch->bc->port, "ast_pbx_start returned < 0 in misdn_overlap_dial_task\n");
- goto misdn_overlap_dial_task_disconnect;
- }
- } else {
-misdn_overlap_dial_task_disconnect:
- hanguptone_indicate(ch);
- ch->bc->out_cause = AST_CAUSE_UNALLOCATED;
- ch->state=MISDN_CLEANING;
- misdn_lib_send_event(ch->bc, EVENT_DISCONNECT);
+ if (ast_strlen_zero(ch->bc->dad)) {
+ dad = "s";
+ ast_copy_string(ch->ast->exten, "s", sizeof(ch->ast->exten));
+ } else {
+ dad = ch->bc->dad;
+ }
+
+ if (ast_exists_extension(ch->ast, ch->context, dad, 1, ch->bc->oad)) {
+ ch->state = MISDN_DIALING;
+ if (pbx_start_chan(ch) < 0) {
+ chan_misdn_log(-1, ch->bc->port, "ast_pbx_start returned < 0 in misdn_overlap_dial_task\n");
+ goto misdn_overlap_dial_task_disconnect;
}
- ch->overlap_dial_task = -1;
- return 0;
- } else
- return diff;
+ } else {
+misdn_overlap_dial_task_disconnect:
+ hanguptone_indicate(ch);
+ ch->bc->out_cause = AST_CAUSE_UNALLOCATED;
+ ch->state = MISDN_CLEANING;
+ misdn_lib_send_event(ch->bc, EVENT_DISCONNECT);
+ }
+ ch->overlap_dial_task = -1;
+ return 0;
}
-static void send_digit_to_chan(struct chan_list *cl, char digit )
+static void send_digit_to_chan(struct chan_list *cl, char digit)
{
- static const char* dtmf_tones[] = {
+ static const char *dtmf_tones[] = {
"!941+1336/100,!0/100", /* 0 */
"!697+1209/100,!0/100", /* 1 */
"!697+1336/100,!0/100", /* 2 */
"!852+1633/100,!0/100", /* C */
"!941+1633/100,!0/100", /* D */
"!941+1209/100,!0/100", /* * */
- "!941+1477/100,!0/100" }; /* # */
- struct ast_channel *chan=cl->ast;
+ "!941+1477/100,!0/100", /* # */
+ };
+ struct ast_channel *chan = cl->ast;
- if (digit >= '0' && digit <='9')
- ast_playtones_start(chan,0,dtmf_tones[digit-'0'], 0);
- else if (digit >= 'A' && digit <= 'D')
- ast_playtones_start(chan,0,dtmf_tones[digit-'A'+10], 0);
- else if (digit == '*')
- ast_playtones_start(chan,0,dtmf_tones[14], 0);
- else if (digit == '#')
- ast_playtones_start(chan,0,dtmf_tones[15], 0);
- else {
+ if (digit >= '0' && digit <='9') {
+ ast_playtones_start(chan, 0, dtmf_tones[digit - '0'], 0);
+ } else if (digit >= 'A' && digit <= 'D') {
+ ast_playtones_start(chan, 0, dtmf_tones[digit - 'A' + 10], 0);
+ } else if (digit == '*') {
+ ast_playtones_start(chan, 0, dtmf_tones[14], 0);
+ } else if (digit == '#') {
+ ast_playtones_start(chan, 0, dtmf_tones[15], 0);
+ } else {
/* not handled */
ast_debug(1, "Unable to handle DTMF tone '%c' for '%s'\n", digit, chan->name);
}
return complete_debug_port(a);
}
- if (a->argc < 4 || a->argc > 7)
+ if (a->argc < 4 || a->argc > 7) {
return CLI_SHOWUSAGE;
+ }
if (!strcasecmp(a->argv[3], "on")) {
level = 1;
int i;
int only = 0;
if (a->argc == 5) {
- if (strncasecmp(a->argv[4], "only", strlen(a->argv[4])))
+ if (strncasecmp(a->argv[4], "only", strlen(a->argv[4]))) {
return CLI_SHOWUSAGE;
- else
+ } else {
only = 1;
+ }
}
for (i = 0; i <= max_ports; i++) {
misdn_debug[i] = level;
misdn_debug_only[i] = only;
}
- ast_cli(a->fd, "changing debug level for all ports to %d%s\n",misdn_debug[0], only?" (only)":"");
+ ast_cli(a->fd, "changing debug level for all ports to %d%s\n", misdn_debug[0], only ? " (only)" : "");
}
break;
case 6:
return 0;
}
if (a->argc == 7) {
- if (strncasecmp(a->argv[6], "only", strlen(a->argv[6])))
+ if (strncasecmp(a->argv[6], "only", strlen(a->argv[6]))) {
return CLI_SHOWUSAGE;
- else
+ } else {
misdn_debug_only[port] = 1;
- } else
+ }
+ } else {
misdn_debug_only[port] = 0;
+ }
misdn_debug[port] = level;
- ast_cli(a->fd, "changing debug level to %d%s for port %d\n", misdn_debug[port], misdn_debug_only[port]?" (only)":"", port);
+ ast_cli(a->fd, "changing debug level to %d%s for port %d\n", misdn_debug[port], misdn_debug_only[port] ? " (only)" : "", port);
}
}
return NULL;
}
- if (a->argc != 5)
+ if (a->argc != 5) {
return CLI_SHOWUSAGE;
+ }
- /* Is this supposed to not do anything? */
+ /* XXX Is this supposed to not do anything? XXX */
return CLI_SUCCESS;
}
return NULL;
}
- if (a->argc != 4)
+ if (a->argc != 4) {
return CLI_SHOWUSAGE;
+ }
misdn_lib_port_block(atoi(a->argv[3]));
return NULL;
}
- if (a->argc != 4)
+ if (a->argc != 4) {
return CLI_SHOWUSAGE;
+ }
misdn_lib_port_unblock(atoi(a->argv[3]));
return NULL;
}
- if (a->argc != 4)
+ if (a->argc != 4) {
return CLI_SHOWUSAGE;
+ }
misdn_lib_port_restart(atoi(a->argv[3]));
return NULL;
}
- if (a->argc != 4)
+ if (a->argc != 4) {
return CLI_SHOWUSAGE;
+ }
misdn_lib_pid_restart(atoi(a->argv[3]));
return NULL;
}
- if (a->argc != 4)
+ if (a->argc != 4) {
return CLI_SHOWUSAGE;
+ }
misdn_lib_get_port_up(atoi(a->argv[3]));
return NULL;
}
- if (a->argc != 4)
+ if (a->argc != 4) {
return CLI_SHOWUSAGE;
+ }
misdn_lib_get_port_down(atoi(a->argv[3]));
term_color(name, tmp, COLOR_BRWHITE, 0, sizeof(tmp));
misdn_cfg_get_desc(elem, desc, sizeof(desc), def, sizeof(def));
- if (elem < MISDN_CFG_LAST)
+ if (elem < MISDN_CFG_LAST) {
term_color(section, "PORTS SECTION", COLOR_YELLOW, 0, sizeof(section));
- else
+ } else {
term_color(section, "GENERAL SECTION", COLOR_YELLOW, 0, sizeof(section));
+ }
- if (*def)
+ if (*def) {
ast_cli(fd, "[%s] %s (Default: %s)\n\t%s\n", section, name, def, desc);
- else
+ } else {
ast_cli(fd, "[%s] %s\n\t%s\n", section, name, desc);
+ }
}
static char *handle_cli_misdn_show_config(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
if (!strcmp(a->argv[3], "description")) {
if (a->argc == 5) {
enum misdn_cfg_elements elem = misdn_cfg_get_elem(a->argv[4]);
- if (elem == MISDN_CFG_FIRST)
+ if (elem == MISDN_CFG_FIRST) {
ast_cli(a->fd, "Unknown element: %s\n", a->argv[4]);
- else
+ } else {
show_config_description(a->fd, elem);
+ }
return CLI_SUCCESS;
}
return CLI_SHOWUSAGE;
};
static struct state_struct state_array[] = {
- {MISDN_NOTHING,"NOTHING"}, /* at beginning */
- {MISDN_WAITING4DIGS,"WAITING4DIGS"}, /* when waiting for infos */
- {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 */
- {MISDN_PROCEEDING,"PROCEEDING"}, /* when pbx_start */
- {MISDN_CALLING,"CALLING"}, /* when misdn_call is called */
- {MISDN_CALLING_ACKNOWLEDGE,"CALLING_ACKNOWLEDGE"}, /* when misdn_call is called */
- {MISDN_ALERTING,"ALERTING"}, /* when Alerting */
- {MISDN_BUSY,"BUSY"}, /* when BUSY */
- {MISDN_CONNECTED,"CONNECTED"}, /* when connected */
- {MISDN_PRECONNECTED,"PRECONNECTED"}, /* when connected */
- {MISDN_DISCONNECTED,"DISCONNECTED"}, /* when connected */
- {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 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 */
+ { MISDN_NOTHING, "NOTHING" }, /* at beginning */
+ { MISDN_WAITING4DIGS, "WAITING4DIGS" }, /* when waiting for infos */
+ { 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 */
+ { MISDN_PROCEEDING, "PROCEEDING" }, /* when pbx_start */
+ { MISDN_CALLING, "CALLING" }, /* when misdn_call is called */
+ { MISDN_CALLING_ACKNOWLEDGE, "CALLING_ACKNOWLEDGE" }, /* when misdn_call is called */
+ { MISDN_ALERTING, "ALERTING" }, /* when Alerting */
+ { MISDN_BUSY, "BUSY" }, /* when BUSY */
+ { MISDN_CONNECTED, "CONNECTED" }, /* when connected */
+ { MISDN_PRECONNECTED, "PRECONNECTED" }, /* when connected */
+ { MISDN_DISCONNECTED, "DISCONNECTED" }, /* when connected */
+ { 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 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)
int i;
static char state[8];
- if( !p) return NULL;
+ if (!p) {
+ return NULL;
+ }
- for (i = 0; i < sizeof(state_array) / sizeof(struct state_struct); i++) {
- if (state_array[i].state == p->state)
- return state_array[i].txt;
+ for (i = 0; i < ARRAY_LEN(state_array); i++) {
+ if (state_array[i].state == p->state) {
+ return state_array[i].txt;
+ }
}
snprintf(state, sizeof(state), "%d", p->state) ;
}
-
static void reload_config(void)
{
int i, cfg_debug;
return NULL;
}
- if (a->argc != 2)
+ if (a->argc != 2) {
return CLI_SHOWUSAGE;
+ }
ast_cli(a->fd, "Reloading mISDN configuration\n");
reload_config();
ast ? ast->context : NULL,
misdn_get_ch_state(help)
);
- if (misdn_debug[bc->port] > 0)
+ if (misdn_debug[bc->port] > 0) {
ast_cli(fd,
" --> astname: %s\n"
" --> ch_l3id: %x\n"
help->norxtone, help->notxtone,
bc->holded
);
-
+ }
}
static char *handle_cli_misdn_show_channels(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
return NULL;
}
- if (a->argc != 3)
+ if (a->argc != 3) {
return CLI_SHOWUSAGE;
+ }
help = cl_te;
continue;
}
- if (misdn_debug[0] > 2)
+ if (misdn_debug[0] > 2) {
ast_cli(a->fd, "Bc:%p Ast:%p\n", bc, ast);
+ }
if (bc) {
print_bc_info(a->fd, help, bc);
} else {
return complete_ch(a);
}
- if (a->argc != 4)
+ if (a->argc != 4) {
return CLI_SHOWUSAGE;
+ }
help = cl_te;
print_bc_info(a->fd, help, bc);
break;
}
- }
+ }
}
return CLI_SUCCESS;
}
-ast_mutex_t lock;
-int MAXTICS = 8;
-
static char *handle_cli_misdn_set_tics(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
switch (cmd) {
return NULL;
}
- if (a->argc != 4)
+ if (a->argc != 4) {
return CLI_SHOWUSAGE;
+ }
+ /* XXX Wow, this does... a whole lot of nothing... XXX */
MAXTICS = atoi(a->argv[3]);
return CLI_SUCCESS;
return NULL;
}
- if (a->argc != 3)
+ if (a->argc != 3) {
return CLI_SHOWUSAGE;
+ }
ast_cli(a->fd, "BEGIN STACK_LIST:\n");
for (port = misdn_cfg_get_next_port(0); port > 0;
return NULL;
}
- if (a->argc != 4)
+ if (a->argc != 4) {
return CLI_SHOWUSAGE;
+ }
ast_cli(a->fd, "Port\tin_calls\tout_calls\n");
for (port = misdn_cfg_get_next_port(0); port > 0;
return NULL;
}
- if (a->argc != 4)
+ if (a->argc != 4) {
return CLI_SHOWUSAGE;
+ }
port = atoi(a->argv[3]);
return complete_ch(a);
}
- if (a->argc < 5)
+ if (a->argc < 5) {
return CLI_SHOWUSAGE;
+ }
if (strstr(a->argv[3], "calldeflect")) {
if (a->argc < 6) {
ast_verbose("Sending Calldeflection (%s) to %s\n", nr, channame);
tmp = get_chan_by_ast_name(channame);
if (!tmp) {
- ast_verbose("Sending CD with nr %s to %s failed: Channel does not exist.\n",nr, channame);
+ ast_verbose("Sending CD with nr %s to %s failed: Channel does not exist.\n", nr, channame);
return 0;
}
if (strlen(nr) >= 15) {
- ast_verbose("Sending CD with nr %s to %s failed: Number too long (up to 15 digits are allowed).\n",nr, channame);
+ ast_verbose("Sending CD with nr %s to %s failed: Number too long (up to 15 digits are allowed).\n", nr, channame);
return 0;
}
tmp->bc->fac_out.Function = Fac_CD;
ast_copy_string((char *)tmp->bc->fac_out.u.CDeflection.DeflectedToNumber, nr, sizeof(tmp->bc->fac_out.u.CDeflection.DeflectedToNumber));
misdn_lib_send_event(tmp->bc, EVENT_FACILITY);
- } else if (strstr(a->argv[3],"CFActivate")) {
+ } else if (strstr(a->argv[3], "CFActivate")) {
if (a->argc < 7) {
ast_verbose("CFActivate requires 2 args: 1.FromNumber, 2.ToNumber\n\n");
return 0;
ast_verbose("Sending CFActivate Port:(%d) FromNr. (%s) to Nr. (%s)\n", port, served_nr, nr);
bc->fac_out.Function = Fac_CFActivate;
- bc->fac_out.u.CFActivate.BasicService = 0; //All Services
- bc->fac_out.u.CFActivate.Procedure = 0; //Unconditional
+ bc->fac_out.u.CFActivate.BasicService = 0; /* All Services */
+ bc->fac_out.u.CFActivate.Procedure = 0; /* Unconditional */
ast_copy_string((char *)bc->fac_out.u.CFActivate.ServedUserNumber, served_nr, sizeof(bc->fac_out.u.CFActivate.ServedUserNumber));
ast_copy_string((char *)bc->fac_out.u.CFActivate.ForwardedToNumber, nr, sizeof(bc->fac_out.u.CFActivate.ForwardedToNumber));
misdn_lib_send_event(bc, EVENT_FACILITY);
- } else if (strstr(a->argv[3],"CFDeactivate")) {
+ } else if (strstr(a->argv[3], "CFDeactivate")) {
if (a->argc < 6) {
ast_verbose("CFActivate requires 1 arg: FromNumber\n\n");
return NULL;
}
- if (a->argc < 4 || a->argc > 5)
+ if (a->argc < 4 || a->argc > 5) {
return CLI_SHOWUSAGE;
+ }
port = atoi(a->argv[3]);
return complete_ch(a);
}
- if (a->argc != 5)
+ if (a->argc != 5) {
return CLI_SHOWUSAGE;
+ }
channame = a->argv[3];
msg = a->argv[4];
return complete_ch(a);
}
- if (a->argc != 4)
+ if (a->argc != 4) {
return CLI_SHOWUSAGE;
+ }
channame = a->argv[3];
return complete_ch(a);
}
- if (a->argc != 5)
+ if (a->argc != 5) {
return CLI_SHOWUSAGE;
+ }
channame = a->argv[3];
msg = a->argv[4];
return ast_complete_channels(a->line, a->word, a->pos, a->n, 3);
}
-static char *complete_debug_port (struct ast_cli_args *a)
+static char *complete_debug_port(struct ast_cli_args *a)
{
- if (a->n)
+ if (a->n) {
return NULL;
+ }
switch (a->pos) {
case 4:
- if (a->word[0] == 'p')
+ if (a->word[0] == 'p') {
return ast_strdup("port");
- else if (a->word[0] == 'o')
+ } else if (a->word[0] == 'o') {
return ast_strdup("only");
+ }
break;
case 6:
- if (a->word[0] == 'o')
+ if (a->word[0] == 'o') {
return ast_strdup("only");
+ }
break;
}
return NULL;
switch (a->pos) {
case 3:
- if ((!strncmp(a->word, "description", wordlen)) && (++which > a->n))
+ if ((!strncmp(a->word, "description", wordlen)) && (++which > a->n)) {
return ast_strdup("description");
- if ((!strncmp(a->word, "descriptions", wordlen)) && (++which > a->n))
+ }
+ if ((!strncmp(a->word, "descriptions", wordlen)) && (++which > a->n)) {
return ast_strdup("descriptions");
- if ((!strncmp(a->word, "0", wordlen)) && (++which > a->n))
+ }
+ if ((!strncmp(a->word, "0", wordlen)) && (++which > a->n)) {
return ast_strdup("0");
+ }
while ((port = misdn_cfg_get_next_port(port)) != -1) {
snprintf(buffer, sizeof(buffer), "%d", port);
if ((!strncmp(a->word, buffer, wordlen)) && (++which > a->n)) {
case 4:
if (strstr(a->line, "description ")) {
for (elem = MISDN_CFG_FIRST + 1; elem < MISDN_GEN_LAST; ++elem) {
- if ((elem == MISDN_CFG_LAST) || (elem == MISDN_GEN_FIRST))
+ if ((elem == MISDN_CFG_LAST) || (elem == MISDN_GEN_FIRST)) {
continue;
+ }
misdn_cfg_get_name(elem, buffer, sizeof(buffer));
if (!wordlen || !strncmp(a->word, buffer, wordlen)) {
- if (++which > a->n)
+ if (++which > a->n) {
return ast_strdup(buffer);
+ }
}
}
} else if (strstr(a->line, "descriptions ")) {
- if ((!wordlen || !strncmp(a->word, "general", wordlen)) && (++which > a->n))
+ if ((!wordlen || !strncmp(a->word, "general", wordlen)) && (++which > a->n)) {
return ast_strdup("general");
- if ((!wordlen || !strncmp(a->word, "ports", wordlen)) && (++which > a->n))
+ }
+ if ((!wordlen || !strncmp(a->word, "ports", wordlen)) && (++which > a->n)) {
return ast_strdup("ports");
+ }
}
break;
}
len = 1000;
}
- if ( threshold > len ) {
+ if (threshold > len) {
chan_misdn_log(0, bc->port, "config_jb: Jitterbuffer Threshold > Jitterbuffer setting to Jitterbuffer -1\n");
}
ch->jb = NULL;
}
- ch->jb=misdn_jb_init(len, threshold);
+ ch->jb = misdn_jb_init(len, threshold);
- if (!ch->jb )
+ if (!ch->jb) {
bc->nojitter = 1;
+ }
}
}
misdn_cfg_get(bc->port, MISDN_CFG_PIPELINE, bc->pipeline, sizeof(bc->pipeline));
- if (*bc->pipeline)
+ if (*bc->pipeline) {
return 0;
+ }
misdn_cfg_get(bc->port, MISDN_CFG_ECHOCANCEL, &ec, sizeof(ec));
- if (ec == 1)
+ if (ec == 1) {
ast_copy_string(bc->pipeline, "mg2ec", sizeof(bc->pipeline));
- else if (ec > 1)
+ } else if (ec > 1) {
snprintf(bc->pipeline, sizeof(bc->pipeline), "mg2ec(deftaps=%d)", ec);
+ }
return 0;
}
misdn_cfg_get(port, MISDN_CFG_TE_CHOOSE_CHANNEL, &(bc->te_choose_channel), sizeof(bc->te_choose_channel));
if (strstr(faxdetect, "outgoing") || strstr(faxdetect, "both")) {
- if (strstr(faxdetect, "nojump"))
- ch->faxdetect = 2;
- else
- ch->faxdetect = 1;
+ ch->faxdetect = strstr(faxdetect, "nojump") ? 2 : 1;
}
misdn_cfg_get(port, MISDN_CFG_CALLERID, callerid, sizeof(callerid));
- if ( ! ast_strlen_zero(callerid) ) {
+ if (!ast_strlen_zero(callerid)) {
chan_misdn_log(1, port, " --> * Setting Cid to %s\n", callerid);
ast_copy_string(bc->oad, callerid, sizeof(bc->oad));
}
char prefix[BUFFERSIZE + 1] = "";
if (strstr(faxdetect, "incoming") || strstr(faxdetect, "both")) {
- if (strstr(faxdetect, "nojump"))
- ch->faxdetect = 2;
- else
- ch->faxdetect = 1;
+ ch->faxdetect = (strstr(faxdetect, "nojump")) ? 2 : 1;
}
misdn_cfg_get(port, MISDN_CFG_CPNDIALPLAN, &bc->cpnnumplan, sizeof(bc->cpnnumplan));
ast_copy_string(bc->orig_dad, bc->dad, sizeof(bc->orig_dad));
}
- if ( ast_strlen_zero(bc->dad) && !ast_strlen_zero(bc->keypad)) {
+ if (ast_strlen_zero(bc->dad) && !ast_strlen_zero(bc->keypad)) {
ast_copy_string(bc->dad, bc->keypad, sizeof(bc->dad));
}
ast_set_callerid(ast, bc->oad, NULL, bc->oad);
if ( !ast_strlen_zero(bc->rad) ) {
- if (ast->cid.cid_rdnis)
+ if (ast->cid.cid_rdnis) {
ast_free(ast->cid.cid_rdnis);
+ }
ast->cid.cid_rdnis = ast_strdup(bc->rad);
}
if (ch->faxdetect || ch->ast_dsp) {
misdn_cfg_get(port, MISDN_CFG_FAXDETECT_TIMEOUT, &ch->faxdetect_timeout, sizeof(ch->faxdetect_timeout));
- if (!ch->dsp)
+ if (!ch->dsp) {
ch->dsp = ast_dsp_new();
+ }
if (ch->dsp) {
- if (ch->faxdetect)
- ast_dsp_set_features(ch->dsp, DSP_FEATURE_DIGIT_DETECT | DSP_FEATURE_FAX_DETECT);
- else
- ast_dsp_set_features(ch->dsp, DSP_FEATURE_DIGIT_DETECT );
+ ast_dsp_set_features(ch->dsp, DSP_FEATURE_DIGIT_DETECT | (ch->faxdetect ? DSP_FEATURE_FAX_DETECT : 0));
}
- if (!ch->trans)
+ if (!ch->trans) {
ch->trans = ast_translator_build_path(AST_FORMAT_SLINEAR, AST_FORMAT_ALAW);
+ }
}
/* AOCD initialization */
int bridging;
struct chan_list *ch = MISDN_ASTERISK_TECH_PVT(ast);
struct misdn_bchannel *newbc;
- char *opts = NULL, *ext, *tokb;
char *dest_cp = ast_strdupa(dest);
+ AST_DECLARE_APP_ARGS(args,
+ AST_APP_ARG(type);
+ AST_APP_ARG(ext);
+ AST_APP_ARG(opts);
+ );
- ext = strtok_r(dest_cp, "/", &tokb);
+ AST_NONSTANDARD_APP_ARGS(args, dest_cp, '/');
- if (ext) {
- ext = strtok_r(NULL, "/", &tokb);
- if (ext) {
- opts = strtok_r(NULL, "/", &tokb);
- } else {
- chan_misdn_log(0, 0, "misdn_call: No Extension given!\n");
- return -1;
- }
+ if (ast_strlen_zero(args.ext)) {
+ chan_misdn_log(0, 0, "misdn_call: No Extension given!\n");
+ return -1;
}
if (!ast) {
return -1;
}
- if (((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) || !dest ) {
+ if (((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) || !dest) {
ast_log(LOG_WARNING, " --> ! misdn_call called on %s, neither down nor reserved (or dest==NULL)\n", ast->name);
ast->hangupcause = AST_CAUSE_NORMAL_TEMPORARY_FAILURE;
ast_setstate(ast, AST_STATE_DOWN);
chan_misdn_log(3, port, " --> * adding2newbc ext %s\n", ast->exten);
if (ast->exten) {
- ast_copy_string(ast->exten, ext, sizeof(ast->exten));
- ast_copy_string(newbc->dad, ext, sizeof(newbc->dad));
+ ast_copy_string(ast->exten, args.ext, sizeof(ast->exten));
+ ast_copy_string(newbc->dad, args.ext, sizeof(newbc->dad));
}
ast_copy_string(newbc->rad, S_OR(ast->cid.cid_rdnis, ""), sizeof(newbc->rad));
/* update screening and presentation */
update_config(ch, ORG_AST);
- /* fill in some ies from channel vary*/
+ /* fill in some ies from channel vary */
import_ch(ast, newbc, ch);
/* Finally The Options Override Everything */
- if (opts)
- misdn_set_opt_exec(ast, opts);
- else
+ if (!ast_strlen_zero(args.opts)) {
+ misdn_set_opt_exec(ast, args.opts);
+ } else {
chan_misdn_log(2, port, "NO OPTS GIVEN\n");
+ }
/*check for bridging*/
misdn_cfg_get(0, MISDN_GEN_BRIDGING, &bridging, sizeof(bridging));
#endif
}
- r = misdn_lib_send_event( newbc, EVENT_SETUP );
+ r = misdn_lib_send_event(newbc, EVENT_SETUP);
/** we should have l3id after sending setup **/
ch->l3id = newbc->l3_id;
- if ( r == -ENOCHAN ) {
+ if (r == -ENOCHAN ) {
chan_misdn_log(0, port, " --> * Theres no Channel at the moment .. !\n");
chan_misdn_log(1, port, " --> * SEND: State Down pid:%d\n", newbc ? newbc->pid : -1);
ast->hangupcause = AST_CAUSE_NORMAL_CIRCUIT_CONGESTION;
ast_setstate(ast, AST_STATE_DOWN);
return -1;
}
-
+
chan_misdn_log(2, port, " --> * SEND: State Dialing pid:%d\n", newbc ? newbc->pid : 1);
ast_setstate(ast, AST_STATE_DIALING);
ast->hangupcause = AST_CAUSE_NORMAL_CLEARING;
-
- if (newbc->nt)
+
+ if (newbc->nt) {
stop_bc_tones(ch);
+ }
ch->state = MISDN_CALLING;
struct chan_list *p;
const char *tmp;
- if (!ast || !(p = MISDN_ASTERISK_TECH_PVT(ast))) return -1;
+ if (!ast || !(p = MISDN_ASTERISK_TECH_PVT(ast))) {
+ return -1;
+ }
chan_misdn_log(1, p ? (p->bc ? p->bc->port : 0) : 0, "* ANSWER:\n");
stop_indicate(p);
if ( ast_strlen_zero(p->bc->cad) ) {
- chan_misdn_log(2,p->bc->port," --> empty cad using dad\n");
+ chan_misdn_log(2, p->bc->port, " --> empty cad using dad\n");
ast_copy_string(p->bc->cad, p->bc->dad, sizeof(p->bc->cad));
}
- misdn_lib_send_event( p->bc, EVENT_CONNECT);
+ misdn_lib_send_event(p->bc, EVENT_CONNECT);
start_bc_tones(p);
return 0;
struct misdn_bchannel *bc;
char buf[2] = { digit, 0 };
- if (!ast || !(p = MISDN_ASTERISK_TECH_PVT(ast))) return -1;
+ if (!ast || !(p = MISDN_ASTERISK_TECH_PVT(ast))) {
+ return -1;
+ }
bc = p->bc;
chan_misdn_log(1, bc ? bc->port : 0, "* IND : Digit %c\n", digit);
switch (p->state ) {
case MISDN_CALLING:
- if (strlen(bc->infos_pending) < sizeof(bc->infos_pending) - 1)
+ if (strlen(bc->infos_pending) < sizeof(bc->infos_pending) - 1) {
strncat(bc->infos_pending, buf, sizeof(bc->infos_pending) - strlen(bc->infos_pending) - 1);
+ }
break;
case MISDN_CALLING_ACKNOWLEDGE:
ast_copy_string(bc->info_dad, buf, sizeof(bc->info_dad));
- if (strlen(bc->dad) < sizeof(bc->dad) - 1)
+ if (strlen(bc->dad) < sizeof(bc->dad) - 1) {
strncat(bc->dad, buf, sizeof(bc->dad) - strlen(bc->dad) - 1);
+ }
ast_copy_string(p->ast->exten, bc->dad, sizeof(p->ast->exten));
- misdn_lib_send_event( bc, EVENT_INFORMATION);
+ misdn_lib_send_event(bc, EVENT_INFORMATION);
break;
- default:
- /* Do not send Digits in CONNECTED State, when
- * the other side is too mISDN. */
- if (p->other_ch )
- return 0;
+ default:
+ /* Do not send Digits in CONNECTED State, when
+ * the other side is too mISDN. */
+ if (p->other_ch) {
+ return 0;
+ }
- if ( bc->send_dtmf )
- send_digit_to_chan(p,digit);
+ if (bc->send_dtmf) {
+ send_digit_to_chan(p, digit);
+ }
break;
}
{
struct chan_list *p;
- if (!ast || ! (p=MISDN_ASTERISK_TECH_PVT(ast) )) return -1;
+ if (!ast || !(p = MISDN_ASTERISK_TECH_PVT(ast))) {
+ return -1;
+ }
chan_misdn_log(1, p->bc ? p->bc->port : 0, "* IND: Got Fixup State:%s L3id:%x\n", misdn_get_ch_state(p), p->l3id);
chan_misdn_log(3, p->bc->port, " --> * SEND: State Ring pid:%d\n", p->bc ? p->bc->pid : -1);
ast_setstate(ast, AST_STATE_RING);
- if (!p->bc->nt && (p->originator == ORG_MISDN) && !p->incoming_early_audio)
+ if (!p->bc->nt && (p->originator == ORG_MISDN) && !p->incoming_early_audio) {
chan_misdn_log(2, p->bc->port, " --> incoming_early_audio off\n");
- else
+ } else {
return -1;
+ }
}
break;
case AST_CONTROL_ANSWER:
stop_indicate(p);
- if (p->state == MISDN_CONNECTED)
+ if (p->state == MISDN_CONNECTED) {
start_bc_tones(p);
+ }
break;
case AST_CONTROL_HOLD:
ast_moh_start(ast, data, p->mohinterpret);
ast_debug(1, "misdn_hangup(%s)\n", ast->name);
- if (!ast || ! (p=MISDN_ASTERISK_TECH_PVT(ast) ) ) return -1;
+ if (!ast || !(p = MISDN_ASTERISK_TECH_PVT(ast))) {
+ return -1;
+ }
if (!p) {
chan_misdn_log(3, 0, "misdn_hangup called, without chan_list obj.\n");
if ((tmp = pbx_builtin_getvar_helper(ast, "MISDN_USERUSER"))) {
ast_log(LOG_NOTICE, "MISDN_USERUSER: %s\n", tmp);
strcpy(bc->uu, tmp);
- bc->uulen=strlen(bc->uu);
+ bc->uulen = strlen(bc->uu);
}
ast_channel_unlock(ast);
}
close(p->pipe[1]);
ast_free(p);
ast_mutex_unlock(&release_lock);
-
- if (bc)
+
+ if (bc) {
misdn_lib_release(bc);
-
+ }
+
return 0;
}
p->need_busy = 0;
- if (!p->bc->nt)
+ if (!p->bc->nt) {
stop_bc_tones(p);
+ }
bc->out_cause = ast->hangupcause ? ast->hangupcause : AST_CAUSE_NORMAL_CLEARING;
* */
ast_log(LOG_NOTICE, "release channel, in CALLING/INCOMING_SETUP state.. no other events happened\n");
release_chan(bc);
- misdn_lib_send_event( bc, EVENT_RELEASE_COMPLETE);
+ misdn_lib_send_event(bc, EVENT_RELEASE_COMPLETE);
break;
case MISDN_HOLDED:
case MISDN_DIALING:
hanguptone_indicate(p);
p->state = MISDN_CLEANING;
- if (bc->need_disconnect)
- misdn_lib_send_event( bc, EVENT_DISCONNECT);
+ if (bc->need_disconnect) {
+ misdn_lib_send_event(bc, EVENT_DISCONNECT);
+ }
break;
case MISDN_CALLING_ACKNOWLEDGE:
start_bc_tones(p);
hanguptone_indicate(p);
- if (bc->need_disconnect)
- misdn_lib_send_event( bc, EVENT_DISCONNECT);
+ if (bc->need_disconnect) {
+ misdn_lib_send_event(bc, EVENT_DISCONNECT);
+ }
break;
case MISDN_ALERTING:
case MISDN_PROGRESS:
case MISDN_PROCEEDING:
- if (p->originator != ORG_AST)
+ if (p->originator != ORG_AST) {
hanguptone_indicate(p);
+ }
/*p->state=MISDN_CLEANING;*/
- if (bc->need_disconnect)
- misdn_lib_send_event( bc, EVENT_DISCONNECT);
+ if (bc->need_disconnect) {
+ misdn_lib_send_event(bc, EVENT_DISCONNECT);
+ }
break;
case MISDN_CONNECTED:
case MISDN_PRECONNECTED:
hanguptone_indicate(p);
p->bc->progress_indicator = INFO_PI_INBAND_AVAILABLE;
}
- if (bc->need_disconnect)
- misdn_lib_send_event( bc, EVENT_DISCONNECT);
+ if (bc->need_disconnect) {
+ misdn_lib_send_event(bc, EVENT_DISCONNECT);
+ }
/*p->state=MISDN_CLEANING;*/
break;
case MISDN_DISCONNECTED:
- if (bc->need_release)
- misdn_lib_send_event( bc, EVENT_RELEASE);
+ if (bc->need_release) {
+ misdn_lib_send_event(bc, EVENT_RELEASE);
+ }
p->state = MISDN_CLEANING; /* MISDN_HUNGUP_FROM_AST; */
break;
chan_misdn_log(1, bc->port, " --> out_cause %d\n", bc->out_cause);
bc->out_cause = -1;
- if (bc->need_release)
+ if (bc->need_release) {
misdn_lib_send_event(bc, EVENT_RELEASE);
+ }
p->state = MISDN_CLEANING;
break;
default:
if (bc->nt) {
bc->out_cause = -1;
- if (bc->need_release)
+ if (bc->need_release) {
misdn_lib_send_event(bc, EVENT_RELEASE);
+ }
p->state = MISDN_CLEANING;
} else {
- if (bc->need_disconnect)
+ if (bc->need_disconnect) {
misdn_lib_send_event(bc, EVENT_DISCONNECT);
+ }
}
}
ast_verb(3, "Redirecting %s to fax extension (context:%s)\n", ast->name, context);
/* Save the DID/DNIS when we transfer the fax call to a "fax" extension */
pbx_builtin_setvar_helper(ast,"FAXEXTEN",ast->exten);
- if (ast_async_goto(ast, context, "fax", 1))
+ if (ast_async_goto(ast, context, "fax", 1)) {
ast_log(LOG_WARNING, "Failed to async goto '%s' into fax of '%s'\n", ast->name, context);
- } else
+ }
+ } else {
ast_log(LOG_NOTICE, "Fax detected, but no fax extension ctx:%s exten:%s\n", context, ast->exten);
+ }
} else {
ast_debug(1, "Already in a fax extension, not redirecting\n");
}
{
struct chan_list *tmp;
fd_set rrfs;
- struct timeval tv;
+ struct timeval tv = { 0, 20000 };
int len, t;
if (!ast) {
return NULL;
}
- tv.tv_sec=0;
- tv.tv_usec=20000;
-
FD_ZERO(&rrfs);
- FD_SET(tmp->pipe[0],&rrfs);
+ FD_SET(tmp->pipe[0], &rrfs);
- t=select(FD_SETSIZE,&rrfs,NULL, NULL,&tv);
-
- if (!t) {
+ if (!(t = select(FD_SETSIZE, &rrfs, NULL, NULL, &tv))) {
chan_misdn_log(3, tmp->bc->port, "read Select Timed out\n");
- len=160;
+ len = 160;
}
- if (t<0) {
- chan_misdn_log(-1, tmp->bc->port, "Select Error (err=%s)\n",strerror(errno));
+ if (t < 0) {
+ chan_misdn_log(-1, tmp->bc->port, "Select Error (err=%s)\n", strerror(errno));
return NULL;
}
- if (FD_ISSET(tmp->pipe[0],&rrfs)) {
- len=read(tmp->pipe[0],tmp->ast_rd_buf,sizeof(tmp->ast_rd_buf));
+ if (FD_ISSET(tmp->pipe[0], &rrfs)) {
+ len = read(tmp->pipe[0], tmp->ast_rd_buf, sizeof(tmp->ast_rd_buf));
- if (len<=0) {
+ if (len <= 0) {
/* we hangup here, since our pipe is closed */
- chan_misdn_log(2,tmp->bc->port,"misdn_read: Pipe closed, hanging up\n");
+ chan_misdn_log(2, tmp->bc->port, "misdn_read: Pipe closed, hanging up\n");
return NULL;
}
tmp->frame.samples = len;
tmp->frame.mallocd = 0;
tmp->frame.offset = 0;
- tmp->frame.delivery = ast_tv(0,0);
+ tmp->frame.delivery = ast_tv(0, 0);
tmp->frame.src = NULL;
tmp->frame.data.ptr = tmp->ast_rd_buf;
return process_ast_dsp(tmp, &tmp->frame);
}
} else {
- if (tmp->ast_dsp)
+ if (tmp->ast_dsp) {
return process_ast_dsp(tmp, &tmp->frame);
- else
+ } else {
return &tmp->frame;
+ }
}
}
struct chan_list *ch;
int i = 0;
- if (!ast || ! (ch = MISDN_ASTERISK_TECH_PVT(ast)) ) return -1;
+ if (!ast || !(ch = MISDN_ASTERISK_TECH_PVT(ast))) {
+ return -1;
+ }
if (ch->state == MISDN_HOLDED) {
chan_misdn_log(7, 0, "misdn_write: Returning because holded\n");
}
if (!(frame->subclass & prefformat)) {
-
chan_misdn_log(-1, ch->bc->port, "Got Unsupported Frame with Format:%d\n", frame->subclass);
return 0;
}
return -1;
}
- if ( ! ch->bc->addr ) {
+ if (!ch->bc->addr) {
chan_misdn_log(8, ch->bc->port, "misdn_write: no addr for bc dropping:%d\n", frame->samples);
return 0;
}
ast_debug(1, "write2mISDN %p %d bytes: ", p, frame->samples);
- for (i = 0; i < max; i++)
- ast_debug(1, "%2.2x ", ((char*) frame->data.ptr)[i]);
+ for (i = 0; i < max; i++) {
+ ast_debug(1, "%2.2x ", ((char *) frame->data.ptr)[i]);
+ }
}
#endif
case BCHAN_BRIDGED:
break;
default:
- if (!ch->dropped_frame_cnt)
+ if (!ch->dropped_frame_cnt) {
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) {
+ if (++ch->dropped_frame_cnt > 100) {
ch->dropped_frame_cnt = 0;
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);
}
}
chan_misdn_log(9, ch->bc->port, "Sending :%d bytes to MISDN\n", frame->samples);
- if ( !ch->bc->nojitter && misdn_cap_is_speech(ch->bc->capability) ) {
+ if (!ch->bc->nojitter && misdn_cap_is_speech(ch->bc->capability)) {
/* Buffered Transmit (triggered by read from isdn side)*/
if (misdn_jb_fill(ch->jb, frame->data.ptr, frame->samples) < 0) {
- if (ch->bc->active)
+ if (ch->bc->active) {
cb_log(0, ch->bc->port, "Misdn Jitterbuffer Overflow.\n");
+ }
}
} else {
carr[0] = c0;
carr[1] = c1;
- if (!(ch1 && ch2))
+ if (!(ch1 && ch2)) {
return -1;
+ }
misdn_cfg_get(ch1->bc->port, MISDN_CFG_BRIDGING, &p1_b, sizeof(p1_b));
misdn_cfg_get(ch2->bc->port, MISDN_CFG_BRIDGING, &p2_b, sizeof(p2_b));
chan_misdn_log(1, ch1->bc->port, "* Making Native Bridge between %s and %s\n", ch1->bc->oad, ch2->bc->oad);
- if (! (flags & AST_BRIDGE_DTMF_CHANNEL_0) )
+ if (! (flags & AST_BRIDGE_DTMF_CHANNEL_0) ) {
ch1->ignore_dtmf = 1;
+ }
- if (! (flags & AST_BRIDGE_DTMF_CHANNEL_1) )
+ if (! (flags & AST_BRIDGE_DTMF_CHANNEL_1) ) {
ch2->ignore_dtmf = 1;
+ }
for (;/*ever*/;) {
to = -1;
}
#endif
- if (who == c0) {
- ast_write(c1, f);
- }
- else {
- ast_write(c0, f);
- }
+ ast_write(who == c0 ? c1 : c0, f);
}
chan_misdn_log(1, ch1->bc->port, "I SEND: Splitting conference with Number:%d\n", ch1->bc->pid + 1);
static int stop_bc_tones(struct chan_list *cl)
{
- if (!cl) return -1;
+ if (!cl) {
+ return -1;
+ }
cl->notxtone = 1;
cl->norxtone = 1;
{
struct chan_list *cl;
- cl = ast_calloc(1, sizeof(*cl));
- if (!cl) {
+ if (!(cl = ast_calloc(1, sizeof(*cl)))) {
chan_misdn_log(-1, 0, "misdn_request: malloc failed!");
return NULL;
}
for (port = misdn_cfg_get_next_port_spin(rr->port); port > 0 && port != port_start;
port = misdn_cfg_get_next_port_spin(port)) {
- if (!port_start)
+ if (!port_start) {
port_start = port;
+ }
- if (port >= port_start)
+ if (port >= port_start) {
next_chan = 1;
+ }
if (port <= port_start && next_chan) {
int maxbchans=misdn_lib_get_maxchans(port);
misdn_cfg_get(port, MISDN_CFG_PMP_L1_CHECK, &check, sizeof(check));
port_up = misdn_lib_port_up(port, check);
- if (check && !port_up)
+ if (check && !port_up) {
chan_misdn_log(1, port, "L1 is not Up on this Port\n");
+ }
if (check && port_up < 0) {
ast_log(LOG_WARNING, "This port (%d) is blocked\n", port);
newbc = misdn_lib_get_free_bc(port, robin_channel, 0, 0);
if (newbc) {
chan_misdn_log(4, port, " Success! Found port:%d channel:%d\n", newbc->port, newbc->channel);
- if (port_up)
+ if (port_up) {
chan_misdn_log(4, port, "portup:%d\n", port_up);
+ }
rr->port = newbc->port;
rr->channel = newbc->channel;
break;
chan_misdn_log(4, port, "portup:%d\n", port_up);
if (port_up > 0) {
- newbc = misdn_lib_get_free_bc(port, 0, 0, dec);
- if (newbc)
+ if ((newbc = misdn_lib_get_free_bc(port, 0, 0, dec))) {
break;
+ }
}
}
}
}
} else {
/* 'Normal' Port dial * Port dial */
- if (channel)
+ if (channel) {
chan_misdn_log(1, port, " --> preselected_channel: %d\n", channel);
+ }
newbc = misdn_lib_get_free_bc(port, channel, 0, dec);
if (!newbc) {
tmp = misdn_new(cl, AST_STATE_RESERVED, ext, NULL, format, port, channel);
if (!tmp) {
- ast_log(LOG_ERROR,"Could not create Asterisk object\n");
+ ast_log(LOG_ERROR, "Could not create Asterisk object\n");
return NULL;
}
- cl->ast=tmp;
+ cl->ast = tmp;
/* register chan in local list */
- cl_queue_chan(&cl_te, cl) ;
+ cl_queue_chan(&cl_te, cl);
/* fill in the config into the objects */
read_config(cl, ORG_AST);
.indicate = misdn_indication,
.fixup = misdn_fixup,
.send_text = misdn_send_text,
- .properties = 0
+ .properties = 0,
};
static struct ast_channel_tech misdn_tech_wo_bridge = {
.indicate = misdn_indication,
.fixup = misdn_fixup,
.send_text = misdn_send_text,
- .properties = 0
+ .properties = 0,
};
int tmp_port = misdn_cfg_get_next_port(0);
char newname[255];
for (; tmp_port > 0; tmp_port = misdn_cfg_get_next_port(tmp_port)) {
- if (tmp_port == port)
+ if (tmp_port == port) {
break;
+ }
chan_offset += misdn_lib_port_is_pri(tmp_port) ? 30 : 2;
}
- if (c < 0)
+ if (c < 0) {
c = 0;
+ }
snprintf(newname, sizeof(newname), "%s/%d-", misdn_type, chan_offset + c);
if (strncmp(tmp->name, newname, strlen(newname))) {
int bridging;
for (; tmp_port > 0; tmp_port = misdn_cfg_get_next_port(tmp_port)) {
- if (tmp_port == port)
+ if (tmp_port == port) {
break;
+ }
chan_offset += misdn_lib_port_is_pri(tmp_port) ? 30 : 2;
}
- if (c < 0)
+ if (c < 0) {
c = 0;
+ }
if (callerid) {
ast_callerid_parse(callerid, &cid_name, &cid_num);
misdn_cfg_get(0, MISDN_GEN_BRIDGING, &bridging, sizeof(bridging));
- if (bridging)
- tmp->tech = &misdn_tech;
- else
- tmp->tech = &misdn_tech_wo_bridge;
+ tmp->tech = bridging ? &misdn_tech : &misdn_tech_wo_bridge;
tmp->writeformat = format;
tmp->readformat = format;
- tmp->priority=1;
+ tmp->priority = 1;
- if (exten)
+ if (exten) {
ast_copy_string(tmp->exten, exten, sizeof(tmp->exten));
- else
+ } else {
chan_misdn_log(1, 0, "misdn_new: no exten given.\n");
+ }
- if (callerid)
+ if (callerid) {
/* Don't use ast_set_callerid() here because it will
* generate a needless NewCallerID event */
tmp->cid.cid_ani = ast_strdup(cid_num);
+ }
- if (pipe(chlist->pipe) < 0)
+ if (pipe(chlist->pipe) < 0) {
ast_log(LOG_ERROR, "Pipe failed\n");
+ }
ast_channel_set_fd(tmp, 0, chlist->pipe[0]);
- if (state == AST_STATE_RING)
- tmp->rings = 1;
- else
- tmp->rings = 0;
-
+ tmp->rings = (state == AST_STATE_RING) ? 1 : 0;
+
ast_jb_configure(tmp, misdn_get_global_jbconf());
} else {
chan_misdn_log(-1, 0, "Unable to allocate channel structure\n");
{
struct chan_list *help = list;
for (; help; help = help->next) {
- if (help->bc == bc) return help;
+ if (help->bc == bc) {
+ return help;
+ }
}
chan_misdn_log(6, bc->port, "$$$ find_chan: No channel found for oad:%s dad:%s\n", bc->oad, bc->dad);
{
struct chan_list *help = list;
for (; help; help = help->next) {
- if ( help->bc && (help->bc->pid == pid) ) return help;
+ if (help->bc && (help->bc->pid == pid)) {
+ return help;
+ }
}
chan_misdn_log(6, 0, "$$$ find_chan: No channel found for pid:%d\n", pid);
{
struct chan_list *help = list;
- if (bc->pri) return NULL;
+ if (bc->pri) {
+ return NULL;
+ }
chan_misdn_log(6, bc->port, "$$$ find_holded: channel:%d oad:%s dad:%s\n", bc->channel, bc->oad, bc->dad);
- for (;help; help = help->next) {
+ for (; help; help = help->next) {
chan_misdn_log(4, bc->port, "$$$ find_holded: --> holded:%d channel:%d\n", help->state == MISDN_HOLDED, help->hold_info.channel);
if ((help->state == MISDN_HOLDED) &&
- (help->hold_info.port == bc->port))
+ (help->hold_info.port == bc->port)) {
return help;
+ }
}
chan_misdn_log(6, bc->port, "$$$ find_chan: No channel found for oad:%s dad:%s\n", bc->oad, bc->dad);
struct chan_list *help = list;
for (; help; help = help->next) {
- if ( (help->state == MISDN_HOLDED) &&
- (help->l3id == l3_id)
- )
+ if ((help->state == MISDN_HOLDED) &&
+ (help->l3id == l3_id)) {
return help;
+ }
}
return NULL;
{
struct chan_list *help;
- if (chan->dsp)
+ if (chan->dsp) {
ast_dsp_free(chan->dsp);
- if (chan->trans)
+ }
+ if (chan->trans) {
ast_translator_free_path(chan->trans);
+ }
ast_mutex_lock(&cl_te_lock);
if (!*list) {
{
int ret = ast_pbx_start(ch->ast);
- if (ret >= 0)
- ch->need_hangup = 0;
- else
- ch->need_hangup = 1;
+ ch->need_hangup = (ret >= 0) ? 0 : 1;
return ret;
}
send_cause2ast(ch->ast, ch->bc, ch);
ch->need_hangup = 0;
ch->need_queue_hangup = 0;
- if (ch->ast)
+ if (ch->ast) {
ast_hangup(ch->ast);
+ }
return;
}
if (ch->ast) {
send_cause2ast(ch->ast, ch->bc, ch);
- if (ch->ast)
+ if (ch->ast) {
ast_queue_hangup_with_cause(ch->ast, ch->bc->cause);
+ }
cb_log(2, port, " --> queue_hangup\n");
} else {
cb_log(1, port, "Cannot hangup chan, no ast\n");
/** Isdn asks us to release channel, pendant to misdn_hangup **/
static void release_chan(struct misdn_bchannel *bc) {
struct ast_channel *ast = NULL;
+ struct chan_list *ch;
ast_mutex_lock(&release_lock);
- {
- struct chan_list *ch=find_chan_by_bc(cl_te, bc);
- if (!ch) {
- chan_misdn_log(1, bc->port, "release_chan: Ch not found!\n");
- ast_mutex_unlock(&release_lock);
- return;
- }
+ if (!(ch = find_chan_by_bc(cl_te, bc))) {
+ chan_misdn_log(1, bc->port, "release_chan: Ch not found!\n");
+ ast_mutex_unlock(&release_lock);
+ return;
+ }
- if (ch->ast) {
- ast = ch->ast;
- }
+ if (ch->ast) {
+ ast = ch->ast;
+ }
- chan_misdn_log(5, bc->port, "release_chan: bc with l3id: %x\n", bc->l3_id);
+ chan_misdn_log(5, bc->port, "release_chan: bc with l3id: %x\n", bc->l3_id);
- /*releasing jitterbuffer*/
- if (ch->jb ) {
- misdn_jb_destroy(ch->jb);
- ch->jb = NULL;
- } else {
- if (!bc->nojitter)
- chan_misdn_log(5, bc->port, "Jitterbuffer already destroyed.\n");
+ /* releasing jitterbuffer */
+ if (ch->jb ) {
+ misdn_jb_destroy(ch->jb);
+ ch->jb = NULL;
+ } else {
+ if (!bc->nojitter) {
+ chan_misdn_log(5, bc->port, "Jitterbuffer already destroyed.\n");
}
+ }
- if (ch->overlap_dial) {
- if (ch->overlap_dial_task != -1) {
- misdn_tasks_remove(ch->overlap_dial_task);
- ch->overlap_dial_task = -1;
- }
- ast_mutex_destroy(&ch->overlap_tv_lock);
+ if (ch->overlap_dial) {
+ if (ch->overlap_dial_task != -1) {
+ misdn_tasks_remove(ch->overlap_dial_task);
+ ch->overlap_dial_task = -1;
}
+ ast_mutex_destroy(&ch->overlap_tv_lock);
+ }
- if (ch->originator == ORG_AST) {
- misdn_out_calls[bc->port]--;
- } else {
- misdn_in_calls[bc->port]--;
- }
+ if (ch->originator == ORG_AST) {
+ misdn_out_calls[bc->port]--;
+ } else {
+ misdn_in_calls[bc->port]--;
+ }
- if (ch) {
- close(ch->pipe[0]);
- close(ch->pipe[1]);
+ if (ch) {
+ close(ch->pipe[0]);
+ close(ch->pipe[1]);
- if (ast && MISDN_ASTERISK_TECH_PVT(ast)) {
- chan_misdn_log(1, bc->port, "* RELEASING CHANNEL pid:%d ctx:%s dad:%s oad:%s state: %s\n", bc ? bc->pid : -1, ast->context, ast->exten, ast->cid.cid_num, misdn_get_ch_state(ch));
- chan_misdn_log(3, bc->port, " --> * State Down\n");
- MISDN_ASTERISK_TECH_PVT(ast) = NULL;
+ if (ast && MISDN_ASTERISK_TECH_PVT(ast)) {
+ chan_misdn_log(1, bc->port, "* RELEASING CHANNEL pid:%d ctx:%s dad:%s oad:%s state: %s\n", bc ? bc->pid : -1, ast->context, ast->exten, ast->cid.cid_num, misdn_get_ch_state(ch));
+ chan_misdn_log(3, bc->port, " --> * State Down\n");
+ MISDN_ASTERISK_TECH_PVT(ast) = NULL;
- if (ast->_state != AST_STATE_RESERVED) {
- chan_misdn_log(3, bc->port, " --> Setting AST State to down\n");
- ast_setstate(ast, AST_STATE_DOWN);
- }
+ if (ast->_state != AST_STATE_RESERVED) {
+ chan_misdn_log(3, bc->port, " --> Setting AST State to down\n");
+ ast_setstate(ast, AST_STATE_DOWN);
}
+ }
- ch->state = MISDN_CLEANING;
- cl_dequeue_chan(&cl_te, ch);
+ ch->state = MISDN_CLEANING;
+ cl_dequeue_chan(&cl_te, ch);
- ast_free(ch);
- } else {
- /* chan is already cleaned, so exiting */
- }
+ ast_free(ch);
+ } else {
+ /* chan is already cleaned, so exiting */
}
ast_mutex_unlock(&release_lock);
/*** release end **/
ast_moh_stop(ast_bridged_channel(holded_chan->ast));
- holded_chan->state=MISDN_CONNECTED;
+ holded_chan->state = MISDN_CONNECTED;
/* misdn_lib_transfer(holded_chan->bc); */
ast_channel_masquerade(holded_chan->ast, ast_bridged_channel(tmp_ch->ast));
}
hangup_chan(ch);
hanguptone_indicate(ch);
- if (bc->nt)
- misdn_lib_send_event(bc, EVENT_RELEASE_COMPLETE );
- else
- misdn_lib_send_event(bc, EVENT_DISCONNECT );
+ misdn_lib_send_event(bc, bc->nt ? EVENT_RELEASE_COMPLETE : EVENT_DISCONNECT);
}
chan_misdn_log(3, bc->port, " --> IMPORT_PID: importing pid:%s\n", tmp);
if (ch->other_pid > 0) {
ch->other_ch = find_chan_by_pid(cl_te, ch->other_pid);
- if (ch->other_ch)
+ if (ch->other_ch) {
ch->other_ch->other_ch = ch;
+ }
}
}
pbx_builtin_setvar_helper(chan, "MISDN_USERUSER", bc->uu);
}
- if (!ast_strlen_zero(bc->keypad))
+ if (!ast_strlen_zero(bc->keypad)) {
pbx_builtin_setvar_helper(chan, "MISDN_KEYPAD", bc->keypad);
+ }
}
int add_in_calls(int port)
if (bc->nt) {
hanguptone_indicate(ch);
misdn_lib_send_event(bc, EVENT_RELEASE_COMPLETE);
- } else
+ } else {
misdn_lib_send_event(bc, EVENT_RELEASE);
+ }
}
}
static void wait_for_digits(struct chan_list *ch, struct misdn_bchannel *bc, struct ast_channel *chan) {
- ch->state=MISDN_WAITING4DIGS;
+ ch->state = MISDN_WAITING4DIGS;
misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE );
- if (bc->nt && !bc->dad[0])
+ if (bc->nt && !bc->dad[0]) {
dialtone_indicate(ch);
+ }
}
if (event != EVENT_BCHAN_DATA && event != EVENT_TONE_GENERATE) { /* Debug Only Non-Bchan */
int debuglevel = 1;
- if ( event == EVENT_CLEANUP && !user_data)
+ if ( event == EVENT_CLEANUP && !user_data) {
debuglevel = 5;
+ }
chan_misdn_log(debuglevel, bc->port, "I IND :%s oad:%s dad:%s pid:%d state:%s\n", manager_isdn_get_info(event), bc->oad, bc->dad, bc->pid, ch ? misdn_get_ch_state(ch) : "none");
if (debuglevel == 1) {
case EVENT_RELEASE_COMPLETE:
case EVENT_CLEANUP:
case EVENT_TIMEOUT:
- if (!ch->ast)
+ if (!ch->ast) {
chan_misdn_log(3, bc->port, "ast_hangup already called, so we have no ast ptr anymore in event(%s)\n", manager_isdn_get_info(event));
+ }
break;
default:
if (!ch->ast || !MISDN_ASTERISK_PVT(ch->ast) || !MISDN_ASTERISK_TECH_PVT(ch->ast)) {
- if (event != EVENT_BCHAN_DATA)
+ if (event != EVENT_BCHAN_DATA) {
ast_log(LOG_NOTICE, "No Ast or No private Pointer in Event (%d:%s)\n", event, manager_isdn_get_info(event));
+ }
return -1;
}
}
break;
}
- if (bc)
+ if (bc) {
ch->bc = (struct misdn_bchannel *)user_data;
+ }
break;
case EVENT_DTMF_TONE:
break;
case EVENT_INFORMATION:
- {
- if ( ch->state != MISDN_CONNECTED )
+ if (ch->state != MISDN_CONNECTED) {
stop_indicate(ch);
+ }
- if (!ch->ast)
+ if (!ch->ast) {
break;
+ }
if (ch->state == MISDN_WAITING4DIGS ) {
/* Ok, incomplete Setup, waiting till extension exists */
"\tMaybe you want to add an 'i' extension to catch this case.\n",
bc->port);
- if (bc->nt)
+ if (bc->nt) {
hanguptone_indicate(ch);
+ }
ch->state = MISDN_EXTCANTMATCH;
bc->out_cause = AST_CAUSE_UNALLOCATED;
}
if (ast_exists_extension(ch->ast, ch->context, bc->dad, 1, bc->oad)) {
-
ch->state = MISDN_DIALING;
start_pbx(ch, bc, ch->ast);
}
ast_queue_frame(ch->ast, &fr);
}
}
- }
break;
case EVENT_SETUP:
{
}
chan_misdn_log(5, bc->port, "CONTEXT:%s\n", ch->context);
- if(!ast_canmatch_extension(ch->ast, ch->context, bc->dad, 1, bc->oad)) {
+ if (!ast_canmatch_extension(ch->ast, ch->context, bc->dad, 1, bc->oad)) {
if (ast_exists_extension(ch->ast, ch->context, "i", 1, bc->oad)) {
ast_log(LOG_WARNING, "Extension can never match, So jumping to 'i' extension. port(%d)\n", bc->port);
strcpy(ch->ast->exten, "i");
ast_log(LOG_WARNING, "Extension can never match, so disconnecting on port(%d).\n"
"\tMaybe you want to add an 'i' extension to catch this case.\n",
bc->port);
- if (bc->nt)
+ if (bc->nt) {
hanguptone_indicate(ch);
+ }
ch->state = MISDN_EXTCANTMATCH;
bc->out_cause = AST_CAUSE_UNALLOCATED;
- if (bc->nt)
- misdn_lib_send_event(bc, EVENT_RELEASE_COMPLETE );
- else
- misdn_lib_send_event(bc, EVENT_RELEASE );
+ misdn_lib_send_event(bc, bc->nt ? EVENT_RELEASE_COMPLETE : EVENT_RELEASE);
break;
}
ast_mutex_unlock(&ch->overlap_tv_lock);
wait_for_digits(ch, bc, chan);
- if (ch->overlap_dial_task == -1)
+ if (ch->overlap_dial_task == -1) {
ch->overlap_dial_task =
misdn_tasks_add_variable(ch->overlap_dial, misdn_overlap_dial_task, ch);
-
+ }
break;
}
* If the extension exists let's just jump into it.
* */
if (ast_exists_extension(ch->ast, ch->context, bc->dad, 1, bc->oad)) {
- if (bc->need_more_infos)
- misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE );
- else
- misdn_lib_send_event(bc, EVENT_PROCEEDING);
-
+ misdn_lib_send_event(bc, bc->need_more_infos ? EVENT_SETUP_ACKNOWLEDGE : EVENT_PROCEEDING);
ch->state = MISDN_DIALING;
start_pbx(ch, bc, chan);
break;
}
}
- break;
+ break;
case EVENT_SETUP_ACKNOWLEDGE:
- {
ch->state = MISDN_CALLING_ACKNOWLEDGE;
if (bc->channel)
/* TX Pending Infos */
strncat(bc->dad, bc->infos_pending, sizeof(bc->dad) - strlen(bc->dad) - 1);
- if (!ch->ast)
+ if (!ch->ast) {
break;
+ }
ast_copy_string(ch->ast->exten, bc->dad, sizeof(ch->ast->exten));
ast_copy_string(bc->info_dad, bc->infos_pending, sizeof(bc->info_dad));
ast_copy_string(bc->infos_pending, "", sizeof(bc->infos_pending));
misdn_lib_send_event(bc, EVENT_INFORMATION);
}
- }
- break;
+ break;
case EVENT_PROCEEDING:
- {
if (misdn_cap_is_speech(bc->capability) &&
misdn_inband_avail(bc) ) {
start_bc_tones(ch);
ch->state = MISDN_PROCEEDING;
- if (!ch->ast)
+ if (!ch->ast) {
break;
+ }
ast_queue_control(ch->ast, AST_CONTROL_PROCEEDING);
- }
- break;
+ break;
case EVENT_PROGRESS:
- if (bc->channel)
+ if (bc->channel) {
update_name(ch->ast, bc->port, bc->channel);
+ }
if (!bc->nt ) {
- if ( misdn_cap_is_speech(bc->capability) &&
- misdn_inband_avail(bc)
- ) {
+ if (misdn_cap_is_speech(bc->capability) &&
+ misdn_inband_avail(bc)) {
start_bc_tones(ch);
}
ch->state = MISDN_PROGRESS;
- if (!ch->ast)
+ if (!ch->ast) {
break;
+ }
ast_queue_control(ch->ast, AST_CONTROL_PROGRESS);
}
break;
-
-
case EVENT_ALERTING:
- {
ch->state = MISDN_ALERTING;
- if (!ch->ast)
+ if (!ch->ast) {
break;
+ }
ast_queue_control(ch->ast, AST_CONTROL_RINGING);
ast_setstate(ch->ast, AST_STATE_RINGING);
/*tone_indicate(ch, TONE_FAR_ALERTING);*/
}
}
- }
- break;
+ break;
case EVENT_CONNECT:
- {
- struct ast_channel *bridged;
+ {
+ struct ast_channel *bridged;
- /*we answer when we've got our very new L3 ID from the NT stack */
- misdn_lib_send_event(bc, EVENT_CONNECT_ACKNOWLEDGE);
+ /*we answer when we've got our very new L3 ID from the NT stack */
+ misdn_lib_send_event(bc, EVENT_CONNECT_ACKNOWLEDGE);
- if (!ch->ast)
- break;
+ if (!ch->ast) {
+ break;
+ }
- bridged = ast_bridged_channel(ch->ast);
- stop_indicate(ch);
+ bridged = ast_bridged_channel(ch->ast);
+ stop_indicate(ch);
- if (bridged && !strcasecmp(bridged->tech->type, "mISDN")) {
- struct chan_list *bridged_ch = MISDN_ASTERISK_TECH_PVT(bridged);
+ if (bridged && !strcasecmp(bridged->tech->type, "mISDN")) {
+ struct chan_list *bridged_ch = MISDN_ASTERISK_TECH_PVT(bridged);
- chan_misdn_log(1, bc->port, " --> copying cpndialplan:%d and cad:%s to the A-Channel\n", bc->cpnnumplan, bc->cad);
- if (bridged_ch) {
- bridged_ch->bc->cpnnumplan = bc->cpnnumplan;
- ast_copy_string(bridged_ch->bc->cad, bc->cad, sizeof(bridged_ch->bc->cad));
+ chan_misdn_log(1, bc->port, " --> copying cpndialplan:%d and cad:%s to the A-Channel\n", bc->cpnnumplan, bc->cad);
+ if (bridged_ch) {
+ bridged_ch->bc->cpnnumplan = bc->cpnnumplan;
+ ast_copy_string(bridged_ch->bc->cad, bc->cad, sizeof(bridged_ch->bc->cad));
+ }
}
}
- }
- ch->l3id=bc->l3_id;
- ch->addr=bc->addr;
+ ch->l3id = bc->l3_id;
+ ch->addr = bc->addr;
- start_bc_tones(ch);
+ start_bc_tones(ch);
- ch->state = MISDN_CONNECTED;
+ ch->state = MISDN_CONNECTED;
- ast_queue_control(ch->ast, AST_CONTROL_ANSWER);
- break;
+ ast_queue_control(ch->ast, AST_CONTROL_ANSWER);
+ break;
case EVENT_CONNECT_ACKNOWLEDGE:
- {
ch->l3id = bc->l3_id;
ch->addr = bc->addr;
start_bc_tones(ch);
ch->state = MISDN_CONNECTED;
- }
- break;
+ break;
case EVENT_DISCONNECT:
- /*we might not have an ch->ast ptr here anymore*/
+ /* we might not have an ch->ast ptr here anymore */
if (ch) {
struct chan_list *holded_ch = find_holded(cl_te, bc);
if (ch->ast) {
ch->ast->hangupcause = bc->cause;
- if (bc->cause == AST_CAUSE_USER_BUSY)
+ if (bc->cause == AST_CAUSE_USER_BUSY) {
ast_queue_control(ch->ast, AST_CONTROL_BUSY);
+ }
}
ch->need_busy = 0;
break;
}
- /*Check for holded channel, to implement transfer*/
+ /* Check for holded channel, to implement transfer */
if (holded_ch && holded_ch != ch && ch->ast && ch->state == MISDN_CONNECTED) {
cb_log(1, bc->port, " --> found holded ch\n");
misdn_transfer_bc(ch, holded_ch) ;
#endif
}
bc->out_cause = -1;
- if (bc->need_release)
+ if (bc->need_release) {
misdn_lib_send_event(bc, EVENT_RELEASE);
+ }
break;
-
case EVENT_RELEASE:
- {
- bc->need_disconnect = 0;
- bc->need_release = 0;
+ bc->need_disconnect = 0;
+ bc->need_release = 0;
- hangup_chan(ch);
- release_chan(bc);
- }
+ hangup_chan(ch);
+ release_chan(bc);
break;
case EVENT_RELEASE_COMPLETE:
- {
bc->need_disconnect = 0;
bc->need_release = 0;
bc->need_release_complete = 0;
ch->state = MISDN_CLEANING;
release_chan(bc);
- }
- break;
+ break;
case EVENT_BCHAN_ERROR:
case EVENT_CLEANUP:
- {
stop_bc_tones(ch);
switch (ch->state) {
hangup_chan(ch);
release_chan(bc);
- }
- break;
-
+ break;
case EVENT_TONE_GENERATE:
{
int tone_len = bc->tone_cnt;
chan_misdn_log(9, bc->port, "TONE_GEN: len:%d\n", tone_len);
- if (!ast)
+ if (!ast) {
break;
+ }
- if (!ast->generator)
+ if (!ast->generator) {
break;
+ }
tmp = ast->generatordata;
ast->generatordata = NULL;
bc->tone_cnt = 0;
}
}
- break;
+ break;
case EVENT_BCHAN_DATA:
- {
- if (ch->bc->AOCD_need_export)
+ if (ch->bc->AOCD_need_export) {
export_aoc_vars(ch->originator, ch->ast, ch->bc);
+ }
if (!misdn_cap_is_speech(ch->bc->capability)) {
struct ast_frame frame;
/*In Data Modes we queue frames*/
- frame.frametype = AST_FRAME_VOICE; /*we have no data frames yet*/
+ frame.frametype = AST_FRAME_VOICE; /* we have no data frames yet */
frame.subclass = AST_FORMAT_ALAW;
frame.datalen = bc->bframe_len;
frame.samples = bc->bframe_len;
frame.mallocd = 0;
frame.offset = 0;
- frame.delivery = ast_tv(0,0);
+ frame.delivery = ast_tv(0, 0);
frame.src = NULL;
frame.data.ptr = bc->bframe;
chan_misdn_log(1, bc->port, "Write Pipe full!\n");
}
}
- }
- break;
+ break;
case EVENT_TIMEOUT:
- {
- if (ch && bc)
+ if (ch && bc) {
chan_misdn_log(1, bc->port, "--> state: %s\n", misdn_get_ch_state(ch));
+ }
switch (ch->state) {
case MISDN_DIALING:
case MISDN_PROGRESS:
- if (bc->nt && !ch->nttimeout)
+ if (bc->nt && !ch->nttimeout) {
break;
-
+ }
+ /* fall-through */
case MISDN_CALLING:
case MISDN_ALERTING:
case MISDN_PROCEEDING:
bc->progress_indicator = INFO_PI_INBAND_AVAILABLE;
hanguptone_indicate(ch);
}
-
+
bc->out_cause = AST_CAUSE_UNALLOCATED;
misdn_lib_send_event(bc, EVENT_DISCONNECT);
break;
-
case MISDN_WAITING4DIGS:
if (bc->nt) {
bc->progress_indicator = INFO_PI_INBAND_AVAILABLE;
bc->out_cause = AST_CAUSE_NORMAL_CLEARING;
misdn_lib_send_event(bc, EVENT_RELEASE);
}
-
break;
-
case MISDN_CLEANING:
- chan_misdn_log(1,bc->port," --> in state cleaning .. so ignoring, 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:
- misdn_lib_send_event(bc,EVENT_RELEASE_COMPLETE);
+ misdn_lib_send_event(bc, EVENT_RELEASE_COMPLETE);
}
- }
- break;
+ break;
-
/****************************/
/** Supplementary Services **/
/****************************/
misdn_lib_send_event(bc, EVENT_RETRIEVE_REJECT);
}
}
- break;
-
+ break;
case EVENT_HOLD:
{
int hold_allowed;
misdn_cfg_get(bc->port, MISDN_CFG_HOLD_ALLOWED, &hold_allowed, sizeof(hold_allowed));
if (!hold_allowed) {
-
chan_misdn_log(-1, bc->port, "Hold not allowed this port.\n");
misdn_lib_send_event(bc, EVENT_HOLD_REJECT);
break;
ch->bc = NULL;
ch->hold_info.port = bc->port;
ch->hold_info.channel = bc->channel;
-
} else {
misdn_lib_send_event(bc, EVENT_HOLD_REJECT);
chan_misdn_log(0, bc->port, "We aren't bridged to anybody\n");
}
}
- break;
-
+ break;
case EVENT_FACILITY:
print_facility(&(bc->fac_in), bc);
switch (bc->fac_in.Function) {
#ifdef HAVE_MISDN_FAC_RESULT
case Fac_RESULT:
- break;
+ break;
#endif
case Fac_CD:
if (ch) {
}
break;
-
case EVENT_RESTART:
-
if (!bc->dummy) {
stop_bc_tones(ch);
release_chan(bc);
}
break;
-
default:
chan_misdn_log(1, 0, "Got Unknown Event\n");
break;
misdn_tasks_destroy();
- if (!g_config_initialized)
+ if (!g_config_initialized) {
return 0;
+ }
ast_cli_unregister_multiple(chan_misdn_clis, sizeof(chan_misdn_clis) / sizeof(struct ast_cli_entry));
-
+
/* ast_unregister_application("misdn_crypt"); */
ast_unregister_application("misdn_set_opt");
ast_unregister_application("misdn_facility");
ast_unregister_application("misdn_check_l2l1");
-
+
ast_channel_unregister(&misdn_tech);
free_robin_list();
misdn_cfg_destroy();
misdn_lib_destroy();
- if (misdn_debug)
+ if (misdn_debug) {
ast_free(misdn_debug);
- if (misdn_debug_only)
+ }
+ if (misdn_debug_only) {
ast_free(misdn_debug_only);
+ }
ast_free(misdn_ports);
return 0;
misdn_debug_only = ast_calloc(max_ports + 1, sizeof(int));
misdn_cfg_get(0, MISDN_GEN_TRACEFILE, tempbuf, sizeof(tempbuf));
- if (!ast_strlen_zero(tempbuf))
+ if (!ast_strlen_zero(tempbuf)) {
tracing = 1;
+ }
misdn_in_calls = ast_malloc(sizeof(int) * (max_ports + 1));
misdn_out_calls = ast_malloc(sizeof(int) * (max_ports + 1));
misdn_cfg_update_ptp();
misdn_cfg_get_ports_string(ports);
- if (!ast_strlen_zero(ports))
+ if (!ast_strlen_zero(ports)) {
chan_misdn_log(0, 0, "Got: %s from get_ports\n", ports);
- if (misdn_lib_init(ports, &iface, NULL))
+ }
+ if (misdn_lib_init(ports, &iface, NULL)) {
chan_misdn_log(0, 0, "No te ports initialized\n");
+ }
misdn_cfg_get(0, MISDN_GEN_NTDEBUGFLAGS, &ntflags, sizeof(ntflags));
misdn_cfg_get(0, MISDN_GEN_NTDEBUGFILE, &ntfile, sizeof(ntfile));
static int misdn_facility_exec(struct ast_channel *chan, void *data)
{
struct chan_list *ch = MISDN_ASTERISK_TECH_PVT(chan);
- char *parse, *tok, *tokb;
+ char *parse;
+ AST_DECLARE_APP_ARGS(args,
+ AST_APP_ARG(facility_type);
+ AST_APP_ARG(arg)[99];
+ );
chan_misdn_log(0, 0, "TYPE: %s\n", chan->tech->type);
}
if (ast_strlen_zero((char *)data)) {
- ast_log(LOG_WARNING, "misdn_facility Requires arguments\n");
+ ast_log(LOG_WARNING, "misdn_facility requires arguments: facility_type[,<args>]\n");
return -1;
}
parse = ast_strdupa(data);
- tok = strtok_r(parse, "|", &tokb) ;
+ AST_STANDARD_APP_ARGS(args, parse);
- if (!tok) {
- ast_log(LOG_WARNING, "misdn_facility Requires arguments\n");
+ if (ast_strlen_zero(args.facility_type)) {
+ ast_log(LOG_WARNING, "misdn_facility requires arguments: facility_type[,<args>]\n");
return -1;
}
- if (!strcasecmp(tok, "calldeflect")) {
- tok = strtok_r(NULL, "|", &tokb) ;
-
- if (!tok) {
- ast_log(LOG_WARNING, "Facility: Call Defl Requires arguments\n");
+ if (!strcasecmp(args.facility_type, "calldeflect")) {
+ if (ast_strlen_zero(args.arg[0])) {
+ ast_log(LOG_WARNING, "Facility: Call Deflection requires an argument: Number\n");
}
- if (strlen(tok) >= sizeof(ch->bc->fac_out.u.CDeflection.DeflectedToNumber)) {
- ast_log(LOG_WARNING, "Facility: Number argument too long (up to 15 digits are allowed). Ignoring.\n");
- return 0;
+ if (strlen(args.arg[0]) >= sizeof(ch->bc->fac_out.u.CDeflection.DeflectedToNumber)) {
+ ast_log(LOG_WARNING, "Facility: Number argument too long (up to %d digits are allowed). Ignoring.\n", sizeof(ch->bc->fac_out.u.CDeflection.DeflectedToNumber));
+ return 0;
}
ch->bc->fac_out.Function = Fac_CD;
- ast_copy_string((char *)ch->bc->fac_out.u.CDeflection.DeflectedToNumber, tok, sizeof(ch->bc->fac_out.u.CDeflection.DeflectedToNumber));
+ ast_copy_string((char *)ch->bc->fac_out.u.CDeflection.DeflectedToNumber, args.arg[0], sizeof(ch->bc->fac_out.u.CDeflection.DeflectedToNumber));
misdn_lib_send_event(ch->bc, EVENT_FACILITY);
} else {
- chan_misdn_log(1, ch->bc->port, "Unknown Facility: %s\n", tok);
+ chan_misdn_log(1, ch->bc->port, "Unknown Facility: %s\n", args.facility_type);
}
return 0;
switch (tok[0]) {
case 'r' :
rxgain = atoi(++tok);
- if (rxgain < -8)
+ if (rxgain < -8) {
rxgain = -8;
- if (rxgain > 8)
+ }
+ if (rxgain > 8) {
rxgain = 8;
+ }
ch->bc->rxgain = rxgain;
chan_misdn_log(1, ch->bc->port, "SETOPT: Volume:%d\n", rxgain);
break;
case 't':
txgain = atoi(++tok);
- if (txgain < -8)
+ if (txgain < -8) {
txgain = -8;
- if (txgain > 8)
+ }
+ if (txgain > 8) {
txgain = 8;
+ }
ch->bc->txgain = txgain;
chan_misdn_log(1, ch->bc->port, "SETOPT: Volume:%d\n", txgain);
break;
case 'p':
chan_misdn_log(1, ch->bc->port, "SETOPT: callerpres: %s\n", &tok[1]);
/* CRICH: callingpres!!! */
- if (strstr(tok,"allowed")) {
+ if (strstr(tok, "allowed")) {
ch->bc->pres = 0;
} else if (strstr(tok, "restricted")) {
ch->bc->pres = 1;
}
}
- if (change_jitter)
+ if (change_jitter) {
config_jitterbuffer(ch);
+ }
if (ch->faxdetect || ch->ast_dsp) {
- if (!ch->dsp)
+ if (!ch->dsp) {
ch->dsp = ast_dsp_new();
- if (ch->dsp)
+ }
+ if (ch->dsp) {
ast_dsp_set_features(ch->dsp, DSP_FEATURE_DIGIT_DETECT | DSP_FEATURE_FAX_DETECT);
- if (!ch->trans)
+ }
+ if (!ch->trans) {
ch->trans = ast_translator_build_path(AST_FORMAT_SLINEAR, AST_FORMAT_ALAW);
+ }
}
if (ch->ast_dsp) {
return NULL;
}
- for (i = 0; i < size; i++)
+ for (i = 0; i < size; i++) {
jb->ok[i] = 0;
+ }
ast_mutex_init(&jb->mutexjb);
{
int i, j, rp, wp;
- if (!jb || ! data)
+ if (!jb || ! data) {
return 0;
+ }
ast_mutex_lock(&jb->mutexjb);
jb->ok[wp] = 1;
wp = (wp != jb->size - 1) ? wp + 1 : 0;
- if (wp == jb->rp)
+ if (wp == jb->rp) {
jb->state_full = 1;
+ }
}
- if (wp >= rp)
+ if (wp >= rp) {
jb->state_buffer = wp - rp;
- else
+ } else {
jb->state_buffer = jb->size - rp + wp;
+ }
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;
rp = wp;
- for (j = 0; j < jb->upper_threshold; j++)
+ for (j = 0; j < jb->upper_threshold; j++) {
rp = (rp != 0) ? rp - 1 : jb->size - 1;
+ }
jb->rp = rp;
jb->state_full = 0;
jb->state_empty = 1;
}
}
- if (wp >= rp)
+ if (wp >= rp) {
jb->state_buffer = wp - rp;
- else
+ } else {
jb->state_buffer = jb->size - rp + wp;
+ }
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
+ } else {
chan_misdn_log(9, 0, "misdn_jb_empty: Wait...requested:%d p:%p\n", len, jb);
+ }
ast_mutex_unlock(&jb->mutexjb);
vsnprintf(buf, sizeof(buf), tmpl, ap);
va_end(ap);
- if (level == -1)
+ if (level == -1) {
ast_log(LOG_WARNING, "%s", buf);
- else if (misdn_debug_only[port] ?
+ } else if (misdn_debug_only[port] ?
(level == 1 && misdn_debug[port]) || (level == misdn_debug[port])
: level <= misdn_debug[port]) {
FILE *fp = fopen(global_tracefile, "a+");
- p = strchr(tmp, '\n');
- if (p)
+ if ((p = strchr(tmp, '\n'))) {
*p = ':';
+ }
if (!fp) {
ast_console_puts("Error opening Tracefile: [ ");