mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 04:11:08 +00:00
When calling the Realtime app more than once, unset fields which were
previously set are erroneously still set (Bug 6701). After discussion, it was determined this should only be changed in trunk. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@49801 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -75,7 +75,7 @@ static int function_realtime_read(struct ast_channel *chan, const char *cmd, cha
|
|||||||
if (!args.delim2)
|
if (!args.delim2)
|
||||||
args.delim2 = "=";
|
args.delim2 = "=";
|
||||||
|
|
||||||
head = ast_load_realtime(args.family, args.fieldmatch, args.value, NULL);
|
head = ast_load_realtime_all(args.family, args.fieldmatch, args.value, NULL);
|
||||||
|
|
||||||
if (!head) {
|
if (!head) {
|
||||||
ast_module_user_remove(u);
|
ast_module_user_remove(u);
|
||||||
|
@@ -128,6 +128,7 @@ int ast_category_exist(const struct ast_config *config, const char *category_nam
|
|||||||
* MUST be freed with ast_variables_destroy() as there is no container.
|
* MUST be freed with ast_variables_destroy() as there is no container.
|
||||||
*/
|
*/
|
||||||
struct ast_variable *ast_load_realtime(const char *family, ...);
|
struct ast_variable *ast_load_realtime(const char *family, ...);
|
||||||
|
struct ast_variable *ast_load_realtime_all(const char *family, ...);
|
||||||
|
|
||||||
/*! \brief Retrieve realtime configuration
|
/*! \brief Retrieve realtime configuration
|
||||||
* \param family which family/config to lookup
|
* \param family which family/config to lookup
|
||||||
|
@@ -1314,7 +1314,7 @@ struct ast_config *ast_config_load_with_comments(const char *filename)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ast_variable *ast_load_realtime(const char *family, ...)
|
struct ast_variable *ast_load_realtime_all(const char *family, ...)
|
||||||
{
|
{
|
||||||
struct ast_config_engine *eng;
|
struct ast_config_engine *eng;
|
||||||
char db[256]="";
|
char db[256]="";
|
||||||
@@ -1331,6 +1331,35 @@ struct ast_variable *ast_load_realtime(const char *family, ...)
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct ast_variable *ast_load_realtime(const char *family, ...)
|
||||||
|
{
|
||||||
|
struct ast_variable *res, *cur, *prev = NULL, *freeme = NULL;
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start(ap, family);
|
||||||
|
res = ast_load_realtime_all(family, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
/* Eliminate blank entries */
|
||||||
|
for (cur = res; cur; cur = cur->next) {
|
||||||
|
if (freeme) {
|
||||||
|
free(freeme);
|
||||||
|
freeme = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ast_strlen_zero(cur->value)) {
|
||||||
|
if (prev)
|
||||||
|
prev->next = cur->next;
|
||||||
|
else
|
||||||
|
res = cur->next;
|
||||||
|
freeme = cur;
|
||||||
|
} else {
|
||||||
|
prev = cur;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
/*! \brief Check if realtime engine is configured for family */
|
/*! \brief Check if realtime engine is configured for family */
|
||||||
int ast_check_realtime(const char *family)
|
int ast_check_realtime(const char *family)
|
||||||
{
|
{
|
||||||
|
@@ -168,7 +168,12 @@ static struct ast_variable *realtime_odbc(const char *database, const char *tabl
|
|||||||
indicator = 0;
|
indicator = 0;
|
||||||
res = SQLGetData(stmt, x + 1, SQL_CHAR, rowdata, sizeof(rowdata), &indicator);
|
res = SQLGetData(stmt, x + 1, SQL_CHAR, rowdata, sizeof(rowdata), &indicator);
|
||||||
if (indicator == SQL_NULL_DATA)
|
if (indicator == SQL_NULL_DATA)
|
||||||
continue;
|
rowdata[0] = '\0';
|
||||||
|
else if (ast_strlen_zero(rowdata)) {
|
||||||
|
/* Because we encode the empty string for a NULL, we will encode
|
||||||
|
* actual empty strings as a string containing a single whitespace. */
|
||||||
|
ast_copy_string(rowdata, " ", sizeof(rowdata));
|
||||||
|
}
|
||||||
|
|
||||||
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
|
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
|
||||||
ast_log(LOG_WARNING, "SQL Get Data error!\n[%s]\n\n", sql);
|
ast_log(LOG_WARNING, "SQL Get Data error!\n[%s]\n\n", sql);
|
||||||
@@ -180,15 +185,12 @@ static struct ast_variable *realtime_odbc(const char *database, const char *tabl
|
|||||||
stringp = rowdata;
|
stringp = rowdata;
|
||||||
while(stringp) {
|
while(stringp) {
|
||||||
chunk = strsep(&stringp, ";");
|
chunk = strsep(&stringp, ";");
|
||||||
if (!ast_strlen_zero(ast_strip(chunk))) {
|
if (prev) {
|
||||||
if (prev) {
|
prev->next = ast_variable_new(coltitle, chunk);
|
||||||
prev->next = ast_variable_new(coltitle, chunk);
|
if (prev->next)
|
||||||
if (prev->next)
|
prev = prev->next;
|
||||||
prev = prev->next;
|
} else
|
||||||
} else
|
prev = var = ast_variable_new(coltitle, chunk);
|
||||||
prev = var = ast_variable_new(coltitle, chunk);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -57,7 +57,7 @@ static int cli_realtime_load(int fd, int argc, char **argv)
|
|||||||
return RESULT_FAILURE;
|
return RESULT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
var = ast_load_realtime(argv[2], argv[3], argv[4], NULL);
|
var = ast_load_realtime_all(argv[2], argv[3], argv[4], NULL);
|
||||||
|
|
||||||
if(var) {
|
if(var) {
|
||||||
ast_cli(fd, header_format, "Column Name", "Column Value");
|
ast_cli(fd, header_format, "Column Name", "Column Value");
|
||||||
|
Reference in New Issue
Block a user