char *p;
sofia_profile_t *profile = NULL;
const char *exclude_contact = NULL;
- const char *user_replacement = NULL;
char *reply = "error/facility_not_subscribed";
if (!cmd) {
if (session) {
switch_channel_t *channel = switch_core_session_get_channel(session);
exclude_contact = switch_channel_get_variable(channel, "sip_exclude_contact");
- user_replacement = switch_channel_get_variable(channel, "sip_contact_user_replacement");
}
reply = "error/user_not_registered";
}
- if (user_replacement) {
- int urlcount = 0;
- int copyerr = 0;
- char *newreply = NULL;
- char *urlstart = NULL;
- char *newptr = NULL;
- char *bufend = NULL;
- char *str = reply;
- switch_size_t copysize = 0;
- switch_size_t replacesize = strlen(user_replacement);
- switch_size_t allocsize = 0;
-
- /* first pass to count how many URLs we have */
- while ((urlstart = strcasestr(str, "sip:")) || (urlstart = strcasestr(str, "sips:"))) {
- urlcount++;
- str = urlstart + 4;
- }
-
- if (!urlcount) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "sofia_contact(): no sip URLs found to replace the user\n");
- copyerr++;
- goto copydone;
- }
-
- /* this allocates a bit more than needed but better safe than sorry doing more funky math */
- allocsize = strlen(reply) + (urlcount * replacesize);
- newreply = switch_core_session_alloc(session, allocsize);
- if (!newreply) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "sofia_contact(): no buffer space available for replacement\n");
- copyerr++;
- goto copydone;
- }
-
- /* get a working pointer to the new reply */
- newptr = newreply;
-
- /* pointer to the end of the allocated buffer for safety checks */
- bufend = newreply + allocsize - 1;
- *bufend = 0;
-
- /* go thru all the urls and replace the user part */
- str = reply;
- while ((urlstart = strcasestr(str, "sip:")) || (urlstart = strcasestr(str, "sips:"))) {
-
- /* found an URL, copy up to the start of the url */
- copysize = ( urlstart - str ) + 4;
-
- /* double check boundaries before copying anything at all (this should not happen) */
- if ((newptr + copysize + replacesize) >= bufend) {
- copyerr++;
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "sofia_contact(): wow buffer was not big enough!\n");
- break;
- }
-
- /* copy the original contact string except for the user */
- memcpy(newptr, str, copysize);
- newptr += copysize;
-
- /* copy the user replacement */
- memcpy(newptr, user_replacement, replacesize);
- newptr += replacesize;
-
- /* skip the original user part */
- str = strchr(urlstart, '@');
- if (!str) {
- copyerr++;
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "sofia_contact(): not host part found for contact\n");
- break;
- }
- /* continue searching for the next sip: URL */
- }
-
-copydone:
- if (!copyerr) {
- /* copy the remaining reply string */
- copysize = strlen(str);
- if ((newptr + copysize) >= bufend) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "sofia_contact(): wow buffer was not big enough, close, but not enough!\n");
- } else {
- strcpy(newptr, str);
- reply = newreply;
- }
- } else {
- reply = "error/replacement error";
- }
- }
-
stream->write_function(stream, "%s", reply);
reply = NULL;
SWITCH_DECLARE(const char *) switch_core_banner(void)
{
-#if 0
+
return ("\n"
" _____ ______ _____ _____ ____ _ _ \n"
" | ___| __ ___ ___/ ___\\ \\ / /_ _|_ _/ ___| | | | \n"
"* FreeSWITCH (http://www.freeswitch.org) *\n"
"* Paypal Donations Appreciated: paypal@freeswitch.org *\n"
"* Brought to you by ClueCon http://www.cluecon.com/ *\n" "************************************************************\n" "\n");
-#else
- return (
-"\n _____ ___ ___ _ _ _____ _ \n"
-"/ ___| | \\/ | | (_) | __ \\ | | \n"
-"\\ `--. __ _ _ __ __ _ ___ _ __ ___ __ _ | . . | ___ __| |_ __ _ | | \\/ __ _| |_ _____ ____ _ _ _ \n"
-" `--. \\/ _` | '_ \\ / _` |/ _ \\| '_ ` _ \\ / _` | | |\\/| |/ _ \\/ _` | |/ _` | | | __ / _` | __|/ _ \\ \\ /\\ / / _` | | | |\n"
-"/\\__/ / (_| | | | | (_| | (_) | | | | | | (_| | | | | | __/ (_| | | (_| | | |_\\ \\ (_| | |_| __/\\ V V / (_| | |_| |\n"
-"\\____/ \\__,_|_| |_|\\__, |\\___/|_| |_| |_|\\__,_| \\_| |_/\\___|\\__,_|_|\\__,_| \\____/\\__,_|\\__|\\___| \\_/\\_/ \\__,_|\\__, |\n"
-" __/ | __/ |\n"
-" |___/ |___/ \n"
- "************************************************************\n"
- "* Powered by: FreeSWITCH (http://www.freeswitch.org) *\n"
- "************************************************************\n" "\n");
-#endif
}