[asterisk-commits] rizzo: branch rizzo/astobj2 r47681 -
/team/rizzo/astobj2/channels/chan_sip.c
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Wed Nov 15 11:24:28 MST 2006
Author: rizzo
Date: Wed Nov 15 12:24:28 2006
New Revision: 47681
URL: http://svn.digium.com/view/asterisk?view=rev&rev=47681
Log:
start using the macros already present in chan_oss.c to parse
the configuration file.
I think they make this part of the code a lot more readable and consistent
and less error prone, especially because we can do the same parsing on
fields of the same type.
Modified:
team/rizzo/astobj2/channels/chan_sip.c
Modified: team/rizzo/astobj2/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/rizzo/astobj2/channels/chan_sip.c?view=diff&rev=47681&r1=47680&r2=47681
==============================================================================
--- team/rizzo/astobj2/channels/chan_sip.c (original)
+++ team/rizzo/astobj2/channels/chan_sip.c Wed Nov 15 12:24:28 2006
@@ -15631,6 +15631,34 @@
return tmpc;
}
+/*
+ * Helper macros to parse config arguments. They will go in a common
+ * header file if their usage is globally accepted. In the meantime,
+ * we define them here. Typical usage is as below.
+ * Remember to open a block right before M_START (as it declares
+ * some variables) and use the M_* macros WITHOUT A SEMICOLON:
+ *
+ * {
+ * M_START(v->name, v->value)
+ *
+ * M_BOOL("dothis", x->flag1)
+ * M_STR("name", x->somestring)
+ * M_F("bar", some_c_code)
+ * M_END(some_final_statement)
+ * ... other code in the block
+ * }
+ *
+ * XXX NOTE these macros should NOT be replicated in other parts of asterisk.
+ * Likely we will come up with a better way of doing config file parsing.
+ */
+#define M_START(var, val) \
+ char *__s = var; char *__val = val;
+#define M_END(x) x;
+#define M_F(tag, f) if (!strcasecmp((__s), tag)) { f; } else
+#define M_BOOL(tag, dst) M_F(tag, (dst) = ast_true(__val) )
+#define M_UINT(tag, dst) M_F(tag, (dst) = strtoul(__val, NULL, 0) )
+#define M_STR(tag, dst) M_F(tag, ast_copy_string(dst, __val, sizeof(dst)))
+
/*!
\brief Handle flag-type options common to configuration of devices - users and peers
\param flags array of two struct ast_flags
@@ -15963,77 +15991,57 @@
strcpy(user->mohinterpret, default_mohinterpret);
strcpy(user->mohsuggest, default_mohsuggest);
for (; v; v = v->next) {
+ M_START(v->name, v->value);
if (handle_common_options(&userflags[0], &mask[0], v))
continue;
- if (!strcasecmp(v->name, "context")) {
- ast_copy_string(user->context, v->value, sizeof(user->context));
- } else if (!strcasecmp(v->name, "subscribecontext")) {
- ast_copy_string(user->subscribecontext, v->value, sizeof(user->subscribecontext));
- } else if (!strcasecmp(v->name, "setvar")) {
- user->chanvars = add_var(v->value, user->chanvars);
- } else if (!strcasecmp(v->name, "permit") ||
- !strcasecmp(v->name, "deny")) {
- user->ha = ast_append_ha(v->name, v->value, user->ha);
- } else if (!strcasecmp(v->name, "allowtransfer")) {
- user->allowtransfer = ast_true(v->value) ? TRANSFER_OPENFORALL : TRANSFER_CLOSED;
- } else if (!strcasecmp(v->name, "secret")) {
- ast_copy_string(user->secret, v->value, sizeof(user->secret));
- } else if (!strcasecmp(v->name, "md5secret")) {
- ast_copy_string(user->md5secret, v->value, sizeof(user->md5secret));
- } else if (!strcasecmp(v->name, "callerid")) {
- ast_callerid_split(v->value, user->cid_name, sizeof(user->cid_name), user->cid_num, sizeof(user->cid_num));
- } else if (!strcasecmp(v->name, "fullname")) {
- ast_copy_string(user->cid_name, v->value, sizeof(user->cid_name));
- } else if (!strcasecmp(v->name, "cid_number")) {
- ast_copy_string(user->cid_num, v->value, sizeof(user->cid_num));
- } else if (!strcasecmp(v->name, "callgroup")) {
- user->callgroup = ast_get_group(v->value);
- } else if (!strcasecmp(v->name, "pickupgroup")) {
- user->pickupgroup = ast_get_group(v->value);
- } else if (!strcasecmp(v->name, "language")) {
- ast_copy_string(user->language, v->value, sizeof(user->language));
- } else if (!strcasecmp(v->name, "mohinterpret")
- || !strcasecmp(v->name, "musicclass") || !strcasecmp(v->name, "musiconhold")) {
- ast_copy_string(user->mohinterpret, v->value, sizeof(user->mohinterpret));
- } else if (!strcasecmp(v->name, "mohsuggest")) {
- ast_copy_string(user->mohsuggest, v->value, sizeof(user->mohsuggest));
- } else if (!strcasecmp(v->name, "accountcode")) {
- ast_copy_string(user->accountcode, v->value, sizeof(user->accountcode));
- } else if (!strcasecmp(v->name, "call-limit")) {
+ M_STR("context", user->context)
+ M_STR("subscribecontext", user->subscribecontext)
+ M_F("setvar", user->chanvars = add_var(v->value, user->chanvars))
+ M_F("permit", user->ha = ast_append_ha(v->name, v->value, user->ha))
+ M_F("deny", user->ha = ast_append_ha(v->name, v->value, user->ha))
+ M_F("allowtransfer", user->allowtransfer = ast_true(v->value) ? TRANSFER_OPENFORALL : TRANSFER_CLOSED)
+ M_STR("secret", user->secret)
+ M_STR("md5secret", user->md5secret)
+ M_F("callerid", ast_callerid_split(v->value, user->cid_name, sizeof(user->cid_name), user->cid_num, sizeof(user->cid_num)))
+ M_STR("fullname", user->cid_name)
+ M_STR("cid_number", user->cid_num)
+ M_F("callgroup", user->callgroup = ast_get_group(v->value))
+ M_F("pickupgroup", user->pickupgroup = ast_get_group(v->value))
+ M_STR("language", user->language)
+ M_STR("mohinterpret", user->mohinterpret)
+ M_STR("musicclass", user->mohinterpret)
+ M_STR("musiconhold", user->mohinterpret)
+ M_STR("mohsuggest", user->mohsuggest)
+ M_STR("accountcode", user->accountcode)
+ M_F("call-limit", {
user->call_limit = atoi(v->value);
if (user->call_limit < 0)
- user->call_limit = 0;
- } else if (!strcasecmp(v->name, "amaflags")) {
+ user->call_limit = 0;} )
+ M_F("amaflags", {
format = ast_cdr_amaflags2int(v->value);
if (format < 0) {
ast_log(LOG_WARNING, "Invalid AMA Flags: %s at line %d\n", v->value, v->lineno);
} else {
user->amaflags = format;
- }
- } else if (!strcasecmp(v->name, "allow")) {
- ast_parse_allow_disallow(&user->prefs, &user->capability, v->value, 1);
- } else if (!strcasecmp(v->name, "disallow")) {
- ast_parse_allow_disallow(&user->prefs, &user->capability, v->value, 0);
- } else if (!strcasecmp(v->name, "autoframing")) {
- user->autoframing = ast_true(v->value);
- } else if (!strcasecmp(v->name, "callingpres")) {
+ } })
+ M_F("allow", ast_parse_allow_disallow(&user->prefs, &user->capability, v->value, 1))
+ M_F("disallow", ast_parse_allow_disallow(&user->prefs, &user->capability, v->value, 0))
+ M_BOOL("autoframing", user->autoframing)
+ M_F("callingpres", {
user->callingpres = ast_parse_caller_presentation(v->value);
if (user->callingpres == -1)
- user->callingpres = atoi(v->value);
- } else if (!strcasecmp(v->name, "maxcallbitrate")) {
+ user->callingpres = atoi(v->value);} )
+ M_F("maxcallbitrate", {
user->maxcallbitrate = atoi(v->value);
if (user->maxcallbitrate < 0)
- user->maxcallbitrate = default_maxcallbitrate;
- } else if (!strcasecmp(v->name, "t38pt_udptl")) {
- ast_set2_flag(&user->flags[1], ast_true(v->value), SIP_PAGE2_T38SUPPORT_UDPTL);
+ user->maxcallbitrate = default_maxcallbitrate;} )
+ M_F("t38pt_udptl", ast_set2_flag(&user->flags[1], ast_true(v->value), SIP_PAGE2_T38SUPPORT_UDPTL))
#ifdef WHEN_WE_HAVE_T38_FOR_OTHER_TRANSPORTS
- } else if (!strcasecmp(v->name, "t38pt_rtp")) {
- ast_set2_flag(&user->flags[1], ast_true(v->value), SIP_PAGE2_T38SUPPORT_RTP);
- } else if (!strcasecmp(v->name, "t38pt_tcp")) {
- ast_set2_flag(&user->flags[1], ast_true(v->value), SIP_PAGE2_T38SUPPORT_TCP);
+ M_F("t38pt_rtp", ast_set2_flag(&user->flags[1], ast_true(v->value), SIP_PAGE2_T38SUPPORT_RTP))
+ M_F("t38pt_tcp", ast_set2_flag(&user->flags[1], ast_true(v->value), SIP_PAGE2_T38SUPPORT_TCP))
#endif
- }
+ M_END(/* */)
}
ast_copy_flags(&user->flags[0], &userflags[0], mask[0].flags);
ast_copy_flags(&user->flags[1], &userflags[1], mask[1].flags);
More information about the asterisk-commits
mailing list