Index: apps/app_voicemail.c =================================================================== RCS file: /usr/cvsroot/asterisk/apps/app_voicemail.c,v retrieving revision 1.252 diff -u -r1.252 app_voicemail.c --- apps/app_voicemail.c 18 Oct 2005 22:52:21 -0000 1.252 +++ apps/app_voicemail.c 19 Oct 2005 17:00:26 -0000 @@ -754,7 +754,6 @@ int fd=-1; size_t fdlen = 0; void *fdm=NULL; - SQLLEN rowcount=0; SQLSMALLINT colcount=0; SQLHSTMT stmt; char sql[256]; @@ -809,79 +808,74 @@ SQLFreeHandle (SQL_HANDLE_STMT, stmt); goto yuck; } - res = SQLRowCount(stmt, &rowcount); - if (((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO))) { - ast_log(LOG_WARNING, "SQL Row Count error!\n[%s]\n\n", sql); + res = SQLFetch(stmt); + if (res == SQL_NO_DATA) { SQLFreeHandle (SQL_HANDLE_STMT, stmt); goto yuck; } - if (rowcount) { - fd = open(full_fn, O_RDWR | O_CREAT | O_TRUNC); - if (fd < 0) { - ast_log(LOG_WARNING, "Failed to write '%s': %s\n", full_fn, strerror(errno)); - SQLFreeHandle (SQL_HANDLE_STMT, stmt); - goto yuck; - } - res = SQLNumResultCols(stmt, &colcount); - if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { - ast_log(LOG_WARNING, "SQL Column Count error!\n[%s]\n\n", sql); - SQLFreeHandle (SQL_HANDLE_STMT, stmt); - goto yuck; - } - res = SQLFetch(stmt); + else if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { + ast_log(LOG_WARNING, "SQL Fetch error!\n[%s]\n\n", sql); + SQLFreeHandle (SQL_HANDLE_STMT, stmt); + goto yuck; + } + fd = open(full_fn, O_RDWR | O_CREAT | O_TRUNC); + if (fd < 0) { + ast_log(LOG_WARNING, "Failed to write '%s': %s\n", full_fn, strerror(errno)); + SQLFreeHandle (SQL_HANDLE_STMT, stmt); + goto yuck; + } + res = SQLNumResultCols(stmt, &colcount); + if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { + ast_log(LOG_WARNING, "SQL Column Count error!\n[%s]\n\n", sql); + SQLFreeHandle (SQL_HANDLE_STMT, stmt); + goto yuck; + } + if (f) + fprintf(f, "[message]\n"); + for (x=0;x -1) { - char tmp[1]=""; - lseek(fd, fdlen - 1, SEEK_SET); - if (write(fd, tmp, 1) != 1) { - close(fd); - fd = -1; - } - if (fd > -1) - fdm = mmap(NULL, fdlen, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); - } - if (fdm) { - memset(fdm, 0, fdlen); - res = SQLGetData(stmt, x + 1, SQL_BINARY, fdm, fdlen, &colsize); - if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { - ast_log(LOG_WARNING, "SQL Get Data error!\n[%s]\n\n", sql); - SQLFreeHandle (SQL_HANDLE_STMT, stmt); - goto yuck; - } + if (!strcmp(coltitle, "recording")) { + res = SQLGetData(stmt, x + 1, SQL_BINARY, NULL, 0, &colsize); + fdlen = colsize; + fd = open(full_fn, O_RDWR | O_TRUNC | O_CREAT, 0770); + if (fd > -1) { + char tmp[1]=""; + lseek(fd, fdlen - 1, SEEK_SET); + if (write(fd, tmp, 1) != 1) { + close(fd); + fd = -1; } - } else { - res = SQLGetData(stmt, x + 1, SQL_CHAR, rowdata, sizeof(rowdata), NULL); + if (fd > -1) + fdm = mmap(NULL, fdlen, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + } + if (fdm) { + memset(fdm, 0, fdlen); + res = SQLGetData(stmt, x + 1, SQL_BINARY, fdm, fdlen, &colsize); if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { ast_log(LOG_WARNING, "SQL Get Data error!\n[%s]\n\n", sql); SQLFreeHandle (SQL_HANDLE_STMT, stmt); goto yuck; } - if (strcmp(coltitle, "msgnum") && strcmp(coltitle, "dir") && f) - fprintf(f, "%s=%s\n", coltitle, rowdata); } + } else { + res = SQLGetData(stmt, x + 1, SQL_CHAR, rowdata, sizeof(rowdata), NULL); + if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { + ast_log(LOG_WARNING, "SQL Get Data error!\n[%s]\n\n", sql); + SQLFreeHandle (SQL_HANDLE_STMT, stmt); + goto yuck; + } + if (strcmp(coltitle, "msgnum") && strcmp(coltitle, "dir") && f) + fprintf(f, "%s=%s\n", coltitle, rowdata); } - } else if (msgnum > -1) /* msgnum will be -1 if the message hasn't yet been saved */ - ast_log(LOG_WARNING, "Failed to retrieve rows for msgnum=%s and dir=%s\n", msgnums, dir); + } SQLFreeHandle (SQL_HANDLE_STMT, stmt); } else ast_log(LOG_WARNING, "Failed to obtain database object for '%s'!\n", odbc_database); @@ -916,7 +910,6 @@ { int x = 0; int res; - SQLLEN rowcount=0; SQLHSTMT stmt; char sql[256]; char rowdata[20]; @@ -943,12 +936,6 @@ SQLFreeHandle (SQL_HANDLE_STMT, stmt); goto yuck; } - res = SQLRowCount(stmt, &rowcount); - if (((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) || (rowcount < 1)) { - ast_log(LOG_WARNING, "SQL Row Count error!\n[%s]\n\n", sql); - SQLFreeHandle (SQL_HANDLE_STMT, stmt); - goto yuck; - } res = SQLFetch(stmt); if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { ast_log(LOG_WARNING, "SQL Fetch error!\n[%s]\n\n", sql); @@ -974,7 +961,6 @@ { int x = 0; int res; - SQLLEN rowcount=0; SQLHSTMT stmt; char sql[256]; char rowdata[20]; @@ -1004,12 +990,6 @@ SQLFreeHandle (SQL_HANDLE_STMT, stmt); goto yuck; } - res = SQLRowCount(stmt, &rowcount); - if (((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) || (rowcount < 1)) { - ast_log(LOG_WARNING, "SQL Row Count error!\n[%s]\n\n", sql); - SQLFreeHandle (SQL_HANDLE_STMT, stmt); - goto yuck; - } res = SQLFetch(stmt); if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { ast_log(LOG_WARNING, "SQL Fetch error!\n[%s]\n\n", sql); @@ -1039,7 +1019,6 @@ static void delete_file(char *sdir, int smsg) { int res; - SQLLEN rowcount=0; SQLHSTMT stmt; char sql[256]; char msgnums[20]; @@ -1068,12 +1047,6 @@ SQLFreeHandle (SQL_HANDLE_STMT, stmt); goto yuck; } - res = SQLRowCount(stmt, &rowcount); - if (((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO))) { - ast_log(LOG_WARNING, "SQL Row Count error!\n[%s]\n\n", sql); - SQLFreeHandle (SQL_HANDLE_STMT, stmt); - goto yuck; - } SQLFreeHandle (SQL_HANDLE_STMT, stmt); } else ast_log(LOG_WARNING, "Failed to obtain database object for '%s'!\n", odbc_database); @@ -1084,7 +1057,6 @@ static void copy_file(char *sdir, int smsg, char *ddir, int dmsg, char *dmailboxuser, char *dmailboxcontext) { int res; - SQLLEN rowcount=0; SQLHSTMT stmt; char sql[256]; char msgnums[20]; @@ -1129,12 +1101,6 @@ SQLFreeHandle (SQL_HANDLE_STMT, stmt); goto yuck; } - res = SQLRowCount(stmt, &rowcount); - if (((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) || (rowcount < 1)) { - ast_log(LOG_WARNING, "SQL Row Count error!\n[%s] (You probably don't have MySQL 4.1 or later installed)\n\n", sql); - SQLFreeHandle (SQL_HANDLE_STMT, stmt); - goto yuck; - } SQLFreeHandle (SQL_HANDLE_STMT, stmt); } else ast_log(LOG_WARNING, "Failed to obtain database object for '%s'!\n", odbc_database); @@ -1149,7 +1115,6 @@ int fd = -1; void *fdm=NULL; size_t fdlen = -1; - SQLLEN rowcount=0; SQLHSTMT stmt; SQLINTEGER len; char sql[256]; @@ -1254,12 +1219,6 @@ SQLFreeHandle (SQL_HANDLE_STMT, stmt); goto yuck; } - res = SQLRowCount(stmt, &rowcount); - if (((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) || (rowcount < 1)) { - ast_log(LOG_WARNING, "SQL Row Count error!\n[%s]\n\n", sql); - SQLFreeHandle (SQL_HANDLE_STMT, stmt); - goto yuck; - } SQLFreeHandle (SQL_HANDLE_STMT, stmt); } else ast_log(LOG_WARNING, "Failed to obtain database object for '%s'!\n", odbc_database); @@ -1276,7 +1235,6 @@ static void rename_file(char *sdir, int smsg, char *mailboxuser, char *mailboxcontext, char *ddir, int dmsg) { int res; - SQLLEN rowcount=0; SQLHSTMT stmt; char sql[256]; char msgnums[20]; @@ -1321,12 +1279,6 @@ SQLFreeHandle (SQL_HANDLE_STMT, stmt); goto yuck; } - res = SQLRowCount(stmt, &rowcount); - if (((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) || (rowcount < 1)) { - ast_log(LOG_WARNING, "SQL Row Count error!\n[%s]\n\n", sql); - SQLFreeHandle (SQL_HANDLE_STMT, stmt); - goto yuck; - } SQLFreeHandle (SQL_HANDLE_STMT, stmt); } else ast_log(LOG_WARNING, "Failed to obtain database object for '%s'!\n", odbc_database); @@ -1976,7 +1928,6 @@ { int x = 0; int res; - SQLLEN rowcount=0; SQLHSTMT stmt; char sql[256]; char rowdata[20]; @@ -2021,12 +1972,6 @@ SQLFreeHandle (SQL_HANDLE_STMT, stmt); goto yuck; } - res = SQLRowCount(stmt, &rowcount); - if (((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) || (rowcount < 1)) { - ast_log(LOG_WARNING, "SQL Row Count error!\n[%s]\n\n", sql); - SQLFreeHandle (SQL_HANDLE_STMT, stmt); - goto yuck; - } res = SQLFetch(stmt); if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { ast_log(LOG_WARNING, "SQL Fetch error!\n[%s]\n\n", sql); @@ -2060,12 +2005,6 @@ SQLFreeHandle (SQL_HANDLE_STMT, stmt); goto yuck; } - res = SQLRowCount(stmt, &rowcount); - if (((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) || (rowcount < 1)) { - ast_log(LOG_WARNING, "SQL Row Count error!\n[%s]\n\n", sql); - SQLFreeHandle (SQL_HANDLE_STMT, stmt); - goto yuck; - } res = SQLFetch(stmt); if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { ast_log(LOG_WARNING, "SQL Fetch error!\n[%s]\n\n", sql); @@ -2092,7 +2031,6 @@ { int nummsgs = 0; int res; - SQLLEN rowcount=0; SQLHSTMT stmt; char sql[256]; char rowdata[20]; @@ -2131,12 +2069,6 @@ res = odbc_smart_execute(obj, stmt); if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { ast_log(LOG_WARNING, "SQL Execute error!\n[%s]\n\n", sql); - SQLFreeHandle (SQL_HANDLE_STMT, stmt); - goto yuck; - } - res = SQLRowCount(stmt, &rowcount); - if (((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) || (rowcount < 1)) { - ast_log(LOG_WARNING, "SQL Row Count error!\n[%s]\n\n", sql); SQLFreeHandle (SQL_HANDLE_STMT, stmt); goto yuck; } Index: res/res_odbc.c =================================================================== RCS file: /usr/cvsroot/asterisk/res/res_odbc.c,v retrieving revision 1.20 diff -u -r1.20 res_odbc.c --- res/res_odbc.c 13 Oct 2005 18:01:31 -0000 1.20 +++ res/res_odbc.c 19 Oct 2005 17:00:26 -0000 @@ -108,7 +108,7 @@ { int res = 0; res = SQLExecute(stmt); - if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { + if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO) && (res != SQL_NO_DATA)) { ast_log(LOG_WARNING, "SQL Execute error! Attempting a reconnect...\n"); ast_mutex_lock(&obj->lock); obj->up = 0; Index: res/res_config_odbc.c =================================================================== RCS file: /usr/cvsroot/asterisk/res/res_config_odbc.c,v retrieving revision 1.29 diff -u -r1.29 res_config_odbc.c --- res/res_config_odbc.c 14 Sep 2005 20:46:50 -0000 1.29 +++ res/res_config_odbc.c 19 Oct 2005 17:00:26 -0000 @@ -64,7 +64,6 @@ int res; int x; struct ast_variable *var=NULL, *prev=NULL; - SQLLEN rowcount=0; SQLULEN colsize; SQLSMALLINT colcount=0; SQLSMALLINT datatype; @@ -126,62 +125,57 @@ return NULL; } - res = SQLRowCount(stmt, &rowcount); + res = SQLNumResultCols(stmt, &colcount); if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { - ast_log(LOG_WARNING, "SQL Row Count error!\n[%s]\n\n", sql); + ast_log(LOG_WARNING, "SQL Column Count error!\n[%s]\n\n", sql); SQLFreeHandle (SQL_HANDLE_STMT, stmt); return NULL; } - res = SQLNumResultCols(stmt, &colcount); + res = SQLFetch(stmt); + if (res == SQL_NO_DATA) { + SQLFreeHandle (SQL_HANDLE_STMT, stmt); + return NULL; + } if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { - ast_log(LOG_WARNING, "SQL Column Count error!\n[%s]\n\n", sql); + ast_log(LOG_WARNING, "SQL Fetch error!\n[%s]\n\n", sql); SQLFreeHandle (SQL_HANDLE_STMT, stmt); return NULL; } - - if (rowcount) { - res = SQLFetch(stmt); + for (x=0;xnext = ast_variable_new(coltitle, chunk); - if (prev->next) - prev = prev->next; + indicator = 0; + res = SQLGetData(stmt, x + 1, SQL_CHAR, rowdata, sizeof(rowdata), &indicator); + if (indicator == SQL_NULL_DATA) + continue; + + if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { + ast_log(LOG_WARNING, "SQL Get Data error!\n[%s]\n\n", sql); + if (var) + ast_variables_destroy(var); + return NULL; + } + stringp = rowdata; + while(stringp) { + chunk = strsep(&stringp, ";"); + if (chunk && !ast_strlen_zero(ast_strip(chunk))) { + if (prev) { + prev->next = ast_variable_new(coltitle, chunk); + if (prev->next) + prev = prev->next; } else prev = var = ast_variable_new(coltitle, chunk); - } } } } @@ -210,7 +204,6 @@ struct ast_config *cfg=NULL; struct ast_category *cat=NULL; struct ast_realloca ra; - SQLLEN rowcount=0; SQLULEN colsize; SQLSMALLINT colcount=0; SQLSMALLINT datatype; @@ -278,13 +271,6 @@ return NULL; } - res = SQLRowCount(stmt, &rowcount); - if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { - ast_log(LOG_WARNING, "SQL Row Count error!\n[%s]\n\n", sql); - SQLFreeHandle (SQL_HANDLE_STMT, stmt); - return NULL; - } - res = SQLNumResultCols(stmt, &colcount); if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { ast_log(LOG_WARNING, "SQL Column Count error!\n[%s]\n\n", sql); @@ -299,9 +285,8 @@ return NULL; } - while (rowcount--) { + while ((res=SQLFetch(stmt)) != SQL_NO_DATA) { var = NULL; - res = SQLFetch(stmt); if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { ast_log(LOG_WARNING, "SQL Fetch error!\n[%s]\n\n", sql); continue;