Hi,
i'm adding remote party id information to certain SIP messages (to those destined to the PSTN gateway). After doing that, i try to search() the "Remote-Party-ID" header field for a specific string, and it seems to me that search() only works on the initial (received) SIP message rather than on the "current" modified message.
Is that assumption correct? (i hope it's not :)
If yes, is there another way to search SER's rpid information for a specific string?
config snippet:
if (!is_rpid_user_e164()) { append_rpid_hf(); xlog("L_INFO", "rpid added"); if (search("Remote-Party-ID:.*@1005")) { xlog("L_INFO", "rpid search succeeded"); };
...
thanx
axelm
Hello,
On Monday 27 October 2003 15:32, Alexander Mayrhofer wrote:
i'm adding remote party id information to certain SIP messages (to those destined to the PSTN gateway). After doing that, i try to search() the "Remote-Party-ID" header field for a specific string, and it seems to me that search() only works on the initial (received) SIP message rather than on the "current" modified message.
Is that assumption correct? (i hope it's not :)
Your assumtion is correct. Search, insert, replace etc. only work on the original request. And the changes are stored as "diffs" until the request gets on the wire again.
If yes, is there another way to search SER's rpid information for a specific string?
I fear there is currently no way to search this information in a modified request.
Regards Nils
config snippet:
if (!is_rpid_user_e164()) { append_rpid_hf(); xlog("L_INFO", "rpid added"); if (search("Remote-Party-ID:.*@1005")) { xlog("L_INFO", "rpid search succeeded"); };
...
thanx
axelm
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
On (27.10.03 16:03), Nils Ohlmeier wrote:
If yes, is there another way to search SER's rpid information for a specific string?
I fear there is currently no way to search this information in a modified request.
not anymore ;)
I've made a small change to the auth module which adds the function search_rpid() to the module. Seems to work for me, here's a diff (the original sources are a bit outdated, sorry, so ymmv when patching):
As usual, feel free to add the change to the upstream sources if it qualifies.
cheers
axelm
Index: at43-authmod/README diff -c at43-authmod/README:1.1 at43-authmod/README:1.2 *** at43-authmod/README:1.1 Tue Oct 28 13:44:18 2003 --- at43-authmod/README Tue Oct 28 13:51:09 2003 *************** *** 34,39 **** --- 34,40 ---- 1.4.3. consume_credentials() 1.4.4. is_rpid_user_e164() 1.4.5. append_rpid_hf + 1.4.6. search_rpid()
2. Developer's Guide 3. Frequently Asked Questions *************** *** 47,52 **** --- 48,54 ---- 1-6. consume_credentials example 1-7. is_rpid_user_e164 usage 1-8. append_rpid_hf + 1-9. search_rpid _________________________________________________________
Chapter 1. User's Guide *************** *** 238,243 **** --- 240,259 ---- Example 1-8. append_rpid_hf ... append_rpid_hf(); # Append Remote-Party-ID header field + ... + _________________________________________________________ + + 1.4.5. search_rpid + + Searches stored Remote-Party-ID value for given text. Returns true + if text is found, false otherwise. This function does plain text + comparison, no regular expressions. Searches are case sensitive. + + Example 1-9. search_rpid() + ... + if (search_rpid("1234")); # Check if RPID contains string 1234 + # do something here + }; ... _________________________________________________________
Index: at43-authmod/auth_mod.c diff -c at43-authmod/auth_mod.c:1.1 at43-authmod/auth_mod.c:1.2 *** at43-authmod/auth_mod.c:1.1 Tue Oct 28 13:44:18 2003 --- at43-authmod/auth_mod.c Tue Oct 28 13:51:09 2003 *************** *** 1,5 **** /* ! * $Id: auth_mod.c,v 1.1 2003/10/28 12:44:18 axelm Exp $ * * Digest Authentication Module * --- 1,5 ---- /* ! * $Id: auth_mod.c,v 1.2 2003/10/28 12:51:09 axelm Exp $ * * Digest Authentication Module * *************** *** 112,117 **** --- 112,118 ---- {"consume_credentials", consume_credentials, 0, 0, REQUEST_ROUTE}, {"is_rpid_user_e164", is_rpid_user_e164, 0, 0, REQUEST_ROUTE}, {"append_rpid_hf", append_rpid_hf, 0, 0, REQUEST_ROUTE}, + {"search_rpid", search_rpid, 1, 0, REQUEST_ROUTE}, {"pre_auth", (cmd_function)pre_auth, 0, 0, 0 }, {"post_auth", (cmd_function)post_auth, 0, 0, 0 }, {0, 0, 0, 0, 0} Index: at43-authmod/rpid.c diff -c at43-authmod/rpid.c:1.1 at43-authmod/rpid.c:1.2 *** at43-authmod/rpid.c:1.1 Tue Oct 28 13:44:18 2003 --- at43-authmod/rpid.c Tue Oct 28 13:51:09 2003 *************** *** 1,5 **** /* ! * $Id: rpid.c,v 1.1 2003/10/28 12:44:18 axelm Exp $ * * Remote-Party-ID related functions * --- 1,5 ---- /* ! * $Id: rpid.c,v 1.2 2003/10/28 12:51:09 axelm Exp $ * * Remote-Party-ID related functions * *************** *** 200,203 **** --- 200,241 ---- rpid.s = _rpid->s; rpid.len = _rpid->len; DBG("save_rpid(): rpid value is '%.*s'\n", _rpid->len, ZSW(_rpid->s)); + } + + /* + * Search RPID for text. does not do regex + * Alexander Mayrhofer axelm@nic.at + */ + int search_rpid(struct sip_msg* _m, char* _s1) { + + char* s; + int search_rpid_result; + + search_rpid_result = -1; + + if (!rpid.len) { + LOG(L_ERR, "search_rpid(): RPID is empty"); + return -1; + } + + s = pkg_malloc(rpid.len+1); + if (!s) { + LOG(L_ERR, "search_rpid(): out of memory"); + return -1; + } + + memset(s, 0, rpid.len+1); + strncpy(s, rpid.s, rpid.len); + + if (strstr(s, _s1)) { + search_rpid_result = 1; + DBG("search_rpid(): search succeeded\n"); + } else { + DBG("search_rpid(): search failed\n"); + } + + if (s) { + pkg_free(s); + } + return search_rpid_result; } Index: at43-authmod/rpid.h diff -c at43-authmod/rpid.h:1.1 at43-authmod/rpid.h:1.2 *** at43-authmod/rpid.h:1.1 Tue Oct 28 13:44:18 2003 --- at43-authmod/rpid.h Tue Oct 28 13:51:09 2003 *************** *** 1,5 **** /* ! * $Id: rpid.h,v 1.1 2003/10/28 12:44:18 axelm Exp $ * * Remote-Party-ID related functions * --- 1,5 ---- /* ! * $Id: rpid.h,v 1.2 2003/10/28 12:51:09 axelm Exp $ * * Remote-Party-ID related functions * *************** *** 54,59 **** --- 54,64 ---- * Store rpid */ void save_rpid(str* _rpid); + + /* + * Search rpid + */ + int search_rpid(struct sip_msg* _m, char* _s1);
#endif /* RPID_H */