diff --git a/debian/patches/sipwise/db_postgres-timeout b/debian/patches/sipwise/db_postgres-timeout index 20f88e71e..240150fb5 100644 --- a/debian/patches/sipwise/db_postgres-timeout +++ b/debian/patches/sipwise/db_postgres-timeout @@ -92,3 +92,112 @@ /** @} */ +--- a/modules/db_postgres/pg_con.c ++++ b/modules/db_postgres/pg_con.c +@@ -39,6 +39,7 @@ + #include "pg_con.h" + #include "pg_uri.h" + #include "pg_sql.h" ++#include "pg_mod.h" + + #include "../../mem/mem.h" + #include "../../dprint.h" +@@ -237,7 +238,9 @@ + struct pg_con* pcon; + struct pg_uri* puri; + char* port_str; +- int ret; ++ int ret, i = 0; ++ const char *keywords[10], *values[10]; ++ char to[16]; + + pcon = DB_GET_PAYLOAD(con); + puri = DB_GET_PAYLOAD(con->uri); +@@ -251,6 +254,8 @@ + + if (puri->port > 0) { + port_str = int2str(puri->port, 0); ++ keywords[i] = "port"; ++ values[i++] = port_str; + } else { + port_str = NULL; + } +@@ -260,12 +265,26 @@ + pcon->con = NULL; + } + +- pcon->con = PQsetdbLogin(puri->host, port_str, +- NULL, NULL, puri->database, +- puri->username, puri->password); ++ keywords[i] = "host"; ++ values[i++] = puri->host; ++ keywords[i] = "dbname"; ++ values[i++] = puri->database; ++ keywords[i] = "user"; ++ values[i++] = puri->username; ++ keywords[i] = "password"; ++ values[i++] = puri->password; ++ if (pg_timeout > 0) { ++ snprintf(to, sizeof(to)-1, "%d", pg_timeout + 3); ++ keywords[i] = "connect_timeout"; ++ values[i++] = to; ++ } ++ ++ keywords[i] = values[i] = NULL; ++ ++ pcon->con = PQconnectdbParams(keywords, values, 1); + + if (pcon->con == NULL) { +- ERR("postgres: PQsetdbLogin ran out of memory\n"); ++ ERR("postgres: PQconnectdbParams ran out of memory\n"); + goto error; + } + +--- a/modules/db_postgres/km_pg_con.c ++++ b/modules/db_postgres/km_pg_con.c +@@ -45,6 +45,9 @@ + { + struct pg_con* ptr; + char *ports; ++ int i = 0; ++ const char *keywords[10], *values[10]; ++ char to[16]; + + LM_DBG("db_id = %p\n", id); + +@@ -66,6 +69,8 @@ + + if (id->port) { + ports = int2str(id->port, 0); ++ keywords[i] = "port"; ++ values[i++] = port_str; + LM_DBG("opening connection: postgres://xxxx:xxxx@%s:%d/%s\n", ZSW(id->host), + id->port, ZSW(id->database)); + } else { +@@ -74,8 +79,24 @@ + ZSW(id->database)); + } + +- ptr->con = PQsetdbLogin(id->host, ports, NULL, NULL, id->database, id->username, id->password); +- LM_DBG("PQsetdbLogin(%p)\n", ptr->con); ++ keywords[i] = "host"; ++ values[i++] = id->host; ++ keywords[i] = "dbname"; ++ values[i++] = id->database; ++ keywords[i] = "user"; ++ values[i++] = id->username; ++ keywords[i] = "password"; ++ values[i++] = id->password; ++ if (pg_timeout > 0) { ++ snprintf(to, sizeof(to)-1, "%d", pg_timeout + 3); ++ keywords[i] = "connect_timeout"; ++ values[i++] = to; ++ } ++ ++ keywords[i] = values[i] = NULL; ++ ++ pcon->con = PQconnectdbParams(keywords, values, 1); ++ LM_DBG("PQconnectdbParams(%p)\n", ptr->con); + + if( (ptr->con == 0) || (PQstatus(ptr->con) != CONNECTION_OK) ) + {