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 */