Index: apps/app_page.c =================================================================== --- apps/app_page.c (revision 18867) +++ apps/app_page.c (working copy) @@ -56,7 +56,8 @@ "caller is dumped into the conference as a speaker and the room is\n" "destroyed when the original caller leaves. Valid options are:\n" " d - full duplex audio\n" -" q - quiet, do not play beep to caller\n"; +" q - quiet, do not play beep to caller\n" +" n - do not call originating extension"; STANDARD_LOCAL_USER; @@ -65,11 +66,13 @@ enum { PAGE_DUPLEX = (1 << 0), PAGE_QUIET = (1 << 1), + PAGE_NOORIGINATE = (1 << 2) } page_opt_flags; AST_APP_OPTIONS(page_opts, { AST_APP_OPTION('d', PAGE_DUPLEX), AST_APP_OPTION('q', PAGE_QUIET), + AST_APP_OPTION('n', PAGE_NOORIGINATE), }); struct calloutdata { @@ -144,6 +147,7 @@ char *options; char *tech, *resource; char meetmeopts[80]; + char tmpname[AST_CHANNEL_NAME]; struct ast_flags flags = { 0 }; unsigned int confid = rand(); struct ast_app *app; @@ -177,6 +181,12 @@ snprintf(meetmeopts, sizeof(meetmeopts), "%ud|%sqxdw", confid, ast_test_flag(&flags, PAGE_DUPLEX) ? "" : "m"); while ((tech = strsep(&tmp, "&"))) { if ((resource = strchr(tech, '/'))) { + if (ast_test_flag(&flags, PAGE_NOORIGINATE)) { + ast_copy_string(tmpname, tech, sizeof(tmpname)); + strncat(tmpname, "-", sizeof(tmpname) - 1); + if (strncasecmp(tmpname, chan->name, strlen(tmpname)) == 0) + continue; // matched on the originating channel, skip this one so we don't call the phone from which the page is occuring + } *resource++ = '\0'; launch_page(chan, meetmeopts, tech, resource); } else {