Merge "funcs/func_holdintercept: Actually add the HOLD_INTERCEPT function"
authorJoshua Colp <jcolp@digium.com>
Wed, 21 Oct 2015 21:47:10 +0000 (16:47 -0500)
committerGerrit Code Review <gerrit2@gerrit.digium.api>
Wed, 21 Oct 2015 21:47:10 +0000 (16:47 -0500)
contrib/scripts/autosupport
include/asterisk/cdr.h
main/cdr.c
rest-api-templates/api.wiki.mustache
rest-api-templates/asterisk_processor.py

index 4d5ab59..e41215f 100644 (file)
@@ -74,7 +74,7 @@ if [ $MYUID -ne  0 ]; then
 fi
 
 SUPPORTED_MODULES="wcb4xxp wct4xxp wctc4xxp wctdm wctdm24xxp wcte11xp wcte12xp"
-RELATED_MODULES="$SUPPORTED_MODULES dahdi_dummy dahdi_transcode dahdi_vpmadt032_loader zaptel ztdummy zttranscode";
+RELATED_MODULES="$SUPPORTED_MODULES dahdi_dummy dahdi_transcode dahdi_vpmadt032_loader";
 
 OUTPUT_FILE="${FILE_PREFIX}${OUTPUT_FILE}"
 TARBALL_OUTPUT_FILE="${FILE_PREFIX}${TARBALL_OUTPUT_FILE}"
@@ -152,18 +152,16 @@ echo >> $OUTPUT;
 echo >> $OUTPUT;
 echo -n "."
 
-# Check for loaded Zaptel/DAHDI modules
-for module in dahdi zaptel; do
-  if [ -d /sys/module/$module ]; then
-    echo "------------------" >> $OUTPUT
-    echo "$module version:" >> $OUTPUT
-    echo "------------------" >> $OUTPUT
-    echo "/sys/module/$module/version: " >> $OUTPUT
-    cat /sys/module/$module/version 2> /dev/null >> $OUTPUT
-    echo "" >> $OUTPUT;
-    echo -n "."
-  fi
-done
+
+if [ -d /sys/module/dahdi ]; then
+  echo "------------------" >> $OUTPUT
+  echo "dahdi version:" >> $OUTPUT
+  echo "------------------" >> $OUTPUT
+  echo "/sys/module/dahdi/version: " >> $OUTPUT
+  cat /sys/module/dahdi/version 2> /dev/null >> $OUTPUT
+  echo "" >> $OUTPUT;
+  echo -n "."
+fi
 
 echo "------------------" >> $OUTPUT;
 echo "DAHDI TOOLS : dahdi_cfg --help" >> $OUTPUT;
@@ -188,13 +186,16 @@ asterisk -V >> $OUTPUT;
 echo >> $OUTPUT;
 # Add check to see if asterisk is running.
 if [ -e /var/run/asterisk.ctl ] || [ -e /var/run/asterisk/asterisk.ctl ]; then
-  for command in "show version" "core show version" "pri show version" "dahdi show version" "transcoder show" \
-      "core show uptime" "pri show spans" "misdn show stacks" "zap show channels" "dahdi show status" "dahdi show channels" \
-      "dahdi show channel 1" "core show channels" "skype show version" "skype show licenses" "skype show users" \
-      "skype show hostid" "show g729" "g729 show version" "g729 show licenses" "g729 show hostid" "fax show version" \
-      "fax show licenses" "fax show hostid" "fax show stats" "digium_phones show version" "digium_phones show alerts" \
-                       "digium_phones show applications" "digium_phones show firmwares" "digium_phones show lines" "digium_phones show networks" \
-                       "digium_phones show phones" "digium_phones show sessions" "digium_phones show settings" "digium_phones show translations" ;
+  for command in "core show version" "pri show version" "dahdi show version" "core show translation" \
+      "core show uptime" "core show settings" "core show sysinfo" "core show channels" \
+      "pri show spans" "dahdi show status" "dahdi show channels" "dahdi show channel 1" \
+      "pjsip show endpoints" "pjsip show registrations" "pjsip list channels" \
+      "sip show peers" "sip show registry" "sip show channels" "sip show subscriptions" "sip show settings" \
+      "show g729" "g729 show version" "g729 show licenses" "g729 show hostid" \
+      "digium_phones show version" "digium_phones show alerts" "digium_phones show applications" \
+      "digium_phones show firmwares" "digium_phones show lines" "digium_phones show networks" \
+                       "digium_phones show phones" "digium_phones show sessions" "digium_phones show settings" \
+      "digium_phones show translations" ;
        do
     echo "asterisk -rx \"$command\"" >> $OUTPUT;
     asterisk -rx "$command" >> $OUTPUT;
