Skinny: centralized registration
This commit is contained in:
parent
ea29a1dfcc
commit
e7a8189b2b
|
@ -1243,6 +1243,21 @@ static void walk_listeners(skinny_listener_callback_func_t callback, void *pvt)
|
||||||
switch_mutex_unlock(globals.mutex);
|
switch_mutex_unlock(globals.mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int flush_listener_callback(void *pArg, int argc, char **argv, char **columnNames)
|
||||||
|
{
|
||||||
|
char *profile_name = argv[0];
|
||||||
|
char *value = argv[1];
|
||||||
|
char *domain_name = argv[2];
|
||||||
|
char *device_name = argv[3];
|
||||||
|
char *device_instance = argv[4];
|
||||||
|
|
||||||
|
char *token = switch_mprintf("skinny/%q/%q/%q:%q", profile_name, value, device_name, device_instance);
|
||||||
|
switch_core_del_registration(value, domain_name, token);
|
||||||
|
switch_safe_free(token);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void flush_listener(listener_t *listener)
|
static void flush_listener(listener_t *listener)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -1250,6 +1265,18 @@ static void flush_listener(listener_t *listener)
|
||||||
skinny_profile_t *profile = listener->profile;
|
skinny_profile_t *profile = listener->profile;
|
||||||
char *sql;
|
char *sql;
|
||||||
|
|
||||||
|
if ((sql = switch_mprintf(
|
||||||
|
"SELECT '%q', value, '%q', '%q', '%d' "
|
||||||
|
"FROM skinny_lines "
|
||||||
|
"WHERE device_name='%s' AND device_instance=%d "
|
||||||
|
"ORDER BY position",
|
||||||
|
profile->name, profile->domain, listener->device_name, listener->device_instance,
|
||||||
|
listener->device_name, listener->device_instance
|
||||||
|
))) {
|
||||||
|
skinny_execute_sql_callback(profile, profile->sql_mutex, sql, flush_listener_callback, NULL);
|
||||||
|
switch_safe_free(sql);
|
||||||
|
}
|
||||||
|
|
||||||
if ((sql = switch_mprintf(
|
if ((sql = switch_mprintf(
|
||||||
"DELETE FROM skinny_devices "
|
"DELETE FROM skinny_devices "
|
||||||
"WHERE name='%s' and instance=%d",
|
"WHERE name='%s' and instance=%d",
|
||||||
|
|
|
@ -1006,6 +1006,10 @@ switch_status_t skinny_handle_register(listener_t *listener, skinny_message_t *r
|
||||||
}
|
}
|
||||||
if ((xbuttons = switch_xml_child(xskinny, "buttons"))) {
|
if ((xbuttons = switch_xml_child(xskinny, "buttons"))) {
|
||||||
uint32_t line_instance = 1;
|
uint32_t line_instance = 1;
|
||||||
|
char *network_ip = inet_ntoa(request->data.reg.ip);
|
||||||
|
int network_port = 0;
|
||||||
|
char network_port_c[6];
|
||||||
|
snprintf(network_port_c, sizeof(network_port_c), "%d", network_port);
|
||||||
for (xbutton = switch_xml_child(xbuttons, "button"); xbutton; xbutton = xbutton->next) {
|
for (xbutton = switch_xml_child(xbuttons, "button"); xbutton; xbutton = xbutton->next) {
|
||||||
uint32_t position = atoi(switch_xml_attr_soft(xbutton, "position"));
|
uint32_t position = atoi(switch_xml_attr_soft(xbutton, "position"));
|
||||||
uint32_t type = skinny_str2button(switch_xml_attr_soft(xbutton, "type"));
|
uint32_t type = skinny_str2button(switch_xml_attr_soft(xbutton, "type"));
|
||||||
|
@ -1031,8 +1035,14 @@ switch_status_t skinny_handle_register(listener_t *listener, skinny_message_t *r
|
||||||
label, value, caller_name,
|
label, value, caller_name,
|
||||||
ring_on_idle, ring_on_active, busy_trigger,
|
ring_on_idle, ring_on_active, busy_trigger,
|
||||||
forward_all, forward_busy, forward_noanswer, noanswer_duration))) {
|
forward_all, forward_busy, forward_noanswer, noanswer_duration))) {
|
||||||
|
char *token, *url;
|
||||||
skinny_execute_sql(profile, sql, profile->sql_mutex);
|
skinny_execute_sql(profile, sql, profile->sql_mutex);
|
||||||
switch_safe_free(sql);
|
switch_safe_free(sql);
|
||||||
|
token = switch_mprintf("skinny/%q/%q/%q:%d", profile->name, value, request->data.reg.device_name, request->data.reg.instance);
|
||||||
|
url = switch_mprintf("skinny/%q/%q", profile->name, value);
|
||||||
|
switch_core_add_registration(value, profile->domain, token, url, 0, network_ip, network_port_c, "tcp");
|
||||||
|
switch_safe_free(token);
|
||||||
|
switch_safe_free(url);
|
||||||
}
|
}
|
||||||
if (line_instance == 1) {
|
if (line_instance == 1) {
|
||||||
switch_event_t *message_query_event = NULL;
|
switch_event_t *message_query_event = NULL;
|
||||||
|
|
Loading…
Reference in New Issue