summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
authorDamien Wedhorn <voip@facts.com.au>2013-01-06 21:37:59 +0000
committerDamien Wedhorn <voip@facts.com.au>2013-01-06 21:37:59 +0000
commit7d5345c9c0a26abc8462da0ef3029065d8793e23 (patch)
tree8cc18699161db0f4001d4076260c0fed1db442f0 /channels
parentf7950626623b2801402f4e37ad336ffca8f1e349 (diff)
Skinny blob cleanup
Cleanup of red blobs in chan_skinny and possible other small formatting issues. Review: https://reviewboard.asterisk.org/r/2262/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@378634 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_skinny.c1057
1 files changed, 528 insertions, 529 deletions
diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c
index e59a81d1d..4ca5fba44 100644
--- a/channels/chan_skinny.c
+++ b/channels/chan_skinny.c
@@ -1306,9 +1306,9 @@ struct skinny_subchannel {
char exten[AST_MAX_EXTENSION]; \
char context[AST_MAX_CONTEXT]; \
char language[MAX_LANGUAGE]; \
- char cid_num[AST_MAX_EXTENSION]; \
- char cid_name[AST_MAX_EXTENSION]; \
- char lastcallerid[AST_MAX_EXTENSION]; \
+ char cid_num[AST_MAX_EXTENSION]; \
+ char cid_name[AST_MAX_EXTENSION]; \
+ char lastcallerid[AST_MAX_EXTENSION]; \
int cfwdtype; \
char call_forward_all[AST_MAX_EXTENSION]; \
char call_forward_busy[AST_MAX_EXTENSION]; \
@@ -1366,15 +1366,15 @@ struct skinny_line {
static struct skinny_line_options{
SKINNY_LINE_OPTIONS
} default_line_struct = {
- .callwaiting = 1,
+ .callwaiting = 1,
.transfer = 1,
- .mwiblink = 0,
- .dnd = 0,
- .hidecallerid = 0,
+ .mwiblink = 0,
+ .dnd = 0,
+ .hidecallerid = 0,
.amaflags = 0,
- .instance = 0,
- .directmedia = 0,
- .nat = 0,
+ .instance = 0,
+ .directmedia = 0,
+ .nat = 0,
.getforward = 0,
.prune = 0,
};
@@ -1474,15 +1474,15 @@ static struct skinny_device_options {
SKINNY_DEVICE_OPTIONS
} default_device_struct = {
.transfer = 1,
- .earlyrtp = 1,
- .callwaiting = 1,
- .mwiblink = 0,
- .dnd = 0,
+ .earlyrtp = 1,
+ .callwaiting = 1,
+ .mwiblink = 0,
+ .dnd = 0,
.prune = 0,
.hookstate = SKINNY_ONHOOK,
};
static struct skinny_device_options *default_device = &default_device_struct;
-
+
static AST_LIST_HEAD_STATIC(devices, skinny_device);
struct skinnysession {
@@ -1534,7 +1534,7 @@ static struct ast_channel_tech skinny_tech = {
.fixup = skinny_fixup,
.send_digit_begin = skinny_senddigit_begin,
.send_digit_end = skinny_senddigit_end,
- .bridge = ast_rtp_instance_bridge,
+ .bridge = ast_rtp_instance_bridge,
};
static int skinny_extensionstate_cb(char *context, char *id, struct ast_state_cb_info *info, void *data);
@@ -1613,7 +1613,7 @@ static void *get_button_template(struct skinnysession *s, struct button_definiti
(btn++)->buttonDefinition = BT_NONE;
for (i = 0; i < 13; i++)
(btn++)->buttonDefinition = BT_SPEEDDIAL;
-
+
break;
case SKINNY_DEVICE_12SPPLUS:
case SKINNY_DEVICE_12SP:
@@ -1840,7 +1840,7 @@ static struct skinny_subline *find_subline_by_callid(struct skinny_device *d, in
{
struct skinny_subline *subline;
struct skinny_line *l;
-
+
AST_LIST_TRAVERSE(&d->lines, l, list){
AST_LIST_TRAVERSE(&l->sublines, subline, list){
if (subline->callid == callid) {
@@ -2052,7 +2052,7 @@ static void cleanup_stale_contexts(char *new, char *old)
} else if (strcmp(newcontext, oldcontext)) {
stalecontext = oldcontext;
}
-
+
}
if (stalecontext)
ast_context_destroy(ast_context_find(stalecontext), "Skinny");
@@ -2360,11 +2360,11 @@ static void send_callinfo(struct skinny_subchannel *sub)
if (!sub || !sub->owner || !sub->line || !sub->line->device) {
return;
}
-
+
ast = sub->owner;
l = sub->line;
d = l->device;
-
+
if (sub->calldirection == SKINNY_INCOMING) {
fromname = S_COR(ast_channel_connected(ast)->id.name.valid, ast_channel_connected(ast)->id.name.str, "");
fromnum = S_COR(ast_channel_connected(ast)->id.number.valid, ast_channel_connected(ast)->id.number.str, "");
@@ -2395,11 +2395,11 @@ static void push_callinfo(struct skinny_subline *subline, struct skinny_subchann
if (!sub || !sub->owner || !sub->line || !sub->line->device) {
return;
}
-
+
ast = sub->owner;
l = sub->line;
d = l->device;
-
+
if (sub->calldirection == SKINNY_INCOMING) {
fromname = S_COR(ast_channel_connected(ast)->id.name.valid, ast_channel_connected(ast)->id.name.str, "");
fromnum = S_COR(ast_channel_connected(ast)->id.number.valid, ast_channel_connected(ast)->id.number.str, "");
@@ -2917,10 +2917,10 @@ static void transmit_softkeytemplateres(struct skinny_device *d)
static void transmit_reset(struct skinny_device *d, int fullrestart)
{
struct skinny_req *req;
-
+
if (!(req = req_alloc(sizeof(struct reset_message), RESET_MESSAGE)))
return;
-
+
if (fullrestart)
req->data.reset.resetType = 2;
else
@@ -3152,7 +3152,7 @@ static void mwi_event_cb(const struct ast_event *event, void *userdata)
struct skinny_device *d = l->device;
struct skinny_line *l2;
int dev_msgs = 0;
-
+
if (!d || !d->session) {
return;
}
@@ -3242,7 +3242,7 @@ static int skinny_set_rtp_peer(struct ast_channel *c, struct ast_rtp_instance *r
struct sockaddr_in them = { 0, };
struct ast_sockaddr them_tmp;
struct ast_sockaddr us_tmp;
-
+
sub = ast_channel_tech_pvt(c);
if (ast_channel_state(c) != AST_STATE_UP)
@@ -3441,7 +3441,7 @@ static char *handle_skinny_reload(struct ast_cli_entry *e, int cmd, struct ast_c
case CLI_GENERATE:
return NULL;
}
-
+
if (a->argc != e->args)
return CLI_SHOWUSAGE;
@@ -3483,7 +3483,7 @@ static char *complete_skinny_show_line(const char *line, const char *word, int p
if (pos != 3)
return NULL;
-
+
AST_LIST_TRAVERSE(&devices, d, list) {
AST_LIST_TRAVERSE(&d->lines, l, list) {
if (!strncasecmp(word, l->name, wordlen) && ++which > state)
@@ -3521,7 +3521,7 @@ static char *handle_skinny_reset(struct ast_cli_entry *e, int cmd, struct ast_cl
if (a->argc == 4 && !strcasecmp(a->argv[3], "restart"))
fullrestart = 1;
-
+
transmit_reset(d, fullrestart);
}
}
@@ -3702,7 +3702,7 @@ static char *_skinny_show_devices(int fd, int *total, struct mansession *s, cons
if (total)
*total = total_devices;
-
+
return CLI_SUCCESS;
}
@@ -3797,7 +3797,7 @@ static char *_skinny_show_device(int type, int fd, struct mansession *s, const s
}
AST_LIST_TRAVERSE(&d->addons, sa, list) {
numaddons++;
- }
+ }
ast_cli(fd, "Addons: %d\n", numaddons);
AST_LIST_TRAVERSE(&d->addons, sa, list) {
ast_cli(fd, " %s\n", sa->type);
@@ -3908,7 +3908,7 @@ static char *_skinny_show_lines(int fd, int *total, struct mansession *s, const
}
if (!s) {
- ast_cli(fd, "Name Device Name Instance Label \n");
+ ast_cli(fd, "Name Device Name Instance Label \n");
ast_cli(fd, "-------------------- -------------------- -------- --------------------\n");
}
AST_LIST_LOCK(&lines);
@@ -4150,7 +4150,7 @@ static char *_skinny_show_line(int type, int fd, struct mansession *s, const str
}
}
}
-
+
AST_LIST_UNLOCK(&devices);
return CLI_SUCCESS;
}
@@ -4204,7 +4204,7 @@ static char *handle_skinny_show_settings(struct ast_cli_entry *e, int cmd, struc
return NULL;
case CLI_GENERATE:
return NULL;
- }
+ }
if (a->argc != 3)
return CLI_SHOWUSAGE;
@@ -4890,7 +4890,7 @@ static struct ast_channel *skinny_new(struct skinny_line *l, struct skinny_subli
} else {
sub->subline = NULL;
}
-
+
AST_LIST_INSERT_HEAD(&l->sub, sub, list);
//l->activesub = sub;
}
@@ -5125,7 +5125,7 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
}
sub->substate = SUBSTATE_CONNECTED;
l->activesub = sub;
- return;
+ return;
case SUBSTATE_HOLD:
if (sub->substate != SUBSTATE_CONNECTED) {
ast_log(LOG_WARNING, "Cannot set substate to SUBSTATE_HOLD from %s (on call-%d)\n", substate2str(sub->substate), sub->callid);
@@ -5138,7 +5138,7 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
transmit_callstate(d, l->instance, subline->callid, SKINNY_CALLREMOTEMULTILINE);
transmit_selectsoftkeys(d, l->instance, subline->callid, KEYDEF_SLACONNECTEDNOTACTIVE);
transmit_displaypromptstatus(d, "In Use", 0, l->instance, subline->callid);
-
+
sub->substate = SUBSTATE_HOLD;
ast_queue_control_data(sub->owner, AST_CONTROL_HOLD,
@@ -5195,7 +5195,7 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
transmit_callstate(d, l->instance, sub->callid, SKINNY_ONHOOK);
transmit_clearpromptmessage(d, l->instance, sub->callid);
transmit_ringer_mode(d, SKINNY_RING_OFF);
- transmit_definetimedate(d);
+ transmit_definetimedate(d);
transmit_lamp_indication(d, STIMULUS_LINE, l->instance, SKINNY_LAMP_OFF);
} else {
transmit_stop_tone(d, l->instance, sub->callid);
@@ -5252,9 +5252,9 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
ast_channel_exten_set(c, sub->exten);
ast_copy_string(l->lastnumberdialed, sub->exten, sizeof(l->lastnumberdialed));
}
-
+
sub->substate = SUBSTATE_DIALING;
-
+
if (ast_pthread_create(&t, NULL, skinny_newcall, c)) {
ast_log(LOG_WARNING, "Unable to create new call thread: %s\n", strerror(errno));
ast_hangup(c);
@@ -5265,7 +5265,7 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
ast_log(LOG_WARNING, "Cannot set substate to SUBSTATE_RINGOUT from %s (on call-%d)\n", substate2str(sub->substate), sub->callid);
return;
}
-
+
if (!d->earlyrtp) {
transmit_start_tone(d, SKINNY_ALERT, l->instance, sub->callid);
}
@@ -5287,7 +5287,7 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
if (d->hookstate == SKINNY_ONHOOK) {
l->activesub = sub;
}
-
+
if (sub->substate != SUBSTATE_RINGIN || sub->substate != SUBSTATE_CALLWAIT) {
ast_setstate(c, AST_STATE_RINGING);
ast_queue_control(c, AST_CONTROL_RINGING);
@@ -5302,7 +5302,7 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
send_callinfo(sub);
transmit_lamp_indication(d, STIMULUS_LINE, l->instance, SKINNY_LAMP_BLINK);
transmit_start_tone(d, SKINNY_CALLWAITTONE, l->instance, sub->callid);
-
+
ast_setstate(c, AST_STATE_RINGING);
ast_queue_control(c, AST_CONTROL_RINGING);
sub->substate = SUBSTATE_CALLWAIT;
@@ -5421,7 +5421,7 @@ static void dumpsub(struct skinny_subchannel *sub, int forcehangup)
if (sub == l->activesub) {
d->hookstate = SKINNY_ONHOOK;
- transmit_speaker_mode(d, SKINNY_SPEAKEROFF);
+ transmit_speaker_mode(d, SKINNY_SPEAKEROFF);
if (sub->related) {
activate_sub = sub->related;
setsubstate(sub, SUBSTATE_ONHOOK);
@@ -5826,12 +5826,12 @@ static int handle_stimulus_message(struct skinny_req *req, struct skinnysession
} else {
c = sub->owner;
}
-
+
if (!c) {
ast_log(LOG_WARNING, "Unable to create channel for %s@%s\n", l->name, d->name);
break;
}
-
+
sub = ast_channel_tech_pvt(c);
if (sub->substate == SUBSTATE_UNSET || sub->substate == SUBSTATE_OFFHOOK){
dialandactivatesub(sub, l->vmexten);
@@ -6082,13 +6082,13 @@ static int handle_onhook_message(struct skinny_req *req, struct skinnysession *s
handle_transfer_button(sub);
return 0;
}
-
+
ast_devstate_changed(AST_DEVICE_NOT_INUSE, AST_DEVSTATE_CACHABLE, "Skinny/%s", l->name);
-
+
dumpsub(sub, 0);
d->hookstate = SKINNY_ONHOOK;
-
+
/* Not ideal, but let's send updated time at onhook and offhook, as it clears the display */
transmit_definetimedate(d);
@@ -6384,11 +6384,10 @@ static int handle_enbloc_call_message(struct skinny_req *req, struct skinnysessi
sub = ast_channel_tech_pvt(c);
dialandactivatesub(sub, req->data.enbloccallmessage.calledParty);
}
-
+
return 1;
}
-
static int handle_soft_key_event_message(struct skinny_req *req, struct skinnysession *s)
{
struct skinny_device *d = s->device;
@@ -6586,7 +6585,7 @@ static int handle_soft_key_event_message(struct skinny_req *req, struct skinnyse
handle_transfer_button(sub);
return 0;
}
-
+
ast_devstate_changed(AST_DEVICE_NOT_INUSE, AST_DEVSTATE_CACHABLE, "Skinny/%s", l->name);
if (sub) {
@@ -6599,7 +6598,7 @@ static int handle_soft_key_event_message(struct skinny_req *req, struct skinnyse
}
d->hookstate = SKINNY_ONHOOK;
-
+
/* Not ideal, but let's send updated time at onhook and offhook, as it clears the display */
transmit_definetimedate(d);
@@ -6866,14 +6865,14 @@ static void destroy_session(struct skinnysession *s)
AST_LIST_TRAVERSE_SAFE_BEGIN(&sessions, cur, list) {
if (cur == s) {
AST_LIST_REMOVE_CURRENT(list);
- if (s->fd > -1)
+ if (s->fd > -1)
close(s->fd);
-
+
if (!s->device)
ast_atomic_fetchadd_int(&unauth_sessions, -1);
ast_mutex_destroy(&s->lock);
-
+
ast_free(s);
}
}
@@ -7150,45 +7149,45 @@ static struct ast_channel *skinny_request(const char *type, struct ast_format_ca
return tmpc;
}
- #define TYPE_GENERAL 1
- #define TYPE_DEF_DEVICE 2
- #define TYPE_DEF_LINE 4
- #define TYPE_DEVICE 8
- #define TYPE_LINE 16
-
- #define CLINE_OPTS ((struct skinny_line_options *)item)
- #define CLINE ((struct skinny_line *)item)
- #define CDEV_OPTS ((struct skinny_device_options *)item)
- #define CDEV ((struct skinny_device *)item)
-
- static void config_parse_variables(int type, void *item, struct ast_variable *vptr)
- {
- struct ast_variable *v;
- int lineInstance = 1;
- int speeddialInstance = 1;
-
- while(vptr) {
- v = vptr;
- vptr = vptr->next;
-
- if (type & (TYPE_GENERAL)) {
- char newcontexts[AST_MAX_CONTEXT];
+#define TYPE_GENERAL 1
+#define TYPE_DEF_DEVICE 2
+#define TYPE_DEF_LINE 4
+#define TYPE_DEVICE 8
+#define TYPE_LINE 16
+
+#define CLINE_OPTS ((struct skinny_line_options *)item)
+#define CLINE ((struct skinny_line *)item)
+#define CDEV_OPTS ((struct skinny_device_options *)item)
+#define CDEV ((struct skinny_device *)item)
+
+static void config_parse_variables(int type, void *item, struct ast_variable *vptr)
+{
+ struct ast_variable *v;
+ int lineInstance = 1;
+ int speeddialInstance = 1;
+
+ while(vptr) {
+ v = vptr;
+ vptr = vptr->next;
+
+ if (type & (TYPE_GENERAL)) {
+ char newcontexts[AST_MAX_CONTEXT];
char oldcontexts[AST_MAX_CONTEXT];
- char *stringp, *context, *oldregcontext;
- if (!ast_jb_read_conf(&global_jbconf, v->name, v->value)) {
- v = v->next;
- continue;
- }
- if (!strcasecmp(v->name, "bindaddr")) {
- if (!(hp = ast_gethostbyname(v->value, &ahp))) {
- ast_log(LOG_WARNING, "Invalid address: %s\n", v->value);
- } else {
- memcpy(&bindaddr.sin_addr, hp->h_addr, sizeof(bindaddr.sin_addr));
- }
- continue;
- } else if (!strcasecmp(v->name, "keepalive")) {
- keep_alive = atoi(v->value);
- continue;
+ char *stringp, *context, *oldregcontext;
+ if (!ast_jb_read_conf(&global_jbconf, v->name, v->value)) {
+ v = v->next;
+ continue;
+ }
+ if (!strcasecmp(v->name, "bindaddr")) {
+ if (!(hp = ast_gethostbyname(v->value, &ahp))) {
+ ast_log(LOG_WARNING, "Invalid address: %s\n", v->value);
+ } else {
+ memcpy(&bindaddr.sin_addr, hp->h_addr, sizeof(bindaddr.sin_addr));
+ }
+ continue;
+ } else if (!strcasecmp(v->name, "keepalive")) {
+ keep_alive = atoi(v->value);
+ continue;
} else if (!strcasecmp(v->name, "authtimeout")) {
int timeout = atoi(v->value);
@@ -7209,174 +7208,174 @@ static struct ast_channel *skinny_request(const char *type, struct ast_format_ca
auth_limit = limit;
}
continue;
- } else if (!strcasecmp(v->name, "regcontext")) {
- ast_copy_string(newcontexts, v->value, sizeof(newcontexts));
- stringp = newcontexts;
+ } else if (!strcasecmp(v->name, "regcontext")) {
+ ast_copy_string(newcontexts, v->value, sizeof(newcontexts));
+ stringp = newcontexts;
/* Initialize copy of current global_regcontext for later use in removing stale contexts */
ast_copy_string(oldcontexts, regcontext, sizeof(oldcontexts));
oldregcontext = oldcontexts;
- /* Let's remove any contexts that are no longer defined in regcontext */
- cleanup_stale_contexts(stringp, oldregcontext);
- /* Create contexts if they don't exist already */
- while ((context = strsep(&stringp, "&"))) {
- ast_copy_string(used_context, context, sizeof(used_context));
- ast_context_find_or_create(NULL, NULL, context, "Skinny");
- }
- ast_copy_string(regcontext, v->value, sizeof(regcontext));
- continue;
- } else if (!strcasecmp(v->name, "vmexten")) {
- ast_copy_string(vmexten, v->value, sizeof(vmexten));
- continue;
- } else if (!strcasecmp(v->name, "dateformat")) {
- memcpy(date_format, v->value, sizeof(date_format));
- continue;
- } else if (!strcasecmp(v->name, "tos")) {
- if (ast_str2tos(v->value, &qos.tos))
- ast_log(LOG_WARNING, "Invalid tos value at line %d, refer to QoS documentation\n", v->lineno);
- continue;
- } else if (!strcasecmp(v->name, "tos_audio")) {
- if (ast_str2tos(v->value, &qos.tos_audio))
- ast_log(LOG_WARNING, "Invalid tos_audio value at line %d, refer to QoS documentation\n", v->lineno);
- continue;
- } else if (!strcasecmp(v->name, "tos_video")) {
- if (ast_str2tos(v->value, &qos.tos_video))
- ast_log(LOG_WARNING, "Invalid tos_video value at line %d, refer to QoS documentation\n", v->lineno);
- continue;
- } else if (!strcasecmp(v->name, "cos")) {
- if (ast_str2cos(v->value, &qos.cos))
- ast_log(LOG_WARNING, "Invalid cos value at line %d, refer to QoS documentation\n", v->lineno);
- continue;
- } else if (!strcasecmp(v->name, "cos_audio")) {
- if (ast_str2cos(v->value, &qos.cos_audio))
- ast_log(LOG_WARNING, "Invalid cos_audio value at line %d, refer to QoS documentation\n", v->lineno);
- continue;
- } else if (!strcasecmp(v->name, "cos_video")) {
- if (ast_str2cos(v->value, &qos.cos_video))
- ast_log(LOG_WARNING, "Invalid cos_video value at line %d, refer to QoS documentation\n", v->lineno);
- continue;
- } else if (!strcasecmp(v->name, "bindport")) {
- if (sscanf(v->value, "%5d", &ourport) == 1) {
- bindaddr.sin_port = htons(ourport);
- } else {
- ast_log(LOG_WARNING, "Invalid bindport '%s' at line %d of %s\n", v->value, v->lineno, config);
- }
- continue;
- } else if (!strcasecmp(v->name, "allow")) {
- ast_parse_allow_disallow(&default_prefs, default_cap, v->value, 1);
- continue;
- } else if (!strcasecmp(v->name, "disallow")) {
- ast_parse_allow_disallow(&default_prefs, default_cap, v->value, 0);
- continue;
- }
- }
-
- if (!strcasecmp(v->name, "transfer")) {
- if (type & (TYPE_DEF_DEVICE | TYPE_DEVICE)) {
- CDEV_OPTS->transfer = ast_true(v->value);
- continue;
- } else if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- CLINE_OPTS->transfer = ast_true(v->value);
- continue;
- }
- } else if (!strcasecmp(v->name, "callwaiting")) {
- if (type & (TYPE_DEF_DEVICE | TYPE_DEVICE)) {
- CDEV_OPTS->callwaiting = ast_true(v->value);
- continue;
- } else if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- CLINE_OPTS->callwaiting = ast_true(v->value);
- continue;
- }
- } else if (!strcasecmp(v->name, "directmedia") || !strcasecmp(v->name, "canreinvite")) {
- if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- CLINE_OPTS->directmedia = ast_true(v->value);
- continue;
- }
- } else if (!strcasecmp(v->name, "nat")) {
- if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- CLINE_OPTS->nat = ast_true(v->value);
- continue;
- }
- } else if (!strcasecmp(v->name, "context")) {
- if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- ast_copy_string(CLINE_OPTS->context, v->value, sizeof(CLINE_OPTS->context));
- continue;
- }
- }else if (!strcasecmp(v->name, "vmexten")) {
- if (type & (TYPE_DEF_DEVICE | TYPE_DEVICE)) {
- ast_copy_string(CDEV_OPTS->vmexten, v->value, sizeof(CDEV_OPTS->vmexten));
- continue;
- } else if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- ast_copy_string(CLINE_OPTS->vmexten, v->value, sizeof(CLINE_OPTS->vmexten));
- continue;
- }
- } else if (!strcasecmp(v->name, "mwiblink")) {
- if (type & (TYPE_DEF_DEVICE | TYPE_DEVICE)) {
- CDEV_OPTS->mwiblink = ast_true(v->value);
- continue;
- } else if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- CLINE_OPTS->mwiblink = ast_true(v->value);
- continue;
- }
- } else if (!strcasecmp(v->name, "linelabel")) {
- if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- ast_copy_string(CLINE_OPTS->label, v->value, sizeof(CLINE_OPTS->label));
- continue;
- }
- } else if (!strcasecmp(v->name, "callerid")) {
- if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- if (!strcasecmp(v->value, "asreceived")) {
- CLINE_OPTS->cid_num[0] = '\0';
- CLINE_OPTS->cid_name[0] = '\0';
- } else {
- ast_callerid_split(v->value, CLINE_OPTS->cid_name, sizeof(CLINE_OPTS->cid_name), CLINE_OPTS->cid_num, sizeof(CLINE_OPTS->cid_num));
- }
- continue;
- }
- } else if (!strcasecmp(v->name, "amaflags")) {
- if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- int tempamaflags = ast_cdr_amaflags2int(v->value);
- if (tempamaflags < 0) {
- ast_log(LOG_WARNING, "Invalid AMA flags: %s at line %d\n", v->value, v->lineno);
- } else {
- CLINE_OPTS->amaflags = tempamaflags;
- }
- continue;
- }
- } else if (!strcasecmp(v->name, "regexten")) {
- if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- ast_copy_string(CLINE_OPTS->regexten, v->value, sizeof(CLINE_OPTS->regexten));
- continue;
- }
- } else if (!strcasecmp(v->name, "language")) {
- if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- ast_copy_string(CLINE_OPTS->language, v->value, sizeof(CLINE_OPTS->language));
- continue;
- }
- } else if (!strcasecmp(v->name, "accountcode")) {
- if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- ast_copy_string(CLINE_OPTS->accountcode, v->value, sizeof(CLINE_OPTS->accountcode));
- continue;
- }
- } else if (!strcasecmp(v->name, "mohinterpret") || !strcasecmp(v->name, "musiconhold")) {
- if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- ast_copy_string(CLINE_OPTS->mohinterpret, v->value, sizeof(CLINE_OPTS->mohinterpret));
- continue;
- }
- } else if (!strcasecmp(v->name, "mohsuggest")) {
- if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- ast_copy_string(CLINE_OPTS->mohsuggest, v->value, sizeof(CLINE_OPTS->mohsuggest));
- continue;
- }
- } else if (!strcasecmp(v->name, "callgroup")) {
- if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- CLINE_OPTS->callgroup = ast_get_group(v->value);
- continue;
- }
- } else if (!strcasecmp(v->name, "pickupgroup")) {
- if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- CLINE_OPTS->pickupgroup = ast_get_group(v->value);
- continue;
- }
+ /* Let's remove any contexts that are no longer defined in regcontext */
+ cleanup_stale_contexts(stringp, oldregcontext);
+ /* Create contexts if they don't exist already */
+ while ((context = strsep(&stringp, "&"))) {
+ ast_copy_string(used_context, context, sizeof(used_context));
+ ast_context_find_or_create(NULL, NULL, context, "Skinny");
+ }
+ ast_copy_string(regcontext, v->value, sizeof(regcontext));
+ continue;
+ } else if (!strcasecmp(v->name, "vmexten")) {
+ ast_copy_string(vmexten, v->value, sizeof(vmexten));
+ continue;
+ } else if (!strcasecmp(v->name, "dateformat")) {
+ memcpy(date_format, v->value, sizeof(date_format));
+ continue;
+ } else if (!strcasecmp(v->name, "tos")) {
+ if (ast_str2tos(v->value, &qos.tos))
+ ast_log(LOG_WARNING, "Invalid tos value at line %d, refer to QoS documentation\n", v->lineno);
+ continue;
+ } else if (!strcasecmp(v->name, "tos_audio")) {
+ if (ast_str2tos(v->value, &qos.tos_audio))
+ ast_log(LOG_WARNING, "Invalid tos_audio value at line %d, refer to QoS documentation\n", v->lineno);
+ continue;
+ } else if (!strcasecmp(v->name, "tos_video")) {
+ if (ast_str2tos(v->value, &qos.tos_video))
+ ast_log(LOG_WARNING, "Invalid tos_video value at line %d, refer to QoS documentation\n", v->lineno);
+ continue;
+ } else if (!strcasecmp(v->name, "cos")) {
+ if (ast_str2cos(v->value, &qos.cos))
+ ast_log(LOG_WARNING, "Invalid cos value at line %d, refer to QoS documentation\n", v->lineno);
+ continue;
+ } else if (!strcasecmp(v->name, "cos_audio")) {
+ if (ast_str2cos(v->value, &qos.cos_audio))
+ ast_log(LOG_WARNING, "Invalid cos_audio value at line %d, refer to QoS documentation\n", v->lineno);
+ continue;
+ } else if (!strcasecmp(v->name, "cos_video")) {
+ if (ast_str2cos(v->value, &qos.cos_video))
+ ast_log(LOG_WARNING, "Invalid cos_video value at line %d, refer to QoS documentation\n", v->lineno);
+ continue;
+ } else if (!strcasecmp(v->name, "bindport")) {
+ if (sscanf(v->value, "%5d", &ourport) == 1) {
+ bindaddr.sin_port = htons(ourport);
+ } else {
+ ast_log(LOG_WARNING, "Invalid bindport '%s' at line %d of %s\n", v->value, v->lineno, config);
+ }
+ continue;
+ } else if (!strcasecmp(v->name, "allow")) {
+ ast_parse_allow_disallow(&default_prefs, default_cap, v->value, 1);
+ continue;
+ } else if (!strcasecmp(v->name, "disallow")) {
+ ast_parse_allow_disallow(&default_prefs, default_cap, v->value, 0);
+ continue;
+ }
+ }
+
+ if (!strcasecmp(v->name, "transfer")) {
+ if (type & (TYPE_DEF_DEVICE | TYPE_DEVICE)) {
+ CDEV_OPTS->transfer = ast_true(v->value);
+ continue;
+ } else if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ CLINE_OPTS->transfer = ast_true(v->value);
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "callwaiting")) {
+ if (type & (TYPE_DEF_DEVICE | TYPE_DEVICE)) {
+ CDEV_OPTS->callwaiting = ast_true(v->value);
+ continue;
+ } else if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ CLINE_OPTS->callwaiting = ast_true(v->value);
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "directmedia") || !strcasecmp(v->name, "canreinvite")) {
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ CLINE_OPTS->directmedia = ast_true(v->value);
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "nat")) {
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ CLINE_OPTS->nat = ast_true(v->value);
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "context")) {
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ ast_copy_string(CLINE_OPTS->context, v->value, sizeof(CLINE_OPTS->context));
+ continue;
+ }
+ }else if (!strcasecmp(v->name, "vmexten")) {
+ if (type & (TYPE_DEF_DEVICE | TYPE_DEVICE)) {
+ ast_copy_string(CDEV_OPTS->vmexten, v->value, sizeof(CDEV_OPTS->vmexten));
+ continue;
+ } else if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ ast_copy_string(CLINE_OPTS->vmexten, v->value, sizeof(CLINE_OPTS->vmexten));
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "mwiblink")) {
+ if (type & (TYPE_DEF_DEVICE | TYPE_DEVICE)) {
+ CDEV_OPTS->mwiblink = ast_true(v->value);
+ continue;
+ } else if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ CLINE_OPTS->mwiblink = ast_true(v->value);
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "linelabel")) {
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ ast_copy_string(CLINE_OPTS->label, v->value, sizeof(CLINE_OPTS->label));
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "callerid")) {
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ if (!strcasecmp(v->value, "asreceived")) {
+ CLINE_OPTS->cid_num[0] = '\0';
+ CLINE_OPTS->cid_name[0] = '\0';
+ } else {
+ ast_callerid_split(v->value, CLINE_OPTS->cid_name, sizeof(CLINE_OPTS->cid_name), CLINE_OPTS->cid_num, sizeof(CLINE_OPTS->cid_num));
+ }
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "amaflags")) {
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ int tempamaflags = ast_cdr_amaflags2int(v->value);
+ if (tempamaflags < 0) {
+ ast_log(LOG_WARNING, "Invalid AMA flags: %s at line %d\n", v->value, v->lineno);
+ } else {
+ CLINE_OPTS->amaflags = tempamaflags;
+ }
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "regexten")) {
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ ast_copy_string(CLINE_OPTS->regexten, v->value, sizeof(CLINE_OPTS->regexten));
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "language")) {
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ ast_copy_string(CLINE_OPTS->language, v->value, sizeof(CLINE_OPTS->language));
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "accountcode")) {
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ ast_copy_string(CLINE_OPTS->accountcode, v->value, sizeof(CLINE_OPTS->accountcode));
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "mohinterpret") || !strcasecmp(v->name, "musiconhold")) {
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ ast_copy_string(CLINE_OPTS->mohinterpret, v->value, sizeof(CLINE_OPTS->mohinterpret));
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "mohsuggest")) {
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ ast_copy_string(CLINE_OPTS->mohsuggest, v->value, sizeof(CLINE_OPTS->mohsuggest));
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "callgroup")) {
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ CLINE_OPTS->callgroup = ast_get_group(v->value);
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "pickupgroup")) {
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ CLINE_OPTS->pickupgroup = ast_get_group(v->value);
+ continue;
+ }
} else if (!strcasecmp(v->name, "namedcallgroup")) {
if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
CLINE_OPTS->named_callgroups = ast_get_namedgroups(v->value);
@@ -7387,103 +7386,103 @@ static struct ast_channel *skinny_request(const char *type, struct ast_format_ca
CLINE_OPTS->named_pickupgroups = ast_get_namedgroups(v->value);
continue;
}
- } else if (!strcasecmp(v->name, "immediate")) {
- if (type & (TYPE_DEF_DEVICE | TYPE_DEVICE | TYPE_DEF_LINE | TYPE_LINE)) {
- CLINE_OPTS->immediate = ast_true(v->value);
- continue;
- }
- } else if (!strcasecmp(v->name, "cancallforward")) {
- if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- CLINE_OPTS->cancallforward = ast_true(v->value);
- continue;
- }
- } else if (!strcasecmp(v->name, "mailbox")) {
- if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- ast_copy_string(CLINE_OPTS->mailbox, v->value, sizeof(CLINE_OPTS->mailbox));
- continue;
- }
- } else if ( !strcasecmp(v->name, "parkinglot")) {
- if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- ast_copy_string(CLINE_OPTS->parkinglot, v->value, sizeof(CLINE_OPTS->parkinglot));
- continue;
- }
- } else if (!strcasecmp(v->name, "hasvoicemail")) {
- if (type & (TYPE_LINE)) {
- if (ast_true(v->value) && ast_strlen_zero(CLINE->mailbox)) {
- ast_copy_string(CLINE->mailbox, CLINE->name, sizeof(CLINE->mailbox));
- }
- continue;
- }
- } else if (!strcasecmp(v->name, "threewaycalling")) {
- if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- CLINE_OPTS->threewaycalling = ast_true(v->value);
- continue;
- }
- } else if (!strcasecmp(v->name, "setvar")) {
- if (type & (TYPE_LINE)) {
- CLINE->chanvars = add_var(v->value, CLINE->chanvars);
- continue;
- }
- } else if (!strcasecmp(v->name, "earlyrtp")) {
- if (type & (TYPE_DEF_DEVICE | TYPE_DEVICE)) {
- CDEV_OPTS->earlyrtp = ast_true(v->value);
- continue;
- }
- } else if (!strcasecmp(v->name, "host")) {
- if (type & (TYPE_DEVICE)) {
+ } else if (!strcasecmp(v->name, "immediate")) {
+ if (type & (TYPE_DEF_DEVICE | TYPE_DEVICE | TYPE_DEF_LINE | TYPE_LINE)) {
+ CLINE_OPTS->immediate = ast_true(v->value);
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "cancallforward")) {
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ CLINE_OPTS->cancallforward = ast_true(v->value);
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "mailbox")) {
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ ast_copy_string(CLINE_OPTS->mailbox, v->value, sizeof(CLINE_OPTS->mailbox));
+ continue;
+ }
+ } else if ( !strcasecmp(v->name, "parkinglot")) {
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ ast_copy_string(CLINE_OPTS->parkinglot, v->value, sizeof(CLINE_OPTS->parkinglot));
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "hasvoicemail")) {
+ if (type & (TYPE_LINE)) {
+ if (ast_true(v->value) && ast_strlen_zero(CLINE->mailbox)) {
+ ast_copy_string(CLINE->mailbox, CLINE->name, sizeof(CLINE->mailbox));
+ }
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "threewaycalling")) {
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ CLINE_OPTS->threewaycalling = ast_true(v->value);
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "setvar")) {
+ if (type & (TYPE_LINE)) {
+ CLINE->chanvars = add_var(v->value, CLINE->chanvars);
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "earlyrtp")) {
+ if (type & (TYPE_DEF_DEVICE | TYPE_DEVICE)) {
+ CDEV_OPTS->earlyrtp = ast_true(v->value);
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "host")) {
+ if (type & (TYPE_DEVICE)) {
struct ast_sockaddr CDEV_addr_tmp;
CDEV_addr_tmp.ss.ss_family = AF_INET;
if (ast_get_ip(&CDEV_addr_tmp, v->value)) {
- ast_log(LOG_WARNING, "Bad IP '%s' at line %d.\n", v->value, v->lineno);
- }
+ ast_log(LOG_WARNING, "Bad IP '%s' at line %d.\n", v->value, v->lineno);
+ }
ast_sockaddr_to_sin(&CDEV_addr_tmp,
&CDEV->addr);
- continue;
- }
- } else if (!strcasecmp(v->name, "port")) {
- if (type & (TYPE_DEF_DEVICE)) {
- CDEV->addr.sin_port = htons(atoi(v->value));
- continue;
- }
- } else if (!strcasecmp(v->name, "device")) {
- if (type & (TYPE_DEVICE)) {
- ast_copy_string(CDEV_OPTS->id, v->value, sizeof(CDEV_OPTS->id));
- continue;
- }
- } else if (!strcasecmp(v->name, "permit") || !strcasecmp(v->name, "deny")) {
- if (type & (TYPE_DEVICE)) {
- CDEV->ha = ast_append_ha(v->name, v->value, CDEV->ha, NULL);
- continue;
- }
- } else if (!strcasecmp(v->name, "allow")) {
- if (type & (TYPE_DEF_DEVICE | TYPE_DEVICE)) {
- ast_parse_allow_disallow(&CDEV->confprefs, CDEV->confcap, v->value, 1);
- continue;
- }
- if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- ast_parse_allow_disallow(&CLINE->confprefs, CLINE->confcap, v->value, 1);
- continue;
- }
- } else if (!strcasecmp(v->name, "disallow")) {
- if (type & (TYPE_DEF_DEVICE | TYPE_DEVICE)) {
- ast_parse_allow_disallow(&CDEV->confprefs, CDEV->confcap, v->value, 0);
- continue;
- }
- if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
- ast_parse_allow_disallow(&CLINE->confprefs, CLINE->confcap, v->value, 0);
- continue;
- }
- } else if (!strcasecmp(v->name, "version")) {
- if (type & (TYPE_DEF_DEVICE | TYPE_DEVICE)) {
- ast_copy_string(CDEV_OPTS->version_id, v->value, sizeof(CDEV_OPTS->version_id));
- continue;
- }
- } else if (!strcasecmp(v->name, "line")) {
- if (type & (TYPE_DEVICE)) {
- struct skinny_line *l;
- AST_LIST_TRAVERSE(&lines, l, all) {
- if (!strcasecmp(v->value, l->name) && !l->prune) {
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "port")) {
+ if (type & (TYPE_DEF_DEVICE)) {
+ CDEV->addr.sin_port = htons(atoi(v->value));
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "device")) {
+ if (type & (TYPE_DEVICE)) {
+ ast_copy_string(CDEV_OPTS->id, v->value, sizeof(CDEV_OPTS->id));
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "permit") || !strcasecmp(v->name, "deny")) {
+ if (type & (TYPE_DEVICE)) {
+ CDEV->ha = ast_append_ha(v->name, v->value, CDEV->ha, NULL);
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "allow")) {
+ if (type & (TYPE_DEF_DEVICE | TYPE_DEVICE)) {
+ ast_parse_allow_disallow(&CDEV->confprefs, CDEV->confcap, v->value, 1);
+ continue;
+ }
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ ast_parse_allow_disallow(&CLINE->confprefs, CLINE->confcap, v->value, 1);
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "disallow")) {
+ if (type & (TYPE_DEF_DEVICE | TYPE_DEVICE)) {
+ ast_parse_allow_disallow(&CDEV->confprefs, CDEV->confcap, v->value, 0);
+ continue;
+ }
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ ast_parse_allow_disallow(&CLINE->confprefs, CLINE->confcap, v->value, 0);
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "version")) {
+ if (type & (TYPE_DEF_DEVICE | TYPE_DEVICE)) {
+ ast_copy_string(CDEV_OPTS->version_id, v->value, sizeof(CDEV_OPTS->version_id));
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "line")) {
+ if (type & (TYPE_DEVICE)) {
+ struct skinny_line *l;
+ AST_LIST_TRAVERSE(&lines, l, all) {
+ if (!strcasecmp(v->value, l->name) && !l->prune) {
/* FIXME: temp solution about line conflicts */
struct skinny_device *d;
@@ -7505,28 +7504,28 @@ static struct ast_channel *skinny_request(const char *type, struct ast_format_ca
AST_LIST_INSERT_HEAD(&CDEV->lines, l, list);
l->device = CDEV;
}
- break;
- }
- }
- continue;
- }
- } else if (!strcasecmp(v->name, "subline")) {
- if (type & (TYPE_LINE)) {
- struct skinny_subline *subline;
- struct skinny_container *container;
+ break;
+ }
+ }
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "subline")) {
+ if (type & (TYPE_LINE)) {
+ struct skinny_subline *subline;
+ struct skinny_container *container;
char buf[256];
char *stringp = buf, *exten, *stname, *context;
- if (!(subline = ast_calloc(1, sizeof(*subline)))) {
- ast_log(LOG_WARNING, "Unable to allocate memory for subline %s. Ignoring subline.\n", v->value);
- continue;
- }
- if (!(container = ast_calloc(1, sizeof(*container)))) {
- ast_log(LOG_WARNING, "Unable to allocate memory for subline %s container. Ignoring subline.\n", v->value);
+ if (!(subline = ast_calloc(1, sizeof(*subline)))) {
+ ast_log(LOG_WARNING, "Unable to allocate memory for subline %s. Ignoring subline.\n", v->value);
+ continue;
+ }
+ if (!(container = ast_calloc(1, sizeof(*container)))) {
+ ast_log(LOG_WARNING, "Unable to allocate memory for subline %s container. Ignoring subline.\n", v->value);
ast_free(subline);
- continue;
- }
-
+ continue;
+ }
+
ast_copy_string(buf, v->value, sizeof(buf));
exten = strsep(&stringp, "@");
ast_copy_string(subline->exten, ast_strip(exten), sizeof(subline->exten));
@@ -7544,34 +7543,34 @@ static struct ast_channel *skinny_request(const char *type, struct ast_format_ca
container->data = subline;
subline->container = container;
AST_LIST_INSERT_HEAD(&CLINE->sublines, subline, list);
- continue;
+ continue;
}
- } else if (!strcasecmp(v->name, "dialoutcontext")) {
- if (type & (TYPE_LINE)) {
- ast_copy_string(CLINE_OPTS->dialoutcontext, v->value, sizeof(CLINE_OPTS->dialoutcontext));
+ } else if (!strcasecmp(v->name, "dialoutcontext")) {
+ if (type & (TYPE_LINE)) {
+ ast_copy_string(CLINE_OPTS->dialoutcontext, v->value, sizeof(CLINE_OPTS->dialoutcontext));
continue;
}
- } else if (!strcasecmp(v->name, "dialoutexten")) {
- if (type & (TYPE_LINE)) {
- ast_copy_string(CLINE_OPTS->dialoutexten, v->value, sizeof(CLINE_OPTS->dialoutexten));
+ } else if (!strcasecmp(v->name, "dialoutexten")) {
+ if (type & (TYPE_LINE)) {
+ ast_copy_string(CLINE_OPTS->dialoutexten, v->value, sizeof(CLINE_OPTS->dialoutexten));
continue;
}
- } else if (!strcasecmp(v->name, "speeddial")) {
- if (type & (TYPE_DEVICE)) {
- struct skinny_speeddial *sd;
- struct skinny_container *container;
+ } else if (!strcasecmp(v->name, "speeddial")) {
+ if (type & (TYPE_DEVICE)) {
+ struct skinny_speeddial *sd;
+ struct skinny_container *container;
char buf[256];
char *stringp = buf, *exten, *context, *label;
- if (!(sd = ast_calloc(1, sizeof(*sd)))) {
- ast_log(LOG_WARNING, "Unable to allocate memory for speeddial %s. Ignoring speeddial.\n", v->name);
- continue;
- }
- if (!(container = ast_calloc(1, sizeof(*container)))) {
- ast_log(LOG_WARNING, "Unable to allocate memory for speeddial %s container. Ignoring speeddial.\n", v->name);
+ if (!(sd = ast_calloc(1, sizeof(*sd)))) {
+ ast_log(LOG_WARNING, "Unable to allocate memory for speeddial %s. Ignoring speeddial.\n", v->name);
+ continue;
+ }
+ if (!(container = ast_calloc(1, sizeof(*container)))) {
+ ast_log(LOG_WARNING, "Unable to allocate memory for speeddial %s container. Ignoring speeddial.\n", v->name);
ast_free(sd);
- continue;
- }
+ continue;
+ }
ast_copy_string(buf, v->value, sizeof(buf));
exten = strsep(&stringp, ",");
@@ -7596,146 +7595,146 @@ static struct ast_channel *skinny_request(const char *type, struct ast_format_ca
container->data = sd;
sd->container = container;
AST_LIST_INSERT_HEAD(&CDEV->speeddials, sd, list);
- continue;
- }
- } else if (!strcasecmp(v->name, "addon")) {
- if (type & (TYPE_DEVICE)) {
- struct skinny_addon *a;
- if (!(a = ast_calloc(1, sizeof(*a)))) {
- ast_log(LOG_WARNING, "Unable to allocate memory for addon %s. Ignoring addon.\n", v->name);
- continue;
- } else {
- ast_mutex_init(&a->lock);
- ast_copy_string(a->type, v->value, sizeof(a->type));
- AST_LIST_INSERT_HEAD(&CDEV->addons, a, list);
- }
- continue;
- }
-
- } else {
- ast_log(LOG_WARNING, "Don't know keyword '%s' at line %d\n", v->name, v->lineno);
- continue;
- }
- ast_log(LOG_WARNING, "Invalid category used: %s at line %d\n", v->name, v->lineno);
- }
- }
-
- static struct skinny_line *config_line(const char *lname, struct ast_variable *v)
- {
- struct skinny_line *l, *temp;
+ continue;
+ }
+ } else if (!strcasecmp(v->name, "addon")) {
+ if (type & (TYPE_DEVICE)) {
+ struct skinny_addon *a;
+ if (!(a = ast_calloc(1, sizeof(*a)))) {
+ ast_log(LOG_WARNING, "Unable to allocate memory for addon %s. Ignoring addon.\n", v->name);
+ continue;
+ } else {
+ ast_mutex_init(&a->lock);
+ ast_copy_string(a->type, v->value, sizeof(a->type));
+ AST_LIST_INSERT_HEAD(&CDEV->addons, a, list);
+ }
+ continue;
+ }
+
+ } else {
+ ast_log(LOG_WARNING, "Don't know keyword '%s' at line %d\n", v->name, v->lineno);
+ continue;
+ }
+ ast_log(LOG_WARNING, "Invalid category used: %s at line %d\n", v->name, v->lineno);
+ }
+}
+
+static struct skinny_line *config_line(const char *lname, struct ast_variable *v)
+{
+ struct skinny_line *l, *temp;
int update = 0;
struct skinny_container *container;
-
- ast_log(LOG_NOTICE, "Configuring skinny line %s.\n", lname);
+
+ ast_log(LOG_NOTICE, "Configuring skinny line %s.\n", lname);
/* We find the old line and remove it just before the new
line is created */
- AST_LIST_LOCK(&lines);
- AST_LIST_TRAVERSE(&lines, temp, all) {
- if (!strcasecmp(lname, temp->name) && temp->prune) {
+ AST_LIST_LOCK(&lines);
+ AST_LIST_TRAVERSE(&lines, temp, all) {
+ if (!strcasecmp(lname, temp->name) && temp->prune) {
update = 1;
- break;
- }
- }
-
- if (!(l = skinny_line_alloc())) {
- ast_verb(1, "Unable to allocate memory for line %s.\n", lname);
- AST_LIST_UNLOCK(&lines);
- return NULL;
- }
+ break;
+ }
+ }
+
+ if (!(l = skinny_line_alloc())) {
+ ast_verb(1, "Unable to allocate memory for line %s.\n", lname);
+ AST_LIST_UNLOCK(&lines);
+ return NULL;
+ }
if (!(container = ast_calloc(1, sizeof(*container)))) {
ast_log(LOG_WARNING, "Unable to allocate memory for line %s container.\n", lname);
skinny_line_destroy(l);
- AST_LIST_UNLOCK(&lines);
- return NULL;
+ AST_LIST_UNLOCK(&lines);
+ return NULL;
}
container->type = SKINNY_LINECONTAINER;
container->data = l;
l->container = container;
-
- memcpy(l, default_line, sizeof(*default_line));
- ast_mutex_init(&l->lock);
- ast_copy_string(l->name, lname, sizeof(l->name));
+
+ memcpy(l, default_line, sizeof(*default_line));
+ ast_mutex_init(&l->lock);
+ ast_copy_string(l->name, lname, sizeof(l->name));
ast_format_cap_copy(l->confcap, default_cap);
- AST_LIST_INSERT_TAIL(&lines, l, all);
-
- ast_mutex_lock(&l->lock);
- AST_LIST_UNLOCK(&lines);
-
- config_parse_variables(TYPE_LINE, l, v);
-
- if (!ast_strlen_zero(l->mailbox)) {
- char *cfg_mailbox, *cfg_context;
- cfg_context = cfg_mailbox = ast_strdupa(l->mailbox);
- ast_verb(3, "Setting mailbox '%s' on line %s\n", cfg_mailbox, l->name);
- strsep(&cfg_context, "@");
- if (ast_strlen_zero(cfg_context))
- cfg_context = "default";
+ AST_LIST_INSERT_TAIL(&lines, l, all);
+
+ ast_mutex_lock(&l->lock);
+ AST_LIST_UNLOCK(&lines);
+
+ config_parse_variables(TYPE_LINE, l, v);
+
+ if (!ast_strlen_zero(l->mailbox)) {
+ char *cfg_mailbox, *cfg_context;
+ cfg_context = cfg_mailbox = ast_strdupa(l->mailbox);
+ ast_verb(3, "Setting mailbox '%s' on line %s\n", cfg_mailbox, l->name);
+ strsep(&cfg_context, "@");
+ if (ast_strlen_zero(cfg_context))
+ cfg_context = "default";
l->mwi_event_sub = ast_event_subscribe(AST_EVENT_MWI, mwi_event_cb, "skinny MWI subsciption", l,
- AST_EVENT_IE_MAILBOX, AST_EVENT_IE_PLTYPE_STR, cfg_mailbox,
- AST_EVENT_IE_CONTEXT, AST_EVENT_IE_PLTYPE_STR, cfg_context,
- AST_EVENT_IE_NEWMSGS, AST_EVENT_IE_PLTYPE_EXISTS,
- AST_EVENT_IE_END);
- }
+ AST_EVENT_IE_MAILBOX, AST_EVENT_IE_PLTYPE_STR, cfg_mailbox,
+ AST_EVENT_IE_CONTEXT, AST_EVENT_IE_PLTYPE_STR, cfg_context,
+ AST_EVENT_IE_NEWMSGS, AST_EVENT_IE_PLTYPE_EXISTS,
+ AST_EVENT_IE_END);
+ }
if (!ast_strlen_zero(vmexten) && ast_strlen_zero(l->vmexten)) {
ast_copy_string(l->vmexten, vmexten, sizeof(l->vmexten));
}
-
- ast_mutex_unlock(&l->lock);
-
+
+ ast_mutex_unlock(&l->lock);
+
/* We do not want to unlink or free the line yet, it needs
to be available to detect a device reconfig when we load the
devices. Old lines will be pruned after the reload completes */
ast_verb(3, "%s config for line '%s'\n", update ? "Updated" : (skinnyreload ? "Reloaded" : "Created"), l->name);
- return l;
- }
-
- static struct skinny_device *config_device(const char *dname, struct ast_variable *v)
- {
- struct skinny_device *d, *temp;
- struct skinny_line *l, *ltemp;
+ return l;
+}
+
+static struct skinny_device *config_device(const char *dname, struct ast_variable *v)
+{
+ struct skinny_device *d, *temp;
+ struct skinny_line *l, *ltemp;
struct skinny_subchannel *sub;
int update = 0;
-
- ast_log(LOG_NOTICE, "Configuring skinny device %s.\n", dname);
- AST_LIST_LOCK(&devices);
- AST_LIST_TRAVERSE(&devices, temp, list) {
- if (!strcasecmp(dname, temp->name) && temp->prune) {
+ ast_log(LOG_NOTICE, "Configuring skinny device %s.\n", dname);
+
+ AST_LIST_LOCK(&devices);
+ AST_LIST_TRAVERSE(&devices, temp, list) {
+ if (!strcasecmp(dname, temp->name) && temp->prune) {
update = 1;
- break;
- }
- }
-
- if (!(d = skinny_device_alloc())) {
- ast_verb(1, "Unable to allocate memory for device %s.\n", dname);
- AST_LIST_UNLOCK(&devices);
- return NULL;
- }
- memcpy(d, default_device, sizeof(*default_device));
- ast_mutex_init(&d->lock);
- ast_copy_string(d->name, dname, sizeof(d->name));
+ break;
+ }
+ }
+
+ if (!(d = skinny_device_alloc())) {
+ ast_verb(1, "Unable to allocate memory for device %s.\n", dname);
+ AST_LIST_UNLOCK(&devices);
+ return NULL;
+ }
+ memcpy(d, default_device, sizeof(*default_device));
+ ast_mutex_init(&d->lock);
+ ast_copy_string(d->name, dname, sizeof(d->name));
ast_format_cap_copy(d->confcap, default_cap);
- AST_LIST_INSERT_TAIL(&devices, d, list);
-
- ast_mutex_lock(&d->lock);
- AST_LIST_UNLOCK(&devices);
-
- config_parse_variables(TYPE_DEVICE, d, v);
-
- if (!AST_LIST_FIRST(&d->lines)) {
- ast_log(LOG_ERROR, "A Skinny device must have at least one line!\n");
- ast_mutex_unlock(&d->lock);
- return NULL;
- }
- if (/*d->addr.sin_addr.s_addr && */!ntohs(d->addr.sin_port)) {
- d->addr.sin_port = htons(DEFAULT_SKINNY_PORT);
- }
-
+ AST_LIST_INSERT_TAIL(&devices, d, list);
+
+ ast_mutex_lock(&d->lock);
+ AST_LIST_UNLOCK(&devices);
+
+ config_parse_variables(TYPE_DEVICE, d, v);
+
+ if (!AST_LIST_FIRST(&d->lines)) {
+ ast_log(LOG_ERROR, "A Skinny device must have at least one line!\n");
+ ast_mutex_unlock(&d->lock);
+ return NULL;
+ }
+ if (/*d->addr.sin_addr.s_addr && */!ntohs(d->addr.sin_port)) {
+ d->addr.sin_port = htons(DEFAULT_SKINNY_PORT);
+ }
+
if (skinnyreload){
AST_LIST_LOCK(&devices);
AST_LIST_TRAVERSE(&devices, temp, list) {
@@ -7775,35 +7774,35 @@ static struct ast_channel *skinny_request(const char *type, struct ast_format_ca
AST_LIST_UNLOCK(&devices);
}
- ast_mutex_unlock(&d->lock);
+ ast_mutex_unlock(&d->lock);
ast_verb(3, "%s config for device '%s'\n", update ? "Updated" : (skinnyreload ? "Reloaded" : "Created"), d->name);
-
+
return d;
- }
-
- static int config_load(void)
- {
- int on = 1;
- struct ast_config *cfg;
- char *cat;
- int oldport = ntohs(bindaddr.sin_port);
- struct ast_flags config_flags = { 0 };
-
- ast_log(LOG_NOTICE, "Configuring skinny from %s\n", config);
-
- if (gethostname(ourhost, sizeof(ourhost))) {
- ast_log(LOG_WARNING, "Unable to get hostname, Skinny disabled.\n");
- return 0;
- }
- cfg = ast_config_load(config, config_flags);
-
- /* We *must* have a config file otherwise stop immediately */
- if (!cfg || cfg == CONFIG_STATUS_FILEINVALID) {
- ast_log(LOG_NOTICE, "Unable to load config %s, Skinny disabled.\n", config);
- return -1;
- }
+}
+
+static int config_load(void)
+{
+ int on = 1;
+ struct ast_config *cfg;
+ char *cat;
+ int oldport = ntohs(bindaddr.sin_port);
+ struct ast_flags config_flags = { 0 };
+
+ ast_log(LOG_NOTICE, "Configuring skinny from %s\n", config);
+
+ if (gethostname(ourhost, sizeof(ourhost))) {
+ ast_log(LOG_WARNING, "Unable to get hostname, Skinny disabled.\n");
+ return 0;
+ }
+ cfg = ast_config_load(config, config_flags);
+
+ /* We *must* have a config file otherwise stop immediately */
+ if (!cfg || cfg == CONFIG_STATUS_FILEINVALID) {
+ ast_log(LOG_NOTICE, "Unable to load config %s, Skinny disabled.\n", config);
+ return -1;
+ }
memset(&bindaddr, 0, sizeof(bindaddr));
memset(&default_prefs, 0, sizeof(default_prefs));
@@ -7838,7 +7837,7 @@ static struct ast_channel *skinny_request(const char *type, struct ast_format_ca
config_line(cat, ast_variable_browse(cfg, cat));
cat = ast_category_browse(cfg, cat);
}
-
+
/* load the devices sections */
default_device->confprefs = default_prefs;
config_parse_variables(TYPE_DEF_DEVICE, default_device, ast_variable_browse(cfg, "devices"));
@@ -7964,7 +7963,7 @@ int skinny_reload(void)
continue;
}
ast_verb(3, "Removing device '%s'\n", d->name);
- /* Delete all lines for this device.
+ /* Delete all lines for this device.
We do not want to free the line here, that
will happen below. */
while ((l = AST_LIST_REMOVE_HEAD(&d->lines, list))) {
@@ -7983,7 +7982,7 @@ int skinny_reload(void)
AST_LIST_TRAVERSE_SAFE_END;
AST_LIST_UNLOCK(&devices);
- AST_LIST_LOCK(&lines);
+ AST_LIST_LOCK(&lines);
AST_LIST_TRAVERSE_SAFE_BEGIN(&lines, l, all) {
if (l->prune) {
AST_LIST_REMOVE_CURRENT(all);
@@ -7991,7 +7990,7 @@ int skinny_reload(void)
}
}
AST_LIST_TRAVERSE_SAFE_END;
- AST_LIST_UNLOCK(&lines);
+ AST_LIST_UNLOCK(&lines);
AST_LIST_TRAVERSE(&devices, d, list) {
/* Do a soft reset to re-register the devices after
@@ -8012,8 +8011,8 @@ int skinny_reload(void)
* Module loading including tests for configuration or dependencies.
* This function can return AST_MODULE_LOAD_FAILURE, AST_MODULE_LOAD_DECLINE,
* or AST_MODULE_LOAD_SUCCESS. If a dependency or environment variable fails
- * tests return AST_MODULE_LOAD_FAILURE. If the module can not load the
- * configuration file or other non-critical problem return
+ * tests return AST_MODULE_LOAD_FAILURE. If the module can not load the
+ * configuration file or other non-critical problem return
* AST_MODULE_LOAD_DECLINE. On success return AST_MODULE_LOAD_SUCCESS.
*/
static int load_module(void)
@@ -8084,7 +8083,7 @@ static int unload_module(void)
ast_manager_unregister("SKINNYshowdevice");
ast_manager_unregister("SKINNYlines");
ast_manager_unregister("SKINNYshowline");
-
+
AST_LIST_LOCK(&sessions);
/* Destroy all the interfaces and free their memory */
while((s = AST_LIST_REMOVE_HEAD(&sessions, list))) {