@@ -317,19 +318,17 @@ echo >> $OUTPUT;
 echo -n "."
 
 echo "----------------------------" >> $OUTPUT;
-echo "CAT OF DAHDI/ZAPTEL CHANNELS : cat /proc/dahdi/" >> $OUTPUT;
+echo "CAT OF DAHDI CHANNELS : cat /proc/dahdi/" >> $OUTPUT;
 echo "----------------------------" >> $OUTPUT;
-for tech in dahdi zaptel zap; do
-  if [ -d /proc/$tech/ ]; then
-    for file in $(ls /proc/$tech/ 2> /dev/null); do
-      echo "----------------------------" >> $OUTPUT;
-      echo "/proc/$tech/$file:" >> $OUTPUT;
-      cat /proc/$tech/$file >> $OUTPUT;
-      echo >> $OUTPUT;
-      echo -n "."
-    done
-  fi
-done
+if [ -d /proc/dahdi/ ]; then
+  for file in $(ls /proc/dahdi/ 2> /dev/null); do
+    echo "----------------------------" >> $OUTPUT;
+    echo "/proc/dahdi/$file:" >> $OUTPUT;
+    cat /proc/dahdi/$file >> $OUTPUT;
+    echo >> $OUTPUT;
+    echo -n "."
+  done
+fi
 echo >> $OUTPUT;
 
 echo "------------------" >> $OUTPUT;
@@ -371,7 +370,7 @@ for mod in $SUPPORTED_MODULES; do
 done
 
 echo "------------------------" >> $OUTPUT;
