Index: configure =================================================================== --- configure (revision 83212) +++ configure (working copy) @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac Revision: 81873 . +# From configure.ac Revision: 82386 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61. # @@ -710,6 +710,7 @@ DOT WGET RUBBER +KPATHSEA FETCH DOWNLOAD acx_pthread_config @@ -7156,6 +7157,47 @@ fi +# Extract the first word of "kpsewhich", so it can be a program name with args. +set dummy kpsewhich; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_path_KPATHSEA+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $KPATHSEA in + [\\/]* | ?:[\\/]*) + ac_cv_path_KPATHSEA="$KPATHSEA" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_KPATHSEA="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + test -z "$ac_cv_path_KPATHSEA" && ac_cv_path_KPATHSEA=":" + ;; +esac +fi +KPATHSEA=$ac_cv_path_KPATHSEA +if test -n "$KPATHSEA"; then + { echo "$as_me:$LINENO: result: $KPATHSEA" >&5 +echo "${ECHO_T}$KPATHSEA" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "${WGET}" != ":" ; then DOWNLOAD=${WGET} else @@ -41870,12 +41912,12 @@ DOT!$DOT$ac_delim WGET!$WGET$ac_delim RUBBER!$RUBBER$ac_delim +KPATHSEA!$KPATHSEA$ac_delim FETCH!$FETCH$ac_delim DOWNLOAD!$DOWNLOAD$ac_delim acx_pthread_config!$acx_pthread_config$ac_delim PTHREAD_CC!$PTHREAD_CC$ac_delim PTHREAD_LIBS!$PTHREAD_LIBS$ac_delim -PTHREAD_CFLAGS!$PTHREAD_CFLAGS$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then @@ -41917,6 +41959,7 @@ ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF +PTHREAD_CFLAGS!$PTHREAD_CFLAGS$ac_delim AST_DEVMODE!$AST_DEVMODE$ac_delim ALSA_LIB!$ALSA_LIB$ac_delim ALSA_INCLUDE!$ALSA_INCLUDE$ac_delim @@ -42013,7 +42056,6 @@ PGSQL_LIB!$PGSQL_LIB$ac_delim PGSQL_INCLUDE!$PGSQL_INCLUDE$ac_delim PGSQL_DIR!$PGSQL_DIR$ac_delim -PBX_PGSQL!$PBX_PGSQL$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then @@ -42055,6 +42097,7 @@ ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF +PBX_PGSQL!$PBX_PGSQL$ac_delim PRI_LIB!$PRI_LIB$ac_delim PRI_INCLUDE!$PRI_INCLUDE$ac_delim PRI_DIR!$PRI_DIR$ac_delim @@ -42151,7 +42194,6 @@ AST_DECLARATION_AFTER_STATEMENT!$AST_DECLARATION_AFTER_STATEMENT$ac_delim GSM_INTERNAL!$GSM_INTERNAL$ac_delim KDEINIT!$KDEINIT$ac_delim -KDEDIR!$KDEDIR$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then @@ -42193,6 +42235,7 @@ ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF +KDEDIR!$KDEDIR$ac_delim NETSNMP_CONFIG!$NETSNMP_CONFIG$ac_delim PG_CONFIG!$PG_CONFIG$ac_delim PTLIB_CONFIG!$PTLIB_CONFIG$ac_delim @@ -42221,7 +42264,7 @@ LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 26; then + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 27; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 Index: configure.ac =================================================================== --- configure.ac (revision 83212) +++ configure.ac (working copy) @@ -154,6 +154,7 @@ AC_PATH_PROG([DOT], [dot], :) AC_PATH_PROG([WGET], [wget], :) AC_PATH_PROG([RUBBER], [rubber], :) +AC_PATH_PROG([KPATHSEA], [kpsewhich], :) if test "${WGET}" != ":" ; then DOWNLOAD=${WGET} else Index: apps/app_meetme.c =================================================================== --- apps/app_meetme.c (revision 83212) +++ apps/app_meetme.c (working copy) @@ -3087,6 +3087,81 @@ return meetmemute(s, m, 0); } +static char mandescr_meetmelist[] = +"Description: Lists all users in a particular MeetMe conference.\n" +"MeetmeList will follow as separate events, followed by a final event called\n" +"MeetmeListComplete.\n" +"Variables:\n" +" *ActionId: \n" +" *Conference: \n"; + +static int action_meetmelist(struct mansession *s, const struct message *m) +{ + const char *actionid = astman_get_header(m, "ActionID"); + const char *conference = astman_get_header(m, "Conference"); + char idText[80] = ""; + struct ast_conference *cnf; + struct ast_conf_user *user; + int total = 0; + + if (!ast_strlen_zero(actionid)) + snprintf(idText, sizeof(idText), "ActionID: %s\r\n", actionid); + + if (AST_LIST_EMPTY(&confs)) { + astman_send_error(s, m, "No active conferences."); + return 0; + } + + astman_send_listack(s, m, "Meetme user list will follow", "start"); + + /* Find the right conference */ + AST_LIST_LOCK(&confs); + AST_LIST_TRAVERSE(&confs, cnf, list) { + /* If we ask for one particular, and this isn't it, skip it */ + if (!ast_strlen_zero(conference) && strcmp(cnf->confno, conference)) + continue; + + /* Show all the users */ + AST_LIST_TRAVERSE(&cnf->userlist, user, list) { + total++; + astman_append(s, + "Event: MeetmeList\r\n" + "%s" + "Conference: %s\r\n" + "UserNumber: %d\r\n" + "CallerIDNum: %s\r\n" + "CallerIDName: %s\r\n" + "Channel: %s\r\n" + "Admin: %s\r\n" + "Role: %s\r\n" + "MarkedUser: %s\r\n" + "Muted: %s\r\n" + "Talking: %s\r\n" + "\r\n", + idText, + cnf->confno, + user->user_no, + S_OR(user->chan->cid.cid_num, ""), + S_OR(user->chan->cid.cid_name, ""), + user->chan->name, + user->userflags & CONFFLAG_ADMIN ? "Yes" : "No", + user->userflags & CONFFLAG_MONITOR ? "Listen only" : user->userflags & CONFFLAG_TALKER ? "Talk only" : "Talk and listen", + user->userflags & CONFFLAG_MARKEDUSER ? "Yes" : "No", + user->adminflags & ADMINFLAG_MUTED ? "By admin" : user->adminflags & ADMINFLAG_SELFMUTED ? "By self" : "No", + user->talking > 0 ? "Yes" : user->talking == 0 ? "No" : "Not monitored"); + } + } + AST_LIST_UNLOCK(&confs); + /* Send final confirmation */ + astman_append(s, + "Event: MeetmeListComplete\r\n" + "EventList: Complete\r\n" + "ListItems: %d\r\n" + "%s" + "\r\n", total, idText); + return 0; +} + static void *recordthread(void *args) { struct ast_conference *cnf = args; @@ -4990,6 +5065,8 @@ action_meetmemute, "Mute a Meetme user"); res |= ast_manager_register("MeetmeUnmute", EVENT_FLAG_CALL, action_meetmeunmute, "Unmute a Meetme user"); + res |= ast_manager_register2("MeetmeList", EVENT_FLAG_CALL, + action_meetmelist, "List participants in a conference", mandescr_meetmelist); res |= ast_register_application(app4, channel_admin_exec, synopsis4, descrip4); res |= ast_register_application(app3, admin_exec, synopsis3, descrip3); res |= ast_register_application(app2, count_exec, synopsis2, descrip2); Index: doc/tex/Makefile =================================================================== --- doc/tex/Makefile (revision 83212) +++ doc/tex/Makefile (working copy) @@ -14,6 +14,15 @@ @echo "** generated. When complete, it will be ***" @echo "** located at asterisk.pdf. ***" @echo "**********************************************" +ifneq ($(findstring kpsewhich,$(KPATHSEA)),) +ifeq ($(findstring fncychap.sty,$(shell find `$(KPATHSEA) --expand-braces='$$(TEXMF)'| tr -d \! | sed 's/:/ /g'` -name fncychap.sty -print)),) + @echo + @echo "WARNING: The fncychap.sty document was not found" + @echo "On Ubuntu, install the texlive-latex-extra package." + @echo + @exit +endif +endif @cp asterisk.tex asterisk.tex.orig @sed -i -e 's/ASTERISKVERSION/$(ASTERISKVERSION)/' asterisk.tex @$(RUBBER) --pdf asterisk.tex Index: main/manager.c =================================================================== --- main/manager.c (revision 83212) +++ main/manager.c (working copy) @@ -2337,7 +2337,29 @@ return 0; } +static char mandescr_reload[] = +"Description: Send a reload event.\n" +"Variables: (Names marked with * are optional)\n" +" *ActionID: ActionID of this transaction\n" +" *Module: Name of the module to reload\n"; +/*! \brief Send a reload event */ +static int action_reload(struct mansession *s, const struct message *m) +{ + const char *actionid = astman_get_header(m, "ActionID"); + const char *module = astman_get_header(m, "Module"); + int res = ast_module_reload(S_OR(module, NULL)); + char idText[80] = ""; + + if (!ast_strlen_zero(actionid)) + snprintf(idText, sizeof(idText), "ActionID: %s\r\n", actionid); + if (res == 2) + astman_append(s, "Response: Success\r\n%s", idText); + else + astman_send_error(s, m, s == 0 ? "No such module" : "Module does not support reload"); + return 0; +} + /* * Done with the action handlers here, we start with the code in charge * of accepting connections and serving them. @@ -3307,6 +3329,7 @@ ast_manager_register2("WaitEvent", 0, action_waitevent, "Wait for an event to occur", mandescr_waitevent); ast_manager_register2("CoreSettings", EVENT_FLAG_SYSTEM, action_coresettings, "Show PBX core settings (version etc)", mandescr_coresettings); ast_manager_register2("CoreStatus", EVENT_FLAG_SYSTEM, action_corestatus, "Show PBX core status variables", mandescr_corestatus); + ast_manager_register2("Reload", EVENT_FLAG_SYSTEM, action_reload, "Send a reload event", mandescr_reload); ast_cli_register_multiple(cli_manager, sizeof(cli_manager) / sizeof(struct ast_cli_entry)); ast_extension_state_add(NULL, NULL, manager_state_cb, NULL); Index: makeopts.in =================================================================== --- makeopts.in (revision 83212) +++ makeopts.in (working copy) @@ -23,6 +23,7 @@ FETCH=@FETCH@ DOWNLOAD=@DOWNLOAD@ RUBBER=@RUBBER@ +KPATHSEA=@KPATHSEA@ BUILD_PLATFORM=@BUILD_PLATFORM@ BUILD_CPU=@BUILD_CPU@