[svn-commits] russell: branch russell/events2 r145738 - /team/russell/events2/res/

SVN commits to the Digium repositories svn-commits at lists.digium.com
Wed Oct 1 21:12:57 CDT 2008


Author: russell
Date: Wed Oct  1 21:12:57 2008
New Revision: 145738

URL: http://svn.digium.com/view/asterisk?view=rev&rev=145738
Log:
set up a bit of the connect code

Modified:
    team/russell/events2/res/res_eventpeer.c

Modified: team/russell/events2/res/res_eventpeer.c
URL: http://svn.digium.com/view/asterisk/team/russell/events2/res/res_eventpeer.c?view=diff&rev=145738&r1=145737&r2=145738
==============================================================================
--- team/russell/events2/res/res_eventpeer.c (original)
+++ team/russell/events2/res/res_eventpeer.c Wed Oct  1 21:12:57 2008
@@ -92,12 +92,12 @@
 			ast_log(LOG_ERROR, "fread() returned error: %s\n", strerror(errno));
 			break;
 		}
-		
+
 		/* Now we have an event header, so read in the rest of the event */
 
 		event_len = ast_event_get_size(event);
 		if (event_len > sizeof(buf)) {
-			ast_log(LOG_ERROR, "Buffer not big enough for an event of %lu bytes\n", 
+			ast_log(LOG_ERROR, "Buffer not big enough for an event of %lu bytes\n",
 					event_len);
 			break;
 		}
@@ -136,7 +136,7 @@
 static void store_general_config(const char *name, const char *val)
 {
 	CV_START(name, val);
-	
+
 	CV_BOOL("enabled", g_config.enabled);
 	CV_BOOL("enable", g_config.enabled);
 	CV_F("bindaddr", store_bindaddr(val, &eventpeer_tcp_desc.sin));
@@ -149,9 +149,9 @@
 	CV_DSTR("tlscafile", g_config.tls.cafile);
 	CV_DSTR("tlscadir", g_config.tls.capath);
 	CV_DSTR("tlscapath", g_config.tls.capath);
-	CV_F("tlsdontverifyserver", 
+	CV_F("tlsdontverifyserver",
 		ast_set2_flag(&g_config.tls.flags, ast_true(val), AST_SSL_DONT_VERIFY_SERVER));
-	CV_F("tlsverifyclient", 
+	CV_F("tlsverifyclient",
 		ast_set2_flag(&g_config.tls.flags, ast_true(val), AST_SSL_VERIFY_CLIENT));
 
 	ast_log(LOG_WARNING, "Unknown option '%s' in the general section of %s\n",
@@ -203,11 +203,6 @@
 	}
 }
 
-static void load_event_peer(struct ast_config *cfg, const char *cat)
-{
-	/* XXX */
-}
-
 static void post_config_init(void)
 {
 	if (!g_config.enabled) {
@@ -223,11 +218,51 @@
 	}
 }
 
+static void connect_to_peer(const char *val)
+{
+	char *host, *port;
+	struct server_args ca = {
+		.name = "Event Peer Client",
+		.accept_fd = -1,
+	};
+
+	if (ast_strlen_zero(val)) {
+		ast_log(LOG_WARNING, "Invalid host: %s\n", val);
+		return;
+	}
+
+	port = ast_strdupa(val);
+	host = strsep(&port, ":");
+
+	ca.sin.sin_family = AF_INET;
+
+	if (!inet_aton(host, &ca.sin.sin_addr)) {
+		/* XXX resolve IP here */
+		ast_log(LOG_WARNING, "Invalid host: '%s'\n", host);
+		return;
+	}
+
+	if (!ast_strlen_zero(port)) {
+		uint16_t prt;
+		if (sscanf(port, "%hu", &prt) != 1) {
+			ast_log(LOG_WARNING, "Invalid port: '%s'\n", port);
+			return;
+		}
+		ca.sin.sin_port = htons(prt);
+	} else {
+		ca.sin.sin_port = htons(default_port);
+	}
+
+	ast_debug(1, "Connecting to %s:%hu\n", ast_inet_ntoa(ca.sin.sin_addr),
+			ntohs(ca.sin.sin_port));
+
+	/* XXX setup TLS, and connect ... */
+}
+
 static int load_config(int reload)
 {
 	struct ast_config *cfg;
 	struct ast_flags cfg_flags = { CONFIG_FLAG_FILEUNCHANGED };
-	const char *cat = NULL;
 	struct ast_variable *var;
 
 	cfg = ast_config_load(cfg_file, cfg_flags);
@@ -243,12 +278,16 @@
 	reset_general_settings(0);
 
 	for (var = ast_variable_browse(cfg, "general"); var; var = var->next) {
-		store_general_config(var->name, var->value);
-	}
-
-	while ((cat = ast_category_browse(cfg, cat))) {
-		if (strcasecmp(cat, "general")) {
-			load_event_peer(cfg, cat);
+		if (strcasecmp(var->name, "connect")) {
+			store_general_config(var->name, var->value);
+		}
+	}
+
+	/* Ensure that all options are read before starting up connections */
+
+	for (var = ast_variable_browse(cfg, "general"); var; var = var->next) {
+		if (!strcasecmp(var->name, "connect")) {
+			connect_to_peer(var->value);
 		}
 	}
 
@@ -290,11 +329,11 @@
 	ast_cli(a->fd, "===\n"
 	               "=== TCP Server Settings:\n"
 				   "=== ==> Enabled:   %s\n"
-	               "=== ==> Bind Addr: %s:%d\n", 
-			g_config.enabled ? "Yes" : "No",	
+	               "=== ==> Bind Addr: %s:%d\n",
+			g_config.enabled ? "Yes" : "No",
 			ast_inet_ntoa(eventpeer_tcp_desc.sin.sin_addr),
 			htons(eventpeer_tcp_desc.sin.sin_port));
-	        
+
 	ast_cli(a->fd, "===\n"
 	               "=== TLS Server Settings:\n"
 	               "=== ==> Enabled:            %s\n"
@@ -317,7 +356,7 @@
 	               "=== ==> Verify Server Cert: %s\n"
 	               "",
 			ast_test_flag(&g_config.tls.flags, AST_SSL_DONT_VERIFY_SERVER) ? "No" : "Yes");
-				
+
 	ast_mutex_unlock(&g_config.reload_lock);
 
 	ast_cli(a->fd, "===\n"
@@ -354,11 +393,12 @@
 	ast_mutex_init(&g_config.reload_lock);
 
 	if (load_config(0)) {
+		ast_mutex_destroy(&g_config.reload_lock);
 		return AST_MODULE_LOAD_DECLINE;
 	}
 
 	ast_cli_register_multiple(cli_eventpeer, ARRAY_LEN(cli_eventpeer));
-	
+
 	return AST_MODULE_LOAD_SUCCESS;
 }
 




More information about the svn-commits mailing list