route[HTTP_AUTH_REPLY] {
xinfo("[$ci][$rm] HTTP_AUTH_REPLY received");
if($http_ok) {
xinfo("[HTTP_AUTH_REPLY][$http_rs] request was sucessful");
} else {
xinfo("[HTTP_AUTH_REPLY][$http_rs] request was unsucessful");
}
if($http_err) {
xinfo("[HTTP_AUTH_REPLY][ERROR] $http_err");
}
xinfo("[HTTP_AUTH_REPLY][RESPONSE][BODY] $http_rb");
# lock auth token
sht_lock("server=>auth::token");
# set token
$sht(server=>auth::token) = $http_rb;
# unlock auth token
sht_unlock("server=>auth::token");
}
event_route[htable:expired:server] {
xinfo("[HTABLE:expired:server] initializing");
$http_req(all) = $null;
$http_req(timeout) = 100;
$http_req(method) = "POST";
$http_req(suspend) = 1;
$http_req(hdr) = "Content-Type: application/json";
$http_req(body) = '{"email": "brandon@cryy.com", "password":"XXXX"}';
http_async_query("https://www.cryy.com/api/auth/token", "HTTP_AUTH_REPLY");
}
event_route[htable:mod-init] {
# generate auth token into
http_client_query("https://www.cryy.com/api/auth/token", '{"email": "brandon@cryy.com", "password":"XXXX"}', "$var(result)");
# lock auth token
sht_lock("server=>auth::token");
# set auth token
$sht(server=>auth::token) = $var(result);
# unlock auth token
sht_unlock("server=>auth::token");
xinfo("AUTH_TOKEN_RECEIVED, $sht(server=>auth::token)");
}
Oct 31 21:04:37 main kamailio[2088]: ERROR: http_async_client [async_http.c:622]: async_push_query(): failed to pass the query to async workers
Oct 31 21:04:37 main kamailio[2088]: ERROR: http_async_client [async_http.c:588]: async_send_query(): failed to relay query: https://www.cryy.com/api/auth/token
Oct 31 21:04:38 main kamailio[2088]: INFO: http_async_client [async_http.c:84]: async_http_init_worker(): started worker process: 1
Oct 31 21:04:38 main kamailio[2088]: INFO: http_async_client [async_http.c:84]: async_http_init_worker(): started worker process: 2
Oct 31 21:04:38 main kamailio[2088]: INFO: http_async_client [async_http.c:84]: async_http_init_worker(): started worker process: 3
Oct 31 21:04:38 main kamailio[2088]: INFO: http_async_client [async_http.c:84]: async_http_init_worker(): started worker process: 4
Running 5.5.0-dev3
modparam("htable", "htable", "ipban=>size=8;autoexpire=300;dmqreplicate=1;")
modparam("htable", "enable_dmq", 1)
modparam("htable", "dmq_init_sync", 1)
modparam("htable", "timer_procs", 4)
modparam("htable", "timer_interval", 5)
modparam("htable", "db_expires", 1)
modparam("htable", "htable", "account=>size=4;dmqreplicate=1;")
modparam("htable", "htable", "server=>size=4;autoexpire=15;")I'm attempting to retrieve an auth token in the init process and also refresh the token upon expiration in the htable:expired event.I'm seeing some behavior where every other execution of htable:expired the variable $sht(server=>auth::token) is set per kamcmd htable.dump server, however xinfo() reports that the token was retrieved in the variable $sht(server=>auth::token).Please see remaining event route config below:event_route[htable:mod-init] {
# generate auth token into
http_client_query("https://www.cryy.com/api/auth/token", '{"email": "brandon@cryy.com", "password":"XXXX"}', "$var(result)");
sht_lock("server=>auth::token");
$sht(server=>auth::token) = $var(result);
sht_unlock("server=>auth::token");
xinfo("AUTH_TOKEN_RECEIVED, $sht(server=>auth::token)");
}
event_route[htable:expired:server] {
# process expired htable, renew auth token
xinfo("AUTH_TOKEN_EXPIRED, lets retrieve a new one");
http_client_query("https://www.cryy.com/api/auth/token", '{"email": "brandon@cryy.com", "password":"XXXX"}', "$var(result)");
sht_lock("server=>auth::token");
$sht(server=>auth::time) = $TS;
$sht(server=>auth::token) = $var(result);
sht_unlock("server=>auth::token");
xinfo("AUTH_TOKEN_RECEIVED, $sht(server=>auth::token)");
xinfo("AUTH_TOKEN_TIME, $sht(server=>auth::time)");
}
I've tried both with locking and unlocking. Also one last thing worth mentioning is that on the alternation where kamcmd htable.dump server shows no auth token, $sht(server=>auth::time) is available, when the auth token is visible in kamcmd htable.dump server there is no sht(server=>auth::time) returned.
Also just to be explicitly clear -- xinfo() always returns AUTH_TOKEN_RECEIVED correctly in both event routes.Perhaps I'm over looking something -- thank you for the help in advance.- Brandon