Minor realtime improvements
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@4311 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
parent
d8551ca4e2
commit
9cb7ea4682
|
@ -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 {
|
||||
|
|
|
@ -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 =
|
||||
|
|
|
@ -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);
|
||||
|
|
Reference in New Issue