[svn-commits] bkruse: branch group/appdocsxml r128246 - in /team/group/appdocsxml: apps/ in...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Sat Jul 5 16:08:52 CDT 2008


Author: bkruse
Date: Sat Jul  5 16:08:52 2008
New Revision: 128246

URL: http://svn.digium.com/view/asterisk?view=rev&rev=128246
Log:
I think this works :D

Modified:
    team/group/appdocsxml/apps/app_dial.c
    team/group/appdocsxml/include/asterisk/module.h
    team/group/appdocsxml/main/pbx.c

Modified: team/group/appdocsxml/apps/app_dial.c
URL: http://svn.digium.com/view/asterisk/team/group/appdocsxml/apps/app_dial.c?view=diff&rev=128246&r1=128245&r2=128246
==============================================================================
--- team/group/appdocsxml/apps/app_dial.c (original)
+++ team/group/appdocsxml/apps/app_dial.c Sat Jul  5 16:08:52 2008
@@ -2453,7 +2453,7 @@
 	else
 		ast_add_extension2(con, 1, "s", 1, NULL, NULL, "KeepAlive", ast_strdup(""), ast_free_ptr, "app_dial");
 
-	res = ast_register_application(app, dial_exec, synopsis, descrip);
+	res = ast_register_application_xml(app, dial_exec);
 	res |= ast_register_application(rapp, retrydial_exec, rsynopsis, rdescrip);
 
 	return res;

Modified: team/group/appdocsxml/include/asterisk/module.h
URL: http://svn.digium.com/view/asterisk/team/group/appdocsxml/include/asterisk/module.h?view=diff&rev=128246&r1=128245&r2=128246
==============================================================================
--- team/group/appdocsxml/include/asterisk/module.h (original)
+++ team/group/appdocsxml/include/asterisk/module.h Sat Jul  5 16:08:52 2008
@@ -401,6 +401,7 @@
 int ast_register_application2(const char *app, int (*execute)(struct ast_channel *, void *),
 				     const char *synopsis, const char *description, void *mod);
 
+#define ast_register_application_xml(app, execute, synopsis, description) ast_register_application_xml_real(app, execute, synopsis, description, ast_module_info->self)
 /*!
  * \brief Register an application.
  *
@@ -418,7 +419,7 @@
  * \retval 0 success
  * \retval -1 failure.
  */
-int ast_register_application_xml(const char *app, int (*execute)(struct ast_channel *, void *), void *mod);
+int ast_register_application_xml_real(const char *app, int (*execute)(struct ast_channel *, void *), void *mod);
 
 
 /*! 

Modified: team/group/appdocsxml/main/pbx.c
URL: http://svn.digium.com/view/asterisk/team/group/appdocsxml/main/pbx.c?view=diff&rev=128246&r1=128245&r2=128246
==============================================================================
--- team/group/appdocsxml/main/pbx.c (original)
+++ team/group/appdocsxml/main/pbx.c Sat Jul  5 16:08:52 2008
@@ -331,7 +331,7 @@
 static unsigned int hashtab_hash_labels(const void *obj);
 static void __ast_internal_context_destroy( struct ast_context *con);
 #ifdef XML_DOCUMENTATION
-mxml_node_t *documentation_tree;
+mxml_node_t *documentation_tree = NULL;
 #endif
 
 /* a func for qsort to use to sort a char array */
@@ -4318,8 +4318,6 @@
 	FILE *xmldoc;
 	mxml_node_t *node;
 
-	ast_log(LOG_DEBUG, "************** LOADING XML DOCUMENTATION ********************\n");
-
 	/* For now, I just throw away cdata */
 	xmldoc = fopen(FILE_XML_DOC, "r");
 
@@ -4328,13 +4326,11 @@
 		return 1;
 	}
 
-	documentation_tree = mxmlLoadFile(NULL, xmldoc, MXML_TEXT_CALLBACK);
+	documentation_tree = mxmlLoadFile(NULL, xmldoc, MXML_OPAQUE_CALLBACK);
 
 	fclose(xmldoc);
 
 	node = mxmlFindElement(documentation_tree, documentation_tree, "application", "name", "Dial", MXML_DESCEND);
-
-	ast_log(LOG_WARNING, "Testing: ********** '%s'", node->value.opaque);
 
 	/* Ok, let's now process it. */
 	/* Check for errors in loading the doc */
@@ -4343,11 +4339,21 @@
 }
 
 /*! \brief Dynamically register a new dial plan application */
-int ast_register_application_xml(const char *app, int (*execute)(struct ast_channel *, void *), void *mod)
+int ast_register_application_xml_real(const char *app, int (*execute)(struct ast_channel *, void *), void *mod)
 {
 	struct ast_app *tmp, *cur = NULL;
 	char tmps[80];
+	char *strapp;
 	int length, res;
+	mxml_node_t *node, *desc, *syn;
+
+	node = desc = syn = NULL;
+
+	/* XXX If we do not have documentation, should we still register the application? */
+	if(!documentation_tree) {
+	    ast_log(LOG_WARNING, "Cannot get description or synopsis for application, loading XML documentation failed.\n");
+	    return -1;
+	}
 
 	AST_RWLIST_WRLOCK(&apps);
 	AST_RWLIST_TRAVERSE(&apps, tmp, list) {
@@ -4365,11 +4371,29 @@
 		AST_RWLIST_UNLOCK(&apps);
 		return -1;
 	}
+	
+	strapp = ast_strdup(app);	
+	node = mxmlFindElement(documentation_tree, documentation_tree, "application", "name", strapp, MXML_DESCEND);
+
+	if(!node) {
+	    ast_log(LOG_WARNING, "Cannot find application documentation for app: '%s'\n", app);
+	    return -1;
+	}
+
+	syn = mxmlFindElement(node, documentation_tree, "synopsis", NULL, NULL, MXML_DESCEND);
+	desc = mxmlFindElement(node, documentation_tree, "description", NULL, NULL, MXML_DESCEND);
+    
+	if(!syn || !desc || !syn->child || !desc->child) {
+
+	    ast_log(LOG_WARNING, "Cannot find Application description or synopsis for app: '%s'\n", app);
+	    return -1;
+
+	}
 
 	strcpy(tmp->name, app);
 	tmp->execute = execute;
-	//tmp->synopsis = synopsis;
-	//tmp->description = description;
+	tmp->synopsis = syn->child->value.opaque;
+        tmp->description = desc->child->value.opaque;
 	tmp->module = mod;
 
 	/* Store in alphabetical order */




More information about the svn-commits mailing list