debian/0000775000000000000000000000000012372223115007166 5ustar debian/tango-starter.init.d0000664000000000000000000001154112167063434013101 0ustar #! /bin/sh ### BEGIN INIT INFO # Provides: tango-starter # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Should-Start: tango-db # Should-Stop: tango-db # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start the tango control system starter daemon # Description: Provide a tango control system to start and stop other # tango control system devices. ### END INIT INFO # Author: Picca Frédéric-Emmanuel PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/lib/tango DESC="Tango Control System - starter" NAME=tango-starter NAME_REAL=Starter CONFFILE=/etc/tangorc CANON_HOST=`grep TANGO_HOST $CONFFILE | awk -F ":" '{print $1}' | awk -F "=" '{print $2}' | awk -F "." '{print $1}'` DAEMON=/usr/lib/tango/$NAME_REAL DAEMON_ARGS=`hostname` PIDFILE=/var/run/$NAME.pid TAC_DEVICE=sys/access_control/1 # Exit if the package is not installed [ -x "$DAEMON" ] || exit 0 # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions # # Function that starts the daemon/service # do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started # first check for a running tango-database and if [ $CANON_HOST != "localhost" ] then tango_admin --ping-network 40 || return 2 fi tango_admin --ping-database 6 || return 2 # check if tac is enabled tango_admin --tac-enabled || tango_admin --ping-device $TAC_DEVICE 3 || return 2 # register the tango-starter if necessary tango_admin --check-device tango/admin/`hostname` || tango_admin --add-server Starter/`hostname` Starter tango/admin/`hostname` || return 2 start-stop-daemon --start --quiet --chuid tango:tango --background \ --make-pidfile --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start --quiet --chuid tango:tango --background \ --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS \ || return 2 # Add code here, if necessary, that waits for the process to be ready # to handle requests from services started subsequently which depend # on this one. As a last resort, sleep for some time. } # # Function that stops the daemon/service # do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME_REAL RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 # Wait for children to finish too if this is a daemon that forks # and if the daemon is only ever run from this initscript. # If the above conditions are not satisfied then add some other code # that waits for the process to drop all resources that could be # needed by services started subsequently. A last resort is to # sleep for some time. start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 # Many daemons don't delete their pidfiles when they exit. rm -f $PIDFILE return "$RETVAL" } # # Function that sends a SIGHUP to the daemon/service # do_reload() { # # If the daemon can reload its configuration without # restarting (for example, when it is sent a SIGHUP), # then implement that here. # start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME return 0 } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; status) status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? ;; #reload|force-reload) # # If do_reload() is not implemented then leave this commented out # and leave 'force-reload' as an alias for 'restart'. # #log_daemon_msg "Reloading $DESC" "$NAME" #do_reload #log_end_msg $? #;; restart|force-reload) # # If the "reload" option is implemented then remove the # 'force-reload' alias # log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 exit 3 ;; esac : debian/tango-common.postrm0000664000000000000000000000036112167063434013042 0ustar #!/bin/sh set -e if [ "$1" = "purge" ]; then rm -f /etc/tangorc if which ucf >/dev/null 2>&1; then ucf --purge /etc/tangorc fi if which ucfr >/dev/null; then ucfr --purge tango-common /etc/tangorc fi fi #DEBHELPER# debian/todo0000664000000000000000000000603512167063434010072 0ustar - ask the ESRf if they want tango7 + tango8 // installation for production - compilation / execution - add the diff --git a/lib/cpp/log4tango/Makefile.am b/lib/cpp/log4tango/Makefile.am index e0231d5..3d0ea84 100644 --- a/lib/cpp/log4tango/Makefile.am +++ b/lib/cpp/log4tango/Makefile.am @@ -1,5 +1,7 @@ SUBDIRS = config src include tests +ACLOCAL_AMFLAGS = -I m4 + if DOC SUBDIRS += doc endif @@ -20,7 +22,7 @@ EXTRA_DIST = log4tango.pc.in \ m4/PETI_PEDANTIC_GCC.m4 \ m4/AC_FUNC_SNPRINTF.m4 \ m4/AC_C_INT64_T.m4 - + pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = log4tango.pc - what about the configure check for zeromq but require zmq.hpp ? - what about Alessio patches for precise. - what about the upgrade tango db etc... j'ai mis une rule qui permet de generer ces scripts. - doxygen -u pour upgrader le fichier de configuration voir quelles version minimum de doxygen doit être supporté. - il y a des warning avec gcc4.7 et log4tango In file included from ../../../../../lib/cpp/log4tango/src/StringUtil.cpp:47:0: ../../../../../lib/cpp/log4tango/src/snprintf.c: In function 'int portable_vsnprintf(char*, size_t, const char*, va_list)': ../../../../../lib/cpp/log4tango/src/snprintf.c:957:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] ../../../../../lib/cpp/log4tango/src/snprintf.c:974:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] ../../../../../lib/cpp/log4tango/src/snprintf.c:983:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] ../../../../../lib/cpp/log4tango/src/snprintf.c:994:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] ../../../../../lib/cpp/log4tango/src/snprintf.c:1006:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] /usr/bin/doxygen warning: Tag `SHOW_DIRECTORIES' at line 473 of file Doxyfile has become obsolete. To avoid this warning please remove this line from your configuration file or upgrade it using "doxygen -u" warning: Tag `HTML_ALIGN_MEMBERS' at line 802 of file Doxyfile has become obsolete. To avoid this warning please remove this line from your configuration file or upgrade it using "doxygen -u" /home/picca/Debian/main/tango/tango/lib/cpp/log4tango/include/log4tango/LoggerStream.hh:92: warning: argument 'i' of command @param is not found in the argument list of log4tango::LoggerStream::operator<<(LOG4TANGO_UNUSED(LogInitiator &i)) /home/picca/Debian/main/tango/tango/lib/cpp/log4tango/include/log4tango/LoggerStream.hh:102: warning: argument 's' of command @param is not found in the argument list of log4tango::LoggerStream::operator<<(LOG4TANGO_UNUSED(LogSeparator &s)) /home/picca/Debian/main/tango/tango/lib/cpp/log4tango/include/log4tango/LoggerStream.hh:112: warning: argument 'endoflog' of command @param is not found in the argument list of log4tango::LoggerStream::operator<<(LOG4TANGO_UNUSED(ls_terminator endoflog)) - les pkgconfig files - fichier pas nettoyé pogo/templates/cpp/Makefiledebian/control0000664000000000000000000003043312372217137010603 0ustar Source: tango Maintainer: Ubuntu Developers XSBC-Original-Maintainer: Debian Science Maintainers Uploaders: Picca Frédéric-Emmanuel Section: science Priority: extra Build-Depends: debhelper (>= 9), dh-autoreconf, doxygen, libcos4-dev, libmysqlclient-dev, libzmq3-dev (>= 3.2.2), po-debconf Standards-Version: 3.9.4 Vcs-Browser: http://git.debian.org/?p=debian-science/packages/tango.git Vcs-Git: git://git.debian.org/git/debian-science/packages/tango.git Homepage: http://www.tango-controls.org Package: liblog4tango5 Architecture: any Multi-Arch: same Section: libs Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} Description: logging for TANGO - shared library Log for TANGO is a library of C++ classes for flexible logging to files, syslog and other destinations. It is modeled after the Log for C++ library (http://jakarta.apache.org/log4j/), staying as close to their API as is reasonable. . This package contains the files necessary for running applications that use the log4tango5 library. Package: liblog4tango5-dev Architecture: any Multi-Arch: same Section: libdevel Depends: ${misc:Depends}, liblog4tango5 (= ${binary:Version}) Pre-Depends: ${misc:Pre-Depends} Conflicts: liblog4tango4-dev Description: logging for TANGO - development library Log for TANGO is a library of C++ classes for flexible logging to files, syslog and other destinations. It is modeled after the Log for C++ library (http://jakarta.apache.org/log4j/), staying as close to their API as is reasonable. . This package contains the log4tango5 development files. Package: liblog4tango5-dbg Architecture: any Multi-Arch: same Section: debug Depends: ${misc:Depends}, liblog4tango5 (= ${binary:Version}) Pre-Depends: ${misc:Pre-Depends} Description: logging for TANGO - debug library Log for TANGO is a library of C++ classes for flexible logging to files, syslog and other destinations. It is modeled after the Log for C++ library (http://jakarta.apache.org/log4j/), staying as close to their API as is reasonable. . This package contains the debugging symbol for liblog4tango5. Package: liblog4tango5-doc Architecture: all Section: doc Depends: ${misc:Depends}, libjs-jquery Description: logging for TANGO - documentation Log for TANGO is a library of C++ classes for flexible logging to files, syslog and other destinations. It is modeled after the Log for C++ library (http://jakarta.apache.org/log4j/), staying as close to their API as is reasonable. . This package contains the documentation of the log4tango5 library. Package: libtango8 Architecture: any Multi-Arch: same Section: libs Depends: ${misc:Depends}, ${shlibs:Depends}, tango-common Pre-Depends: ${misc:Pre-Depends} Description: TANGO distributed control system - shared library TANGO is an object-oriented distributed control system using CORBA. In TANGO all objects are representations of devices, which can be on the same computer or distributed over a network. Communication between devices uses CORBA and can be synchronous, asynchronous or event driven. . The object model in TANGO supports methods, attributes and properties. TANGO provides an API which hides all the details of network access and provides object browsing, discovery, and security features. Permanent data is stored in a MySQL database. . TANGO is being actively developed as a collaborative effort between the ESRF (www.esrf.eu), Soleil (synchrotron-soleil.fr), Alba (www.cells.es), and Elettra institutes (www.elettra.trieste.it). . This package contains the files necessary for running TANGO applications. Package: libtango8-dev Architecture: any Multi-Arch: same Section: libdevel Depends: ${misc:Depends}, libcos4-dev, liblog4tango5-dev, libtango8 (= ${binary:Version}), libzmq3-dev Pre-Depends: ${misc:Pre-Depends} Conflicts: libtango7-dev Description: TANGO distributed control system - development library TANGO is an object-oriented distributed control system using CORBA. In TANGO all objects are representations of devices, which can be on the same computer or distributed over a network. Communication between devices uses CORBA and can be synchronous, asynchronous or event driven. . The object model in TANGO supports methods, attributes and properties. TANGO provides an API which hides all the details of network access and provides object browsing, discovery, and security features. Permanent data is stored in a MySQL database. . TANGO is being actively developed as a collaborative effort between the ESRF (www.esrf.eu), Soleil (synchrotron-soleil.fr), Alba (www.cells.es), and Elettra institutes (www.elettra.trieste.it). . This package contains the tango8 development files. Package: libtango8-dbg Architecture: any Multi-Arch: same Section: debug Depends: ${misc:Depends}, libtango8 (= ${binary:Version}) Pre-Depends: ${misc:Pre-Depends} Description: TANGO distributed control system - debug library TANGO is an object-oriented distributed control system using CORBA. In TANGO all objects are representations of devices, which can be on the same computer or distributed over a network. Communication between devices uses CORBA and can be synchronous, asynchronous or event driven. . The object model in TANGO supports methods, attributes and properties. TANGO provides an API which hides all the details of network access and provides object browsing, discovery, and security features. Permanent data is stored in a MySQL database. . TANGO is being actively developed as a collaborative effort between the ESRF (www.esrf.eu), Soleil (synchrotron-soleil.fr), Alba (www.cells.es), and Elettra institutes (www.elettra.trieste.it). . This package contains the debugging symbols for tango8. Package: libtango8-doc Architecture: all Section: doc Depends: ${misc:Depends} Description: TANGO distributed control system - documentation TANGO is an object-oriented distributed control system using CORBA. In TANGO all objects are representations of devices, which can be on the same computer or distributed over a network. Communication between devices uses CORBA and can be synchronous, asynchronous or event driven. . The object model in TANGO supports methods, attributes and properties. TANGO provides an API which hides all the details of network access and provides object browsing, discovery, and security features. Permanent data is stored in a MySQL database. . TANGO is being actively developed as a collaborative effort between the ESRF (www.esrf.eu), Soleil (synchrotron-soleil.fr), Alba (www.cells.es), and Elettra institutes (www.elettra.trieste.it). . This package contains the documentation for the libtango8 library. Package: libtango-tools Architecture: any Section: net Depends: ${misc:Depends}, ${shlibs:Depends} Replaces: tango-common (<< 7.2.6+dfsg-2) Description: TANGO distributed control system - common executable files This package provides shared files for the TANGO distributed control system, and sets up the required infrastructure. Package: tango-common Architecture: all Multi-Arch: foreign Section: net Depends: ${misc:Depends}, adduser Description: TANGO distributed control system - common files This package provides shared files for the TANGO distributed control system, and sets up the required infrastructure. It is for now an empty package Package: tango-db Architecture: any Section: net Depends: ${misc:Depends}, ${shlibs:Depends}, dbconfig-common, libtango-tools, lsb-base Recommends: mysql-client Description: TANGO distributed control system - database server TANGO is an object oriented distributed control system. It allows communication between TANGO device processes running on the same computer or distributed over the network. These processes can provide services to the control system all over the network, such as hardware control or data processing. . This package provides a TANGO database server using MySQL. Package: tango-db-dbg Architecture: any Section: debug Depends: ${misc:Depends}, tango-db (= ${binary:Version}) Description: TANGO distributed control system - database debug TANGO is an object oriented distributed control system. It allows communication between TANGO device processes running on the same computer or distributed over the network. These processes can provide services to the control system all over the network, such as hardware control or data processing. . This package contains the debugging symbols for tango-db. Package: tango-starter Architecture: any Section: net Depends: ${misc:Depends}, ${shlibs:Depends}, libtango-tools, lsb-base Suggests: omninotify Description: TANGO distributed control system - starter server TANGO is an object oriented distributed control system. It allows communication between TANGO device processes running on the same computer or distributed over the network. These processes can provide services to the control system all over the network, such as hardware control or data processing. . This package provides a TANGO device control server. It can start, stop, or report the status of other TANGO components. Package: tango-starter-dbg Architecture: any Section: debug Depends: ${misc:Depends}, tango-starter (= ${binary:Version}) Description: TANGO distributed control system - starter debug TANGO is an object oriented distributed control system. It allows communication between TANGO device processes running on the same computer or distributed over the network. These processes can provide services to the control system all over the network, such as hardware control or data processing. . This package contains the debugging symbols for tango-starter. Package: tango-accesscontrol Architecture: any Section: net Depends: ${misc:Depends}, ${shlibs:Depends}, libtango-tools, lsb-base, tango-db, tango-starter Description: TANGO distributed control system - accesscontrol server TANGO is an object oriented distributed control system. It allows communication between TANGO device processes running on the same computer or distributed over the network. These processes can provide services to the control system all over the network, such as hardware control or data processing. . This package provides a TANGO accesscontrol server. It can be used to manage the users and IP addresses that are permitted to access TANGO devices. Package: tango-accesscontrol-dbg Architecture: any Section: debug Depends: ${misc:Depends}, tango-accesscontrol (= ${binary:Version}) Description: TANGO distributed control system - accesscontrol debug TANGO is an object oriented distributed control system. It allows communication between TANGO device processes running on the same computer or distributed over the network. These processes can provide services to the control system all over the network, such as hardware control or data processing. . This package contains the debugging symbols for tango-accesscontrol. Package: tango-test Architecture: any Section: net Depends: ${misc:Depends}, ${shlibs:Depends}, tango-starter Description: TANGO distributed control system - test device TANGO is an object oriented distributed control system. It allows communication between TANGO device processes running on the same computer or distributed over the network. These processes can provide services to the control system all over the network, such as hardware control or data processing. . This package provides a TANGO device which implements all TANGO attribute types, and can be used for testing the installation. Package: tango-test-dbg Architecture: any Section: debug Depends: ${misc:Depends}, tango-test (= ${binary:Version}) Description: TANGO distributed control system - test debug TANGO is an object oriented distributed control system. It allows communication between TANGO device processes running on the same computer or distributed over the network. These processes can provide services to the control system all over the network, such as hardware control or data processing. . This package contains the debugging symbols for tango-test. debian/tango-db.prerm0000664000000000000000000000021212167063434011733 0ustar #!/bin/sh set -e #set -x . /usr/share/debconf/confmodule . /usr/share/dbconfig-common/dpkg/prerm.mysql dbc_go tango-db $@ #DEBHELPER# debian/mysql/0000775000000000000000000000000012241203261010326 5ustar debian/mysql/8.0.5+dfsg-10000664000000000000000000005367512167063434012033 0ustar DROP PROCEDURE IF EXISTS tango.ds_start; DROP PROCEDURE IF EXISTS tango.import_event; DROP PROCEDURE IF EXISTS tango.import_device; DROP PROCEDURE IF EXISTS tango.class_prop; DROP PROCEDURE IF EXISTS tango.dev_prop; DROP PROCEDURE IF EXISTS tango.class_att_prop; DROP PROCEDURE IF EXISTS tango.get_dev_list; DROP PROCEDURE IF EXISTS tango.dev_att_prop; DROP PROCEDURE IF EXISTS tango.obj_prop; ######################################################### # # # MAIN PROCEDURE # # # # Procedure input parameters: # # 1 - Device server name (executable/inst_name) # # 2 - Host name # # Procedure output parameters: # # 1 - A huge string with several elements and a # # separator set to 0 (binary 0) # # # ######################################################### # # If you change something in these procedures, do not forget # to also change the COMMENT part of the ds_start procedure # CREATE command # DELIMITER | CREATE PROCEDURE tango.ds_start (IN ds_name VARCHAR(255), IN host VARCHAR(255), OUT res_str BLOB) READS SQL DATA COMMENT 'release 1.8' proc: BEGIN DECLARE notifd_event_name VARCHAR(255) DEFAULT 'notifd/factory/'; DECLARE adm_dev_name VARCHAR(255) DEFAULT 'dserver/'; DECLARE done, dev_nb,class_nb INT DEFAULT 0; DECLARE tmp_class,d_name VARCHAR(255); DECLARE dev_list BLOB; DECLARE start,pos INT DEFAULT 1; DECLARE class_nb_pos INT; DECLARE ca_dev_name VARCHAR(255); DECLARE cur_class_list CURSOR FOR SELECT DISTINCT class FROM tango.device WHERE server = ds_name; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET adm_dev_name = CONCAT(adm_dev_name,ds_name); # # import admin device # CALL tango.import_device(adm_dev_name,res_str); IF LOCATE('Not Found',res_str) != 0 OR LOCATE('MySQL Error',res_str) != 0 THEN LEAVE proc; END IF; # # import event factory for notification service running on that host # SET notifd_event_name = CONCAT(notifd_event_name,host); CALL tango.import_event(notifd_event_name,res_str); SET done = 0; IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR during import_event procedure for event factory'; LEAVE proc; END IF; # # import event channel for this server # CALL tango.import_event(adm_dev_name,res_str); SET done = 0; IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR during import_event procedure for DS event channel'; LEAVE proc; END IF; # # Get all class properties for DServer class # CALL tango.class_prop('DServer',res_str); SET done = 0; IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting DServer class property(ies)'; LEAVE proc; END IF; # # Get all class properties for Default class # CALL tango.class_prop('Default',res_str); SET done = 0; IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting Default class property(ies)'; LEAVE proc; END IF; # # Get all device properties for admin device # CALL tango.dev_prop(adm_dev_name,res_str); SET done = 0; # # # SET res_str = CONCAT_WS(CHAR(0),res_str,ds_name); SET class_nb_pos = LENGTH(res_str); # # A loop for each class embedded within the server # OPEN cur_class_list; REPEAT FETCH cur_class_list INTO tmp_class; IF NOT done THEN IF tmp_class != 'dserver' THEN SET class_nb = class_nb + 1; CALL tango.class_prop(tmp_class,res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting DS class(es) property(ies)'; CLOSE cur_class_list; LEAVE proc; END IF; CALL tango.class_att_prop(tmp_class,res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting DS class(es) attribute(s) property(ies)'; CLOSE cur_class_list; LEAVE proc; END IF; CALL tango.get_dev_list(tmp_class,ds_name,res_str,dev_list,dev_nb); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting DS class(es) device list'; CLOSE cur_class_list; LEAVE proc; END IF; # # A loop for each device in the class # WHILE dev_nb > 0 DO SET pos = LOCATE(CHAR(0),dev_list,start); IF pos = 0 THEN SET d_name = SUBSTRING(dev_list,start); ELSE SET d_name = SUBSTRING(dev_list,start,pos-start); SET start = pos + 1; END IF; # select dev_list,d_name,pos,start; CALL tango.dev_prop(d_name,res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting device property(ies)'; CLOSE cur_class_list; LEAVE proc; END IF; CALL tango.dev_att_prop(d_name,res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting device attribute property(ies)'; CLOSE cur_class_list; LEAVE proc; END IF; SET dev_nb = dev_nb - 1; END WHILE; SET start = 1; END IF; END IF; UNTIL done END REPEAT; CLOSE cur_class_list; SET res_str = INSERT(res_str,class_nb_pos+1,1,CONCAT_WS(CONCAT(class_nb),CHAR(0),CHAR(0))); # # Get service(s) property # SET ca_dev_name = 'Empty'; CALL tango.obj_prop('CtrlSystem',ca_dev_name,res_str); IF ca_dev_name != 'Empty' THEN # # import control access service device # CALL tango.import_device(ca_dev_name,res_str); END IF; END proc| ######################################################### # # # IMPORT EVENT PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.import_event (IN ev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_ior TEXT; DECLARE tmp_version VARCHAR(8); DECLARE tmp_host VARCHAR(255); DECLARE tmp_ev_name VARCHAR(255); DECLARE tmp_ev_name_canon VARCHAR(255); DECLARE tmp_exp, tmp_pid, dot INT; DECLARE not_found INT DEFAULT 0; DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET tmp_ev_name = ev_name; SET tmp_ev_name = REPLACE(tmp_ev_name,'_','\_'); SELECT exported,ior,version,pid,host INTO tmp_exp,tmp_ior,tmp_version,tmp_pid,tmp_host FROM tango.event WHERE name = tmp_ev_name; IF not_found = 1 THEN SET dot = LOCATE('.',tmp_ev_name); IF dot != 0 THEN SET tmp_ev_name_canon = SUBSTRING(tmp_ev_name,1,dot - 1); SET not_found = 0; SELECT exported,ior,version,pid,host INTO tmp_exp,tmp_ior,tmp_version,tmp_pid,tmp_host FROM tango.event WHERE name = tmp_ev_name_canon; IF not_found = 1 THEN SET res_str = CONCAT_WS(CHAR(0),res_str,ev_name,'Not Found'); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,ev_name,tmp_ior,tmp_version,tmp_host,CONCAT(tmp_exp),CONCAT(tmp_pid)); END IF; ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,ev_name,'Not Found'); END IF; ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,ev_name,tmp_ior,tmp_version,tmp_host,CONCAT(tmp_exp),CONCAT(tmp_pid)); END IF; END | ######################################################### # # # IMPORT DEVICE PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.import_device (IN dev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA imp_proc: BEGIN DECLARE tmp_ior TEXT; DECLARE tmp_version VARCHAR(8); DECLARE tmp_host,tmp_server,tmp_class VARCHAR(255); DECLARE tmp_exp, tmp_pid INT; DECLARE not_found INT DEFAULT 0; DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SELECT exported,ior,version,pid,server,host,class INTO tmp_exp,tmp_ior,tmp_version,tmp_pid,tmp_server,tmp_host,tmp_class FROM tango.device WHERE name = dev_name; SET res_str = CONCAT_WS(CHAR(0),res_str,dev_name); IF not_found = 1 THEN SET res_str = CONCAT_WS(CHAR(0),res_str,'Not Found'); LEAVE imp_proc; END IF; IF tmp_ior IS NULL THEN SET res_str = CONCAT_WS(CHAR(0),res_str,''); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_ior); END IF; IF tmp_version IS NULL THEN SET res_str = CONCAT_WS(CHAR(0),res_str,''); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_version); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_server,tmp_host,CONCAT(tmp_exp)); IF tmp_pid IS NULL THEN SET res_str = CONCAT_WS(CHAR(0),res_str,''); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,CONCAT(tmp_pid)); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_class); END imp_proc | ######################################################### # # # GET CLASS PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.class_prop (IN class_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name VARCHAR(255); DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,prop_elt_nb INT DEFAULT 0; DECLARE class_name_pos,prop_name_pos INT; DECLARE cur_class CURSOR FOR SELECT name,count,value FROM tango.property_class WHERE class = class_name ORDER BY name,count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,class_name); SET class_name_pos = LENGTH(res_str); OPEN cur_class; REPEAT FETCH cur_class INTO tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_class; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,class_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | ######################################################### # # # GET DEVICE PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.dev_prop (IN dev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name VARCHAR(255); DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,prop_elt_nb INT DEFAULT 0; DECLARE dev_name_pos,prop_name_pos INT; DECLARE cur_dev CURSOR FOR SELECT name,count,value FROM tango.property_device WHERE device = dev_name ORDER BY name,count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,dev_name); SET dev_name_pos = LENGTH(res_str); OPEN cur_dev; REPEAT FETCH cur_dev INTO tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_dev; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,dev_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | ######################################################### # # # GET CLASS ATTRIBUTE PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.class_att_prop (IN class_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name,tmp_attribute VARCHAR(255); DECLARE known_att VARCHAR(255) DEFAULT ''; DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,att_nb,prop_elt_nb INT DEFAULT 0; DECLARE class_name_pos,att_name_pos,prop_name_pos INT; DECLARE cur_class_att_prop CURSOR FOR SELECT attribute,name,count,value FROM tango.property_attribute_class WHERE class = class_name ORDER BY attribute,name,count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,class_name); SET class_name_pos = LENGTH(res_str); OPEN cur_class_att_prop; REPEAT FETCH cur_class_att_prop INTO tmp_attribute,tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_attribute != known_att THEN IF prop_nb != 0 THEN SET res_str = INSERT(res_str,att_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); IF prop_nb < 10 THEN SET prop_name_pos = prop_name_pos + 2; ELSEIF prop_nb < 100 THEN SET prop_name_pos = prop_name_pos + 3; ELSE SET prop_name_pos = prop_name_pos + 4; END IF; END IF; SET known_att = tmp_attribute; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_attribute); SET att_name_pos = LENGTH(res_str); SET att_nb = att_nb + 1; SET prop_nb = 0; END IF; IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); IF prop_nb = 0 THEN IF prop_elt_nb < 10 THEN SET att_name_pos = att_name_pos + 2; ELSEIF prop_elt_nb < 100 THEN SET att_name_pos = att_name_pos + 3; ELSE SET att_name_pos = att_name_pos + 4; END IF; END IF; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_class_att_prop; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,att_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); IF prop_nb < 10 THEN SET prop_name_pos = prop_name_pos + 2; ELSEIF prop_nb < 100 THEN SET prop_name_pos = prop_name_pos + 3; ELSE SET prop_name_pos = prop_name_pos + 4; END IF; IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; END IF; IF att_nb != 0 THEN SET res_str = INSERT(res_str,class_name_pos+1,1,CONCAT_WS(CONCAT(att_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | ######################################################### # # # GET DEVICE ATTRIBUTE PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.dev_att_prop (IN dev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name,tmp_attribute VARCHAR(255); DECLARE known_att VARCHAR(255) DEFAULT ''; DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,att_nb,prop_elt_nb INT DEFAULT 0; DECLARE dev_name_pos,att_name_pos,prop_name_pos INT; DECLARE cur_dev_att_prop CURSOR FOR SELECT attribute,name,count,value FROM tango.property_attribute_device WHERE device = dev_name ORDER BY attribute,name,count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,dev_name); SET dev_name_pos = LENGTH(res_str); OPEN cur_dev_att_prop; REPEAT FETCH cur_dev_att_prop INTO tmp_attribute,tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_attribute != known_att THEN IF prop_nb != 0 THEN SET res_str = INSERT(res_str,att_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); IF prop_nb < 10 THEN SET prop_name_pos = prop_name_pos + 2; ELSEIF prop_nb < 100 THEN SET prop_name_pos = prop_name_pos + 3; ELSE SET prop_name_pos = prop_name_pos + 4; END IF; END IF; SET known_att = tmp_attribute; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_attribute); SET att_name_pos = LENGTH(res_str); SET att_nb = att_nb + 1; SET prop_nb = 0; END IF; IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); IF prop_nb = 0 THEN IF prop_elt_nb < 10 THEN SET att_name_pos = att_name_pos + 2; ELSEIF prop_elt_nb < 100 THEN SET att_name_pos = att_name_pos + 3; ELSE SET att_name_pos = att_name_pos + 4; END IF; END IF; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_dev_att_prop; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,att_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); IF prop_nb < 10 THEN SET prop_name_pos = prop_name_pos + 2; ELSEIF prop_nb < 100 THEN SET prop_name_pos = prop_name_pos + 3; ELSE SET prop_name_pos = prop_name_pos + 4; END IF; IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; END IF; IF att_nb != 0 THEN SET res_str = INSERT(res_str,dev_name_pos+1,1,CONCAT_WS(CONCAT(att_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | ######################################################### # # # GET DEVICE LIST PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.get_dev_list (IN class_name VARCHAR(255), IN serv VARCHAR(255), INOUT res_str BLOB, OUT d_list TEXT, OUT d_num INT) READS SQL DATA BEGIN DECLARE tmp_name VARCHAR(255); DECLARE done INT DEFAULT 0; DECLARE nb_dev INT DEFAULT 0; DECLARE class_name_pos INT; DECLARE cur_dev_list CURSOR FOR SELECT DISTINCT name FROM tango.device WHERE class = class_name AND server = serv ORDER BY name; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,class_name); SET class_name_pos = LENGTH(res_str); OPEN cur_dev_list; REPEAT FETCH cur_dev_list INTO tmp_name; IF NOT done THEN SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); IF nb_dev = 0 THEN SET d_list = CONCAT_WS("",d_list,tmp_name); ELSE SET d_list = CONCAT_WS(CHAR(0),d_list,tmp_name); END IF; SET nb_dev = nb_dev + 1; END IF; UNTIL done END REPEAT; CLOSE cur_dev_list; SET res_str = INSERT(res_str,class_name_pos+1,1,CONCAT_WS(CONCAT(nb_dev),CHAR(0),CHAR(0))); SET d_num = nb_dev; END | ######################################################### # # # GET OBJECT PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.obj_prop (IN obj_name VARCHAR(255),OUT serv_dev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name VARCHAR(255); DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,prop_elt_nb INT DEFAULT 0; DECLARE dev_name_pos,prop_name_pos INT; DECLARE serv_defined INT DEFAULT 0; DECLARE cur_dev CURSOR FOR SELECT name,count,value FROM tango.property WHERE object = obj_name ORDER BY name,count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,obj_name); SET dev_name_pos = LENGTH(res_str); OPEN cur_dev; REPEAT FETCH cur_dev INTO tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; IF tmp_name = 'Services' THEN SET serv_defined = 1; ELSE SET serv_defined = 0; END IF; END IF; IF serv_defined = 1 THEN IF LOCATE('AccessControl/tango:',tmp_value) != 0 THEN SET serv_dev_name = SUBSTRING(tmp_value,21); IF LOCATE('tango://',serv_dev_name) != 0 THEN SET serv_dev_name = SUBSTRING_INDEX(serv_dev_name,'/',-3); END IF; END IF; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_dev; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,dev_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | DELIMITER ; USE tango; # # Update entries in the property_class tables for controlled access service # INSERT INTO property_class VALUES('Database','AllowedAccessCmd',32,'DbImportEvent',NULL,NULL,NULL); INSERT INTO property_class VALUES('Database','AllowedAccessCmd',33,'DbGetDeviceAlias',NULL,NULL,NULL); INSERT INTO property_class VALUES('Database','AllowedAccessCmd',34,'DbGetCSDbServerList',NULL,NULL,NULL); debian/mysql/7.2.6+dfsg-10000664000000000000000000005150712167063434012025 0ustar DROP PROCEDURE IF EXISTS tango.ds_start; DROP PROCEDURE IF EXISTS tango.import_event; DROP PROCEDURE IF EXISTS tango.import_device; DROP PROCEDURE IF EXISTS tango.class_prop; DROP PROCEDURE IF EXISTS tango.dev_prop; DROP PROCEDURE IF EXISTS tango.class_att_prop; DROP PROCEDURE IF EXISTS tango.get_dev_list; DROP PROCEDURE IF EXISTS tango.dev_att_prop; DROP PROCEDURE IF EXISTS tango.obj_prop; ######################################################### # # # MAIN PROCEDURE # # # # Procedure input parameters: # # 1 - Device server name (executable/inst_name) # # 2 - Host name # # Procedure output parameters: # # 1 - A huge string with several elements and a # # separator set to 0 (binary 0) # # # ######################################################### # # If you change something in these procedures, do not forget # to also change the COMMENT part of the ds_start procedure # CREATE command # DELIMITER | CREATE PROCEDURE tango.ds_start (IN ds_name VARCHAR(255), IN host VARCHAR(255), OUT res_str BLOB) READS SQL DATA COMMENT 'release 1.4' proc: BEGIN DECLARE notifd_event_name VARCHAR(255) DEFAULT 'notifd/factory/'; DECLARE adm_dev_name VARCHAR(255) DEFAULT 'dserver/'; DECLARE done, dev_nb,class_nb INT DEFAULT 0; DECLARE tmp_class,d_name VARCHAR(255); DECLARE dev_list BLOB; DECLARE start,pos INT DEFAULT 1; DECLARE class_nb_pos INT; DECLARE ca_dev_name VARCHAR(255); DECLARE cur_class_list CURSOR FOR SELECT DISTINCT class FROM tango.device WHERE server = ds_name; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET adm_dev_name = CONCAT(adm_dev_name,ds_name); # # import admin device # CALL tango.import_device(adm_dev_name,res_str); IF LOCATE('Not Found',res_str) != 0 OR LOCATE('MySQL Error',res_str) != 0 THEN LEAVE proc; END IF; # # import event factory for notification service running on that host # SET notifd_event_name = CONCAT(notifd_event_name,host); CALL tango.import_event(notifd_event_name,res_str); SET done = 0; IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR during import_event procedure for event factory'; LEAVE proc; END IF; # # import event channel for this server # CALL tango.import_event(adm_dev_name,res_str); SET done = 0; IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR during import_event procedure for DS event channel'; LEAVE proc; END IF; # # Get all class properties for DServer class # CALL tango.class_prop('DServer',res_str); SET done = 0; IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting DServer class property(ies)'; LEAVE proc; END IF; # # Get all class properties for Default class # CALL tango.class_prop('Default',res_str); SET done = 0; IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting Default class property(ies)'; LEAVE proc; END IF; # # Get all device properties for admin device # CALL tango.dev_prop(adm_dev_name,res_str); SET done = 0; # # # SET res_str = CONCAT_WS(CHAR(0),res_str,ds_name); SET class_nb_pos = LENGTH(res_str); # # A loop for each class embedded within the server # OPEN cur_class_list; REPEAT FETCH cur_class_list INTO tmp_class; IF NOT done THEN IF tmp_class != 'dserver' THEN SET class_nb = class_nb + 1; CALL tango.class_prop(tmp_class,res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting DS class(es) property(ies)'; CLOSE cur_class_list; LEAVE proc; END IF; CALL tango.class_att_prop(tmp_class,res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting DS class(es) attribute(s) property(ies)'; CLOSE cur_class_list; LEAVE proc; END IF; CALL tango.get_dev_list(tmp_class,ds_name,res_str,dev_list,dev_nb); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting DS class(es) device list'; CLOSE cur_class_list; LEAVE proc; END IF; # # A loop for each device in the class # WHILE dev_nb > 0 DO SET pos = LOCATE(CHAR(0),dev_list,start); IF pos = 0 THEN SET d_name = SUBSTRING(dev_list,start); ELSE SET d_name = SUBSTRING(dev_list,start,pos-start); SET start = pos + 1; END IF; # select dev_list,d_name,pos,start; CALL tango.dev_prop(d_name,res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting device property(ies)'; CLOSE cur_class_list; LEAVE proc; END IF; CALL tango.dev_att_prop(d_name,res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting device attribute property(ies)'; CLOSE cur_class_list; LEAVE proc; END IF; SET dev_nb = dev_nb - 1; END WHILE; SET start = 1; END IF; END IF; UNTIL done END REPEAT; CLOSE cur_class_list; SET res_str = INSERT(res_str,class_nb_pos+1,1,CONCAT_WS(CONCAT(class_nb),CHAR(0),CHAR(0))); # # Get service(s) property # SET ca_dev_name = 'Empty'; CALL tango.obj_prop('CtrlSystem',ca_dev_name,res_str); IF ca_dev_name != 'Empty' THEN # # import control access service device # CALL tango.import_device(ca_dev_name,res_str); END IF; END proc| ######################################################### # # # IMPORT EVENT PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.import_event (IN ev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_ior TEXT; DECLARE tmp_version VARCHAR(8); DECLARE tmp_host VARCHAR(255); DECLARE tmp_ev_name VARCHAR(255); DECLARE tmp_exp, tmp_pid INT; DECLARE not_found INT DEFAULT 0; DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET tmp_ev_name = ev_name; SET tmp_ev_name = REPLACE(tmp_ev_name,'_','\_'); SELECT exported,ior,version,pid,host INTO tmp_exp,tmp_ior,tmp_version,tmp_pid,tmp_host FROM tango.event WHERE name = tmp_ev_name; IF not_found = 1 THEN SET res_str = CONCAT_WS(CHAR(0),res_str,ev_name,'Not Found'); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,ev_name,tmp_ior,tmp_version,tmp_host,CONCAT(tmp_exp),CONCAT(tmp_pid)); END IF; END | ######################################################### # # # IMPORT DEVICE PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.import_device (IN dev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA imp_proc: BEGIN DECLARE tmp_ior TEXT; DECLARE tmp_version VARCHAR(8); DECLARE tmp_host,tmp_server,tmp_class VARCHAR(255); DECLARE tmp_exp, tmp_pid INT; DECLARE not_found INT DEFAULT 0; DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SELECT exported,ior,version,pid,server,host,class INTO tmp_exp,tmp_ior,tmp_version,tmp_pid,tmp_server,tmp_host,tmp_class FROM tango.device WHERE name = dev_name; SET res_str = CONCAT_WS(CHAR(0),res_str,dev_name); IF not_found = 1 THEN SET res_str = CONCAT_WS(CHAR(0),res_str,'Not Found'); LEAVE imp_proc; END IF; IF tmp_ior IS NULL THEN SET res_str = CONCAT_WS(CHAR(0),res_str,''); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_ior); END IF; IF tmp_version IS NULL THEN SET res_str = CONCAT_WS(CHAR(0),res_str,''); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_version); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_server,tmp_host,CONCAT(tmp_exp)); IF tmp_pid IS NULL THEN SET res_str = CONCAT_WS(CHAR(0),res_str,''); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,CONCAT(tmp_pid)); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_class); END imp_proc | ######################################################### # # # GET CLASS PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.class_prop (IN class_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name VARCHAR(255); DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,prop_elt_nb INT DEFAULT 0; DECLARE class_name_pos,prop_name_pos INT; DECLARE cur_class CURSOR FOR SELECT name,count,value FROM tango.property_class WHERE class = class_name ORDER BY name,count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,class_name); SET class_name_pos = LENGTH(res_str); OPEN cur_class; REPEAT FETCH cur_class INTO tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_class; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,class_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | ######################################################### # # # GET DEVICE PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.dev_prop (IN dev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name VARCHAR(255); DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,prop_elt_nb INT DEFAULT 0; DECLARE dev_name_pos,prop_name_pos INT; DECLARE cur_dev CURSOR FOR SELECT name,count,value FROM tango.property_device WHERE device = dev_name ORDER BY name,count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,dev_name); SET dev_name_pos = LENGTH(res_str); OPEN cur_dev; REPEAT FETCH cur_dev INTO tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_dev; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,dev_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | ######################################################### # # # GET CLASS ATTRIBUTE PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.class_att_prop (IN class_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name,tmp_attribute VARCHAR(255); DECLARE known_att VARCHAR(255) DEFAULT ''; DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,att_nb,prop_elt_nb INT DEFAULT 0; DECLARE class_name_pos,att_name_pos,prop_name_pos INT; DECLARE cur_class_att_prop CURSOR FOR SELECT attribute,name,count,value FROM tango.property_attribute_class WHERE class = class_name ORDER BY attribute,name,count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,class_name); SET class_name_pos = LENGTH(res_str); OPEN cur_class_att_prop; REPEAT FETCH cur_class_att_prop INTO tmp_attribute,tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_attribute != known_att THEN IF prop_nb != 0 THEN SET res_str = INSERT(res_str,att_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); IF prop_nb < 10 THEN SET prop_name_pos = prop_name_pos + 2; ELSEIF prop_nb < 100 THEN SET prop_name_pos = prop_name_pos + 3; ELSE SET prop_name_pos = prop_name_pos + 4; END IF; END IF; SET known_att = tmp_attribute; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_attribute); SET att_name_pos = LENGTH(res_str); SET att_nb = att_nb + 1; SET prop_nb = 0; END IF; IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); IF prop_nb = 0 THEN IF prop_elt_nb < 10 THEN SET att_name_pos = att_name_pos + 2; ELSEIF prop_elt_nb < 100 THEN SET att_name_pos = att_name_pos + 3; ELSE SET att_name_pos = att_name_pos + 4; END IF; END IF; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_class_att_prop; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,att_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); IF prop_nb < 10 THEN SET prop_name_pos = prop_name_pos + 2; ELSEIF prop_nb < 100 THEN SET prop_name_pos = prop_name_pos + 3; ELSE SET prop_name_pos = prop_name_pos + 4; END IF; IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; END IF; IF att_nb != 0 THEN SET res_str = INSERT(res_str,class_name_pos+1,1,CONCAT_WS(CONCAT(att_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | ######################################################### # # # GET DEVICE ATTRIBUTE PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.dev_att_prop (IN dev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name,tmp_attribute VARCHAR(255); DECLARE known_att VARCHAR(255) DEFAULT ''; DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,att_nb,prop_elt_nb INT DEFAULT 0; DECLARE dev_name_pos,att_name_pos,prop_name_pos INT; DECLARE cur_dev_att_prop CURSOR FOR SELECT attribute,name,count,value FROM tango.property_attribute_device WHERE device = dev_name ORDER BY attribute,name,count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,dev_name); SET dev_name_pos = LENGTH(res_str); OPEN cur_dev_att_prop; REPEAT FETCH cur_dev_att_prop INTO tmp_attribute,tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_attribute != known_att THEN IF prop_nb != 0 THEN SET res_str = INSERT(res_str,att_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); IF prop_nb < 10 THEN SET prop_name_pos = prop_name_pos + 2; ELSEIF prop_nb < 100 THEN SET prop_name_pos = prop_name_pos + 3; ELSE SET prop_name_pos = prop_name_pos + 4; END IF; END IF; SET known_att = tmp_attribute; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_attribute); SET att_name_pos = LENGTH(res_str); SET att_nb = att_nb + 1; SET prop_nb = 0; END IF; IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); IF prop_nb = 0 THEN IF prop_elt_nb < 10 THEN SET att_name_pos = att_name_pos + 2; ELSEIF prop_elt_nb < 100 THEN SET att_name_pos = att_name_pos + 3; ELSE SET att_name_pos = att_name_pos + 4; END IF; END IF; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_dev_att_prop; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,att_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); IF prop_nb < 10 THEN SET prop_name_pos = prop_name_pos + 2; ELSEIF prop_nb < 100 THEN SET prop_name_pos = prop_name_pos + 3; ELSE SET prop_name_pos = prop_name_pos + 4; END IF; IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; END IF; IF att_nb != 0 THEN SET res_str = INSERT(res_str,dev_name_pos+1,1,CONCAT_WS(CONCAT(att_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | ######################################################### # # # GET DEVICE LIST PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.get_dev_list (IN class_name VARCHAR(255), IN serv VARCHAR(255), INOUT res_str BLOB, OUT d_list TEXT, OUT d_num INT) READS SQL DATA BEGIN DECLARE tmp_name VARCHAR(255); DECLARE done INT DEFAULT 0; DECLARE nb_dev INT DEFAULT 0; DECLARE class_name_pos INT; DECLARE cur_dev_list CURSOR FOR SELECT name FROM tango.device WHERE class = class_name AND server = serv; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,class_name); SET class_name_pos = LENGTH(res_str); OPEN cur_dev_list; REPEAT FETCH cur_dev_list INTO tmp_name; IF NOT done THEN SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); IF nb_dev = 0 THEN SET d_list = CONCAT_WS("",d_list,tmp_name); ELSE SET d_list = CONCAT_WS(CHAR(0),d_list,tmp_name); END IF; SET nb_dev = nb_dev + 1; END IF; UNTIL done END REPEAT; CLOSE cur_dev_list; SET res_str = INSERT(res_str,class_name_pos+1,1,CONCAT_WS(CONCAT(nb_dev),CHAR(0),CHAR(0))); SET d_num = nb_dev; END | ######################################################### # # # GET OBJECT PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.obj_prop (IN obj_name VARCHAR(255),OUT serv_dev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name VARCHAR(255); DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,prop_elt_nb INT DEFAULT 0; DECLARE dev_name_pos,prop_name_pos INT; DECLARE serv_defined INT DEFAULT 0; DECLARE cur_dev CURSOR FOR SELECT name,count,value FROM tango.property WHERE object = obj_name ORDER BY count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,obj_name); SET dev_name_pos = LENGTH(res_str); OPEN cur_dev; REPEAT FETCH cur_dev INTO tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; IF tmp_name = 'Services' THEN SET serv_defined = 1; ELSE SET serv_defined = 0; END IF; END IF; IF serv_defined = 1 THEN IF LOCATE('AccessControl/tango:',tmp_value) != 0 THEN SET serv_dev_name = SUBSTRING(tmp_value,21); END IF; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_dev; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,dev_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | DELIMITER ; debian/mysql/8.1.2+dfsg-10000664000000000000000000005353412241203261012006 0ustar DROP PROCEDURE IF EXISTS tango.ds_start; DROP PROCEDURE IF EXISTS tango.import_event; DROP PROCEDURE IF EXISTS tango.import_device; DROP PROCEDURE IF EXISTS tango.class_prop; DROP PROCEDURE IF EXISTS tango.dev_prop; DROP PROCEDURE IF EXISTS tango.class_att_prop; DROP PROCEDURE IF EXISTS tango.get_dev_list; DROP PROCEDURE IF EXISTS tango.dev_att_prop; DROP PROCEDURE IF EXISTS tango.obj_prop; ######################################################### # # # MAIN PROCEDURE # # # # Procedure input parameters: # # 1 - Device server name (executable/inst_name) # # 2 - Host name # # Procedure output parameters: # # 1 - A huge string with several elements and a # # separator set to 0 (binary 0) # # # ######################################################### # # If you change something in these procedures, do not forget # to also change the COMMENT part of the ds_start procedure # CREATE command # DELIMITER | CREATE PROCEDURE tango.ds_start (IN ds_name VARCHAR(255), IN host VARCHAR(255), OUT res_str BLOB) READS SQL DATA COMMENT 'release 1.8' proc: BEGIN DECLARE notifd_event_name VARCHAR(255) DEFAULT 'notifd/factory/'; DECLARE adm_dev_name VARCHAR(255) DEFAULT 'dserver/'; DECLARE done, dev_nb,class_nb INT DEFAULT 0; DECLARE tmp_class,d_name VARCHAR(255); DECLARE dev_list BLOB; DECLARE start,pos INT DEFAULT 1; DECLARE class_nb_pos INT; DECLARE ca_dev_name VARCHAR(255); DECLARE cur_class_list CURSOR FOR SELECT DISTINCT class FROM tango.device WHERE server = ds_name; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET adm_dev_name = CONCAT(adm_dev_name,ds_name); # # import admin device # CALL tango.import_device(adm_dev_name,res_str); IF LOCATE('Not Found',res_str) != 0 OR LOCATE('MySQL Error',res_str) != 0 THEN LEAVE proc; END IF; # # import event factory for notification service running on that host # SET notifd_event_name = CONCAT(notifd_event_name,host); CALL tango.import_event(notifd_event_name,res_str); SET done = 0; IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR during import_event procedure for event factory'; LEAVE proc; END IF; # # import event channel for this server # CALL tango.import_event(adm_dev_name,res_str); SET done = 0; IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR during import_event procedure for DS event channel'; LEAVE proc; END IF; # # Get all class properties for DServer class # CALL tango.class_prop('DServer',res_str); SET done = 0; IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting DServer class property(ies)'; LEAVE proc; END IF; # # Get all class properties for Default class # CALL tango.class_prop('Default',res_str); SET done = 0; IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting Default class property(ies)'; LEAVE proc; END IF; # # Get all device properties for admin device # CALL tango.dev_prop(adm_dev_name,res_str); SET done = 0; # # # SET res_str = CONCAT_WS(CHAR(0),res_str,ds_name); SET class_nb_pos = LENGTH(res_str); # # A loop for each class embedded within the server # OPEN cur_class_list; REPEAT FETCH cur_class_list INTO tmp_class; IF NOT done THEN IF tmp_class != 'dserver' THEN SET class_nb = class_nb + 1; CALL tango.class_prop(tmp_class,res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting DS class(es) property(ies)'; CLOSE cur_class_list; LEAVE proc; END IF; CALL tango.class_att_prop(tmp_class,res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting DS class(es) attribute(s) property(ies)'; CLOSE cur_class_list; LEAVE proc; END IF; CALL tango.get_dev_list(tmp_class,ds_name,res_str,dev_list,dev_nb); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting DS class(es) device list'; CLOSE cur_class_list; LEAVE proc; END IF; # # A loop for each device in the class # WHILE dev_nb > 0 DO SET pos = LOCATE(CHAR(0),dev_list,start); IF pos = 0 THEN SET d_name = SUBSTRING(dev_list,start); ELSE SET d_name = SUBSTRING(dev_list,start,pos-start); SET start = pos + 1; END IF; # select dev_list,d_name,pos,start; CALL tango.dev_prop(d_name,res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting device property(ies)'; CLOSE cur_class_list; LEAVE proc; END IF; CALL tango.dev_att_prop(d_name,res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting device attribute property(ies)'; CLOSE cur_class_list; LEAVE proc; END IF; SET dev_nb = dev_nb - 1; END WHILE; SET start = 1; END IF; END IF; UNTIL done END REPEAT; CLOSE cur_class_list; SET res_str = INSERT(res_str,class_nb_pos+1,1,CONCAT_WS(CONCAT(class_nb),CHAR(0),CHAR(0))); # # Get service(s) property # SET ca_dev_name = 'Empty'; CALL tango.obj_prop('CtrlSystem',ca_dev_name,res_str); IF ca_dev_name != 'Empty' THEN # # import control access service device # CALL tango.import_device(ca_dev_name,res_str); END IF; END proc| ######################################################### # # # IMPORT EVENT PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.import_event (IN ev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_ior TEXT; DECLARE tmp_version VARCHAR(8); DECLARE tmp_host VARCHAR(255); DECLARE tmp_ev_name VARCHAR(255); DECLARE tmp_ev_name_canon VARCHAR(255); DECLARE tmp_exp, tmp_pid, dot INT; DECLARE not_found INT DEFAULT 0; DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET tmp_ev_name = ev_name; SET tmp_ev_name = REPLACE(tmp_ev_name,'_','\_'); SELECT exported,ior,version,pid,host INTO tmp_exp,tmp_ior,tmp_version,tmp_pid,tmp_host FROM tango.event WHERE name = tmp_ev_name; IF not_found = 1 THEN SET dot = LOCATE('.',tmp_ev_name); IF dot != 0 THEN SET tmp_ev_name_canon = SUBSTRING(tmp_ev_name,1,dot - 1); SET not_found = 0; SELECT exported,ior,version,pid,host INTO tmp_exp,tmp_ior,tmp_version,tmp_pid,tmp_host FROM tango.event WHERE name = tmp_ev_name_canon; IF not_found = 1 THEN SET res_str = CONCAT_WS(CHAR(0),res_str,ev_name,'Not Found'); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,ev_name,tmp_ior,tmp_version,tmp_host,CONCAT(tmp_exp),CONCAT(tmp_pid)); END IF; ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,ev_name,'Not Found'); END IF; ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,ev_name,tmp_ior,tmp_version,tmp_host,CONCAT(tmp_exp),CONCAT(tmp_pid)); END IF; END | ######################################################### # # # IMPORT DEVICE PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.import_device (IN dev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA imp_proc: BEGIN DECLARE tmp_ior TEXT; DECLARE tmp_version VARCHAR(8); DECLARE tmp_host,tmp_server,tmp_class VARCHAR(255); DECLARE tmp_exp, tmp_pid INT; DECLARE not_found INT DEFAULT 0; DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SELECT exported,ior,version,pid,server,host,class INTO tmp_exp,tmp_ior,tmp_version,tmp_pid,tmp_server,tmp_host,tmp_class FROM tango.device WHERE name = dev_name; SET res_str = CONCAT_WS(CHAR(0),res_str,dev_name); IF not_found = 1 THEN SET res_str = CONCAT_WS(CHAR(0),res_str,'Not Found'); LEAVE imp_proc; END IF; IF tmp_ior IS NULL THEN SET res_str = CONCAT_WS(CHAR(0),res_str,''); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_ior); END IF; IF tmp_version IS NULL THEN SET res_str = CONCAT_WS(CHAR(0),res_str,''); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_version); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_server,tmp_host,CONCAT(tmp_exp)); IF tmp_pid IS NULL THEN SET res_str = CONCAT_WS(CHAR(0),res_str,''); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,CONCAT(tmp_pid)); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_class); END imp_proc | ######################################################### # # # GET CLASS PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.class_prop (IN class_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name VARCHAR(255); DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,prop_elt_nb INT DEFAULT 0; DECLARE class_name_pos,prop_name_pos INT; DECLARE cur_class CURSOR FOR SELECT name,count,value FROM tango.property_class WHERE class = class_name ORDER BY name,count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,class_name); SET class_name_pos = LENGTH(res_str); OPEN cur_class; REPEAT FETCH cur_class INTO tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_class; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,class_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | ######################################################### # # # GET DEVICE PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.dev_prop (IN dev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name VARCHAR(255); DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,prop_elt_nb INT DEFAULT 0; DECLARE dev_name_pos,prop_name_pos INT; DECLARE cur_dev CURSOR FOR SELECT name,count,value FROM tango.property_device WHERE device = dev_name ORDER BY name,count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,dev_name); SET dev_name_pos = LENGTH(res_str); OPEN cur_dev; REPEAT FETCH cur_dev INTO tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_dev; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,dev_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | ######################################################### # # # GET CLASS ATTRIBUTE PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.class_att_prop (IN class_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name,tmp_attribute VARCHAR(255); DECLARE known_att VARCHAR(255) DEFAULT ''; DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,att_nb,prop_elt_nb INT DEFAULT 0; DECLARE class_name_pos,att_name_pos,prop_name_pos INT; DECLARE cur_class_att_prop CURSOR FOR SELECT attribute,name,count,value FROM tango.property_attribute_class WHERE class = class_name ORDER BY attribute,name,count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,class_name); SET class_name_pos = LENGTH(res_str); OPEN cur_class_att_prop; REPEAT FETCH cur_class_att_prop INTO tmp_attribute,tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_attribute != known_att THEN IF prop_nb != 0 THEN SET res_str = INSERT(res_str,att_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); IF prop_nb < 10 THEN SET prop_name_pos = prop_name_pos + 2; ELSEIF prop_nb < 100 THEN SET prop_name_pos = prop_name_pos + 3; ELSE SET prop_name_pos = prop_name_pos + 4; END IF; END IF; SET known_att = tmp_attribute; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_attribute); SET att_name_pos = LENGTH(res_str); SET att_nb = att_nb + 1; SET prop_nb = 0; END IF; IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); IF prop_nb = 0 THEN IF prop_elt_nb < 10 THEN SET att_name_pos = att_name_pos + 2; ELSEIF prop_elt_nb < 100 THEN SET att_name_pos = att_name_pos + 3; ELSE SET att_name_pos = att_name_pos + 4; END IF; END IF; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_class_att_prop; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,att_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); IF prop_nb < 10 THEN SET prop_name_pos = prop_name_pos + 2; ELSEIF prop_nb < 100 THEN SET prop_name_pos = prop_name_pos + 3; ELSE SET prop_name_pos = prop_name_pos + 4; END IF; IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; END IF; IF att_nb != 0 THEN SET res_str = INSERT(res_str,class_name_pos+1,1,CONCAT_WS(CONCAT(att_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | ######################################################### # # # GET DEVICE ATTRIBUTE PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.dev_att_prop (IN dev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name,tmp_attribute VARCHAR(255); DECLARE known_att VARCHAR(255) DEFAULT ''; DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,att_nb,prop_elt_nb INT DEFAULT 0; DECLARE dev_name_pos,att_name_pos,prop_name_pos INT; DECLARE cur_dev_att_prop CURSOR FOR SELECT attribute,name,count,value FROM tango.property_attribute_device WHERE device = dev_name ORDER BY attribute,name,count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,dev_name); SET dev_name_pos = LENGTH(res_str); OPEN cur_dev_att_prop; REPEAT FETCH cur_dev_att_prop INTO tmp_attribute,tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_attribute != known_att THEN IF prop_nb != 0 THEN SET res_str = INSERT(res_str,att_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); IF prop_nb < 10 THEN SET prop_name_pos = prop_name_pos + 2; ELSEIF prop_nb < 100 THEN SET prop_name_pos = prop_name_pos + 3; ELSE SET prop_name_pos = prop_name_pos + 4; END IF; END IF; SET known_att = tmp_attribute; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_attribute); SET att_name_pos = LENGTH(res_str); SET att_nb = att_nb + 1; SET prop_nb = 0; END IF; IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); IF prop_nb = 0 THEN IF prop_elt_nb < 10 THEN SET att_name_pos = att_name_pos + 2; ELSEIF prop_elt_nb < 100 THEN SET att_name_pos = att_name_pos + 3; ELSE SET att_name_pos = att_name_pos + 4; END IF; END IF; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_dev_att_prop; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,att_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); IF prop_nb < 10 THEN SET prop_name_pos = prop_name_pos + 2; ELSEIF prop_nb < 100 THEN SET prop_name_pos = prop_name_pos + 3; ELSE SET prop_name_pos = prop_name_pos + 4; END IF; IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; END IF; IF att_nb != 0 THEN SET res_str = INSERT(res_str,dev_name_pos+1,1,CONCAT_WS(CONCAT(att_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | ######################################################### # # # GET DEVICE LIST PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.get_dev_list (IN class_name VARCHAR(255), IN serv VARCHAR(255), INOUT res_str BLOB, OUT d_list TEXT, OUT d_num INT) READS SQL DATA BEGIN DECLARE tmp_name VARCHAR(255); DECLARE done INT DEFAULT 0; DECLARE nb_dev INT DEFAULT 0; DECLARE class_name_pos INT; DECLARE cur_dev_list CURSOR FOR SELECT DISTINCT name FROM tango.device WHERE class = class_name AND server = serv ORDER BY name; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,class_name); SET class_name_pos = LENGTH(res_str); OPEN cur_dev_list; REPEAT FETCH cur_dev_list INTO tmp_name; IF NOT done THEN SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); IF nb_dev = 0 THEN SET d_list = CONCAT_WS("",d_list,tmp_name); ELSE SET d_list = CONCAT_WS(CHAR(0),d_list,tmp_name); END IF; SET nb_dev = nb_dev + 1; END IF; UNTIL done END REPEAT; CLOSE cur_dev_list; SET res_str = INSERT(res_str,class_name_pos+1,1,CONCAT_WS(CONCAT(nb_dev),CHAR(0),CHAR(0))); SET d_num = nb_dev; END | ######################################################### # # # GET OBJECT PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.obj_prop (IN obj_name VARCHAR(255),OUT serv_dev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name VARCHAR(255); DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,prop_elt_nb INT DEFAULT 0; DECLARE dev_name_pos,prop_name_pos INT; DECLARE serv_defined INT DEFAULT 0; DECLARE cur_dev CURSOR FOR SELECT name,count,value FROM tango.property WHERE object = obj_name ORDER BY name,count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,obj_name); SET dev_name_pos = LENGTH(res_str); OPEN cur_dev; REPEAT FETCH cur_dev INTO tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; IF tmp_name = 'Services' THEN SET serv_defined = 1; ELSE SET serv_defined = 0; END IF; END IF; IF serv_defined = 1 THEN IF LOCATE('AccessControl/tango:',tmp_value) != 0 THEN SET serv_dev_name = SUBSTRING(tmp_value,21); IF LOCATE('tango://',serv_dev_name) != 0 THEN SET serv_dev_name = SUBSTRING_INDEX(serv_dev_name,'/',-3); END IF; END IF; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_dev; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,dev_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | DELIMITER ; USE tango; # # Update entries in the property_class tables for controlled access service # INSERT INTO property_class VALUES('DServer','AllowedAccessCmd',10,'ZMQEventSubscriptionChange',NULL,NULL,NULL); INSERT INTO property_class VALUES('Starter','AllowedAccessCmd',5,'UpdateServerList',NULL,NULL,NULL); debian/mysql/7.2.0~rc1+dfsg-10000664000000000000000000005137212167063434012623 0ustar DROP PROCEDURE IF EXISTS tango.ds_start; DROP PROCEDURE IF EXISTS tango.import_event; DROP PROCEDURE IF EXISTS tango.import_device; DROP PROCEDURE IF EXISTS tango.class_prop; DROP PROCEDURE IF EXISTS tango.dev_prop; DROP PROCEDURE IF EXISTS tango.class_att_prop; DROP PROCEDURE IF EXISTS tango.get_dev_list; DROP PROCEDURE IF EXISTS tango.dev_att_prop; DROP PROCEDURE IF EXISTS tango.obj_prop; ######################################################### # # # MAIN PROCEDURE # # # # Procedure input parameters: # # 1 - Device server name (executable/inst_name) # # 2 - Host name # # Procedure output parameters: # # 1 - A huge string with several elements and a # # separator set to 0 (binary 0) # # # ######################################################### # # If you change something in these procedures, do not forget # to also change the COMMENT part of the ds_start procedure # CREATE command # DELIMITER | CREATE PROCEDURE tango.ds_start (IN ds_name VARCHAR(255), IN host VARCHAR(255), OUT res_str BLOB) READS SQL DATA COMMENT 'release 1.3' proc: BEGIN DECLARE notifd_event_name VARCHAR(255) DEFAULT 'notifd/factory/'; DECLARE adm_dev_name VARCHAR(255) DEFAULT 'dserver/'; DECLARE done, dev_nb,class_nb INT DEFAULT 0; DECLARE tmp_class,d_name VARCHAR(255); DECLARE dev_list BLOB; DECLARE start,pos INT DEFAULT 1; DECLARE class_nb_pos INT; DECLARE ca_dev_name VARCHAR(255); DECLARE cur_class_list CURSOR FOR SELECT DISTINCT class FROM tango.device WHERE server = ds_name; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET adm_dev_name = CONCAT(adm_dev_name,ds_name); # # import admin device # CALL tango.import_device(adm_dev_name,res_str); IF LOCATE('Not Found',res_str) != 0 OR LOCATE('MySQL Error',res_str) != 0 THEN LEAVE proc; END IF; # # import event factory for notification service running on that host # SET notifd_event_name = CONCAT(notifd_event_name,host); CALL tango.import_event(notifd_event_name,res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR during import_event procedure for event factory'; LEAVE proc; END IF; # # import event channel for this server # CALL tango.import_event(adm_dev_name,res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR during import_event procedure for DS event channel'; LEAVE proc; END IF; # # Get all class properties for DServer class # CALL tango.class_prop('DServer',res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting DServer class property(ies)'; LEAVE proc; END IF; # # Get all class properties for Default class # CALL tango.class_prop('Default',res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting Default class property(ies)'; LEAVE proc; END IF; # # Get all device properties for admin device # CALL tango.dev_prop(adm_dev_name,res_str); # # # SET res_str = CONCAT_WS(CHAR(0),res_str,ds_name); SET class_nb_pos = LENGTH(res_str); # # A loop for each class embedded within the server # OPEN cur_class_list; REPEAT FETCH cur_class_list INTO tmp_class; IF NOT done THEN IF tmp_class != 'dserver' THEN SET class_nb = class_nb + 1; CALL tango.class_prop(tmp_class,res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting DS class(es) property(ies)'; CLOSE cur_class_list; LEAVE proc; END IF; CALL tango.class_att_prop(tmp_class,res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting DS class(es) attribute(s) property(ies)'; CLOSE cur_class_list; LEAVE proc; END IF; CALL tango.get_dev_list(tmp_class,ds_name,res_str,dev_list,dev_nb); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting DS class(es) device list'; CLOSE cur_class_list; LEAVE proc; END IF; # # A loop for each device in the class # WHILE dev_nb > 0 DO SET pos = LOCATE(CHAR(0),dev_list,start); IF pos = 0 THEN SET d_name = SUBSTRING(dev_list,start); ELSE SET d_name = SUBSTRING(dev_list,start,pos-start); SET start = pos + 1; END IF; # select dev_list,d_name,pos,start; CALL tango.dev_prop(d_name,res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting device property(ies)'; CLOSE cur_class_list; LEAVE proc; END IF; CALL tango.dev_att_prop(d_name,res_str); IF LOCATE('MySQL Error',res_str) != 0 THEN SET res_str = 'MySQL ERROR while getting device attribute property(ies)'; CLOSE cur_class_list; LEAVE proc; END IF; SET dev_nb = dev_nb - 1; END WHILE; SET start = 1; END IF; END IF; UNTIL done END REPEAT; CLOSE cur_class_list; SET res_str = INSERT(res_str,class_nb_pos+1,1,CONCAT_WS(CONCAT(class_nb),CHAR(0),CHAR(0))); # # Get service(s) property # SET ca_dev_name = 'Empty'; CALL tango.obj_prop('CtrlSystem',ca_dev_name,res_str); IF ca_dev_name != 'Empty' THEN # # import control access service device # CALL tango.import_device(ca_dev_name,res_str); END IF; END proc| ######################################################### # # # IMPORT EVENT PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.import_event (IN ev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_ior TEXT; DECLARE tmp_version VARCHAR(8); DECLARE tmp_host VARCHAR(255); DECLARE tmp_ev_name VARCHAR(255); DECLARE tmp_exp, tmp_pid INT; DECLARE not_found INT DEFAULT 0; DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET tmp_ev_name = ev_name; SET tmp_ev_name = REPLACE(tmp_ev_name,'_','\_'); SELECT exported,ior,version,pid,host INTO tmp_exp,tmp_ior,tmp_version,tmp_pid,tmp_host FROM tango.event WHERE name = tmp_ev_name; IF not_found = 1 THEN SET res_str = CONCAT_WS(CHAR(0),res_str,ev_name,'Not Found'); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,ev_name,tmp_ior,tmp_version,tmp_host,CONCAT(tmp_exp),CONCAT(tmp_pid)); END IF; END | ######################################################### # # # IMPORT DEVICE PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.import_device (IN dev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA imp_proc: BEGIN DECLARE tmp_ior TEXT; DECLARE tmp_version VARCHAR(8); DECLARE tmp_host,tmp_server,tmp_class VARCHAR(255); DECLARE tmp_exp, tmp_pid INT; DECLARE not_found INT DEFAULT 0; DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SELECT exported,ior,version,pid,server,host,class INTO tmp_exp,tmp_ior,tmp_version,tmp_pid,tmp_server,tmp_host,tmp_class FROM tango.device WHERE name = dev_name; SET res_str = CONCAT_WS(CHAR(0),res_str,dev_name); IF not_found = 1 THEN SET res_str = CONCAT_WS(CHAR(0),res_str,'Not Found'); LEAVE imp_proc; END IF; IF tmp_ior IS NULL THEN SET res_str = CONCAT_WS(CHAR(0),res_str,''); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_ior); END IF; IF tmp_version IS NULL THEN SET res_str = CONCAT_WS(CHAR(0),res_str,''); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_version); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_server,tmp_host,CONCAT(tmp_exp)); IF tmp_pid IS NULL THEN SET res_str = CONCAT_WS(CHAR(0),res_str,''); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,CONCAT(tmp_pid)); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_class); END imp_proc | ######################################################### # # # GET CLASS PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.class_prop (IN class_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name VARCHAR(255); DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,prop_elt_nb INT DEFAULT 0; DECLARE class_name_pos,prop_name_pos INT; DECLARE cur_class CURSOR FOR SELECT name,count,value FROM tango.property_class WHERE class = class_name ORDER BY name,count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,class_name); SET class_name_pos = LENGTH(res_str); OPEN cur_class; REPEAT FETCH cur_class INTO tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_class; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,class_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | ######################################################### # # # GET DEVICE PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.dev_prop (IN dev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name VARCHAR(255); DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,prop_elt_nb INT DEFAULT 0; DECLARE dev_name_pos,prop_name_pos INT; DECLARE cur_dev CURSOR FOR SELECT name,count,value FROM tango.property_device WHERE device = dev_name ORDER BY name,count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,dev_name); SET dev_name_pos = LENGTH(res_str); OPEN cur_dev; REPEAT FETCH cur_dev INTO tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_dev; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,dev_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | ######################################################### # # # GET CLASS ATTRIBUTE PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.class_att_prop (IN class_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name,tmp_attribute VARCHAR(255); DECLARE known_att VARCHAR(255) DEFAULT ''; DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,att_nb,prop_elt_nb INT DEFAULT 0; DECLARE class_name_pos,att_name_pos,prop_name_pos INT; DECLARE cur_class_att_prop CURSOR FOR SELECT attribute,name,count,value FROM tango.property_attribute_class WHERE class = class_name ORDER BY attribute,name,count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,class_name); SET class_name_pos = LENGTH(res_str); OPEN cur_class_att_prop; REPEAT FETCH cur_class_att_prop INTO tmp_attribute,tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_attribute != known_att THEN IF prop_nb != 0 THEN SET res_str = INSERT(res_str,att_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); IF prop_nb < 10 THEN SET prop_name_pos = prop_name_pos + 2; ELSEIF prop_nb < 100 THEN SET prop_name_pos = prop_name_pos + 3; ELSE SET prop_name_pos = prop_name_pos + 4; END IF; END IF; SET known_att = tmp_attribute; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_attribute); SET att_name_pos = LENGTH(res_str); SET att_nb = att_nb + 1; SET prop_nb = 0; END IF; IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); IF prop_nb = 0 THEN IF prop_elt_nb < 10 THEN SET att_name_pos = att_name_pos + 2; ELSEIF prop_elt_nb < 100 THEN SET att_name_pos = att_name_pos + 3; ELSE SET att_name_pos = att_name_pos + 4; END IF; END IF; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_class_att_prop; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,att_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); IF prop_nb < 10 THEN SET prop_name_pos = prop_name_pos + 2; ELSEIF prop_nb < 100 THEN SET prop_name_pos = prop_name_pos + 3; ELSE SET prop_name_pos = prop_name_pos + 4; END IF; IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; END IF; IF att_nb != 0 THEN SET res_str = INSERT(res_str,class_name_pos+1,1,CONCAT_WS(CONCAT(att_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | ######################################################### # # # GET DEVICE ATTRIBUTE PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.dev_att_prop (IN dev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name,tmp_attribute VARCHAR(255); DECLARE known_att VARCHAR(255) DEFAULT ''; DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,att_nb,prop_elt_nb INT DEFAULT 0; DECLARE dev_name_pos,att_name_pos,prop_name_pos INT; DECLARE cur_dev_att_prop CURSOR FOR SELECT attribute,name,count,value FROM tango.property_attribute_device WHERE device = dev_name ORDER BY attribute,name,count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,dev_name); SET dev_name_pos = LENGTH(res_str); OPEN cur_dev_att_prop; REPEAT FETCH cur_dev_att_prop INTO tmp_attribute,tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_attribute != known_att THEN IF prop_nb != 0 THEN SET res_str = INSERT(res_str,att_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); IF prop_nb < 10 THEN SET prop_name_pos = prop_name_pos + 2; ELSEIF prop_nb < 100 THEN SET prop_name_pos = prop_name_pos + 3; ELSE SET prop_name_pos = prop_name_pos + 4; END IF; END IF; SET known_att = tmp_attribute; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_attribute); SET att_name_pos = LENGTH(res_str); SET att_nb = att_nb + 1; SET prop_nb = 0; END IF; IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); IF prop_nb = 0 THEN IF prop_elt_nb < 10 THEN SET att_name_pos = att_name_pos + 2; ELSEIF prop_elt_nb < 100 THEN SET att_name_pos = att_name_pos + 3; ELSE SET att_name_pos = att_name_pos + 4; END IF; END IF; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_dev_att_prop; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,att_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); IF prop_nb < 10 THEN SET prop_name_pos = prop_name_pos + 2; ELSEIF prop_nb < 100 THEN SET prop_name_pos = prop_name_pos + 3; ELSE SET prop_name_pos = prop_name_pos + 4; END IF; IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; END IF; IF att_nb != 0 THEN SET res_str = INSERT(res_str,dev_name_pos+1,1,CONCAT_WS(CONCAT(att_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | ######################################################### # # # GET DEVICE LIST PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.get_dev_list (IN class_name VARCHAR(255), IN serv VARCHAR(255), INOUT res_str BLOB, OUT d_list TEXT, OUT d_num INT) READS SQL DATA BEGIN DECLARE tmp_name VARCHAR(255); DECLARE done INT DEFAULT 0; DECLARE nb_dev INT DEFAULT 0; DECLARE class_name_pos INT; DECLARE cur_dev_list CURSOR FOR SELECT name FROM tango.device WHERE class = class_name AND server = serv; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,class_name); SET class_name_pos = LENGTH(res_str); OPEN cur_dev_list; REPEAT FETCH cur_dev_list INTO tmp_name; IF NOT done THEN SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); IF nb_dev = 0 THEN SET d_list = CONCAT_WS("",d_list,tmp_name); ELSE SET d_list = CONCAT_WS(CHAR(0),d_list,tmp_name); END IF; SET nb_dev = nb_dev + 1; END IF; UNTIL done END REPEAT; CLOSE cur_dev_list; SET res_str = INSERT(res_str,class_name_pos+1,1,CONCAT_WS(CONCAT(nb_dev),CHAR(0),CHAR(0))); SET d_num = nb_dev; END | ######################################################### # # # GET OBJECT PROPERTIES PROCEDURE # # # ######################################################### CREATE PROCEDURE tango.obj_prop (IN obj_name VARCHAR(255),OUT serv_dev_name VARCHAR(255), INOUT res_str BLOB) READS SQL DATA BEGIN DECLARE tmp_name VARCHAR(255); DECLARE tmp_value TEXT; DECLARE tmp_count INT; DECLARE done,prop_nb,prop_elt_nb INT DEFAULT 0; DECLARE dev_name_pos,prop_name_pos INT; DECLARE serv_defined INT DEFAULT 0; DECLARE cur_dev CURSOR FOR SELECT name,count,value FROM tango.property WHERE object = obj_name ORDER BY count; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET res_str = CONCAT_WS(CHAR(0),res_str,'MySQL Error'); SET res_str = CONCAT_WS(CHAR(0),res_str,obj_name); SET dev_name_pos = LENGTH(res_str); OPEN cur_dev; REPEAT FETCH cur_dev INTO tmp_name,tmp_count,tmp_value; IF NOT done THEN IF tmp_count = 1 THEN IF prop_elt_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_name); SET prop_name_pos = LENGTH(res_str); SET prop_nb = prop_nb + 1; SET prop_elt_nb = 0; IF tmp_name = 'Services' THEN SET serv_defined = 1; ELSE SET serv_defined = 0; END IF; END IF; IF serv_defined = 1 THEN IF LOCATE('AccessControl/tango:',tmp_value) != 0 THEN SET serv_dev_name = SUBSTRING(tmp_value,21); END IF; END IF; SET res_str = CONCAT_WS(CHAR(0),res_str,tmp_value); SET prop_elt_nb = prop_elt_nb + 1; END IF; UNTIL done END REPEAT; CLOSE cur_dev; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,prop_name_pos+1,1,CONCAT_WS(CONCAT(prop_elt_nb),CHAR(0),CHAR(0))); END IF; IF prop_nb != 0 THEN SET res_str = INSERT(res_str,dev_name_pos+1,1,CONCAT_WS(CONCAT(prop_nb),CHAR(0),CHAR(0))); ELSE SET res_str = CONCAT_WS(CHAR(0),res_str,0); END IF; END | DELIMITER ; debian/tango-accesscontrol.init.d0000664000000000000000000001105412167063434014256 0ustar #! /bin/sh ### BEGIN INIT INFO # Provides: tango-accesscontrol # Required-Start: $remote_fs $syslog tango-db # Required-Stop: $remote_fs $syslog tango-db # Should-Start: mysql # Should-Stop: mysql # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start the tango control system accesscontrol daemon # Description: Provide a tango control system accesscontrol daemon # that enforce the tango security policy. ### END INIT INFO # Author: Picca Frédéric-Emmanuel PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/lib/tango DESC="Tango Control System - accesscontrol" NAME=tango-accesscontrol NAME_REAL=TangoAccessControl CONFFILE=/etc/tangorc CANON_HOST=`grep TANGO_HOST $CONFFILE | awk -F ":" '{print $1}' | awk -F "=" '{print $2}' | awk -F "." '{print $1}'` DAEMON=/usr/lib/tango/$NAME_REAL DAEMON_ARGS="1" PIDFILE=/var/run/$NAME.pid # Exit if the package is not installed [ -x "$DAEMON" ] || exit 0 # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions # # Function that starts the daemon/service # do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started if [ $CANON_HOST != "localhost" ] then tango_admin --ping-network 4 || return 2 fi export SUPER_TANGO=true tango_admin --ping-database 6 || return 2 start-stop-daemon --start --quiet --chuid tango:tango --background \ --make-pidfile --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start --quiet --chuid tango:tango --background \ --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS \ || return 2 # Add code here, if necessary, that waits for the process to be ready # to handle requests from services started subsequently which depend # on this one. As a last resort, sleep for some time. } # # Function that stops the daemon/service # do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/5/KILL/5 --pidfile $PIDFILE --exec $DAEMON RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 # Wait for children to finish too if this is a daemon that forks # and if the daemon is only ever run from this initscript. # If the above conditions are not satisfied then add some other code # that waits for the process to drop all resources that could be # needed by services started subsequently. A last resort is to # sleep for some time. start-stop-daemon --stop --quiet --oknodo --retry=0/5/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 # Many daemons don't delete their pidfiles when they exit. rm -f $PIDFILE return "$RETVAL" } # # Function that sends a SIGHUP to the daemon/service # do_reload() { # # If the daemon can reload its configuration without # restarting (for example, when it is sent a SIGHUP), # then implement that here. # start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME return 0 } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; status) status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? ;; #reload|force-reload) # # If do_reload() is not implemented then leave this commented out # and leave 'force-reload' as an alias for 'restart'. # #log_daemon_msg "Reloading $DESC" "$NAME" #do_reload #log_end_msg $? #;; restart|force-reload) # # If the "reload" option is implemented then remove the # 'force-reload' alias # log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 exit 3 ;; esac : debian/README.source0000664000000000000000000000042312167063434011354 0ustar The dfsg clean version of this package was produce by removing all the .jar files included in the original upstream source. This package uses quilt to manage all modifications to the upstream source. Please read this file /usr/share/doc/quilt/README.source for instructions debian/tango-starter.install0000664000000000000000000000014212167063434013355 0ustar usr/bin/Starter usr/lib/tango usr/bin/notify_daemon usr/lib/tango usr/bin/notifd2db usr/lib/tango debian/tango-accesscontrol.install0000664000000000000000000000005112167063434014532 0ustar usr/bin/TangoAccessControl usr/lib/tango debian/tango-db.install0000664000000000000000000000011612167063434012257 0ustar usr/bin/DataBaseds usr/lib/tango usr/share/tango-db usr/share/dbconfig-common debian/tango-common.preinst0000664000000000000000000000221612167063434013203 0ustar #!/bin/sh DATADIR=/var/lib/tango #DEBHELPER# # If we use NIS then errors should be tolerated. It's up to the # user to ensure that the tango user is correctly setup. # Beware that there are two ypwhich one of them needs the 2>/dev/null! if test -n "`which ypwhich 2>/dev/null`" && ypwhich >/dev/null 2>&1; then set +e fi # # Now we have to ensure the following state: # /etc/passwd: tango:x:100:101:Tango Server:/var/lib/tango:/bin/false # /etc/group: tango:x:101: # # Sadly there could any state be present on the system so we have to # modify everything carefully i.e. not doing a chown before creating # the user etc... # # creating tango group if he isn't already there if ! getent group tango >/dev/null; then # Adding system group: tango. addgroup --system tango >/dev/null fi # creating tango user if he isn't already there if ! getent passwd tango >/dev/null; then # Adding system user: tango. adduser \ --system \ --ingroup tango \ --home $DATADIR \ --gecos "Tango Server" \ --shell /bin/false \ tango >/dev/null fi # end of NIS tolerance zone set -e debian/tango-test.install0000664000000000000000000000004012167063434012645 0ustar usr/bin/TangoTest usr/lib/tango debian/libtango-tools.install0000664000000000000000000000004212167063434013517 0ustar usr/bin/tango_admin usr/lib/tango debian/liblog4tango5.install0000664000000000000000000000003412241203261013220 0ustar usr/lib/*/liblog4tango.so.* debian/po/0000775000000000000000000000000012241203261007577 5ustar debian/po/pl.po0000664000000000000000000000216112167063434010567 0ustar # Translation of tango debconf templates to Polish. # Copyright (C) 2009 # This file is distributed under the same license as the tango package. # # Michał Kułach , 2012. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: tango@packages.debian.org\n" "POT-Creation-Date: 2009-08-12 11:20+0200\n" "PO-Revision-Date: 2012-02-16 12:52+0100\n" "Last-Translator: Michał Kułach \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "X-Generator: Lokalize 1.2\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "TANGO host:" msgstr "Host TANGO:" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "" "Please specify the name of the host where the TANGO database server is " "running." msgstr "" "Proszę podać nazwę komputera, na którym uruchomiony jest serwer bazy danych " "TANGO." debian/po/pt_BR.po0000664000000000000000000000207212241203261011146 0ustar # Debconf translations for tango. # Copyright (C) 2012 THE tango'S COPYRIGHT HOLDER # This file is distributed under the same license as the tango package. # Adriano Rafael Gomes , 2012, 2013. # msgid "" msgstr "" "Project-Id-Version: tango 8.1.2b+dfsg-1\n" "Report-Msgid-Bugs-To: tango@packages.debian.org\n" "POT-Creation-Date: 2009-08-12 11:20+0200\n" "PO-Revision-Date: 2013-08-22 11:13-0300\n" "Last-Translator: Adriano Rafael Gomes \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "TANGO host:" msgstr "Máquina TANGO:" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "" "Please specify the name of the host where the TANGO database server is " "running." msgstr "" "Por favor, especifique o nome da máquina onde o servidor de banco de dados " "do TANGO está executando." debian/po/sk.po0000664000000000000000000000172412167063434010575 0ustar # Slovak translation for tango debconf template. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the tango package. # # Ivan Masár , 2012. # msgid "" msgstr "" "Project-Id-Version: tango\n" "Report-Msgid-Bugs-To: tango@packages.debian.org\n" "POT-Creation-Date: 2009-08-12 11:20+0200\n" "PO-Revision-Date: 2012-02-24 12:44+0100\n" "Last-Translator: Ivan Masár \n" "Language-Team: Slovak \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "TANGO host:" msgstr "Hostiteľ TANGO:" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "Please specify the name of the host where the TANGO database server is running." msgstr "Prosím, zadajte názov hostiteľa, kde beží databázový server TANGO." debian/po/sv.po0000664000000000000000000000204612167063434010606 0ustar # Translation of Tango debconf template to Swedish # Copyright (C) 2011 Martin Bagge # This file is distributed under the same license as the Tango package. # # Martin Bagge , 2011 msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: tango@packages.debian.org\n" "POT-Creation-Date: 2009-08-12 11:20+0200\n" "PO-Revision-Date: 2011-04-21 00:32+0100\n" "Last-Translator: Martin Bagge / brother \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Swedish\n" "X-Poedit-Country: Sweden\n" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "TANGO host:" msgstr "Tango-värd:" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "" "Please specify the name of the host where the TANGO database server is " "running." msgstr "Ange namnet på den värd där databasservern Tango körs." debian/po/ja.po0000664000000000000000000000202112167063434010541 0ustar # Copyright (C) 2011 Debian Science Maintainers # This file is distributed under the same license as tango package. # Hideki Yamane , 2011. # msgid "" msgstr "" "Project-Id-Version: tango 7.2.6+dfsg-2\n" "Report-Msgid-Bugs-To: tango@packages.debian.org\n" "POT-Creation-Date: 2009-08-12 11:20+0200\n" "PO-Revision-Date: 2011-04-30 17:26+0900\n" "Last-Translator: Hideki Yamane \n" "Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "TANGO host:" msgstr "TANGO のホスト:" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "" "Please specify the name of the host where the TANGO database server is " "running." msgstr "" "TANGO データベースサーバが動作しているホスト名を指定してください。" debian/po/es.po0000664000000000000000000000331412167063434010564 0ustar # tango po-debconf translation to Spanish # Copyright (C) 2010 Software in the Public Interest # This file is distributed under the same license as the tango package. # # Changes: # - Initial translation # Camaleón , 2011 # # - Updates # # # Traductores, si no conocen el formato PO, merece la pena leer la # documentación de gettext, especialmente las secciones dedicadas a este # formato, por ejemplo ejecutando: # info -n '(gettext)PO Files' # info -n '(gettext)Header Entry' # # Equipo de traducción al español, por favor lean antes de traducir # los siguientes documentos: # # - El proyecto de traducción de Debian al español # http://www.debian.org/intl/spanish/ # especialmente las notas y normas de traducción en # http://www.debian.org/intl/spanish/notas # # - La guía de traducción de po's de debconf: # /usr/share/doc/po-debconf/README-trans # o http://www.debian.org/intl/l10n/po-debconf/README-trans # msgid "" msgstr "" "Project-Id-Version: tango 7.2.6+dfsg-4\n" "Report-Msgid-Bugs-To: tango@packages.debian.org\n" "POT-Creation-Date: 2009-08-12 11:20+0200\n" "PO-Revision-Date: 2011-07-03 18:05+0200\n" "Last-Translator: Camaleón \n" "Language-Team: Debian Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "TANGO host:" msgstr "Equipo TANGO:" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "" "Please specify the name of the host where the TANGO database server is " "running." msgstr "Especifique el nombre del equipo donde se ejecuta el servidor de base de datos de TANGO." debian/po/fr.po0000664000000000000000000000240412167063434010563 0ustar # Translation of tango debconf templates to French # Copyright (C) 2008 Picca Frédéric-emmanuel # Copyright (C) 2011 Debian French l10n team # This file is distributed under the same license as the tango package. # # Translators: # Picca Frédéric , 2008. # Christian Perrier , 2011. msgid "" msgstr "" "Project-Id-Version: tango 6.1.1\n" "Report-Msgid-Bugs-To: tango@packages.debian.org\n" "POT-Creation-Date: 2009-08-12 11:20+0200\n" "PO-Revision-Date: 2011-04-21 06:48+0200\n" "Last-Translator: Christian Perrier \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "TANGO host:" msgstr "Serveur Tango :" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "" "Please specify the name of the host where the TANGO database server is " "running." msgstr "" "Veuillez indiquer le nom de la machine sur laquelle le serveur de bases de " "données de Tango est installé." debian/po/POTFILES.in0000664000000000000000000000006112167063434011366 0ustar [type: gettext/rfc822deb] tango-common.templates debian/po/templates.pot0000664000000000000000000000153212167063434012337 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: tango@packages.debian.org\n" "POT-Creation-Date: 2009-08-12 11:20+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "TANGO host:" msgstr "" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "" "Please specify the name of the host where the TANGO database server is " "running." msgstr "" debian/po/da.po0000664000000000000000000000170312167063434010541 0ustar # Danish translation tango. # Copyright (C) 2011 tango & nedenstående oversættere. # This file is distributed under the same license as the tango package. # Joe Hansen , 2011. # msgid "" msgstr "" "Project-Id-Version: tango\n" "Report-Msgid-Bugs-To: tango@packages.debian.org\n" "POT-Creation-Date: 2009-08-12 11:20+0200\n" "PO-Revision-Date: 2011-04-30 17:30+01:00\n" "Last-Translator: Joe Hansen \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "TANGO host:" msgstr "TANGO-vært:" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "" "Please specify the name of the host where the TANGO database server is " "running." msgstr "" "Angiv venligst navnet på værten hvor TANGO-databaseserveren kører." debian/po/ru.po0000664000000000000000000000224412167063434010604 0ustar # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the tango package. # # Yuri Kozlov , 2011. msgid "" msgstr "" "Project-Id-Version: tango 7.2.6+dfsg-2\n" "Report-Msgid-Bugs-To: tango@packages.debian.org\n" "POT-Creation-Date: 2009-08-12 11:20+0200\n" "PO-Revision-Date: 2011-04-23 08:29+0400\n" "Last-Translator: Yuri Kozlov \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 " "&& n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "TANGO host:" msgstr "Узел TANGO:" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "" "Please specify the name of the host where the TANGO database server is " "running." msgstr "Укажите имя узла, на котором запущен сервер базы данных TANGO." debian/po/cs.po0000664000000000000000000000204212167063434010557 0ustar # Czech PO debconf template translation of tango. # Copyright (C) 2010 Michal Simunek # This file is distributed under the same license as the tango package. # Michal Simunek , 2011. # msgid "" msgstr "" "Project-Id-Version: tango 7.2.6+dfsg-2\n" "Report-Msgid-Bugs-To: tango@packages.debian.org\n" "POT-Creation-Date: 2009-08-12 11:20+0200\n" "PO-Revision-Date: 2011-04-26 17:31+0200\n" "Last-Translator: Michal Simunek \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "TANGO host:" msgstr "Hostitel pro TANGO" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "" "Please specify the name of the host where the TANGO database server is " "running." msgstr "" "Zadejte prosím název hostitele, kde běží databázový server TANGO." debian/po/de.po0000664000000000000000000000176212167063434010552 0ustar # German debconf translation of tango. # This file is distributed under the same license as the tango package. # Copyright (C) 2011 Chris Leick . # msgid "" msgstr "" "Project-Id-Version: tango 7.2.6+dfsg-2\n" "Report-Msgid-Bugs-To: tango@packages.debian.org\n" "POT-Creation-Date: 2009-08-12 11:20+0200\n" "PO-Revision-Date: 2011-04-21 11:08+0100\n" "Last-Translator: Chris Leick \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "TANGO host:" msgstr "TANGO-Rechner:" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "" "Please specify the name of the host where the TANGO database server is " "running." msgstr "" "Bitte geben Sie den Namen des Rechners an, auf dem der TANGO-Datenbankserver " "läuft." debian/po/nl.po0000664000000000000000000000201212167063434010560 0ustar # Dutch translation of tango debconf templates. # Copyright (C) 2012 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the tango package. # Jeroen Schot , 2012. # msgid "" msgstr "" "Project-Id-Version: tango 7.2.6+dfsg-12\n" "Report-Msgid-Bugs-To: tango@packages.debian.org\n" "POT-Creation-Date: 2009-08-12 11:20+0200\n" "PO-Revision-Date: 2012-02-17 12:08+0100\n" "Last-Translator: Jeroen Schot \n" "Language-Team: Debian l10n Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "TANGO host:" msgstr "TANGO-computer:" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "" "Please specify the name of the host where the TANGO database server is " "running." msgstr "" "Wat is de naam van de computer waarop de TANGO-databaseserver zich bevindt?" debian/po/it.po0000664000000000000000000000212412167063434010567 0ustar # Italian translation of tango debconf messages. # Copyright (C) 2012, tango package copyright holder. # This file is distributed under the same license as the PACKAGE package. # Beatrice Torracca , 2012. msgid "" msgstr "" "Project-Id-Version: tango\n" "Report-Msgid-Bugs-To: tango@packages.debian.org\n" "POT-Creation-Date: 2009-08-12 11:20+0200\n" "PO-Revision-Date: 2012-02-17 17:46+0200\n" "Last-Translator: Beatrice Torracca \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Virtaal 0.7.1\n" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "TANGO host:" msgstr "Host TANGO:" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "" "Please specify the name of the host where the TANGO database server is " "running." msgstr "" "Specificare il nome dell'host su cui è in esecuzione il server di database " "di TANGO." debian/po/id.po0000664000000000000000000000216212167063434010551 0ustar # tango po-debconf translation to Indonesian # Copyright (C) 2010 Software in the Public Interest # This file is distributed under the same license as the tango package. # # Changes: # - Initial translation # Izharul Haq , 2012. # # - Updates # # msgid "" msgstr "" "Project-Id-Version: tango 7.2.6+dfsg-12\n" "Report-Msgid-Bugs-To: tango@packages.debian.org\n" "POT-Creation-Date: 2009-08-12 11:20+0200\n" "PO-Revision-Date: 2012-02-16 14:32+0700\n" "Last-Translator: Izharul Haq \n" "Language-Team: Indonesian \n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Virtaal 0.6.1\n" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "TANGO host:" msgstr "TANGO host:" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "" "Please specify the name of the host where the TANGO database server is " "running." msgstr "Tentukan nama host dimana server basis data TANGO sedang berjalan." debian/po/pt.po0000664000000000000000000000200412167063434010573 0ustar # Portuguese debconf messages for the tango package # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the tango package. # Pedro Ribeiro , 2011 # msgid "" msgstr "" "Project-Id-Version: tango 7.2.6+dfsg-12\n" "Report-Msgid-Bugs-To: tango@packages.debian.org\n" "POT-Creation-Date: 2009-08-12 11:20+0200\n" "PO-Revision-Date: 2011-12-06 22:47+0000\n" "Last-Translator: Pedro Ribeiro \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "TANGO host:" msgstr "Servidor TANGO:" #. Type: string #. Description #: ../tango-common.templates:1001 msgid "" "Please specify the name of the host where the TANGO database server is " "running." msgstr "" "Indique por favor o nome da máquina onde o servidor de base de dados TANGO " "está em execução." debian/watch0000664000000000000000000000016412241203261010213 0ustar version=3 opts=dversionmangle=s/.dfsg// \ http://sf.net/tango-cs/tango-(.*)\.tar\.gz \ debian sh debian/repack.stub debian/changelog0000664000000000000000000001773712372223106011057 0ustar tango (8.1.2c+dfsg-3ubuntu0.1) trusty-proposed; urgency=medium * 0007-fix-upstream-p812_3.patch, 0008-fix-upstream-p812_4.patch: patches from debian to fix incompatibility with zeromq 4 (LP: #1355394) -- Julian Taylor Mon, 11 Aug 2014 21:48:19 +0200 tango (8.1.2c+dfsg-3) unstable; urgency=low * debian/patches + 0006-fix-upstream-p812_2.patch -- Picca Frédéric-Emmanuel Mon, 25 Nov 2013 20:42:41 +0100 tango (8.1.2c+dfsg-2) unstable; urgency=low * debian/rules - fix for real the build on ubuntu (mismatch between shell and makefile syntax) (LP: #1250534). The -Wl,symbolic-functions LDFLAGS is now stripped for real * debian/patches + 0005-forwarded-upstrean-fix-FTBFS-on-sparc64.patch (Closes: #729163) thanks Aurelien Jarno for the patch -- Picca Frédéric-Emmanuel Wed, 13 Nov 2013 10:22:20 +0100 tango (8.1.2c+dfsg-1) unstable; urgency=low * Imported Upstream version 8.1.2c+dfsg * debian/patch + 0004-fix-upstream-p812_1.diff.patch * Add debconf translation: - Brazilian Portuguese, from Adriano Rafael Gomes (Closes: #721628) -- Picca Frédéric-Emmanuel Mon, 02 Sep 2013 17:53:39 +0200 tango (8.1.2b+dfsg-1) unstable; urgency=low * Imported Upstream version 8.1.2b+dfsg * update repack.local to remove the jzmq part * debian/control - add new binary packages: + liblog4tango5, liblog4tango5-dev, liblog4tango5-dbg - remove binary packages: + liblog4tango4, liblog4tango4-dev, liblog4tango4-dbg * debian/patches - deleted * 0004-upstream-fix-p805_1.patch * 0005-fix-forwaded-upstream-add-LIBZMQ_LIBS-to-libtango.patch * 0006-upstream-fix-p805_2.patch * 0007-upstream-attempt-to-fix-the-powerpc-FTBFS.patch -- Picca Frédéric-Emmanuel Tue, 11 Jun 2013 14:18:05 +0200 tango (8.0.5+dfsg-3) unstable; urgency=low * debian/patches - 0007-upstream-attempt-to-fix-the-powerpc-FTBFS.patch (Added) -- Picca Frédéric-Emmanuel Tue, 28 May 2013 20:16:52 +0200 tango (8.0.5+dfsg-2) unstable; urgency=low * uploaded into unstable -- Picca Frédéric-Emmanuel Tue, 07 May 2013 08:22:11 +0200 tango (8.0.5+dfsg-1) experimental; urgency=low * Imported Upstream version 8.0.5+dfsg * Bump Standards-Version to 3.9.4 (nothing to do) * switch to compat level 9 * debian/control - Add new binary packages libtango8, libtango8-dev, libtango8-dbg - Remove binary packages libtango7, libtango7-dev, libtango7-dbg - Multiarchify: * liblog4tango4, liblog4tango4-dev, liblog4tango4-dbg * libtango8, libtango8-dev, libtango8-dbg * tango-common * debian/patches - refreshed * 0001-debian-fix_database_scripts.patch * 0002-debian-my.cnf.in.patch * 0003-debian-notify_daemon.patch - deleted * 0004-upstream-fix-bug3285674.patch * 0005-upstream-fix-bug3213730.patch * 0006-feature-forwarded-upstream-pkg-config-small-fixes.patch * 0007-upstream-fix-tango-db-start-during-init.patch * 0008-feature-add-jpegmmx-option-to-configure-script.patch * 0009-upstream-fix-bug3339975.patch - new * 0004-upstream-fix-p805_1.patch * 0005-fix-forwaded-upstream-add-LIBZMQ_LIBS-to-libtango.patch * 0006-upstream-fix-p805_2.patch -- Picca Frédéric-Emmanuel Sat, 19 Jan 2013 09:38:26 +0200 tango (7.2.6+dfsg-14) unstable; urgency=low * debian/patch - 0002-debian-my.cnf.in.patch (updated) (Closes: #684332) put the right user in my.cnf using dbconfig-common template engine -- Picca Frédéric-Emmanuel Sat, 15 Sep 2012 08:31:51 +0200 tango (7.2.6+dfsg-13) unstable; urgency=low * Bump Standards-Version to 3.9.3 - use cme (config-edit) to fix the copyright URL * Add debconf translation: - Portuguese, from Pedro Ribeiro, (Closes: #651431) - Polish, from Michał Kułach (Closes: #660097) - Dutch, from Jeroen Schot, (Closes: #660204) - Indone, from Izharul Haq, (Closes: #660100) - Italian, from Beatrice Torracca (Closes: #660761) - Slovak, from Ivan Masár (Closes: #661132) * Build out of the box on squeeze - update Build-Deps - use dpkg-buildflags --export=make instead of configure -- Picca Frédéric-Emmanuel Sun, 11 Dec 2011 15:30:40 +0100 tango (7.2.6+dfsg-12) unstable; urgency=low * remove symbols files (Closes: #635867) * debian/rules - hardening flags activated as we are providing daemons. * debian/patches - 0009-upstream-fix-bug3339975.patch -- Picca Frédéric-Emmanuel Fri, 21 Oct 2011 20:44:03 +0200 tango (7.2.6+dfsg-11) unstable; urgency=low * debian/*.symbols - libtango7 update all arch symbols -- Picca Frédéric-Emmanuel Sat, 17 Sep 2011 09:55:08 +0200 tango (7.2.6+dfsg-10) unstable; urgency=low * debian/*.symbols - log4tango4 updated for all arch - libtango7 add all arch symbols -- Picca Frédéric-Emmanuel Sun, 07 Aug 2011 11:04:08 +0200 tango (7.2.6+dfsg-9) unstable; urgency=low * debian/rules - add DPKG_GENSYMBOLS_CHECK_LEVEL=0 until I completed the symbols files for all arch. * debian/patches - 0008-feature-add-jpegmmx-option-to-configure-script.patch (updated) remove the mmx optimisation for all arch as it FTBFS on amd64. -- Picca Frédéric-Emmanuel Sun, 31 Jul 2011 19:06:33 +0200 tango (7.2.6+dfsg-8) unstable; urgency=low * do not build with mmx optimisation for the i386 arch * debian/patches - 0008-feature-add-jpegmmx-option-to-configure-script.patch (new) * debian/libtango7.symbols - remove all mmx related symbols from the i386 arch -- Picca Frédéric-Emmanuel Sun, 31 Jul 2011 00:07:30 +0200 tango (7.2.6+dfsg-7) unstable; urgency=low * debian/*.symbols - switch to (c++) tag - remove all duplicated lignes with the "uniq" command -- Picca Frédéric-Emmanuel Sat, 30 Jul 2011 21:02:47 +0200 tango (7.2.6+dfsg-6) unstable; urgency=low * debian/liblog4tango4.symbols - try to fix for all arch -- Picca Frédéric-Emmanuel Thu, 28 Jul 2011 22:57:32 +0200 tango (7.2.6+dfsg-5) unstable; urgency=low * switch to compat level 8 * add the symbols files * Add debconf translation: - Spanish, from Camaleón, (Closes: #632950) * debian/copyright fixed using config-edit -- Picca Frédéric-Emmanuel Tue, 19 Jul 2011 16:55:06 +0200 tango (7.2.6+dfsg-4) unstable; urgency=low * debian/patches - 0007-upstream-fix-tango-db-start-during-init.patch (new) -- Picca Frédéric-Emmanuel Mon, 23 May 2011 15:13:04 +0200 tango (7.2.6+dfsg-3) unstable; urgency=low * Bump Standards-Version to 3.9.2 * Add libjs-jquery dependency to avoid embedding jquery.js * Add debconf translations: - Swedish, from Martin Bagge, (closes: #623527) - Russian, from Yuri Kozlov (closes: #623793) - German, from Chris Leick (closes: #623889) - Czech, from Michal Simunek (closes: #624224) - Danish, from Joe Dalton (closes: #624643) - Japanese, from Hideki Yamane (closes: #626378) * Update debconf translation: - French, from Christian Perrier, (closes: #623887) * debian/patches - 0004-upstream-fix-bug3285674.patch (new) - 0005-upstream-fix-bug3213730.patch (new) - 0006-feature-forwarded-upstream-pkg-config-small-fixes.patch (new) -- Picca Frédéric-Emmanuel Sun, 24 Apr 2011 09:57:31 +0200 tango (7.2.6+dfsg-2) unstable; urgency=low * Split tango-common into tango-common and libtango-tools to solve the circular dependency (Closes: #623249) -- Picca Frédéric-Emmanuel Tue, 19 Apr 2011 00:08:55 +0200 tango (7.2.6+dfsg-1) unstable; urgency=low * Initial release (Closes: #400201) -- Picca Frédéric-Emmanuel Tue, 22 Mar 2011 09:24:31 +0100 debian/docs0000664000000000000000000000001412167063434010044 0ustar NEWS README debian/source/0000775000000000000000000000000012167063434010476 5ustar debian/source/format0000664000000000000000000000001412167063434011704 0ustar 3.0 (quilt) debian/liblog4tango5-doc.install0000664000000000000000000000011512241203261013763 0ustar usr/share/doc/log4tango/log4tango-*/api usr/share/doc/liblog4tango5-doc/html debian/tango-common.config0000664000000000000000000000102112167063434012755 0ustar #!/bin/sh CONFIGFILE=/etc/tangorc set -e . /usr/share/debconf/confmodule # Load config file, if it exists. if [ -e $CONFIGFILE ]; then . $CONFIGFILE || true # Store values from config file into # debconf db. db_set tango-common/tango-host "$TANGO_HOST" else if db_fget tango-common/tango-host seen; then if [ "$RET" = "false" ]; then db_set tango-common/tango-host $(hostname -f)":10000" fi fi fi # what is the name of the tango host db_input high tango-common/tango-host || true db_go || true debian/compat0000664000000000000000000000000212167063434010374 0ustar 9 debian/repack.local0000664000000000000000000000015512241203261011443 0ustar MANIFEST=0 SUFFIX=+dfsg rm lib/java/*.jar rm lib/java/jzmq/*.cpp rm lib/java/jzmq/*.h* rm -rf doc/src/layoutsdebian/tango-common.postinst0000664000000000000000000000166412167063434013410 0ustar #!/bin/sh CONFIGFILE=/etc/tangorc set -e . /usr/share/debconf/confmodule # Generate config file, if it doesn't exist. # An alternative is to copy in a template # file from elsewhere. if [ ! -e $CONFIGFILE ]; then echo "# Config file for my package" > $CONFIGFILE echo "TANGO_HOST=" >> $CONFIGFILE fi # Substitute in the values from the debconf db. # There are obvious optimizations possible here. # The cp before the sed ensures we do not mess up # the config file's ownership and permissions. db_get tango-common/tango-host TANGO_HOST=$RET cp -a -f $CONFIGFILE $CONFIGFILE.tmp # If the admin deleted or commented some variables but then set # them via debconf, (re-)add them to the conffile. test -z "$TANGO_HOST" || grep -Eq '^ *TANGO_HOST=' $CONFIGFILE || \ echo "TANGO_HOST=" >> $CONFIGFILE sed -e "s/^ *TANGO_HOST=.*/TANGO_HOST=$TANGO_HOST/" \ < $CONFIGFILE > $CONFIGFILE.tmp mv -f $CONFIGFILE.tmp $CONFIGFILE #DEBHELPER# debian/patches/0000775000000000000000000000000012372216666010632 5ustar debian/patches/0001-debian-fix_database_scripts.patch0000664000000000000000000000215112244723771017627 0ustar From: =?utf-8?q?Picca_Fr=C3=A9d=C3=A9ric-Emmanuel?= Date: Tue, 22 Mar 2011 15:25:38 +0100 Subject: debian/fix_database_scripts MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit update the database creation script to deal with the debian path Signed-off-by: Picca Frédéric-Emmanuel --- cppserver/database/create_db.sql.in | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/cppserver/database/create_db.sql.in b/cppserver/database/create_db.sql.in index 210a335..292d005 100644 --- a/cppserver/database/create_db.sql.in +++ b/cppserver/database/create_db.sql.in @@ -1,12 +1,8 @@ - -CREATE DATABASE @TANGO_DB_NAME@; -USE @TANGO_DB_NAME@; - # # Create all database tables # -source create_db_tables.sql +source /usr/share/tango-db/create_db_tables.sql # # Init the history identifiers @@ -126,5 +122,5 @@ INSERT INTO property_class VALUES ('TangoAccessControl','AllowedAccessCmd',6,'Ge # Load the stored procedures # -source stored_proc.sql +source /usr/share/tango-db/stored_proc.sql debian/patches/0002-debian-my.cnf.in.patch0000664000000000000000000000235312244723771015252 0ustar From: =?utf-8?q?Picca_Fr=C3=A9d=C3=A9ric-Emmanuel?= Date: Sat, 15 Sep 2012 08:25:42 +0200 Subject: debian/my.cnf.in MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit set the right parameters for the mysql configuration file Signed-off-by: Picca Frédéric-Emmanuel --- cppserver/database/my.cnf.in | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cppserver/database/my.cnf.in b/cppserver/database/my.cnf.in index 69f574c..a43ae74 100644 --- a/cppserver/database/my.cnf.in +++ b/cppserver/database/my.cnf.in @@ -29,11 +29,11 @@ # MySQL client library initialization. # [client] -#password = [your_password] -#user = [your_user] +user = _DBC_DBUSER_ +password = _DBC_DBPASS_ -port = 3306 -socket = /tmp/mysql.sock +port = 3306 +socket = /var/run/mysqld/mysqld.sock # *** Application-specific options follow here *** @@ -44,7 +44,7 @@ socket = /tmp/mysql.sock # generic configuration options port = 3306 -socket = /tmp/mysql.sock +socket = /var/run/mysqld/mysqld.sock # back_log is the number of connections the operating system can keep in # the listen queue, before the MySQL connection manager thread has debian/patches/0007-fix-upstream-p812_3.patch0000664000000000000000000000225312361704721015567 0ustar From: =?utf-8?q?Picca_Fr=C3=A9d=C3=A9ric-Emmanuel?= Date: Thu, 6 Feb 2014 09:48:28 +0100 Subject: fix upstream p812_3 --- lib/cpp/client/zmqeventconsumer.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/cpp/client/zmqeventconsumer.cpp b/lib/cpp/client/zmqeventconsumer.cpp index 6ebdfc8..3212100 100644 --- a/lib/cpp/client/zmqeventconsumer.cpp +++ b/lib/cpp/client/zmqeventconsumer.cpp @@ -1879,7 +1879,7 @@ void ZmqEventConsumer::push_zmq_event(string &ev_name,unsigned char endian,zmq:: if (ev_name.find(MODIFIER_DBASE_NO) != string::npos) no_db_dev = true; - for (loop = 0;loop < env_var_fqdn_prefix.size();loop++) + for (loop = 0;loop < env_var_fqdn_prefix.size() + 1;loop++) { // @@ -1888,10 +1888,10 @@ void ZmqEventConsumer::push_zmq_event(string &ev_name,unsigned char endian,zmq:: string new_tango_host; - if (no_db_dev == true) + if (loop == 0 || no_db_dev == true) new_tango_host = ev_name; else - new_tango_host = env_var_fqdn_prefix[loop] + canon_ev_name; + new_tango_host = env_var_fqdn_prefix[loop - 1] + canon_ev_name; ipos = event_callback_map.find(new_tango_host); debian/patches/series0000664000000000000000000000042712361704722012043 0ustar 0001-debian-fix_database_scripts.patch 0002-debian-my.cnf.in.patch 0003-debian-notify_daemon.patch 0004-fix-upstream-p812_1.diff.patch 0005-forwarded-upstrean-fix-FTBFS-on-sparc64.patch 0006-fix-upstream-p812_2.patch 0007-fix-upstream-p812_3.patch 0008-fix-upstream-p812_4.patch debian/patches/0008-fix-upstream-p812_4.patch0000664000000000000000000002073412361704722015576 0ustar From: =?utf-8?q?Picca_Fr=C3=A9d=C3=A9ric-Emmanuel?= Date: Thu, 17 Jul 2014 10:31:05 +0200 Subject: fix upstream p812_4 --- lib/cpp/client/event.cpp | 3 ++- lib/cpp/client/eventconsumer.h | 7 +++-- lib/cpp/client/eventkeepalive.cpp | 2 +- lib/cpp/client/zmqeventconsumer.cpp | 54 ++++++++++++++++++++++++++----------- 4 files changed, 46 insertions(+), 20 deletions(-) diff --git a/lib/cpp/client/event.cpp b/lib/cpp/client/event.cpp index f3fecf1..47625dd 100644 --- a/lib/cpp/client/event.cpp +++ b/lib/cpp/client/event.cpp @@ -1631,6 +1631,7 @@ void EventConsumer::unsubscribe_event(int event_id) delete epos->second.callback_monitor; string deleted_channel_name = epos->second.channel_name; + string deleted_event_endpoint = evt_cb.endpoint; event_callback_map.erase(epos); // @@ -1689,7 +1690,7 @@ void EventConsumer::unsubscribe_event(int event_id) } else { - disconnect_event_channel(deleted_channel_name,evt_ch.endpoint); + disconnect_event_channel(deleted_channel_name,evt_ch.endpoint,deleted_event_endpoint); } delete evt_ch.adm_device_proxy; diff --git a/lib/cpp/client/eventconsumer.h b/lib/cpp/client/eventconsumer.h index 20c8604..7f65bc1 100644 --- a/lib/cpp/client/eventconsumer.h +++ b/lib/cpp/client/eventconsumer.h @@ -414,7 +414,7 @@ protected : void get_fire_sync_event(DeviceProxy *,CallBack *,EventQueue *,EventType,string &,const string &,EventCallBackStruct &); virtual void connect_event_channel(string &,Database *,bool,DeviceData &) = 0; - virtual void disconnect_event_channel(TANGO_UNUSED(string &channel_name),TANGO_UNUSED(string &endpoint)) {} + virtual void disconnect_event_channel(TANGO_UNUSED(string &channel_name),TANGO_UNUSED(string &endpoint),TANGO_UNUSED(string &endpoint_event)) {} virtual void connect_event_system(string &,string &,string &e,const vector &,EvChanIte &,EventCallBackStruct &,DeviceData &) = 0; virtual void disconnect_event(string &,string &) {} @@ -502,7 +502,7 @@ public : protected : ZmqEventConsumer(ApiUtil *ptr); virtual void connect_event_channel(string &,Database *,bool,DeviceData &); - virtual void disconnect_event_channel(string &channel_name,string &endpoint); + virtual void disconnect_event_channel(string &channel_name,string &endpoint,string &endpoint_event); virtual void connect_event_system(string &,string &,string &e,const vector &,EvChanIte &,EventCallBackStruct &,DeviceData &); virtual void disconnect_event(string &,string &); @@ -530,6 +530,7 @@ private : int old_poll_nb; omni_mutex subscription_mutex; + bool ctrl_socket_bound; void *run_undetached(void *arg); void push_heartbeat_event(string &); @@ -540,6 +541,8 @@ private : void process_event(zmq_msg_t &,zmq_msg_t &,zmq_msg_t &,zmq_msg_t &); void multi_tango_host(zmq::socket_t *,SocketCmd,string &); void print_error_message(const char *mess) {ApiUtil *au=ApiUtil::instance();au->print_error_message(mess);} + void set_ctrl_sock_bound() {subscription_mutex.lock();ctrl_socket_bound=true;subscription_mutex.unlock();} + bool is_ctrl_sock_bound() {bool _b;subscription_mutex.lock();_b=ctrl_socket_bound;subscription_mutex.unlock();return _b;} friend class DelayEvent; }; diff --git a/lib/cpp/client/eventkeepalive.cpp b/lib/cpp/client/eventkeepalive.cpp index 2d93241..e43c802 100644 --- a/lib/cpp/client/eventkeepalive.cpp +++ b/lib/cpp/client/eventkeepalive.cpp @@ -190,7 +190,7 @@ bool EventConsumerKeepAliveThread::reconnect_to_zmq_channel(EvChanIte &ipos,Even string adm_name = ipos->second.full_adm_name; #ifdef ZMQ_HAS_DISCONNECT - event_consumer->disconnect_event_channel(adm_name,ipos->second.endpoint); + event_consumer->disconnect_event_channel(adm_name,ipos->second.endpoint,epos->second.endpoint); #endif event_consumer->connect_event_channel(adm_name, epos->second.device->get_device_db(), diff --git a/lib/cpp/client/zmqeventconsumer.cpp b/lib/cpp/client/zmqeventconsumer.cpp index 3212100..bb56814 100644 --- a/lib/cpp/client/zmqeventconsumer.cpp +++ b/lib/cpp/client/zmqeventconsumer.cpp @@ -65,7 +65,8 @@ ZmqEventConsumer *ZmqEventConsumer::_instance = NULL; /* */ /************************************************************************/ -ZmqEventConsumer::ZmqEventConsumer(ApiUtil *ptr) : EventConsumer(ptr),omni_thread((void *)ptr),zmq_context(1) +ZmqEventConsumer::ZmqEventConsumer(ApiUtil *ptr) : EventConsumer(ptr), +omni_thread((void *)ptr),zmq_context(1),ctrl_socket_bound(false) { cout3 << "calling Tango::ZmqEventConsumer::ZmqEventConsumer() \n"; @@ -161,6 +162,8 @@ void *ZmqEventConsumer::run_undetached(TANGO_UNUSED(void *arg)) control_sock->setsockopt(ZMQ_LINGER,&linger,sizeof(linger)); control_sock->bind(CTRL_SOCK_ENDPOINT); + set_ctrl_sock_bound(); + // // Initialize poll set // @@ -784,6 +787,7 @@ bool ZmqEventConsumer::process_ctrl(zmq::message_t &received_ctrl,zmq::pollitem_ const char *event_name = &(tmp_ptr[1]); #ifdef ZMQ_HAS_DISCONNECT const char *endpoint = &(tmp_ptr[1 + ::strlen(event_name) + 1]); + const char *endpoint_event = &(tmp_ptr[1 + ::strlen(event_name) + ::strlen(endpoint) + 2]); #endif // @@ -815,6 +819,17 @@ bool ZmqEventConsumer::process_ctrl(zmq::message_t &received_ctrl,zmq::pollitem_ connected_heartbeat.erase(pos); heartbeat_sub_sock->disconnect(endpoint); + +// +// Remove the event endpoint from the already connected event and disconnect the event socket +// + + pos = find(connected_pub.begin(),connected_pub.end(),string(endpoint_event)); + if (pos != connected_pub.end()) + { + connected_pub.erase(pos); + event_sub_sock->disconnect(endpoint_event); + } #endif } break; @@ -927,20 +942,6 @@ bool ZmqEventConsumer::process_ctrl(zmq::message_t &received_ctrl,zmq::pollitem_ string base_name(event_name); multi_tango_host(event_sub_sock,UNSUBSCRIBE,base_name); } - -#ifdef ZMQ_HAS_DISCONNECT -// -// Remove the endpoint in the vector of already connected event and disconnect the socket to this endpoint -// - - vector::iterator pos; - pos = find(connected_pub.begin(),connected_pub.end(),endpoint_str); - if (pos != connected_pub.end()) - { - connected_pub.erase(pos); - event_sub_sock->disconnect(endpoint); - } -#endif } else { @@ -1384,10 +1385,11 @@ void ZmqEventConsumer::connect_event_channel(string &channel_name,TANGO_UNUSED(D // in : // - channel name : The event channel name (DS admin name) // - endpoint : The ZMQ endpoint for the heartbeat publisher socket +// - endpoint_event : The ZMQ endpoint for the event publisher socket // //-------------------------------------------------------------------------------------------------------------------- -void ZmqEventConsumer::disconnect_event_channel(string &channel_name,string &endpoint) +void ZmqEventConsumer::disconnect_event_channel(string &channel_name,string &endpoint,string &endpoint_event) { string unsub(channel_name); unsub = unsub + '.' + HEARTBEAT_EVENT_NAME; @@ -1420,6 +1422,9 @@ void ZmqEventConsumer::disconnect_event_channel(string &channel_name,string &end ::strcpy(&(buffer[length]),endpoint.c_str()); length = length + endpoint.size() + 1; + ::strcpy(&(buffer[length]),endpoint_event.c_str()); + length = length + endpoint_event.size() + 1; + // // Send command to main ZMQ thread // @@ -2838,10 +2843,27 @@ DelayEvent::DelayEvent(EventConsumer *ec):released(false),eve_con(NULL) // I have tried with a yield call but it still failed in some cases (when running the DS with a file as database for // instance). Replace the yield with a 15 mS sleep !!! // +// Since ZMQ 4, it's possible to connect to the remote socket even if it is not yet bound but the remote +// socket will hang in its recv call!!!! +// We still need the sleep call but not in the exception case +// try { sender.connect(CTRL_SOCK_ENDPOINT); + + if (eve_con->is_ctrl_sock_bound() == false) + { +#ifndef _TG_WINDOWS_ + struct timespec ts; + ts.tv_sec = 0; + ts.tv_nsec = 15000000; + + nanosleep(&ts,NULL); +#else + Sleep(20); +#endif + } } catch (zmq::error_t &e) { debian/patches/0005-forwarded-upstrean-fix-FTBFS-on-sparc64.patch0000664000000000000000000000266112244723772021375 0ustar From: =?utf-8?q?Picca_Fr=C3=A9d=C3=A9ric-Emmanuel?= Date: Wed, 13 Nov 2013 16:25:25 +0100 Subject: forwarded upstrean fix FTBFS on sparc64 --- cppserver/database/Makefile.am | 2 +- cppserver/database/Makefile.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cppserver/database/Makefile.am b/cppserver/database/Makefile.am index 9cf6324..f5e33eb 100644 --- a/cppserver/database/Makefile.am +++ b/cppserver/database/Makefile.am @@ -6,7 +6,7 @@ INCLUDES = $(ORB_INCLUDE_PREFIX) $(LIBZMQ_CFLAGS) \ $(MYSQLCLIENT_CFLAGS) \ $(ZLIB_CPPFLAGS) -AM_CXXFLAGS= -Wall -D_FORTIFY_SOURCE=2 -O1 -fpie +AM_CXXFLAGS= -Wall -D_FORTIFY_SOURCE=2 -O1 -fPIE LDADD = -L$(top_builddir)/lib/cpp/server -ltango -L$(top_builddir)/lib/cpp/log4tango/src \ -llog4tango $(MYSQLCLIENT_LDFLAGS) \ diff --git a/cppserver/database/Makefile.in b/cppserver/database/Makefile.in index b1dc264..54c7597 100644 --- a/cppserver/database/Makefile.in +++ b/cppserver/database/Makefile.in @@ -327,7 +327,7 @@ INCLUDES = $(ORB_INCLUDE_PREFIX) $(LIBZMQ_CFLAGS) \ $(MYSQLCLIENT_CFLAGS) \ $(ZLIB_CPPFLAGS) -AM_CXXFLAGS = -Wall -D_FORTIFY_SOURCE=2 -O1 -fpie +AM_CXXFLAGS = -Wall -D_FORTIFY_SOURCE=2 -O1 -fPIE LDADD = -L$(top_builddir)/lib/cpp/server -ltango -L$(top_builddir)/lib/cpp/log4tango/src \ -llog4tango $(MYSQLCLIENT_LDFLAGS) \ $(MYSQLCLIENT_LIBS) $(ZLIB_LDFLAGS) $(ZLIB_LIBS) $(LIBZMQ_LIBS) debian/patches/0004-fix-upstream-p812_1.diff.patch0000664000000000000000000000512712244723771016502 0ustar From: =?utf-8?q?Picca_Fr=C3=A9d=C3=A9ric-Emmanuel?= Date: Tue, 3 Sep 2013 20:10:47 +0200 Subject: fix upstream p812_1.diff --- lib/cpp/server/eventcmds.cpp | 4 +++- lib/cpp/server/pollthread.cpp | 10 ++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/cpp/server/eventcmds.cpp b/lib/cpp/server/eventcmds.cpp index cb3cc75..2d642cb 100644 --- a/lib/cpp/server/eventcmds.cpp +++ b/lib/cpp/server/eventcmds.cpp @@ -539,8 +539,8 @@ DevVarLongStringArray *DServer::zmq_event_subscription_change(const Tango::DevVa (const char *)"DServer::zmq_event_subscription_change"); } - Tango::DevVarLongStringArray *ret_data = new Tango::DevVarLongStringArray(); Tango::Util *tg = Tango::Util::instance(); + Tango::DevVarLongStringArray *ret_data; if (argin->length() == 1) { @@ -561,6 +561,7 @@ DevVarLongStringArray *DServer::zmq_event_subscription_change(const Tango::DevVa // It's just the call to help debugging. Returns event configuration // + ret_data = new Tango::DevVarLongStringArray(); ret_data->svalue.length(2); ZmqEventSupplier *ev; @@ -735,6 +736,7 @@ DevVarLongStringArray *DServer::zmq_event_subscription_change(const Tango::DevVa // Init data returned by command // + ret_data = new Tango::DevVarLongStringArray(); ret_data->lvalue.length(6); ret_data->svalue.length(2); diff --git a/lib/cpp/server/pollthread.cpp b/lib/cpp/server/pollthread.cpp index bf67011..ffc3fde 100644 --- a/lib/cpp/server/pollthread.cpp +++ b/lib/cpp/server/pollthread.cpp @@ -1038,11 +1038,17 @@ void PollThread::tune_list(bool from_needed, long min_delta) WorkItem wo = *ite; Tango::DevULong64 next_work = ((Tango::DevULong64)wo.wake_up_date.tv_sec * 1000000LL) + (Tango::DevULong64)wo.wake_up_date.tv_usec; + Tango::DevULong64 next_prev; if (next_work < next_tuning) { Tango::DevULong64 prev_obj_work = ((Tango::DevULong64)ite_prev->wake_up_date.tv_sec * 1000000LL) + (Tango::DevULong64)ite_prev->wake_up_date.tv_usec; - Tango::DevULong64 n = (next_work - prev_obj_work) / ((Tango::DevULong64)ite_prev->update * 1000LL); - Tango::DevULong64 next_prev = prev_obj_work + (n * (ite_prev->update * 1000LL)); + if (next_work > prev_obj_work) + { + Tango::DevULong64 n = (next_work - prev_obj_work) / ((Tango::DevULong64)ite_prev->update * 1000LL); + next_prev = prev_obj_work + (n * (ite_prev->update * 1000LL)); + } + else + next_prev = prev_obj_work; wo.wake_up_date.tv_sec = (long)(next_prev / 1000000LL); wo.wake_up_date.tv_usec = (long)(next_prev % 1000000LL); debian/patches/0006-fix-upstream-p812_2.patch0000664000000000000000000001225112244723772015573 0ustar From: =?utf-8?q?Picca_Fr=C3=A9d=C3=A9ric-Emmanuel?= Date: Mon, 25 Nov 2013 20:41:39 +0100 Subject: fix upstream p812_2 --- lib/cpp/client/api_util.cpp | 4 ++++ lib/cpp/client/event.cpp | 11 ++++++----- lib/cpp/client/eventconsumer.h | 1 + lib/cpp/client/eventkeepalive.cpp | 9 +++++++++ lib/cpp/client/zmqeventconsumer.cpp | 21 ++++++++++++++++----- 5 files changed, 36 insertions(+), 10 deletions(-) diff --git a/lib/cpp/client/api_util.cpp b/lib/cpp/client/api_util.cpp index 6e38825..3ed6d83 100644 --- a/lib/cpp/client/api_util.cpp +++ b/lib/cpp/client/api_util.cpp @@ -257,6 +257,10 @@ void ApiUtil::create_orb() if (sigaction(SIGPIPE,NULL,&sa) == -1) sa.sa_handler = NULL; +#else + WORD rel = 0x0202; + WSADATA dat; + WSAStartup(rel,&dat); #endif // diff --git a/lib/cpp/client/event.cpp b/lib/cpp/client/event.cpp index 75b8c33..f3fecf1 100644 --- a/lib/cpp/client/event.cpp +++ b/lib/cpp/client/event.cpp @@ -202,12 +202,12 @@ EventConsumer::EventConsumer(ApiUtil *api_ptr) { break; } + } - if (j == env_var_fqdn_prefix.size()) - { - string prefix = "tango://" + vs[i] + '/'; - env_var_fqdn_prefix.push_back(prefix); - } + if (j == env_var_fqdn_prefix.size()) + { + string prefix = "tango://" + vs[i] + '/'; + env_var_fqdn_prefix.push_back(prefix); } #endif } @@ -1441,6 +1441,7 @@ int EventConsumer::connect_event(DeviceProxy *device, new_event_callback.device_idl = 0; } new_event_callback.ctr = 0; + new_event_callback.discarded_event = false; if (zmq_used == true) new_event_callback.endpoint = dvlsa->svalue[1].in(); diff --git a/lib/cpp/client/eventconsumer.h b/lib/cpp/client/eventconsumer.h index f403fb2..20c8604 100644 --- a/lib/cpp/client/eventconsumer.h +++ b/lib/cpp/client/eventconsumer.h @@ -298,6 +298,7 @@ typedef struct event_callback_zmq DevLong device_idl; DevULong ctr; string endpoint; + bool discarded_event; }EventCallBackZmq; typedef struct event_callback: public EventCallBackBase, public EventCallBackZmq diff --git a/lib/cpp/client/eventkeepalive.cpp b/lib/cpp/client/eventkeepalive.cpp index e204fae..2d93241 100644 --- a/lib/cpp/client/eventkeepalive.cpp +++ b/lib/cpp/client/eventkeepalive.cpp @@ -452,6 +452,10 @@ void EventConsumerKeepAliveThread::reconnect_to_zmq_event(EvChanIte &ipos,EventC event_consumer->connect_event_system(d_name,epos->second.attr_name,epos->second.event_name,vs,ipos,ecbs,dd); + const DevVarLongStringArray *dvlsa; + dd >> dvlsa; + epos->second.endpoint = dvlsa->svalue[1].in(); + cout3 << "Reconnected to ZMQ event" << endl; } catch(...) @@ -588,6 +592,11 @@ void *EventConsumerKeepAliveThread::run_undetached(TANGO_UNUSED(void *arg)) { try { + if (notifd_event_consumer == NULL) + { + ApiUtil::instance()->create_notifd_event_consumer(); + notifd_event_consumer = ApiUtil::instance()->get_notifd_event_consumer(); + } notifd_event_consumer->connect_event(vpos->device,vpos->attribute,vpos->event_type, vpos->callback, vpos->ev_queue, diff --git a/lib/cpp/client/zmqeventconsumer.cpp b/lib/cpp/client/zmqeventconsumer.cpp index 8fa8ce0..6ebdfc8 100644 --- a/lib/cpp/client/zmqeventconsumer.cpp +++ b/lib/cpp/client/zmqeventconsumer.cpp @@ -859,6 +859,7 @@ bool ZmqEventConsumer::process_ctrl(zmq::message_t &received_ctrl,zmq::pollitem_ event_sub_sock->setsockopt(ZMQ_RCVHWM,&sub_hwm,sizeof(sub_hwm)); event_sub_sock->connect(endpoint); + if (force_connect == 0) connected_pub.push_back(endpoint); } @@ -935,9 +936,10 @@ bool ZmqEventConsumer::process_ctrl(zmq::message_t &received_ctrl,zmq::pollitem_ vector::iterator pos; pos = find(connected_pub.begin(),connected_pub.end(),endpoint_str); if (pos != connected_pub.end()) + { connected_pub.erase(pos); - - event_sub_sock->disconnect(endpoint); + event_sub_sock->disconnect(endpoint); + } #endif } else @@ -1930,12 +1932,21 @@ void ZmqEventConsumer::push_zmq_event(string &ev_name,unsigned char endian,zmq:: if (missed_event >= 2) { err_missed_event = true; + evt_cb.discarded_event = false; } else if (missed_event == 0) { - map_modification_lock.readerOut(); - return; - } + if (evt_cb.discarded_event == false) + { + evt_cb.discarded_event = true; + map_modification_lock.readerOut(); + return; + } + else + evt_cb.discarded_event = false; + } + else + evt_cb.discarded_event = false; evt_cb.ctr = ds_ctr; debian/patches/0003-debian-notify_daemon.patch0000664000000000000000000000166112244723771016310 0ustar From: Debian Science Maintainers Date: Tue, 22 Mar 2011 15:25:38 +0100 Subject: debian/notify_daemon --- scripts/notify_daemon.in | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/scripts/notify_daemon.in b/scripts/notify_daemon.in index a610b75..3c8ca1d 100755 --- a/scripts/notify_daemon.in +++ b/scripts/notify_daemon.in @@ -16,8 +16,6 @@ SunOS) KILLALL=pkill esac -BIN_DIR=@prefix@/bin - ulimit -s 2048 #------------------------------------------------------------ @@ -35,12 +33,12 @@ fi echo "TANGO_HOST=$TANGO_HOST" echo "Starting notifd....." -$BIN_DIR/notifd -n -DDeadFilterInterval=300 1>/dev/null 2>/tmp/notifd.err & +notifd -n -DDeadFilterInterval=300 1>/dev/null 2>/tmp/notifd.err & #---- Sleep a bit before write IOR in database sleep 3 -$BIN_DIR/notifd2db +/usr/lib/tango/notifd2db echo "ulimit has been set to:" ulimit -s debian/copyright0000664000000000000000000000724012167063434011134 0ustar Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: The Tango team Upstream-Contact: tango@esrf.fr Source: http://ftp.esrf.fr/pub/cs/tango/ Disclaimer: All precompiled java class were removed and the doc/src/layouts directory Files: debian/* Copyright: © 2006-2013, Picca Frédéric-Emmanuel License: LGPL-3+ The Debian packaging information is under the GPL, version 3 or later On Debian systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL-3'. Files: config/ltmain.sh cpp/log4tango/config/ltmain.sh Copyright: © 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. License: GPL-2+ Files: lib/cpp/client/zmq.hpp Copyright: Copyright (c) 2007-2011 iMatix Corporation License: LGPL-3+ Files: lib/cpp/server/readers_writers_lock.h Copyright: © 1997-1999 AT&T Laboratories Cambridge © 2010, 2011, The Tango team License: LGPL-3+ Files: * Copyright: © 2004-2012, The Tango team License: LGPL-3+ Files: cppserver/* utils/* Copyright: © 2010, 2011, The Tango team License: GPL-3+ License: GPL-2+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA . On Debian systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL-2'. License: GPL-3+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA . On Debian systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL-3'. License: LGPL-3+ Tango is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. . Tango is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. . You should have received a copy of the GNU Lesser General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA . On Debian systems, the complete text of the GNU Lesser General Public License can be found in `/usr/share/common-licenses/LGPL-3'. debian/tango-db.config0000664000000000000000000000055012167063434012060 0ustar #!/bin/sh # config maintainer script for foo-mysql set -e # source debconf stuff . /usr/share/debconf/confmodule # source dbconfig-common shell library, and call the hook function if [ -f /usr/share/dbconfig-common/dpkg/config.mysql ]; then dbc_dbname="tango" dbc_dbuser="tango" . /usr/share/dbconfig-common/dpkg/config.mysql dbc_go tango-db $@ fi debian/liblog4tango5-doc.links0000664000000000000000000000013212241203261013434 0ustar /usr/share/javascript/jquery/jquery.js /usr/share/doc/liblog4tango5-doc/html/api/jquery.jsdebian/tango-db.init.d0000664000000000000000000001151012167063434011776 0ustar #! /bin/sh ### BEGIN INIT INFO # Provides: tango-db # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Should-Start: mysql # Should-Stop: mysql # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start the tango control system database daemon # Description: Provide the database connection for programmes based on # the tango control system. # X-Start-Before: tango-accesscontrol # X-Stop-After: tango-accesscontrol ### END INIT INFO # Author: Picca Frédéric-Emmanuel PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/lib/tango DESC="Tango Control System - database" NAME=tango-db NAME_REAL=DataBaseds CONFFILE=/etc/tangorc PORT=`grep TANGO_HOST $CONFFILE | awk -F ":" '{print $2}'` HOST=`grep TANGO_HOST $CONFFILE | awk -F ":" '{print $1}' | awk -F "=" '{print $2}'` CANON_HOST=`grep TANGO_HOST $CONFFILE | awk -F ":" '{print $1}' | awk -F "=" '{print $2}' | awk -F "." '{print $1}'` DAEMON=/usr/lib/tango/$NAME_REAL PIDFILE=/var/run/$NAME.pid # Exit if the package is not installed [ -x "$DAEMON" ] || exit 0 # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions # # Function that starts the daemon/service # do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started # to start this daemon need a working network if [ $CANON_HOST = "localhost" ] then DAEMON_ARGS="2 -ORBendPoint giop:tcp:$HOST:$PORT" else DAEMON_ARGS="2 -ORBendPoint giop:tcp::$PORT" tango_admin --ping-network 40 || return 2 fi start-stop-daemon --start --quiet --chuid tango:tango --background \ --make-pidfile --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start --quiet --chuid tango:tango --background \ --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS \ || return 2 # Add code here, if necessary, that waits for the process to be ready # to handle requests from services started subsequently which depend # on this one. As a last resort, sleep for some time. tango_admin --ping-database 6 || return 2 } # # Function that stops the daemon/service # do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME_REAL RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 # Wait for children to finish too if this is a daemon that forks # and if the daemon is only ever run from this initscript. # If the above conditions are not satisfied then add some other code # that waits for the process to drop all resources that could be # needed by services started subsequently. A last resort is to # sleep for some time. sleep 3 start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 # Many daemons don't delete their pidfiles when they exit. rm -f $PIDFILE return "$RETVAL" } # # Function that sends a SIGHUP to the daemon/service # do_reload() { # # If the daemon can reload its configuration without # restarting (for example, when it is sent a SIGHUP), # then implement that here. # start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME return 0 } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; status) status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? ;; #reload|force-reload) # # If do_reload() is not implemented then leave this commented out # and leave 'force-reload' as an alias for 'restart'. # #log_daemon_msg "Reloading $DESC" "$NAME" #do_reload #log_end_msg $? #;; restart|force-reload) # # If the "reload" option is implemented then remove the # 'force-reload' alias # log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 exit 3 ;; esac : debian/libtango8-doc.install0000664000000000000000000000007212167063434013217 0ustar usr/share/doc/tango/tango.pdf usr/share/doc/libtango8-doc debian/tango-db.postrm0000664000000000000000000000061112167063434012135 0ustar #!/bin/sh set -e if [ -f /usr/share/debconf/confmodule ]; then . /usr/share/debconf/confmodule fi if [ -f /usr/share/dbconfig-common/dpkg/postrm.mysql ]; then . /usr/share/dbconfig-common/dpkg/postrm.mysql dbc_go tango-db $@ fi if [ "$1" = "purge" ]; then rm -f /var/lib/tango/.my.cnf if which ucf >/dev/null 2>&1; then ucf --purge /var/lib/tango/.my.cnf fi fi #DEBHELPER# debian/README.Debian0000664000000000000000000000033712167063434011242 0ustar tango for Debian ---------------- To use the Tango system install tango-db and tango-starter. then you can play with the TangoTest device. -- picca frederic Sat, 18 Nov 2006 18:52:07 +0100 debian/tango-common.templates0000664000000000000000000000026312167063434013515 0ustar Template: tango-common/tango-host Type: string Default: localhost:10000 _Description: TANGO host: Please specify the name of the host where the TANGO database server is running. debian/liblog4tango5-dev.install0000664000000000000000000000013012241203261013771 0ustar usr/include/tango/log4tango usr/lib/*/liblog4tango*.so usr/lib/*/pkgconfig/log4tango.pc debian/rules0000775000000000000000000000512412241203261010243 0ustar #!/usr/bin/make -f BUILDROOT=build PACKAGE := $(shell dpkg-parsechangelog | sed -n 's/^Source: //p') VERSION := $(shell dpkg-parsechangelog | sed -ne 's/^Version: \(.*\)+.*/\1/p') FULLDEBVERSION := $(shell dpkg-parsechangelog | sed -ne 's/^Version: \(.*-.*\)/\1/p') CONFIGURE_OPTS := --with-omni=/usr --disable-dbcreate --disable-java --with-doxygen --disable-jpegmmx export DEB_LDFLAGS_MAINT_STRIP = -Wl,-Bsymbolic-functions sql: ./configure $(CONFIGURE_OPTS) # use this target to generate the dbconfig-common upgrade script once the debian/changelog is ok cat cppserver/database/stored_proc.sql\ cppserver/database/update_db.sql > debian/mysql/$(FULLDEBVERSION) $(MAKE) distclean override_dh_auto_configure: dh_auto_configure -- $(CONFIGURE_OPTS) override_dh_auto_install: dh_auto_install --destdir="$(CURDIR)/debian/tmp/" # install dbconfig-common scripts install -d debian/tmp/usr/share/dbconfig-common/data/tango-db/install install -p -m 644 $(CURDIR)/$(BUILDROOT)/cppserver/database/create_db.sql debian/tmp/usr/share/dbconfig-common/data/tango-db/install/mysql install -d debian/tmp/usr/share/dbconfig-common/data/tango-db/upgrade/mysql install -p -m 644 debian/mysql/* debian/tmp/usr/share/dbconfig-common/data/tango-db/upgrade/mysql # install scripts used during the configuration install -d debian/tmp/usr/share/tango-db install -p -m 644 $(CURDIR)/$(BUILDROOT)/cppserver/database/create_db_tables.sql debian/tmp/usr/share/tango-db/create_db_tables.sql install -p -m 644 $(CURDIR)/$(BUILDROOT)/cppserver/database/stored_proc.sql debian/tmp/usr/share/tango-db/stored_proc.sql install -p -m 600 $(CURDIR)/$(BUILDROOT)/cppserver/database/my.cnf debian/tmp/usr/share/tango-db/my.cnf override_dh_strip: dh_strip -plibtango8 --dbg-package=libtango8-dbg dh_strip -pliblog4tango5 --dbg-package=liblog4tango5-dbg dh_strip -ptango-db --dbg-package=tango-db-dbg dh_strip -ptango-starter --dbg-package=tango-starter-dbg dh_strip -ptango-accesscontrol --dbg-package=tango-accesscontrol-dbg dh_strip -ptango-test --dbg-package=tango-test-dbg dh_strip -a -Nlibtango8 -Nliblog4tango5 -Ntango-db -Ntango-starter -Ntango-accesscontrol -Ntango-test override_dh_installinit: # the tango-accesscontrol device must be started after the tango-db. dh_installinit -ptango-accesscontrol --update-rcd-params="defaults 25" # the tango-starter device must be started after the tango-db and the tango-accesscontrol. dh_installinit -ptango-starter --update-rcd-params="defaults 30" dh_installinit -a -Ntango-accesscontrol -Ntango-starter %: dh $@ --builddirectory=$(BUILDROOT) --with autoreconf .PHONY: get-orig-source debian/tango-db.postinst0000664000000000000000000000055112167063434012477 0ustar #!/bin/sh set -e . /usr/share/debconf/confmodule . /usr/share/dbconfig-common/dpkg/postinst.mysql # Create the .my.cnf file dbc_generate_include="template:/var/lib/tango/.my.cnf" dbc_generate_include_args="-o template_infile=/usr/share/tango-db/my.cnf" dbc_generate_include_owner="tango:tango" dbc_generate_include_perms="600" dbc_go tango-db $@ #DEBHELPER# debian/repack.stub0000775000000000000000000000325112167063434011346 0ustar #!/bin/sh : <<=cut =pod =head1 NAME repack.stub - script to repack upstream tarballs from uscan =head1 INSTRUCTIONS put this in debian/repack.stub and add "debian sh debian/repack.stub" to the end of the line in debian/watch. you will also need to add a version mangle to debian/watch. then create a debian/repack.local. this is a shell script that is sources under "set -e", so be careful to check returns codes. =head1 FUNCTIONS =over 4 =item rm rm is replaced by a function that does some magic ("rm -rv" by default), but also changes MANIFEST if $MANIFEST is 1 =item mv mv is replaced by a function that just does mv (by default), but also changes MANIFEST if $MANIFEST is 1 =item requires_version requires_version is there for future usage for requiring certain versions of the script =back =head1 VARIABLES =over 4 =item SUFFIX defaults to +dfsg what to append to the upstream version =item RM_OPTS defaults to -vrf options to pass to rm =item MANIFEST defaults to 0, set to 1 to turn on. this will manipulate MANIFEST files in CPAN tarballs. =item UP_BASE this is the directory where the upstream source is. =back =cut if [ -z "$REPACK_SH" ]; then if [ -f ../../scripts/repack.sh ]; then REPACK_SH=../../scripts/repack.sh fi if [ -z "$REPACK_SH" ] && which repack.sh > /dev/null; then REPACK_SH=$(which repack.sh) fi fi if [ ! -f "$REPACK_SH" ]; then echo "Couldn't find a repack.sh. please put it in your PATH, put it at ../../scripts/repack.sh, or put it somewhere else and set the REPACK_SH variable" echo "You can get it from http://svn.debian.org/viewsvn/pkg-perl/scripts/repack.sh" exit 1 fi exec "$REPACK_SH" "$@" debian/libtango8-dev.install0000664000000000000000000000014012167063434013224 0ustar usr/include/tango/*.* usr/include/tango/idl usr/lib/*/libtango*.so usr/lib/*/pkgconfig/tango.pc debian/libtango8.install0000664000000000000000000000003012167063434012446 0ustar usr/lib/*/libtango.so.*