dect
/
asterisk
Archived
13
0
Fork 0

Realtime improvements

git-svn-id: http://svn.digium.com/svn/asterisk/trunk@4314 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
markster 2004-11-22 18:39:40 +00:00
parent 2c475b6f0e
commit 6435562160
2 changed files with 23 additions and 21 deletions

View File

@ -87,9 +87,24 @@ static struct ast_variable *realtime_switch_common(const char *table, const char
{
struct ast_variable *var;
char pri[20];
char *ematch;
char rexten[AST_MAX_EXTENSION + 20]="";
snprintf(pri, sizeof(pri), "%d", priority);
printf("%s/%s/%s/%s exists\n", table, context, exten, pri);
var = ast_load_realtime(table, "context", context, "exten", exten, "priority", pri, NULL);
switch(mode) {
case MODE_MATCHMORE:
ematch = "exten LIKE";
snprintf(rexten, sizeof(rexten), "%s_%%", exten);
break;
case MODE_CANMATCH:
ematch = "exten LIKE";
snprintf(rexten, sizeof(rexten), "%s%%", exten);
break;
case MODE_MATCH:
default:
ematch = "exten";
strncpy(rexten, exten, sizeof(rexten) - 1);
}
var = ast_load_realtime(table, "context", context, ematch, rexten, "priority", pri, NULL);
return var;
}
@ -143,6 +158,8 @@ static int realtime_matchmore(struct ast_channel *chan, const char *context, con
{
REALTIME_COMMON(MODE_MATCHMORE);
if (var) ast_destroy_realtime(var);
if (var)
res = 1;
return res > 0 ? res : 0;
}

View File

@ -31,19 +31,6 @@ STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static void parseop(char *newp, int newplen, char **opo, const char *newparam)
{
char *op;
strncpy(newp, newparam, newplen - 1);
op = strchr(newp, ' ');
if (op) {
*op = '\0';
op++;
} else
op = "=";
*opo = op;
}
static struct ast_variable *realtime_odbc(const char *database, const char *table, va_list ap)
{
odbc_obj *obj;
@ -51,7 +38,6 @@ static struct ast_variable *realtime_odbc(const char *database, const char *tabl
char sql[1024];
char coltitle[256];
char rowdata[2048];
char newp[256];
char *op;
const char *newparam, *newval;
char *stringp;
@ -90,15 +76,14 @@ static struct ast_variable *realtime_odbc(const char *database, const char *tabl
return NULL;
}
newval = va_arg(aq, const char *);
parseop(newp, sizeof(newp), &op, newparam);
snprintf(sql, sizeof(sql), "SELECT * FROM %s WHERE %s %s ?", table, newp, op);
if (!strchr(newparam, ' ')) op = " ="; else op = "";
snprintf(sql, sizeof(sql), "SELECT * FROM %s WHERE %s%s ?", table, newparam, op);
while((newparam = va_arg(aq, const char *))) {
parseop(newp, sizeof(newp), &op, newparam);
snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " AND %s %s ?", newparam, op);
if (!strchr(newparam, ' ')) op = " ="; else op = "";
snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " AND %s%s ?", newparam, op);
newval = va_arg(aq, const char *);
}
va_end(aq);
res = SQLPrepare(stmt, sql, SQL_NTS);
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
ast_log(LOG_WARNING, "SQL Prepare failed![%s]\n", sql);