static int setcallerid_pres_exec(struct ast_channel *chan, const char *data) { int pres = -1; static int deprecated = 0; if (!deprecated) { deprecated = 1; ast_log(LOG_WARNING, "SetCallerPres is deprecated. Please use Set(CALLERPRES()=%s) instead.\n", (char *)data); } /* For interface consistency, permit the argument to be specified as a number */ if (sscanf(data, "%30d", &pres) != 1 || pres < 0 || pres > 255 || (pres & 0x9c)) { pres = ast_parse_caller_presentation(data); } if (pres < 0) { ast_log(LOG_WARNING, "'%s' is not a valid presentation (see 'show application SetCallerPres')\n", (char *) data); return 0; } /* Set the combined caller id presentation. */ chan->caller.id.name.presentation = pres; chan->caller.id.number.presentation = pres; return 0; }
static int callerpres_write(struct ast_channel *chan, const char *cmd, char *data, const char *value) { int pres = ast_parse_caller_presentation(value); if (pres < 0) ast_log(LOG_WARNING, "'%s' is not a valid presentation (see 'show function CALLERPRES')\n", value); else chan->cid.cid_pres = pres; return 0; }
static int setcallerid_pres_exec(struct ast_channel *chan, void *data) { struct localuser *u; int pres = -1; LOCAL_USER_ADD(u); pres = ast_parse_caller_presentation(data); if (pres < 0) { ast_log(LOG_WARNING, "'%s' is not a valid presentation (see 'show application SetCallerPres')\n", (char *) data); LOCAL_USER_REMOVE(u); return 0; } chan->cid.cid_pres = pres; LOCAL_USER_REMOVE(u); return 0; }
static int callerid_write(struct ast_channel *chan, const char *cmd, char *data, const char *value) { if (!value || !chan) return -1; if (!strncasecmp("all", data, 3)) { char name[256]; char num[256]; if (!ast_callerid_split(value, name, sizeof(name), num, sizeof(num))) ast_set_callerid(chan, num, name, num); } else if (!strncasecmp("name", data, 4)) { ast_set_callerid(chan, NULL, value, NULL); } else if (!strncasecmp("num", data, 3)) { ast_set_callerid(chan, value, NULL, NULL); } else if (!strncasecmp("ani", data, 3)) { if (!strncasecmp(data + 3, "2", 1)) { int i = atoi(value); chan->cid.cid_ani2 = i; } else ast_set_callerid(chan, NULL, NULL, value); } else if (!strncasecmp("dnid", data, 4)) { ast_channel_lock(chan); if (chan->cid.cid_dnid) ast_free(chan->cid.cid_dnid); chan->cid.cid_dnid = ast_strdup(value); ast_channel_unlock(chan); } else if (!strncasecmp("rdnis", data, 5)) { ast_channel_lock(chan); if (chan->cid.cid_rdnis) ast_free(chan->cid.cid_rdnis); chan->cid.cid_rdnis = ast_strdup(value); ast_channel_unlock(chan); } else if (!strncasecmp("pres", data, 4)) { int i; char *s, *val; /* Strip leading spaces */ while ((value[0] == '\t') || (value[0] == ' ')) ++value; val = ast_strdupa(value); /* Strip trailing spaces */ s = val + strlen(val); while ((s != val) && ((s[-1] == '\t') || (s[-1] == ' '))) --s; *s = '\0'; if ((val[0] >= '0') && (val[0] <= '9')) i = atoi(val); else i = ast_parse_caller_presentation(val); if (i < 0) ast_log(LOG_ERROR, "Unknown calling number presentation '%s', value unchanged\n", val); else chan->cid.cid_pres = i; } else if (!strncasecmp("ton", data, 3)) { int i = atoi(value); chan->cid.cid_ton = i; } else { ast_log(LOG_ERROR, "Unknown callerid data type '%s'.\n", data); } return 0; }
/* first set default values */ memset(config, 0, sizeof(*config)); ast_copy_string (config->context, "default", sizeof (config->context)); ast_copy_string (config->exten, "", sizeof (config->exten)); ast_copy_string (config->language, DEFAULT_LANGUAGE, sizeof (config->language)); config->u2diag = -1; config->resetdongle = 1; config->callingpres = -1; config->initstate = DEV_STATE_STARTED; config->callwaiting = CALL_WAITING_AUTO; config->dtmf = DC_DTMF_SETTING_RELAX; config->mindtmfgap = DEFAULT_MINDTMFGAP; config->mindtmfduration = DEFAULT_MINDTMFDURATION; config->mindtmfinterval = DEFAULT_MINDTMFINTERVAL; } #/* */ EXPORT_DEF void dc_sconfig_fill(struct ast_config * cfg, const char * cat, struct dc_sconfig * config) { struct ast_variable * v; /* read config and translate to values */ for (v = ast_variable_browse (cfg, cat); v; v = v->next) { if (!strcasecmp (v->name, "context")) { ast_copy_string (config->context, v->value, sizeof (config->context)); } else if (!strcasecmp (v->name, "exten")) { ast_copy_string (config->exten, v->value, sizeof (config->exten)); } else if (!strcasecmp (v->name, "language")) { ast_copy_string (config->language, v->value, sizeof (config->language));/* set channel language */ } else if (!strcasecmp (v->name, "group")) { config->group = (int) strtol (v->value, (char**) NULL, 10); /* group is set to 0 if invalid */ } else if (!strcasecmp (v->name, "rxgain")) { config->rxgain = (int) strtol (v->value, (char**) NULL, 10); /* rxgain is set to 0 if invalid */ } else if (!strcasecmp (v->name, "txgain")) { config->txgain = (int) strtol (v->value, (char**) NULL, 10); /* txgain is set to 0 if invalid */ } else if (!strcasecmp (v->name, "u2diag")) { errno = 0; config->u2diag = (int) strtol (v->value, (char**) NULL, 10); /* u2diag is set to -1 if invalid */ if (config->u2diag == 0 && errno == EINVAL) { config->u2diag = -1; } } else if (!strcasecmp (v->name, "callingpres")) { config->callingpres = ast_parse_caller_presentation (v->value); if (config->callingpres == -1) { errno = 0; config->callingpres = (int) strtol (v->value, (char**) NULL, 10);/* callingpres is set to -1 if invalid */ if (config->callingpres == 0 && errno == EINVAL) { config->callingpres = -1; } } } else if (!strcasecmp (v->name, "usecallingpres")) { config->usecallingpres = ast_true (v->value); /* usecallingpres is set to 0 if invalid */ } else if (!strcasecmp (v->name, "autodeletesms")) { config->autodeletesms = ast_true (v->value); /* autodeletesms is set to 0 if invalid */ } else if (!strcasecmp (v->name, "resetdongle")) { config->resetdongle = ast_true (v->value); /* resetdongle is set to 0 if invalid */ } else if (!strcasecmp (v->name, "disablesms")) { config->disablesms = ast_true (v->value); /* disablesms is set to 0 if invalid */ } else if (!strcasecmp (v->name, "smsaspdu")) { config->smsaspdu = ast_true (v->value); /* send_sms_as_pdu us set to 0 if invalid */ } else if (!strcasecmp (v->name, "disable")) { config->initstate = ast_true (v->value) ? DEV_STATE_REMOVED : DEV_STATE_STARTED; } else if (!strcasecmp (v->name, "initstate")) { int val = str2enum(v->value, dev_state_strs, ITEMS_OF(dev_state_strs)); if(val == DEV_STATE_STOPPED || val == DEV_STATE_STARTED || val == DEV_STATE_REMOVED) config->initstate = val; else ast_log(LOG_ERROR, "Invalid value for 'initstate': '%s', must be one of 'stop' 'start' 'remove' default is 'start'\n", v->value); } else if (!strcasecmp (v->name, "callwaiting")) { if(strcasecmp(v->value, "auto")) config->callwaiting = ast_true (v->value); } else if (!strcasecmp (v->name, "dtmf")) { int val = dc_dtmf_str2setting(v->value); if(val >= 0) config->dtmf = val; else ast_log(LOG_ERROR, "Invalid value for 'dtmf': '%s', setting default 'relax'\n", v->value); } else if (!strcasecmp (v->name, "mindtmfgap")) { errno = 0; config->mindtmfgap = (int) strtol (v->value, (char**) NULL, 10); if ((config->mindtmfgap == 0 && errno == EINVAL) || config->mindtmfgap < 0) { ast_log(LOG_ERROR, "Invalid value for 'mindtmfgap' '%s', setting default %d\n", v->value, DEFAULT_MINDTMFGAP); config->mindtmfgap = DEFAULT_MINDTMFGAP; } } else if (!strcasecmp (v->name, "mindtmfduration")) { errno = 0; config->mindtmfduration = (int) strtol (v->value, (char**) NULL, 10); if ((config->mindtmfduration == 0 && errno == EINVAL) || config->mindtmfduration < 0) { ast_log(LOG_ERROR, "Invalid value for 'mindtmfgap' '%s', setting default %d\n", v->value, DEFAULT_MINDTMFDURATION); config->mindtmfduration = DEFAULT_MINDTMFDURATION; } } else if (!strcasecmp (v->name, "mindtmfinterval")) { errno = 0; config->mindtmfinterval = (int) strtol (v->value, (char**) NULL, 10); if ((config->mindtmfinterval == 0 && errno == EINVAL) || config->mindtmfinterval < 0) { ast_log(LOG_ERROR, "Invalid value for 'mindtmfinterval' '%s', setting default %d\n", v->value, DEFAULT_MINDTMFINTERVAL); config->mindtmfduration = DEFAULT_MINDTMFINTERVAL; } } } }