From 9850a075b7ebc2f3dc3aff6eebb646ca63e5bb92 Mon Sep 17 00:00:00 2001 From: Russell Bryant Date: Mon, 30 Jul 2012 00:05:25 +0000 Subject: Allow specifying a port number for the MySQL server. This patch allows you to specify a port number for the MySQL server. It's useful if a MySQL server is running on a non-standard port. Even though this module is deprecated in favor of func_odbc, someone asked for this feature and it seems pretty harmless to add. It has been tested using a number of combinations of with/without a port number specified in the dialplan and changing the port number for mysqld. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@370534 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- addons/app_mysql.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'addons/app_mysql.c') diff --git a/addons/app_mysql.c b/addons/app_mysql.c index 9ee584e27..594b78e52 100644 --- a/addons/app_mysql.c +++ b/addons/app_mysql.c @@ -59,7 +59,7 @@ static const char descrip[] = "Syntax:\n" " MYSQL(Set timeout )\n" " Set the connection timeout, in seconds.\n" -" MYSQL(Connect connid dhhost dbuser dbpass dbname [dbcharset])\n" +" MYSQL(Connect connid dhhost[:dbport] dbuser dbpass dbname [dbcharset])\n" " Connects to a database. Arguments contain standard MySQL parameters\n" " passed to function mysql_real_connect. Optional parameter dbcharset\n" " defaults to 'latin1'. Connection identifer returned in ${connid}\n" @@ -322,6 +322,8 @@ static int aMYSQL_connect(struct ast_channel *chan, char *data) MYSQL *mysql; int timeout; const char *ctimeout; + unsigned int port = 0; + char *port_str; AST_NONSTANDARD_APP_ARGS(args, data, ' '); @@ -348,7 +350,15 @@ static int aMYSQL_connect(struct ast_channel *chan, char *data) mysql_options(mysql, MYSQL_SET_CHARSET_NAME, args.dbcharset); } - if (! mysql_real_connect(mysql, args.dbhost, args.dbuser, args.dbpass, args.dbname, 0, NULL, + if ((port_str = strchr(args.dbhost, ':'))) { + *port_str++ = '\0'; + if (sscanf(port_str, "%u", &port) != 1) { + ast_log(LOG_WARNING, "Invalid port: '%s'\n", port_str); + port = 0; + } + } + + if (!mysql_real_connect(mysql, args.dbhost, args.dbuser, args.dbpass, args.dbname, port, NULL, #ifdef CLIENT_MULTI_STATEMENTS CLIENT_MULTI_STATEMENTS | CLIENT_MULTI_RESULTS #elif defined(CLIENT_MULTI_QUERIES) -- cgit v1.2.3