diff --git a/db_scripts/diff/15874.down b/db_scripts/diff/15874.down new file mode 100644 index 00000000..6812b9e2 --- /dev/null +++ b/db_scripts/diff/15874.down @@ -0,0 +1,125 @@ +USE provisioning; +SET autocommit=0; + + +DROP TRIGGER IF EXISTS voip_phost_crepl_trig; +DELIMITER ;; +/*!50003 CREATE*/ /*!50017 DEFINER=`sipwise`@`localhost`*/ /*!50003 TRIGGER voip_phost_crepl_trig AFTER INSERT ON voip_peer_hosts + FOR EACH ROW BEGIN + + DECLARE m_proto CHAR(4); + IF NEW.transport = 2 THEN + SET m_proto := 'TCP'; + ELSEIF NEW.transport = 3 THEN + SET m_proto := 'TLS'; + ELSE + SET m_proto := 'UDP'; + END IF; + + INSERT INTO voip_peer_preferences (peer_host_id, attribute_id, value) + SELECT NEW.id, p.id, pe.value + FROM voip_preferences p, voip_preferences_enum pe + WHERE p.id <=> preference_id AND p.peer_pref=1 AND pe.peer_pref=1 AND pe.default_val=1 AND pe.value IS NOT NULL; + + IF NEW.enabled THEN + INSERT INTO kamailio.lcr_gw (id, lcr_id, gw_name, ip_addr, hostname, port, uri_scheme, transport, strip, group_id) + VALUES(NEW.id, 1, NEW.name, NEW.ip, NEW.host, NEW.port, 1, NEW.transport, 0, NEW.group_id); + + INSERT INTO kamailio.lcr_rule_target (lcr_id, rule_id, gw_id, priority, weight) + SELECT rule.lcr_id, rule.id, NEW.id, vpg.priority, NEW.weight + FROM kamailio.lcr_rule rule + INNER JOIN provisioning.voip_peer_groups vpg ON vpg.id = rule.group_id + WHERE vpg.id <=> NEW.group_id; + + IF NEW.probe = 1 THEN + INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description) + VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername="', NEW.name, '";peergid=', NEW.group_id, ';'), 'Peer Probe'); + END IF; + + END IF; + + + END */;; +DELIMITER ; + + +DROP TRIGGER IF EXISTS voip_phost_urepl_trig; +DELIMITER ;; +/*!50003 CREATE*/ /*!50017 DEFINER=`sipwise`@`localhost`*/ /*!50003 TRIGGER voip_phost_urepl_trig AFTER UPDATE ON voip_peer_hosts + FOR EACH ROW BEGIN + + DECLARE m_proto CHAR(4); + DECLARE m_probechange INTEGER; + + IF NEW.transport = 2 THEN + SET m_proto := 'TCP'; + ELSEIF NEW.transport = 3 THEN + SET m_proto := 'TLS'; + ELSE + SET m_proto := 'UDP'; + END IF; + + IF OLD.enabled = 1 AND NEW.enabled = 1 THEN + + UPDATE kamailio.lcr_gw + SET gw_name = NEW.name, ip_addr = NEW.ip, hostname = NEW.host, port = NEW.port, transport = NEW.transport + WHERE lcr_id = 1 + AND id <=> NEW.id; + + UPDATE kamailio.lcr_rule_target rt + JOIN kamailio.lcr_gw as gw ON gw.id = rt.gw_id + SET rt.weight = NEW.weight + WHERE gw.id <=> NEW.id + AND gw.id <=> rt.gw_id + AND gw.lcr_id = 1 + AND gw.group_id <=> NEW.group_id; + + IF OLD.probe = 1 AND (OLD.ip != NEW.ip OR OLD.port != NEW.port OR OLD.transport != NEW.transport OR OLD.name != NEW.name OR OLD.group_id != NEW.group_id) THEN + DELETE FROM kamailio.dispatcher WHERE attrs LIKE CONCAT('%peerid=', OLD.id, ';%'); + SET m_probechange := 1; + ELSEIF OLD.probe = 1 and NEW.probe = 0 THEN + DELETE FROM kamailio.dispatcher WHERE attrs LIKE CONCAT('%peerid=', OLD.id, ';%'); + END IF; + IF NEW.probe = 1 AND (m_probechange = 1 OR OLD.probe = 0) THEN + INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description) + VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername="', NEW.name, '";peergid=', NEW.group_id, ';'), 'Peer Probe'); + END IF; + + ELSEIF OLD.enabled = 0 AND NEW.enabled = 1 THEN + + INSERT INTO kamailio.lcr_gw (id, lcr_id, gw_name, ip_addr, hostname, port, uri_scheme, transport, strip, group_id) + VALUES(NEW.id, 1, NEW.name, NEW.ip, NEW.host, NEW.port, 1, NEW.transport, 0, NEW.group_id); + + INSERT INTO kamailio.lcr_rule_target (lcr_id, rule_id, gw_id, priority, weight) + SELECT rule.lcr_id, rule.id, NEW.id, vpg.priority, NEW.weight + FROM kamailio.lcr_rule rule + INNER JOIN provisioning.voip_peer_groups vpg ON vpg.id = rule.group_id + WHERE vpg.id <=> NEW.group_id; + + IF NEW.probe = 1 THEN + INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description) + VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername="', NEW.name, '";peergid=', NEW.group_id, ';'), 'Peer Probe'); + END IF; + + ELSEIF OLD.enabled = 1 AND NEW.enabled = 0 THEN + + DELETE FROM kamailio.lcr_gw + WHERE lcr_id = 1 + AND id <=> NEW.id; + + IF OLD.probe = 1 THEN + DELETE FROM kamailio.dispatcher WHERE attrs LIKE CONCAT('%peerid=', NEW.id, ';%'); + END IF; + + END IF; + + + END */;; +DELIMITER ; + + +ALTER TABLE voip_peer_hosts + DROP COLUMN `site_id`; + + +COMMIT; diff --git a/db_scripts/diff/15874.up b/db_scripts/diff/15874.up new file mode 100644 index 00000000..56e59891 --- /dev/null +++ b/db_scripts/diff/15874.up @@ -0,0 +1,140 @@ +USE provisioning; +SET autocommit=0; + +ALTER TABLE voip_peer_hosts + ADD COLUMN `site_id` int(2) unsigned DEFAULT NULL, + ADD KEY site_id_idx(`site_id`); + + +DROP TRIGGER IF EXISTS voip_phost_crepl_trig; +DELIMITER ;; +/*!50003 CREATE*/ /*!50017 DEFINER=`sipwise`@`localhost`*/ /*!50003 TRIGGER voip_phost_crepl_trig AFTER INSERT ON voip_peer_hosts + FOR EACH ROW BEGIN + + DECLARE m_proto CHAR(4); + IF NEW.transport = 2 THEN + SET m_proto := 'TCP'; + ELSEIF NEW.transport = 3 THEN + SET m_proto := 'TLS'; + ELSE + SET m_proto := 'UDP'; + END IF; + + INSERT INTO voip_peer_preferences (peer_host_id, attribute_id, value) + SELECT NEW.id, p.id, pe.value + FROM voip_preferences p, voip_preferences_enum pe + WHERE p.id <=> preference_id AND p.peer_pref=1 AND pe.peer_pref=1 AND pe.default_val=1 AND pe.value IS NOT NULL; + + IF NEW.enabled THEN + INSERT INTO kamailio.lcr_gw (id, lcr_id, gw_name, ip_addr, hostname, port, uri_scheme, transport, strip, group_id) + VALUES(NEW.id, 1, NEW.name, NEW.ip, NEW.host, NEW.port, 1, NEW.transport, 0, NEW.group_id); + + INSERT INTO kamailio.lcr_rule_target (lcr_id, rule_id, gw_id, priority, weight) + SELECT rule.lcr_id, rule.id, NEW.id, vpg.priority, NEW.weight + FROM kamailio.lcr_rule rule + INNER JOIN provisioning.voip_peer_groups vpg ON vpg.id = rule.group_id + WHERE vpg.id <=> NEW.group_id; + + IF NEW.probe = 1 THEN + IF NEW.site_id IS NOT NULL THEN + INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description) + VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername="', NEW.name, '";peergid=', NEW.group_id, ';site_id=', NEW.site_id, ';'), 'Peer Probe'); + ELSE + INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description) + VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername="', NEW.name, '";peergid=', NEW.group_id, ';'), 'Peer Probe'); + END IF; + END IF; + + END IF; + + + END */;; +DELIMITER ; + + +DROP TRIGGER IF EXISTS voip_phost_urepl_trig; +DELIMITER ;; +/*!50003 CREATE*/ /*!50017 DEFINER=`sipwise`@`localhost`*/ /*!50003 TRIGGER voip_phost_urepl_trig AFTER UPDATE ON voip_peer_hosts + FOR EACH ROW BEGIN + + DECLARE m_proto CHAR(4); + DECLARE m_probechange INTEGER; + + IF NEW.transport = 2 THEN + SET m_proto := 'TCP'; + ELSEIF NEW.transport = 3 THEN + SET m_proto := 'TLS'; + ELSE + SET m_proto := 'UDP'; + END IF; + + IF OLD.enabled = 1 AND NEW.enabled = 1 THEN + + UPDATE kamailio.lcr_gw + SET gw_name = NEW.name, ip_addr = NEW.ip, hostname = NEW.host, port = NEW.port, transport = NEW.transport + WHERE lcr_id = 1 + AND id <=> NEW.id; + + UPDATE kamailio.lcr_rule_target rt + JOIN kamailio.lcr_gw as gw ON gw.id = rt.gw_id + SET rt.weight = NEW.weight + WHERE gw.id <=> NEW.id + AND gw.id <=> rt.gw_id + AND gw.lcr_id = 1 + AND gw.group_id <=> NEW.group_id; + + IF OLD.probe = 1 AND (OLD.ip != NEW.ip OR OLD.port != NEW.port OR OLD.transport != NEW.transport OR OLD.name != NEW.name OR OLD.group_id != NEW.group_id OR OLD.site_id != NEW.site_id) THEN + DELETE FROM kamailio.dispatcher WHERE attrs LIKE CONCAT('%peerid=', OLD.id, ';%'); + SET m_probechange := 1; + ELSEIF OLD.probe = 1 and NEW.probe = 0 THEN + DELETE FROM kamailio.dispatcher WHERE attrs LIKE CONCAT('%peerid=', OLD.id, ';%'); + END IF; + IF NEW.probe = 1 AND (m_probechange = 1 OR OLD.probe = 0) THEN + IF NEW.site_id IS NOT NULL THEN + INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description) + VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername="', NEW.name, '";peergid=', NEW.group_id, ';site_id=', NEW.site_id, ';'), 'Peer Probe'); + ELSE + INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description) + VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername="', NEW.name, '";peergid=', NEW.group_id, ';'), 'Peer Probe'); + END IF; + END IF; + + ELSEIF OLD.enabled = 0 AND NEW.enabled = 1 THEN + + INSERT INTO kamailio.lcr_gw (id, lcr_id, gw_name, ip_addr, hostname, port, uri_scheme, transport, strip, group_id) + VALUES(NEW.id, 1, NEW.name, NEW.ip, NEW.host, NEW.port, 1, NEW.transport, 0, NEW.group_id); + + INSERT INTO kamailio.lcr_rule_target (lcr_id, rule_id, gw_id, priority, weight) + SELECT rule.lcr_id, rule.id, NEW.id, vpg.priority, NEW.weight + FROM kamailio.lcr_rule rule + INNER JOIN provisioning.voip_peer_groups vpg ON vpg.id = rule.group_id + WHERE vpg.id <=> NEW.group_id; + + IF NEW.probe = 1 THEN + IF NEW.site_id IS NOT NULL THEN + INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description) + VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername="', NEW.name, '";peergid=', NEW.group_id, ';site_id=', NEW.site_id, ';'), 'Peer Probe'); + ELSE + INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description) + VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername="', NEW.name, '";peergid=', NEW.group_id, ';'), 'Peer Probe'); + END IF; + END IF; + + ELSEIF OLD.enabled = 1 AND NEW.enabled = 0 THEN + + DELETE FROM kamailio.lcr_gw + WHERE lcr_id = 1 + AND id <=> NEW.id; + + IF OLD.probe = 1 THEN + DELETE FROM kamailio.dispatcher WHERE attrs LIKE CONCAT('%peerid=', NEW.id, ';%'); + END IF; + + END IF; + + + END */;; +DELIMITER ; + + +COMMIT; diff --git a/schema/ngcp.sql b/schema/ngcp.sql index 758a6504..45442d76 100644 --- a/schema/ngcp.sql +++ b/schema/ngcp.sql @@ -25,7 +25,7 @@ CREATE TABLE `db_schema` ( PRIMARY KEY (`id`), UNIQUE KEY `rev_idx` (`revision`,`node`,`site_id`), KEY `release_idx` (`release`) -) ENGINE=InnoDB AUTO_INCREMENT=919 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +) ENGINE=InnoDB AUTO_INCREMENT=920 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; /*!40101 SET character_set_client = @saved_cs_client */; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8mb4 */; @@ -30970,6 +30970,7 @@ INSERT INTO `db_schema` VALUES (915,15870,'spce','1970-01-01 00:00:01','trunk',1 INSERT INTO `db_schema` VALUES (916,15871,'spce','1970-01-01 00:00:01','trunk',1); INSERT INTO `db_schema` VALUES (917,15872,'spce','1970-01-01 00:00:01','trunk',1); INSERT INTO `db_schema` VALUES (918,15873,'spce','1970-01-01 00:00:01','trunk',1); +INSERT INTO `db_schema` VALUES (919,15874,'spce','1970-01-01 00:00:01','trunk',1); commit; set autocommit=0; INSERT INTO `timezone` VALUES ('1','localtime','1970-01-01 00:00:01','1970-01-01 00:00:01',NULL); diff --git a/schema/provisioning.json b/schema/provisioning.json index 3a7b189b..4a4ef774 100644 --- a/schema/provisioning.json +++ b/schema/provisioning.json @@ -4716,6 +4716,18 @@ "TABLE_NAME" : "voip_peer_hosts", "key_col" : "voip_peer_hosts/probe" }, + "voip_peer_hosts/site_id" : { + "CHARACTER_SET_NAME" : null, + "COLLATION_NAME" : null, + "COLUMN_DEFAULT" : "NULL", + "COLUMN_NAME" : "site_id", + "COLUMN_TYPE" : "int(2) unsigned", + "EXTRA" : "", + "IS_NULLABLE" : "YES", + "ORDINAL_POSITION" : 13, + "TABLE_NAME" : "voip_peer_hosts", + "key_col" : "voip_peer_hosts/site_id" + }, "voip_peer_hosts/transport" : { "CHARACTER_SET_NAME" : null, "COLLATION_NAME" : null, @@ -11842,6 +11854,18 @@ "TABLE_NAME" : "voip_peer_hosts", "key_col" : "voip_peer_hosts/grpname/2" }, + "voip_peer_hosts/site_id_idx/1" : { + "COLLATION" : "A", + "COLUMN_NAME" : "site_id", + "INDEX_NAME" : "site_id_idx", + "INDEX_TYPE" : "BTREE", + "NON_UNIQUE" : 1, + "NULLABLE" : "YES", + "SEQ_IN_INDEX" : 1, + "SUB_PART" : null, + "TABLE_NAME" : "voip_peer_hosts", + "key_col" : "voip_peer_hosts/site_id_idx/1" + }, "voip_peer_inbound_rules/PRIMARY/1" : { "COLLATION" : "A", "COLUMN_NAME" : "id", @@ -14380,7 +14404,7 @@ "key_col" : "voip_pgrp_urepl_trig/voip_peer_groups" }, "voip_phost_crepl_trig/voip_peer_hosts" : { - "ACTION_STATEMENT" : "BEGIN\n\n DECLARE m_proto CHAR(4);\n IF NEW.transport = 2 THEN\n SET m_proto := 'TCP';\n ELSEIF NEW.transport = 3 THEN\n SET m_proto := 'TLS';\n ELSE\n SET m_proto := 'UDP';\n END IF;\n\n INSERT INTO voip_peer_preferences (peer_host_id, attribute_id, value)\n SELECT NEW.id, p.id, pe.value\n FROM voip_preferences p, voip_preferences_enum pe\n WHERE p.id <=> preference_id AND p.peer_pref=1 AND pe.peer_pref=1 AND pe.default_val=1 AND pe.value IS NOT NULL;\n\n IF NEW.enabled THEN\n INSERT INTO kamailio.lcr_gw (id, lcr_id, gw_name, ip_addr, hostname, port, uri_scheme, transport, strip, group_id)\n VALUES(NEW.id, 1, NEW.name, NEW.ip, NEW.host, NEW.port, 1, NEW.transport, 0, NEW.group_id);\n\n INSERT INTO kamailio.lcr_rule_target (lcr_id, rule_id, gw_id, priority, weight)\n SELECT rule.lcr_id, rule.id, NEW.id, vpg.priority, NEW.weight\n FROM kamailio.lcr_rule rule\n INNER JOIN provisioning.voip_peer_groups vpg ON vpg.id = rule.group_id\n WHERE vpg.id <=> NEW.group_id;\n\n IF NEW.probe = 1 THEN\n INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description)\n VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername=\"', NEW.name, '\";peergid=', NEW.group_id, ';'), 'Peer Probe');\n END IF;\n\n END IF;\n\n\n END", + "ACTION_STATEMENT" : "BEGIN\n\n DECLARE m_proto CHAR(4);\n IF NEW.transport = 2 THEN\n SET m_proto := 'TCP';\n ELSEIF NEW.transport = 3 THEN\n SET m_proto := 'TLS';\n ELSE\n SET m_proto := 'UDP';\n END IF;\n\n INSERT INTO voip_peer_preferences (peer_host_id, attribute_id, value)\n SELECT NEW.id, p.id, pe.value\n FROM voip_preferences p, voip_preferences_enum pe\n WHERE p.id <=> preference_id AND p.peer_pref=1 AND pe.peer_pref=1 AND pe.default_val=1 AND pe.value IS NOT NULL;\n\n IF NEW.enabled THEN\n INSERT INTO kamailio.lcr_gw (id, lcr_id, gw_name, ip_addr, hostname, port, uri_scheme, transport, strip, group_id)\n VALUES(NEW.id, 1, NEW.name, NEW.ip, NEW.host, NEW.port, 1, NEW.transport, 0, NEW.group_id);\n\n INSERT INTO kamailio.lcr_rule_target (lcr_id, rule_id, gw_id, priority, weight)\n SELECT rule.lcr_id, rule.id, NEW.id, vpg.priority, NEW.weight\n FROM kamailio.lcr_rule rule\n INNER JOIN provisioning.voip_peer_groups vpg ON vpg.id = rule.group_id\n WHERE vpg.id <=> NEW.group_id;\n\n IF NEW.probe = 1 THEN\n IF NEW.site_id IS NOT NULL THEN\n INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description)\n VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername=\"', NEW.name, '\";peergid=', NEW.group_id, ';site_id=', NEW.site_id, ';'), 'Peer Probe');\n ELSE\n INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description)\n VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername=\"', NEW.name, '\";peergid=', NEW.group_id, ';'), 'Peer Probe');\n END IF;\n END IF;\n\n END IF;\n\n\n END", "ACTION_TIMING" : "AFTER", "EVENT_MANIPULATION" : "INSERT", "EVENT_OBJECT_SCHEMA" : "provisioning", @@ -14398,7 +14422,7 @@ "key_col" : "voip_phost_drepl_trig/voip_peer_hosts" }, "voip_phost_urepl_trig/voip_peer_hosts" : { - "ACTION_STATEMENT" : "BEGIN\n\n DECLARE m_proto CHAR(4);\n DECLARE m_probechange INTEGER;\n\n IF NEW.transport = 2 THEN\n SET m_proto := 'TCP';\n ELSEIF NEW.transport = 3 THEN\n SET m_proto := 'TLS';\n ELSE\n SET m_proto := 'UDP';\n END IF;\n\n IF OLD.enabled = 1 AND NEW.enabled = 1 THEN\n\n UPDATE kamailio.lcr_gw\n SET gw_name = NEW.name, ip_addr = NEW.ip, hostname = NEW.host, port = NEW.port, transport = NEW.transport\n WHERE lcr_id = 1\n AND id <=> NEW.id;\n\n UPDATE kamailio.lcr_rule_target rt\n JOIN kamailio.lcr_gw as gw ON gw.id = rt.gw_id\n SET rt.weight = NEW.weight\n WHERE gw.id <=> NEW.id\n AND gw.id <=> rt.gw_id\n AND gw.lcr_id = 1\n AND gw.group_id <=> NEW.group_id;\n\n IF OLD.probe = 1 AND (OLD.ip != NEW.ip OR OLD.port != NEW.port OR OLD.transport != NEW.transport OR OLD.name != NEW.name OR OLD.group_id != NEW.group_id) THEN\n DELETE FROM kamailio.dispatcher WHERE attrs LIKE CONCAT('%peerid=', OLD.id, ';%');\n SET m_probechange := 1;\n ELSEIF OLD.probe = 1 and NEW.probe = 0 THEN\n DELETE FROM kamailio.dispatcher WHERE attrs LIKE CONCAT('%peerid=', OLD.id, ';%');\n END IF;\n IF NEW.probe = 1 AND (m_probechange = 1 OR OLD.probe = 0) THEN\n INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description)\n VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername=\"', NEW.name, '\";peergid=', NEW.group_id, ';'), 'Peer Probe');\n END IF;\n\n ELSEIF OLD.enabled = 0 AND NEW.enabled = 1 THEN\n\n INSERT INTO kamailio.lcr_gw (id, lcr_id, gw_name, ip_addr, hostname, port, uri_scheme, transport, strip, group_id)\n VALUES(NEW.id, 1, NEW.name, NEW.ip, NEW.host, NEW.port, 1, NEW.transport, 0, NEW.group_id);\n\n INSERT INTO kamailio.lcr_rule_target (lcr_id, rule_id, gw_id, priority, weight)\n SELECT rule.lcr_id, rule.id, NEW.id, vpg.priority, NEW.weight\n FROM kamailio.lcr_rule rule\n INNER JOIN provisioning.voip_peer_groups vpg ON vpg.id = rule.group_id\n WHERE vpg.id <=> NEW.group_id;\n\n IF NEW.probe = 1 THEN\n INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description)\n VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername=\"', NEW.name, '\";peergid=', NEW.group_id, ';'), 'Peer Probe');\n END IF;\n\n ELSEIF OLD.enabled = 1 AND NEW.enabled = 0 THEN\n\n DELETE FROM kamailio.lcr_gw\n WHERE lcr_id = 1\n AND id <=> NEW.id;\n\n IF OLD.probe = 1 THEN\n DELETE FROM kamailio.dispatcher WHERE attrs LIKE CONCAT('%peerid=', NEW.id, ';%');\n END IF;\n\n END IF;\n\n\n END", + "ACTION_STATEMENT" : "BEGIN\n\n DECLARE m_proto CHAR(4);\n DECLARE m_probechange INTEGER;\n\n IF NEW.transport = 2 THEN\n SET m_proto := 'TCP';\n ELSEIF NEW.transport = 3 THEN\n SET m_proto := 'TLS';\n ELSE\n SET m_proto := 'UDP';\n END IF;\n\n IF OLD.enabled = 1 AND NEW.enabled = 1 THEN\n\n UPDATE kamailio.lcr_gw\n SET gw_name = NEW.name, ip_addr = NEW.ip, hostname = NEW.host, port = NEW.port, transport = NEW.transport\n WHERE lcr_id = 1\n AND id <=> NEW.id;\n\n UPDATE kamailio.lcr_rule_target rt\n JOIN kamailio.lcr_gw as gw ON gw.id = rt.gw_id\n SET rt.weight = NEW.weight\n WHERE gw.id <=> NEW.id\n AND gw.id <=> rt.gw_id\n AND gw.lcr_id = 1\n AND gw.group_id <=> NEW.group_id;\n\n IF OLD.probe = 1 AND (OLD.ip != NEW.ip OR OLD.port != NEW.port OR OLD.transport != NEW.transport OR OLD.name != NEW.name OR OLD.group_id != NEW.group_id OR OLD.site_id != NEW.site_id) THEN\n DELETE FROM kamailio.dispatcher WHERE attrs LIKE CONCAT('%peerid=', OLD.id, ';%');\n SET m_probechange := 1;\n ELSEIF OLD.probe = 1 and NEW.probe = 0 THEN\n DELETE FROM kamailio.dispatcher WHERE attrs LIKE CONCAT('%peerid=', OLD.id, ';%');\n END IF;\n IF NEW.probe = 1 AND (m_probechange = 1 OR OLD.probe = 0) THEN\n IF NEW.site_id IS NOT NULL THEN\n INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description)\n VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername=\"', NEW.name, '\";peergid=', NEW.group_id, ';site_id=', NEW.site_id, ';'), 'Peer Probe');\n ELSE\n INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description)\n VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername=\"', NEW.name, '\";peergid=', NEW.group_id, ';'), 'Peer Probe');\n END IF;\n END IF;\n\n ELSEIF OLD.enabled = 0 AND NEW.enabled = 1 THEN\n\n INSERT INTO kamailio.lcr_gw (id, lcr_id, gw_name, ip_addr, hostname, port, uri_scheme, transport, strip, group_id)\n VALUES(NEW.id, 1, NEW.name, NEW.ip, NEW.host, NEW.port, 1, NEW.transport, 0, NEW.group_id);\n\n INSERT INTO kamailio.lcr_rule_target (lcr_id, rule_id, gw_id, priority, weight)\n SELECT rule.lcr_id, rule.id, NEW.id, vpg.priority, NEW.weight\n FROM kamailio.lcr_rule rule\n INNER JOIN provisioning.voip_peer_groups vpg ON vpg.id = rule.group_id\n WHERE vpg.id <=> NEW.group_id;\n\n IF NEW.probe = 1 THEN\n IF NEW.site_id IS NOT NULL THEN\n INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description)\n VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername=\"', NEW.name, '\";peergid=', NEW.group_id, ';site_id=', NEW.site_id, ';'), 'Peer Probe');\n ELSE\n INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description)\n VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername=\"', NEW.name, '\";peergid=', NEW.group_id, ';'), 'Peer Probe');\n END IF;\n END IF;\n\n ELSEIF OLD.enabled = 1 AND NEW.enabled = 0 THEN\n\n DELETE FROM kamailio.lcr_gw\n WHERE lcr_id = 1\n AND id <=> NEW.id;\n\n IF OLD.probe = 1 THEN\n DELETE FROM kamailio.dispatcher WHERE attrs LIKE CONCAT('%peerid=', NEW.id, ';%');\n END IF;\n\n END IF;\n\n\n END", "ACTION_TIMING" : "AFTER", "EVENT_MANIPULATION" : "UPDATE", "EVENT_OBJECT_SCHEMA" : "provisioning", diff --git a/schema/provisioning.sql b/schema/provisioning.sql index abfab7b5..9e55bcdf 100644 --- a/schema/provisioning.sql +++ b/schema/provisioning.sql @@ -1071,9 +1071,11 @@ CREATE TABLE `voip_peer_hosts` ( `via_lb` tinyint(1) NOT NULL DEFAULT 0, `enabled` tinyint(1) NOT NULL DEFAULT 1, `probe` tinyint(1) NOT NULL DEFAULT 0, + `site_id` int(2) unsigned DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `grpname` (`group_id`,`name`), KEY `grpidx` (`group_id`), + KEY `site_id_idx` (`site_id`), CONSTRAINT `v_ps_groupid_ref` FOREIGN KEY (`group_id`) REFERENCES `voip_peer_groups` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; /*!40101 SET character_set_client = @saved_cs_client */; @@ -5453,8 +5455,13 @@ DELIMITER ;; WHERE vpg.id <=> NEW.group_id; IF NEW.probe = 1 THEN - INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description) - VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername="', NEW.name, '";peergid=', NEW.group_id, ';'), 'Peer Probe'); + IF NEW.site_id IS NOT NULL THEN + INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description) + VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername="', NEW.name, '";peergid=', NEW.group_id, ';site_id=', NEW.site_id, ';'), 'Peer Probe'); + ELSE + INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description) + VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername="', NEW.name, '";peergid=', NEW.group_id, ';'), 'Peer Probe'); + END IF; END IF; END IF; @@ -5504,15 +5511,20 @@ DELIMITER ;; AND gw.lcr_id = 1 AND gw.group_id <=> NEW.group_id; - IF OLD.probe = 1 AND (OLD.ip != NEW.ip OR OLD.port != NEW.port OR OLD.transport != NEW.transport OR OLD.name != NEW.name OR OLD.group_id != NEW.group_id) THEN + IF OLD.probe = 1 AND (OLD.ip != NEW.ip OR OLD.port != NEW.port OR OLD.transport != NEW.transport OR OLD.name != NEW.name OR OLD.group_id != NEW.group_id OR OLD.site_id != NEW.site_id) THEN DELETE FROM kamailio.dispatcher WHERE attrs LIKE CONCAT('%peerid=', OLD.id, ';%'); SET m_probechange := 1; ELSEIF OLD.probe = 1 and NEW.probe = 0 THEN DELETE FROM kamailio.dispatcher WHERE attrs LIKE CONCAT('%peerid=', OLD.id, ';%'); END IF; IF NEW.probe = 1 AND (m_probechange = 1 OR OLD.probe = 0) THEN - INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description) - VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername="', NEW.name, '";peergid=', NEW.group_id, ';'), 'Peer Probe'); + IF NEW.site_id IS NOT NULL THEN + INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description) + VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername="', NEW.name, '";peergid=', NEW.group_id, ';site_id=', NEW.site_id, ';'), 'Peer Probe'); + ELSE + INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description) + VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername="', NEW.name, '";peergid=', NEW.group_id, ';'), 'Peer Probe'); + END IF; END IF; ELSEIF OLD.enabled = 0 AND NEW.enabled = 1 THEN @@ -5527,8 +5539,13 @@ DELIMITER ;; WHERE vpg.id <=> NEW.group_id; IF NEW.probe = 1 THEN - INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description) - VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername="', NEW.name, '";peergid=', NEW.group_id, ';'), 'Peer Probe'); + IF NEW.site_id IS NOT NULL THEN + INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description) + VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername="', NEW.name, '";peergid=', NEW.group_id, ';site_id=', NEW.site_id, ';'), 'Peer Probe'); + ELSE + INSERT INTO kamailio.dispatcher (setid, destination, flags, priority, attrs, description) + VALUES(100, CONCAT('sip:', NEW.ip, ':', NEW.port, ';transport=', m_proto), 8, 0, CONCAT('peerid=', NEW.id, ';peername="', NEW.name, '";peergid=', NEW.group_id, ';'), 'Peer Probe'); + END IF; END IF; ELSEIF OLD.enabled = 1 AND NEW.enabled = 0 THEN