#!/bin/sh
|
|
|
|
sql_db_pre_setup() {
|
|
cat << EOF
|
|
|
|
PRAGMA foreign_keys=OFF;
|
|
PRAGMA wal=on;
|
|
PRAGMA journal_mode=WAL;
|
|
PRAGMA wal_autocheckpoint=25;
|
|
|
|
BEGIN TRANSACTION;
|
|
EOF
|
|
}
|
|
|
|
sql_setup() {
|
|
DB_KAZOO_LOCATION=${2:-${DB_KAZOO_LOCATION:-/etc/kazoo/kamailio/db}}
|
|
mkdir -p ${DB_KAZOO_LOCATION}
|
|
KazooDB -db ${DB_KAZOO_LOCATION}/kazoo.db < $1 > /dev/null
|
|
}
|
|
|
|
sql_header() {
|
|
cat << EOF
|
|
EOF
|
|
}
|
|
|
|
sql_extra_tables() {
|
|
cat << EOF
|
|
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 '' COLLATE NOCASE,
|
|
CONSTRAINT active_watchers_active_watchers_log_idx UNIQUE (presentity_uri, watcher_username, watcher_domain, event)
|
|
);
|
|
INSERT INTO version (table_name, table_version) values ('active_watchers_log','1');
|
|
|
|
CREATE TABLE keepalive (
|
|
id INTEGER PRIMARY KEY NOT NULL,
|
|
contact VARCHAR(2048) NOT NULL COLLATE NOCASE,
|
|
sockinfo VARCHAR(128) NOT NULL COLLATE NOCASE,
|
|
time_inserted timestamp DEFAULT CURRENT_TIMESTAMP,
|
|
time_sent timestamp DEFAULT CURRENT_TIMESTAMP,
|
|
slot INTEGER NOT NULL,
|
|
selected INTEGER DEFAULT 0,
|
|
failed INTEGER DEFAULT 0,
|
|
CONSTRAINT keepalive_idx UNIQUE (contact),
|
|
CONSTRAINT keepalive_idx_2 UNIQUE (slot, selected, time_sent, contact)
|
|
CONSTRAINT keepalive_idx_3 UNIQUE (slot, failed, contact)
|
|
);
|
|
|
|
INSERT INTO version (table_name, table_version) values ('keepalive','2');
|
|
|
|
create table auth_cache as select * from htable;
|
|
INSERT INTO version (table_name, table_version) select 'auth_cache', table_version from version where table_name = 'htable';
|
|
|
|
create view presentities as select id, cast(printf("sip:%s@%s",username,domain) as varchar(64)) presentity_uri ,
|
|
username, domain, event, cast(substr(etag, instr(etag,"@")+1) as varchar(64)) callid,
|
|
datetime(received_time, 'unixepoch') as received,
|
|
datetime(expires, 'unixepoch') as expire_date,
|
|
expires, cast(sender as varchar(30)) sender,
|
|
lower(cast( case when event = "dialog"
|
|
then substr(body, instr(BODY,"<state>")+7, instr(body,"</state>") - instr(body,"<state>") - 7)
|
|
when event = "presence"
|
|
then case when instr(body,"<dm:note>") == 0
|
|
then replace(substr(body, instr(body,"<note>")+6, instr(body,"</note>") - instr(body,"<note>") - 6), " ", "")
|
|
else replace(substr(body, instr(body,"<dm:note>")+9, instr(body,"</dm:note>") - instr(body,"<dm:note>") - 9), " ", "")
|
|
end
|
|
when event = "message-summary"
|
|
then case when instr(body,"Messages-Waiting: yes") = 0
|
|
then "Waiting"
|
|
else "Not-Waiting"
|
|
end
|
|
end as varchar(12))) state
|
|
from presentity;
|
|
|
|
create view wdispatcher as select *,
|
|
cast(substr(attrs, instr(attrs, "zone=")+5, instr(attrs, ";profile")-instr(attrs, "zone=")-5) as varchar(20)) zone,
|
|
cast(substr(attrs, instr(attrs, "idx=")+4, instr(attrs, ";node")-instr(attrs, "idx=")-4) as integer) idx,
|
|
cast(substr(attrs, instr(attrs, "node=")+5) as varchar(50)) node
|
|
from dispatcher;
|
|
|
|
create unique index if not exists idx_dispatcher_destination on dispatcher(destination);
|
|
|
|
|
|
CREATE VIEW w_keepalive_contact as
|
|
SELECT id, slot, failed, case when instr(contact,";") > 0
|
|
then substr(contact, 1, instr(contact,";")-1)
|
|
else contact
|
|
end as contact
|
|
from keepalive;
|
|
|
|
CREATE VIEW w_location_contact as
|
|
SELECT id, case when instr(contact,";") > 0
|
|
then substr(contact, 1, instr(contact,";")-1)
|
|
else contact
|
|
end as contact
|
|
from location;
|
|
|
|
CREATE VIEW w_watchers_contact as
|
|
select id, case when instr(contact,";") > 0
|
|
then substr(contact, 1, instr(contact,";")-1)
|
|
else contact
|
|
end as contact
|
|
from active_watchers;
|
|
|
|
EOF
|
|
}
|
|
|
|
sql_footer() {
|
|
cat << EOF
|
|
EOF
|
|
}
|