diff --git a/kamailio/dbtext/active_watchers b/kamailio/dbtext/active_watchers deleted file mode 100644 index 2f786f2..0000000 --- a/kamailio/dbtext/active_watchers +++ /dev/null @@ -1 +0,0 @@ -id(int,auto) presentity_uri(string) watcher_username(string) watcher_domain(string) to_user(string) to_domain(string) event(string) event_id(string,null) to_tag(string) from_tag(string) callid(string) local_cseq(int) remote_cseq(int) contact(string) record_route(string,null) expires(int) status(int) reason(string,null) version(int) socket_info(string) local_contact(string) from_user(string) from_domain(string) updated(int) updated_winfo(int) flags(int) user_agent(string,null) diff --git a/kamailio/dbtext/active_watchers_log b/kamailio/dbtext/active_watchers_log deleted file mode 100644 index 940a97b..0000000 --- a/kamailio/dbtext/active_watchers_log +++ /dev/null @@ -1 +0,0 @@ -id(int,auto) presentity_uri(string) watcher_username(string,null) watcher_domain(string) to_user(string,null) to_domain(string) event(string) callid(string) time(int) result(int) sent_msg(blob) received_msg(blob) user_agent(string,null) diff --git a/kamailio/dbtext/address b/kamailio/dbtext/address deleted file mode 100644 index 28c21d4..0000000 --- a/kamailio/dbtext/address +++ /dev/null @@ -1 +0,0 @@ -id(int,auto) grp(int) ip_addr(string) mask(int) port(int) tag(string,null) diff --git a/kamailio/dbtext/dispatcher b/kamailio/dbtext/dispatcher deleted file mode 100644 index 0ac0866..0000000 --- a/kamailio/dbtext/dispatcher +++ /dev/null @@ -1 +0,0 @@ -id(int,auto) setid(int) destination(string) flags(int) priority(int) attrs(string) description(string) diff --git a/kamailio/dbtext/location b/kamailio/dbtext/location deleted file mode 100644 index 4a11737..0000000 --- a/kamailio/dbtext/location +++ /dev/null @@ -1 +0,0 @@ -id(int,auto) ruid(string) username(string) domain(string,null) contact(string) received(string,null) path(string,null) expires(int) q(double) callid(string) cseq(int) last_modified(int) flags(int) cflags(int) user_agent(string) socket(string,null) methods(int,null) instance(string,null) reg_id(int) server_id(int) connection_id(int) keepalive(int) partition(int) diff --git a/kamailio/dbtext/location_attrs b/kamailio/dbtext/location_attrs deleted file mode 100644 index 4214eb6..0000000 --- a/kamailio/dbtext/location_attrs +++ /dev/null @@ -1 +0,0 @@ -id(int,auto) ruid(string) username(string) domain(string,null) aname(string) atype(int) avalue(string) last_modified(int) diff --git a/kamailio/dbtext/presentity b/kamailio/dbtext/presentity deleted file mode 100644 index 3f25d6f..0000000 --- a/kamailio/dbtext/presentity +++ /dev/null @@ -1 +0,0 @@ -id(int,auto) username(string) domain(string) event(string) etag(string) expires(int) received_time(int) body(blob) sender(string,null) priority(int) diff --git a/kamailio/dbtext/pua b/kamailio/dbtext/pua deleted file mode 100644 index 0f3f210..0000000 --- a/kamailio/dbtext/pua +++ /dev/null @@ -1 +0,0 @@ -id(int,auto) pres_uri(string) pres_id(string) event(int) expires(int) desired_expires(int) flag(int) etag(string) tuple_id(string,null) watcher_uri(string,null) call_id(string,null) to_tag(string,null) from_tag(string,null) cseq(int) record_route(string,null) contact(string,null) remote_contact(string,null) version(int) extra_headers(string,null) diff --git a/kamailio/dbtext/trusted b/kamailio/dbtext/trusted deleted file mode 100644 index 132a345..0000000 --- a/kamailio/dbtext/trusted +++ /dev/null @@ -1 +0,0 @@ -id(int,auto) src_ip(string) proto(string) from_pattern(string,null) ruri_pattern(string,null) tag(string,null) priority(int) diff --git a/kamailio/dbtext/version b/kamailio/dbtext/version deleted file mode 100644 index 945dffb..0000000 --- a/kamailio/dbtext/version +++ /dev/null @@ -1,67 +0,0 @@ -table_name(string) table_version(int) -acc:5 -acc_cdrs:1 -active_watchers:12 -address:6 -aliases:6 -carrier_name:1 -carrierfailureroute:2 -carrierroute:3 -cpl:1 -dbaliases:1 -dialog:7 -dialog_vars:1 -dialplan:2 -dispatcher:4 -domain:2 -domain_attrs:1 -domain_name:1 -domainpolicy:2 -dr_gateways:3 -dr_groups:2 -dr_gw_lists:1 -dr_rules:3 -globalblacklist:1 -grp:2 -htable:2 -imc_members:1 -imc_rooms:1 -lcr_gw:3 -lcr_rule:2 -lcr_rule_target:1 -location:8 -location_attrs:1 -matrix:1 -missed_calls:4 -mohqcalls:1 -mohqueues:1 -mtree:1 -mtrees:2 -pdt:1 -pl_pipes:1 -presentity:4 -pua:7 -purplemap:1 -re_grp:1 -rls_presentity:1 -rls_watchers:3 -rtpproxy:1 -sca_subscriptions:1 -silo:7 -sip_trace:3 -speed_dial:2 -subscriber:6 -trusted:6 -uacreg:1 -uid_credentials:7 -uid_domain:2 -uid_domain_attrs:1 -uid_global_attrs:1 -uid_uri:3 -uid_uri_attrs:2 -uid_user_attrs:3 -uri:1 -userblacklist:1 -usr_preferences:2 -watchers:3 -xcap:4 diff --git a/kamailio/dbtext/watchers b/kamailio/dbtext/watchers deleted file mode 100644 index 8ff760a..0000000 --- a/kamailio/dbtext/watchers +++ /dev/null @@ -1 +0,0 @@ -id(int,auto) presentity_uri(string) watcher_username(string) watcher_domain(string) event(string) status(int) reason(string,null) inserted_time(int) diff --git a/kamailio/default.cfg b/kamailio/default.cfg index 0c3e3be..7a677af 100644 --- a/kamailio/default.cfg +++ b/kamailio/default.cfg @@ -87,9 +87,6 @@ dns_srv_lb = off ####### SCTP Parameters ######### disable_sctp = yes -####### Modules Section ######## -mpath="/usr/lib64/kamailio/modules/:/usr/lib/x86_64-linux-gnu/kamailio/modules/" - ######## Kamailio outbound module ######## loadmodule "outbound.so" @@ -165,15 +162,20 @@ loadmodule "xlog.so" ######## UAC ######## loadmodule "uac.so" +######## AVP's ######## +loadmodule "avp.so" +loadmodule "avpops.so" + ######## UAC Redirection module ######## loadmodule "uac_redirect.so" -####### DB Text module ########## -loadmodule "db_text.so" -modparam("db_text", "db_mode", 1) -modparam("db_text", "emptystring", 1) -modparam("db_text", "default_connection", "KAZOO_DB_URL") +####### SQL OPS module ########## +loadmodule "sqlops.so" +modparam("sqlops","sqlcon", "cb=>KAZOO_DB_URL") +modparam("sqlops","sqlcon", "exec=>KAZOO_DB_URL") +####### DATABASE module ########## +loadmodule "db_kazoo.so" ####### Kazoo Integration module ########## loadmodule "kazoo.so" @@ -249,6 +251,12 @@ loadmodule "permissions.so" modparam("permissions", "db_url", "KAZOO_DB_URL") modparam("permissions", "db_mode", 1) + +####### DEBUG ###### +loadmodule "debugger.so" +modparam("debugger", "mod_hash_size", 5) +modparam("debugger", "mod_level_mode", 1) + ####### Routing Logic ######## route { diff --git a/kamailio/defs.cfg b/kamailio/defs.cfg index 17b77a1..34e8917 100644 --- a/kamailio/defs.cfg +++ b/kamailio/defs.cfg @@ -8,11 +8,11 @@ #!endif #!ifndef KAZOO_DATA_DIR -#!substdef "!KAZOO_DATA_DIR!/etc/kazoo/kamailio/dbtext!g" +#!substdef "!KAZOO_DATA_DIR!/etc/kazoo/kamailio/db!g" #!endif #!ifndef KAZOO_DB_URL -#!substdef "!KAZOO_DB_URL!text://KAZOO_DATA_DIR!g" +#!substdef "!KAZOO_DB_URL!kazoo:///KAZOO_DATA_DIR/kazoo.db!g" #!endif #!ifndef MAX_WHILE_LOOPS diff --git a/kamailio/dispatcher-role.cfg b/kamailio/dispatcher-role.cfg index a28f34e..89ccfd2 100644 --- a/kamailio/dispatcher-role.cfg +++ b/kamailio/dispatcher-role.cfg @@ -3,11 +3,7 @@ modparam("htable", "htable", "failover=>size=16;autoexpire=120") ####### Dispatcher module ######## loadmodule "dispatcher.so" -#!ifdef KZ_USE_DISPATCHER_TABLE modparam("dispatcher", "db_url", "KAZOO_DB_URL") -#!else -modparam("dispatcher", "list_file", "/etc/kazoo/kamailio/dbtext/dispatcher") -#!endif modparam("dispatcher", "flags", 2) modparam("dispatcher", "use_default", 0) modparam("dispatcher", "force_dst", 1) @@ -16,7 +12,7 @@ modparam("dispatcher", "attrs_avp", "$avp(ds_attrs)") modparam("dispatcher", "grp_avp", "$avp(ds_grp)") modparam("dispatcher", "cnt_avp", "$avp(ds_cnt)") modparam("dispatcher", "hash_pvar", "$avp(ds_grp)") -# modparam("dispatcher", "setid_pvar", "$var(setid)") +modparam("dispatcher", "setid_pvname", "$var(setid)") modparam("dispatcher", "ds_ping_method", "OPTIONS") modparam("dispatcher", "ds_ping_interval", 10) modparam("dispatcher", "ds_probing_threshold", 3) @@ -205,4 +201,29 @@ route[DISPATCHER_NEXT_ROUTE] } } +event_route[dispatcher:dst-down] +{ + xlog("L_ERR", "Destination down: $ru\n"); +} + +event_route[dispatcher:dst-up] +{ + xlog("L_WARNING", "Destination up: $ru\n"); +} + + +route[DISPATCHER_CHECK_MEDIA_SERVER] +{ + $var(SetId) = 1; + if($var(Zone) != "MY_AMQP_ZONE") { + $var(SetId) = 2; + } + sql_query("exec", "insert into dispatcher (setid, destination) select $var(SetId), \"$var(MediaUrl)\" where not exists(select * from dispatcher where destination = \"$var(MediaUrl)\")"); + if($sqlrows(exec) > 0) { + xlog("L_WARNING", "reloading dispatcher table\n"); + ds_reload(); + } +} + + # vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab diff --git a/kamailio/kazoodb.sql b/kamailio/kazoodb.sql new file mode 100644 index 0000000..50ac76a --- /dev/null +++ b/kamailio/kazoodb.sql @@ -0,0 +1,882 @@ +PRAGMA foreign_keys=OFF; +PRAGMA wal=on; +BEGIN TRANSACTION; +CREATE TABLE version ( + table_name VARCHAR(32) NOT NULL, + table_version INTEGER DEFAULT 0 NOT NULL, + CONSTRAINT version_table_name_idx UNIQUE (table_name) +); +INSERT INTO version VALUES('version',1); +INSERT INTO version VALUES('acc',5); +INSERT INTO version VALUES('acc_cdrs',2); +INSERT INTO version VALUES('missed_calls',4); +INSERT INTO version VALUES('lcr_gw',3); +INSERT INTO version VALUES('lcr_rule_target',1); +INSERT INTO version VALUES('lcr_rule',2); +INSERT INTO version VALUES('domain',2); +INSERT INTO version VALUES('domain_attrs',1); +INSERT INTO version VALUES('grp',2); +INSERT INTO version VALUES('re_grp',1); +INSERT INTO version VALUES('trusted',6); +INSERT INTO version VALUES('address',6); +INSERT INTO version VALUES('aliases',8); +INSERT INTO version VALUES('location',8); +INSERT INTO version VALUES('location_attrs',1); +INSERT INTO version VALUES('silo',8); +INSERT INTO version VALUES('dbaliases',1); +INSERT INTO version VALUES('uri',1); +INSERT INTO version VALUES('speed_dial',2); +INSERT INTO version VALUES('usr_preferences',2); +INSERT INTO version VALUES('subscriber',7); +INSERT INTO version VALUES('pdt',1); +INSERT INTO version VALUES('dialog',7); +INSERT INTO version VALUES('dialog_vars',1); +INSERT INTO version VALUES('dispatcher',4); +INSERT INTO version VALUES('dialplan',2); +INSERT INTO version VALUES('topos_d',1); +INSERT INTO version VALUES('topos_t',1); +INSERT INTO version VALUES('presentity',4); +INSERT INTO version VALUES('active_watchers',12); +INSERT INTO version VALUES('watchers',3); +INSERT INTO version VALUES('xcap',4); +INSERT INTO version VALUES('pua',7); +INSERT INTO version VALUES('rls_presentity',1); +INSERT INTO version VALUES('rls_watchers',3); +INSERT INTO version VALUES('imc_rooms',1); +INSERT INTO version VALUES('imc_members',1); +INSERT INTO version VALUES('cpl',1); +INSERT INTO version VALUES('sip_trace',4); +INSERT INTO version VALUES('domainpolicy',2); +INSERT INTO version VALUES('carrierroute',3); +INSERT INTO version VALUES('carrierfailureroute',2); +INSERT INTO version VALUES('carrier_name',1); +INSERT INTO version VALUES('domain_name',1); +INSERT INTO version VALUES('userblacklist',1); +INSERT INTO version VALUES('globalblacklist',1); +INSERT INTO version VALUES('htable',2); +INSERT INTO version VALUES('purplemap',1); +INSERT INTO version VALUES('uacreg',3); +INSERT INTO version VALUES('pl_pipes',1); +INSERT INTO version VALUES('mtree',1); +INSERT INTO version VALUES('mtrees',2); +INSERT INTO version VALUES('sca_subscriptions',2); +INSERT INTO version VALUES('mohqcalls',1); +INSERT INTO version VALUES('mohqueues',1); +INSERT INTO version VALUES('rtpproxy',1); +INSERT INTO version VALUES('uid_credentials',7); +INSERT INTO version VALUES('uid_user_attrs',3); +INSERT INTO version VALUES('uid_domain',2); +INSERT INTO version VALUES('uid_domain_attrs',1); +INSERT INTO version VALUES('uid_global_attrs',1); +INSERT INTO version VALUES('uid_uri',3); +INSERT INTO version VALUES('uid_uri_attrs',2); +CREATE TABLE acc ( + id INTEGER PRIMARY KEY NOT NULL, + method VARCHAR(16) DEFAULT '' NOT NULL, + from_tag VARCHAR(64) DEFAULT '' NOT NULL, + to_tag VARCHAR(64) DEFAULT '' NOT NULL, + callid VARCHAR(255) DEFAULT '' NOT NULL, + sip_code VARCHAR(3) DEFAULT '' NOT NULL, + sip_reason VARCHAR(128) DEFAULT '' NOT NULL, + time TIMESTAMP WITHOUT TIME ZONE NOT NULL +); +CREATE TABLE acc_cdrs ( + id INTEGER PRIMARY KEY NOT NULL, + start_time TIMESTAMP WITHOUT TIME ZONE DEFAULT '2000-01-01 00:00:00' NOT NULL, + end_time TIMESTAMP WITHOUT TIME ZONE DEFAULT '2000-01-01 00:00:00' NOT NULL, + duration REAL DEFAULT 0 NOT NULL +); +CREATE TABLE missed_calls ( + id INTEGER PRIMARY KEY NOT NULL, + method VARCHAR(16) DEFAULT '' NOT NULL, + from_tag VARCHAR(64) DEFAULT '' NOT NULL, + to_tag VARCHAR(64) DEFAULT '' NOT NULL, + callid VARCHAR(255) DEFAULT '' NOT NULL, + sip_code VARCHAR(3) DEFAULT '' NOT NULL, + sip_reason VARCHAR(128) DEFAULT '' NOT NULL, + time TIMESTAMP WITHOUT TIME ZONE NOT NULL +); +CREATE TABLE lcr_gw ( + id INTEGER PRIMARY KEY NOT NULL, + lcr_id SMALLINT NOT NULL, + gw_name VARCHAR(128), + ip_addr VARCHAR(50), + hostname VARCHAR(64), + port SMALLINT, + params VARCHAR(64), + uri_scheme SMALLINT, + transport SMALLINT, + strip SMALLINT, + prefix VARCHAR(16) DEFAULT NULL, + tag VARCHAR(64) DEFAULT NULL, + flags INTEGER DEFAULT 0 NOT NULL, + defunct INTEGER DEFAULT NULL +); +CREATE TABLE lcr_rule_target ( + id INTEGER PRIMARY KEY NOT NULL, + lcr_id SMALLINT NOT NULL, + rule_id INTEGER NOT NULL, + gw_id INTEGER NOT NULL, + priority SMALLINT NOT NULL, + weight INTEGER DEFAULT 1 NOT NULL, + CONSTRAINT lcr_rule_target_rule_id_gw_id_idx UNIQUE (rule_id, gw_id) +); +CREATE TABLE lcr_rule ( + id INTEGER PRIMARY KEY NOT NULL, + lcr_id SMALLINT NOT NULL, + prefix VARCHAR(16) DEFAULT NULL, + from_uri VARCHAR(64) DEFAULT NULL, + request_uri VARCHAR(64) DEFAULT NULL, + stopper INTEGER DEFAULT 0 NOT NULL, + enabled INTEGER DEFAULT 1 NOT NULL, + CONSTRAINT lcr_rule_lcr_id_prefix_from_uri_idx UNIQUE (lcr_id, prefix, from_uri) +); +CREATE TABLE domain ( + id INTEGER PRIMARY KEY NOT NULL, + domain VARCHAR(64) NOT NULL COLLATE NOCASE, + did VARCHAR(64) DEFAULT NULL COLLATE NOCASE, + last_modified TIMESTAMP WITHOUT TIME ZONE DEFAULT '2000-01-01 00:00:01' NOT NULL, + CONSTRAINT domain_domain_idx UNIQUE (domain) +); +CREATE TABLE domain_attrs ( + id INTEGER PRIMARY KEY NOT NULL, + did VARCHAR(64) NOT NULL COLLATE NOCASE, + name VARCHAR(32) NOT NULL COLLATE NOCASE, + type INTEGER NOT NULL, + value VARCHAR(255) NOT NULL COLLATE NOCASE, + last_modified TIMESTAMP WITHOUT TIME ZONE DEFAULT '2000-01-01 00:00:01' NOT NULL, + CONSTRAINT domain_attrs_domain_attrs_idx UNIQUE (did, name, value) +); +CREATE TABLE grp ( + id INTEGER PRIMARY KEY NOT NULL, + username VARCHAR(64) DEFAULT '' NOT NULL COLLATE NOCASE, + domain VARCHAR(64) DEFAULT '' NOT NULL COLLATE NOCASE, + grp VARCHAR(64) DEFAULT '' NOT NULL COLLATE NOCASE, + last_modified TIMESTAMP WITHOUT TIME ZONE DEFAULT '2000-01-01 00:00:01' NOT NULL, + CONSTRAINT grp_account_group_idx UNIQUE (username, domain, grp) +); +CREATE TABLE re_grp ( + id INTEGER PRIMARY KEY NOT NULL, + reg_exp VARCHAR(128) DEFAULT '' NOT NULL, + group_id INTEGER DEFAULT 0 NOT NULL +); +CREATE TABLE trusted ( + id INTEGER PRIMARY KEY NOT NULL, + src_ip VARCHAR(50) NOT NULL, + proto VARCHAR(4) NOT NULL, + from_pattern VARCHAR(64) DEFAULT NULL, + ruri_pattern VARCHAR(64) DEFAULT NULL, + tag VARCHAR(64), + priority INTEGER DEFAULT 0 NOT NULL +); +CREATE TABLE address ( + id INTEGER PRIMARY KEY NOT NULL, + grp INTEGER DEFAULT 1 NOT NULL, + ip_addr VARCHAR(50) NOT NULL, + mask INTEGER DEFAULT 32 NOT NULL, + port SMALLINT DEFAULT 0 NOT NULL, + tag VARCHAR(64) +); +CREATE TABLE aliases ( + id INTEGER PRIMARY KEY NOT NULL, + ruid VARCHAR(64) DEFAULT '' NOT NULL, + username VARCHAR(64) DEFAULT '' NOT NULL, + domain VARCHAR(64) DEFAULT NULL, + contact VARCHAR(255) DEFAULT '' NOT NULL, + received VARCHAR(128) DEFAULT NULL, + path VARCHAR(512) DEFAULT NULL, + expires TIMESTAMP WITHOUT TIME ZONE DEFAULT '2030-05-28 21:32:15' NOT NULL, + q REAL DEFAULT 1.0 NOT NULL, + callid VARCHAR(255) DEFAULT 'Default-Call-ID' NOT NULL, + cseq INTEGER DEFAULT 1 NOT NULL, + last_modified TIMESTAMP WITHOUT TIME ZONE DEFAULT '2000-01-01 00:00:01' NOT NULL, + flags INTEGER DEFAULT 0 NOT NULL, + cflags INTEGER DEFAULT 0 NOT NULL, + user_agent VARCHAR(255) DEFAULT '' NOT NULL, + socket VARCHAR(64) DEFAULT NULL, + methods INTEGER DEFAULT NULL, + instance VARCHAR(255) DEFAULT NULL, + reg_id INTEGER DEFAULT 0 NOT NULL, + server_id INTEGER DEFAULT 0 NOT NULL, + connection_id INTEGER DEFAULT 0 NOT NULL, + keepalive INTEGER DEFAULT 0 NOT NULL, + partition INTEGER DEFAULT 0 NOT NULL, + CONSTRAINT aliases_ruid_idx UNIQUE (ruid) +); +CREATE TABLE location ( + id INTEGER PRIMARY KEY NOT NULL, + ruid VARCHAR(64) DEFAULT '' NOT NULL, + username VARCHAR(64) DEFAULT '' NOT NULL COLLATE NOCASE, + domain VARCHAR(64) DEFAULT NULL COLLATE NOCASE, + contact VARCHAR(255) DEFAULT '' NOT NULL, + received VARCHAR(128) DEFAULT NULL, + path VARCHAR(512) DEFAULT NULL, + expires TIMESTAMP WITHOUT TIME ZONE DEFAULT '2030-05-28 21:32:15' NOT NULL, + q REAL DEFAULT 1.0 NOT NULL, + callid VARCHAR(255) DEFAULT 'Default-Call-ID' NOT NULL, + cseq INTEGER DEFAULT 1 NOT NULL, + last_modified TIMESTAMP WITHOUT TIME ZONE DEFAULT '2000-01-01 00:00:01' NOT NULL, + flags INTEGER DEFAULT 0 NOT NULL, + cflags INTEGER DEFAULT 0 NOT NULL, + user_agent VARCHAR(255) DEFAULT '' NOT NULL COLLATE NOCASE, + socket VARCHAR(64) DEFAULT NULL, + methods INTEGER DEFAULT NULL, + instance VARCHAR(255) DEFAULT NULL, + reg_id INTEGER DEFAULT 0 NOT NULL, + server_id INTEGER DEFAULT 0 NOT NULL, + connection_id INTEGER DEFAULT 0 NOT NULL, + keepalive INTEGER DEFAULT 0 NOT NULL, + partition INTEGER DEFAULT 0 NOT NULL, + CONSTRAINT location_ruid_idx UNIQUE (ruid) +); +CREATE TABLE location_attrs ( + id INTEGER PRIMARY KEY NOT NULL, + ruid VARCHAR(64) DEFAULT '' NOT NULL, + username VARCHAR(64) DEFAULT '' NOT NULL COLLATE NOCASE, + domain VARCHAR(64) DEFAULT NULL COLLATE NOCASE, + aname VARCHAR(64) DEFAULT '' NOT NULL COLLATE NOCASE, + atype INTEGER DEFAULT 0 NOT NULL COLLATE NOCASE, + avalue VARCHAR(255) DEFAULT '' NOT NULL COLLATE NOCASE, + last_modified TIMESTAMP WITHOUT TIME ZONE DEFAULT '2000-01-01 00:00:01' NOT NULL +); +CREATE TABLE silo ( + id INTEGER PRIMARY KEY NOT NULL, + src_addr VARCHAR(128) DEFAULT '' NOT NULL, + dst_addr VARCHAR(128) DEFAULT '' NOT NULL, + username VARCHAR(64) DEFAULT '' NOT NULL, + domain VARCHAR(64) DEFAULT '' NOT NULL, + inc_time INTEGER DEFAULT 0 NOT NULL, + exp_time INTEGER DEFAULT 0 NOT NULL, + snd_time INTEGER DEFAULT 0 NOT NULL, + ctype VARCHAR(32) DEFAULT 'text/plain' NOT NULL, + body BLOB, + extra_hdrs TEXT, + callid VARCHAR(128) DEFAULT '' NOT NULL, + status INTEGER DEFAULT 0 NOT NULL +); +CREATE TABLE dbaliases ( + id INTEGER PRIMARY KEY NOT NULL, + alias_username VARCHAR(64) DEFAULT '' NOT NULL, + alias_domain VARCHAR(64) DEFAULT '' NOT NULL, + username VARCHAR(64) DEFAULT '' NOT NULL, + domain VARCHAR(64) DEFAULT '' NOT NULL +); +CREATE TABLE uri ( + id INTEGER PRIMARY KEY NOT NULL, + username VARCHAR(64) DEFAULT '' NOT NULL, + domain VARCHAR(64) DEFAULT '' NOT NULL, + uri_user VARCHAR(64) DEFAULT '' NOT NULL, + last_modified TIMESTAMP WITHOUT TIME ZONE DEFAULT '2000-01-01 00:00:01' NOT NULL, + CONSTRAINT uri_account_idx UNIQUE (username, domain, uri_user) +); +CREATE TABLE speed_dial ( + id INTEGER PRIMARY KEY NOT NULL, + username VARCHAR(64) DEFAULT '' NOT NULL, + domain VARCHAR(64) DEFAULT '' NOT NULL, + sd_username VARCHAR(64) DEFAULT '' NOT NULL, + sd_domain VARCHAR(64) DEFAULT '' NOT NULL, + new_uri VARCHAR(128) DEFAULT '' NOT NULL, + fname VARCHAR(64) DEFAULT '' NOT NULL, + lname VARCHAR(64) DEFAULT '' NOT NULL, + description VARCHAR(64) DEFAULT '' NOT NULL, + CONSTRAINT speed_dial_speed_dial_idx UNIQUE (username, domain, sd_domain, sd_username) +); +CREATE TABLE usr_preferences ( + id INTEGER PRIMARY KEY NOT NULL, + uuid VARCHAR(64) DEFAULT '' NOT NULL, + username VARCHAR(128) DEFAULT 0 NOT NULL, + domain VARCHAR(64) DEFAULT '' NOT NULL, + attribute VARCHAR(32) DEFAULT '' NOT NULL, + type INTEGER DEFAULT 0 NOT NULL, + value VARCHAR(128) DEFAULT '' NOT NULL, + last_modified TIMESTAMP WITHOUT TIME ZONE DEFAULT '2000-01-01 00:00:01' NOT NULL +); +CREATE TABLE subscriber ( + id INTEGER PRIMARY KEY NOT NULL, + username VARCHAR(64) DEFAULT '' NOT NULL, + domain VARCHAR(64) DEFAULT '' NOT NULL, + password VARCHAR(64) DEFAULT '' NOT NULL, + ha1 VARCHAR(128) DEFAULT '' NOT NULL, + ha1b VARCHAR(128) DEFAULT '' NOT NULL, + email_address VARCHAR(128) DEFAULT NULL, + rpid VARCHAR(128) DEFAULT NULL, + CONSTRAINT subscriber_account_idx UNIQUE (username, domain) +); +CREATE TABLE pdt ( + id INTEGER PRIMARY KEY NOT NULL, + sdomain VARCHAR(128) NOT NULL, + prefix VARCHAR(32) NOT NULL, + domain VARCHAR(128) DEFAULT '' NOT NULL, + CONSTRAINT pdt_sdomain_prefix_idx UNIQUE (sdomain, prefix) +); +CREATE TABLE dialog ( + id INTEGER PRIMARY KEY NOT NULL, + hash_entry INTEGER NOT NULL, + hash_id INTEGER NOT NULL, + callid VARCHAR(255) NOT NULL, + from_uri VARCHAR(128) NOT NULL, + from_tag VARCHAR(64) NOT NULL, + to_uri VARCHAR(128) NOT NULL, + to_tag VARCHAR(64) NOT NULL, + caller_cseq VARCHAR(20) NOT NULL, + callee_cseq VARCHAR(20) NOT NULL, + caller_route_set VARCHAR(512), + callee_route_set VARCHAR(512), + caller_contact VARCHAR(128) NOT NULL, + callee_contact VARCHAR(128) NOT NULL, + caller_sock VARCHAR(64) NOT NULL, + callee_sock VARCHAR(64) NOT NULL, + state INTEGER NOT NULL, + start_time INTEGER NOT NULL, + timeout INTEGER DEFAULT 0 NOT NULL, + sflags INTEGER DEFAULT 0 NOT NULL, + iflags INTEGER DEFAULT 0 NOT NULL, + toroute_name VARCHAR(32), + req_uri VARCHAR(128) NOT NULL, + xdata VARCHAR(512) +); +CREATE TABLE dialog_vars ( + id INTEGER PRIMARY KEY NOT NULL, + hash_entry INTEGER NOT NULL, + hash_id INTEGER NOT NULL, + dialog_key VARCHAR(128) NOT NULL, + dialog_value VARCHAR(512) NOT NULL +); +CREATE TABLE dispatcher ( + id INTEGER PRIMARY KEY NOT NULL, + setid INTEGER DEFAULT 0 NOT NULL, + destination VARCHAR(192) DEFAULT '' NOT NULL, + flags INTEGER DEFAULT 0 NOT NULL, + priority INTEGER DEFAULT 0 NOT NULL, + attrs VARCHAR(128) DEFAULT '' NOT NULL, + description VARCHAR(64) DEFAULT '' NOT NULL +); +CREATE TABLE dialplan ( + id INTEGER PRIMARY KEY NOT NULL, + dpid INTEGER NOT NULL, + pr INTEGER NOT NULL, + match_op INTEGER NOT NULL, + match_exp VARCHAR(64) NOT NULL, + match_len INTEGER NOT NULL, + subst_exp VARCHAR(64) NOT NULL, + repl_exp VARCHAR(256) NOT NULL, + attrs VARCHAR(64) NOT NULL +); +CREATE TABLE topos_d ( + id INTEGER PRIMARY KEY NOT NULL, + rectime TIMESTAMP WITHOUT TIME ZONE NOT NULL, + s_method VARCHAR(64) DEFAULT '' NOT NULL, + s_cseq VARCHAR(64) DEFAULT '' NOT NULL, + a_callid VARCHAR(255) DEFAULT '' NOT NULL, + a_uuid VARCHAR(255) DEFAULT '' NOT NULL, + b_uuid VARCHAR(255) DEFAULT '' NOT NULL, + a_contact VARCHAR(128) DEFAULT '' NOT NULL, + b_contact VARCHAR(128) DEFAULT '' NOT NULL, + as_contact VARCHAR(128) DEFAULT '' NOT NULL, + bs_contact VARCHAR(128) DEFAULT '' NOT NULL, + a_tag VARCHAR(255) DEFAULT '' NOT NULL, + b_tag VARCHAR(255) DEFAULT '' NOT NULL, + a_rr TEXT, + b_rr TEXT, + s_rr TEXT, + iflags INTEGER DEFAULT 0 NOT NULL, + a_uri VARCHAR(128) DEFAULT '' NOT NULL, + b_uri VARCHAR(128) DEFAULT '' NOT NULL, + r_uri VARCHAR(128) DEFAULT '' NOT NULL, + a_srcaddr VARCHAR(128) DEFAULT '' NOT NULL, + b_srcaddr VARCHAR(128) DEFAULT '' NOT NULL, + a_socket VARCHAR(128) DEFAULT '' NOT NULL, + b_socket VARCHAR(128) DEFAULT '' NOT NULL +); +CREATE TABLE topos_t ( + id INTEGER PRIMARY KEY NOT NULL, + rectime TIMESTAMP WITHOUT TIME ZONE NOT NULL, + s_method VARCHAR(64) DEFAULT '' NOT NULL, + s_cseq VARCHAR(64) DEFAULT '' NOT NULL, + a_callid VARCHAR(255) DEFAULT '' NOT NULL, + a_uuid VARCHAR(255) DEFAULT '' NOT NULL, + b_uuid VARCHAR(255) DEFAULT '' NOT NULL, + direction INTEGER DEFAULT 0 NOT NULL, + x_via TEXT, + x_vbranch VARCHAR(255) DEFAULT '' NOT NULL, + x_rr TEXT, + y_rr TEXT, + s_rr TEXT, + x_uri VARCHAR(128) DEFAULT '' NOT NULL, + a_contact VARCHAR(128) DEFAULT '' NOT NULL, + b_contact VARCHAR(128) DEFAULT '' NOT NULL, + as_contact VARCHAR(128) DEFAULT '' NOT NULL, + bs_contact VARCHAR(128) DEFAULT '' NOT NULL, + x_tag VARCHAR(255) DEFAULT '' NOT NULL, + a_tag VARCHAR(255) DEFAULT '' NOT NULL, + b_tag VARCHAR(255) DEFAULT '' NOT NULL, + a_srcaddr VARCHAR(128) DEFAULT '' NOT NULL, + b_srcaddr VARCHAR(128) DEFAULT '' NOT NULL, + a_socket VARCHAR(128) DEFAULT '' NOT NULL, + b_socket VARCHAR(128) DEFAULT '' NOT NULL +); +CREATE TABLE presentity ( + id INTEGER PRIMARY KEY NOT NULL, + username VARCHAR(64) NOT NULL COLLATE NOCASE, + domain VARCHAR(64) NOT NULL COLLATE NOCASE, + event VARCHAR(64) NOT NULL, + etag VARCHAR(64) NOT NULL, + expires INTEGER NOT NULL, + received_time INTEGER NOT NULL, + body BLOB NOT NULL, + sender VARCHAR(128) NOT NULL, + priority INTEGER DEFAULT 0 NOT NULL, + CONSTRAINT presentity_presentity_idx UNIQUE (username, domain, event, etag) +); +CREATE TABLE active_watchers ( + id INTEGER PRIMARY KEY NOT NULL, + presentity_uri VARCHAR(128) NOT NULL COLLATE NOCASE, + watcher_username VARCHAR(64) NOT NULL COLLATE NOCASE, + watcher_domain VARCHAR(64) NOT NULL COLLATE NOCASE, + to_user VARCHAR(64) NOT NULL COLLATE NOCASE, + to_domain VARCHAR(64) NOT NULL COLLATE NOCASE, + event VARCHAR(64) DEFAULT 'presence' NOT NULL, + event_id VARCHAR(64), + to_tag VARCHAR(64) NOT NULL, + from_tag VARCHAR(64) NOT NULL, + callid VARCHAR(255) NOT NULL, + local_cseq INTEGER NOT NULL, + remote_cseq INTEGER NOT NULL, + contact VARCHAR(128) NOT NULL, + record_route TEXT, + expires INTEGER NOT NULL, + status INTEGER DEFAULT 2 NOT NULL, + reason VARCHAR(64), + version INTEGER DEFAULT 0 NOT NULL, + socket_info VARCHAR(64) NOT NULL, + local_contact VARCHAR(128) NOT NULL, + from_user VARCHAR(64) NOT NULL, + from_domain VARCHAR(64) NOT NULL, + updated INTEGER NOT NULL, + updated_winfo INTEGER NOT NULL, + flags INTEGER DEFAULT 0 NOT NULL, + user_agent VARCHAR(255) DEFAULT '' NOT NULL, + CONSTRAINT active_watchers_active_watchers_idx UNIQUE (callid, to_tag, from_tag) +); +CREATE TABLE watchers ( + id INTEGER PRIMARY KEY NOT NULL, + presentity_uri VARCHAR(128) NOT NULL COLLATE NOCASE, + watcher_username VARCHAR(64) NOT NULL COLLATE NOCASE, + watcher_domain VARCHAR(64) NOT NULL COLLATE NOCASE, + event VARCHAR(64) DEFAULT 'presence' NOT NULL, + status INTEGER NOT NULL, + reason VARCHAR(64), + inserted_time INTEGER NOT NULL, + CONSTRAINT watchers_watcher_idx UNIQUE (presentity_uri, watcher_username, watcher_domain, event) +); +CREATE TABLE xcap ( + id INTEGER PRIMARY KEY NOT NULL, + username VARCHAR(64) NOT NULL COLLATE NOCASE, + domain VARCHAR(64) NOT NULL COLLATE NOCASE, + doc BLOB NOT NULL, + doc_type INTEGER NOT NULL, + etag VARCHAR(64) NOT NULL, + source INTEGER NOT NULL, + doc_uri VARCHAR(255) NOT NULL, + port INTEGER NOT NULL, + CONSTRAINT xcap_doc_uri_idx UNIQUE (doc_uri) +); +CREATE TABLE pua ( + id INTEGER PRIMARY KEY NOT NULL, + pres_uri VARCHAR(128) NOT NULL, + pres_id VARCHAR(255) NOT NULL, + event INTEGER NOT NULL, + expires INTEGER NOT NULL, + desired_expires INTEGER NOT NULL, + flag INTEGER NOT NULL, + etag VARCHAR(64) NOT NULL, + tuple_id VARCHAR(64), + watcher_uri VARCHAR(128) NOT NULL, + call_id VARCHAR(255) NOT NULL, + to_tag VARCHAR(64) NOT NULL, + from_tag VARCHAR(64) NOT NULL, + cseq INTEGER NOT NULL, + record_route TEXT, + contact VARCHAR(128) NOT NULL, + remote_contact VARCHAR(128) NOT NULL, + version INTEGER NOT NULL, + extra_headers TEXT NOT NULL, + CONSTRAINT pua_pua_idx UNIQUE (etag, tuple_id, call_id, from_tag) +); +CREATE TABLE rls_presentity ( + id INTEGER PRIMARY KEY NOT NULL, + rlsubs_did VARCHAR(255) NOT NULL, + resource_uri VARCHAR(128) NOT NULL, + content_type VARCHAR(255) NOT NULL, + presence_state BLOB NOT NULL, + expires INTEGER NOT NULL, + updated INTEGER NOT NULL, + auth_state INTEGER NOT NULL, + reason VARCHAR(64) NOT NULL, + CONSTRAINT rls_presentity_rls_presentity_idx UNIQUE (rlsubs_did, resource_uri) +); +CREATE TABLE rls_watchers ( + id INTEGER PRIMARY KEY NOT NULL, + presentity_uri VARCHAR(128) NOT NULL, + to_user VARCHAR(64) NOT NULL, + to_domain VARCHAR(64) NOT NULL, + watcher_username VARCHAR(64) NOT NULL, + watcher_domain VARCHAR(64) NOT NULL, + event VARCHAR(64) DEFAULT 'presence' NOT NULL, + event_id VARCHAR(64), + to_tag VARCHAR(64) NOT NULL, + from_tag VARCHAR(64) NOT NULL, + callid VARCHAR(255) NOT NULL, + local_cseq INTEGER NOT NULL, + remote_cseq INTEGER NOT NULL, + contact VARCHAR(128) NOT NULL, + record_route TEXT, + expires INTEGER NOT NULL, + status INTEGER DEFAULT 2 NOT NULL, + reason VARCHAR(64) NOT NULL, + version INTEGER DEFAULT 0 NOT NULL, + socket_info VARCHAR(64) NOT NULL, + local_contact VARCHAR(128) NOT NULL, + from_user VARCHAR(64) NOT NULL, + from_domain VARCHAR(64) NOT NULL, + updated INTEGER NOT NULL, + CONSTRAINT rls_watchers_rls_watcher_idx UNIQUE (callid, to_tag, from_tag) +); +CREATE TABLE imc_rooms ( + id INTEGER PRIMARY KEY NOT NULL, + name VARCHAR(64) NOT NULL, + domain VARCHAR(64) NOT NULL, + flag INTEGER NOT NULL, + CONSTRAINT imc_rooms_name_domain_idx UNIQUE (name, domain) +); +CREATE TABLE imc_members ( + id INTEGER PRIMARY KEY NOT NULL, + username VARCHAR(64) NOT NULL, + domain VARCHAR(64) NOT NULL, + room VARCHAR(64) NOT NULL, + flag INTEGER NOT NULL, + CONSTRAINT imc_members_account_room_idx UNIQUE (username, domain, room) +); +CREATE TABLE cpl ( + id INTEGER PRIMARY KEY NOT NULL, + username VARCHAR(64) NOT NULL, + domain VARCHAR(64) DEFAULT '' NOT NULL, + cpl_xml TEXT, + cpl_bin TEXT, + CONSTRAINT cpl_account_idx UNIQUE (username, domain) +); +CREATE TABLE sip_trace ( + id INTEGER PRIMARY KEY NOT NULL, + time_stamp TIMESTAMP WITHOUT TIME ZONE DEFAULT '2000-01-01 00:00:01' NOT NULL, + time_us INTEGER DEFAULT 0 NOT NULL, + callid VARCHAR(255) DEFAULT '' NOT NULL, + traced_user VARCHAR(128) DEFAULT '' NOT NULL, + msg TEXT NOT NULL, + method VARCHAR(50) DEFAULT '' NOT NULL, + status VARCHAR(128) DEFAULT '' NOT NULL, + fromip VARCHAR(50) DEFAULT '' NOT NULL, + toip VARCHAR(50) DEFAULT '' NOT NULL, + fromtag VARCHAR(64) DEFAULT '' NOT NULL, + totag VARCHAR(64) DEFAULT '' NOT NULL, + direction VARCHAR(4) DEFAULT '' NOT NULL +); +CREATE TABLE domainpolicy ( + id INTEGER PRIMARY KEY NOT NULL, + rule VARCHAR(255) NOT NULL, + type VARCHAR(255) NOT NULL, + att VARCHAR(255), + val VARCHAR(128), + description VARCHAR(255) NOT NULL, + CONSTRAINT domainpolicy_rav_idx UNIQUE (rule, att, val) +); +CREATE TABLE carrierroute ( + id INTEGER PRIMARY KEY NOT NULL, + carrier INTEGER DEFAULT 0 NOT NULL, + domain INTEGER DEFAULT 0 NOT NULL, + scan_prefix VARCHAR(64) DEFAULT '' NOT NULL, + flags INTEGER DEFAULT 0 NOT NULL, + mask INTEGER DEFAULT 0 NOT NULL, + prob REAL DEFAULT 0 NOT NULL, + strip INTEGER DEFAULT 0 NOT NULL, + rewrite_host VARCHAR(128) DEFAULT '' NOT NULL, + rewrite_prefix VARCHAR(64) DEFAULT '' NOT NULL, + rewrite_suffix VARCHAR(64) DEFAULT '' NOT NULL, + description VARCHAR(255) DEFAULT NULL +); +CREATE TABLE carrierfailureroute ( + id INTEGER PRIMARY KEY NOT NULL, + carrier INTEGER DEFAULT 0 NOT NULL, + domain INTEGER DEFAULT 0 NOT NULL, + scan_prefix VARCHAR(64) DEFAULT '' NOT NULL, + host_name VARCHAR(128) DEFAULT '' NOT NULL, + reply_code VARCHAR(3) DEFAULT '' NOT NULL, + flags INTEGER DEFAULT 0 NOT NULL, + mask INTEGER DEFAULT 0 NOT NULL, + next_domain INTEGER DEFAULT 0 NOT NULL, + description VARCHAR(255) DEFAULT NULL +); +CREATE TABLE carrier_name ( + id INTEGER PRIMARY KEY NOT NULL, + carrier VARCHAR(64) DEFAULT NULL +); +CREATE TABLE domain_name ( + id INTEGER PRIMARY KEY NOT NULL, + domain VARCHAR(64) DEFAULT NULL +); +CREATE TABLE userblacklist ( + id INTEGER PRIMARY KEY NOT NULL, + username VARCHAR(64) DEFAULT '' NOT NULL, + domain VARCHAR(64) DEFAULT '' NOT NULL, + prefix VARCHAR(64) DEFAULT '' NOT NULL, + whitelist SMALLINT DEFAULT 0 NOT NULL +); +CREATE TABLE globalblacklist ( + id INTEGER PRIMARY KEY NOT NULL, + prefix VARCHAR(64) DEFAULT '' NOT NULL, + whitelist SMALLINT DEFAULT 0 NOT NULL, + description VARCHAR(255) DEFAULT NULL +); +CREATE TABLE htable ( + id INTEGER PRIMARY KEY NOT NULL, + key_name VARCHAR(64) DEFAULT '' NOT NULL, + key_type INTEGER DEFAULT 0 NOT NULL, + value_type INTEGER DEFAULT 0 NOT NULL, + key_value VARCHAR(128) DEFAULT '' NOT NULL, + expires INTEGER DEFAULT 0 NOT NULL +); +CREATE TABLE purplemap ( + id INTEGER PRIMARY KEY NOT NULL, + sip_user VARCHAR(128) NOT NULL, + ext_user VARCHAR(128) NOT NULL, + ext_prot VARCHAR(16) NOT NULL, + ext_pass VARCHAR(64) +); +CREATE TABLE uacreg ( + id INTEGER PRIMARY KEY NOT NULL, + l_uuid VARCHAR(64) DEFAULT '' NOT NULL, + l_username VARCHAR(64) DEFAULT '' NOT NULL, + l_domain VARCHAR(64) DEFAULT '' NOT NULL, + r_username VARCHAR(64) DEFAULT '' NOT NULL, + r_domain VARCHAR(64) DEFAULT '' NOT NULL, + realm VARCHAR(64) DEFAULT '' NOT NULL, + auth_username VARCHAR(64) DEFAULT '' NOT NULL, + auth_password VARCHAR(64) DEFAULT '' NOT NULL, + auth_ha1 VARCHAR(128) DEFAULT '' NOT NULL, + auth_proxy VARCHAR(128) DEFAULT '' NOT NULL, + expires INTEGER DEFAULT 0 NOT NULL, + flags INTEGER DEFAULT 0 NOT NULL, + reg_delay INTEGER DEFAULT 0 NOT NULL, + CONSTRAINT uacreg_l_uuid_idx UNIQUE (l_uuid) +); +CREATE TABLE pl_pipes ( + id INTEGER PRIMARY KEY NOT NULL, + pipeid VARCHAR(64) DEFAULT '' NOT NULL, + algorithm VARCHAR(32) DEFAULT '' NOT NULL, + plimit INTEGER DEFAULT 0 NOT NULL +); +CREATE TABLE mtree ( + id INTEGER PRIMARY KEY NOT NULL, + tprefix VARCHAR(32) DEFAULT '' NOT NULL, + tvalue VARCHAR(128) DEFAULT '' NOT NULL, + CONSTRAINT mtree_tprefix_idx UNIQUE (tprefix) +); +CREATE TABLE mtrees ( + id INTEGER PRIMARY KEY NOT NULL, + tname VARCHAR(128) DEFAULT '' NOT NULL, + tprefix VARCHAR(32) DEFAULT '' NOT NULL, + tvalue VARCHAR(128) DEFAULT '' NOT NULL, + CONSTRAINT mtrees_tname_tprefix_tvalue_idx UNIQUE (tname, tprefix, tvalue) +); +CREATE TABLE sca_subscriptions ( + id INTEGER PRIMARY KEY NOT NULL, + subscriber VARCHAR(255) NOT NULL, + aor VARCHAR(255) NOT NULL, + event INTEGER DEFAULT 0 NOT NULL, + expires INTEGER DEFAULT 0 NOT NULL, + state INTEGER DEFAULT 0 NOT NULL, + app_idx INTEGER DEFAULT 0 NOT NULL, + call_id VARCHAR(255) NOT NULL, + from_tag VARCHAR(64) NOT NULL, + to_tag VARCHAR(64) NOT NULL, + record_route TEXT, + notify_cseq INTEGER NOT NULL, + subscribe_cseq INTEGER NOT NULL, + server_id INTEGER DEFAULT 0 NOT NULL, + CONSTRAINT sca_subscriptions_sca_subscriptions_idx UNIQUE (subscriber, call_id, from_tag, to_tag) +); +CREATE TABLE mohqcalls ( + id INTEGER PRIMARY KEY NOT NULL, + mohq_id INTEGER NOT NULL, + call_id VARCHAR(100) NOT NULL, + call_status INTEGER NOT NULL, + call_from VARCHAR(100) NOT NULL, + call_contact VARCHAR(100), + call_time TIMESTAMP WITHOUT TIME ZONE NOT NULL, + CONSTRAINT mohqcalls_mohqcalls_idx UNIQUE (call_id) +); +CREATE TABLE mohqueues ( + id INTEGER PRIMARY KEY NOT NULL, + name VARCHAR(25) NOT NULL, + uri VARCHAR(100) NOT NULL, + mohdir VARCHAR(100), + mohfile VARCHAR(100) NOT NULL, + debug INTEGER NOT NULL, + CONSTRAINT mohqueues_mohqueue_uri_idx UNIQUE (uri), + CONSTRAINT mohqueues_mohqueue_name_idx UNIQUE (name) +); +CREATE TABLE rtpproxy ( + id INTEGER PRIMARY KEY NOT NULL, + setid VARCHAR(32) DEFAULT 00 NOT NULL, + url VARCHAR(64) DEFAULT '' NOT NULL, + flags INTEGER DEFAULT 0 NOT NULL, + weight INTEGER DEFAULT 1 NOT NULL, + description VARCHAR(64) DEFAULT '' NOT NULL +); +CREATE TABLE uid_credentials ( + id INTEGER PRIMARY KEY NOT NULL, + auth_username VARCHAR(64) NOT NULL, + did VARCHAR(64) DEFAULT '_default' NOT NULL, + realm VARCHAR(64) NOT NULL, + password VARCHAR(28) DEFAULT '' NOT NULL, + flags INTEGER DEFAULT 0 NOT NULL, + ha1 VARCHAR(32) NOT NULL, + ha1b VARCHAR(32) DEFAULT '' NOT NULL, + uid VARCHAR(64) NOT NULL +); +CREATE TABLE uid_user_attrs ( + id INTEGER PRIMARY KEY NOT NULL, + uid VARCHAR(64) NOT NULL, + name VARCHAR(32) NOT NULL, + value VARCHAR(128), + type INTEGER DEFAULT 0 NOT NULL, + flags INTEGER DEFAULT 0 NOT NULL, + CONSTRAINT uid_user_attrs_userattrs_idx UNIQUE (uid, name, value) +); +CREATE TABLE uid_domain ( + id INTEGER PRIMARY KEY NOT NULL, + did VARCHAR(64) NOT NULL, + domain VARCHAR(64) NOT NULL, + flags INTEGER DEFAULT 0 NOT NULL, + CONSTRAINT uid_domain_domain_idx UNIQUE (domain) +); +CREATE TABLE uid_domain_attrs ( + id INTEGER PRIMARY KEY NOT NULL, + did VARCHAR(64), + name VARCHAR(32) NOT NULL, + type INTEGER DEFAULT 0 NOT NULL, + value VARCHAR(128), + flags INTEGER DEFAULT 0 NOT NULL, + CONSTRAINT uid_domain_attrs_domain_attr_idx UNIQUE (did, name, value) +); +CREATE TABLE uid_global_attrs ( + id INTEGER PRIMARY KEY NOT NULL, + name VARCHAR(32) NOT NULL, + type INTEGER DEFAULT 0 NOT NULL, + value VARCHAR(128), + flags INTEGER DEFAULT 0 NOT NULL, + CONSTRAINT uid_global_attrs_global_attrs_idx UNIQUE (name, value) +); +CREATE TABLE uid_uri ( + id INTEGER PRIMARY KEY NOT NULL, + uid VARCHAR(64) NOT NULL, + did VARCHAR(64) NOT NULL, + username VARCHAR(64) NOT NULL, + flags INTEGER DEFAULT 0 NOT NULL, + scheme VARCHAR(8) DEFAULT 'sip' NOT NULL +); +CREATE TABLE uid_uri_attrs ( + id INTEGER PRIMARY KEY NOT NULL, + username VARCHAR(64) NOT NULL, + did VARCHAR(64) NOT NULL, + name VARCHAR(32) NOT NULL, + value VARCHAR(128), + type INTEGER DEFAULT 0 NOT NULL, + flags INTEGER DEFAULT 0 NOT NULL, + scheme VARCHAR(8) DEFAULT 'sip' NOT NULL, + CONSTRAINT uid_uri_attrs_uriattrs_idx UNIQUE (username, did, name, value, scheme) +); +CREATE TABLE active_watchers_log ( + id INTEGER PRIMARY KEY NOT NULL, + presentity_uri VARCHAR(128) NOT NULL COLLATE NOCASE, + watcher_username VARCHAR(64) NOT NULL COLLATE NOCASE, + watcher_domain VARCHAR(64) NOT NULL COLLATE NOCASE, + to_user VARCHAR(64) NOT NULL COLLATE NOCASE, + to_domain VARCHAR(64) NOT NULL COLLATE NOCASE, + event VARCHAR(64) DEFAULT 'presence' NOT NULL, + callid VARCHAR(255) NOT NULL, + time INTEGER NOT NULL, + result INTEGER NOT NULL, + sent_msg BLOB NOT NULL, + received_msg BLOB NOT NULL, + user_agent VARCHAR(255) DEFAULT '' NOT NULL COLLATE NOCASE, + CONSTRAINT active_watchers_active_watchers_log_idx UNIQUE (presentity_uri, watcher_username, watcher_domain, event) + +); +CREATE TABLE event_list ( event varchar(25) PRIMARY KEY NOT NULL); +INSERT INTO event_list VALUES('dialog'); +INSERT INTO event_list VALUES('presence'); +INSERT INTO event_list VALUES('message-summary'); +CREATE INDEX acc_callid_idx ON acc (callid); +CREATE INDEX acc_cdrs_start_time_idx ON acc_cdrs (start_time); +CREATE INDEX missed_calls_callid_idx ON missed_calls (callid); +CREATE INDEX lcr_gw_lcr_id_idx ON lcr_gw (lcr_id); +CREATE INDEX lcr_rule_target_lcr_id_idx ON lcr_rule_target (lcr_id); +CREATE INDEX re_grp_group_idx ON re_grp (group_id); +CREATE INDEX trusted_peer_idx ON trusted (src_ip); +CREATE INDEX aliases_account_contact_idx ON aliases (username, domain, contact); +CREATE INDEX aliases_expires_idx ON aliases (expires); +CREATE INDEX location_account_contact_idx ON location (username, domain, contact); +CREATE INDEX location_expires_idx ON location (expires); +CREATE INDEX location_connection_idx ON location (server_id, connection_id); +CREATE INDEX location_attrs_account_record_idx ON location_attrs (username, domain, ruid); +CREATE INDEX location_attrs_last_modified_idx ON location_attrs (last_modified); +CREATE INDEX silo_account_idx ON silo (username, domain); +CREATE INDEX dbaliases_alias_user_idx ON dbaliases (alias_username); +CREATE INDEX dbaliases_alias_idx ON dbaliases (alias_username, alias_domain); +CREATE INDEX dbaliases_target_idx ON dbaliases (username, domain); +CREATE INDEX usr_preferences_ua_idx ON usr_preferences (uuid, attribute); +CREATE INDEX usr_preferences_uda_idx ON usr_preferences (username, domain, attribute); +CREATE INDEX subscriber_username_idx ON subscriber (username); +CREATE INDEX dialog_hash_idx ON dialog (hash_entry, hash_id); +CREATE INDEX dialog_vars_hash_idx ON dialog_vars (hash_entry, hash_id); +CREATE INDEX topos_d_rectime_idx ON topos_d (rectime); +CREATE INDEX topos_d_a_callid_idx ON topos_d (a_callid); +CREATE INDEX topos_t_rectime_idx ON topos_t (rectime); +CREATE INDEX topos_t_a_callid_idx ON topos_t (a_callid); +CREATE INDEX presentity_presentity_expires ON presentity (expires); +CREATE INDEX presentity_account_idx ON presentity (username, domain, event); +CREATE INDEX active_watchers_active_watchers_expires ON active_watchers (expires); +CREATE INDEX active_watchers_active_watchers_pres ON active_watchers (presentity_uri, event); +CREATE INDEX active_watchers_updated_idx ON active_watchers (updated); +CREATE INDEX active_watchers_updated_winfo_idx ON active_watchers (updated_winfo, presentity_uri); +CREATE INDEX xcap_account_doc_type_idx ON xcap (username, domain, doc_type); +CREATE INDEX xcap_account_doc_type_uri_idx ON xcap (username, domain, doc_type, doc_uri); +CREATE INDEX xcap_account_doc_uri_idx ON xcap (username, domain, doc_uri); +CREATE INDEX pua_expires_idx ON pua (expires); +CREATE INDEX pua_dialog1_idx ON pua (pres_id, pres_uri); +CREATE INDEX pua_dialog2_idx ON pua (call_id, from_tag); +CREATE INDEX pua_record_idx ON pua (pres_id); +CREATE INDEX rls_presentity_rlsubs_idx ON rls_presentity (rlsubs_did); +CREATE INDEX rls_presentity_updated_idx ON rls_presentity (updated); +CREATE INDEX rls_presentity_expires_idx ON rls_presentity (expires); +CREATE INDEX rls_watchers_rls_watchers_update ON rls_watchers (watcher_username, watcher_domain, event); +CREATE INDEX rls_watchers_rls_watchers_expires ON rls_watchers (expires); +CREATE INDEX rls_watchers_updated_idx ON rls_watchers (updated); +CREATE INDEX sip_trace_traced_user_idx ON sip_trace (traced_user); +CREATE INDEX sip_trace_date_idx ON sip_trace (time_stamp); +CREATE INDEX sip_trace_fromip_idx ON sip_trace (fromip); +CREATE INDEX sip_trace_callid_idx ON sip_trace (callid); +CREATE INDEX domainpolicy_rule_idx ON domainpolicy (rule); +CREATE INDEX userblacklist_userblacklist_idx ON userblacklist (username, domain, prefix); +CREATE INDEX globalblacklist_globalblacklist_idx ON globalblacklist (prefix); +CREATE INDEX sca_subscriptions_sca_expires_idx ON sca_subscriptions (server_id, expires); +CREATE INDEX sca_subscriptions_sca_subscribers_idx ON sca_subscriptions (subscriber, event); +CREATE INDEX uid_credentials_cred_idx ON uid_credentials (auth_username, did); +CREATE INDEX uid_credentials_uid ON uid_credentials (uid); +CREATE INDEX uid_credentials_did_idx ON uid_credentials (did); +CREATE INDEX uid_credentials_realm_idx ON uid_credentials (realm); +CREATE INDEX uid_domain_did_idx ON uid_domain (did); +CREATE INDEX uid_domain_attrs_domain_did ON uid_domain_attrs (did, flags); +CREATE INDEX uid_uri_uri_idx1 ON uid_uri (username, did, scheme); +CREATE INDEX uid_uri_uri_uid ON uid_uri (uid); +COMMIT; diff --git a/kamailio/nodes-role.cfg b/kamailio/nodes-role.cfg index fbc9356..cb84b6b 100644 --- a/kamailio/nodes-role.cfg +++ b/kamailio/nodes-role.cfg @@ -9,6 +9,7 @@ #!endif modparam("htable", "htable", "nodes=>size=8;initval=0;autoexpire=180"); +modparam("htable", "htable", "media=>size=8;initval=0;autoexpire=180"); ####### TIMER module ########## #!ifndef TIMER_LOADED @@ -17,6 +18,8 @@ loadmodule "timer.so" #!endif modparam("timer", "declare_timer", "NODES_ADVERTISE_TIMER=NODES_ADVERTISE_ROUTE,5000,slow,enable"); modparam("timer", "declare_timer", "NODE_TRACK_TIMER=NODE_TRACK_ROUTE,500,fast,enable"); +modparam("timer", "declare_timer", "NODE_HEARTBEAT_TIMER=NODE_HEARTBEAT_ROUTE,500,fast,enable"); + ####### MQUEUE module ########## #!ifndef MQUEUE_LOADED @@ -24,6 +27,7 @@ loadmodule "mqueue.so" #!trydef MQUEUE_LOADED #!endif modparam("mqueue","mqueue", "name=node_track") +modparam("mqueue","mqueue", "name=node_heartbeat") ####### NODES Logic ######## @@ -39,9 +43,7 @@ event_route[kazoo:consumer-event-nodes-advertise] if($shtinc(nodes=>$(kzE{kz.json,Node})::count) == 1) { xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|nodes|hearbeat from new node $(kzE{kz.json,Node})\n"); } - $sht(nodes=>$(kzE{kz.json,Node})) = $kzE; - $shtex(nodes=>$(kzE{kz.json,Node})) = ($(kzE{kz.json,Expires}{s.int}) / 1000) + NODES_FUDGE_FACTOR; - + mq_add("node_heartbeat", "$(kzE{kz.json,Node})", "$kzE"); } event_route[htable:expired:nodes] @@ -67,6 +69,86 @@ route[NODE_TRACK_ROUTE] } } + +route[NODE_HEARTBEAT_ROUTE] +{ + $var(runloop) = 1; + while(mq_fetch("node_heartbeat") == 1 && $var(runloop) < MAX_WHILE_LOOPS) { + $var(Node) = $mqk(node_heartbeat); + $var(Payload) = $mqv(node_heartbeat); + + route(CHECK_MEDIA_SERVERS); + + $sht(nodes=>$var(Node)) = $var(Payload); + $shtex(nodes=>$var(Node)) = ($(var(Payload){kz.json,Expires}{s.int}) / 1000) + NODES_FUDGE_FACTOR; + $var(runloop) = $var(runloop) + 1; + } +} + +route[CHECK_MEDIA_SERVERS] +{ + if($(var(Payload){kz.json,Media-Servers}) == "") { + return; + } + + $var(Media) = $(var(Payload){kz.json,Media-Servers}); + $var(Zone) = $(var(Payload){kz.json,AMQP-Broker-Zone}); + + $var(Dot) = "."; + $var(Perc) = "%"; + avp_delete("$avp(MediaKeys)"); + if(kazoo_json_keys($var(Payload), "Media-Servers", "$avp(MediaKeys)") == 1) { + $var(Count) = $cnt($avp(MediaKeys)); + $var(Idx) = 0; + while( $var(Idx) < $var(Count) ) { + $var(MediaKey) = $(avp(MediaKeys)[$var(Idx)]{s.replace,$var(Dot),$var(Perc)}); + $var(MediaUrl1) = $(var(Payload){kz.json,Media-Servers.$var(MediaKey).Interface.URL}); + if($var(MediaUrl1) != "") { + $var(MediaUrl) = $(var(MediaUrl1){re.subst,/^sip:(.*)@(.*)/sip:\2/}); + if($shtinc(media=>$var(MediaUrl)::count) == 1) { + $sht(media=>$var(MediaUrl)::zone) = $var(Zone); + $shtex(media=>$var(MediaUrl)::zone) = 0; + route(MEDIA_SERVER_UP); + }; + $shtex(media=>$var(MediaUrl)::count) = ($(var(Payload){kz.json,Expires}{s.int}) / 1000) + NODES_FUDGE_FACTOR; + } + $var(Idx) = $var(Idx) + 1; + } + }; +} + + +event_route[htable:expired:media] +{ + $var(MediaUrl) = $(shtrecord(key){re.subst,/(.*)::(.*)/\1/}); + $var(Zone) = $sht(media=>$var(MediaUrl)::zone); + route(MEDIA_SERVER_DOWN); +} + +route[MEDIA_SERVER_UP] +{ + xlog("L_INFO", "nodes|media|$var(Node) reported new media server $var(MediaUrl) in zone $var(Zone)\n"); + +#!ifdef DISPATCHER_ROLE + route(DISPATCHER_CHECK_MEDIA_SERVER); +#!endif + +#!ifdef FAST_PICKUP_ROLE + route(FAST_PICKUP_START); +#!endif + +} + +route[MEDIA_SERVER_DOWN] +{ + xlog("L_INFO", "htable|media|hearbeat expired for media server $var(MediaUrl) in zone $var(Zone)\n"); + +#!ifdef PRESENCE_ROLE + route(RESET_PUBLISHER); +#!endif + +} + #!ifndef NODES_CUSTOM_BINDINGS route[NODES_BINDINGS] { @@ -76,4 +158,5 @@ route[NODES_BINDINGS] #!endif + # vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab diff --git a/kamailio/presence-reset.cfg b/kamailio/presence-reset.cfg index 783e0aa..36b23a1 100644 --- a/kamailio/presence-reset.cfg +++ b/kamailio/presence-reset.cfg @@ -11,6 +11,14 @@ route[PRESENCE_RESET_BINDINGS] } +route[RESET_PUBLISHER] +{ + xlog("L_INFO", "$var(Msg-ID)|reset|received presence reset for publisher $var(MediaUrl))\n"); + sql_query("exec", "delete from presentity where sender = \"$var(MediaUrl)\""); + $var(presentities) = $sqlrows(exec); + xlog("L_INFO", "$var(Msg-ID)|reset|removed $var(presentities) presentities from publisher $var(MediaUrl)\n"); +} + route[RESET_ALL] { sql_query("exec", "delete from presentity"); @@ -54,7 +62,13 @@ route[RESET_WILDCARD] if($(kzE{kz.json,Username}) == "MY_HOSTNAME") { route(RESET_SERVER); } else { - xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|received presence wildcard reset for $(kzE{kz.json,Username}). 'MY_AMQP_ZONE/MY_HOSTNAME' doesn't care\n"); + if($(kzE{kz.json,Username}) =~ "sip:") { + $var(Msg-ID) = $(kzE{kz.json,Msg-ID}); + $var(MediaUrl) = $(kzE{kz.json,Username}); + route(RESET_PUBLISHER); + } else { + xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|received presence wildcard reset for $(kzE{kz.json,Username}). 'MY_AMQP_ZONE/MY_HOSTNAME' doesn't care\n"); + } } } } else { diff --git a/kamailio/presence-role.cfg b/kamailio/presence-role.cfg index 2b5d3bb..fd03e22 100644 --- a/kamailio/presence-role.cfg +++ b/kamailio/presence-role.cfg @@ -30,7 +30,7 @@ modparam("presence", "min_expires", PRESENCE_MIN_EXPIRES) modparam("presence", "max_expires", PRESENCE_MAX_EXPIRES) modparam("presence", "sip_uri_match", 1) modparam("presence", "waitn_time", 1) -modparam("presence", "notifier_processes", 10) +modparam("presence", "notifier_processes", 0) modparam("presence", "db_url", "KAZOO_DB_URL") modparam("presence", "xavp_cfg", "pres") modparam("presence", "local_log_level", 6) @@ -54,15 +54,6 @@ modparam("nat_traversal", "keepalive_interval", 45) #!endif -####### SQL OPS module ########## -#!ifndef SQLOPS_LOADED -loadmodule "sqlops.so" -#!trydef SQLOPS_LOADED -#!endif -modparam("sqlops","sqlcon", "exec=>KAZOO_DB_URL") - - - #!ifdef FAST_PICKUP_ROLE #!include_file "fast-pickup-role.cfg" #!endif @@ -191,17 +182,52 @@ route[HANDLE_PUBLISH] } } -event_route[kazoo:consumer-event-presence-dialog-update] +route[COUNT_PRESENTITIES] +{ + $var(Query) = $_s(select event, (select count(*) from presentity b where username = "$(kzE{kz.json,From}{uri.user})" and domain = "$(kzE{kz.json,From}{uri.domain})" and b.event = a.event) count from event_list a); + $var(p) = "uri="+$(kzE{kz.json,From}); + if (sql_xquery("cb", "$var(Query)", "subs") == 1) + { + while($xavp(subs) != $null) { + $var(p) = $var(p) + ";" + $xavp(subs=>event) + "=" + $xavp(subs=>count); + pv_unset("$xavp(subs)"); + } + } + xavp_params_explode($var(p), "watchers"); +} + +route[COUNT_SUBSCRIBERS] { + $var(Query) = $_s(select event, (select count(*) from active_watchers b where presentity_uri = "$(kzE{kz.json,From})" and b.event = a.event) count from event_list a); + $var(p) = "uri="+$(kzE{kz.json,From}); + if (sql_xquery("cb", "$var(Query)", "subs") == 1) + { + while($xavp(subs) != $null) { + $var(p) = $var(p) + ";" + $xavp(subs=>event) + "=" + $xavp(subs=>count); + pv_unset("$xavp(subs)"); + } + } + xavp_params_explode($var(p), "watchers"); +} - xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|received $(kzE{kz.json,Event-Package}) update for $(kzE{kz.json,From}) state $(kzE{kz.json,State}) from $(kzE{kz.json,Switch-URI})\n"); + +event_route[kazoo:consumer-event-presence-dialog-update] +{ + $var(Now) = $TS; + xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|received $(kzE{kz.json,Event-Package}) update for $(kzE{kz.json,From}) state $(kzE{kz.json,State}) from $(kzE{kz.json,Switch-URI}) at $(kzE{kz.json,AMQP-Received})/$var(Now)\n"); $var(JObj) = $kzE; #!ifdef FAST_PICKUP_ROLE route(FAST_PICKUP_INIT); #!endif + + if($(kzE{kz.json,State}) == "terminated") { + route(COUNT_PRESENTITIES); + } else { + route(COUNT_SUBSCRIBERS); + } - if(pres_has_subscribers("$(kzE{kz.json,From})", "dialog")) { - xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|publishing dialog update for $(kzE{kz.json,From})\n"); + if($xavp(watchers=>dialog) > 0) { + xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|publishing $(kzE{kz.json,From}) dialog update for $xavp(watchers=>dialog) watchers\n"); kazoo_pua_publish_dialoginfo($var(JObj)); pres_refresh_watchers("$(kzE{kz.json,From})", "dialog", 1); } else { @@ -209,21 +235,24 @@ event_route[kazoo:consumer-event-presence-dialog-update] } - if(pres_has_subscribers("$(kzE{kz.json,From})", "presence")) { - xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|publishing presence update for $(kzE{kz.json,From})\n"); + if($xavp(watchers=>presence) > 0) { + xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|publishing $(kzE{kz.json,From}) presence update for $xavp(watchers=>presence) watchers\n"); kazoo_pua_publish_presence($kzE); pres_refresh_watchers("$(kzE{kz.json,From})", "presence", 1); } else { xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|skip presence update for $(kzE{kz.json,From})\n"); } + xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|finished processing $(kzE{kz.json,Event-Package}) update for $(kzE{kz.json,From}) state $(kzE{kz.json,State}) from $(kzE{kz.json,Switch-URI}) at $(kzE{kz.json,AMQP-Received})/$var(Now)/$TS\n"); + } event_route[kazoo:consumer-event-presence-mwi-update] { xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|received message-summary update for $(kzE{kz.json,From})\n"); - if(pres_has_subscribers("$(kzE{kz.json,From})", "message-summary")) { - xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|publishing message-summary update for $(kzE{kz.json,From})\n"); + route(COUNT_SUBSCRIBERS); + if($xavp(watchers=>message-summary) > 0) { + xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|publishing $(kzE{kz.json,From}) message-summary update for $xavp(watchers=>message-summary) watchers\n"); kazoo_pua_publish_mwi($kzE); pres_refresh_watchers("$(kzE{kz.json,From})", "message-summary", 1); } else { @@ -234,8 +263,9 @@ event_route[kazoo:consumer-event-presence-mwi-update] event_route[kazoo:consumer-event-presence-update] { xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|received presence update for $(kzE{kz.json,From})\n"); - if(pres_has_subscribers("$(kzE{kz.json,From})", "presence")) { - xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|publishing presence update for $(kzE{kz.json,From})\n"); + route(COUNT_SUBSCRIBERS); + if($xavp(watchers=>presence) > 0) { + xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|publishing $(kzE{kz.json,From}) presence update for $xavp(watchers=>presence) watchers\n"); kazoo_pua_publish_presence($kzE); pres_refresh_watchers("$(kzE{kz.json,From})", "presence", 1); } else { diff --git a/kamailio/presence_notify_sync-role.cfg b/kamailio/presence_notify_sync-role.cfg index 109b4c7..c309fb3 100644 --- a/kamailio/presence_notify_sync-role.cfg +++ b/kamailio/presence_notify_sync-role.cfg @@ -33,16 +33,6 @@ route[PRESENCE_LOCAL_NOTIFY] } } - - -####### SQL OPS module ########## -#!ifndef SQLOPS_LOADED -loadmodule "sqlops.so" -modparam("sqlops","sqlcon", "cb=>KAZOO_DB_URL") -#!trydef SQLOPS_LOADED -#!endif - - ####### MQUEUE module ########## #!ifndef MQUEUE_LOADED loadmodule "mqueue.so" @@ -92,7 +82,7 @@ event_route[presence:notify-reply] } if(@cfg_get.kazoo.presence_notify_log_to_table == 1) { - $var(Query) = $_s(REPLACE active_watchers_log SET sent_msg="$(mb{s.escape.common}{s.replace,\','}{s.replace,$$,})", received_msg="$(notify_reply($mb){s.escape.common}{s.replace,\','}{s.replace,$$,})", time=$TS, result=$notify_reply($rs), user_agent="$(subs(user_agent){s.escape.common}{s.replace,\','}{s.replace,$$,})", callid="$subs(callid)", to_user="$subs(to_user)", to_domain="$subs(to_domain)" where presentity_uri="$subs(uri)" and watcher_username="$subs(watcher_username)" and watcher_domain="$subs(watcher_domain)" and event="$subs(event)"); + $var(Query) = $_s(REPLACE INTO active_watchers_log (presentity_uri, watcher_username, watcher_domain, event, callid, to_user, to_domain, user_agent, time, result, sent_msg, received_msg) VALUES ("$subs(uri)", "$subs(watcher_username)", "$subs(watcher_domain)", "$subs(event)","$subs(callid)","$subs(to_user)","$subs(to_domain)", "$(subs(user_agent){s.escape.common}{s.replace,\','}{s.replace,$$,})", $TS, $notify_reply($rs), '$(mb{s.escape.common}{s.replace,\','}{s.replace,$$,})', '$(notify_reply($mb){s.escape.common}{s.replace,\','}{s.replace,$$,})')); mq_add("presence_last_notity", "$subs(callid)", "$var(Query)"); } } diff --git a/kamailio/presence_query-role.cfg b/kamailio/presence_query-role.cfg index 5cb2357..b9ae5f1 100644 --- a/kamailio/presence_query-role.cfg +++ b/kamailio/presence_query-role.cfg @@ -1,12 +1,5 @@ ######## Presence query server module ######## -####### SQL OPS module ########## -#!ifndef SQLOPS_LOADED -loadmodule "sqlops.so" -#!trydef SQLOPS_LOADED -#!endif -modparam("sqlops","sqlcon", "cb=>KAZOO_DB_URL") - route[PRESENCE_SEARCH_SUMMARY] { xlog("L_INFO", "processing presence summary query for $(kzE{kz.json,Realm})\n"); diff --git a/kamailio/registrar-role.cfg b/kamailio/registrar-role.cfg index 95b53ae..93b2ed0 100644 --- a/kamailio/registrar-role.cfg +++ b/kamailio/registrar-role.cfg @@ -28,6 +28,7 @@ modparam("usrloc", "xavp_contact", "ulattrs") modparam("usrloc", "db_check_update", 1) modparam("usrloc", "timer_interval", 30) modparam("usrloc", "timer_procs", 1) +modparam("usrloc", "db_timer_clean", 1) ######## NAT Traversal module - signaling functions ######## @@ -284,7 +285,7 @@ route[SAVE_LOCATION] $var(amqp_routing_key) = "registration.success." + $(fd{kz.encode}) + "." + $(fU{kz.encode}); kazoo_publish("registrar", $var(amqp_routing_key), $var(amqp_payload_request)); - xlog("L_INFO", "$ci|end|successful $(var(Status){s.tolower}) with contact $ct\n"); + xlog("L_INFO", "$ci|end|successful $(var(Status){s.tolower}) with contact $xavp(ulrcd=>ruid) : $ct\n"); #!ifdef PUSHER_ROLE route(PUSHER_ON_REGISTRATION);