diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-11-22 05:03:03 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-11-22 05:03:03 +0000 |
commit | 9cb7ea46821283e924ebf3cb0ed7658df08f49f5 (patch) | |
tree | 8f41ca59a0006bc978bdaeb35f4be49de308fe3a | |
parent | d8551ca4e2d63d1da6fe7ef2d52b3c8dbdb53ba6 (diff) |
Minor realtime improvements
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@4311 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-x | channels/chan_sip.c | 1 | ||||
-rwxr-xr-x | pbx/pbx_realtime.c | 14 | ||||
-rwxr-xr-x | res/res_config_odbc.c | 24 |
3 files changed, 28 insertions, 11 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 6d9b85db1..77ef8810d 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -692,6 +692,7 @@ static int retrans_pkt(void *data) ast_mutex_lock(&pkt->owner->lock); } if (pkt->owner->owner) { + pkt->owner->alreadygone=1; ast_queue_hangup(pkt->owner->owner); ast_mutex_unlock(&pkt->owner->owner->lock); } else { diff --git a/pbx/pbx_realtime.c b/pbx/pbx_realtime.c index 6b1e6304c..4b70da11f 100755 --- a/pbx/pbx_realtime.c +++ b/pbx/pbx_realtime.c @@ -50,13 +50,13 @@ static char *tdesc = "Realtime Switch"; */ -#define REALTIME_COMMON \ +#define REALTIME_COMMON(mode) \ char *buf; \ char *opts; \ const char *cxt; \ char *table; \ int res=-1; \ - struct ast_variable *var; \ + struct ast_variable *var=NULL; \ buf = ast_strdupa(data); \ if (buf) { \ opts = strchr(buf, '/'); \ @@ -75,9 +75,9 @@ static char *tdesc = "Realtime Switch"; cxt = context;\ if (!table || ast_strlen_zero(table)) \ table = "extensions"; \ - var = realtime_switch_common(table, cxt, exten, priority); \ + var = realtime_switch_common(table, cxt, exten, priority, mode); \ } else \ - return -1; + res = -1; static struct ast_variable *realtime_switch_common(const char *table, const char *context, const char *exten, int priority) { @@ -104,7 +104,7 @@ static int realtime_canmatch(struct ast_channel *chan, const char *context, cons if (var) ast_destroy_realtime(var); if (var) res = 1; - return res; + return res > 0 ? res : 0; } static int realtime_exec(struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, int newstack, const char *data) @@ -123,6 +123,7 @@ static int realtime_exec(struct ast_channel *chan, const char *context, const ch appdata = ast_strdupa(v->value); v = v->next; } + ast_destroy_realtime(var); if (!ast_strlen_zero(app)) { a = pbx_findapp(app); if (a) { @@ -130,7 +131,6 @@ static int realtime_exec(struct ast_channel *chan, const char *context, const ch } else ast_log(LOG_NOTICE, "No such application '%s' for extension '%s' in context '%s'\n", app, exten, context); } - ast_destroy_realtime(var); } return res; } @@ -139,7 +139,7 @@ static int realtime_matchmore(struct ast_channel *chan, const char *context, con { REALTIME_COMMON; if (var) ast_destroy_realtime(var); - return res; + return res > 0 ? res : 0; } static struct ast_switch realtime_switch = diff --git a/res/res_config_odbc.c b/res/res_config_odbc.c index 7d2cd8ea1..512ed9f8e 100755 --- a/res/res_config_odbc.c +++ b/res/res_config_odbc.c @@ -31,13 +31,28 @@ 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; SQLHSTMT stmt; - char sql[256]; + char sql[1024]; char coltitle[256]; char rowdata[2048]; + char newp[256]; + char *op; const char *newparam, *newval; char *stringp; char *chunk; @@ -75,10 +90,11 @@ static struct ast_variable *realtime_odbc(const char *database, const char *tabl return NULL; } newval = va_arg(aq, const char *); - - snprintf(sql, sizeof(sql), "SELECT * FROM %s WHERE %s=?", table, newparam); + parseop(newp, sizeof(newp), &op, newparam); + snprintf(sql, sizeof(sql), "SELECT * FROM %s WHERE %s %s ?", table, newp, op); while((newparam = va_arg(aq, const char *))) { - snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " AND %s=?", newparam); + parseop(newp, sizeof(newp), &op, newparam); + snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " AND %s %s ?", newparam, op); newval = va_arg(aq, const char *); } va_end(aq); |