[Freeswitch-branches] [commit] r2808 - in freeswitch/branches/voctel: conf src/mod/applications/mod_phonecard

Freeswitch SVN voctel at freeswitch.org
Sat Sep 23 16:50:31 EDT 2006


Author: voctel
Date: Sat Sep 23 16:50:30 2006
New Revision: 2808

Modified:
   freeswitch/branches/voctel/conf/freeswitch.xml
   freeswitch/branches/voctel/src/mod/applications/mod_phonecard/mod_phonecard.c

Log:
laying the ground work

Modified: freeswitch/branches/voctel/conf/freeswitch.xml
==============================================================================
--- freeswitch/branches/voctel/conf/freeswitch.xml	(original)
+++ freeswitch/branches/voctel/conf/freeswitch.xml	Sat Sep 23 16:50:30 2006
@@ -378,7 +378,20 @@
         </profile>
       </profiles>
     </configuration>
+
+    <configuration name="phonecard.conf" description="Phonecard Configuration">
+      <settings>
+        <param name="debug" value="0"/>
+        <param name="db_hostname" value="localhost"> -->
+        <param name="db_port" value="4569"/>
+        <param name="db_name" value="freeswitch_phonecard"/>
+        <param name="db_username" value=""/>
+        <param name="db_password" value=""/>
+        <param name="sound_directory" value=""/>
+      </settings>
+    </configuration>  
   </section>
+
   <section name="dialplan" description="Regex/XML Dialplan">
     <!-- Valid fields in conditions:
          "dialplan, caller_id_name, ani, ani2, caller_id_number,

