mirror of https://github.com/sipwise/db-schema.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
863 lines
34 KiB
863 lines
34 KiB
|
|
USE provisioning;
|
|
|
|
-- create triggers that populate kamailio tables
|
|
DELIMITER |
|
|
|
|
CREATE TRIGGER voip_sub_crepl_trig AFTER INSERT ON voip_subscribers
|
|
FOR EACH ROW BEGIN
|
|
DECLARE subscriber_domain varchar(127);
|
|
|
|
SELECT domain INTO subscriber_domain FROM voip_domains where id = NEW.domain_id;
|
|
|
|
INSERT INTO kamailio.subscriber (username, domain, uuid, timezone, password, datetime_created, ha1, ha1b)
|
|
VALUES(NEW.username, subscriber_domain, NEW.uuid, NEW.timezone, NEW.password, '0',
|
|
MD5(CONCAT(NEW.username, ':', subscriber_domain, ':', NEW.password)),
|
|
MD5(CONCAT(NEW.username, '@', subscriber_domain, ':', subscriber_domain, ':', NEW.password)));
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_sub_urepl_trig AFTER UPDATE ON voip_subscribers
|
|
FOR EACH ROW BEGIN
|
|
DECLARE old_subscriber_domain varchar(127);
|
|
DECLARE new_subscriber_domain varchar(127);
|
|
|
|
SELECT domain INTO old_subscriber_domain FROM voip_domains where id = OLD.domain_id;
|
|
SELECT domain INTO new_subscriber_domain FROM voip_domains where id = NEW.domain_id;
|
|
|
|
UPDATE kamailio.subscriber SET username = NEW.username, domain = new_subscriber_domain,
|
|
uuid = NEW.uuid, timezone = NEW.timezone, password = NEW.password,
|
|
ha1 = MD5(CONCAT(NEW.username, ':', new_subscriber_domain, ':', NEW.password)),
|
|
ha1b = MD5(CONCAT(NEW.username, '@', new_subscriber_domain, ':', new_subscriber_domain, ':', NEW.password))
|
|
WHERE username = OLD.username
|
|
AND domain = old_subscriber_domain;
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_sub_drepl_trig BEFORE DELETE ON voip_subscribers
|
|
FOR EACH ROW BEGIN
|
|
DECLARE subscriber_domain varchar(127);
|
|
DECLARE os_subscriber_id int(10) UNSIGNED;
|
|
|
|
SELECT domain INTO subscriber_domain FROM voip_domains where id = OLD.domain_id;
|
|
SELECT id INTO os_subscriber_id FROM kamailio.subscriber
|
|
WHERE username = OLD.username AND domain = subscriber_domain;
|
|
|
|
DELETE FROM kamailio.subscriber WHERE username = OLD.username
|
|
AND domain = subscriber_domain;
|
|
|
|
-- should be implemented via a provisioning.voicemail_users table
|
|
-- and a foreign key to voip_subscribers
|
|
DELETE FROM kamailio.voicemail_users WHERE customer_id = OLD.uuid;
|
|
|
|
-- work around MySQL bug. the cascaded delete should trigger our
|
|
-- delete actions on the provisioning tables, but doesn't
|
|
DELETE FROM kamailio.usr_preferences WHERE username = OLD.username
|
|
AND domain = subscriber_domain;
|
|
DELETE FROM kamailio.dbaliases WHERE username = OLD.username
|
|
AND domain = subscriber_domain;
|
|
DELETE FROM kamailio.speed_dial WHERE username = OLD.username
|
|
AND domain = subscriber_domain;
|
|
DELETE FROM kamailio.fax_preferences WHERE subscriber_id = os_subscriber_id;
|
|
DELETE FROM kamailio.fax_destinations WHERE subscriber_id = os_subscriber_id;
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_dba_crepl_trig AFTER INSERT ON voip_dbaliases
|
|
FOR EACH ROW BEGIN
|
|
DECLARE dbalias_domain varchar(127);
|
|
DECLARE target_username varchar(127);
|
|
DECLARE target_domain varchar(127);
|
|
|
|
SELECT domain INTO dbalias_domain FROM voip_domains where id = NEW.domain_id;
|
|
SELECT a.username, b.domain INTO target_username, target_domain
|
|
FROM voip_subscribers a, voip_domains b
|
|
WHERE a.id = NEW.subscriber_id
|
|
AND b.id = a.domain_id;
|
|
|
|
INSERT INTO kamailio.dbaliases (alias_username, alias_domain, username, domain)
|
|
VALUES(NEW.username, dbalias_domain, target_username, target_domain);
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_dba_urepl_trig AFTER UPDATE ON voip_dbaliases
|
|
FOR EACH ROW BEGIN
|
|
DECLARE old_dbalias_domain varchar(127);
|
|
DECLARE new_dbalias_domain varchar(127);
|
|
DECLARE target_username varchar(127);
|
|
DECLARE target_domain varchar(127);
|
|
|
|
SELECT domain INTO old_dbalias_domain FROM voip_domains where id = OLD.domain_id;
|
|
SELECT domain INTO new_dbalias_domain FROM voip_domains where id = NEW.domain_id;
|
|
SELECT a.username, b.domain INTO target_username, target_domain
|
|
FROM voip_subscribers a, voip_domains b
|
|
WHERE a.id = NEW.subscriber_id
|
|
AND b.id = a.domain_id;
|
|
|
|
UPDATE kamailio.dbaliases SET alias_username = NEW.username, alias_domain = new_dbalias_domain,
|
|
username = target_username, domain = target_domain
|
|
WHERE alias_username = OLD.username
|
|
AND alias_domain = old_dbalias_domain;
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_dba_drepl_trig BEFORE DELETE ON voip_dbaliases
|
|
FOR EACH ROW BEGIN
|
|
DECLARE dbalias_domain varchar(127);
|
|
|
|
SELECT domain INTO dbalias_domain FROM voip_domains where id = OLD.domain_id;
|
|
|
|
DELETE FROM kamailio.dbaliases WHERE alias_username = OLD.username
|
|
AND alias_domain = dbalias_domain;
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_prul_crepl_trig AFTER INSERT ON voip_peer_rules
|
|
FOR EACH ROW BEGIN
|
|
DECLARE prio int(11) unsigned;
|
|
|
|
SELECT priority INTO prio FROM voip_peer_groups
|
|
WHERE id = NEW.group_id;
|
|
|
|
INSERT INTO kamailio.lcr (lcr_id, prefix, from_uri, grp_id, priority)
|
|
VALUES(1, NEW.callee_prefix, IF(LENGTH(NEW.caller_prefix), CONCAT('^', NEW.caller_prefix), ''), NEW.group_id, prio);
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_prul_urepl_trig AFTER UPDATE ON voip_peer_rules
|
|
FOR EACH ROW BEGIN
|
|
DECLARE prio int(11) unsigned;
|
|
|
|
SELECT priority INTO prio FROM voip_peer_groups
|
|
WHERE id = NEW.group_id;
|
|
|
|
UPDATE kamailio.lcr SET prefix = NEW.callee_prefix,
|
|
from_uri = IF(LENGTH(NEW.caller_prefix), CONCAT('^', NEW.caller_prefix), '')
|
|
WHERE grp_id = OLD.group_id
|
|
AND prefix = OLD.callee_prefix
|
|
AND from_uri = IF(LENGTH(OLD.caller_prefix), CONCAT('^', OLD.caller_prefix), '')
|
|
AND priority = prio;
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_pgrp_urepl_trig AFTER UPDATE ON voip_peer_groups
|
|
FOR EACH ROW BEGIN
|
|
|
|
UPDATE kamailio.lcr SET priority = NEW.priority
|
|
WHERE grp_id = NEW.id;
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_prul_drepl_trig AFTER DELETE ON voip_peer_rules
|
|
FOR EACH ROW BEGIN
|
|
DECLARE prio int(11) unsigned;
|
|
|
|
SELECT priority INTO prio FROM voip_peer_groups
|
|
WHERE id = OLD.group_id;
|
|
|
|
DELETE FROM kamailio.lcr
|
|
WHERE grp_id = OLD.group_id AND
|
|
prefix = OLD.callee_prefix AND
|
|
from_uri = IF(LENGTH(OLD.caller_prefix), CONCAT('^', OLD.caller_prefix), '') AND
|
|
priority = prio;
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_pgrp_drepl_trig AFTER DELETE ON voip_peer_groups
|
|
FOR EACH ROW BEGIN
|
|
|
|
DELETE FROM kamailio.lcr WHERE grp_id = OLD.id;
|
|
DELETE FROM kamailio.gw WHERE grp_id = OLD.id;
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_phost_crepl_trig AFTER INSERT ON voip_peer_hosts
|
|
FOR EACH ROW BEGIN
|
|
|
|
INSERT INTO kamailio.gw (lcr_id, gw_name, grp_id, ip_addr, port, weight,
|
|
uri_scheme, transport, strip, tag, flags, defunct) VALUES
|
|
(1, NEW.name, NEW.group_id, NEW.ip, NEW.port, NEW.weight,
|
|
1, 1, 0, NULL, NEW.id, NULL);
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_phost_urepl_trig AFTER UPDATE ON voip_peer_hosts
|
|
FOR EACH ROW BEGIN
|
|
|
|
UPDATE kamailio.gw SET gw_name = NEW.name,
|
|
ip_addr = NEW.ip, port = NEW.port, weight = NEW.weight, tag = NULL
|
|
WHERE grp_id = OLD.group_id AND gw_name = OLD.name AND
|
|
ip_addr = OLD.ip AND port = OLD.port AND weight = OLD.weight;
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_phost_drepl_trig AFTER DELETE ON voip_peer_hosts
|
|
FOR EACH ROW BEGIN
|
|
|
|
DELETE FROM kamailio.gw
|
|
WHERE grp_id = OLD.group_id AND gw_name = OLD.name AND
|
|
ip_addr = OLD.ip AND port = OLD.port AND weight = OLD.weight;
|
|
DELETE FROM kamailio.dialplan
|
|
WHERE dpid IN (OLD.dp_caller_in_id, OLD.dp_callee_in_id,
|
|
OLD.dp_caller_out_id, OLD.dp_callee_out_id);
|
|
|
|
END;
|
|
|
|
|
|
|
|
|
CREATE TRIGGER voip_domrw_crepl_trig AFTER INSERT ON voip_domain_rewrites
|
|
FOR EACH ROW BEGIN
|
|
|
|
DECLARE caller_in_id int(11) unsigned;
|
|
DECLARE callee_in_id int(11) unsigned;
|
|
DECLARE caller_out_id int(11) unsigned;
|
|
DECLARE callee_out_id int(11) unsigned;
|
|
DECLARE dp_id int(11) unsigned default 0;
|
|
|
|
SELECT vdp.value INTO caller_in_id FROM voip_dom_preferences vdp, voip_preferences vp,
|
|
voip_domains vd WHERE vd.id = NEW.domain_id AND vp.attribute = 'dp_dom_caller_in'
|
|
AND vdp.attribute_id = vp.id AND vd.id = vdp.domain_id;
|
|
SELECT vdp.value INTO callee_in_id FROM voip_dom_preferences vdp, voip_preferences vp,
|
|
voip_domains vd WHERE vd.id = NEW.domain_id AND vp.attribute = 'dp_dom_callee_in'
|
|
AND vdp.attribute_id = vp.id AND vd.id = vdp.domain_id;
|
|
SELECT vdp.value INTO caller_out_id FROM voip_dom_preferences vdp, voip_preferences vp,
|
|
voip_domains vd WHERE vd.id = NEW.domain_id AND vp.attribute = 'dp_dom_caller_out'
|
|
AND vdp.attribute_id = vp.id AND vd.id = vdp.domain_id;
|
|
SELECT vdp.value INTO callee_out_id FROM voip_dom_preferences vdp, voip_preferences vp,
|
|
voip_domains vd WHERE vd.id = NEW.domain_id AND vp.attribute = 'dp_dom_callee_out'
|
|
AND vdp.attribute_id = vp.id AND vd.id = vdp.domain_id;
|
|
|
|
IF NEW.direction = 'in' AND NEW.field = 'caller' THEN
|
|
SET dp_id = caller_in_id;
|
|
ELSEIF NEW.direction = 'in' AND NEW.field = 'callee' THEN
|
|
SET dp_id = callee_in_id;
|
|
ELSEIF NEW.direction = 'out' AND NEW.field = 'caller' THEN
|
|
SET dp_id = caller_out_id;
|
|
ELSEIF NEW.direction = 'out' AND NEW.field = 'callee' THEN
|
|
SET dp_id = callee_out_id;
|
|
END IF;
|
|
|
|
INSERT INTO kamailio.dialplan (dpid, pr, match_op, match_exp,
|
|
match_len, subst_exp, repl_exp, attrs)
|
|
VALUES(dp_id, NEW.priority, 1, NEW.match_pattern, 0, NEW.match_pattern, NEW.replace_pattern, '');
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_domrw_urepl_trig AFTER UPDATE ON voip_domain_rewrites
|
|
FOR EACH ROW BEGIN
|
|
|
|
DECLARE caller_in_id int(11) unsigned;
|
|
DECLARE callee_in_id int(11) unsigned;
|
|
DECLARE caller_out_id int(11) unsigned;
|
|
DECLARE callee_out_id int(11) unsigned;
|
|
DECLARE dp_id int(11) unsigned default 0;
|
|
|
|
SELECT vdp.value INTO caller_in_id FROM voip_dom_preferences vdp, voip_preferences vp,
|
|
voip_domains vd WHERE vd.id = NEW.domain_id AND vp.attribute = 'dp_dom_caller_in'
|
|
AND vdp.attribute_id = vp.id AND vd.id = vdp.domain_id;
|
|
SELECT vdp.value INTO callee_in_id FROM voip_dom_preferences vdp, voip_preferences vp,
|
|
voip_domains vd WHERE vd.id = NEW.domain_id AND vp.attribute = 'dp_dom_callee_in'
|
|
AND vdp.attribute_id = vp.id AND vd.id = vdp.domain_id;
|
|
SELECT vdp.value INTO caller_out_id FROM voip_dom_preferences vdp, voip_preferences vp,
|
|
voip_domains vd WHERE vd.id = NEW.domain_id AND vp.attribute = 'dp_dom_caller_out'
|
|
AND vdp.attribute_id = vp.id AND vd.id = vdp.domain_id;
|
|
SELECT vdp.value INTO callee_out_id FROM voip_dom_preferences vdp, voip_preferences vp,
|
|
voip_domains vd WHERE vd.id = NEW.domain_id AND vp.attribute = 'dp_dom_callee_out'
|
|
AND vdp.attribute_id = vp.id AND vd.id = vdp.domain_id;
|
|
|
|
IF NEW.direction = 'in' AND NEW.field = 'caller' THEN
|
|
SET dp_id = caller_in_id;
|
|
ELSEIF NEW.direction = 'in' AND NEW.field = 'callee' THEN
|
|
SET dp_id = callee_in_id;
|
|
ELSEIF NEW.direction = 'out' AND NEW.field = 'caller' THEN
|
|
SET dp_id = caller_out_id;
|
|
ELSEIF NEW.direction = 'out' AND NEW.field = 'callee' THEN
|
|
SET dp_id = callee_out_id;
|
|
END IF;
|
|
|
|
UPDATE kamailio.dialplan SET match_exp = NEW.match_pattern,
|
|
subst_exp = NEW.match_pattern, repl_exp = NEW.replace_pattern, pr = NEW.priority
|
|
WHERE dpid = dp_id AND match_exp = OLD.match_pattern AND pr = OLD.priority
|
|
AND subst_exp = OLD.match_pattern AND repl_exp = OLD.replace_pattern;
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_domrw_drepl_trig AFTER DELETE ON voip_domain_rewrites
|
|
FOR EACH ROW BEGIN
|
|
|
|
DECLARE caller_in_id int(11) unsigned;
|
|
DECLARE callee_in_id int(11) unsigned;
|
|
DECLARE caller_out_id int(11) unsigned;
|
|
DECLARE callee_out_id int(11) unsigned;
|
|
DECLARE dp_id int(11) unsigned default 0;
|
|
|
|
SELECT vdp.value INTO caller_in_id FROM voip_dom_preferences vdp, voip_preferences vp,
|
|
voip_domains vd WHERE vd.id = OLD.domain_id AND vp.attribute = 'dp_dom_caller_in'
|
|
AND vdp.attribute_id = vp.id AND vd.id = vdp.domain_id;
|
|
SELECT vdp.value INTO callee_in_id FROM voip_dom_preferences vdp, voip_preferences vp,
|
|
voip_domains vd WHERE vd.id = OLD.domain_id AND vp.attribute = 'dp_dom_callee_in'
|
|
AND vdp.attribute_id = vp.id AND vd.id = vdp.domain_id;
|
|
SELECT vdp.value INTO caller_out_id FROM voip_dom_preferences vdp, voip_preferences vp,
|
|
voip_domains vd WHERE vd.id = OLD.domain_id AND vp.attribute = 'dp_dom_caller_out'
|
|
AND vdp.attribute_id = vp.id AND vd.id = vdp.domain_id;
|
|
SELECT vdp.value INTO callee_out_id FROM voip_dom_preferences vdp, voip_preferences vp,
|
|
voip_domains vd WHERE vd.id = OLD.domain_id AND vp.attribute = 'dp_dom_callee_out'
|
|
AND vdp.attribute_id = vp.id AND vd.id = vdp.domain_id;
|
|
|
|
IF OLD.direction = 'in' AND OLD.field = 'caller' THEN
|
|
SET dp_id = caller_in_id;
|
|
ELSEIF OLD.direction = 'in' AND OLD.field = 'callee' THEN
|
|
SET dp_id = callee_in_id;
|
|
ELSEIF OLD.direction = 'out' AND OLD.field = 'caller' THEN
|
|
SET dp_id = caller_out_id;
|
|
ELSEIF OLD.direction = 'out' AND OLD.field = 'callee' THEN
|
|
SET dp_id = callee_out_id;
|
|
END IF;
|
|
|
|
DELETE FROM kamailio.dialplan
|
|
WHERE dpid = dp_id AND match_exp = OLD.match_pattern
|
|
AND subst_exp = OLD.match_pattern AND repl_exp = OLD.replace_pattern;
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_peerrw_crepl_trig AFTER INSERT ON voip_peer_rewrites
|
|
FOR EACH ROW BEGIN
|
|
DECLARE caller_in_id int(11) unsigned;
|
|
DECLARE callee_in_id int(11) unsigned;
|
|
DECLARE caller_out_id int(11) unsigned;
|
|
DECLARE callee_out_id int(11) unsigned;
|
|
DECLARE dp_id int(11) unsigned default 0;
|
|
|
|
SELECT dp_caller_in_id, dp_callee_in_id, dp_caller_out_id, dp_callee_out_id
|
|
INTO caller_in_id, callee_in_id, caller_out_id, callee_out_id
|
|
FROM voip_peer_hosts WHERE id = NEW.peer_id;
|
|
|
|
IF NEW.direction = 'in' AND NEW.field = 'caller' THEN
|
|
SET dp_id = caller_in_id;
|
|
ELSEIF NEW.direction = 'in' AND NEW.field = 'callee' THEN
|
|
SET dp_id = callee_in_id;
|
|
ELSEIF NEW.direction = 'out' AND NEW.field = 'caller' THEN
|
|
SET dp_id = caller_out_id;
|
|
ELSEIF NEW.direction = 'out' AND NEW.field = 'callee' THEN
|
|
SET dp_id = callee_out_id;
|
|
END IF;
|
|
|
|
INSERT INTO kamailio.dialplan (dpid, pr, match_op, match_exp,
|
|
match_len, subst_exp, repl_exp, attrs)
|
|
VALUES(dp_id, NEW.priority, 1, NEW.match_pattern, 0, NEW.match_pattern, NEW.replace_pattern, '');
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_peerrw_urepl_trig AFTER UPDATE ON voip_peer_rewrites
|
|
FOR EACH ROW BEGIN
|
|
DECLARE caller_in_id int(11) unsigned;
|
|
DECLARE callee_in_id int(11) unsigned;
|
|
DECLARE caller_out_id int(11) unsigned;
|
|
DECLARE callee_out_id int(11) unsigned;
|
|
DECLARE dp_id int(11) unsigned default 0;
|
|
|
|
SELECT dp_caller_in_id, dp_callee_in_id, dp_caller_out_id, dp_callee_out_id
|
|
INTO caller_in_id, callee_in_id, caller_out_id, callee_out_id
|
|
FROM voip_peer_hosts WHERE id = NEW.peer_id;
|
|
|
|
IF NEW.direction = 'in' AND NEW.field = 'caller' THEN
|
|
SET dp_id = caller_in_id;
|
|
ELSEIF NEW.direction = 'in' AND NEW.field = 'callee' THEN
|
|
SET dp_id = callee_in_id;
|
|
ELSEIF NEW.direction = 'out' AND NEW.field = 'caller' THEN
|
|
SET dp_id = caller_out_id;
|
|
ELSEIF NEW.direction = 'out' AND NEW.field = 'callee' THEN
|
|
SET dp_id = callee_out_id;
|
|
END IF;
|
|
|
|
UPDATE kamailio.dialplan SET match_exp = NEW.match_pattern,
|
|
subst_exp = NEW.match_pattern, repl_exp = NEW.replace_pattern,
|
|
pr = NEW.priority
|
|
WHERE dpid = dp_id AND match_exp = OLD.match_pattern AND pr = OLD.priority
|
|
AND subst_exp = OLD.match_pattern AND repl_exp = OLD.replace_pattern;
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_peerrw_drepl_trig AFTER DELETE ON voip_peer_rewrites
|
|
FOR EACH ROW BEGIN
|
|
DECLARE caller_in_id int(11) unsigned;
|
|
DECLARE callee_in_id int(11) unsigned;
|
|
DECLARE caller_out_id int(11) unsigned;
|
|
DECLARE callee_out_id int(11) unsigned;
|
|
DECLARE dp_id int(11) unsigned default 0;
|
|
|
|
SELECT dp_caller_in_id, dp_callee_in_id, dp_caller_out_id, dp_callee_out_id
|
|
INTO caller_in_id, callee_in_id, caller_out_id, callee_out_id
|
|
FROM voip_peer_hosts WHERE id = OLD.peer_id;
|
|
|
|
IF OLD.direction = 'in' AND OLD.field = 'caller' THEN
|
|
SET dp_id = caller_in_id;
|
|
ELSEIF OLD.direction = 'in' AND OLD.field = 'callee' THEN
|
|
SET dp_id = callee_in_id;
|
|
ELSEIF OLD.direction = 'out' AND OLD.field = 'caller' THEN
|
|
SET dp_id = caller_out_id;
|
|
ELSEIF OLD.direction = 'out' AND OLD.field = 'callee' THEN
|
|
SET dp_id = callee_out_id;
|
|
END IF;
|
|
|
|
DELETE FROM kamailio.dialplan
|
|
WHERE dpid = dp_id AND match_exp = OLD.match_pattern
|
|
AND subst_exp = OLD.match_pattern AND repl_exp = OLD.replace_pattern;
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_usrpref_crepl_trig AFTER INSERT ON voip_usr_preferences
|
|
FOR EACH ROW BEGIN
|
|
DECLARE subscriber_username varchar(127);
|
|
DECLARE subscriber_domain varchar(127);
|
|
DECLARE subscriber_uuid char(36);
|
|
DECLARE attribute_name varchar(31);
|
|
DECLARE attribute_type tinyint(3);
|
|
|
|
SELECT a.username, b.domain, a.uuid INTO subscriber_username, subscriber_domain, subscriber_uuid
|
|
FROM voip_subscribers a, voip_domains b
|
|
WHERE a.id = NEW.subscriber_id
|
|
AND a.domain_id = b.id;
|
|
SELECT attribute, type INTO attribute_name, attribute_type
|
|
FROM voip_preferences
|
|
WHERE id = NEW.attribute_id;
|
|
|
|
INSERT INTO kamailio.usr_preferences (uuid, username, domain, attribute, type, value)
|
|
VALUES(subscriber_uuid, subscriber_username, subscriber_domain,
|
|
attribute_name, attribute_type, NEW.value);
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_usrpref_urepl_trig AFTER UPDATE ON voip_usr_preferences
|
|
FOR EACH ROW BEGIN
|
|
DECLARE old_subscriber_username varchar(127);
|
|
DECLARE new_subscriber_username varchar(127);
|
|
DECLARE old_subscriber_domain varchar(127);
|
|
DECLARE new_subscriber_domain varchar(127);
|
|
DECLARE old_attribute_name varchar(31);
|
|
DECLARE new_attribute_name varchar(31);
|
|
|
|
SELECT a.username, b.domain INTO old_subscriber_username, old_subscriber_domain
|
|
FROM voip_subscribers a, voip_domains b
|
|
WHERE a.id = OLD.subscriber_id
|
|
AND a.domain_id = b.id;
|
|
SELECT a.username, b.domain INTO new_subscriber_username, new_subscriber_domain
|
|
FROM voip_subscribers a, voip_domains b
|
|
WHERE a.id = NEW.subscriber_id
|
|
AND a.domain_id = b.id;
|
|
SELECT attribute INTO old_attribute_name
|
|
FROM voip_preferences
|
|
WHERE id = OLD.attribute_id;
|
|
SELECT attribute INTO new_attribute_name
|
|
FROM voip_preferences
|
|
WHERE id = NEW.attribute_id;
|
|
|
|
UPDATE kamailio.usr_preferences SET username = new_subscriber_username, domain = new_subscriber_domain,
|
|
attribute = new_attribute_name, value = NEW.value
|
|
WHERE username = old_subscriber_username
|
|
AND domain = old_subscriber_domain
|
|
AND attribute = old_attribute_name
|
|
AND value = OLD.value;
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_usrpref_drepl_trig BEFORE DELETE ON voip_usr_preferences
|
|
FOR EACH ROW BEGIN
|
|
DECLARE subscriber_username varchar(127);
|
|
DECLARE subscriber_domain varchar(127);
|
|
DECLARE attribute_name varchar(31);
|
|
|
|
SELECT a.username, b.domain INTO subscriber_username, subscriber_domain
|
|
FROM voip_subscribers a, voip_domains b
|
|
WHERE a.id = OLD.subscriber_id
|
|
AND a.domain_id = b.id;
|
|
SELECT attribute INTO attribute_name
|
|
FROM voip_preferences
|
|
WHERE id = OLD.attribute_id;
|
|
|
|
DELETE FROM kamailio.usr_preferences WHERE username = subscriber_username
|
|
AND domain = subscriber_domain
|
|
AND attribute = attribute_name
|
|
AND value = OLD.value;
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_dom_crepl_trig AFTER INSERT ON voip_domains
|
|
FOR EACH ROW BEGIN
|
|
|
|
IF NEW.local IS TRUE THEN
|
|
INSERT INTO kamailio.domain (domain) VALUES(NEW.domain);
|
|
END IF;
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_dom_urepl_trig AFTER UPDATE ON voip_domains
|
|
FOR EACH ROW BEGIN
|
|
|
|
IF NEW.local IS TRUE AND OLD.local IS FALSE THEN
|
|
INSERT INTO kamailio.domain (domain) VALUES(NEW.domain);
|
|
ELSEIF NEW.local IS FALSE AND OLD.local IS TRUE THEN
|
|
DELETE FROM kamailio.domain WHERE domain = OLD.domain;
|
|
END IF;
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_dom_drepl_trig BEFORE DELETE ON voip_domains
|
|
FOR EACH ROW BEGIN
|
|
|
|
DECLARE caller_in_id int(11) unsigned;
|
|
DECLARE callee_in_id int(11) unsigned;
|
|
DECLARE caller_out_id int(11) unsigned;
|
|
DECLARE callee_out_id int(11) unsigned;
|
|
|
|
SELECT vdp.value INTO caller_in_id FROM voip_dom_preferences vdp, voip_preferences vp
|
|
WHERE vp.attribute = 'dp_dom_caller_in' AND vdp.attribute_id = vp.id AND vdp.domain_id = OLD.id;
|
|
SELECT vdp.value INTO callee_in_id FROM voip_dom_preferences vdp, voip_preferences vp
|
|
WHERE vp.attribute = 'dp_dom_callee_in' AND vdp.attribute_id = vp.id AND vdp.domain_id = OLD.id;
|
|
SELECT vdp.value INTO caller_out_id FROM voip_dom_preferences vdp, voip_preferences vp
|
|
WHERE vp.attribute = 'dp_dom_caller_out' AND vdp.attribute_id = vp.id AND vdp.domain_id = OLD.id;
|
|
SELECT vdp.value INTO callee_out_id FROM voip_dom_preferences vdp, voip_preferences vp
|
|
WHERE vp.attribute = 'dp_dom_callee_out' AND vdp.attribute_id = vp.id AND vdp.domain_id = OLD.id;
|
|
|
|
IF OLD.local IS TRUE THEN
|
|
DELETE FROM kamailio.domain WHERE domain = OLD.domain;
|
|
END IF;
|
|
|
|
DELETE FROM kamailio.dialplan WHERE dpid IN
|
|
(caller_in_id, callee_in_id, caller_out_id, callee_out_id);
|
|
|
|
-- work around MySQL bug. the cascaded delete should trigger our
|
|
-- voip_dom_preferences delete action, but doesn't
|
|
DELETE FROM kamailio.dom_preferences WHERE domain = OLD.domain;
|
|
-- this will trigger the delete action for each subscriber
|
|
DELETE FROM provisioning.voip_subscribers WHERE domain_id = OLD.id;
|
|
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_dompref_crepl_trig AFTER INSERT ON voip_dom_preferences
|
|
FOR EACH ROW BEGIN
|
|
DECLARE domain_name varchar(127);
|
|
DECLARE attribute_name varchar(31);
|
|
DECLARE attribute_type tinyint(3);
|
|
|
|
SELECT domain INTO domain_name
|
|
FROM voip_domains
|
|
WHERE id = NEW.domain_id;
|
|
SELECT attribute, type INTO attribute_name, attribute_type
|
|
FROM voip_preferences
|
|
WHERE id = NEW.attribute_id;
|
|
|
|
INSERT INTO kamailio.dom_preferences (domain, attribute, type, value)
|
|
VALUES(domain_name, attribute_name, attribute_type, NEW.value);
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_dompref_urepl_trig AFTER UPDATE ON voip_dom_preferences
|
|
FOR EACH ROW BEGIN
|
|
DECLARE old_domain_name varchar(127);
|
|
DECLARE new_domain_name varchar(127);
|
|
DECLARE old_attribute_name varchar(31);
|
|
DECLARE new_attribute_name varchar(31);
|
|
|
|
SELECT domain INTO old_domain_name
|
|
FROM voip_domains
|
|
WHERE id = OLD.domain_id;
|
|
SELECT domain INTO new_domain_name
|
|
FROM voip_domains
|
|
WHERE id = NEW.domain_id;
|
|
SELECT attribute INTO old_attribute_name
|
|
FROM voip_preferences
|
|
WHERE id = OLD.attribute_id;
|
|
SELECT attribute INTO new_attribute_name
|
|
FROM voip_preferences
|
|
WHERE id = NEW.attribute_id;
|
|
|
|
UPDATE kamailio.dom_preferences SET domain = new_domain_name,
|
|
attribute = new_attribute_name,
|
|
value = NEW.value
|
|
WHERE domain = old_domain_name
|
|
AND attribute = old_attribute_name
|
|
AND value = OLD.value;
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_dompref_drepl_trig BEFORE DELETE ON voip_dom_preferences
|
|
FOR EACH ROW BEGIN
|
|
DECLARE domain_name varchar(127);
|
|
DECLARE attribute_name varchar(31);
|
|
|
|
SELECT domain INTO domain_name
|
|
FROM voip_domains
|
|
WHERE id = OLD.domain_id;
|
|
SELECT attribute INTO attribute_name
|
|
FROM voip_preferences
|
|
WHERE id = OLD.attribute_id;
|
|
|
|
DELETE FROM kamailio.dom_preferences WHERE domain = domain_name
|
|
AND attribute = attribute_name
|
|
AND value = OLD.value;
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_sd_crepl_trig AFTER INSERT ON voip_speed_dial
|
|
FOR EACH ROW BEGIN
|
|
DECLARE target_username varchar(64);
|
|
DECLARE target_domain varchar(64);
|
|
|
|
SELECT a.username, b.domain INTO target_username, target_domain
|
|
FROM voip_subscribers a, voip_domains b
|
|
WHERE a.id = NEW.subscriber_id
|
|
AND b.id = a.domain_id;
|
|
|
|
INSERT INTO kamailio.speed_dial (username, domain, sd_username, sd_domain,
|
|
new_uri, fname, lname, description)
|
|
VALUES(target_username, target_domain,
|
|
NEW.slot, target_domain,
|
|
NEW.destination, '', '', '');
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_sd_urepl_trig AFTER UPDATE ON voip_speed_dial
|
|
FOR EACH ROW BEGIN
|
|
DECLARE old_username varchar(127);
|
|
DECLARE old_domain varchar(127);
|
|
DECLARE new_username varchar(127);
|
|
DECLARE new_domain varchar(127);
|
|
|
|
SELECT a.username, b.domain INTO old_username, old_domain
|
|
FROM voip_subscribers a, voip_domains b
|
|
WHERE a.id = OLD.subscriber_id
|
|
AND b.id = a.domain_id;
|
|
SELECT a.username, b.domain INTO new_username, new_domain
|
|
FROM voip_subscribers a, voip_domains b
|
|
WHERE a.id = NEW.subscriber_id
|
|
AND b.id = a.domain_id;
|
|
|
|
UPDATE kamailio.speed_dial SET username = new_username, domain = new_domain,
|
|
sd_username = NEW.slot, sd_domain = new_domain,
|
|
new_uri = NEW.destination
|
|
WHERE username = old_username
|
|
AND domain = old_domain
|
|
AND sd_username = OLD.slot;
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_sd_drepl_trig BEFORE DELETE ON voip_speed_dial
|
|
FOR EACH ROW BEGIN
|
|
DECLARE old_username varchar(127);
|
|
DECLARE old_domain varchar(127);
|
|
|
|
SELECT a.username, b.domain INTO old_username, old_domain
|
|
FROM voip_subscribers a, voip_domains b
|
|
WHERE a.id = OLD.subscriber_id
|
|
AND b.id = a.domain_id;
|
|
|
|
DELETE FROM kamailio.speed_dial WHERE username = old_username
|
|
AND domain = old_domain
|
|
AND sd_username = OLD.slot;
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_faxp_crepl_trig AFTER INSERT ON voip_fax_preferences
|
|
FOR EACH ROW BEGIN
|
|
DECLARE subscriber_username varchar(127);
|
|
DECLARE subscriber_domain varchar(127);
|
|
DECLARE os_subscriber_id int(10) UNSIGNED;
|
|
|
|
SELECT a.username, b.domain INTO subscriber_username, subscriber_domain
|
|
FROM voip_subscribers a, voip_domains b
|
|
WHERE a.id = NEW.subscriber_id
|
|
AND b.id = a.domain_id;
|
|
|
|
SELECT id INTO os_subscriber_id FROM kamailio.subscriber
|
|
WHERE username = subscriber_username AND domain = subscriber_domain;
|
|
|
|
INSERT INTO kamailio.fax_preferences
|
|
(subscriber_id, password, name, active, send_status, send_copy)
|
|
VALUES(os_subscriber_id, NEW.password, NEW.name, IF(NEW.active, 'true', 'false'),
|
|
IF(NEW.send_status, 'true', 'false'), IF(NEW.send_copy, 'true', 'false'));
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_faxp_urepl_trig AFTER UPDATE ON voip_fax_preferences
|
|
FOR EACH ROW BEGIN
|
|
DECLARE subscriber_username varchar(127);
|
|
DECLARE subscriber_domain varchar(127);
|
|
DECLARE os_subscriber_id int(10) UNSIGNED;
|
|
DECLARE old_subscriber_username varchar(127);
|
|
DECLARE old_subscriber_domain varchar(127);
|
|
DECLARE old_os_subscriber_id int(10) UNSIGNED;
|
|
|
|
SELECT a.username, b.domain INTO subscriber_username, subscriber_domain
|
|
FROM voip_subscribers a, voip_domains b
|
|
WHERE a.id = NEW.subscriber_id
|
|
AND b.id = a.domain_id;
|
|
|
|
SELECT id INTO os_subscriber_id FROM kamailio.subscriber
|
|
WHERE username = subscriber_username AND domain = subscriber_domain;
|
|
|
|
SELECT a.username, b.domain INTO old_subscriber_username, old_subscriber_domain
|
|
FROM voip_subscribers a, voip_domains b
|
|
WHERE a.id = OLD.subscriber_id
|
|
AND b.id = a.domain_id;
|
|
|
|
SELECT id INTO old_os_subscriber_id FROM kamailio.subscriber
|
|
WHERE username = old_subscriber_username AND domain = old_subscriber_domain;
|
|
|
|
UPDATE kamailio.fax_preferences SET subscriber_id = os_subscriber_id, password = NEW.password,
|
|
name = NEW.name, active = IF(NEW.active, 'true', 'false'),
|
|
send_status = IF(NEW.send_status, 'true', 'false'),
|
|
send_copy = IF(NEW.send_copy, 'true', 'false')
|
|
WHERE subscriber_id = old_os_subscriber_id;
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_faxp_drepl_trig BEFORE DELETE ON voip_fax_preferences
|
|
FOR EACH ROW BEGIN
|
|
DECLARE old_subscriber_username varchar(127);
|
|
DECLARE old_subscriber_domain varchar(127);
|
|
DECLARE old_os_subscriber_id int(10) UNSIGNED;
|
|
|
|
SELECT a.username, b.domain INTO old_subscriber_username, old_subscriber_domain
|
|
FROM voip_subscribers a, voip_domains b
|
|
WHERE a.id = OLD.subscriber_id
|
|
AND b.id = a.domain_id;
|
|
|
|
SELECT id INTO old_os_subscriber_id FROM kamailio.subscriber
|
|
WHERE username = old_subscriber_username AND domain = old_subscriber_domain;
|
|
|
|
DELETE FROM kamailio.fax_preferences WHERE subscriber_id = old_os_subscriber_id;
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_faxd_crepl_trig AFTER INSERT ON voip_fax_destinations
|
|
FOR EACH ROW BEGIN
|
|
DECLARE subscriber_username varchar(127);
|
|
DECLARE subscriber_domain varchar(127);
|
|
DECLARE os_subscriber_id int(10) UNSIGNED;
|
|
|
|
SELECT a.username, b.domain INTO subscriber_username, subscriber_domain
|
|
FROM voip_subscribers a, voip_domains b
|
|
WHERE a.id = NEW.subscriber_id
|
|
AND b.id = a.domain_id;
|
|
|
|
SELECT id INTO os_subscriber_id FROM kamailio.subscriber
|
|
WHERE username = subscriber_username AND domain = subscriber_domain;
|
|
|
|
INSERT INTO kamailio.fax_destinations (subscriber_id, destination, filetype,
|
|
cc, incoming, outgoing, status)
|
|
VALUES(os_subscriber_id, NEW.destination, NEW.filetype,
|
|
IF(NEW.cc, 'true', 'false'), IF(NEW.incoming, 'true', 'false'),
|
|
IF(NEW.outgoing, 'true', 'false'), IF(NEW.status, 'true', 'false'));
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_faxd_urepl_trig AFTER UPDATE ON voip_fax_destinations
|
|
FOR EACH ROW BEGIN
|
|
DECLARE subscriber_username varchar(127);
|
|
DECLARE subscriber_domain varchar(127);
|
|
DECLARE os_subscriber_id int(10) UNSIGNED;
|
|
DECLARE old_subscriber_username varchar(127);
|
|
DECLARE old_subscriber_domain varchar(127);
|
|
DECLARE old_os_subscriber_id int(10) UNSIGNED;
|
|
|
|
SELECT a.username, b.domain INTO subscriber_username, subscriber_domain
|
|
FROM voip_subscribers a, voip_domains b
|
|
WHERE a.id = NEW.subscriber_id
|
|
AND b.id = a.domain_id;
|
|
|
|
SELECT id INTO os_subscriber_id FROM kamailio.subscriber
|
|
WHERE username = subscriber_username AND domain = subscriber_domain;
|
|
|
|
SELECT a.username, b.domain INTO old_subscriber_username, old_subscriber_domain
|
|
FROM voip_subscribers a, voip_domains b
|
|
WHERE a.id = OLD.subscriber_id
|
|
AND b.id = a.domain_id;
|
|
|
|
SELECT id INTO old_os_subscriber_id FROM kamailio.subscriber
|
|
WHERE username = old_subscriber_username AND domain = old_subscriber_domain;
|
|
|
|
UPDATE kamailio.fax_destinations SET subscriber_id = os_subscriber_id, destination = NEW.destination,
|
|
filetype = NEW.filetype, cc = IF(NEW.cc, 'true', 'false'),
|
|
incoming = IF(NEW.incoming, 'true', 'false'),
|
|
outgoing = IF(NEW.outgoing, 'true', 'false'),
|
|
status = IF(NEW.status, 'true', 'false')
|
|
WHERE subscriber_id = old_os_subscriber_id
|
|
AND destination = OLD.destination;
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_faxd_drepl_trig BEFORE DELETE ON voip_fax_destinations
|
|
FOR EACH ROW BEGIN
|
|
DECLARE old_subscriber_username varchar(127);
|
|
DECLARE old_subscriber_domain varchar(127);
|
|
DECLARE old_os_subscriber_id int(10) UNSIGNED;
|
|
|
|
SELECT a.username, b.domain INTO old_subscriber_username, old_subscriber_domain
|
|
FROM voip_subscribers a, voip_domains b
|
|
WHERE a.id = OLD.subscriber_id
|
|
AND b.id = a.domain_id;
|
|
|
|
SELECT id INTO old_os_subscriber_id FROM kamailio.subscriber
|
|
WHERE username = old_subscriber_username AND domain = old_subscriber_domain;
|
|
|
|
DELETE FROM kamailio.fax_destinations WHERE subscriber_id = old_os_subscriber_id
|
|
AND destination = OLD.destination;
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_aig_crepl_trig AFTER INSERT ON voip_allowed_ip_groups
|
|
FOR EACH ROW BEGIN
|
|
|
|
INSERT INTO kamailio.address (id, grp, ip_addr, mask)
|
|
VALUES(NEW.id, NEW.group_id,
|
|
IF(LOCATE('/', NEW.ipnet), SUBSTRING_INDEX(NEW.ipnet, '/', 1), NEW.ipnet),
|
|
IF(LOCATE('/', NEW.ipnet), SUBSTRING_INDEX(NEW.ipnet, '/', -1), 32));
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_aig_urepl_trig AFTER UPDATE ON voip_allowed_ip_groups
|
|
FOR EACH ROW BEGIN
|
|
|
|
UPDATE kamailio.address SET id = NEW.id, grp = NEW.group_id,
|
|
ip_addr = IF(LOCATE('/', NEW.ipnet), SUBSTRING_INDEX(NEW.ipnet, '/', 1), NEW.ipnet),
|
|
mask = IF(LOCATE('/', NEW.ipnet), SUBSTRING_INDEX(NEW.ipnet, '/', -1), 32)
|
|
WHERE id = OLD.id;
|
|
|
|
END;
|
|
|
|
|
|
|
CREATE TRIGGER voip_aig_drepl_trig BEFORE DELETE ON voip_allowed_ip_groups
|
|
FOR EACH ROW BEGIN
|
|
|
|
DELETE FROM kamailio.address WHERE id = OLD.id;
|
|
|
|
END;
|
|
|
|
|
|
|
DELIMITER ;
|