-echo "DAHDI/ZAPTEL MODULE INFO : modinfo" >> $OUTPUT;
+echo "DAHDI MODULE INFO : modinfo" >> $OUTPUT;
 echo "------------------------" >> $OUTPUT;
 for file in $(ls /lib/modules/$(uname -r)/dahdi/*.ko \
   /lib/modules/$(uname -r)/dahdi/*/*.ko\
@@ -518,26 +517,9 @@ collect_config_backup()
     TAR_FILES="$TAR_FILES /etc/dahdi*"
   fi
 
-  # Check for Zaptel Module configuration
-  if [ -f /etc/sysconfig/zaptel ]; then
-    TAR_FILES="$TAR_FILES /etc/sysconfig/zaptel*"
-  fi
-
-  # Check for Zaptel Module configuration (alternate location)
-  if [ -f /etc/default/zaptel ]; then
-    TAR_FILES="$TAR_FILES /etc/default/zaptel*"
-  fi
-
-  # Grab the dahdi/zaptel init scripts, in case they have been modified
-  for driver in dahdi zaptel; do
-    if [ -f /etc/init.d/$driver ]; then
-      TAR_FILES="$TAR_FILES /etc/init.d/$driver"
-    fi
-  done
-
-  # Check for zaptel.conf
-  if [ -f /etc/zaptel.conf ]; then
-    TAR_FILES="$TAR_FILES /etc/zaptel*"
+  # Grab the dahdi init scripts, in case they have been modified
+  if [ -f /etc/init.d/dahdi ]; then
+    TAR_FILES="$TAR_FILES /etc/init.d/dahdi"
   fi
 
   # Check for fxotune.conf
@@ -567,6 +549,9 @@ collect_config_backup()
   if [ -f /var/log/messages ]; then
     TAR_FILES="$TAR_FILES /var/log/messages"
   fi
+  if [ -f /var/log/syslog ]; then
+    TAR_FILES="$TAR_FILES /var/log/syslog"
+  fi
 
   [ -f $TARBALL_OUTPUT ] && rm -rf $TARBALL_OUTPUT
   [ -f $TARBALL_OUTPUT.gz ] && rm -rf $TARBALL_OUTPUT.gz
@@ -616,8 +601,8 @@ else
   echo "pci listing, dmesg, running processes, and kernel version"
   echo
   echo "2. A backup of elements of your configuration such as:"
-  echo "asterisk config files, license files, loaded dahdi/zaptel module"
-  echo "parameters, and other asterisk/dahdi/zaptel related files."
+  echo "asterisk config files, license files, loaded dahdi module"
+  echo "parameters, and other asterisk/dahdi related files."
   echo
   echo "Collect this information [y/n] ? "
   read files;
index 5654c38..f752f7f 100644 (file)
@@ -536,6 +536,36 @@ int ast_cdr_backend_suspend(const char *name);
 int ast_cdr_backend_unsuspend(const char *name);
 
 /*!
+ * \brief Register a CDR modifier
+ * \param name name associated with the particular CDR modifier
+ * \param desc description of the CDR modifier
+ * \param be function pointer to a CDR modifier
+ *
+ * Used to register a Call Detail Record modifier.
+ *
+ * This gives modules a chance to modify CDR fields before they are dispatched
+ * to registered backends (odbc, syslog, etc).
+ *
+ * \note The *modified* CDR will be passed to **all** registered backends for
+ * logging. For instance, if cdr_manager changes the CDR data, cdr_adaptive_odbc
+ * will also get the modified CDR.
+ *
+ * \retval 0 on success.
+ * \retval -1 on error
+ */
+int ast_cdr_modifier_register(const char *name, const char *desc, ast_cdrbe be);
+
+/*!
+ * \brief Unregister a CDR modifier
+ * \param name name of CDR modifier to unregister
+ * Unregisters a CDR modifier by its name
+ *
+ * \retval 0 The modifier unregistered successfully
+ * \retval -1 The modifier could not be unregistered at this time
+ */
+int ast_cdr_modifier_unregister(const char *name);
+
+/*!
  * \brief Disposition to a string
  * \param disposition input binary form
  * Converts the binary form of a disposition to string form.
index 8d7f53f..5e24075 100644 (file)
@@ -297,6 +297,9 @@ struct cdr_beitem {
 /*! \brief List of registered backends */
 static AST_RWLIST_HEAD_STATIC(be_list, cdr_beitem);
 
+/*! \brief List of registered modifiers */
+static AST_RWLIST_HEAD_STATIC(mo_list, cdr_beitem);
+
 /*! \brief Queued CDR waiting to be batched */
 struct cdr_batch_item {
        struct ast_cdr *cdr;
@@ -2678,7 +2681,7 @@ int ast_cdr_backend_unsuspend(const char *name)
        return success;
 }
 
-int ast_cdr_register(const char *name, const char *desc, ast_cdrbe be)
+static int cdr_generic_register(struct be_list *generic_list, const char *name, const char *desc, ast_cdrbe be)
 {
        struct cdr_beitem *i = NULL;
 
@@ -2690,11 +2693,11 @@ int ast_cdr_register(const char *name, const char *desc, ast_cdrbe be)
                return -1;
        }
 
-       AST_RWLIST_WRLOCK(&be_list);
-       AST_RWLIST_TRAVERSE(&be_list, i, list) {
+       AST_RWLIST_WRLOCK(generic_list);
+       AST_RWLIST_TRAVERSE(generic_list, i, list) {
                if (!strcasecmp(name, i->name)) {
                        ast_log(LOG_WARNING, "Already have a CDR backend called '%s'\n", name);
-                       AST_RWLIST_UNLOCK(&be_list);
+                       AST_RWLIST_UNLOCK(generic_list);
                        return -1;
                }
        }
@@ -2706,40 +2709,50 @@ int ast_cdr_register(const char *name, const char *desc, ast_cdrbe be)
        ast_copy_string(i->name, name, sizeof(i->name));
        ast_copy_string(i->desc, desc, sizeof(i->desc));
 
-       AST_RWLIST_INSERT_HEAD(&be_list, i, list);
-       AST_RWLIST_UNLOCK(&be_list);
+       AST_RWLIST_INSERT_HEAD(generic_list, i, list);
+       AST_RWLIST_UNLOCK(generic_list);
 
        return 0;
 }
 
-int ast_cdr_unregister(const char *name)
+int ast_cdr_register(const char *name, const char *desc, ast_cdrbe be)
+{
+       return cdr_generic_register(&be_list, name, desc, be);
+}
+
+int ast_cdr_modifier_register(const char *name, const char *desc, ast_cdrbe be)
+{
+       return cdr_generic_register((struct be_list *)&mo_list, name, desc, be);
+}
+
+static int ast_cdr_generic_unregister(struct be_list *generic_list, const char *name)
 {
        struct cdr_beitem *match = NULL;
        int active_count;
 
-       AST_RWLIST_WRLOCK(&be_list);
-       AST_RWLIST_TRAVERSE(&be_list, match, list) {
+       AST_RWLIST_WRLOCK(generic_list);
+       AST_RWLIST_TRAVERSE(generic_list, match, list) {
                if (!strcasecmp(name, match->name)) {
                        break;
                }
        }
 
        if (!match) {
-               AST_RWLIST_UNLOCK(&be_list);
+               AST_RWLIST_UNLOCK(generic_list);
                return 0;
        }
 
        active_count = ao2_container_count(active_cdrs_by_channel);
 
        if (!match->suspended && active_count != 0) {
-               AST_RWLIST_UNLOCK(&be_list);
+               AST_RWLIST_UNLOCK(generic_list);
                ast_log(AST_LOG_WARNING, "Unable to unregister CDR backend %s; %d CDRs are still active\n",
                        name, active_count);
                return -1;
        }
 
-       AST_RWLIST_REMOVE(&be_list, match, list);
-       AST_RWLIST_UNLOCK(&be_list);
+       AST_RWLIST_REMOVE(generic_list, match, list);
+       AST_RWLIST_UNLOCK(generic_list);
 
        ast_verb(2, "Unregistered '%s' CDR backend\n", name);
        ast_free(match);
@@ -2747,6 +2760,16 @@ int ast_cdr_unregister(const char *name)
        return 0;
 }
 
+int ast_cdr_unregister(const char *name)
+{
+       return ast_cdr_generic_unregister(&be_list, name);
+}
+
+int ast_cdr_modifier_unregister(const char *name)
+{
+       return ast_cdr_generic_unregister((struct be_list *)&mo_list, name);
+}
+
 struct ast_cdr *ast_cdr_dup(struct ast_cdr *cdr)
 {
        struct ast_cdr *newcdr;
@@ -3262,6 +3285,13 @@ static void post_cdr(struct ast_cdr *cdr)
                        continue;
                }
 
+               /* Modify CDR's */
+               AST_RWLIST_RDLOCK(&mo_list);
+               AST_RWLIST_TRAVERSE(&mo_list, i, list) {
+                       i->be(cdr);
+               }
+               AST_RWLIST_UNLOCK(&mo_list);
+
                if (ast_test_flag(cdr, AST_CDR_FLAG_DISABLE)) {
                        continue;
                }
index 73aa244..0a54a64 100644 (file)
@@ -67,7 +67,7 @@ h3. Header parameters
 
 h3. Error Responses
 {{#error_responses}}
-* {{code}} - {{{reason}}}
+* {{code}} - {{{wiki_reason}}}
 {{/error_responses}}
 {{/has_error_responses}}
 {{/operations}}
index ab8a8af..68a6799 100644 (file)
@@ -199,6 +199,8 @@ class AsteriskProcessor(SwaggerPostProcessor):
             raise SwaggerError("Summary should end with .", context)
         operation.wiki_summary = wikify(operation.summary or "")
         operation.wiki_notes = wikify(operation.notes or "")
+        for error_response in operation.error_responses:
+            error_response.wiki_reason = wikify(error_response.reason or "")
         operation.parse_body = (operation.body_parameter or operation.has_query_parameters) and True
 
     def process_parameter(self, parameter, context):