Module: kamailio
Branch: master
Commit: 89334293299f817d4ac2774ae60611839a031c73
URL: https://github.com/kamailio/kamailio/commit/89334293299f817d4ac2774ae606118…
Author: Huseyin Dikme <hueseyin.dikme(a)1und1.de>
Committer: Huseyin Dikme <hueseyin.dikme(a)1und1.de>
Date: 2017-07-04T14:40:12+02:00
core: cfg_get_default_value_by_name function has been implemented
- As cfg_get_by_name function uses handle to reach variable values,
this function will use instead orig_handle in order to reach
the initial values when the config group was registered. Read-only
variables will not be returned since cfg_reset function uses this function
in order to set back the default values, and this cannot be implemented on read-only variables.
---
Modified: src/core/cfg/cfg_ctx.c
Modified: src/core/cfg/cfg_ctx.h
---
Diff: https://github.com/kamailio/kamailio/commit/89334293299f817d4ac2774ae606118…
Patch: https://github.com/kamailio/kamailio/commit/89334293299f817d4ac2774ae606118…
---
diff --git a/src/core/cfg/cfg_ctx.c b/src/core/cfg/cfg_ctx.c
index 87ccda81c4..4c07996950 100644
--- a/src/core/cfg/cfg_ctx.c
+++ b/src/core/cfg/cfg_ctx.c
@@ -1359,6 +1359,74 @@ int cfg_get_by_name(cfg_ctx_t *ctx, str *group_name, unsigned int *group_id, str
return 0;
}
+/* retrieves the default value of a variable
+ * Return value:
+ * 0 - success
+ * -1 - error
+ * 1 - variable exists, but it is not readable
+ */
+int cfg_get_default_value_by_name(cfg_ctx_t *ctx, str *group_name, unsigned int *group_id, str *var_name,
+ void **val, unsigned int *val_type)
+{
+ cfg_group_t *group;
+ cfg_mapping_t *var;
+ void *p;
+ static str s; /* we need the value even
+ after the function returns */
+ cfg_group_inst_t *group_inst;
+
+ /* verify the context even if we do not need it now
+ to make sure that a cfg driver has called the function
+ (very very weak security) */
+ if (!ctx) {
+ LOG(L_ERR, "ERROR: cfg_get_by_name(): context is undefined\n");
+ return -1;
+ }
+
+ /* look-up the group and the variable */
+ if (cfg_lookup_var(group_name, var_name, &group, &var))
+ return -1;
+ else
+ {
+ if(var->def->type & CFG_READONLY) /* if variables exist then prevents resetting the read-only ones */
+ return -1;
+ }
+
+ if (var->def->on_change_cb) {
+ /* The variable cannot be retrieved, because the fixup
+ function may have changed it, and it is better to return
+ an error than an incorrect value */
+ return 1;
+ }
+
+ /* use the module's orig_handle to access the default registered value of the variable for any group*/
+ p = (group->orig_handle) + var->offset;
+
+ switch (CFG_VAR_TYPE(var)) {
+ case CFG_VAR_INT:
+ *val = (void *)(long)*(int *)p;
+ break;
+
+ case CFG_VAR_STRING:
+ *val = (void *)*(char **)p;
+ break;
+
+ case CFG_VAR_STR:
+ memcpy(&s, p, sizeof(str));
+ *val = (void *)&s;
+ break;
+
+ case CFG_VAR_POINTER:
+ *val = *(void **)p;
+ break;
+
+ }
+ *val_type = CFG_VAR_TYPE(var);
+
+ return 0;
+}
+
+
/* returns the description of a variable */
int cfg_help(cfg_ctx_t *ctx, str *group_name, str *var_name,
char **ch, unsigned int *input_type)
diff --git a/src/core/cfg/cfg_ctx.h b/src/core/cfg/cfg_ctx.h
index 9401daed77..2ecae7deaf 100644
--- a/src/core/cfg/cfg_ctx.h
+++ b/src/core/cfg/cfg_ctx.h
@@ -119,6 +119,9 @@ int cfg_rollback(cfg_ctx_t *ctx);
int cfg_get_by_name(cfg_ctx_t *ctx, str *group_name, unsigned int *group_id, str *var_name,
void **val, unsigned int *val_type);
+int cfg_get_default_value_by_name(cfg_ctx_t *ctx, str *group_name, unsigned int *group_id, str *var_name,
+ void **val, unsigned int *val_type);
+
/*! \brief returns the description of a variable */
int cfg_help(cfg_ctx_t *ctx, str *group_name, str *var_name,
char **ch, unsigned int *input_type);
<!-- Kamailio Pull Request Template -->
<!--
IMPORTANT:
- for detailed contributing guidelines, read:
https://github.com/kamailio/kamailio/blob/master/.github/CONTRIBUTING.md
- pull requests must be done to master branch, unless they are backports
of fixes from master branch to a stable branch
- backports to stable branches must be done with 'git cherry-pick -x ...'
- code is contributed under BSD for core and main components (tm, sl, auth, tls)
- code is contributed GPLv2 or a compatible license for the other components
- GPL code is contributed with OpenSSL licensing exception
-->
#### Pre-Submission Checklist
<!-- Go over all points below, and after creating the PR, tick all the checkboxes that apply -->
<!-- All points should be verified, otherwise, read the CONTRIBUTING guidelines from above-->
<!-- If you're unsure about any of these, don't hesitate to ask on sr-dev mailing list -->
- [x] Commit message has the format required by CONTRIBUTING guide
- [x] Commits are split per component (core, individual modules, libs, utils, ...)
- [x] Each component has a single commit (if not, squash them into one commit)
- [x] No commits to README files for modules (changes must be done to docbook files
in `doc/` subfolder, the README file is autogenerated)
#### Type Of Change
- [ ] Small bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds new functionality)
- [ ] Breaking change (fix or feature that would change existing functionality)
#### Checklist:
<!-- Go over all points below, and after creating the PR, tick the checkboxes that apply -->
- [ ] PR should be backported to stable branches
- [x] Tested changes locally
- [ ] Related to issue #XXXX (replace XXXX with an open issue number)
#### Description
<!-- Describe your changes in detail -->
kamcmd cfg.reset "group_name", cfg.reset has been created in order to reset all the variables of the referred group to be set to their initial values (default).
You can view, comment on, or merge this pull request online at:
https://github.com/kamailio/kamailio/pull/1181
-- Commit Summary --
* core: cfg_get_default_value_by_name function has been implemented
* cfg_rpc: configuration reset function has been implemented
-- File Changes --
M src/core/cfg/cfg_ctx.c (68)
M src/core/cfg/cfg_ctx.h (3)
M src/modules/cfg_rpc/cfg_rpc.c (56)
M src/modules/cfg_rpc/doc/rpc.xml (16)
-- Patch Links --
https://github.com/kamailio/kamailio/pull/1181.patchhttps://github.com/kamailio/kamailio/pull/1181.diff
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/pull/1181
I try replace info PAI header by using subst() function in route block as
below:
route[3]
{
...
$var(fromU) = 22227777;
...
subst('/^P-Asserted-Identity:(.*)sip:[^@]*@([a-zA-Z0-9.:]+)(
.*)$/P-Asserted-Identity:\1sip:$var(fromU)@\2\3/ig');
...
...
forward();
exit;
}
but when I read ngrep command output I catch P-Asserted-Identity header as
below:
+++++++++++++++++++++++++++++++++++++++++++++++
before route[3] processing:
INVITE sip:99992222@15.113.132.21:5060 SIP/2.0.
...
P-Asserted-Identity: "Display Name 7777" <sip:7777@101.14.101.245>.
...
+++++++++++++++++++++++++++++++++++++++++++++++
after route[3] processing:
INVITE sip:99992222@15.113.132.21:5060 SIP/2.0.
...
P-Asserted-Identity: "Display Name 7777"
<sip:22227777@101.14.101.245>.P-Asserted-Identity:
"Display Name 7777" <sip:7777@101.14.101.245>.
...
+++++++++++++++++++++++++++++++++++++++++++++++
Is it normal or bug behaviors?
Regards
CMA