Modified: freeswitch/branches/voctel/src/mod/applications/mod_phonecard/mod_phonecard.c
==============================================================================
--- freeswitch/branches/voctel/src/mod/applications/mod_phonecard/mod_phonecard.c	(original)
+++ freeswitch/branches/voctel/src/mod/applications/mod_phonecard/mod_phonecard.c	Sat Sep 23 16:50:30 2006
@@ -1,160 +1,196 @@
-/* 
- * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
- * Copyright (C) 2005/2006, Anthony Minessale II <anthmct at yahoo.com>
- *
- * Version: MPL 1.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
- *
- * The Initial Developer of the Original Code is
- * Anthony Minessale II <anthmct at yahoo.com>
- * Portions created by the Initial Developer are Copyright (C)
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * 
- * Richard Cook <richard at voctel.com>
- * Anthony Minessale II <anthmct at yahoo.com>
- *
- *
- * mod_phonecard.c -- Calling Card Module
- *
- */
-#include <switch.h>
-
-//-- PostgreSQL 
-#include <libpq-fe.h>
-
-static const char modname[] = "mod_phonecard";
-static const char global_app_name[] = "phonecard";
-static char *global_cf_name = "phonecard.conf";
-
-static char *db_hostname = NULL;
-static char *db_name = NULL;
-static char *db_username = NULL;
-static char *db_password = NULL;
-static char *db_language = NULL;
-static char *db_table = NULL;
-static char *db_port = NULL;
-
-static int db_connected = 0;
-
-//-- PostgreSQL declarations
-PGconn *DBConn;
-
-switch_mutex_t *db_lock;
-
-//-- function used to connect/verify database connection
-static int phonecard_dbconnected(void) {
-    PGresult *result;
-
-	//-- check to see if we are already connected
-	if (db_connected) {
-        result = PQexec(DBConn,"SELECT 1");
-
-        PQclear(result);
-
-        //-- check for connectivity
-        if (PQstatus(DBConn)!= CONNECTION_OK) {
-            db_connected = 0;
-
-            PQreset(DBConn);
-
-            //-- log the database error
-			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "FATAL - Database connection lost '%s'\n", db_hostname);
-        }
-        else {
-			db_connected = 1;
-        }
-	}
-	else {
-		//-- we are not connected - so make the initial connection
-        DBConn = PQsetdbLogin(db_hostname, db_port, NULL, NULL, db_name, db_username, db_password);
-        if (PQstatus(DBConn) != CONNECTION_OK) {
-			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "FATAL - Couldn't connect to database server '%s'. \n", db_hostname);
-			db_connected = 0;
-		}
-		else {
-            switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Successfully connected to database '%s:%s'.\n", db_hostname, db_name);
-			db_connected = 1;
-		}
-	}
-
-	return db_connected;
-}
-
-//-- main application routine
-static void phonecard_main(switch_core_session_t *session, char *data)
-{
-	char *mydata = switch_core_session_strdup(session, data);
-
-	//--
+/* 
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2005/2006, Anthony Minessale II <anthmct at yahoo.com>
+ *
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * Anthony Minessale II <anthmct at yahoo.com>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * 
+ * Richard Cook <richard at voctel.com>
+ * Anthony Minessale II <anthmct at yahoo.com>
+ *
+ *
+ * mod_phonecard.c -- Calling Card Module
+ *
+ */
+#include <switch.h>
+
+//-- PostgreSQL 
+#include <libpq-fe.h>
+
+static const char modname[] = "mod_phonecard";
+static const char global_app_name[] = "phonecard";
+static char *global_cf_name = "phonecard.conf";
+
+static switch_memory_pool_t *module_pool = NULL;
+
+static struct {
+	int debug;
+	char *db_hostname;
+	char *db_port;
+	char *db_name;
+	char *db_username;
+	char *db_password;
+	int db_connected;
+	char *sound_folder;
+	switch_mutex_t *mutex;
+} globals;
+
+//-- PostgreSQL declarations
+PGconn *DBConn;
+
+switch_mutex_t *db_lock;
+
+//-- Function used to load the configuration file
+static switch_status_t load_config(void)
+{
+	switch_xml_t cfg, xml, settings, param;
+
+	memset(&globals, 0, sizeof(globals));
+
+	switch_mutex_init(&globals.mutex, SWITCH_MUTEX_NESTED, module_pool);
+
+	if (!(xml = switch_xml_open_cfg(global_cf_name, &cfg, NULL))) {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", global_cf_name);
+		return SWITCH_STATUS_TERM;
+	}
+
+	if ((settings = switch_xml_child(cfg, "settings"))) {
+		for (param = switch_xml_child(settings, "param"); param; param = param->next) {
+			char *var = (char *) switch_xml_attr_soft(param, "name");
+			char *val = (char *) switch_xml_attr_soft(param, "value");
+
+			if (!strcmp(var, "debug")) {
+				globals.debug = atoi(val);
+			} else if (!strcmp(var, "db_hostname")) {
+				globals.db_hostname = val;
+			} else if (!strcmp(var, "db_port")) {
+				globals.db_port = val;
+			} else if (!strcmp(var, "db_name")) {
+				globals.db_name = val;
+			} else if (!strcmp(var, "db_username")) {
+				globals.db_username = val;
+			} else if (!strcmp(var, "db_password")) {
+				globals.db_password = val;
+			} else if (!strcmp(var, "sound_folder")) {
+				globals.sound_folder = val;
+			}
+		}
+	}
+
+	//-- set the defaults
+	globals.db_connected = 0;
+
+	if (!globals.db_hostname)
+		globals.db_hostname = "localhost";
+
+	if (!globals.db_port)
+		globals.db_port = "5432";
+
+
+	//-- clean up
+	switch_xml_free(xml);
+
+	return SWITCH_STATUS_SUCCESS;
+}
+
+
+//-- main application routine
+static void phonecard_main(switch_core_session_t *session, char *data)
+{
+	switch_channel_t *channel = NULL;
+	char *mydata = switch_core_session_strdup(session, data);
+
+	channel = switch_core_session_get_channel(session);
+    assert(channel != NULL);
+
+	//--
 	if (!mydata) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Pool Failure\n");
 		return;
 	}
-
-
-	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Hello World!\n");
-}
-
-
-//-- application interface
-static const switch_application_interface_t phonecard_application_interface = {
-	/*.interface_name */ global_app_name,
-	/*.application_function */ phonecard_main, NULL, NULL, NULL,
-	/*.next*/ NULL
-};
-
-//-- module interface
-static switch_loadable_module_interface_t phonecard_module_interface = {
-	/*.module_name */ modname,
-	/*.endpoint_interface */ NULL,
-	/*.timer_interface */ NULL,
-	/*.dialplan_interface */ NULL,
-	/*.codec_interface */ NULL,
-	/*.application_interface */ &phonecard_application_interface,
-	/*.api_interface */ NULL,
-	/*.file_interface */ NULL,
-	/*.speech_interface */ NULL,
-	/*.directory_interface */ NULL
-};
-
-//-- called when the module is loaded
-SWITCH_MOD_DECLARE(switch_status_t) switch_module_load(const switch_loadable_module_interface_t **module_interface, char *filename)
-{
-	/* connect my internal structure to the blank pointer passed to me */
-	*module_interface = &phonecard_module_interface;
-
-	
-
-
-	/* indicate that the module should continue to be loaded */
-	return SWITCH_STATUS_SUCCESS;
-}
-
-/*
-  Called when the system shuts down
-  SWITCH_MOD_DECLARE(switch_status) switch_module_shutdown(void)
-  {
-  return SWITCH_STATUS_SUCCESS;
-  }
-*/
-
-/*
-  If it exists, this is called in it's own thread when the module-load completes
-  SWITCH_MOD_DECLARE(switch_status) switch_module_shutdown(void)
-  {
-  return SWITCH_STATUS_SUCCESS;
-  }
-*/
+
+	//-- say hello
+	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Hello World!\n");
+
+}
+
+//-- application interface
+static const switch_application_interface_t phonecard_application_interface = {
+	/*.interface_name */ global_app_name,
+	/*.application_function */ phonecard_main, NULL, NULL, NULL,
+	/*.next*/ NULL
+};
+
+//-- module interface
+static switch_loadable_module_interface_t phonecard_module_interface = {
+	/*.module_name */ modname,
+	/*.endpoint_interface */ NULL,
+	/*.timer_interface */ NULL,
+	/*.dialplan_interface */ NULL,
+	/*.codec_interface */ NULL,
+	/*.application_interface */ &phonecard_application_interface,
+	/*.api_interface */ NULL,
+	/*.file_interface */ NULL,
+	/*.speech_interface */ NULL,
+	/*.directory_interface */ NULL
+};
+
+//-- called when the module is loaded
+SWITCH_MOD_DECLARE(switch_status_t) switch_module_load(const switch_loadable_module_interface_t **module_interface, char *filename)
+{
+	//-- create the module pool
+	if (switch_core_new_memory_pool(&module_pool) != SWITCH_STATUS_SUCCESS) {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "OH OH no pool\n");
+		return SWITCH_STATUS_TERM;
+	}
+
+	//-- load the configuration
+	switch_status_t status = SWITCH_STATUS_SUCCESS;
+
+	if ((status =load_config()) != SWITCH_STATUS_SUCCESS) {
+		return status;
+	}
+
+	//-- connect my internal structure to the blank pointer passed to me
+	*module_interface = &phonecard_module_interface;
+
+
+	//-- indicate that the module should continue to be loaded
+	return SWITCH_STATUS_SUCCESS;
+}
+
+
+
+/*
+  Called when the system shuts down
+  SWITCH_MOD_DECLARE(switch_status) switch_module_shutdown(void)
+  {
+  return SWITCH_STATUS_SUCCESS;
+  }
+*/
+
+/*
+  If it exists, this is called in it's own thread when the module-load completes
+  SWITCH_MOD_DECLARE(switch_status) switch_module_shutdown(void)
+  {
+  return SWITCH_STATUS_SUCCESS;
+  }
+*/



More information about the Freeswitch-branches mailing list