This commit was manufactured by cvs2svn to create tag 'glite-lb_R_2_0_7_1'. glite-lb_R_2_0_7_1
authorcvs2svn <admin@example.com>
Fri, 12 Mar 2010 10:33:10 +0000 (10:33 +0000)
committercvs2svn <admin@example.com>
Fri, 12 Mar 2010 10:33:10 +0000 (10:33 +0000)
Sprout from branch_2_0 2010-01-05 15:46:47 UTC František Dvořák <valtri@civ.zcu.cz> 'Update test utility too (for make check).'
Cherrypick from branch_2_0 2009-06-05 13:02:20 UTC Jiří Filipovič <fila@ics.muni.cz> 'Updated man pages at branch_2_0':
    org.glite.lb.doc/examples/Makefile
    org.glite.lb.doc/examples/notif_example.c
    org.glite.lb.doc/src/LBAG-Installation.tex
    org.glite.lb.logger/config/startup
    org.glite.lb.logger/doc/glite-lb-interlogd.8
    org.glite.lb.logger/doc/glite-lb-logd.8
    org.glite.lb.logger/src/il_master.c
    org.glite.lb.logger/src/interlogd.c
    org.glite.lb.logger/src/interlogd.h
    org.glite.lb.logger/src/logd.c
    org.glite.lb.logger/src/recover.c
    org.glite.lb.server/config/startup
    org.glite.lb.server/src/ws_typeref.c.T
    org.glite.lb.types/Makefile
    org.glite.lb.types/at3.in
    org.glite.lb.ws-test/Makefile
Cherrypick from branch_2_0 2010-03-12 10:33:08 UTC cvs2svn <admin@example.com> 'This commit was manufactured by cvs2svn to create branch 'branch_2_0'.':
    org.glite.lb.harvester/Makefile
    org.glite.lb.harvester/doc/INSTALL
    org.glite.lb.harvester/doc/README
    org.glite.lb.harvester/examples/test.sh
    org.glite.lb.harvester/examples/test.sql
    org.glite.lb.harvester/project/package.description
    org.glite.lb.harvester/project/package.summary
    org.glite.lb.harvester/src/harvester.c
Cherrypick from master 2010-01-04 14:36:43 UTC Zdeněk Šustr <sustr4@cesnet.cz> 'Mismatched entries -- fixed.':
    org.glite.lb.harvester/configure
    org.glite.lb.harvester/project/ChangeLog
    org.glite.lb.harvester/project/version.properties
Delete:
    org.glite.jobid.api-c/Makefile
    org.glite.jobid.api-c/configure
    org.glite.jobid.api-c/interface/cjobid.h
    org.glite.jobid.api-c/interface/strmd5.h
    org.glite.jobid.api-c/project/ChangeLog
    org.glite.jobid.api-c/project/version.properties
    org.glite.jobid.api-c/src/cjobid.c
    org.glite.jobid.api-c/src/md32_common.h
    org.glite.jobid.api-c/src/md5.h
    org.glite.jobid.api-c/src/md5_dgst.c
    org.glite.jobid.api-c/src/md5_locl.h
    org.glite.jobid.api-c/src/strmd5.c
    org.glite.jobid.api-c/test/base64_test.cpp
    org.glite.jobid.api-cpp/Makefile
    org.glite.jobid.api-cpp/configure
    org.glite.jobid.api-cpp/interface/JobId.h
    org.glite.jobid.api-cpp/project/ChangeLog
    org.glite.jobid.api-cpp/project/version.properties
    org.glite.jobid.api-java/Makefile
    org.glite.jobid.api-java/build.xml
    org.glite.jobid.api-java/configure
    org.glite.jobid.api-java/nbproject/build-impl.xml
    org.glite.jobid.api-java/nbproject/genfiles.properties
    org.glite.jobid.api-java/nbproject/private/config.properties
    org.glite.jobid.api-java/nbproject/private/private.properties
    org.glite.jobid.api-java/nbproject/private/private.xml
    org.glite.jobid.api-java/nbproject/project.properties
    org.glite.jobid.api-java/nbproject/project.xml
    org.glite.jobid.api-java/project/ChangeLog
    org.glite.jobid.api-java/project/version.properties
    org.glite.jobid.api-java/src/org/glite/jobid/CheckedString.java
    org.glite.jobid.api-java/src/org/glite/jobid/ExampleJobid.java
    org.glite.jobid.api-java/src/org/glite/jobid/Jobid.java
    org.glite.jobid/project/version.properties
    org.glite.lb.client-java/Makefile
    org.glite.lb.client-java/README
    org.glite.lb.client-java/build.xml
    org.glite.lb.client-java/compile.sh
    org.glite.lb.client-java/configure
    org.glite.lb.client-java/nbproject/build-impl.xml
    org.glite.lb.client-java/nbproject/genfiles.properties
    org.glite.lb.client-java/nbproject/private/config.properties
    org.glite.lb.client-java/nbproject/private/private.properties
    org.glite.lb.client-java/nbproject/project.properties
    org.glite.lb.client-java/nbproject/project.xml
    org.glite.lb.client-java/project/ChangeLog
    org.glite.lb.client-java/project/genEventTypes.pl
    org.glite.lb.client-java/project/version.properties
    org.glite.lb.client-java/src/org/glite/lb/Context.java
    org.glite.lb.client-java/src/org/glite/lb/ContextIL.java
    org.glite.lb.client-java/src/org/glite/lb/ContextLL.java
    org.glite.lb.client-java/src/org/glite/lb/Event.java
    org.glite.lb.client-java/src/org/glite/lb/ILFileWriter.java
    org.glite.lb.client-java/src/org/glite/lb/ProducerTestIL.java
    org.glite.lb.client-java/src/org/glite/lb/ProducerTestLL.java
    org.glite.lb.client-java/src/org/glite/lb/SSL.java
    org.glite.lb.client-java/src/org/glite/lb/SSLSend.java
    org.glite.lb.client-java/src/org/glite/lb/SeqCode.java
    org.glite.lb.client-java/src/org/glite/lb/Sources.java
    org.glite.lb.client-java/src_c/Makefile
    org.glite.lb.client-java/src_c/send_via_proxy.c
    org.glite.lb.client-java/src_c/send_via_socket.c
    org.glite.lbjp-common.db/.cvsignore
    org.glite.lbjp-common.db/LICENSE
    org.glite.lbjp-common.db/Makefile
    org.glite.lbjp-common.db/configure
    org.glite.lbjp-common.db/doc/C.dox
    org.glite.lbjp-common.db/examples/db_expire.c
    org.glite.lbjp-common.db/examples/db_test.c
    org.glite.lbjp-common.db/interface/db-int.h
    org.glite.lbjp-common.db/interface/db.h
    org.glite.lbjp-common.db/project/ChangeLog
    org.glite.lbjp-common.db/project/get_soname.sh
    org.glite.lbjp-common.db/project/version.properties
    org.glite.lbjp-common.db/src/db-mysql.c
    org.glite.lbjp-common.db/src/db-pg.c
    org.glite.lbjp-common.db/src/db.c
    org.glite.lbjp-common.jp-interface/Makefile
    org.glite.lbjp-common.jp-interface/build.xml
    org.glite.lbjp-common.jp-interface/configure
    org.glite.lbjp-common.jp-interface/interface/attr.h
    org.glite.lbjp-common.jp-interface/interface/backend.h
    org.glite.lbjp-common.jp-interface/interface/builtin_plugins.h
    org.glite.lbjp-common.jp-interface/interface/context.h
    org.glite.lbjp-common.jp-interface/interface/file_plugin.h
    org.glite.lbjp-common.jp-interface/interface/indexdb.h
    org.glite.lbjp-common.jp-interface/interface/known_attr.h
    org.glite.lbjp-common.jp-interface/interface/type_plugin.h
    org.glite.lbjp-common.jp-interface/interface/types.h
    org.glite.lbjp-common.jp-interface/project/ChangeLog
    org.glite.lbjp-common.jp-interface/project/version.properties
    org.glite.lbjp-common.jp-interface/src/attr.c
    org.glite.lbjp-common.jp-interface/src/context.c
    org.glite.lbjp-common.jp-interface/src/indexdb.c
    org.glite.lbjp-common.jp-interface/src/utils.c
    org.glite.lbjp-common.jp-interface/test/type_test.cpp
    org.glite.lbjp-common.maildir/.cvsignore
    org.glite.lbjp-common.maildir/Makefile
    org.glite.lbjp-common.maildir/configure
    org.glite.lbjp-common.maildir/interface/maildir.h
    org.glite.lbjp-common.maildir/project/ChangeLog
    org.glite.lbjp-common.maildir/project/version.properties
    org.glite.lbjp-common.maildir/src/maildir.c
    org.glite.lbjp-common.server-bones/.cvsignore
    org.glite.lbjp-common.server-bones/Makefile
    org.glite.lbjp-common.server-bones/configure
    org.glite.lbjp-common.server-bones/examples/cnt_example.c
    org.glite.lbjp-common.server-bones/examples/srv_example.c
    org.glite.lbjp-common.server-bones/interface/srvbones.h
    org.glite.lbjp-common.server-bones/project/ChangeLog
    org.glite.lbjp-common.server-bones/project/version.properties
    org.glite.lbjp-common.server-bones/src/srvbones.c
    org.glite.lbjp-common.trio/.cvsignore
    org.glite.lbjp-common.trio/LICENSE
    org.glite.lbjp-common.trio/Makefile
    org.glite.lbjp-common.trio/configure
    org.glite.lbjp-common.trio/interface/escape.h
    org.glite.lbjp-common.trio/interface/trio.h
    org.glite.lbjp-common.trio/project/ChangeLog
    org.glite.lbjp-common.trio/project/version.properties
    org.glite.lbjp-common.trio/src/escape.c
    org.glite.lbjp-common.trio/src/strio.c
    org.glite.lbjp-common.trio/src/strio.h
    org.glite.lbjp-common.trio/src/trio.c
    org.glite.lbjp-common.trio/src/triop.h
    org.glite.lbjp-common.trio/test/trio_test.cpp
    org.glite.lbjp-common/project/version.properties

153 files changed:
org.glite.jobid.api-c/Makefile [deleted file]
org.glite.jobid.api-c/configure [deleted file]
org.glite.jobid.api-c/interface/cjobid.h [deleted file]
org.glite.jobid.api-c/interface/strmd5.h [deleted file]
org.glite.jobid.api-c/project/ChangeLog [deleted file]
org.glite.jobid.api-c/project/version.properties [deleted file]
org.glite.jobid.api-c/src/cjobid.c [deleted file]
org.glite.jobid.api-c/src/md32_common.h [deleted file]
org.glite.jobid.api-c/src/md5.h [deleted file]
org.glite.jobid.api-c/src/md5_dgst.c [deleted file]
org.glite.jobid.api-c/src/md5_locl.h [deleted file]
org.glite.jobid.api-c/src/strmd5.c [deleted file]
org.glite.jobid.api-c/test/base64_test.cpp [deleted file]
org.glite.jobid.api-cpp/Makefile [deleted file]
org.glite.jobid.api-cpp/configure [deleted file]
org.glite.jobid.api-cpp/interface/JobId.h [deleted file]
org.glite.jobid.api-cpp/project/ChangeLog [deleted file]
org.glite.jobid.api-cpp/project/version.properties [deleted file]
org.glite.jobid.api-java/Makefile [deleted file]
org.glite.jobid.api-java/build.xml [deleted file]
org.glite.jobid.api-java/configure [deleted file]
org.glite.jobid.api-java/nbproject/build-impl.xml [deleted file]
org.glite.jobid.api-java/nbproject/genfiles.properties [deleted file]
org.glite.jobid.api-java/nbproject/private/config.properties [deleted file]
org.glite.jobid.api-java/nbproject/private/private.properties [deleted file]
org.glite.jobid.api-java/nbproject/private/private.xml [deleted file]
org.glite.jobid.api-java/nbproject/project.properties [deleted file]
org.glite.jobid.api-java/nbproject/project.xml [deleted file]
org.glite.jobid.api-java/project/ChangeLog [deleted file]
org.glite.jobid.api-java/project/version.properties [deleted file]
org.glite.jobid.api-java/src/org/glite/jobid/CheckedString.java [deleted file]
org.glite.jobid.api-java/src/org/glite/jobid/ExampleJobid.java [deleted file]
org.glite.jobid.api-java/src/org/glite/jobid/Jobid.java [deleted file]
org.glite.jobid/project/version.properties [deleted file]
org.glite.lb.client-java/Makefile [deleted file]
org.glite.lb.client-java/README [deleted file]
org.glite.lb.client-java/build.xml [deleted file]
org.glite.lb.client-java/compile.sh [deleted file]
org.glite.lb.client-java/configure [deleted file]
org.glite.lb.client-java/nbproject/build-impl.xml [deleted file]
org.glite.lb.client-java/nbproject/genfiles.properties [deleted file]
org.glite.lb.client-java/nbproject/private/config.properties [deleted file]
org.glite.lb.client-java/nbproject/private/private.properties [deleted file]
org.glite.lb.client-java/nbproject/project.properties [deleted file]
org.glite.lb.client-java/nbproject/project.xml [deleted file]
org.glite.lb.client-java/project/ChangeLog [deleted file]
org.glite.lb.client-java/project/genEventTypes.pl [deleted file]
org.glite.lb.client-java/project/version.properties [deleted file]
org.glite.lb.client-java/src/org/glite/lb/Context.java [deleted file]
org.glite.lb.client-java/src/org/glite/lb/ContextIL.java [deleted file]
org.glite.lb.client-java/src/org/glite/lb/ContextLL.java [deleted file]
org.glite.lb.client-java/src/org/glite/lb/Event.java [deleted file]
org.glite.lb.client-java/src/org/glite/lb/ILFileWriter.java [deleted file]
org.glite.lb.client-java/src/org/glite/lb/ProducerTestIL.java [deleted file]
org.glite.lb.client-java/src/org/glite/lb/ProducerTestLL.java [deleted file]
org.glite.lb.client-java/src/org/glite/lb/SSL.java [deleted file]
org.glite.lb.client-java/src/org/glite/lb/SSLSend.java [deleted file]
org.glite.lb.client-java/src/org/glite/lb/SeqCode.java [deleted file]
org.glite.lb.client-java/src/org/glite/lb/Sources.java [deleted file]
org.glite.lb.client-java/src_c/Makefile [deleted file]
org.glite.lb.client-java/src_c/send_via_proxy.c [deleted file]
org.glite.lb.client-java/src_c/send_via_socket.c [deleted file]
org.glite.lb.doc/examples/Makefile
org.glite.lb.doc/examples/notif_example.c
org.glite.lb.doc/src/LBAG-Installation.tex
org.glite.lb.harvester/Makefile [new file with mode: 0644]
org.glite.lb.harvester/configure [moved from org.glite.lbjp-common.db/configure with 100% similarity]
org.glite.lb.harvester/doc/INSTALL [new file with mode: 0644]
org.glite.lb.harvester/doc/README [new file with mode: 0644]
org.glite.lb.harvester/examples/test.sh [new file with mode: 0755]
org.glite.lb.harvester/examples/test.sql [new file with mode: 0644]
org.glite.lb.harvester/project/ChangeLog [new file with mode: 0644]
org.glite.lb.harvester/project/package.description [new file with mode: 0644]
org.glite.lb.harvester/project/package.summary [new file with mode: 0644]
org.glite.lb.harvester/project/version.properties [new file with mode: 0644]
org.glite.lb.harvester/src/harvester.c [new file with mode: 0644]
org.glite.lb.logger/config/startup
org.glite.lb.logger/doc/glite-lb-interlogd.8
org.glite.lb.logger/doc/glite-lb-logd.8
org.glite.lb.logger/src/il_master.c
org.glite.lb.logger/src/interlogd.c
org.glite.lb.logger/src/interlogd.h
org.glite.lb.logger/src/logd.c
org.glite.lb.logger/src/recover.c
org.glite.lb.server/config/startup
org.glite.lb.server/src/ws_typeref.c.T
org.glite.lb.types/Makefile
org.glite.lb.types/at3.in
org.glite.lb.ws-test/Makefile
org.glite.lbjp-common.db/.cvsignore [deleted file]
org.glite.lbjp-common.db/LICENSE [deleted file]
org.glite.lbjp-common.db/Makefile [deleted file]
org.glite.lbjp-common.db/doc/C.dox [deleted file]
org.glite.lbjp-common.db/examples/db_expire.c [deleted file]
org.glite.lbjp-common.db/examples/db_test.c [deleted file]
org.glite.lbjp-common.db/interface/db-int.h [deleted file]
org.glite.lbjp-common.db/interface/db.h [deleted file]
org.glite.lbjp-common.db/project/ChangeLog [deleted file]
org.glite.lbjp-common.db/project/get_soname.sh [deleted file]
org.glite.lbjp-common.db/project/version.properties [deleted file]
org.glite.lbjp-common.db/src/db-mysql.c [deleted file]
org.glite.lbjp-common.db/src/db-pg.c [deleted file]
org.glite.lbjp-common.db/src/db.c [deleted file]
org.glite.lbjp-common.jp-interface/Makefile [deleted file]
org.glite.lbjp-common.jp-interface/build.xml [deleted file]
org.glite.lbjp-common.jp-interface/configure [deleted file]
org.glite.lbjp-common.jp-interface/interface/attr.h [deleted file]
org.glite.lbjp-common.jp-interface/interface/backend.h [deleted file]
org.glite.lbjp-common.jp-interface/interface/builtin_plugins.h [deleted file]
org.glite.lbjp-common.jp-interface/interface/context.h [deleted file]
org.glite.lbjp-common.jp-interface/interface/file_plugin.h [deleted file]
org.glite.lbjp-common.jp-interface/interface/indexdb.h [deleted file]
org.glite.lbjp-common.jp-interface/interface/known_attr.h [deleted file]
org.glite.lbjp-common.jp-interface/interface/type_plugin.h [deleted file]
org.glite.lbjp-common.jp-interface/interface/types.h [deleted file]
org.glite.lbjp-common.jp-interface/project/ChangeLog [deleted file]
org.glite.lbjp-common.jp-interface/project/version.properties [deleted file]
org.glite.lbjp-common.jp-interface/src/attr.c [deleted file]
org.glite.lbjp-common.jp-interface/src/context.c [deleted file]
org.glite.lbjp-common.jp-interface/src/indexdb.c [deleted file]
org.glite.lbjp-common.jp-interface/src/utils.c [deleted file]
org.glite.lbjp-common.jp-interface/test/type_test.cpp [deleted file]
org.glite.lbjp-common.maildir/.cvsignore [deleted file]
org.glite.lbjp-common.maildir/Makefile [deleted file]
org.glite.lbjp-common.maildir/configure [deleted file]
org.glite.lbjp-common.maildir/interface/maildir.h [deleted file]
org.glite.lbjp-common.maildir/project/ChangeLog [deleted file]
org.glite.lbjp-common.maildir/project/version.properties [deleted file]
org.glite.lbjp-common.maildir/src/maildir.c [deleted file]
org.glite.lbjp-common.server-bones/.cvsignore [deleted file]
org.glite.lbjp-common.server-bones/Makefile [deleted file]
org.glite.lbjp-common.server-bones/configure [deleted file]
org.glite.lbjp-common.server-bones/examples/cnt_example.c [deleted file]
org.glite.lbjp-common.server-bones/examples/srv_example.c [deleted file]
org.glite.lbjp-common.server-bones/interface/srvbones.h [deleted file]
org.glite.lbjp-common.server-bones/project/ChangeLog [deleted file]
org.glite.lbjp-common.server-bones/project/version.properties [deleted file]
org.glite.lbjp-common.server-bones/src/srvbones.c [deleted file]
org.glite.lbjp-common.trio/.cvsignore [deleted file]
org.glite.lbjp-common.trio/LICENSE [deleted file]
org.glite.lbjp-common.trio/Makefile [deleted file]
org.glite.lbjp-common.trio/configure [deleted file]
org.glite.lbjp-common.trio/interface/escape.h [deleted file]
org.glite.lbjp-common.trio/interface/trio.h [deleted file]
org.glite.lbjp-common.trio/project/ChangeLog [deleted file]
org.glite.lbjp-common.trio/project/version.properties [deleted file]
org.glite.lbjp-common.trio/src/escape.c [deleted file]
org.glite.lbjp-common.trio/src/strio.c [deleted file]
org.glite.lbjp-common.trio/src/strio.h [deleted file]
org.glite.lbjp-common.trio/src/trio.c [deleted file]
org.glite.lbjp-common.trio/src/triop.h [deleted file]
org.glite.lbjp-common.trio/test/trio_test.cpp [deleted file]
org.glite.lbjp-common/project/version.properties [deleted file]

diff --git a/org.glite.jobid.api-c/Makefile b/org.glite.jobid.api-c/Makefile
deleted file mode 100644 (file)
index cdeeda2..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-# Default values
-top_srcdir=..
-stagedir=.
-globalprefix=glite
-jobidprefix=jobid
-package=glite-jobid-api-c
-version=0.0.0
-
-CC:=gcc
-CXX:=g++
-
--include Makefile.inc
-
-VPATH=${top_srcdir}/src:${top_srcdir}/interface:${top_srcdir}/test
-CHECK_VERSION:=VERSION=${version} VERSION_AHEAD=0 perl ${top_srcdir}/project/check_version.pl
-
-DEBUG:=-g -O0 -Wall
-
-CFLAGS:=${DEBUG} \
-       -I${top_srcdir}/interface -I${top_srcdir}/src \
-       ${COVERAGE_FLAGS} \
-       -D_GNU_SOURCE
-
-COMPILE:=libtool --mode=compile ${CC} ${CFLAGS}
-CXXCOMPILE:=libtool --mode=compile ${CXX} ${CXXFLAGS}
-LINK:=libtool --mode=link ${CC} ${LDFLAGS} 
-LINKXX:=libtool --mode=link ${CXX} ${LDFLAGS}
-INSTALL:=libtool --mode=install install
-
-LIBOBJS:=cjobid.o strmd5.o 
-HDRS:=cjobid.h strmd5.h
-
-LIBLOBJS:=${LIBOBJS:.o=.lo}
-
-LIB:=libglite_jobid.la
-
-TEST_LIBS:=-L${cppunit_prefix}/lib -lcppunit -ldl
-TEST_INC:=-I${cppunit_prefix}/include
-
-compile all: ${LIB}
-
-offset=0
-version_info:=-version-info ${shell \
-       perl -e '$$,=":"; @F=split /\./,"${version}"; print $$F[0]+$$F[1]+${offset},$$F[2],$$F[1]' }
-
-${LIB}: ${LIBOBJS}
-       ${LINK} ${version_info} -o $@ ${LIBLOBJS} -rpath ${PREFIX}/lib 
-
-check: compile base64_test
-       ./base64_test base64_test.xml
-
-base64_test: %: %.cpp compile
-       ${CXX} -c ${CFLAGS} ${TEST_INC} $<
-       ${LINKXX} -o $@ $@.o ${LIB} ${TEST_LIBS}
-
-clean:
-       rm -rvf *.o *.lo .libs lib* *.c *.cpp *.h
-       rm -rvf log.xml project rpmbuild RPMS tgz
-
-install: ${LIB}
-       mkdir -p ${PREFIX}/lib
-       mkdir -p ${PREFIX}/include/${globalprefix}/${jobidprefix}
-       ${INSTALL} -m 644 ${LIB} ${PREFIX}/lib
-       (cd ${top_srcdir}/interface; ${INSTALL} -m 644 ${HDRS} ${PREFIX}/include/${globalprefix}/${jobidprefix})
-
-
-%.o: %.c
-       ${COMPILE} -o $@ -c $< 
-
-
-.PHONY: default all compile check install clean
diff --git a/org.glite.jobid.api-c/configure b/org.glite.jobid.api-c/configure
deleted file mode 100755 (executable)
index b3a5b00..0000000
+++ /dev/null
@@ -1,698 +0,0 @@
-#!/usr/bin/perl
-
-# WARNING: Don't edit this file unless it is the master copy in org.glite.lb
-#
-# For the purpose of standalone builds of lb/jobid/lbjp-common components
-# it is copied on tagging 
-
-# $Header$
-
-use Getopt::Long;
-
-my $pwd = `pwd`; chomp $pwd;
-my $prefix = $pwd.'/stage';
-my $stagedir;
-my $staged;
-my $module;
-my $thrflavour = 'gcc64dbgpthr';
-my $nothrflavour = 'gcc64dbg';
-my $mode = 'build';
-my $help = 0;
-my $listmodules;
-my $version;
-my $output;
-my $lb_tag = '';
-my $lbjp_tag = '';
-my $jp_tag = '';
-my $sec_tag = '';
-my $jobid_tag = '';
-my $libdir = 'lib';
-
-my @nodes = qw/client server logger utils doc ws-test db jpprimary jpindex jpclient/;
-my %enable_nodes;
-my %disable_nodes;
-
-my %extern_prefix = (
-       cares => '/opt/c-ares',
-       classads => '/opt/classads',
-       cppunit => '/usr',
-       expat => '/usr',
-       globus => '/opt/globus',
-       jglobus => '/opt/globus',
-       gsoap => '/usr',
-       mysql => '/usr',
-       'mysql-devel' => '',
-       'mysql-server' => '',
-       voms => '/opt/glite',
-       gridsite => '/opt/glite',
-       lcas => '/opt/glite',
-       ant => '/usr',
-       jdk => '/usr',
-       libtar => '/usr',
-);
-
-my %jar = (
-       'commons-codec' => '/usr/share/java/commons-codec-1.3.jar',
-);
-
-
-my %glite_prefix;
-my %need_externs;
-my %need_externs_type;
-my %need_jars;
-my %extrafull;
-my %extranodmod;
-my %deps;
-my %deps_type;
-my %topbuild;
-
-my %lbmodules = (
-       'lb' => [ qw/client common doc logger server state-machine types utils ws-interface ws-test/], 
-       'security' => [qw/gss gsoap-plugin/],
-       'lbjp-common' => [qw/db maildir server-bones trio jp-interface/],
-       'jobid' => [qw/api-c api-cpp/],
-       'jp' => [ qw/client doc index primary server-common ws-interface/ ],
-       );
-
-
-my @opts = (
-       'prefix=s' => \$prefix,
-       'staged=s' => \$staged,
-       'module=s' => \$module,
-       'thrflavour=s' => \$thrflavour,
-       'nothrflavour=s' => \$nothrflavour,
-       'mode=s' => \$mode,
-       'listmodules=s' => \$listmodules,
-       'version=s' => \$version,
-       'output=s' => \$output,
-       'stage=s' => \$stagedir,
-       'lb-tag=s' => \$lb_tag,
-       'lbjp-common-tag=s' => \$lbjp_tag,
-       'jp-tag=s' => \$jp_tag,
-       'security-tag=s' => \$sec_tag,
-       'jobid-tag=s' => \$jobid_tag,
-       'help' => \$help,
-       'libdir=s' => \$libdir,
-);
-
-for (@nodes) {
-       $enable_nodes{$_} = 0;
-       $disable_nodes{$_} = 0;
-       
-       push @opts,"disable-$_",\$disable_nodes{$_};
-       push @opts,"enable-$_",\$enable_nodes{$_};
-}
-
-push @opts,"with-$_=s",\$extern_prefix{$_} for keys %extern_prefix;
-push @opts,"with-$_=s",\$jar{$_} for keys %jar;
-
-my @keeparg = @ARGV;
-
-GetOptions @opts or die "Errors parsing command line\n";
-
-$extern_prefix{'mysql-devel'}=$extern_prefix{mysql} if $extern_prefix{'mysql-devel'} eq '';
-$extern_prefix{'mysql-server'}=$extern_prefix{mysql} if $extern_prefix{'mysql-server'} eq '';
-
-if ($help) { usage(); exit 0; }
-
-if ($listmodules) {
-       my @m = map "org.glite.$listmodules.$_",@{$lbmodules{$listmodules}};
-       print "@m\n";
-       exit 0;
-}
-
-warn "$0: --version and --output make sense only in --mode=etics\n"
-       if ($version || $output) && $mode ne 'etics';
-
-my $en;
-for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; }
-
-my $dis;
-for (keys %disable_nodes) { $dis = 1 if $disable_nodes{$_}; }
-
-die "--enable-* and --disable-* are mutually exclusive\n"
-       if $en && $dis;
-
-die "--module cannot be used with --enable-* or --disable-*\n"
-       if $module && ($en || $dis);
-
-die "$module: unknown module\n" if $module && ! grep $module,@{$lbmodules{lb}},@{$lbmodules{security}},{$lbmodules{jp}};
-
-if ($dis) {
-       for (@nodes) {
-               $enable_nodes{$_} = 1 unless $disable_nodes{$_};
-       }
-}
-
-if (!$en && !$dis) { $enable_nodes{$_} = 1 for (@nodes) } ;
-
-for (keys %enable_nodes) { delete $enable_nodes{$_} unless $enable_nodes{$_}; }
-
-$stagedir = $prefix unless $stagedir;
-
-if ($mode eq 'build') {
-       print "Writing config.status\n";
-       open CONF,">config.status" or die "config.status: $!\n";
-       print CONF "$0 @keeparg\n";
-       close CONF;
-}
-
-
-my @modules;
-my %aux;
-
-if ($module) {
-#      push @modules,split(/[,.]+/,$module);
-       push @modules,$module;
-}
-else {
-       @modules = map(($extranodmod{$_} ? $extranodmod{$_} : 'lb.'.$_),(keys %enable_nodes));
-       
-       my $n;
-
-       do {
-               local $"="\n";
-               $n = $#modules;
-               push @modules,(map @{$deps{$_}},@modules);
-
-               undef %aux; @aux{@modules} = (1) x ($#modules+1);
-               @modules = keys %aux;
-       } while ($#modules > $n);
-}
-
-@aux{@modules} = (1) x ($#modules+1);
-delete $aux{$_} for (split /,/,$staged);
-@modules = keys %aux;
-
-mode_build() if $mode eq 'build';
-mode_checkout() if $mode eq 'checkout';
-mode_etics($module) if $mode eq 'etics';
-
-sub mode_build {
-       print "\nBuilding modules: @modules\n";
-       
-       my @ext = map @{$need_externs{$_}},@modules;
-       my @myjars = map @{$need_jars{$_}},@modules;
-       undef %aux; @aux{@ext} = 1;
-       @ext = keys %aux;
-       undef %aux; @aux{@myjars} = (1) x ($#myjars+1);
-       @myjars = keys %aux;
-       
-       print "\nRequired externals:\n";
-       print "\t$_: $extern_prefix{$_}\n" for @ext;
-       print "\t$_: $jar{$_}\n" for @myjars;
-       print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n";
-       
-       mkinc($_) for @modules;
-       
-       print "Creating Makefile\n";
-       
-       open MAK,">Makefile" or die "Makefile: $!\n";
-       
-       print MAK "all: @modules\n\nclean:\n";
-       
-       for (@modules) {
-               my $full = full($_);
-               my $build = $topbuild{$_} ? '': '/build';
-               print MAK "\tcd $full$build && \${MAKE} clean\n"
-       }
-       
-       print MAK "\ndistclean:\n";
-       
-       for (@modules) {
-               my $full = full($_);
-               print MAK $topbuild{$_} ?
-                       "\tcd $full$build && \${MAKE} distclean\n" :
-                       "\trm -rf $full$build\n"
-       }
-       
-       print MAK "\n";
-       
-       for (@modules) {
-               my %ldeps; undef %ldeps;  
-               @ldeps{@{$deps{$_}}} = 1;
-               for my $x (split /,/,$staged) { delete $ldeps{$x}; }
-               my @dnames = $module ? () : keys %ldeps;
-       
-               my $full = full($_);
-               my $build = $topbuild{$_} ? '': '/build';
-       
-               print MAK "$_: @dnames\n\tcd $full$build && \${MAKE} && \${MAKE} install\n\n";
-       }
-       
-       close MAK;
-}
-       
-sub mode_checkout() {
-       for (@modules) {
-               my $module = $_;
-               my $tag = "";
-               if ($lb_tag){
-                       for (@{$lbmodules{lb}}){
-                               if ("lb.".$_ eq $module){
-                                       $tag = '-r '.$lb_tag;
-                               }
-                       }       
-               }
-               if ($lbjp_tag){
-                       for (@{$lbmodules{'lbjp-common'}}){
-                               if ("lbjp-common.".$_ eq $module){
-                                        $tag = '-r '.$lbjp_tag;
-                                }
-                       }
-               }
-               if ($jp_tag){
-                       for (@{$lbmodules{'jp'}}){
-                               if ("jp.".$_ eq $module){
-                                        $tag = '-r '.$jp_tag;
-                               }
-                        }
-               }
-               if ($sec_tag){
-                       for (@{$lbmodules{security}}){
-                               if ("security.".$_ eq $module){
-                                        $tag = '-r '.$sec_tag;
-                                }
-                       }
-               }
-               if ($jobid_tag){
-                       for (@{$lbmodules{jobid}}){
-                               if ("jobid.".$_ eq $module){
-                                        $tag = '-r '.$jobid_tag;
-                                }
-                       }
-               }
-               #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
-               #       print "found";
-               #}
-               $_ = full($_);
-               print "\n*** Checking out $_\n";
-               system("cvs checkout  $tag $_") == 0 or die "cvs checkout $tag $_: $?\n";
-       }
-}
-
-BEGIN{
-%need_externs_aux = (
-       'lb.client' => [ qw/cppunit:B classads/ ],
-       'lb.client-java' => [ qw/ant:B jglobus jdk:B/ ],
-       'lb.common' => [ qw/expat cppunit:B classads/ ],
-       'lb.doc' => [],
-       'lb.logger' => [ qw/cppunit:B/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite/ ],
-       'lb.state-machine' => [ qw/classads/ ],
-       'lb.utils' => [ qw/cppunit:B/ ],
-       'lb.ws-interface' => [],
-       'lb.ws-test' => [ qw/gsoap:B/ ],
-       'lb.types' => [ qw// ],
-       'lbjp-common.db' => [ qw/mysql:R mysql-devel:B/ ],
-       'lbjp-common.maildir' => [ qw// ],
-       'lbjp-common.server-bones' => [ qw// ],
-       'lbjp-common.trio' => [ qw/cppunit:B/ ],
-       'lbjp-common.jp-interface' => [ qw/cppunit:B/ ],
-       'security.gss' =>  [ qw/globus_essentials:R globus:B cares cppunit:B/ ],
-       'security.gsoap-plugin' =>  [ qw/cppunit:B globus_essentials:R globus:B cares gsoap:B/ ],
-       'jobid.api-c' =>  [ qw/cppunit:B/ ],
-       'jobid.api-cpp' =>  [ qw/cppunit:B/ ],
-       'jobid.api-java' =>  [ qw/ant:B jdk:B/ ],
-       'jp.client' => [ qw/gsoap libtar globus_essentials:R globus:B/ ],
-        'jp.doc' => [],
-        'jp.index' => [ qw/gsoap globus_essentials:R globus:B/ ],
-        'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
-        'jp.server-common' => [],
-        'jp.ws-interface' => [],
-);
-
-for my $ext (keys %need_externs_aux) {
-       for (@{$need_externs_aux{$ext}}) {
-               /([^:]*)(?::(.*))?/;
-               push @{$need_externs{$ext}},$1;
-               my $type = $2 ? $2 : 'BR';
-               $need_externs_type{$ext}->{$1} = $type;
-       }
-}
-
-%need_jars = (
-       'jobid.api-java' => [ qw/commons-codec/ ],
-);
-
-for my $jar (keys %need_jars) {
-       for (@{$need_jars{$jar}}) {
-               $need_externs_type{$jar}->{$_} = 'BR';  # XXX
-       }
-}
-
-%deps_aux = (
-       'lb.client' => [ qw/
-               lb.types:B lb.common
-               lbjp-common.trio
-               jobid.api-cpp jobid.api-c
-               security.gss
-       / ],
-       'lb.client-java' => [ qw/
-               lb.types:B
-               jobid.api-java
-       / ],
-       'lb.common' => [ qw/
-               jobid.api-cpp jobid.api-c
-               lb.types:B lbjp-common.trio security.gss
-       / ],
-       'lb.doc' => [ qw/lb.types:B/ ],
-       'lb.logger' => [ qw/
-               lbjp-common.trio
-               jobid.api-c
-               lb.common
-               security.gss
-       / ],
-       'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
-               lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir
-               jobid.api-c
-               security.gsoap-plugin security.gss
-       / ],
-       'lb.state-machine' => [ qw/lb.types:B lb.common lbjp-common.jp-interface security.gss/ ],
-       'lb.utils' => [ qw/
-               lbjp-common.jp-interface
-               jobid.api-c
-               lbjp-common.trio lbjp-common.maildir
-               lb.client lb.state-machine
-       / ],
-       'lb.ws-test' => [ qw/security.gsoap-plugin lb.ws-interface/ ],
-       'lb.ws-interface' => [ qw/lb.types:B/ ],
-       'lb.types' => [ qw// ],
-       'lbjp-common.db' => [ qw/lbjp-common.trio/ ],
-       'lbjp-common.maildir' => [ qw// ],
-       'lbjp-common.server-bones' => [ qw// ],
-       'lbjp-common.trio' => [ qw// ],
-       'security.gss' =>  [ qw// ],
-       'security.gsoap-plugin' =>  [ qw/security.gss/ ],
-       'jobid.api-c' =>  [ qw// ],
-       'jobid.api-cpp' =>  [ qw/jobid.api-c/ ],
-       'jobid.api-java' =>  [ qw// ],
-
-       'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ],
-
-       'jp.client' => [ qw/
-                jp.ws-interface
-                lbjp-common.jp-interface lbjp-common.maildir
-                jobid.api-c
-                security.gsoap-plugin
-        / ],
-       'jp.doc' => [ qw// ],
-       'jp.index' => [ qw/
-                jp.server-common jp.ws-interface
-                lbjp-common.jp-interface lbjp-common.trio lbjp-common.db lbjp-common.server-bones
-                security.gsoap-plugin
-        / ],
-       'jp.primary' => [ qw/
-                jobid.api-c
-                jp.server-common jp.ws-interface
-                lb.state-machine
-                lbjp-common.jp-interface lbjp-common.trio lbjp-common.db lbjp-common.server-bones
-                security.gsoap-plugin
-        / ],
-       'jp.server-common' => [ qw/ 
-                lbjp-common.jp-interface lbjp-common.db
-        / ],
-       'jp.ws-interface' => [ qw// ],
-);
-
-for my $ext (keys %deps_aux) {
-       for (@{$deps_aux{$ext}}) {
-               /([^:]*)(?::(.*))?/;
-               push @{$deps{$ext}},$1;
-               my $type = $2 ? $2 : 'BR';
-               $deps_type{$ext}->{$1} = $type;
-       }
-}
-
-
-%extrafull = ( gridsite=>'org.gridsite.core');
-
-#( java => 'client-java' );
-%extranodmod = (
-       db => 'lbjp-common.db',
-       jpprimary => 'jp.primary',
-       jpindex => 'jp.index',
-       jpclient => 'jp.client',
-);
-
-my @t = qw/lb.client-java jobid.api-java lb.types/;
-@topbuild{@t} = (1) x ($#t+1);
-}
-
-sub full
-{
-       my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
-}
-
-sub mkinc
-{
-       my %aux;
-       undef %aux;
-       my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java
-security.gss security.gsoap-plugin
-jobid.api-c jobid.api-cpp jobid.api-java
-lbjp-common.db lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface
-jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-/;
-       @aux{@m} = (1) x ($#m+1);
-
-       my $short = shift;
-       my $full = full $short;
-
-       unless ($aux{$short}) {
-               print "Makefile.inc not needed in $full\n";
-               return;
-       }
-
-       my $build = '';
-       
-       unless ($topbuild{$_}) {
-               $build = '/build';
-               unless (-d "$full/build") {
-                       mkdir "$full/build" or die "mkdir $full/build: $!\n";
-               }
-               unlink "$full/build/Makefile";
-               symlink "../Makefile","$full/build/Makefile" or die "symlink ../Makefile $full/build/Makefile: $!\n";
-       }
-
-       open MKINC,">$full$build/Makefile.inc"
-               or die "$full$build/Makefile.inc: $!\n";
-
-       print "Creating $full$build/Makefile.inc\n";
-
-       print MKINC qq{
-PREFIX = $prefix
-stagedir = $stagedir
-thrflavour = $thrflavour
-nothrflavour = $nothrflavour
-libdir = $libdir
-};
-
-       for (@{$need_externs{$short}}) {
-               print MKINC "${_}_prefix = $extern_prefix{$_}\n"
-       }
-
-       for (@{$need_jars{$short}}) {
-               print MKINC "${_}_jar = $jar{$_}\n"
-       }
-
-       my $need_gsoap = 0;
-       for (@{$need_externs{$short}})  { $need_gsoap = 1 if $_ eq 'gsoap'; }
-
-       print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
-
-       close MKINC;
-}
-
-my %etics_externs;
-my %etics_projects;
-BEGIN{
-       %etics_externs = (
-               globus_essentials=>'vdt_globus_essentials',
-               globus=>'globus',
-               cares=>'c-ares',
-               voms=>'org.glite.security.voms-api-cpp',
-               gridsite=>'org.gridsite.shared',
-               lcas=>'org.glite.security.lcas',
-       );
-       %etics_projects = (
-               vdt=>[qw/globus globus_essentials/],
-               'org.glite'=>[qw/voms gridsite lcas/],
-       );
-};
-
-sub mode_etics {
-       $fmod = shift;
-
-       die "$0: --module required with --etics\n" unless $fmod;
-       
-       my ($subsys,$module) = split /\./,$fmod;
-
-       my ($major,$minor,$rev,$age);
-
-       if ($version) {
-               $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/;
-               ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
-       }
-       else { 
-               open V,"org.glite.$subsys.$module/project/version.properties"
-                       or die "org.glite.$subsys.$module/project/version.properties: $!\n";
-       
-               while ($_ = <V>) {
-                       chomp;
-                       ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
-               }
-               close V;
-       }
-
-       my @copts = ();
-       my %ge;
-       @ge{@{$etics_projects{'org.glite'}}} = (1) x ($#{$etics_projects{'org.glite'}}+1);
-
-       for (@{$need_externs{"$subsys.$module"}}) {
-           if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
-           }
-       }
-
-       for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-
-               push @copts,"--with-$_ \${$eext.location}/$_*.jar";
-       }
-
-
-       my $conf = "glite-$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
-       my $file = $output ? $output : "$conf.ini";
-       open C,">$file" or die "$file: $!\n";
-
-       my $buildroot = $topbuild{"$subsys.$module"} ? '' : "build.root = build\n";
-
-       my $confdir = $topbuild{"$subsys.$module"} ? '..' : '../..';
-
-       print STDERR "Writing $file\n";
-       print C qq{
-[Configuration-$conf]
-profile = None
-moduleName = org.glite.$subsys.$module
-displayName = $conf
-description = org.glite.$subsys.$module
-projectName = org.glite
-age = $age
-deploymentType = None
-tag = $conf
-version = $major.$minor.$rev
-path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz
-
-[Platform-default:VcsCommand]
-displayName = None
-description = None
-tag = cvs -d \${vcsroot} tag -R \${tag} \${moduleName}
-branch = None
-commit = None
-checkout = cvs -d \${vcsroot} co -r \${tag} \${moduleName}
-
-[Platform-default:BuildCommand]
-postpublish = None
-packaging = None
-displayName = None
-description = None
-doc = None
-prepublish = None
-publish = None
-compile = make
-init = None
-install = make install
-clean = make clean
-test = make check
-configure = cd $confdir && \${moduleName}/configure --thrflavour=\${globus.thr.flavor} --nothrflavour=\${globus.nothr.flavor} --prefix=\${prefix} --stage=\${stageDir} --libdir=\${libdir} --module $subsys.$module @copts
-checkstyle = None
-
-[Platform-default:Property]
-$buildroot
-
-[Platform-default:DynamicDependency]
-
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
-                       }
-               }
-
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
-               print C "$proj|$eext = $type\n";
-       }
-
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "org.glite|org.glite.$_ = $type\n";
-       }
-
-       close C;
-}
-
-sub gsoap_version {
-       local $_;
-       my $gsoap_version;
-       open S,"$extern_prefix{gsoap}/bin/soapcpp2 -v 2>&1 |" or die "$extern_prefix{gsoap}/bin/soapcpp2: $!\n";
-
-       while ($_ = <S>) {
-               chomp;
-
-               $gsoap_version = $1 if /The gSOAP Stub and Skeleton Compiler for C and C\+\+ ([.[:digit:][:alpha:]]+)$/;
-       }
-       close S;
-       return $gsoap_version;
-}
-
-
-sub usage {
-       my @ext = keys %extern_prefix;
-       my @myjars, keys %jar;
-
-       print STDERR qq{
-usage: $0 options
-
-General options (defaults in []):
-  --prefix=PREFIX              destination directory [./stage]
-  --staged=module,module,...   what is already in PREFIX (specify without org.glite.)
-  --thrflavour=flavour
-  --nothrflavour=flavour       threaded and non-treaded flavours [gcc64dbgpthr,gcc64dbg]
-  --listmodules=subsys          list modules of a subsystem
-  --libdir=libdir              typically [lib,lib64] postfix
-  
-Mode of operation:
-  --mode={checkout|build|etics}        what to do [build]
-  
-What to build:
-  --module=module              build this module only (mostly in-Etics operation)
-  --enable-NODE                        build this "node" (set of modules) only. Available nodes are
-                                       @{$lbmodules{lb}},@{$lbmodules{security}}
-  --disable-NODE               don't build this node
-  --lb-tag=tag                 checkout LB modules with specific tag
-  --jp-tag=tag                 checkout JP modules with specific tag
-  --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
-  --security-tag=tag           checkout security modules with specific tag
-  --jobid-tag=tag              checkout jobid modules with specific tag
-
-Dependencies:
-  --with-EXTERNAL=PATH         where to look for an external. Required externals
-                               (not all for all modules) are:
-                                       @ext
-  --with-JAR=JAR               where to look for jars. Required jars are:
-                                       @myjars
-                               Summary of what will be used is always printed
-
-};
-
-}
diff --git a/org.glite.jobid.api-c/interface/cjobid.h b/org.glite.jobid.api-c/interface/cjobid.h
deleted file mode 100755 (executable)
index 9b38c81..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-#ifndef _GLITE_JOBID_H
-#define _GLITE_JOBID_H
-
-/*!
- * \file cjobid.h
- * \brief L&B consumer API
- */
-
-#ident "$Header$"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct _edg_wlc_JobId *glite_jobid_t;
-typedef const struct _edg_wlc_JobId *glite_jobid_const_t;
-typedef glite_jobid_t edg_wlc_JobId;
-
-#define edg_wlc_JobIdCreate glite_jobid_create
-#define edg_wlc_JobIdRecreate glite_jobid_recreate
-#define edg_wlc_JobIdDup glite_jobid_dup
-#define edg_wlc_JobIdFree glite_jobid_free
-#define edg_wlc_JobIdParse glite_jobid_parse
-#define edg_wlc_JobIdUnparse glite_jobid_unparse
-#define edg_wlc_JobIdGetServer glite_jobid_getServer
-#define edg_wlc_JobIdGetServerParts glite_jobid_getServerParts
-#define edg_wlc_JobIdGetUnique glite_jobid_getUnique
-
-#define GLITE_JOBID_DEFAULT_PORT 9000 /**< Default port where bookkeeping server listens */
-#define GLITE_JOBID_PROTO_PREFIX "https://" /**< JobId protocol prefix */
-
-
-/* All the pointer functions return malloc'ed objects (or NULL on error) */
-
-/**
- * Create a Job ID.
- * See the lb_draft document for details on its construction and components
- * \param bkserver book keeping server hostname
- * \param port port for the bk service
- * \param jobid new created job id
- * \ret al 0 success
- * \retval EINVAL invalid bkserver
- * \retval ENOMEM if memory allocation fails
- */
-int glite_jobid_create(const char * bkserver, int port, glite_jobid_t * jobid);
-
-/**
- * Recreate a Job ID
- * \param bkserver bookkeeping server hostname
- * \param port port for the bk service
- * \param unique string which represent created jobid (if NULL then new
- * one is created)
- * \param jobid new created job id
- * \retval 0 success
- * \retval EINVAL invalid bkserver
- * \retval ENOMEM if memory allocation fails
- */
-int glite_jobid_recreate(const char *bkserver, int port, const char * unique, edg_wlc_JobId * jobid);
-
-/**
- * Create copy of Job ID
- * \param in jobid for duplication
- * \param jobid  duplicated jobid
- * \retval 0 for success
- * \retval EINVAL invalid jobid
- * \retval ENOMEM if memory allocation fails
- */
-int glite_jobid_dup(glite_jobid_const_t in, glite_jobid_t * jobid);
-
-/*
- * Free jobid structure
- * \param jobid for dealocation
- */
-void glite_jobid_free(glite_jobid_t jobid);
-
-/**
- * Parse Job ID string and creates jobid structure
- * \param jobidstr string representation of jobid
- * \param jobid parsed job id
- * \retval 0 for success
- * \retval EINVAL jobidstr can't be parsed
- * \retval ENOMEM if memory allocation fails
- */
-int glite_jobid_parse(const char* jobidstr, glite_jobid_t * jobid);
-
-/**
- * Unparse Job ID (produce the string form of JobId).
- * \param jobid to be converted to string
- * \return allocated string which represents jobid
- */
-char* glite_jobid_unparse(glite_jobid_const_t jobid);
-
-/**
- * Extract bookkeeping server address (address:port)
- * \param jobid from which the bkserver address should be extracted
- * \retval pointer to allocated string with bkserver address
- * \retval NULL if jobid is 0 or memory allocation fails
- */
-char* glite_jobid_getServer(glite_jobid_const_t jobid);
-
-/**
- * Extract bookkeeping server address and port
- * \param jobid from which the bkserver address should be extracted
- * \param srvName pointer where to return server name
- * \param srvPort pointer where to return server port
- *     */
-void glite_jobid_getServerParts(glite_jobid_const_t jobid, char **srvName, unsigned int *srvPort);
-
-/**
- * Extract bookkeeping server address and port
- * \param jobid from which the bkserver address should be extracted
- * \param srvName pointer where to return server name
- * \param srvPort pointer where to return server port
- *     */
-void glite_jobid_getServerParts_internal(glite_jobid_const_t jobid, char **srvName, unsigned int *srvPort);
-
-/**
- * Extract unique string 
- * \param jobid
- * \retval pointer to allocated unique string representing jobid
- * \retval NULL if jobid is 0 or memory allocation fails
- */
-char* glite_jobid_getUnique(glite_jobid_const_t jobid);
-
-/**
- * Extract unique string 
- * \param jobid
- * \retval pointer to allocated unique string representing jobid
- * \retval NULL if jobid is 0 or memory allocation fails
- */
-char* glite_jobid_getUnique_internal(glite_jobid_const_t jobid);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _GLITE_JOBID_H */
diff --git a/org.glite.jobid.api-c/interface/strmd5.h b/org.glite.jobid.api-c/interface/strmd5.h
deleted file mode 100755 (executable)
index 79a68c7..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef _GLITE_STRMD5_H
-#define _GLITE_STRMD5_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ident "$Header$"
-
-/* Compute MD5 sum of the first argument.
- * The sum is returned in the 16-byte array pointed to by 2nd argument
- *     (if not NULL)
- *
- * Return value: ASCII string of the sum, i.e. 32 characters [0-9a-f]
- *     (pointer to static area, changed by subsequent calls)
- */
-
-char *strmd5(const char *src, unsigned char *dst);
-
-/**
- * Returns: allocated 32bytes long ASCII string with md5 sum
- * of the first argument
- */
-char *str2md5(const char *src);
-
-/**
- * Returns: allocated 22bytes long ASCII string with md5 sum in base64
- * format of the source argument
- */
-char *str2md5base64(const char *src);
-
-int base64_encode(const void *enc, int enc_size, char *out, int out_max_size);
-int base64_decode(const char *enc,char *out,int out_size);
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* _GLITE_STRMD5_H */
diff --git a/org.glite.jobid.api-c/project/ChangeLog b/org.glite.jobid.api-c/project/ChangeLog
deleted file mode 100644 (file)
index 008dac5..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-1.0.0-1
-- ChangeLog created
-
-1.0.0-2
-- fixes in etics' invocation of configure
-
-1.0.0-4
-- configure script update
-
-1.0.1-1
-- additional includes in base64_test to fix build on Deb5
-
diff --git a/org.glite.jobid.api-c/project/version.properties b/org.glite.jobid.api-c/project/version.properties
deleted file mode 100644 (file)
index 59a8ad7..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# : /cvs/jra1mw/org.glite.jobid.api-c/project/version.properties,v 1.1 2009/01/16 08:48:52 zsustr Exp $
-module.version=1.0.1
-module.age=1
diff --git a/org.glite.jobid.api-c/src/cjobid.c b/org.glite.jobid.api-c/src/cjobid.c
deleted file mode 100644 (file)
index 62b52e4..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-#ident "$Header$"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <ctype.h>
-#include <netdb.h>
-#include <sys/time.h>
-#include <unistd.h>
-
-#include "cjobid.h"
-#include "strmd5.h"
-
-struct _edg_wlc_JobId {
-    char               *id;    /* unique job identification */
-    /* additional information */
-    char               *BShost;/* bookkeeping server hostname */
-    unsigned int       BSport; /* bookkeeping server port */
-    char               *info;  /* additional information (after ? in URI) */
-};
-
-int glite_jobid_create(const char *bkserver, int port, glite_jobid_t *jobId)
-{
-    return glite_jobid_recreate(bkserver, port, NULL, jobId);
-}
-
-
-int glite_jobid_recreate(const char* bkserver, int port, const char *unique, glite_jobid_t *jobId)
-{
-    glite_jobid_t out;
-    char hostname[200]; /* used to hold string for encrypt */
-    struct timeval tv;
-    int skip;
-    char* portbeg;
-
-    struct hostent* he;
-
-    if (!bkserver)
-        return EINVAL;
-
-    if (unique == NULL) {
-       gethostname(hostname, 100);
-       he = gethostbyname(hostname);
-       assert(he->h_length > 0);
-       gettimeofday(&tv, NULL);
-       srandom(tv.tv_usec);
-
-       skip = strlen(hostname);
-       skip += sprintf(hostname + skip, "-IP:0x%x-pid:%d-rnd:%d-time:%d:%d",
-                   *((int*)he->h_addr_list[0]), getpid(), (int)random(),
-                   (int)tv.tv_sec, (int)tv.tv_usec);
-    }
-
-    *jobId = NULL;
-    out = (glite_jobid_t) malloc (sizeof(*out));
-    if (!out)
-       return ENOMEM;
-
-    memset(out, 0, sizeof(*out));
-
-    /* check if it begins with prefix */
-    /* unsupported */
-    /* FIXME: fill in PROTO_PREFIX if missing */
-    if (strncmp(bkserver, GLITE_JOBID_PROTO_PREFIX, sizeof(GLITE_JOBID_PROTO_PREFIX)-1) == 0)
-        return EINVAL;
-
-    out->BShost = strdup(bkserver);
-    portbeg = strchr(out->BShost, ':');
-    if (portbeg) {
-       *portbeg = 0;
-        /* try to get port number */
-       if (port == 0)
-           port = atoi(portbeg + 1);
-    }
-
-    if (port == 0)
-        port = GLITE_JOBID_DEFAULT_PORT;
-
-    out->BSport = port;
-
-    out->id = (unique) ? strdup(unique) : str2md5base64(hostname);
-    //printf("Encrypt: %s\nBASE64 %s\n", hostname, out->id);
-
-    if (!out->id || !out->BShost) {
-       glite_jobid_free(out);
-       return ENOMEM;
-    }
-
-    *jobId = out;
-    return 0;
-}
-
-
-int glite_jobid_dup(glite_jobid_const_t in, glite_jobid_t *out)
-{
-    glite_jobid_t jid;
-    *out = NULL;
-    if (in == NULL)
-       return 0;
-
-    jid = malloc(sizeof(*jid));
-    if (!jid)
-       return ENOMEM;
-
-    memset(jid, 0,sizeof(*jid));
-    jid->BShost = strdup(in->BShost);
-    jid->id = strdup(in->id);
-    if (in->info)
-       jid->info = strdup(in->info);
-
-    if (jid->BShost == NULL || jid->id == NULL) {
-       glite_jobid_free(jid);
-       return ENOMEM;
-    }
-
-    jid->BSport = in->BSport;
-    *out = jid;
-    return 0;
-}
-
-
-// XXX
-// use recreate
-// parse name, port, unique
-int glite_jobid_parse(const char *idString, glite_jobid_t *jobId)
-{
-    char *pom, *pom1, *pom2;
-    glite_jobid_t out;
-
-    *jobId = NULL;
-
-    out = (glite_jobid_t) malloc (sizeof(*out));
-    if (out == NULL )
-       return ENOMEM;
-
-    memset(out,0,sizeof(*out));
-
-    if (strncmp(idString, GLITE_JOBID_PROTO_PREFIX, sizeof(GLITE_JOBID_PROTO_PREFIX) - 1)) {
-       out->BShost  = (char *) NULL;
-       out->BSport  = 0;
-
-       free(out);
-       return EINVAL;
-    }
-
-    pom = strdup(idString + sizeof(GLITE_JOBID_PROTO_PREFIX) - 1);
-    pom1 = strchr(pom, '/');
-    pom2 = strchr(pom, ':');
-
-    if (!pom1) { free(pom); free(out); return EINVAL; }
-
-    if ( pom2 && (pom1 > pom2)) {
-       pom[pom2-pom]     = '\0';
-       out->BShost  = strdup(pom);
-       pom[pom1-pom]     = '\0';
-       out->BSport  = (unsigned int) strtoul(pom2 + 1,NULL,10);
-    } else {
-       pom[pom1-pom]     = '\0';
-       out->BShost  = strdup(pom);
-       out->BSport  = GLITE_JOBID_DEFAULT_PORT;
-    }
-
-    /* XXX: localhost not supported in jobid 
-    if (!strncmp(out->BShost,"localhost",9) {
-       free(pom);
-       free(out->BShost);
-       free(out);
-       return EINVAL;
-    }
-    */
-
-    /* additional info from URI */
-    pom2 = strchr(pom1+1,'?');
-    if (pom2) {
-       *pom2 = 0;
-       out->info = strdup(pom2+1);
-    }
-
-    /* extract the unique part */
-    out->id = strdup(pom1+1);
-
-    for (pom1 = out->BShost; *pom1; pom1++)
-       if (isspace(*pom1)) break;
-
-    for (pom2 = out->id; *pom2; pom2++)
-       if (isspace(*pom2)) break;
-
-    if (*pom1 || *pom2) {
-           free(pom);
-           glite_jobid_free(out);
-           return EINVAL;
-    }
-
-    free(pom);
-    *jobId = out;
-    return 0;
-}
-
-
-void glite_jobid_free(glite_jobid_t job)
-{
-    if (job) {
-       free(job->id);
-       free(job->BShost);
-       free(job->info);
-       free(job);
-    }
-}
-
-
-char* glite_jobid_unparse(glite_jobid_const_t jobid)
-{
-    char *out, port[40];
-
-    if (!jobid)
-       return NULL;
-
-    if (jobid->BSport)
-       sprintf(port,":%d",jobid->BSport);
-    else
-        *port = 0;
-
-    asprintf(&out, GLITE_JOBID_PROTO_PREFIX"%s%s/%s%s%s",
-            jobid->BShost,port,
-            jobid->id,
-            (jobid->info ? "?" : ""),
-            (jobid->info ? jobid->info : ""));
-
-    return out;
-}
-
-
-char* glite_jobid_getServer(glite_jobid_const_t jobid)
-{
-    char *bs = NULL;
-
-    if (jobid)
-       asprintf(&bs, "%s:%u", jobid->BShost,
-                jobid->BSport ? jobid->BSport : GLITE_JOBID_DEFAULT_PORT);
-
-    return bs;
-}
-
-
-void glite_jobid_getServerParts(glite_jobid_const_t jobid, char **srvName, unsigned int *srvPort)
-{
-    if (jobid) {
-       *srvName = strdup(jobid->BShost);
-       *srvPort = jobid->BSport ? jobid->BSport : GLITE_JOBID_DEFAULT_PORT;
-    }
-}
-
-
-char* glite_jobid_getUnique(glite_jobid_const_t jobid)
-{
-    return jobid ? strdup(jobid->id) : NULL;
-}
-
-
-void glite_jobid_getServerParts_internal(glite_jobid_const_t jobid, char **srvName, unsigned int *srvPort)
-{
-    if (jobid) {
-       *srvName = jobid->BShost;
-       *srvPort = jobid->BSport ? jobid->BSport : GLITE_JOBID_DEFAULT_PORT;
-    }
-}
-
-
-char* glite_jobid_getUnique_internal(glite_jobid_const_t jobid)
-{
-    return jobid ? jobid->id : NULL;
-}
diff --git a/org.glite.jobid.api-c/src/md32_common.h b/org.glite.jobid.api-c/src/md32_common.h
deleted file mode 100644 (file)
index 0b8496f..0000000
+++ /dev/null
@@ -1,623 +0,0 @@
-/* crypto/md32_common.h */
-/* ====================================================================
- * Copyright (c) 1999-2002 The OpenSSL Project.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. All advertising materials mentioning features or use of this
- *    software must display the following acknowledgment:
- *    "This product includes software developed by the OpenSSL Project
- *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
- *
- * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
- *    endorse or promote products derived from this software without
- *    prior written permission. For written permission, please contact
- *    licensing@OpenSSL.org.
- *
- * 5. Products derived from this software may not be called "OpenSSL"
- *    nor may "OpenSSL" appear in their names without prior written
- *    permission of the OpenSSL Project.
- *
- * 6. Redistributions of any form whatsoever must retain the following
- *    acknowledgment:
- *    "This product includes software developed by the OpenSSL Project
- *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
- *
- * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- * ====================================================================
- *
- * This product includes cryptographic software written by Eric Young
- * (eay@cryptsoft.com).  This product includes software written by Tim
- * Hudson (tjh@cryptsoft.com).
- *
- */
-
-/*
- * This is a generic 32 bit "collector" for message digest algorithms.
- * Whenever needed it collects input character stream into chunks of
- * 32 bit values and invokes a block function that performs actual hash
- * calculations.
- *
- * Porting guide.
- *
- * Obligatory macros:
- *
- * DATA_ORDER_IS_BIG_ENDIAN or DATA_ORDER_IS_LITTLE_ENDIAN
- *     this macro defines byte order of input stream.
- * HASH_CBLOCK
- *     size of a unit chunk HASH_BLOCK operates on.
- * HASH_LONG
- *     has to be at lest 32 bit wide, if it's wider, then
- *     HASH_LONG_LOG2 *has to* be defined along
- * HASH_CTX
- *     context structure that at least contains following
- *     members:
- *             typedef struct {
- *                     ...
- *                     HASH_LONG       Nl,Nh;
- *                     HASH_LONG       data[HASH_LBLOCK];
- *                     unsigned int    num;
- *                     ...
- *                     } HASH_CTX;
- * HASH_UPDATE
- *     name of "Update" function, implemented here.
- * HASH_TRANSFORM
- *     name of "Transform" function, implemented here.
- * HASH_FINAL
- *     name of "Final" function, implemented here.
- * HASH_BLOCK_HOST_ORDER
- *     name of "block" function treating *aligned* input message
- *     in host byte order, implemented externally.
- * HASH_BLOCK_DATA_ORDER
- *     name of "block" function treating *unaligned* input message
- *     in original (data) byte order, implemented externally (it
- *     actually is optional if data and host are of the same
- *     "endianess").
- * HASH_MAKE_STRING
- *     macro convering context variables to an ASCII hash string.
- *
- * Optional macros:
- *
- * B_ENDIAN or L_ENDIAN
- *     defines host byte-order.
- * HASH_LONG_LOG2
- *     defaults to 2 if not states otherwise.
- * HASH_LBLOCK
- *     assumed to be HASH_CBLOCK/4 if not stated otherwise.
- * HASH_BLOCK_DATA_ORDER_ALIGNED
- *     alternative "block" function capable of treating
- *     aligned input message in original (data) order,
- *     implemented externally.
- *
- * MD5 example:
- *
- *     #define DATA_ORDER_IS_LITTLE_ENDIAN
- *
- *     #define HASH_LONG               MD5_LONG
- *     #define HASH_LONG_LOG2          MD5_LONG_LOG2
- *     #define HASH_CTX                MD5_CTX
- *     #define HASH_CBLOCK             MD5_CBLOCK
- *     #define HASH_LBLOCK             MD5_LBLOCK
- *     #define HASH_UPDATE             MD5_Update
- *     #define HASH_TRANSFORM          MD5_Transform
- *     #define HASH_FINAL              MD5_Final
- *     #define HASH_BLOCK_HOST_ORDER   md5_block_host_order
- *     #define HASH_BLOCK_DATA_ORDER   md5_block_data_order
- *
- *                                     <appro@fy.chalmers.se>
- */
-
-#if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN)
-#error "DATA_ORDER must be defined!"
-#endif
-
-#ifndef HASH_CBLOCK
-#error "HASH_CBLOCK must be defined!"
-#endif
-#ifndef HASH_LONG
-#error "HASH_LONG must be defined!"
-#endif
-#ifndef HASH_CTX
-#error "HASH_CTX must be defined!"
-#endif
-
-#ifndef HASH_UPDATE
-#error "HASH_UPDATE must be defined!"
-#endif
-#ifndef HASH_TRANSFORM
-#error "HASH_TRANSFORM must be defined!"
-#endif
-#ifndef HASH_FINAL
-#error "HASH_FINAL must be defined!"
-#endif
-
-#ifndef HASH_BLOCK_HOST_ORDER
-#error "HASH_BLOCK_HOST_ORDER must be defined!"
-#endif
-
-#if 0
-/*
- * Moved below as it's required only if HASH_BLOCK_DATA_ORDER_ALIGNED
- * isn't defined.
- */
-#ifndef HASH_BLOCK_DATA_ORDER
-#error "HASH_BLOCK_DATA_ORDER must be defined!"
-#endif
-#endif
-
-#ifndef HASH_LBLOCK
-#define HASH_LBLOCK    (HASH_CBLOCK/4)
-#endif
-
-#ifndef HASH_LONG_LOG2
-#define HASH_LONG_LOG2 2
-#endif
-
-/*
- * Engage compiler specific rotate intrinsic function if available.
- */
-#undef ROTATE
-#ifndef PEDANTIC
-# if defined(_MSC_VER) || defined(__ICC)
-#  define ROTATE(a,n)  _lrotl(a,n)
-# elif defined(__MWERKS__)
-#  if defined(__POWERPC__)
-#   define ROTATE(a,n) __rlwinm(a,n,0,31)
-#  elif defined(__MC68K__)
-    /* Motorola specific tweak. <appro@fy.chalmers.se> */
-#   define ROTATE(a,n) ( n<24 ? __rol(a,n) : __ror(a,32-n) )
-#  else
-#   define ROTATE(a,n) __rol(a,n)
-#  endif
-# elif defined(__GNUC__) && __GNUC__>=2 && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
-  /*
-   * Some GNU C inline assembler templates. Note that these are
-   * rotates by *constant* number of bits! But that's exactly
-   * what we need here...
-   *                                   <appro@fy.chalmers.se>
-   */
-#  if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
-#   define ROTATE(a,n) ({ register unsigned int ret;   \
-                               asm (                   \
-                               "roll %1,%0"            \
-                               : "=r"(ret)             \
-                               : "I"(n), "0"(a)        \
-                               : "cc");                \
-                          ret;                         \
-                       })
-#  elif defined(__powerpc) || defined(__ppc__) || defined(__powerpc64__)
-#   define ROTATE(a,n) ({ register unsigned int ret;   \
-                               asm (                   \
-                               "rlwinm %0,%1,%2,0,31"  \
-                               : "=r"(ret)             \
-                               : "r"(a), "I"(n));      \
-                          ret;                         \
-                       })
-#  endif
-# endif
-#endif /* PEDANTIC */
-
-#if HASH_LONG_LOG2==2  /* Engage only if sizeof(HASH_LONG)== 4 */
-/* A nice byte order reversal from Wei Dai <weidai@eskimo.com> */
-#ifdef ROTATE
-/* 5 instructions with rotate instruction, else 9 */
-#define REVERSE_FETCH32(a,l)   (                                       \
-               l=*(const HASH_LONG *)(a),                              \
-               ((ROTATE(l,8)&0x00FF00FF)|(ROTATE((l&0x00FF00FF),24)))  \
-                               )
-#else
-/* 6 instructions with rotate instruction, else 8 */
-#define REVERSE_FETCH32(a,l)   (                               \
-               l=*(const HASH_LONG *)(a),                      \
-               l=(((l>>8)&0x00FF00FF)|((l&0x00FF00FF)<<8)),    \
-               ROTATE(l,16)                                    \
-                               )
-/*
- * Originally the middle line started with l=(((l&0xFF00FF00)>>8)|...
- * It's rewritten as above for two reasons:
- *     - RISCs aren't good at long constants and have to explicitely
- *       compose 'em with several (well, usually 2) instructions in a
- *       register before performing the actual operation and (as you
- *       already realized:-) having same constant should inspire the
- *       compiler to permanently allocate the only register for it;
- *     - most modern CPUs have two ALUs, but usually only one has
- *       circuitry for shifts:-( this minor tweak inspires compiler
- *       to schedule shift instructions in a better way...
- *
- *                             <appro@fy.chalmers.se>
- */
-#endif
-#endif
-
-#ifndef ROTATE
-#define ROTATE(a,n)     (((a)<<(n))|(((a)&0xffffffff)>>(32-(n))))
-#endif
-
-/*
- * Make some obvious choices. E.g., HASH_BLOCK_DATA_ORDER_ALIGNED
- * and HASH_BLOCK_HOST_ORDER ought to be the same if input data
- * and host are of the same "endianess". It's possible to mask
- * this with blank #define HASH_BLOCK_DATA_ORDER though...
- *
- *                             <appro@fy.chalmers.se>
- */
-#if defined(B_ENDIAN)
-#  if defined(DATA_ORDER_IS_BIG_ENDIAN)
-#    if !defined(HASH_BLOCK_DATA_ORDER_ALIGNED) && HASH_LONG_LOG2==2
-#      define HASH_BLOCK_DATA_ORDER_ALIGNED    HASH_BLOCK_HOST_ORDER
-#    endif
-#  endif
-#elif defined(L_ENDIAN)
-#  if defined(DATA_ORDER_IS_LITTLE_ENDIAN)
-#    if !defined(HASH_BLOCK_DATA_ORDER_ALIGNED) && HASH_LONG_LOG2==2
-#      define HASH_BLOCK_DATA_ORDER_ALIGNED    HASH_BLOCK_HOST_ORDER
-#    endif
-#  endif
-#endif
-
-#if !defined(HASH_BLOCK_DATA_ORDER_ALIGNED)
-#ifndef HASH_BLOCK_DATA_ORDER
-#error "HASH_BLOCK_DATA_ORDER must be defined!"
-#endif
-#endif
-
-#if defined(DATA_ORDER_IS_BIG_ENDIAN)
-
-#ifndef PEDANTIC
-# if defined(__GNUC__) && __GNUC__>=2 && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
-#  if ((defined(__i386) || defined(__i386__)) && !defined(I386_ONLY)) || \
-      (defined(__x86_64) || defined(__x86_64__))
-    /*
-     * This gives ~30-40% performance improvement in SHA-256 compiled
-     * with gcc [on P4]. Well, first macro to be frank. We can pull
-     * this trick on x86* platforms only, because these CPUs can fetch
-     * unaligned data without raising an exception.
-     */
-#   define HOST_c2l(c,l)       ({ unsigned int r=*((const unsigned int *)(c)); \
-                                  asm ("bswapl %0":"=r"(r):"0"(r));    \
-                                  (c)+=4; (l)=r;                       })
-#   define HOST_l2c(l,c)       ({ unsigned int r=(l);                  \
-                                  asm ("bswapl %0":"=r"(r):"0"(r));    \
-                                  *((unsigned int *)(c))=r; (c)+=4; r; })
-#  endif
-# endif
-#endif
-
-#ifndef HOST_c2l
-#define HOST_c2l(c,l)  (l =(((unsigned long)(*((c)++)))<<24),          \
-                        l|=(((unsigned long)(*((c)++)))<<16),          \
-                        l|=(((unsigned long)(*((c)++)))<< 8),          \
-                        l|=(((unsigned long)(*((c)++)))    ),          \
-                        l)
-#endif
-#define HOST_p_c2l(c,l,n)      {                                       \
-                       switch (n) {                                    \
-                       case 0: l =((unsigned long)(*((c)++)))<<24;     \
-                       case 1: l|=((unsigned long)(*((c)++)))<<16;     \
-                       case 2: l|=((unsigned long)(*((c)++)))<< 8;     \
-                       case 3: l|=((unsigned long)(*((c)++)));         \
-                               } }
-#define HOST_p_c2l_p(c,l,sc,len) {                                     \
-                       switch (sc) {                                   \
-                       case 0: l =((unsigned long)(*((c)++)))<<24;     \
-                               if (--len == 0) break;                  \
-                       case 1: l|=((unsigned long)(*((c)++)))<<16;     \
-                               if (--len == 0) break;                  \
-                       case 2: l|=((unsigned long)(*((c)++)))<< 8;     \
-                               } }
-/* NOTE the pointer is not incremented at the end of this */
-#define HOST_c2l_p(c,l,n)      {                                       \
-                       l=0; (c)+=n;                                    \
-                       switch (n) {                                    \
-                       case 3: l =((unsigned long)(*(--(c))))<< 8;     \
-                       case 2: l|=((unsigned long)(*(--(c))))<<16;     \
-                       case 1: l|=((unsigned long)(*(--(c))))<<24;     \
-                               } }
-#ifndef HOST_l2c
-#define HOST_l2c(l,c)  (*((c)++)=(unsigned char)(((l)>>24)&0xff),      \
-                        *((c)++)=(unsigned char)(((l)>>16)&0xff),      \
-                        *((c)++)=(unsigned char)(((l)>> 8)&0xff),      \
-                        *((c)++)=(unsigned char)(((l)    )&0xff),      \
-                        l)
-#endif
-
-#elif defined(DATA_ORDER_IS_LITTLE_ENDIAN)
-
-#if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
-# ifndef B_ENDIAN
-   /* See comment in DATA_ORDER_IS_BIG_ENDIAN section. */
-#  define HOST_c2l(c,l)        ((l)=*((const unsigned int *)(c)), (c)+=4, l)
-#  define HOST_l2c(l,c)        (*((unsigned int *)(c))=(l), (c)+=4, l)
-# endif
-#endif
-
-#ifndef HOST_c2l
-#define HOST_c2l(c,l)  (l =(((unsigned long)(*((c)++)))    ),          \
-                        l|=(((unsigned long)(*((c)++)))<< 8),          \
-                        l|=(((unsigned long)(*((c)++)))<<16),          \
-                        l|=(((unsigned long)(*((c)++)))<<24),          \
-                        l)
-#endif
-#define HOST_p_c2l(c,l,n)      {                                       \
-                       switch (n) {                                    \
-                       case 0: l =((unsigned long)(*((c)++)));         \
-                       case 1: l|=((unsigned long)(*((c)++)))<< 8;     \
-                       case 2: l|=((unsigned long)(*((c)++)))<<16;     \
-                       case 3: l|=((unsigned long)(*((c)++)))<<24;     \
-                               } }
-#define HOST_p_c2l_p(c,l,sc,len) {                                     \
-                       switch (sc) {                                   \
-                       case 0: l =((unsigned long)(*((c)++)));         \
-                               if (--len == 0) break;                  \
-                       case 1: l|=((unsigned long)(*((c)++)))<< 8;     \
-                               if (--len == 0) break;                  \
-                       case 2: l|=((unsigned long)(*((c)++)))<<16;     \
-                               } }
-/* NOTE the pointer is not incremented at the end of this */
-#define HOST_c2l_p(c,l,n)      {                                       \
-                       l=0; (c)+=n;                                    \
-                       switch (n) {                                    \
-                       case 3: l =((unsigned long)(*(--(c))))<<16;     \
-                       case 2: l|=((unsigned long)(*(--(c))))<< 8;     \
-                       case 1: l|=((unsigned long)(*(--(c))));         \
-                               } }
-#ifndef HOST_l2c
-#define HOST_l2c(l,c)  (*((c)++)=(unsigned char)(((l)    )&0xff),      \
-                        *((c)++)=(unsigned char)(((l)>> 8)&0xff),      \
-                        *((c)++)=(unsigned char)(((l)>>16)&0xff),      \
-                        *((c)++)=(unsigned char)(((l)>>24)&0xff),      \
-                        l)
-#endif
-
-#endif
-
-/*
- * Time for some action:-)
- */
-
-MD5_JOBID_PROTO int HASH_UPDATE (HASH_CTX *c, const void *data_, size_t len)
-       {
-       const unsigned char *data=data_;
-       register HASH_LONG * p;
-       register HASH_LONG l;
-       size_t sw,sc,ew,ec;
-
-       if (len==0) return 1;
-
-       l=(c->Nl+(((HASH_LONG)len)<<3))&0xffffffffUL;
-       /* 95-05-24 eay Fixed a bug with the overflow handling, thanks to
-        * Wei Dai <weidai@eskimo.com> for pointing it out. */
-       if (l < c->Nl) /* overflow */
-               c->Nh++;
-       c->Nh+=(len>>29);       /* might cause compiler warning on 16-bit */
-       c->Nl=l;
-
-       if (c->num != 0)
-               {
-               p=c->data;
-               sw=c->num>>2;
-               sc=c->num&0x03;
-
-               if ((c->num+len) >= HASH_CBLOCK)
-                       {
-                       l=p[sw]; HOST_p_c2l(data,l,sc); p[sw++]=l;
-                       for (; sw<HASH_LBLOCK; sw++)
-                               {
-                               HOST_c2l(data,l); p[sw]=l;
-                               }
-                       HASH_BLOCK_HOST_ORDER (c,p,1);
-                       len-=(HASH_CBLOCK-c->num);
-                       c->num=0;
-                       /* drop through and do the rest */
-                       }
-               else
-                       {
-                       c->num+=(unsigned int)len;
-                       if ((sc+len) < 4) /* ugly, add char's to a word */
-                               {
-                               l=p[sw]; HOST_p_c2l_p(data,l,sc,len); p[sw]=l;
-                               }
-                       else
-                               {
-                               ew=(c->num>>2);
-                               ec=(c->num&0x03);
-                               if (sc)
-                                       l=p[sw];
-                               HOST_p_c2l(data,l,sc);
-                               p[sw++]=l;
-                               for (; sw < ew; sw++)
-                                       {
-                                       HOST_c2l(data,l); p[sw]=l;
-                                       }
-                               if (ec)
-                                       {
-                                       HOST_c2l_p(data,l,ec); p[sw]=l;
-                                       }
-                               }
-                       return 1;
-                       }
-               }
-
-       sw=len/HASH_CBLOCK;
-       if (sw > 0)
-               {
-#if defined(HASH_BLOCK_DATA_ORDER_ALIGNED)
-               /*
-                * Note that HASH_BLOCK_DATA_ORDER_ALIGNED gets defined
-                * only if sizeof(HASH_LONG)==4.
-                */
-               if ((((size_t)data)%4) == 0)
-                       {
-                       /* data is properly aligned so that we can cast it: */
-                       HASH_BLOCK_DATA_ORDER_ALIGNED (c,(const HASH_LONG *)data,sw);
-                       sw*=HASH_CBLOCK;
-                       data+=sw;
-                       len-=sw;
-                       }
-               else
-#if !defined(HASH_BLOCK_DATA_ORDER)
-                       while (sw--)
-                               {
-                               memcpy (p=c->data,data,HASH_CBLOCK);
-                               HASH_BLOCK_DATA_ORDER_ALIGNED(c,p,1);
-                               data+=HASH_CBLOCK;
-                               len-=HASH_CBLOCK;
-                               }
-#endif
-#endif
-#if defined(HASH_BLOCK_DATA_ORDER)
-                       {
-                       HASH_BLOCK_DATA_ORDER(c,data,sw);
-                       sw*=HASH_CBLOCK;
-                       data+=sw;
-                       len-=sw;
-                       }
-#endif
-               }
-
-       if (len!=0)
-               {
-               p = c->data;
-               c->num = len;
-               ew=len>>2;      /* words to copy */
-               ec=len&0x03;
-               for (; ew; ew--,p++)
-                       {
-                       HOST_c2l(data,l); *p=l;
-                       }
-               HOST_c2l_p(data,l,ec);
-               *p=l;
-               }
-       return 1;
-       }
-
-
-MD5_JOBID_PROTO void HASH_TRANSFORM (HASH_CTX *c, const unsigned char *data)
-       {
-#if defined(HASH_BLOCK_DATA_ORDER_ALIGNED)
-       if ((((size_t)data)%4) == 0)
-               /* data is properly aligned so that we can cast it: */
-               HASH_BLOCK_DATA_ORDER_ALIGNED (c,(const HASH_LONG *)data,1);
-       else
-#if !defined(HASH_BLOCK_DATA_ORDER)
-               {
-               
-               HASH_BLOCK_DATA_ORDER_ALIGNED (c,c->data,1);
-               }
-#endif
-#endif
-#if defined(HASH_BLOCK_DATA_ORDER)
-       HASH_BLOCK_DATA_ORDER (c,data,1);
-#endif
-       }
-
-
-MD5_JOBID_PROTO int HASH_FINAL (unsigned char *md, HASH_CTX *c)
-       {
-       register HASH_LONG *p;
-       register unsigned long l;
-       register int i,j;
-       static const unsigned char end[4]={0x80,0x00,0x00,0x00};
-       const unsigned char *cp=end;
-
-       /* c->num should definitly have room for at least one more byte. */
-       p=c->data;
-       i=c->num>>2;
-       j=c->num&0x03;
-
-#if 0
-       /* purify often complains about the following line as an
-        * Uninitialized Memory Read.  While this can be true, the
-        * following p_c2l macro will reset l when that case is true.
-        * This is because j&0x03 contains the number of 'valid' bytes
-        * already in p[i].  If and only if j&0x03 == 0, the UMR will
-        * occur but this is also the only time p_c2l will do
-        * l= *(cp++) instead of l|= *(cp++)
-        * Many thanks to Alex Tang <altitude@cic.net> for pickup this
-        * 'potential bug' */
-#ifdef PURIFY
-       if (j==0) p[i]=0; /* Yeah, but that's not the way to fix it:-) */
-#endif
-       l=p[i];
-#else
-       l = (j==0) ? 0 : p[i];
-#endif
-       HOST_p_c2l(cp,l,j); p[i++]=l; /* i is the next 'undefined word' */
-
-       if (i>(HASH_LBLOCK-2)) /* save room for Nl and Nh */
-               {
-               if (i<HASH_LBLOCK) p[i]=0;
-               HASH_BLOCK_HOST_ORDER (c,p,1);
-               i=0;
-               }
-       for (; i<(HASH_LBLOCK-2); i++)
-               p[i]=0;
-
-#if   defined(DATA_ORDER_IS_BIG_ENDIAN)
-       p[HASH_LBLOCK-2]=c->Nh;
-       p[HASH_LBLOCK-1]=c->Nl;
-#elif defined(DATA_ORDER_IS_LITTLE_ENDIAN)
-       p[HASH_LBLOCK-2]=c->Nl;
-       p[HASH_LBLOCK-1]=c->Nh;
-#endif
-       HASH_BLOCK_HOST_ORDER (c,p,1);
-
-#ifndef HASH_MAKE_STRING
-#error "HASH_MAKE_STRING must be defined!"
-#else
-       HASH_MAKE_STRING(c,md);
-#endif
-
-       c->num=0;
-       /* clear stuff, HASH_BLOCK may be leaving some stuff on the stack
-        * but I'm not worried :-)
-       OPENSSL_cleanse((void *)c,sizeof(HASH_CTX));
-        */
-       return 1;
-       }
-
-#ifndef MD32_REG_T
-#define MD32_REG_T long
-/*
- * This comment was originaly written for MD5, which is why it
- * discusses A-D. But it basically applies to all 32-bit digests,
- * which is why it was moved to common header file.
- *
- * In case you wonder why A-D are declared as long and not
- * as MD5_LONG. Doing so results in slight performance
- * boost on LP64 architectures. The catch is we don't
- * really care if 32 MSBs of a 64-bit register get polluted
- * with eventual overflows as we *save* only 32 LSBs in
- * *either* case. Now declaring 'em long excuses the compiler
- * from keeping 32 MSBs zeroed resulting in 13% performance
- * improvement under SPARC Solaris7/64 and 5% under AlphaLinux.
- * Well, to be honest it should say that this *prevents* 
- * performance degradation.
- *                             <appro@fy.chalmers.se>
- * Apparently there're LP64 compilers that generate better
- * code if A-D are declared int. Most notably GCC-x86_64
- * generates better code.
- *                             <appro@fy.chalmers.se>
- */
-#endif
diff --git a/org.glite.jobid.api-c/src/md5.h b/org.glite.jobid.api-c/src/md5.h
deleted file mode 100644 (file)
index 6bcdfdf..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/* crypto/md5/md5.h */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- * 
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- * 
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from 
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- * 
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#ifndef HEADER_MD5_H
-#define HEADER_MD5_H
-
-/* ljocha
-#include <openssl/e_os2.h>
-*/
-#include <stddef.h>
-
-#ifdef  __cplusplus
-extern "C" {
-#endif
-
-#ifdef OPENSSL_NO_MD5
-#error MD5 is disabled.
-#endif
-
-/*
- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- * ! MD5_LONG has to be at least 32 bits wide. If it's wider, then !
- * ! MD5_LONG_LOG2 has to be defined along.                       !
- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- */
-
-#if defined(OPENSSL_SYS_WIN16) || defined(__LP32__)
-#define MD5_LONG unsigned long
-#elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__)
-#define MD5_LONG unsigned long
-#define MD5_LONG_LOG2 3
-
-/* _CRAY note. I could declare short, but I have no idea what impact
- * does it have on performance on none-T3E machines. I could declare
- * int, but at least on C90 sizeof(int) can be chosen at compile time.
- * So I've chosen long...  *                                   <appro@fy.chalmers.se>
- */
-#else
-#define MD5_LONG unsigned int
-#endif
-
-#define MD5_CBLOCK     64
-#define MD5_LBLOCK     (MD5_CBLOCK/4)
-#define MD5_DIGEST_LENGTH 16
-
-typedef struct MD5state_st
-       {
-       MD5_LONG A,B,C,D;
-       MD5_LONG Nl,Nh;
-       MD5_LONG data[MD5_LBLOCK];
-       unsigned int num;
-       } MD5_CTX;
-
-MD5_JOBID_PROTO int MD5_Init(MD5_CTX *c);
-MD5_JOBID_PROTO int MD5_Update(MD5_CTX *c, const void *data, size_t len);
-MD5_JOBID_PROTO int MD5_Final(unsigned char *md, MD5_CTX *c);
-MD5_JOBID_PROTO unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md);
-MD5_JOBID_PROTO void MD5_Transform(MD5_CTX *c, const unsigned char *b);
-#ifdef  __cplusplus
-}
-#endif
-
-#endif
diff --git a/org.glite.jobid.api-c/src/md5_dgst.c b/org.glite.jobid.api-c/src/md5_dgst.c
deleted file mode 100644 (file)
index df6d163..0000000
+++ /dev/null
@@ -1,298 +0,0 @@
-/* crypto/md5/md5_dgst.c */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- * 
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- * 
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from 
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- * 
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#ifndef MD5_JOBID_PROTO
-#define MD5_JOBID_PROTO
-#endif
-
-#include <stdio.h>
-#include "md5_locl.h"
-/* ljocha
-#include <openssl/opensslv.h>
-
-const char MD5_version[]="MD5" OPENSSL_VERSION_PTEXT;
-*/
-
-/* Implemented from RFC1321 The MD5 Message-Digest Algorithm
- */
-
-#define INIT_DATA_A (unsigned long)0x67452301L
-#define INIT_DATA_B (unsigned long)0xefcdab89L
-#define INIT_DATA_C (unsigned long)0x98badcfeL
-#define INIT_DATA_D (unsigned long)0x10325476L
-
-MD5_JOBID_PROTO int MD5_Init(MD5_CTX *c)
-       {
-       c->A=INIT_DATA_A;
-       c->B=INIT_DATA_B;
-       c->C=INIT_DATA_C;
-       c->D=INIT_DATA_D;
-       c->Nl=0;
-       c->Nh=0;
-       c->num=0;
-       return 1;
-       }
-
-#ifndef md5_block_host_order
-MD5_JOBID_PROTO void md5_block_host_order (MD5_CTX *c, const void *data, size_t num)
-       {
-       const MD5_LONG *X=data;
-       register unsigned MD32_REG_T A,B,C,D;
-
-       A=c->A;
-       B=c->B;
-       C=c->C;
-       D=c->D;
-
-       for (;num--;X+=HASH_LBLOCK)
-               {
-       /* Round 0 */
-       R0(A,B,C,D,X[ 0], 7,0xd76aa478L);
-       R0(D,A,B,C,X[ 1],12,0xe8c7b756L);
-       R0(C,D,A,B,X[ 2],17,0x242070dbL);
-       R0(B,C,D,A,X[ 3],22,0xc1bdceeeL);
-       R0(A,B,C,D,X[ 4], 7,0xf57c0fafL);
-       R0(D,A,B,C,X[ 5],12,0x4787c62aL);
-       R0(C,D,A,B,X[ 6],17,0xa8304613L);
-       R0(B,C,D,A,X[ 7],22,0xfd469501L);
-       R0(A,B,C,D,X[ 8], 7,0x698098d8L);
-       R0(D,A,B,C,X[ 9],12,0x8b44f7afL);
-       R0(C,D,A,B,X[10],17,0xffff5bb1L);
-       R0(B,C,D,A,X[11],22,0x895cd7beL);
-       R0(A,B,C,D,X[12], 7,0x6b901122L);
-       R0(D,A,B,C,X[13],12,0xfd987193L);
-       R0(C,D,A,B,X[14],17,0xa679438eL);
-       R0(B,C,D,A,X[15],22,0x49b40821L);
-       /* Round 1 */
-       R1(A,B,C,D,X[ 1], 5,0xf61e2562L);
-       R1(D,A,B,C,X[ 6], 9,0xc040b340L);
-       R1(C,D,A,B,X[11],14,0x265e5a51L);
-       R1(B,C,D,A,X[ 0],20,0xe9b6c7aaL);
-       R1(A,B,C,D,X[ 5], 5,0xd62f105dL);
-       R1(D,A,B,C,X[10], 9,0x02441453L);
-       R1(C,D,A,B,X[15],14,0xd8a1e681L);
-       R1(B,C,D,A,X[ 4],20,0xe7d3fbc8L);
-       R1(A,B,C,D,X[ 9], 5,0x21e1cde6L);
-       R1(D,A,B,C,X[14], 9,0xc33707d6L);
-       R1(C,D,A,B,X[ 3],14,0xf4d50d87L);
-       R1(B,C,D,A,X[ 8],20,0x455a14edL);
-       R1(A,B,C,D,X[13], 5,0xa9e3e905L);
-       R1(D,A,B,C,X[ 2], 9,0xfcefa3f8L);
-       R1(C,D,A,B,X[ 7],14,0x676f02d9L);
-       R1(B,C,D,A,X[12],20,0x8d2a4c8aL);
-       /* Round 2 */
-       R2(A,B,C,D,X[ 5], 4,0xfffa3942L);
-       R2(D,A,B,C,X[ 8],11,0x8771f681L);
-       R2(C,D,A,B,X[11],16,0x6d9d6122L);
-       R2(B,C,D,A,X[14],23,0xfde5380cL);
-       R2(A,B,C,D,X[ 1], 4,0xa4beea44L);
-       R2(D,A,B,C,X[ 4],11,0x4bdecfa9L);
-       R2(C,D,A,B,X[ 7],16,0xf6bb4b60L);
-       R2(B,C,D,A,X[10],23,0xbebfbc70L);
-       R2(A,B,C,D,X[13], 4,0x289b7ec6L);
-       R2(D,A,B,C,X[ 0],11,0xeaa127faL);
-       R2(C,D,A,B,X[ 3],16,0xd4ef3085L);
-       R2(B,C,D,A,X[ 6],23,0x04881d05L);
-       R2(A,B,C,D,X[ 9], 4,0xd9d4d039L);
-       R2(D,A,B,C,X[12],11,0xe6db99e5L);
-       R2(C,D,A,B,X[15],16,0x1fa27cf8L);
-       R2(B,C,D,A,X[ 2],23,0xc4ac5665L);
-       /* Round 3 */
-       R3(A,B,C,D,X[ 0], 6,0xf4292244L);
-       R3(D,A,B,C,X[ 7],10,0x432aff97L);
-       R3(C,D,A,B,X[14],15,0xab9423a7L);
-       R3(B,C,D,A,X[ 5],21,0xfc93a039L);
-       R3(A,B,C,D,X[12], 6,0x655b59c3L);
-       R3(D,A,B,C,X[ 3],10,0x8f0ccc92L);
-       R3(C,D,A,B,X[10],15,0xffeff47dL);
-       R3(B,C,D,A,X[ 1],21,0x85845dd1L);
-       R3(A,B,C,D,X[ 8], 6,0x6fa87e4fL);
-       R3(D,A,B,C,X[15],10,0xfe2ce6e0L);
-       R3(C,D,A,B,X[ 6],15,0xa3014314L);
-       R3(B,C,D,A,X[13],21,0x4e0811a1L);
-       R3(A,B,C,D,X[ 4], 6,0xf7537e82L);
-       R3(D,A,B,C,X[11],10,0xbd3af235L);
-       R3(C,D,A,B,X[ 2],15,0x2ad7d2bbL);
-       R3(B,C,D,A,X[ 9],21,0xeb86d391L);
-
-       A = c->A += A;
-       B = c->B += B;
-       C = c->C += C;
-       D = c->D += D;
-               }
-       }
-#endif
-
-#ifndef md5_block_data_order
-#ifdef X
-#undef X
-#endif
-MD5_JOBID_PROTO void md5_block_data_order (MD5_CTX *c, const void *data_, size_t num)
-       {
-       const unsigned char *data=data_;
-       register unsigned MD32_REG_T A,B,C,D,l;
-#ifndef MD32_XARRAY
-       /* See comment in crypto/sha/sha_locl.h for details. */
-       unsigned MD32_REG_T     XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
-                               XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
-# define X(i)  XX##i
-#else
-       MD5_LONG XX[MD5_LBLOCK];
-# define X(i)  XX[i]
-#endif
-
-       A=c->A;
-       B=c->B;
-       C=c->C;
-       D=c->D;
-
-       for (;num--;)
-               {
-       HOST_c2l(data,l); X( 0)=l;              HOST_c2l(data,l); X( 1)=l;
-       /* Round 0 */
-       R0(A,B,C,D,X( 0), 7,0xd76aa478L);       HOST_c2l(data,l); X( 2)=l;
-       R0(D,A,B,C,X( 1),12,0xe8c7b756L);       HOST_c2l(data,l); X( 3)=l;
-       R0(C,D,A,B,X( 2),17,0x242070dbL);       HOST_c2l(data,l); X( 4)=l;
-       R0(B,C,D,A,X( 3),22,0xc1bdceeeL);       HOST_c2l(data,l); X( 5)=l;
-       R0(A,B,C,D,X( 4), 7,0xf57c0fafL);       HOST_c2l(data,l); X( 6)=l;
-       R0(D,A,B,C,X( 5),12,0x4787c62aL);       HOST_c2l(data,l); X( 7)=l;
-       R0(C,D,A,B,X( 6),17,0xa8304613L);       HOST_c2l(data,l); X( 8)=l;
-       R0(B,C,D,A,X( 7),22,0xfd469501L);       HOST_c2l(data,l); X( 9)=l;
-       R0(A,B,C,D,X( 8), 7,0x698098d8L);       HOST_c2l(data,l); X(10)=l;
-       R0(D,A,B,C,X( 9),12,0x8b44f7afL);       HOST_c2l(data,l); X(11)=l;
-       R0(C,D,A,B,X(10),17,0xffff5bb1L);       HOST_c2l(data,l); X(12)=l;
-       R0(B,C,D,A,X(11),22,0x895cd7beL);       HOST_c2l(data,l); X(13)=l;
-       R0(A,B,C,D,X(12), 7,0x6b901122L);       HOST_c2l(data,l); X(14)=l;
-       R0(D,A,B,C,X(13),12,0xfd987193L);       HOST_c2l(data,l); X(15)=l;
-       R0(C,D,A,B,X(14),17,0xa679438eL);
-       R0(B,C,D,A,X(15),22,0x49b40821L);
-       /* Round 1 */
-       R1(A,B,C,D,X( 1), 5,0xf61e2562L);
-       R1(D,A,B,C,X( 6), 9,0xc040b340L);
-       R1(C,D,A,B,X(11),14,0x265e5a51L);
-       R1(B,C,D,A,X( 0),20,0xe9b6c7aaL);
-       R1(A,B,C,D,X( 5), 5,0xd62f105dL);
-       R1(D,A,B,C,X(10), 9,0x02441453L);
-       R1(C,D,A,B,X(15),14,0xd8a1e681L);
-       R1(B,C,D,A,X( 4),20,0xe7d3fbc8L);
-       R1(A,B,C,D,X( 9), 5,0x21e1cde6L);
-       R1(D,A,B,C,X(14), 9,0xc33707d6L);
-       R1(C,D,A,B,X( 3),14,0xf4d50d87L);
-       R1(B,C,D,A,X( 8),20,0x455a14edL);
-       R1(A,B,C,D,X(13), 5,0xa9e3e905L);
-       R1(D,A,B,C,X( 2), 9,0xfcefa3f8L);
-       R1(C,D,A,B,X( 7),14,0x676f02d9L);
-       R1(B,C,D,A,X(12),20,0x8d2a4c8aL);
-       /* Round 2 */
-       R2(A,B,C,D,X( 5), 4,0xfffa3942L);
-       R2(D,A,B,C,X( 8),11,0x8771f681L);
-       R2(C,D,A,B,X(11),16,0x6d9d6122L);
-       R2(B,C,D,A,X(14),23,0xfde5380cL);
-       R2(A,B,C,D,X( 1), 4,0xa4beea44L);
-       R2(D,A,B,C,X( 4),11,0x4bdecfa9L);
-       R2(C,D,A,B,X( 7),16,0xf6bb4b60L);
-       R2(B,C,D,A,X(10),23,0xbebfbc70L);
-       R2(A,B,C,D,X(13), 4,0x289b7ec6L);
-       R2(D,A,B,C,X( 0),11,0xeaa127faL);
-       R2(C,D,A,B,X( 3),16,0xd4ef3085L);
-       R2(B,C,D,A,X( 6),23,0x04881d05L);
-       R2(A,B,C,D,X( 9), 4,0xd9d4d039L);
-       R2(D,A,B,C,X(12),11,0xe6db99e5L);
-       R2(C,D,A,B,X(15),16,0x1fa27cf8L);
-       R2(B,C,D,A,X( 2),23,0xc4ac5665L);
-       /* Round 3 */
-       R3(A,B,C,D,X( 0), 6,0xf4292244L);
-       R3(D,A,B,C,X( 7),10,0x432aff97L);
-       R3(C,D,A,B,X(14),15,0xab9423a7L);
-       R3(B,C,D,A,X( 5),21,0xfc93a039L);
-       R3(A,B,C,D,X(12), 6,0x655b59c3L);
-       R3(D,A,B,C,X( 3),10,0x8f0ccc92L);
-       R3(C,D,A,B,X(10),15,0xffeff47dL);
-       R3(B,C,D,A,X( 1),21,0x85845dd1L);
-       R3(A,B,C,D,X( 8), 6,0x6fa87e4fL);
-       R3(D,A,B,C,X(15),10,0xfe2ce6e0L);
-       R3(C,D,A,B,X( 6),15,0xa3014314L);
-       R3(B,C,D,A,X(13),21,0x4e0811a1L);
-       R3(A,B,C,D,X( 4), 6,0xf7537e82L);
-       R3(D,A,B,C,X(11),10,0xbd3af235L);
-       R3(C,D,A,B,X( 2),15,0x2ad7d2bbL);
-       R3(B,C,D,A,X( 9),21,0xeb86d391L);
-
-       A = c->A += A;
-       B = c->B += B;
-       C = c->C += C;
-       D = c->D += D;
-               }
-       }
-#endif
-
-#ifdef undef
-int printit(unsigned long *l)
-       {
-       int i,ii;
-
-       for (i=0; i<2; i++)
-               {
-               for (ii=0; ii<8; ii++)
-                       {
-                       fprintf(stderr,"%08lx ",l[i*8+ii]);
-                       }
-               fprintf(stderr,"\n");
-               }
-       }
-#endif
diff --git a/org.glite.jobid.api-c/src/md5_locl.h b/org.glite.jobid.api-c/src/md5_locl.h
deleted file mode 100644 (file)
index dda821c..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-/* crypto/md5/md5_locl.h */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- * 
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- * 
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from 
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- * 
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <openssl/e_os2.h>
-#include <openssl/md5.h>
-
-#ifndef MD5_LONG_LOG2
-#define MD5_LONG_LOG2 2 /* default to 32 bits */
-#endif
-
-#ifdef MD5_ASM
-# if defined(__i386) || defined(__i386__) || defined(_M_IX86) || defined(__INTEL__) || defined(__x86_64) || defined(__x86_64__)
-#  if !defined(B_ENDIAN)
-#   define md5_block_host_order md5_block_asm_host_order
-#  endif
-# elif defined(__sparc) && defined(OPENSSL_SYS_ULTRASPARC)
-   void md5_block_asm_data_order_aligned (MD5_CTX *c, const MD5_LONG *p,size_t num);
-#  define HASH_BLOCK_DATA_ORDER_ALIGNED md5_block_asm_data_order_aligned
-# endif
-#endif
-
-MD5_JOBID_PROTO void md5_block_host_order (MD5_CTX *c, const void *p,size_t num);
-MD5_JOBID_PROTO void md5_block_data_order (MD5_CTX *c, const void *p,size_t num);
-
-#if defined(__i386) || defined(__i386__) || defined(_M_IX86) || defined(__INTEL__) || defined(__x86_64) || defined(__x86_64__)
-# if !defined(B_ENDIAN)
-/*
- * *_block_host_order is expected to handle aligned data while
- * *_block_data_order - unaligned. As algorithm and host (x86)
- * are in this case of the same "endianness" these two are
- * otherwise indistinguishable. But normally you don't want to
- * call the same function because unaligned access in places
- * where alignment is expected is usually a "Bad Thing". Indeed,
- * on RISCs you get punished with BUS ERROR signal or *severe*
- * performance degradation. Intel CPUs are in turn perfectly
- * capable of loading unaligned data without such drastic side
- * effect. Yes, they say it's slower than aligned load, but no
- * exception is generated and therefore performance degradation
- * is *incomparable* with RISCs. What we should weight here is
- * costs of unaligned access against costs of aligning data.
- * According to my measurements allowing unaligned access results
- * in ~9% performance improvement on Pentium II operating at
- * 266MHz. I won't be surprised if the difference will be higher
- * on faster systems:-)
- *
- *                             <appro@fy.chalmers.se>
- */
-# define md5_block_data_order md5_block_host_order
-# endif
-#endif
-
-#define DATA_ORDER_IS_LITTLE_ENDIAN
-
-#define HASH_LONG              MD5_LONG
-#define HASH_LONG_LOG2         MD5_LONG_LOG2
-#define HASH_CTX               MD5_CTX
-#define HASH_CBLOCK            MD5_CBLOCK
-#define HASH_LBLOCK            MD5_LBLOCK
-#define HASH_UPDATE            MD5_Update
-#define HASH_TRANSFORM         MD5_Transform
-#define HASH_FINAL             MD5_Final
-#define        HASH_MAKE_STRING(c,s)   do {    \
-       unsigned long ll;               \
-       ll=(c)->A; HOST_l2c(ll,(s));    \
-       ll=(c)->B; HOST_l2c(ll,(s));    \
-       ll=(c)->C; HOST_l2c(ll,(s));    \
-       ll=(c)->D; HOST_l2c(ll,(s));    \
-       } while (0)
-#define HASH_BLOCK_HOST_ORDER  md5_block_host_order
-#if !defined(L_ENDIAN) || defined(md5_block_data_order)
-#define        HASH_BLOCK_DATA_ORDER   md5_block_data_order
-/*
- * Little-endians (Intel and Alpha) feel better without this.
- * It looks like memcpy does better job than generic
- * md5_block_data_order on copying-n-aligning input data.
- * But frankly speaking I didn't expect such result on Alpha.
- * On the other hand I've got this with egcs-1.0.2 and if
- * program is compiled with another (better?) compiler it
- * might turn out other way around.
- *
- *                             <appro@fy.chalmers.se>
- */
-#endif
-
-#include "md32_common.h"
-
-/*
-#define        F(x,y,z)        (((x) & (y))  |  ((~(x)) & (z)))
-#define        G(x,y,z)        (((x) & (z))  |  ((y) & (~(z))))
-*/
-
-/* As pointed out by Wei Dai <weidai@eskimo.com>, the above can be
- * simplified to the code below.  Wei attributes these optimizations
- * to Peter Gutmann's SHS code, and he attributes it to Rich Schroeppel.
- */
-#define        F(b,c,d)        ((((c) ^ (d)) & (b)) ^ (d))
-#define        G(b,c,d)        ((((b) ^ (c)) & (d)) ^ (c))
-#define        H(b,c,d)        ((b) ^ (c) ^ (d))
-#define        I(b,c,d)        (((~(d)) | (b)) ^ (c))
-
-#define R0(a,b,c,d,k,s,t) { \
-       a+=((k)+(t)+F((b),(c),(d))); \
-       a=ROTATE(a,s); \
-       a+=b; };\
-
-#define R1(a,b,c,d,k,s,t) { \
-       a+=((k)+(t)+G((b),(c),(d))); \
-       a=ROTATE(a,s); \
-       a+=b; };
-
-#define R2(a,b,c,d,k,s,t) { \
-       a+=((k)+(t)+H((b),(c),(d))); \
-       a=ROTATE(a,s); \
-       a+=b; };
-
-#define R3(a,b,c,d,k,s,t) { \
-       a+=((k)+(t)+I((b),(c),(d))); \
-       a=ROTATE(a,s); \
-       a+=b; };
diff --git a/org.glite.jobid.api-c/src/strmd5.c b/org.glite.jobid.api-c/src/strmd5.c
deleted file mode 100755 (executable)
index baab53f..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-#ident "$Header$"
-
-
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#define MD5_JOBID_PROTO static
-#include "md5.h"
-#include "strmd5.h"
-
-#include "md5_dgst.c"
-
-
-static char mbuf[33];
-static const char* b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
-static char *b64r;
-
-int base64_encode(const void *enc, int enc_size, char *out, int out_max_size)
-{
-
-    unsigned char* enc_buf = (unsigned char*)enc;
-    int                  out_size = 0;
-    unsigned int  bits = 0;
-    unsigned int  shift = 0;
-
-    while ( out_size < out_max_size ) {
-       if ( enc_size>0 ) {
-           // Shift in byte
-           bits <<= 8;
-           bits |= *enc_buf;
-           shift += 8;
-           // Next byte
-           enc_buf++;
-           enc_size--;
-       } else if ( shift>0 ) {
-           // Pad last bits to 6 bits - will end next loop
-           bits <<= 6 - shift;
-           shift = 6;
-       } else {
-           // Terminate with Mime style '='
-           *out = '=';
-           out_size++;
-
-           return out_size;
-       }
-
-       // Encode 6 bit segments
-       while ( shift>=6 ) {
-           shift -= 6;
-           *out = b64[ (bits >> shift) & 0x3F ];
-           out++;
-           out_size++;
-       }
-    }
-
-    // Output overflow
-    return -1;
-}
-
-int base64_decode(const char *enc,char *out,int max_out_size)
-{
-       unsigned int    bits = 0;
-       int     shift = 0;
-       int     out_size = 0;
-
-       if (!b64r) {
-               int     i;
-               b64r = calloc(128,1);
-
-               for (i=0; b64[i]; i++) b64r[(int)b64[i]] = i;
-       }
-
-       while (*enc && *enc != '=') {
-               bits <<= 6;
-               bits |= b64r[(int)*enc++];
-               shift += 6;
-
-               while (shift >= 8) {
-                       if (out_size >= max_out_size) return -1;
-                       shift -= 8;
-                       *out++ = (bits >> shift) & 0xff;
-                       out_size++;
-               }
-       }
-
-       return out_size;
-}
-
-char *strmd5(const char *s, unsigned char *digest)
-{
-    MD5_CTX md5;
-    unsigned char d[16];
-    int        i;
-
-    MD5_Init(&md5);
-    MD5_Update(&md5,s,strlen(s));
-    MD5_Final(d,&md5);
-
-    if (digest) memcpy(digest,d,sizeof(d));
-
-    for (i=0; i<16; i++) {
-       int     dd = d[i] & 0x0f;
-       mbuf[2*i+1] = dd<10 ? dd+'0' : dd-10+'a';
-       dd = d[i] >> 4;
-       mbuf[2*i] = dd<10 ? dd+'0' : dd-10+'a';
-    }
-    mbuf[32] = 0;
-    return (char *) mbuf;
-}
-
-char *str2md5(const char *s)
-{
-    MD5_CTX md5;
-    unsigned char d[16];
-    char* ret = malloc(33);
-    int        i;
-
-    if (!ret)
-       return NULL;
-
-    MD5_Init(&md5);
-    MD5_Update(&md5, s, strlen(s));
-    MD5_Final(d, &md5);
-
-    for (i=0; i<16; i++) {
-       int  dd = d[i] & 0x0f;
-       ret[2*i+1] = dd<10 ? dd+'0' : dd-10+'a';
-       dd = d[i] >> 4;
-       ret[2*i] = dd<10 ? dd+'0' : dd-10+'a';
-    }
-    ret[32] = 0;
-    return ret;
-}
-
-char *str2md5base64(const char *s)
-{
-    MD5_CTX md5;
-    unsigned char d[16];
-    char buf[50];
-    int l;
-
-    MD5_Init(&md5);
-    MD5_Update(&md5, s, strlen(s));
-    MD5_Final(d, &md5);
-
-    l = base64_encode(d, 16, buf, sizeof(buf) - 1);
-    if (l < 1)
-       return NULL;
-    buf[l - 1] = 0;
-    return strdup(buf);
-}
diff --git a/org.glite.jobid.api-c/test/base64_test.cpp b/org.glite.jobid.api-c/test/base64_test.cpp
deleted file mode 100644 (file)
index 53d1b4d..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#include <assert.h>
-#include <stdlib.h> 
-#include <cstring> 
-#include <fstream>
-
-#include <cppunit/extensions/HelperMacros.h>
-#include <cppunit/TestFixture.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/XmlOutputter.h>
-#include <cppunit/TestRunner.h>
-#include <cppunit/TestResult.h>
-#include <cppunit/TestResultCollector.h>
-
-#include "strmd5.h"
-
-class Base64Test: public  CppUnit::TestFixture
-{
-       CPPUNIT_TEST_SUITE(Base64Test);
-       CPPUNIT_TEST(test);
-       CPPUNIT_TEST_SUITE_END();
-public:
-       void test();
-};
-
-void Base64Test::test()
-{      
-       int     i;
-       unsigned char   in[2000], b[4000], out[2000];
-
-       srandom(0xDEAD);
-       in[0] = 'x';
-       for (i=1; i<2000; i++) {
-               char    s[20];
-               int     len;
-               sprintf(s,"%d",i);
-               in[i] = random() % 256;
-
-               std::cerr << '.';
-
-               base64_encode(in,i,(char *) b,sizeof b);
-               len = base64_decode((const char *) b,(char *) out,sizeof out);
-
-               CPPUNIT_ASSERT_MESSAGE(std::string("len"),i == len);
-               CPPUNIT_ASSERT_MESSAGE(std::string(s),!memcmp(in,out,i));
-       }
-       std::cerr << std::endl;
-}
-
-CPPUNIT_TEST_SUITE_REGISTRATION(Base64Test);
-
-
-int main (int argc,const char *argv[])
-{
-       CppUnit::Test *suite = CppUnit::TestFactoryRegistry::getRegistry().makeTest();
-
-       assert(argc == 2);
-       std::ofstream   xml(argv[1]);
-
-       CppUnit::TestResult controller;
-       CppUnit::TestResultCollector result;
-       controller.addListener( &result );
-
-       CppUnit::TestRunner runner;
-       runner.addTest(suite);
-       runner.run(controller);
-
-       CppUnit::XmlOutputter xout( &result, xml );
-       CppUnit::CompilerOutputter tout( &result, std::cout);
-       xout.write();
-       tout.write();
-
-       return result.wasSuccessful() ? 0 : 1 ;
-}
diff --git a/org.glite.jobid.api-cpp/Makefile b/org.glite.jobid.api-cpp/Makefile
deleted file mode 100644 (file)
index b35b7b8..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-# Default values
-top_srcdir=..
-stagedir=.
-globalprefix=glite
-jobidprefix=jobid
-package=glite-jobid-api-cpp
-version=0.0.0
-
-CC:=gcc
-CXX:=g++
-
--include Makefile.inc
-
-version=${module.version}
-
-VPATH=${top_srcdir}/src:${top_srcdir}/interface:${top_srcdir}/test
-
-DEBUG:=-g -O0 -Wall
-
-CFLAGS:=${DEBUG} \
-       -I${top_srcdir}/interface -I${top_srcdir}/src \
-       ${COVERAGE_FLAGS} \
-       -D_GNU_SOURCE
-
-COMPILE:=libtool --mode=compile ${CC} ${CFLAGS}
-CXXCOMPILE:=libtool --mode=compile ${CXX} ${CXXFLAGS}
-LINK:=libtool --mode=link ${CC} ${LDFLAGS} 
-LINKXX:=libtool --mode=link ${CXX} ${LDFLAGS}
-INSTALL:=libtool --mode=install install
-
-LIBOBJS:=
-HDRS:=JobId.h
-
-LIBLOBJS:=${LIBOBJS:.o=.lo}
-
-LIB:=
-
-compile all: 
-
-
-check: compile
-#
-
-clean:
-       rm -rvf *.o *.lo .libs lib* *.c *.cpp *.h
-       rm -rvf log.xml project rpmbuild RPMS tgz
-
-install: 
-       mkdir -p ${PREFIX}/include/${globalprefix}/${jobidprefix}
-       (cd ${top_srcdir}/interface; ${INSTALL} -m 644 ${HDRS} ${PREFIX}/include/${globalprefix}/${jobidprefix})
-
-
-%.o: %.c
-       ${COMPILE} -o $@ -c $< 
-
-
-.PHONY: default all compile check install clean
diff --git a/org.glite.jobid.api-cpp/configure b/org.glite.jobid.api-cpp/configure
deleted file mode 100755 (executable)
index 455145c..0000000
+++ /dev/null
@@ -1,692 +0,0 @@
-#!/usr/bin/perl
-
-# WARNING: Don't edit this file unless it is the master copy in org.glite.lb
-#
-# For the purpose of standalone builds of lb/jobid/lbjp-common components
-# it is copied on tagging 
-
-# $Header$
-
-use Getopt::Long;
-
-my $pwd = `pwd`; chomp $pwd;
-my $prefix = $pwd.'/stage';
-my $stagedir;
-my $staged;
-my $module;
-my $thrflavour = 'gcc64dbgpthr';
-my $nothrflavour = 'gcc64dbg';
-my $mode = 'build';
-my $help = 0;
-my $listmodules;
-my $version;
-my $output;
-my $lb_tag = '';
-my $lbjp_tag = '';
-my $jp_tag = '';
-my $sec_tag = '';
-my $jobid_tag = '';
-
-my @nodes = qw/client server logger utils doc ws-test db jpprimary jpindex jpclient/;
-my %enable_nodes;
-my %disable_nodes;
-
-my %extern_prefix = (
-       cares => '/opt/c-ares',
-       classads => '/opt/classads',
-       cppunit => '/usr',
-       expat => '/usr',
-       globus => '/opt/globus',
-       jglobus => '/opt/globus',
-       gsoap => '/usr',
-       mysql => '/usr',
-       'mysql-devel' => '',
-       voms => '/opt/glite',
-       gridsite => '/opt/glite',
-       lcas => '/opt/glite',
-       ant => '/usr',
-       jdk => '/usr',
-       libtar => '/usr',
-);
-
-my %jar = (
-       'commons-codec' => '/usr/share/java/commons-codec-1.3.jar',
-);
-
-
-my %glite_prefix;
-my %need_externs;
-my %need_externs_type;
-my %need_jars;
-my %extrafull;
-my %extranodmod;
-my %deps;
-my %deps_type;
-my %topbuild;
-
-my %lbmodules = (
-       'lb' => [ qw/client common doc logger server state-machine types utils ws-interface ws-test/], 
-       'security' => [qw/gss gsoap-plugin/],
-       'lbjp-common' => [qw/db maildir server-bones trio jp-interface/],
-       'jobid' => [qw/api-c api-cpp/],
-       'jp' => [ qw/client doc index primary server-common ws-interface/ ],
-       );
-
-
-my @opts = (
-       'prefix=s' => \$prefix,
-       'staged=s' => \$staged,
-       'module=s' => \$module,
-       'thrflavour=s' => \$thrflavour,
-       'nothrflavour=s' => \$nothrflavour,
-       'mode=s' => \$mode,
-       'listmodules=s' => \$listmodules,
-       'version=s' => \$version,
-       'output=s' => \$output,
-       'stage=s' => \$stagedir,
-       'lb-tag=s' => \$lb_tag,
-       'lbjp-common-tag=s' => \$lbjp_tag,
-       'jp-tag=s' => \$jp_tag,
-       'security-tag=s' => \$sec_tag,
-       'jobid-tag=s' => \$jobid_tag,
-       'help' => \$help,
-);
-
-for (@nodes) {
-       $enable_nodes{$_} = 0;
-       $disable_nodes{$_} = 0;
-       
-       push @opts,"disable-$_",\$disable_nodes{$_};
-       push @opts,"enable-$_",\$enable_nodes{$_};
-}
-
-push @opts,"with-$_=s",\$extern_prefix{$_} for keys %extern_prefix;
-push @opts,"with-$_=s",\$jar{$_} for keys %jar;
-
-my @keeparg = @ARGV;
-
-GetOptions @opts or die "Errors parsing command line\n";
-
-$extern_prefix{'mysql-devel'}=$extern_prefix{mysql} if $extern_prefix{'mysql-devel'} eq '';
-
-if ($help) { usage(); exit 0; }
-
-if ($listmodules) {
-       my @m = map "org.glite.$listmodules.$_",@{$lbmodules{$listmodules}};
-       print "@m\n";
-       exit 0;
-}
-
-warn "$0: --version and --output make sense only in --mode=etics\n"
-       if ($version || $output) && $mode ne 'etics';
-
-my $en;
-for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; }
-
-my $dis;
-for (keys %disable_nodes) { $dis = 1 if $disable_nodes{$_}; }
-
-die "--enable-* and --disable-* are mutually exclusive\n"
-       if $en && $dis;
-
-die "--module cannot be used with --enable-* or --disable-*\n"
-       if $module && ($en || $dis);
-
-die "$module: unknown module\n" if $module && ! grep $module,@{$lbmodules{lb}},@{$lbmodules{security}},{$lbmodules{jp}};
-
-if ($dis) {
-       for (@nodes) {
-               $enable_nodes{$_} = 1 unless $disable_nodes{$_};
-       }
-}
-
-if (!$en && !$dis) { $enable_nodes{$_} = 1 for (@nodes) } ;
-
-for (keys %enable_nodes) { delete $enable_nodes{$_} unless $enable_nodes{$_}; }
-
-$stagedir = $prefix unless $stagedir;
-
-if ($mode eq 'build') {
-       print "Writing config.status\n";
-       open CONF,">config.status" or die "config.status: $!\n";
-       print CONF "$0 @keeparg\n";
-       close CONF;
-}
-
-
-my @modules;
-my %aux;
-
-if ($module) {
-#      push @modules,split(/[,.]+/,$module);
-       push @modules,$module;
-}
-else {
-       @modules = map(($extranodmod{$_} ? $extranodmod{$_} : 'lb.'.$_),(keys %enable_nodes));
-       
-       my $n;
-
-       do {
-               local $"="\n";
-               $n = $#modules;
-               push @modules,(map @{$deps{$_}},@modules);
-
-               undef %aux; @aux{@modules} = (1) x ($#modules+1);
-               @modules = keys %aux;
-       } while ($#modules > $n);
-}
-
-@aux{@modules} = (1) x ($#modules+1);
-delete $aux{$_} for (split /,/,$staged);
-@modules = keys %aux;
-
-mode_build() if $mode eq 'build';
-mode_checkout() if $mode eq 'checkout';
-mode_etics($module) if $mode eq 'etics';
-
-sub mode_build {
-       print "\nBuilding modules: @modules\n";
-       
-       my @ext = map @{$need_externs{$_}},@modules;
-       my @myjars = map @{$need_jars{$_}},@modules;
-       undef %aux; @aux{@ext} = 1;
-       @ext = keys %aux;
-       undef %aux; @aux{@myjars} = (1) x ($#myjars+1);
-       @myjars = keys %aux;
-       
-       print "\nRequired externals:\n";
-       print "\t$_: $extern_prefix{$_}\n" for @ext;
-       print "\t$_: $jar{$_}\n" for @myjars;
-       print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n";
-       
-       mkinc($_) for @modules;
-       
-       print "Creating Makefile\n";
-       
-       open MAK,">Makefile" or die "Makefile: $!\n";
-       
-       print MAK "all: @modules\n\nclean:\n";
-       
-       for (@modules) {
-               my $full = full($_);
-               my $build = $topbuild{$_} ? '': '/build';
-               print MAK "\tcd $full$build && \${MAKE} clean\n"
-       }
-       
-       print MAK "\ndistclean:\n";
-       
-       for (@modules) {
-               my $full = full($_);
-               print MAK $topbuild{$_} ?
-                       "\tcd $full$build && \${MAKE} distclean\n" :
-                       "\trm -rf $full$build\n"
-       }
-       
-       print MAK "\n";
-       
-       for (@modules) {
-               my %ldeps; undef %ldeps;  
-               @ldeps{@{$deps{$_}}} = 1;
-               for my $x (split /,/,$staged) { delete $ldeps{$x}; }
-               my @dnames = $module ? () : keys %ldeps;
-       
-               my $full = full($_);
-               my $build = $topbuild{$_} ? '': '/build';
-       
-               print MAK "$_: @dnames\n\tcd $full$build && \${MAKE} && \${MAKE} install\n\n";
-       }
-       
-       close MAK;
-}
-       
-sub mode_checkout() {
-       for (@modules) {
-               my $module = $_;
-               my $tag = "";
-               if ($lb_tag){
-                       for (@{$lbmodules{lb}}){
-                               if ("lb.".$_ eq $module){
-                                       $tag = '-r '.$lb_tag;
-                               }
-                       }       
-               }
-               if ($lbjp_tag){
-                       for (@{$lbmodules{'lbjp-common'}}){
-                               if ("lbjp-common.".$_ eq $module){
-                                        $tag = '-r '.$lbjp_tag;
-                                }
-                       }
-               }
-               if ($jp_tag){
-                       for (@{$lbmodules{'jp'}}){
-                               if ("jp.".$_ eq $module){
-                                        $tag = '-r '.$jp_tag;
-                               }
-                        }
-               }
-               if ($sec_tag){
-                       for (@{$lbmodules{security}}){
-                               if ("security.".$_ eq $module){
-                                        $tag = '-r '.$sec_tag;
-                                }
-                       }
-               }
-               if ($jobid_tag){
-                       for (@{$lbmodules{jobid}}){
-                               if ("jobid.".$_ eq $module){
-                                        $tag = '-r '.$jobid_tag;
-                                }
-                       }
-               }
-               #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
-               #       print "found";
-               #}
-               $_ = full($_);
-               print "\n*** Checking out $_\n";
-               system("cvs checkout  $tag $_") == 0 or die "cvs checkout $tag $_: $?\n";
-       }
-}
-
-BEGIN{
-%need_externs_aux = (
-       'lb.client' => [ qw/cppunit:B classads/ ],
-       'lb.client-java' => [ qw/ant:B jglobus jdk:B/ ],
-       'lb.common' => [ qw/expat cppunit:B classads/ ],
-       'lb.doc' => [],
-       'lb.logger' => [ qw/cppunit:B/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql cppunit:B gsoap:B classads voms lcas gridsite/ ],
-       'lb.state-machine' => [ qw/classads/ ],
-       'lb.utils' => [ qw/cppunit:B/ ],
-       'lb.ws-interface' => [],
-       'lb.ws-test' => [ qw/gsoap:B/ ],
-       'lb.types' => [ qw// ],
-       'lbjp-common.db' => [ qw/mysql:R mysql-devel:B/ ],
-       'lbjp-common.maildir' => [ qw// ],
-       'lbjp-common.server-bones' => [ qw// ],
-       'lbjp-common.trio' => [ qw/cppunit:B/ ],
-       'lbjp-common.jp-interface' => [ qw/cppunit:B/ ],
-       'security.gss' =>  [ qw/globus_essentials:R globus:B cares cppunit:B/ ],
-       'security.gsoap-plugin' =>  [ qw/cppunit:B globus_essentials:R globus:B cares gsoap:B/ ],
-       'jobid.api-c' =>  [ qw/cppunit:B/ ],
-       'jobid.api-cpp' =>  [ qw/cppunit:B/ ],
-       'jobid.api-java' =>  [ qw/ant:B jdk:B/ ],
-       'jp.client' => [ qw/gsoap libtar globus_essentials:R globus:B/ ],
-        'jp.doc' => [],
-        'jp.index' => [ qw/gsoap globus_essentials:R globus:B/ ],
-        'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
-        'jp.server-common' => [],
-        'jp.ws-interface' => [],
-);
-
-for my $ext (keys %need_externs_aux) {
-       for (@{$need_externs_aux{$ext}}) {
-               /([^:]*)(?::(.*))?/;
-               push @{$need_externs{$ext}},$1;
-               my $type = $2 ? $2 : 'BR';
-               $need_externs_type{$ext}->{$1} = $type;
-       }
-}
-
-%need_jars = (
-       'jobid.api-java' => [ qw/commons-codec/ ],
-);
-
-for my $jar (keys %need_jars) {
-       for (@{$need_jars{$jar}}) {
-               $need_externs_type{$jar}->{$_} = 'BR';  # XXX
-       }
-}
-
-%deps_aux = (
-       'lb.client' => [ qw/
-               lb.types:B lb.common
-               lbjp-common.trio
-               jobid.api-cpp jobid.api-c
-               security.gss
-       / ],
-       'lb.client-java' => [ qw/
-               lb.types:B
-               jobid.api-java
-       / ],
-       'lb.common' => [ qw/
-               jobid.api-cpp jobid.api-c
-               lb.types:B lbjp-common.trio security.gss
-       / ],
-       'lb.doc' => [ qw/lb.types:B/ ],
-       'lb.logger' => [ qw/
-               lbjp-common.trio
-               jobid.api-c
-               lb.common
-               security.gss
-       / ],
-       'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
-               lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir
-               jobid.api-c
-               security.gsoap-plugin security.gss
-       / ],
-       'lb.state-machine' => [ qw/lb.types:B lb.common lbjp-common.jp-interface security.gss/ ],
-       'lb.utils' => [ qw/
-               lbjp-common.jp-interface
-               jobid.api-c
-               lbjp-common.trio lbjp-common.maildir
-               lb.client lb.state-machine
-       / ],
-       'lb.ws-test' => [ qw/security.gsoap-plugin lb.ws-interface/ ],
-       'lb.ws-interface' => [ qw/lb.types:B/ ],
-       'lb.types' => [ qw// ],
-       'lbjp-common.db' => [ qw/lbjp-common.trio/ ],
-       'lbjp-common.maildir' => [ qw// ],
-       'lbjp-common.server-bones' => [ qw// ],
-       'lbjp-common.trio' => [ qw// ],
-       'security.gss' =>  [ qw// ],
-       'security.gsoap-plugin' =>  [ qw/security.gss/ ],
-       'jobid.api-c' =>  [ qw// ],
-       'jobid.api-cpp' =>  [ qw/jobid.api-c/ ],
-       'jobid.api-java' =>  [ qw// ],
-
-       'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ],
-
-       'jp.client' => [ qw/
-                jp.ws-interface
-                lbjp-common.jp-interface lbjp-common.maildir
-                jobid.api-c
-                security.gsoap-plugin
-        / ],
-       'jp.doc' => [ qw// ],
-       'jp.index' => [ qw/
-                jp.server-common jp.ws-interface
-                lbjp-common.jp-interface lbjp-common.trio lbjp-common.db lbjp-common.server-bones
-                security.gsoap-plugin
-        / ],
-       'jp.primary' => [ qw/
-                jobid.api-c
-                jp.server-common jp.ws-interface
-                lb.state-machine
-                lbjp-common.jp-interface lbjp-common.trio lbjp-common.db lbjp-common.server-bones
-                security.gsoap-plugin
-        / ],
-       'jp.server-common' => [ qw/ 
-                lbjp-common.jp-interface lbjp-common.db
-        / ],
-       'jp.ws-interface' => [ qw// ],
-);
-
-for my $ext (keys %deps_aux) {
-       for (@{$deps_aux{$ext}}) {
-               /([^:]*)(?::(.*))?/;
-               push @{$deps{$ext}},$1;
-               my $type = $2 ? $2 : 'BR';
-               $deps_type{$ext}->{$1} = $type;
-       }
-}
-
-
-%extrafull = ( gridsite=>'org.gridsite.core');
-
-#( java => 'client-java' );
-%extranodmod = (
-       db => 'lbjp-common.db',
-       jpprimary => 'jp.primary',
-       jpindex => 'jp.index',
-       jpclient => 'jp.client',
-);
-
-my @t = qw/lb.client-java jobid.api-java lb.types/;
-@topbuild{@t} = (1) x ($#t+1);
-}
-
-sub full
-{
-       my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
-}
-
-sub mkinc
-{
-       my %aux;
-       undef %aux;
-       my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java
-security.gss security.gsoap-plugin
-jobid.api-c jobid.api-cpp jobid.api-java
-lbjp-common.db lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface
-jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-/;
-       @aux{@m} = (1) x ($#m+1);
-
-       my $short = shift;
-       my $full = full $short;
-
-       unless ($aux{$short}) {
-               print "Makefile.inc not needed in $full\n";
-               return;
-       }
-
-       my $build = '';
-       
-       unless ($topbuild{$_}) {
-               $build = '/build';
-               unless (-d "$full/build") {
-                       mkdir "$full/build" or die "mkdir $full/build: $!\n";
-               }
-               unlink "$full/build/Makefile";
-               symlink "../Makefile","$full/build/Makefile" or die "symlink ../Makefile $full/build/Makefile: $!\n";
-       }
-
-       open MKINC,">$full$build/Makefile.inc"
-               or die "$full$build/Makefile.inc: $!\n";
-
-       print "Creating $full$build/Makefile.inc\n";
-
-       print MKINC qq{
-PREFIX = $prefix
-stagedir = $stagedir
-thrflavour = $thrflavour
-nothrflavour = $nothrflavour
-};
-
-       for (@{$need_externs{$short}}) {
-               print MKINC "${_}_prefix = $extern_prefix{$_}\n"
-       }
-
-       for (@{$need_jars{$short}}) {
-               print MKINC "${_}_jar = $jar{$_}\n"
-       }
-
-       my $need_gsoap = 0;
-       for (@{$need_externs{$short}})  { $need_gsoap = 1 if $_ eq 'gsoap'; }
-
-       print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
-
-       close MKINC;
-}
-
-my %etics_externs;
-my %etics_projects;
-BEGIN{
-       %etics_externs = (
-               globus_essentials=>'vdt_globus_essentials',
-               globus=>'globus',
-               cares=>'c-ares',
-               voms=>'org.glite.security.voms-api-cpp',
-               gridsite=>'org.gridsite.shared',
-               lcas=>'org.glite.security.lcas',
-       );
-       %etics_projects = (
-               vdt=>[qw/globus globus_essentials/],
-               'org.glite'=>[qw/voms gridsite lcas/],
-       );
-};
-
-sub mode_etics {
-       $fmod = shift;
-
-       die "$0: --module required with --etics\n" unless $fmod;
-       
-       my ($subsys,$module) = split /\./,$fmod;
-
-       my ($major,$minor,$rev,$age);
-
-       if ($version) {
-               $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/;
-               ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
-       }
-       else { 
-               open V,"org.glite.$subsys.$module/project/version.properties"
-                       or die "org.glite.$subsys.$module/project/version.properties: $!\n";
-       
-               while ($_ = <V>) {
-                       chomp;
-                       ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
-               }
-               close V;
-       }
-
-       my @copts = ();
-       my %ge;
-       @ge{@{$etics_projects{'org.glite'}}} = (1) x ($#{$etics_projects{'org.glite'}}+1);
-
-       for (@{$need_externs{"$subsys.$module"}}) {
-           if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
-           }
-       }
-
-       for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-
-               push @copts,"--with-$_ \${$eext.location}/$_*.jar";
-       }
-
-
-       my $conf = "glite-$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
-       my $file = $output ? $output : "$conf.ini";
-       open C,">$file" or die "$file: $!\n";
-
-       my $buildroot = $topbuild{"$subsys.$module"} ? '' : "build.root = build\n";
-
-       my $confdir = $topbuild{"$subsys.$module"} ? '..' : '../..';
-
-       print STDERR "Writing $file\n";
-       print C qq{
-[Configuration-$conf]
-profile = None
-moduleName = org.glite.$subsys.$module
-displayName = $conf
-description = org.glite.$subsys.$module
-projectName = org.glite
-age = $age
-deploymentType = None
-tag = $conf
-version = $major.$minor.$rev
-path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz
-
-[Platform-default:VcsCommand]
-displayName = None
-description = None
-tag = cvs -d \${vcsroot} tag -R \${tag} \${moduleName}
-branch = None
-commit = None
-checkout = cvs -d \${vcsroot} co -r \${tag} \${moduleName}
-
-[Platform-default:BuildCommand]
-postpublish = None
-packaging = None
-displayName = None
-description = None
-doc = None
-prepublish = None
-publish = None
-compile = make
-init = None
-install = make install
-clean = make clean
-test = make check
-configure = cd $confdir && \${moduleName}/configure --thrflavour=\${globus.thr.flavor} --nothrflavour=\${globus.nothr.flavor} --prefix=\${prefix} --stage=\${stageDir} --module $subsys.$module @copts
-checkstyle = None
-
-[Platform-default:Property]
-$buildroot
-
-[Platform-default:DynamicDependency]
-
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
-                       }
-               }
-
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
-               print C "$proj|$eext = $type\n";
-       }
-
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "org.glite|org.glite.$_ = $type\n";
-       }
-
-       close C;
-}
-
-sub gsoap_version {
-       local $_;
-       my $gsoap_version;
-       open S,"$extern_prefix{gsoap}/bin/soapcpp2 -v 2>&1 |" or die "$extern_prefix{gsoap}/bin/soapcpp2: $!\n";
-
-       while ($_ = <S>) {
-               chomp;
-
-               $gsoap_version = $1 if /The gSOAP Stub and Skeleton Compiler for C and C\+\+ ([.[:digit:][:alpha:]]+)$/;
-       }
-       close S;
-       return $gsoap_version;
-}
-
-
-sub usage {
-       my @ext = keys %extern_prefix;
-       my @myjars, keys %jar;
-
-       print STDERR qq{
-usage: $0 options
-
-General options (defaults in []):
-  --prefix=PREFIX              destination directory [./stage]
-  --staged=module,module,...   what is already in PREFIX (specify without org.glite.)
-  --thrflavour=flavour
-  --nothrflavour=flavour       threaded and non-treaded flavours [gcc64dbgpthr,gcc64dbg]
-  --listmodules=subsys          list modules of a subsystem
-  
-Mode of operation:
-  --mode={checkout|build|etics}        what to do [build]
-  
-What to build:
-  --module=module              build this module only (mostly in-Etics operation)
-  --enable-NODE                        build this "node" (set of modules) only. Available nodes are
-                                       @{$lbmodules{lb}},@{$lbmodules{security}}
-  --disable-NODE               don't build this node
-  --lb-tag=tag                 checkout LB modules with specific tag
-  --jp-tag=tag                 checkout JP modules with specific tag
-  --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
-  --security-tag=tag           checkout security modules with specific tag
-  --jobid-tag=tag              checkout jobid modules with specific tag
-
-Dependencies:
-  --with-EXTERNAL=PATH         where to look for an external. Required externals
-                               (not all for all modules) are:
-                                       @ext
-  --with-JAR=JAR               where to look for jars. Required jars are:
-                                       @myjars
-                               Summary of what will be used is always printed
-
-};
-
-}
diff --git a/org.glite.jobid.api-cpp/interface/JobId.h b/org.glite.jobid.api-cpp/interface/JobId.h
deleted file mode 100755 (executable)
index 47bddc0..0000000
+++ /dev/null
@@ -1,334 +0,0 @@
-#ifndef GLITE_JOBID_JOBID_H
-#define GLITE_JOBID_JOBID_H
-
-#include <string>
-#include <stdexcept>
-#include <new>
-#include <cerrno>
-#include <cassert>
-#include <cstdlib>
-
-#include "glite/jobid/cjobid.h"
-
-
-namespace glite { 
-namespace jobid {
-
-
-/**
- * class glite::jobid::JobIdError
- */
-       
-class JobIdError : public std::runtime_error {
-public:
-       /** Constructor for mandatory fields.
-        *
-        * Updates all the mandatory fields and names the exception.
-        * \param[in] exception         Error message describing the exception.
-        */
-       JobIdError(std::string const& exception)
-           : std::runtime_error(std::string("JobId: bad argument (") + exception + ")")
-       {}
-               
-       virtual ~JobIdError() throw() 
-       {}
-
-};
-
-
-/**
- * class glite::jobid::JobId
- */
-
-class JobId 
-{
-public:
-       class Hostname {
-       public: 
-               std::string const& name;
-               Hostname(std::string const& n) : name(n) 
-               {}
-       };
-
-       //@name Constructors/Destructor
-       //@{
-
-       /**
-        * Constructor from string format.
-        * @param  job_id_string 
-        * @throws  Exception When a string is passed in a wrong format
-        */
-       JobId(std::string const& job_id_string);
-
-       /** 
-        * Constructor from job id components.
-        * \param host
-        * \param port
-        * \param unique
-        */
-       explicit JobId(Hostname const& host = Hostname("localhost"), 
-                      int port = GLITE_JOBID_DEFAULT_PORT, 
-                      std::string const& unique = std::string(""));
-
-       /**
-        * Destructor.
-        */
-       ~JobId();
-
-       //@}
-
-       //@ Conversions, assignments, comparisons
-       //@{
-
-       /**
-        * Copy constructor.
-        */
-       JobId(JobId const&);
-
-       /** 
-        * Constructor from C jobid. 
-        * \param src C API job id 
-        */
-       explicit JobId(glite_jobid_const_t src);
-
-       /** 
-        * Assignment operator.
-        * Create a deep copy of the JobId instance.
-        */
-       JobId& operator=(JobId const& src);
-       /** 
-        * Casting operator.
-        */
-       glite_jobid_const_t c_jobid() const;
-
-       /** 
-        * Returns the string representing the job id
-        * @return String representation of a JobId
-        */
-       std::string toString() const;
-
-
-       /**
-        * Comparison given by lexicographical ordering of string representations.
-        * @return Result of comparison.
-        */
-       int operator< (const JobId &j) const;
-       //@}
-
-
-       /**@name Member access
-        * @{ 
-        */
-
-       /**
-        * Get server:port.
-        * @return hostname and port
-        */
-       std::string server() const;
-
-       /**
-        * Get host.
-        * @return hostname
-        */
-       std::string host() const;
-
-       /** 
-        * Get port.
-        * @return port
-        */
-       int port() const;
-
-       /**
-        * Get unique.
-        * @return unique string
-        */
-       std::string unique() const;
-
-       //@}
-
-private:
-       glite_jobid_t  m_jobid;
-};
-
-
-
-// -------------------- implementation ------------------------
-
-inline
-JobId::JobId(std::string const& job_id_string) 
-{
-       int ret = glite_jobid_parse(job_id_string.c_str(), 
-                                   &m_jobid);
-       switch(ret) {
-       case EINVAL:
-               throw JobIdError(job_id_string);
-
-       case ENOMEM:
-               throw std::bad_alloc();
-
-       default:
-           break;
-       }
-}
-
-
-inline
-JobId::JobId(JobId::Hostname const& host, int port, std::string const& unique)
-{
-       if(port < 0) {
-               throw JobIdError("negative port");
-       }
-
-       int ret = glite_jobid_recreate(host.name.c_str(), port, 
-                                      unique.empty() ? NULL : unique.c_str(),
-                                      &m_jobid);
-       switch(ret) {
-       case EINVAL:
-           throw JobIdError(host.name);
-         
-       case ENOMEM:
-           throw std::bad_alloc();
-
-       default:
-           break;
-       }
-}
-
-
-inline
-JobId::~JobId() {
-       glite_jobid_free(m_jobid);
-}
-
-
-inline
-JobId::JobId(JobId const& src)
-{
-       int ret = glite_jobid_dup(src.m_jobid, 
-                                 &m_jobid);
-       if(ret) {
-           // we rely on dup returning only ENOMEM on error
-           assert(ret == ENOMEM);
-           throw std::bad_alloc();
-       }
-}
-
-
-inline
-JobId::JobId(glite_jobid_const_t src) 
-{
-       if(src == NULL) {
-               throw JobIdError("null");
-       }
-
-       int ret = glite_jobid_dup(src,
-                                 &m_jobid);
-       if(ret) {
-           throw std::bad_alloc();
-       }
-}
-
-
-inline
-JobId& 
-JobId::operator=(JobId const& src) 
-{
-       if(this == &src) {
-               return *this;
-       }
-
-       glite_jobid_free(m_jobid);
-       int ret = glite_jobid_dup(src.m_jobid, 
-                                 &m_jobid);
-       if(ret) {
-           throw std::bad_alloc();
-       }
-       return *this;
-}
-
-
-inline
-glite_jobid_const_t
-JobId::c_jobid() const
-{
-       return m_jobid;
-}
-
-
-inline
-std::string
-JobId::toString() const
-{
-       char *out = glite_jobid_unparse(m_jobid);
-       std::string res(out);
-
-       free(out);
-       return res;
-}
-
-
-inline
-int
-JobId::operator< (const JobId &j) const
-{
-       std::string me(toString());
-       std::string js(j.toString());
-
-       return(me < js);
-}
-
-
-inline
-std::string
-JobId::server() const
-{
-       char *server = glite_jobid_getServer(m_jobid);
-       std::string res(server);
-
-       free(server);
-       return res;
-}
-
-
-inline
-std::string 
-JobId::host() const
-{
-       char *name;
-       unsigned int port;
-
-       glite_jobid_getServerParts_internal(m_jobid, 
-                                           &name, &port);
-       return std::string(name);
-}
-
-
-inline
-int
-JobId::port() const
-{
-       char *name;
-       unsigned int port;
-
-       glite_jobid_getServerParts_internal(m_jobid,
-                                           &name, &port);
-       return port;
-}
-
-
-inline
-std::string
-JobId::unique() const
-{
-       char *unique = glite_jobid_getUnique_internal(m_jobid);
-       std::string res(unique);
-       
-       return res;
-}
-
-
-} // namespace jobid
-} // namespace glite
-
-#endif // GLITE_JOBID_JOBID_H
diff --git a/org.glite.jobid.api-cpp/project/ChangeLog b/org.glite.jobid.api-cpp/project/ChangeLog
deleted file mode 100644 (file)
index f02e829..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-1.0.0-1
-- initial release
-
-1.0.0-2
-- fixes in etics' invocation of configure
-
-1.0.0-4
-- configure script update
-- compatibility with g++ 4.3.2 
-
diff --git a/org.glite.jobid.api-cpp/project/version.properties b/org.glite.jobid.api-cpp/project/version.properties
deleted file mode 100644 (file)
index 2213c8e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# : /cvs/glite/org.glite.jobid.api-cpp/project/version.properties,v 1.1 2009/01/16 08:48:52 zsustr Exp $
-module.version=1.0.0
-module.age=4
diff --git a/org.glite.jobid.api-java/Makefile b/org.glite.jobid.api-java/Makefile
deleted file mode 100644 (file)
index af36ad7..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
--include Makefile.inc
-
-all compile:
-       ${ant_prefix}/bin/ant -Dfile.reference.commons-codec.jar=${commons-codec_jar}
-
-install:
-       mkdir -p ${PREFIX}/share/java
-       cp dist/jobid-api-java.jar ${PREFIX}/share/java
-
-check:
-
-clean:
-       echo TODO
diff --git a/org.glite.jobid.api-java/build.xml b/org.glite.jobid.api-java/build.xml
deleted file mode 100755 (executable)
index 90e26a7..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- You may freely edit this file. See commented blocks below for -->
-<!-- some examples of how to customize the build. -->
-<!-- (If you delete it and reopen the project it will be recreated.) -->
-<project name="jobid-api-java" default="default" basedir=".">
-    <description>Builds, tests, and runs the project jobid-api-java.</description>
-    <import file="nbproject/build-impl.xml"/>
-    <!--
-
-    There exist several targets which are by default empty and which can be 
-    used for execution of your tasks. These targets are usually executed 
-    before and after some main targets. They are: 
-
-      -pre-init:                 called before initialization of project properties
-      -post-init:                called after initialization of project properties
-      -pre-compile:              called before javac compilation
-      -post-compile:             called after javac compilation
-      -pre-compile-single:       called before javac compilation of single file
-      -post-compile-single:      called after javac compilation of single file
-      -pre-compile-test:         called before javac compilation of JUnit tests
-      -post-compile-test:        called after javac compilation of JUnit tests
-      -pre-compile-test-single:  called before javac compilation of single JUnit test
-      -post-compile-test-single: called after javac compilation of single JUunit test
-      -pre-jar:                  called before JAR building
-      -post-jar:                 called after JAR building
-      -post-clean:               called after cleaning build products
-
-    (Targets beginning with '-' are not intended to be called on their own.)
-
-    Example of inserting an obfuscator after compilation could look like this:
-
-        <target name="-post-compile">
-            <obfuscate>
-                <fileset dir="${build.classes.dir}"/>
-            </obfuscate>
-        </target>
-
-    For list of available properties check the imported 
-    nbproject/build-impl.xml file. 
-
-
-    Another way to customize the build is by overriding existing main targets.
-    The targets of interest are: 
-
-      -init-macrodef-javac:     defines macro for javac compilation
-      -init-macrodef-junit:     defines macro for junit execution
-      -init-macrodef-debug:     defines macro for class debugging
-      -init-macrodef-java:      defines macro for class execution
-      -do-jar-with-manifest:    JAR building (if you are using a manifest)
-      -do-jar-without-manifest: JAR building (if you are not using a manifest)
-      run:                      execution of project 
-      -javadoc-build:           Javadoc generation
-      test-report:              JUnit report generation
-
-    An example of overriding the target for project execution could look like this:
-
-        <target name="run" depends="jobid-api-java-impl.jar">
-            <exec dir="bin" executable="launcher.exe">
-                <arg file="${dist.jar}"/>
-            </exec>
-        </target>
-
-    Notice that the overridden target depends on the jar target and not only on 
-    the compile target as the regular run target does. Again, for a list of available 
-    properties which you can use, check the target you are overriding in the
-    nbproject/build-impl.xml file. 
-
-    -->
-</project>
diff --git a/org.glite.jobid.api-java/configure b/org.glite.jobid.api-java/configure
deleted file mode 100755 (executable)
index 455145c..0000000
+++ /dev/null
@@ -1,692 +0,0 @@
-#!/usr/bin/perl
-
-# WARNING: Don't edit this file unless it is the master copy in org.glite.lb
-#
-# For the purpose of standalone builds of lb/jobid/lbjp-common components
-# it is copied on tagging 
-
-# $Header$
-
-use Getopt::Long;
-
-my $pwd = `pwd`; chomp $pwd;
-my $prefix = $pwd.'/stage';
-my $stagedir;
-my $staged;
-my $module;
-my $thrflavour = 'gcc64dbgpthr';
-my $nothrflavour = 'gcc64dbg';
-my $mode = 'build';
-my $help = 0;
-my $listmodules;
-my $version;
-my $output;
-my $lb_tag = '';
-my $lbjp_tag = '';
-my $jp_tag = '';
-my $sec_tag = '';
-my $jobid_tag = '';
-
-my @nodes = qw/client server logger utils doc ws-test db jpprimary jpindex jpclient/;
-my %enable_nodes;
-my %disable_nodes;
-
-my %extern_prefix = (
-       cares => '/opt/c-ares',
-       classads => '/opt/classads',
-       cppunit => '/usr',
-       expat => '/usr',
-       globus => '/opt/globus',
-       jglobus => '/opt/globus',
-       gsoap => '/usr',
-       mysql => '/usr',
-       'mysql-devel' => '',
-       voms => '/opt/glite',
-       gridsite => '/opt/glite',
-       lcas => '/opt/glite',
-       ant => '/usr',
-       jdk => '/usr',
-       libtar => '/usr',
-);
-
-my %jar = (
-       'commons-codec' => '/usr/share/java/commons-codec-1.3.jar',
-);
-
-
-my %glite_prefix;
-my %need_externs;
-my %need_externs_type;
-my %need_jars;
-my %extrafull;
-my %extranodmod;
-my %deps;
-my %deps_type;
-my %topbuild;
-
-my %lbmodules = (
-       'lb' => [ qw/client common doc logger server state-machine types utils ws-interface ws-test/], 
-       'security' => [qw/gss gsoap-plugin/],
-       'lbjp-common' => [qw/db maildir server-bones trio jp-interface/],
-       'jobid' => [qw/api-c api-cpp/],
-       'jp' => [ qw/client doc index primary server-common ws-interface/ ],
-       );
-
-
-my @opts = (
-       'prefix=s' => \$prefix,
-       'staged=s' => \$staged,
-       'module=s' => \$module,
-       'thrflavour=s' => \$thrflavour,
-       'nothrflavour=s' => \$nothrflavour,
-       'mode=s' => \$mode,
-       'listmodules=s' => \$listmodules,
-       'version=s' => \$version,
-       'output=s' => \$output,
-       'stage=s' => \$stagedir,
-       'lb-tag=s' => \$lb_tag,
-       'lbjp-common-tag=s' => \$lbjp_tag,
-       'jp-tag=s' => \$jp_tag,
-       'security-tag=s' => \$sec_tag,
-       'jobid-tag=s' => \$jobid_tag,
-       'help' => \$help,
-);
-
-for (@nodes) {
-       $enable_nodes{$_} = 0;
-       $disable_nodes{$_} = 0;
-       
-       push @opts,"disable-$_",\$disable_nodes{$_};
-       push @opts,"enable-$_",\$enable_nodes{$_};
-}
-
-push @opts,"with-$_=s",\$extern_prefix{$_} for keys %extern_prefix;
-push @opts,"with-$_=s",\$jar{$_} for keys %jar;
-
-my @keeparg = @ARGV;
-
-GetOptions @opts or die "Errors parsing command line\n";
-
-$extern_prefix{'mysql-devel'}=$extern_prefix{mysql} if $extern_prefix{'mysql-devel'} eq '';
-
-if ($help) { usage(); exit 0; }
-
-if ($listmodules) {
-       my @m = map "org.glite.$listmodules.$_",@{$lbmodules{$listmodules}};
-       print "@m\n";
-       exit 0;
-}
-
-warn "$0: --version and --output make sense only in --mode=etics\n"
-       if ($version || $output) && $mode ne 'etics';
-
-my $en;
-for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; }
-
-my $dis;
-for (keys %disable_nodes) { $dis = 1 if $disable_nodes{$_}; }
-
-die "--enable-* and --disable-* are mutually exclusive\n"
-       if $en && $dis;
-
-die "--module cannot be used with --enable-* or --disable-*\n"
-       if $module && ($en || $dis);
-
-die "$module: unknown module\n" if $module && ! grep $module,@{$lbmodules{lb}},@{$lbmodules{security}},{$lbmodules{jp}};
-
-if ($dis) {
-       for (@nodes) {
-               $enable_nodes{$_} = 1 unless $disable_nodes{$_};
-       }
-}
-
-if (!$en && !$dis) { $enable_nodes{$_} = 1 for (@nodes) } ;
-
-for (keys %enable_nodes) { delete $enable_nodes{$_} unless $enable_nodes{$_}; }
-
-$stagedir = $prefix unless $stagedir;
-
-if ($mode eq 'build') {
-       print "Writing config.status\n";
-       open CONF,">config.status" or die "config.status: $!\n";
-       print CONF "$0 @keeparg\n";
-       close CONF;
-}
-
-
-my @modules;
-my %aux;
-
-if ($module) {
-#      push @modules,split(/[,.]+/,$module);
-       push @modules,$module;
-}
-else {
-       @modules = map(($extranodmod{$_} ? $extranodmod{$_} : 'lb.'.$_),(keys %enable_nodes));
-       
-       my $n;
-
-       do {
-               local $"="\n";
-               $n = $#modules;
-               push @modules,(map @{$deps{$_}},@modules);
-
-               undef %aux; @aux{@modules} = (1) x ($#modules+1);
-               @modules = keys %aux;
-       } while ($#modules > $n);
-}
-
-@aux{@modules} = (1) x ($#modules+1);
-delete $aux{$_} for (split /,/,$staged);
-@modules = keys %aux;
-
-mode_build() if $mode eq 'build';
-mode_checkout() if $mode eq 'checkout';
-mode_etics($module) if $mode eq 'etics';
-
-sub mode_build {
-       print "\nBuilding modules: @modules\n";
-       
-       my @ext = map @{$need_externs{$_}},@modules;
-       my @myjars = map @{$need_jars{$_}},@modules;
-       undef %aux; @aux{@ext} = 1;
-       @ext = keys %aux;
-       undef %aux; @aux{@myjars} = (1) x ($#myjars+1);
-       @myjars = keys %aux;
-       
-       print "\nRequired externals:\n";
-       print "\t$_: $extern_prefix{$_}\n" for @ext;
-       print "\t$_: $jar{$_}\n" for @myjars;
-       print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n";
-       
-       mkinc($_) for @modules;
-       
-       print "Creating Makefile\n";
-       
-       open MAK,">Makefile" or die "Makefile: $!\n";
-       
-       print MAK "all: @modules\n\nclean:\n";
-       
-       for (@modules) {
-               my $full = full($_);
-               my $build = $topbuild{$_} ? '': '/build';
-               print MAK "\tcd $full$build && \${MAKE} clean\n"
-       }
-       
-       print MAK "\ndistclean:\n";
-       
-       for (@modules) {
-               my $full = full($_);
-               print MAK $topbuild{$_} ?
-                       "\tcd $full$build && \${MAKE} distclean\n" :
-                       "\trm -rf $full$build\n"
-       }
-       
-       print MAK "\n";
-       
-       for (@modules) {
-               my %ldeps; undef %ldeps;  
-               @ldeps{@{$deps{$_}}} = 1;
-               for my $x (split /,/,$staged) { delete $ldeps{$x}; }
-               my @dnames = $module ? () : keys %ldeps;
-       
-               my $full = full($_);
-               my $build = $topbuild{$_} ? '': '/build';
-       
-               print MAK "$_: @dnames\n\tcd $full$build && \${MAKE} && \${MAKE} install\n\n";
-       }
-       
-       close MAK;
-}
-       
-sub mode_checkout() {
-       for (@modules) {
-               my $module = $_;
-               my $tag = "";
-               if ($lb_tag){
-                       for (@{$lbmodules{lb}}){
-                               if ("lb.".$_ eq $module){
-                                       $tag = '-r '.$lb_tag;
-                               }
-                       }       
-               }
-               if ($lbjp_tag){
-                       for (@{$lbmodules{'lbjp-common'}}){
-                               if ("lbjp-common.".$_ eq $module){
-                                        $tag = '-r '.$lbjp_tag;
-                                }
-                       }
-               }
-               if ($jp_tag){
-                       for (@{$lbmodules{'jp'}}){
-                               if ("jp.".$_ eq $module){
-                                        $tag = '-r '.$jp_tag;
-                               }
-                        }
-               }
-               if ($sec_tag){
-                       for (@{$lbmodules{security}}){
-                               if ("security.".$_ eq $module){
-                                        $tag = '-r '.$sec_tag;
-                                }
-                       }
-               }
-               if ($jobid_tag){
-                       for (@{$lbmodules{jobid}}){
-                               if ("jobid.".$_ eq $module){
-                                        $tag = '-r '.$jobid_tag;
-                                }
-                       }
-               }
-               #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
-               #       print "found";
-               #}
-               $_ = full($_);
-               print "\n*** Checking out $_\n";
-               system("cvs checkout  $tag $_") == 0 or die "cvs checkout $tag $_: $?\n";
-       }
-}
-
-BEGIN{
-%need_externs_aux = (
-       'lb.client' => [ qw/cppunit:B classads/ ],
-       'lb.client-java' => [ qw/ant:B jglobus jdk:B/ ],
-       'lb.common' => [ qw/expat cppunit:B classads/ ],
-       'lb.doc' => [],
-       'lb.logger' => [ qw/cppunit:B/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql cppunit:B gsoap:B classads voms lcas gridsite/ ],
-       'lb.state-machine' => [ qw/classads/ ],
-       'lb.utils' => [ qw/cppunit:B/ ],
-       'lb.ws-interface' => [],
-       'lb.ws-test' => [ qw/gsoap:B/ ],
-       'lb.types' => [ qw// ],
-       'lbjp-common.db' => [ qw/mysql:R mysql-devel:B/ ],
-       'lbjp-common.maildir' => [ qw// ],
-       'lbjp-common.server-bones' => [ qw// ],
-       'lbjp-common.trio' => [ qw/cppunit:B/ ],
-       'lbjp-common.jp-interface' => [ qw/cppunit:B/ ],
-       'security.gss' =>  [ qw/globus_essentials:R globus:B cares cppunit:B/ ],
-       'security.gsoap-plugin' =>  [ qw/cppunit:B globus_essentials:R globus:B cares gsoap:B/ ],
-       'jobid.api-c' =>  [ qw/cppunit:B/ ],
-       'jobid.api-cpp' =>  [ qw/cppunit:B/ ],
-       'jobid.api-java' =>  [ qw/ant:B jdk:B/ ],
-       'jp.client' => [ qw/gsoap libtar globus_essentials:R globus:B/ ],
-        'jp.doc' => [],
-        'jp.index' => [ qw/gsoap globus_essentials:R globus:B/ ],
-        'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
-        'jp.server-common' => [],
-        'jp.ws-interface' => [],
-);
-
-for my $ext (keys %need_externs_aux) {
-       for (@{$need_externs_aux{$ext}}) {
-               /([^:]*)(?::(.*))?/;
-               push @{$need_externs{$ext}},$1;
-               my $type = $2 ? $2 : 'BR';
-               $need_externs_type{$ext}->{$1} = $type;
-       }
-}
-
-%need_jars = (
-       'jobid.api-java' => [ qw/commons-codec/ ],
-);
-
-for my $jar (keys %need_jars) {
-       for (@{$need_jars{$jar}}) {
-               $need_externs_type{$jar}->{$_} = 'BR';  # XXX
-       }
-}
-
-%deps_aux = (
-       'lb.client' => [ qw/
-               lb.types:B lb.common
-               lbjp-common.trio
-               jobid.api-cpp jobid.api-c
-               security.gss
-       / ],
-       'lb.client-java' => [ qw/
-               lb.types:B
-               jobid.api-java
-       / ],
-       'lb.common' => [ qw/
-               jobid.api-cpp jobid.api-c
-               lb.types:B lbjp-common.trio security.gss
-       / ],
-       'lb.doc' => [ qw/lb.types:B/ ],
-       'lb.logger' => [ qw/
-               lbjp-common.trio
-               jobid.api-c
-               lb.common
-               security.gss
-       / ],
-       'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
-               lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir
-               jobid.api-c
-               security.gsoap-plugin security.gss
-       / ],
-       'lb.state-machine' => [ qw/lb.types:B lb.common lbjp-common.jp-interface security.gss/ ],
-       'lb.utils' => [ qw/
-               lbjp-common.jp-interface
-               jobid.api-c
-               lbjp-common.trio lbjp-common.maildir
-               lb.client lb.state-machine
-       / ],
-       'lb.ws-test' => [ qw/security.gsoap-plugin lb.ws-interface/ ],
-       'lb.ws-interface' => [ qw/lb.types:B/ ],
-       'lb.types' => [ qw// ],
-       'lbjp-common.db' => [ qw/lbjp-common.trio/ ],
-       'lbjp-common.maildir' => [ qw// ],
-       'lbjp-common.server-bones' => [ qw// ],
-       'lbjp-common.trio' => [ qw// ],
-       'security.gss' =>  [ qw// ],
-       'security.gsoap-plugin' =>  [ qw/security.gss/ ],
-       'jobid.api-c' =>  [ qw// ],
-       'jobid.api-cpp' =>  [ qw/jobid.api-c/ ],
-       'jobid.api-java' =>  [ qw// ],
-
-       'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ],
-
-       'jp.client' => [ qw/
-                jp.ws-interface
-                lbjp-common.jp-interface lbjp-common.maildir
-                jobid.api-c
-                security.gsoap-plugin
-        / ],
-       'jp.doc' => [ qw// ],
-       'jp.index' => [ qw/
-                jp.server-common jp.ws-interface
-                lbjp-common.jp-interface lbjp-common.trio lbjp-common.db lbjp-common.server-bones
-                security.gsoap-plugin
-        / ],
-       'jp.primary' => [ qw/
-                jobid.api-c
-                jp.server-common jp.ws-interface
-                lb.state-machine
-                lbjp-common.jp-interface lbjp-common.trio lbjp-common.db lbjp-common.server-bones
-                security.gsoap-plugin
-        / ],
-       'jp.server-common' => [ qw/ 
-                lbjp-common.jp-interface lbjp-common.db
-        / ],
-       'jp.ws-interface' => [ qw// ],
-);
-
-for my $ext (keys %deps_aux) {
-       for (@{$deps_aux{$ext}}) {
-               /([^:]*)(?::(.*))?/;
-               push @{$deps{$ext}},$1;
-               my $type = $2 ? $2 : 'BR';
-               $deps_type{$ext}->{$1} = $type;
-       }
-}
-
-
-%extrafull = ( gridsite=>'org.gridsite.core');
-
-#( java => 'client-java' );
-%extranodmod = (
-       db => 'lbjp-common.db',
-       jpprimary => 'jp.primary',
-       jpindex => 'jp.index',
-       jpclient => 'jp.client',
-);
-
-my @t = qw/lb.client-java jobid.api-java lb.types/;
-@topbuild{@t} = (1) x ($#t+1);
-}
-
-sub full
-{
-       my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
-}
-
-sub mkinc
-{
-       my %aux;
-       undef %aux;
-       my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java
-security.gss security.gsoap-plugin
-jobid.api-c jobid.api-cpp jobid.api-java
-lbjp-common.db lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface
-jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-/;
-       @aux{@m} = (1) x ($#m+1);
-
-       my $short = shift;
-       my $full = full $short;
-
-       unless ($aux{$short}) {
-               print "Makefile.inc not needed in $full\n";
-               return;
-       }
-
-       my $build = '';
-       
-       unless ($topbuild{$_}) {
-               $build = '/build';
-               unless (-d "$full/build") {
-                       mkdir "$full/build" or die "mkdir $full/build: $!\n";
-               }
-               unlink "$full/build/Makefile";
-               symlink "../Makefile","$full/build/Makefile" or die "symlink ../Makefile $full/build/Makefile: $!\n";
-       }
-
-       open MKINC,">$full$build/Makefile.inc"
-               or die "$full$build/Makefile.inc: $!\n";
-
-       print "Creating $full$build/Makefile.inc\n";
-
-       print MKINC qq{
-PREFIX = $prefix
-stagedir = $stagedir
-thrflavour = $thrflavour
-nothrflavour = $nothrflavour
-};
-
-       for (@{$need_externs{$short}}) {
-               print MKINC "${_}_prefix = $extern_prefix{$_}\n"
-       }
-
-       for (@{$need_jars{$short}}) {
-               print MKINC "${_}_jar = $jar{$_}\n"
-       }
-
-       my $need_gsoap = 0;
-       for (@{$need_externs{$short}})  { $need_gsoap = 1 if $_ eq 'gsoap'; }
-
-       print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
-
-       close MKINC;
-}
-
-my %etics_externs;
-my %etics_projects;
-BEGIN{
-       %etics_externs = (
-               globus_essentials=>'vdt_globus_essentials',
-               globus=>'globus',
-               cares=>'c-ares',
-               voms=>'org.glite.security.voms-api-cpp',
-               gridsite=>'org.gridsite.shared',
-               lcas=>'org.glite.security.lcas',
-       );
-       %etics_projects = (
-               vdt=>[qw/globus globus_essentials/],
-               'org.glite'=>[qw/voms gridsite lcas/],
-       );
-};
-
-sub mode_etics {
-       $fmod = shift;
-
-       die "$0: --module required with --etics\n" unless $fmod;
-       
-       my ($subsys,$module) = split /\./,$fmod;
-
-       my ($major,$minor,$rev,$age);
-
-       if ($version) {
-               $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/;
-               ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
-       }
-       else { 
-               open V,"org.glite.$subsys.$module/project/version.properties"
-                       or die "org.glite.$subsys.$module/project/version.properties: $!\n";
-       
-               while ($_ = <V>) {
-                       chomp;
-                       ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
-               }
-               close V;
-       }
-
-       my @copts = ();
-       my %ge;
-       @ge{@{$etics_projects{'org.glite'}}} = (1) x ($#{$etics_projects{'org.glite'}}+1);
-
-       for (@{$need_externs{"$subsys.$module"}}) {
-           if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
-           }
-       }
-
-       for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-
-               push @copts,"--with-$_ \${$eext.location}/$_*.jar";
-       }
-
-
-       my $conf = "glite-$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
-       my $file = $output ? $output : "$conf.ini";
-       open C,">$file" or die "$file: $!\n";
-
-       my $buildroot = $topbuild{"$subsys.$module"} ? '' : "build.root = build\n";
-
-       my $confdir = $topbuild{"$subsys.$module"} ? '..' : '../..';
-
-       print STDERR "Writing $file\n";
-       print C qq{
-[Configuration-$conf]
-profile = None
-moduleName = org.glite.$subsys.$module
-displayName = $conf
-description = org.glite.$subsys.$module
-projectName = org.glite
-age = $age
-deploymentType = None
-tag = $conf
-version = $major.$minor.$rev
-path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz
-
-[Platform-default:VcsCommand]
-displayName = None
-description = None
-tag = cvs -d \${vcsroot} tag -R \${tag} \${moduleName}
-branch = None
-commit = None
-checkout = cvs -d \${vcsroot} co -r \${tag} \${moduleName}
-
-[Platform-default:BuildCommand]
-postpublish = None
-packaging = None
-displayName = None
-description = None
-doc = None
-prepublish = None
-publish = None
-compile = make
-init = None
-install = make install
-clean = make clean
-test = make check
-configure = cd $confdir && \${moduleName}/configure --thrflavour=\${globus.thr.flavor} --nothrflavour=\${globus.nothr.flavor} --prefix=\${prefix} --stage=\${stageDir} --module $subsys.$module @copts
-checkstyle = None
-
-[Platform-default:Property]
-$buildroot
-
-[Platform-default:DynamicDependency]
-
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
-                       }
-               }
-
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
-               print C "$proj|$eext = $type\n";
-       }
-
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "org.glite|org.glite.$_ = $type\n";
-       }
-
-       close C;
-}
-
-sub gsoap_version {
-       local $_;
-       my $gsoap_version;
-       open S,"$extern_prefix{gsoap}/bin/soapcpp2 -v 2>&1 |" or die "$extern_prefix{gsoap}/bin/soapcpp2: $!\n";
-
-       while ($_ = <S>) {
-               chomp;
-
-               $gsoap_version = $1 if /The gSOAP Stub and Skeleton Compiler for C and C\+\+ ([.[:digit:][:alpha:]]+)$/;
-       }
-       close S;
-       return $gsoap_version;
-}
-
-
-sub usage {
-       my @ext = keys %extern_prefix;
-       my @myjars, keys %jar;
-
-       print STDERR qq{
-usage: $0 options
-
-General options (defaults in []):
-  --prefix=PREFIX              destination directory [./stage]
-  --staged=module,module,...   what is already in PREFIX (specify without org.glite.)
-  --thrflavour=flavour
-  --nothrflavour=flavour       threaded and non-treaded flavours [gcc64dbgpthr,gcc64dbg]
-  --listmodules=subsys          list modules of a subsystem
-  
-Mode of operation:
-  --mode={checkout|build|etics}        what to do [build]
-  
-What to build:
-  --module=module              build this module only (mostly in-Etics operation)
-  --enable-NODE                        build this "node" (set of modules) only. Available nodes are
-                                       @{$lbmodules{lb}},@{$lbmodules{security}}
-  --disable-NODE               don't build this node
-  --lb-tag=tag                 checkout LB modules with specific tag
-  --jp-tag=tag                 checkout JP modules with specific tag
-  --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
-  --security-tag=tag           checkout security modules with specific tag
-  --jobid-tag=tag              checkout jobid modules with specific tag
-
-Dependencies:
-  --with-EXTERNAL=PATH         where to look for an external. Required externals
-                               (not all for all modules) are:
-                                       @ext
-  --with-JAR=JAR               where to look for jars. Required jars are:
-                                       @myjars
-                               Summary of what will be used is always printed
-
-};
-
-}
diff --git a/org.glite.jobid.api-java/nbproject/build-impl.xml b/org.glite.jobid.api-java/nbproject/build-impl.xml
deleted file mode 100755 (executable)
index 47755b4..0000000
+++ /dev/null
@@ -1,627 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-*** GENERATED FROM project.xml - DO NOT EDIT  ***
-***         EDIT ../build.xml INSTEAD         ***
-
-For the purpose of easier reading the script
-is divided into following sections:
-
-  - initialization
-  - compilation
-  - jar
-  - execution
-  - debugging
-  - javadoc
-  - junit compilation
-  - junit execution
-  - junit debugging
-  - applet
-  - cleanup
-
-        -->
-<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject2="http://www.netbeans.org/ns/j2se-project/2" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="jobid-api-java-impl">
-    <target depends="test,jar,javadoc" description="Build and test whole project." name="default"/>
-    <!-- 
-                ======================
-                INITIALIZATION SECTION 
-                ======================
-            -->
-    <target name="-pre-init">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="-pre-init" name="-init-private">
-        <property file="nbproject/private/config.properties"/>
-        <property file="nbproject/private/configs/${config}.properties"/>
-        <property file="nbproject/private/private.properties"/>
-    </target>
-    <target depends="-pre-init,-init-private" name="-init-user">
-        <property file="${user.properties.file}"/>
-        <!-- The two properties below are usually overridden -->
-        <!-- by the active platform. Just a fallback. -->
-        <property name="default.javac.source" value="1.4"/>
-        <property name="default.javac.target" value="1.4"/>
-    </target>
-    <target depends="-pre-init,-init-private,-init-user" name="-init-project">
-        <property file="nbproject/configs/${config}.properties"/>
-        <property file="nbproject/project.properties"/>
-    </target>
-    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init">
-        <available file="${manifest.file}" property="manifest.available"/>
-        <condition property="manifest.available+main.class">
-            <and>
-                <isset property="manifest.available"/>
-                <isset property="main.class"/>
-                <not>
-                    <equals arg1="${main.class}" arg2="" trim="true"/>
-                </not>
-            </and>
-        </condition>
-        <condition property="manifest.available+main.class+mkdist.available">
-            <and>
-                <istrue value="${manifest.available+main.class}"/>
-                <isset property="libs.CopyLibs.classpath"/>
-            </and>
-        </condition>
-        <condition property="have.tests">
-            <or>
-                <available file="${test.src.dir}"/>
-            </or>
-        </condition>
-        <condition property="have.sources">
-            <or>
-                <available file="${src.dir}"/>
-            </or>
-        </condition>
-        <condition property="netbeans.home+have.tests">
-            <and>
-                <isset property="netbeans.home"/>
-                <isset property="have.tests"/>
-            </and>
-        </condition>
-        <condition property="no.javadoc.preview">
-            <and>
-                <isset property="javadoc.preview"/>
-                <isfalse value="${javadoc.preview}"/>
-            </and>
-        </condition>
-        <property name="run.jvmargs" value=""/>
-        <property name="javac.compilerargs" value=""/>
-        <property name="work.dir" value="${basedir}"/>
-        <condition property="no.deps">
-            <and>
-                <istrue value="${no.dependencies}"/>
-            </and>
-        </condition>
-        <property name="javac.debug" value="true"/>
-        <property name="javadoc.preview" value="true"/>
-        <property name="application.args" value=""/>
-        <property name="source.encoding" value="${file.encoding}"/>
-        <condition property="javadoc.encoding.used" value="${javadoc.encoding}">
-            <and>
-                <isset property="javadoc.encoding"/>
-                <not>
-                    <equals arg1="${javadoc.encoding}" arg2=""/>
-                </not>
-            </and>
-        </condition>
-        <property name="javadoc.encoding.used" value="${source.encoding}"/>
-        <property name="includes" value="**"/>
-        <property name="excludes" value=""/>
-        <property name="do.depend" value="false"/>
-        <condition property="do.depend.true">
-            <istrue value="${do.depend}"/>
-        </condition>
-        <condition property="javac.compilerargs.jaxws" value="-Djava.endorsed.dirs='${jaxws.endorsed.dir}'">
-            <and>
-                <isset property="jaxws.endorsed.dir"/>
-                <available file="nbproject/jaxws-build.xml"/>
-            </and>
-        </condition>
-    </target>
-    <target name="-post-init">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check">
-        <fail unless="src.dir">Must set src.dir</fail>
-        <fail unless="test.src.dir">Must set test.src.dir</fail>
-        <fail unless="build.dir">Must set build.dir</fail>
-        <fail unless="dist.dir">Must set dist.dir</fail>
-        <fail unless="build.classes.dir">Must set build.classes.dir</fail>
-        <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>
-        <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>
-        <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>
-        <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>
-        <fail unless="dist.jar">Must set dist.jar</fail>
-    </target>
-    <target name="-init-macrodef-property">
-        <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1">
-            <attribute name="name"/>
-            <attribute name="value"/>
-            <sequential>
-                <property name="@{name}" value="${@{value}}"/>
-            </sequential>
-        </macrodef>
-    </target>
-    <target name="-init-macrodef-javac">
-        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${src.dir}" name="srcdir"/>
-            <attribute default="${build.classes.dir}" name="destdir"/>
-            <attribute default="${javac.classpath}" name="classpath"/>
-            <attribute default="${includes}" name="includes"/>
-            <attribute default="${excludes}" name="excludes"/>
-            <attribute default="${javac.debug}" name="debug"/>
-            <attribute default="" name="sourcepath"/>
-            <element name="customize" optional="true"/>
-            <sequential>
-                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" includeantruntime="false" includes="@{includes}" sourcepath="@{sourcepath}" srcdir="@{srcdir}">
-                    <classpath>
-                        <path path="@{classpath}"/>
-                    </classpath>
-                    <compilerarg line="${javac.compilerargs} ${javac.compilerargs.jaxws}"/>
-                    <customize/>
-                </javac>
-            </sequential>
-        </macrodef>
-        <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${src.dir}" name="srcdir"/>
-            <attribute default="${build.classes.dir}" name="destdir"/>
-            <attribute default="${javac.classpath}" name="classpath"/>
-            <sequential>
-                <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">
-                    <classpath>
-                        <path path="@{classpath}"/>
-                    </classpath>
-                </depend>
-            </sequential>
-        </macrodef>
-        <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${build.classes.dir}" name="destdir"/>
-            <sequential>
-                <fail unless="javac.includes">Must set javac.includes</fail>
-                <pathconvert pathsep="," property="javac.includes.binary">
-                    <path>
-                        <filelist dir="@{destdir}" files="${javac.includes}"/>
-                    </path>
-                    <globmapper from="*.java" to="*.class"/>
-                </pathconvert>
-                <delete>
-                    <files includes="${javac.includes.binary}"/>
-                </delete>
-            </sequential>
-        </macrodef>
-    </target>
-    <target name="-init-macrodef-junit">
-        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${includes}" name="includes"/>
-            <attribute default="${excludes}" name="excludes"/>
-            <attribute default="**" name="testincludes"/>
-            <sequential>
-                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true">
-                    <batchtest todir="${build.test.results.dir}">
-                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
-                            <filename name="@{testincludes}"/>
-                        </fileset>
-                    </batchtest>
-                    <classpath>
-                        <path path="${run.test.classpath}"/>
-                    </classpath>
-                    <syspropertyset>
-                        <propertyref prefix="test-sys-prop."/>
-                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
-                    </syspropertyset>
-                    <formatter type="brief" usefile="false"/>
-                    <formatter type="xml"/>
-                    <jvmarg line="${run.jvmargs}"/>
-                </junit>
-            </sequential>
-        </macrodef>
-    </target>
-    <target name="-init-macrodef-nbjpda">
-        <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">
-            <attribute default="${main.class}" name="name"/>
-            <attribute default="${debug.classpath}" name="classpath"/>
-            <attribute default="" name="stopclassname"/>
-            <sequential>
-                <nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="dt_socket">
-                    <classpath>
-                        <path path="@{classpath}"/>
-                    </classpath>
-                </nbjpdastart>
-            </sequential>
-        </macrodef>
-        <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1">
-            <attribute default="${build.classes.dir}" name="dir"/>
-            <sequential>
-                <nbjpdareload>
-                    <fileset dir="@{dir}" includes="${fix.includes}*.class"/>
-                </nbjpdareload>
-            </sequential>
-        </macrodef>
-    </target>
-    <target name="-init-debug-args">
-        <property name="version-output" value="java version &quot;${ant.java.version}"/>
-        <condition property="have-jdk-older-than-1.4">
-            <or>
-                <contains string="${version-output}" substring="java version &quot;1.0"/>
-                <contains string="${version-output}" substring="java version &quot;1.1"/>
-                <contains string="${version-output}" substring="java version &quot;1.2"/>
-                <contains string="${version-output}" substring="java version &quot;1.3"/>
-            </or>
-        </condition>
-        <condition property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
-            <istrue value="${have-jdk-older-than-1.4}"/>
-        </condition>
-    </target>
-    <target depends="-init-debug-args" name="-init-macrodef-debug">
-        <macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${main.class}" name="classname"/>
-            <attribute default="${debug.classpath}" name="classpath"/>
-            <element name="customize" optional="true"/>
-            <sequential>
-                <java classname="@{classname}" dir="${work.dir}" fork="true">
-                    <jvmarg line="${debug-args-line}"/>
-                    <jvmarg value="-Xrunjdwp:transport=dt_socket,address=${jpda.address}"/>
-                    <jvmarg line="${run.jvmargs}"/>
-                    <classpath>
-                        <path path="@{classpath}"/>
-                    </classpath>
-                    <syspropertyset>
-                        <propertyref prefix="run-sys-prop."/>
-                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
-                    </syspropertyset>
-                    <customize/>
-                </java>
-            </sequential>
-        </macrodef>
-    </target>
-    <target name="-init-macrodef-java">
-        <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
-            <attribute default="${main.class}" name="classname"/>
-            <element name="customize" optional="true"/>
-            <sequential>
-                <java classname="@{classname}" dir="${work.dir}" fork="true">
-                    <jvmarg line="${run.jvmargs}"/>
-                    <classpath>
-                        <path path="${run.classpath}"/>
-                    </classpath>
-                    <syspropertyset>
-                        <propertyref prefix="run-sys-prop."/>
-                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
-                    </syspropertyset>
-                    <customize/>
-                </java>
-            </sequential>
-        </macrodef>
-    </target>
-    <target name="-init-presetdef-jar">
-        <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1">
-            <jar compress="${jar.compress}" jarfile="${dist.jar}">
-                <j2seproject1:fileset dir="${build.classes.dir}"/>
-            </jar>
-        </presetdef>
-    </target>
-    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-junit,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar" name="init"/>
-    <!--
-                ===================
-                COMPILATION SECTION
-                ===================
-            -->
-    <target depends="init" name="deps-jar" unless="no.deps"/>
-    <target depends="init,deps-jar" name="-pre-pre-compile">
-        <mkdir dir="${build.classes.dir}"/>
-    </target>
-    <target name="-pre-compile">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target if="do.depend.true" name="-compile-depend">
-        <j2seproject3:depend/>
-    </target>
-    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile,-compile-depend" if="have.sources" name="-do-compile">
-        <j2seproject3:javac/>
-        <copy todir="${build.classes.dir}">
-            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
-        </copy>
-    </target>
-    <target name="-post-compile">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>
-    <target name="-pre-compile-single">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">
-        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
-        <j2seproject3:force-recompile/>
-        <j2seproject3:javac excludes="" includes="${javac.includes}" sourcepath="${src.dir}"/>
-    </target>
-    <target name="-post-compile-single">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>
-    <!--
-                ====================
-                JAR BUILDING SECTION
-                ====================
-            -->
-    <target depends="init" name="-pre-pre-jar">
-        <dirname file="${dist.jar}" property="dist.jar.dir"/>
-        <mkdir dir="${dist.jar.dir}"/>
-    </target>
-    <target name="-pre-jar">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar" name="-do-jar-without-manifest" unless="manifest.available">
-        <j2seproject1:jar/>
-    </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available" name="-do-jar-with-manifest" unless="manifest.available+main.class">
-        <j2seproject1:jar manifest="${manifest.file}"/>
-    </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class" name="-do-jar-with-mainclass" unless="manifest.available+main.class+mkdist.available">
-        <j2seproject1:jar manifest="${manifest.file}">
-            <j2seproject1:manifest>
-                <j2seproject1:attribute name="Main-Class" value="${main.class}"/>
-            </j2seproject1:manifest>
-        </j2seproject1:jar>
-        <echo>To run this application from the command line without Ant, try:</echo>
-        <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
-        <property location="${dist.jar}" name="dist.jar.resolved"/>
-        <pathconvert property="run.classpath.with.dist.jar">
-            <path path="${run.classpath}"/>
-            <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>
-        </pathconvert>
-        <echo>java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo>
-    </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class+mkdist.available" name="-do-jar-with-libraries">
-        <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
-        <pathconvert property="run.classpath.without.build.classes.dir">
-            <path path="${run.classpath}"/>
-            <map from="${build.classes.dir.resolved}" to=""/>
-        </pathconvert>
-        <pathconvert pathsep=" " property="jar.classpath">
-            <path path="${run.classpath.without.build.classes.dir}"/>
-            <chainedmapper>
-                <flattenmapper/>
-                <globmapper from="*" to="lib/*"/>
-            </chainedmapper>
-        </pathconvert>
-        <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
-        <copylibs compress="${jar.compress}" jarfile="${dist.jar}" manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
-            <fileset dir="${build.classes.dir}"/>
-            <manifest>
-                <attribute name="Main-Class" value="${main.class}"/>
-                <attribute name="Class-Path" value="${jar.classpath}"/>
-            </manifest>
-        </copylibs>
-        <echo>To run this application from the command line without Ant, try:</echo>
-        <property location="${dist.jar}" name="dist.jar.resolved"/>
-        <echo>java -jar "${dist.jar.resolved}"</echo>
-    </target>
-    <target name="-post-jar">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-post-jar" description="Build JAR." name="jar"/>
-    <!--
-                =================
-                EXECUTION SECTION
-                =================
-            -->
-    <target depends="init,compile" description="Run a main class." name="run">
-        <j2seproject1:java>
-            <customize>
-                <arg line="${application.args}"/>
-            </customize>
-        </j2seproject1:java>
-    </target>
-    <target name="-do-not-recompile">
-        <property name="javac.includes.binary" value=""/>
-    </target>
-    <target depends="init,-do-not-recompile,compile-single" name="run-single">
-        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
-        <j2seproject1:java classname="${run.class}"/>
-    </target>
-    <!--
-                =================
-                DEBUGGING SECTION
-                =================
-            -->
-    <target depends="init" if="netbeans.home" name="-debug-start-debugger">
-        <j2seproject1:nbjpdastart name="${debug.class}"/>
-    </target>
-    <target depends="init,compile" name="-debug-start-debuggee">
-        <j2seproject3:debug>
-            <customize>
-                <arg line="${application.args}"/>
-            </customize>
-        </j2seproject3:debug>
-    </target>
-    <target depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE." if="netbeans.home" name="debug"/>
-    <target depends="init" if="netbeans.home" name="-debug-start-debugger-stepinto">
-        <j2seproject1:nbjpdastart stopclassname="${main.class}"/>
-    </target>
-    <target depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee" if="netbeans.home" name="debug-stepinto"/>
-    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single">
-        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
-        <j2seproject3:debug classname="${debug.class}"/>
-    </target>
-    <target depends="init,-do-not-recompile,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/>
-    <target depends="init" name="-pre-debug-fix">
-        <fail unless="fix.includes">Must set fix.includes</fail>
-        <property name="javac.includes" value="${fix.includes}.java"/>
-    </target>
-    <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix">
-        <j2seproject1:nbjpdareload/>
-    </target>
-    <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>
-    <!--
-                ===============
-                JAVADOC SECTION
-                ===============
-            -->
-    <target depends="init" name="-javadoc-build">
-        <mkdir dir="${dist.javadoc.dir}"/>
-        <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
-            <classpath>
-                <path path="${javac.classpath}"/>
-            </classpath>
-            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
-                <filename name="**/*.java"/>
-            </fileset>
-        </javadoc>
-    </target>
-    <target depends="init,-javadoc-build" if="netbeans.home" name="-javadoc-browse" unless="no.javadoc.preview">
-        <nbbrowse file="${dist.javadoc.dir}/index.html"/>
-    </target>
-    <target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/>
-    <!--
-                =========================
-                JUNIT COMPILATION SECTION
-                =========================
-            -->
-    <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">
-        <mkdir dir="${build.test.classes.dir}"/>
-    </target>
-    <target name="-pre-compile-test">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target if="do.depend.true" name="-compile-test-depend">
-        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
-    </target>
-    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">
-        <j2seproject3:javac classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
-        <copy todir="${build.test.classes.dir}">
-            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
-        </copy>
-    </target>
-    <target name="-post-compile-test">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/>
-    <target name="-pre-compile-test-single">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
-        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
-        <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>
-        <j2seproject3:javac classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}"/>
-        <copy todir="${build.test.classes.dir}">
-            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
-        </copy>
-    </target>
-    <target name="-post-compile-test-single">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>
-    <!--
-                =======================
-                JUNIT EXECUTION SECTION
-                =======================
-            -->
-    <target depends="init" if="have.tests" name="-pre-test-run">
-        <mkdir dir="${build.test.results.dir}"/>
-    </target>
-    <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">
-        <j2seproject3:junit testincludes="**/*Test.java"/>
-    </target>
-    <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">
-        <fail if="tests.failed">Some tests failed; see details above.</fail>
-    </target>
-    <target depends="init" if="have.tests" name="test-report"/>
-    <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/>
-    <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/>
-    <target depends="init" if="have.tests" name="-pre-test-run-single">
-        <mkdir dir="${build.test.results.dir}"/>
-    </target>
-    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
-        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
-        <j2seproject3:junit excludes="" includes="${test.includes}"/>
-    </target>
-    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">
-        <fail if="tests.failed">Some tests failed; see details above.</fail>
-    </target>
-    <target depends="init,-do-not-recompile,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>
-    <!--
-                =======================
-                JUNIT DEBUGGING SECTION
-                =======================
-            -->
-    <target depends="init,compile-test" if="have.tests" name="-debug-start-debuggee-test">
-        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
-        <property location="${build.test.results.dir}/TEST-${test.class}.xml" name="test.report.file"/>
-        <delete file="${test.report.file}"/>
-        <mkdir dir="${build.test.results.dir}"/>
-        <j2seproject3:debug classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner" classpath="${ant.home}/lib/ant.jar:${ant.home}/lib/ant-junit.jar:${debug.test.classpath}">
-            <customize>
-                <syspropertyset>
-                    <propertyref prefix="test-sys-prop."/>
-                    <mapper from="test-sys-prop.*" to="*" type="glob"/>
-                </syspropertyset>
-                <arg value="${test.class}"/>
-                <arg value="showoutput=true"/>
-                <arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.BriefJUnitResultFormatter"/>
-                <arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter,${test.report.file}"/>
-            </customize>
-        </j2seproject3:debug>
-    </target>
-    <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">
-        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>
-    </target>
-    <target depends="init,-do-not-recompile,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>
-    <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">
-        <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>
-    </target>
-    <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/>
-    <!--
-                =========================
-                APPLET EXECUTION SECTION
-                =========================
-            -->
-    <target depends="init,compile-single" name="run-applet">
-        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
-        <j2seproject1:java classname="sun.applet.AppletViewer">
-            <customize>
-                <arg value="${applet.url}"/>
-            </customize>
-        </j2seproject1:java>
-    </target>
-    <!--
-                =========================
-                APPLET DEBUGGING  SECTION
-                =========================
-            -->
-    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-applet">
-        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
-        <j2seproject3:debug classname="sun.applet.AppletViewer">
-            <customize>
-                <arg value="${applet.url}"/>
-            </customize>
-        </j2seproject3:debug>
-    </target>
-    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet" if="netbeans.home" name="debug-applet"/>
-    <!--
-                ===============
-                CLEANUP SECTION
-                ===============
-            -->
-    <target depends="init" name="deps-clean" unless="no.deps"/>
-    <target depends="init" name="-do-clean">
-        <delete dir="${build.dir}"/>
-        <delete dir="${dist.dir}"/>
-    </target>
-    <target name="-post-clean">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/>
-</project>
diff --git a/org.glite.jobid.api-java/nbproject/genfiles.properties b/org.glite.jobid.api-java/nbproject/genfiles.properties
deleted file mode 100755 (executable)
index bb605a8..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-build.xml.data.CRC32=dbd878b7
-build.xml.script.CRC32=3fb96f09
-build.xml.stylesheet.CRC32=be360661
-# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
-# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
-nbproject/build-impl.xml.data.CRC32=dbd878b7
-nbproject/build-impl.xml.script.CRC32=02cb42d1
-nbproject/build-impl.xml.stylesheet.CRC32=f1d9da08
diff --git a/org.glite.jobid.api-java/nbproject/private/config.properties b/org.glite.jobid.api-java/nbproject/private/config.properties
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.glite.jobid.api-java/nbproject/private/private.properties b/org.glite.jobid.api-java/nbproject/private/private.properties
deleted file mode 100755 (executable)
index b6aa80e..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-do.depend=false
-do.jar=true
-javac.debug=true
-javadoc.preview=true
-jaxws.endorsed.dir=/home/pavel/netbeans-6.0.1/java1/modules/ext/jaxws21/api
-user.properties.file=/home/pavel/.netbeans/6.0/build.properties
diff --git a/org.glite.jobid.api-java/nbproject/private/private.xml b/org.glite.jobid.api-java/nbproject/private/private.xml
deleted file mode 100644 (file)
index c1f155a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
-    <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/1"/>
-</project-private>
diff --git a/org.glite.jobid.api-java/nbproject/project.properties b/org.glite.jobid.api-java/nbproject/project.properties
deleted file mode 100755 (executable)
index 2958811..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-application.title=jobid-api-java
-application.vendor=xpiskac
-build.classes.dir=${build.dir}/classes
-build.classes.excludes=**/*.java,**/*.form
-# This directory is removed when the project is cleaned:
-build.dir=build
-build.generated.dir=${build.dir}/generated
-# Only compile against the classpath explicitly listed here:
-build.sysclasspath=ignore
-build.test.classes.dir=${build.dir}/test/classes
-build.test.results.dir=${build.dir}/test/results
-debug.classpath=\
-    ${run.classpath}
-debug.test.classpath=\
-    ${run.test.classpath}
-# This directory is removed when the project is cleaned:
-dist.dir=dist
-dist.jar=${dist.dir}/jobid-api-java.jar
-dist.javadoc.dir=${dist.dir}/javadoc
-excludes=
-# file.reference.commons-codec-1.3.jar=/home/etics/repository/externals/commons-codec/1.3.0/noarch/
-includes=**
-jar.compress=false
-javac.classpath=\
-   ${file.reference.commons-codec.jar}
-# Space-separated list of extra javac options
-javac.compilerargs=
-javac.deprecation=false
-javac.source=
-javac.target=
-javac.test.classpath=\
-    ${javac.classpath}:\
-    ${build.classes.dir}
-javadoc.additionalparam=
-javadoc.author=false
-javadoc.encoding=${source.encoding}
-javadoc.noindex=false
-javadoc.nonavbar=false
-javadoc.notree=false
-javadoc.private=false
-javadoc.splitindex=true
-javadoc.use=true
-javadoc.version=false
-javadoc.windowtitle=
-main.class=org.glite.test.Test
-manifest.file=manifest.mf
-meta.inf.dir=${src.dir}/META-INF
-platform.active=default_platform
-run.classpath=\
-    ${javac.classpath}:\
-    ${build.classes.dir}
-# Space-separated list of JVM arguments used when running the project
-# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value
-# or test-sys-prop.name=value to set system properties for unit tests):
-run.jvmargs=
-run.test.classpath=\
-    ${javac.test.classpath}:\
-    ${build.test.classes.dir}
-source.encoding=UTF-8
-src.dir=src
-test.src.dir=test
-javac.compilerargs.jaxws=
diff --git a/org.glite.jobid.api-java/nbproject/project.xml b/org.glite.jobid.api-java/nbproject/project.xml
deleted file mode 100755 (executable)
index 0db31a3..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://www.netbeans.org/ns/project/1">
-    <type>org.netbeans.modules.java.j2seproject</type>
-    <configuration>
-        <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
-            <name>jobid-api-java</name>
-            <minimum-ant-version>1.6.5</minimum-ant-version>
-            <source-roots>
-                <root id="src.dir"/>
-            </source-roots>
-            <test-roots>
-                <root id="test.src.dir"/>
-            </test-roots>
-        </data>
-        <references xmlns="http://www.netbeans.org/ns/ant-project-references/1"/>
-    </configuration>
-</project>
diff --git a/org.glite.jobid.api-java/project/ChangeLog b/org.glite.jobid.api-java/project/ChangeLog
deleted file mode 100644 (file)
index 1023b6a..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-1.0.0-1
-- Initial version
-
-1.0.0-2
-- fixes in etics' invocation of configure
-
-1.0.0-3
-- another configuration fix
-
-1.0.0-4
-- access .jar's via wildcard in etics config
-
-1.0.0-6
-- Added ant_prefix handling to Makefile and configure
-
-1.0.0-7
-- configure script update
-
diff --git a/org.glite.jobid.api-java/project/version.properties b/org.glite.jobid.api-java/project/version.properties
deleted file mode 100644 (file)
index ed74581..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# : /cvs/glite/org.glite.jobid.api-java/project/version.properties,v 1.5 2009/01/20 17:25:13 akrenek Exp $
-module.version=1.0.0
-module.age=7
diff --git a/org.glite.jobid.api-java/src/org/glite/jobid/CheckedString.java b/org.glite.jobid.api-java/src/org/glite/jobid/CheckedString.java
deleted file mode 100644 (file)
index df4755c..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.glite.jobid;
-
-/**
- * Class which escapes \ and new line signs in string which is set as parameter
- * in constructor
- * 
- * @author Pavel Piskac (173297@mail.muni.cz)
- * @version 15. 3. 2008
- */
-public class CheckedString {
-    
-    String checkedString;
-    
-    /**
-     * Creates new instance of CheckedString.
-     * 
-     * @param checkedString string which will be converted
-     * @throws java.lang.IllegalArgumentException if checkedString is null
-     */
-    public CheckedString(String checkedString) {
-        if (checkedString == null) {
-            throw new IllegalArgumentException("checkedString is null");
-        }
-        
-        setCheckedString(checkedString);
-    }
-
-    /**
-     * Gets converted string.
-     * 
-     * @return converted string
-     */
-    public String getCheckedString() {
-        return checkedString;
-    }
-
-    /**
-     * Sets string which will be converted.
-     * 
-     * @param checkedString string which will be converted.
-     */
-    public void setCheckedString(String checkedString) {
-        checkedString = checkedString.replaceAll("[\\\"]", "\\\\\"");
-        checkedString = checkedString.replaceAll("[\n]", "\\\\\\\\n");
-        checkedString = checkedString.replaceAll("[/]", "_");
-        checkedString = checkedString.replaceAll("[\\+]", "-");
-        this.checkedString = checkedString;
-    }
-    
-    /**
-     * Returns converted string.
-     * 
-     * @return converted string
-     */
-    public String toString() {
-        return checkedString;
-    }
-
-}
diff --git a/org.glite.jobid.api-java/src/org/glite/jobid/ExampleJobid.java b/org.glite.jobid.api-java/src/org/glite/jobid/ExampleJobid.java
deleted file mode 100644 (file)
index bcb82d2..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.glite.jobid;
-
-/**
- * This class shows how Jobid works and how to work with it.
- * @author Pavel Piskac
- */
-public class ExampleJobid {
-    
-    public static void main(String[] args) {
-        //how Jobid class works
-        //unique part is automatically generated
-        Jobid jobid1 = new Jobid("https://somewhere.cz", 5000);
-        System.out.println("bkserver "+ jobid1.getBkserver());
-        System.out.println("port "+ jobid1.getPort());
-        System.out.println("unique "+ jobid1.getUnique());
-        System.out.println("-------------------");
-        
-        //unique part is set by user
-        Jobid jobid2 = new Jobid("https://somewhere.cz", 5000, "my_unique_part");
-        System.out.println("bkserver "+ jobid2.getBkserver());
-        System.out.println("port "+ jobid2.getPort());
-        System.out.println("unique "+ jobid2.getUnique());
-        System.out.println("-------------------");
-        
-        //whole jobid is set by user and then parsed
-        Jobid jobid3 = new Jobid("https://somewhere.cz:5000/my_unique_part");
-        System.out.println("bkserver "+ jobid3.getBkserver());
-        System.out.println("port "+ jobid3.getPort());
-        System.out.println("unique "+ jobid3.getUnique());
-        System.out.println("-------------------");
-        
-        //each part is set separately
-        Jobid jobid4 = new Jobid();
-        jobid4.setBkserver("https://somewhere.cz");
-        jobid4.setPort(5000);
-        jobid4.setUnique("my_unique_part");
-        System.out.println("bkserver "+ jobid4.getBkserver());
-        System.out.println("port "+ jobid4.getPort());
-        System.out.println("unique "+ jobid4.getUnique());
-        System.out.println("-------------------");
-    } 
-
-}
diff --git a/org.glite.jobid.api-java/src/org/glite/jobid/Jobid.java b/org.glite.jobid.api-java/src/org/glite/jobid/Jobid.java
deleted file mode 100644 (file)
index 9343068..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-package org.glite.jobid;
-
-import java.net.UnknownHostException;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.Calendar;
-import java.util.Random;
-//import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.codec.binary.Base64;
-
-/**
- * Class representing jobId
- * 
- * @author Pavel Piskac (173297@mail.muni.cz)
- * @version 15. 3. 2008
- */
-public class Jobid {
-    
-    String unique;
-    String bkserver;
-    int port;
-    
-    /**
-     * Creates new instance of Jobid class.
-     */
-    public Jobid() {
-    }
-
-    /**
-     * Creates new instace of JobId with BK server address and port number, unique part 
-     * is generated. If some exception is catched during generating the unique part, then
-     * System.exit(-1); is called.
-     * 
-     * @param bkserver BK server address
-     * @param port BK server port
-     * @throws java.land.IllegalArgumentException if bkserver is null
-     * @throws java.lang.IllegalArgumentException if port is lower than 1 or 
-     * bigger than 65535
-     */
-    
-    public Jobid(String bkserver, int port) {
-        if (bkserver == null) {
-            throw new IllegalArgumentException("Jobid bkserver");
-        }
-        
-        if (port < 1 || port > 65535) {
-            throw new IllegalArgumentException("Jobid port");
-        }
-        
-        if (bkserver.indexOf("https://") == -1) {
-            throw new IllegalArgumentException("wrong jobid https");
-        }
-        
-        this.bkserver = bkserver;
-        this.port = port;
-        
-        MessageDigest digest = null;
-        
-        try {
-            String hostname = "";
-            try {
-                hostname = java.net.InetAddress.getLocalHost().getHostName();
-            } catch (UnknownHostException ex) {
-               System.err.println(ex);
-            }
-            
-            digest = java.security.MessageDigest.getInstance("MD5");
-            unique = hostname + bkserver + port + Calendar.getInstance().getTimeInMillis() +
-                     new Random().nextInt(999999);
-            
-            digest.update(unique.getBytes(),0,unique.length());
-            Base64 base64 = new Base64();
-            byte[] tmp = base64.encode(digest.digest());
-            unique = new CheckedString(new String(tmp, 0, tmp.length-2)).toString();
-            
-        } catch (NoSuchAlgorithmException ex) {
-            System.err.println(ex);
-            System.exit(-1);
-        }
-    }
-    
-    /**
-     * Creates new instace of Jobid with BK server address, port number and 
-     * unique part as parameters. 
-     * 
-     * @param bkserver BK server address
-     * @param port BK server port
-     * @param unique unique part of jobid
-     * @throws java.lang.IllegalArgumentException if bkserver is null
-     * @throws java.lang.IllegalArgumentException if port is lower than 1 or 
-     * bigger than 65535
-     * @throws java.lang.IllegalArgumentException if unique is null
-     */
-    public Jobid(String bkserver, int port, String unique) {
-        if (bkserver == null) {
-            throw new IllegalArgumentException("Jobid bkserver");
-        }
-        
-        if (port < 1 || port > 65535) {
-            throw new IllegalArgumentException("Jobid port");
-        }
-        
-        if (unique == null) {
-            throw new IllegalArgumentException("Jobid unique");
-        }
-        
-        this.bkserver = bkserver;
-        this.port = port;
-        this.unique = (new CheckedString(unique)).toString();
-    }
-    
-    /**
-     * Creates new instace of Jobid from string which represents jobid
-     * 
-     * @param jobidString jobid string representation
-     * @throws java.lang.IllegalArgumentException if jobidString is null
-     */
-    public Jobid(String jobidString) {
-        if (jobidString == null) {
-            throw new IllegalArgumentException("Jobid jobidString");
-        }
-        
-        int doubleSlashPosition = jobidString.indexOf("https://");
-        if (doubleSlashPosition == -1) {
-            throw new IllegalArgumentException("wrong jobid https");
-        }
-        
-        int colonPosition = jobidString.indexOf(":", doubleSlashPosition + 8);
-        if (colonPosition == -1) {
-            throw new IllegalArgumentException("wrong jobid colon");
-        }
-        
-        int dashAfterPort = jobidString.indexOf("/", colonPosition);
-        String bkserverS = jobidString.substring(0, colonPosition);
-        Integer portS = new Integer(jobidString.substring(colonPosition+1, 
-                dashAfterPort));
-        String uniqueS = jobidString.substring(dashAfterPort+1, jobidString.length());
-        
-        this.bkserver = bkserverS;
-        this.port = portS.intValue();
-        this.unique = (new CheckedString(uniqueS)).toString();
-    }
-
-    /**
-     * Returns BK server address
-     * 
-     * @return bkserver BK server address
-     */
-    public String getBkserver() {
-        return bkserver;
-    }
-
-    /**
-     * Sets BK server address
-     * 
-     * @param bkserver BK server address
-     * @throws java.lang.IllegalArgumentException if bkserver is null
-     */
-    public void setBkserver(String bkserver) {
-        
-        if (bkserver == null) {
-            throw new IllegalArgumentException("Jobid bkserver");
-        }
-        
-        this.bkserver = bkserver;
-    }
-
-    /**
-     * Returns unique part of jobId
-     * 
-     * @return unique part of jobId
-     */
-    public String getUnique() {
-        return unique;
-    }
-
-    /**
-     * Sets unique part of jobId
-     * 
-     * @param unique
-     * @throws java.lang.IllegalArgumentException if unique is null
-     */
-    public void setUnique(String unique) {
-        
-        if (unique == null) {
-            throw new IllegalArgumentException("Jobid unique");
-        }
-        
-        this.unique = (new CheckedString(unique)).toString();
-    }
-
-    /**
-     * Returns port number
-     * 
-     * @return port number
-     */
-    public int getPort() {
-        return port;
-    }
-
-    /**
-     * Sets port number
-     * 
-     * @param port number
-     * @throws java.lang.IllegalArgumentException if port is lower than 0 or
-     * bigger than 65535
-     */
-    public void setPort(int port) {
-        
-        if (port <= 0 || port >= 65536) {
-            throw new IllegalArgumentException("Jobid port");
-        }
-        
-        this.port = port;
-    }
-    
-    /**
-     * Returns Jobid string representation in format bkserver:port/unique
-     * 
-     * @return Jobid string representation in format bkserver:port/unique
-     */
-    public String toString() {
-        return bkserver + ":" + port + "/" + unique;
-    }
-}
diff --git a/org.glite.jobid/project/version.properties b/org.glite.jobid/project/version.properties
deleted file mode 100644 (file)
index 59a8ad7..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# : /cvs/jra1mw/org.glite.jobid.api-c/project/version.properties,v 1.1 2009/01/16 08:48:52 zsustr Exp $
-module.version=1.0.1
-module.age=1
diff --git a/org.glite.lb.client-java/Makefile b/org.glite.lb.client-java/Makefile
deleted file mode 100644 (file)
index 410e1df..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
--include Makefile.inc
-
-EXAMPLES := SimpleLLTest.class SSLClient.class SSLServer.class
-# broken: ProducerTestIL.class ProducerTestLL.class
-
-VPATH := examples
-
-certmanagement_jar := $(shell ls ${jglobus_prefix}/lib/cog-certmanagement-*.jar | sort | tail -1)
-jglobus_jar := $(shell ls ${jglobus_prefix}/lib/cog-jglobus-*.jar | sort | tail -1)
-
-all compile:
-       JAVA_HOME=${jdk_prefix} \
-       ${ant_prefix}/bin/ant -Dno.deps=yes -DstageDir=${stagedir} \
-               -Dreference.jobid-api-java.jar=${stagedir}/share/java/jobid-api-java.jar \
-               -Dfile.reference.cog-certmanagement.jar=${certmanagement_jar} \
-               -Dfile.reference.cog-jglobus.jar=${jglobus_jar}
-       cd src_c && make PREFIX=${PREFIX}
-
-examples: ${EXAMPLES}
-
-
-${EXAMPLES}: %.class: %.java
-       javac -cp build/classes/:${stagedir}/share/java/jobid-api-java.jar $<
-
-
-check:
-       @echo "No check"
-
-install:
-       mkdir -p ${PREFIX}/share/java
-       cp dist/lb-client-java.jar ${PREFIX}/share/java
-       cd src_c && make install PREFIX=${PREFIX}
-
-clean:
-       echo TODO
-
-
diff --git a/org.glite.lb.client-java/README b/org.glite.lb.client-java/README
deleted file mode 100755 (executable)
index 721db36..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-How to compile the source code.
-
-Run the script "compile.sh" with arguments:
-All options are required except PATH_TO_JAVA, PREFIX and install or remove.
-
--Dbuild.classes.dir="path to directory where .class files will be saved" \
--Ddist.dir="path to directory where .jar file will be saved" \
--Ddist.javadoc.dir="path to directory where documentation will be saved" \
--Dproject.jobid-api-java="path to directory jobid-api-java" \
--Dreference.jobid-api-java.jar="path to directory where jobid-api-java.jar is" \
-choose one of these: install or compile \
-PREFIX="path to directory where .so file will be saved" \
-PATH_TO_JAVA="path to directory where java is installed" \
-
-How to run locallogger:
-java -Djava.library.path=/path/to/shared/library -cp "/path/to/jobid-api-java.jar:/path/to/lb-client-java.jar" org.glite.test.Test
-
-If you don't set -Djava.library.path messages will not be send via unix socket but only written to specified file.
-
diff --git a/org.glite.lb.client-java/build.xml b/org.glite.lb.client-java/build.xml
deleted file mode 100755 (executable)
index cca66fc..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- You may freely edit this file. See commented blocks below for -->
-<!-- some examples of how to customize the build. -->
-<!-- (If you delete it and reopen the project it will be recreated.) -->
-<project name="lb-client-java" default="default" basedir=".">
-    <description>Builds, tests, and runs the project lb-client-java.</description>
-    <import file="nbproject/build-impl.xml"/>
-
-               <target name="-pre-compile">
-                       <exec executable="${stageDir}/sbin/glite-lb-at3">
-                               <arg line="project/genEventTypes.pl src/org/glite/lb"/>
-                       </exec>
-               </target>
-    <!--
-
-    There exist several targets which are by default empty and which can be 
-    used for execution of your tasks. These targets are usually executed 
-    before and after some main targets. They are: 
-
-      -pre-init:                 called before initialization of project properties
-      -post-init:                called after initialization of project properties
-      -pre-compile:              called before javac compilation
-      -post-compile:             called after javac compilation
-      -pre-compile-single:       called before javac compilation of single file
-      -post-compile-single:      called after javac compilation of single file
-      -pre-compile-test:         called before javac compilation of JUnit tests
-      -post-compile-test:        called after javac compilation of JUnit tests
-      -pre-compile-test-single:  called before javac compilation of single JUnit test
-      -post-compile-test-single: called after javac compilation of single JUunit test
-      -pre-jar:                  called before JAR building
-      -post-jar:                 called after JAR building
-      -post-clean:               called after cleaning build products
-
-    (Targets beginning with '-' are not intended to be called on their own.)
-
-    Example of inserting an obfuscator after compilation could look like this:
-
-        <target name="-post-compile">
-            <obfuscate>
-                <fileset dir="${build.classes.dir}"/>
-            </obfuscate>
-        </target>
-
-    For list of available properties check the imported 
-    nbproject/build-impl.xml file. 
-
-
-    Another way to customize the build is by overriding existing main targets.
-    The targets of interest are: 
-
-      -init-macrodef-javac:     defines macro for javac compilation
-      -init-macrodef-junit:     defines macro for junit execution
-      -init-macrodef-debug:     defines macro for class debugging
-      -init-macrodef-java:      defines macro for class execution
-      -do-jar-with-manifest:    JAR building (if you are using a manifest)
-      -do-jar-without-manifest: JAR building (if you are not using a manifest)
-      run:                      execution of project 
-      -javadoc-build:           Javadoc generation
-      test-report:              JUnit report generation
-
-    An example of overriding the target for project execution could look like this:
-
-        <target name="run" depends="lb-client-java-impl.jar">
-            <exec dir="bin" executable="launcher.exe">
-                <arg file="${dist.jar}"/>
-            </exec>
-        </target>
-
-    Notice that the overridden target depends on the jar target and not only on 
-    the compile target as the regular run target does. Again, for a list of available 
-    properties which you can use, check the target you are overriding in the
-    nbproject/build-impl.xml file. 
-
-    -->
-</project>
diff --git a/org.glite.lb.client-java/compile.sh b/org.glite.lb.client-java/compile.sh
deleted file mode 100755 (executable)
index 215c28a..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/bash
-cmd1="$1";
-cmd2="$2";
-cmd3="$3";
-cmd4="$4";
-cmd5="$5";
-cmd6="$6";
-cmd7="$7";
-cmd7="$8";
-
-ant $cmd1 $cmd2 $cmd3 $cmd4 $cmd5;
-cd ./src_c
-make $cmd6 $cmd7 $cmd8;
diff --git a/org.glite.lb.client-java/configure b/org.glite.lb.client-java/configure
deleted file mode 100755 (executable)
index 9a7e696..0000000
+++ /dev/null
@@ -1,686 +0,0 @@
-#!/usr/bin/perl
-
-# WARNING: Don't edit this file unless it is the master copy in org.glite.lb
-#
-# For the purpose of standalone builds of lb/jobid/lbjp-common components
-# it is copied on tagging 
-
-# $Header$
-
-use Getopt::Long;
-
-my $pwd = `pwd`; chomp $pwd;
-my $prefix = $pwd.'/stage';
-my $stagedir;
-my $staged;
-my $module;
-my $thrflavour = 'gcc64dbgpthr';
-my $nothrflavour = 'gcc64dbg';
-my $mode = 'build';
-my $help = 0;
-my $listmodules;
-my $version;
-my $output;
-my $lb_tag = '';
-my $lbjp_tag = '';
-my $jp_tag = '';
-my $sec_tag = '';
-my $jobid_tag = '';
-
-my @nodes = qw/client server logger utils client-java doc ws-test db jpprimary jpindex jpclient/;
-my %enable_nodes;
-my %disable_nodes;
-
-my %extern_prefix = (
-       cares => '/opt/c-ares',
-       classads => '/opt/classads',
-       cppunit => '/usr',
-       expat => '/usr',
-       globus => '/opt/globus',
-       gsoap => '/usr',
-       mysql => '/usr',
-       voms => '/opt/glite',
-       gridsite => '/opt/glite',
-       lcas => '/opt/glite',
-       ant => '/usr',
-       jdk => '/usr',
-       libtar => '/usr',
-);
-
-my %jar = (
-       'commons-codec' => '/usr/share/java/commons-codec-1.3.jar',
-);
-
-
-my %glite_prefix;
-my %need_externs;
-my %need_externs_type;
-my %need_jars;
-my %extrafull;
-my %extranodmod;
-my %deps;
-my %deps_type;
-my %topbuild;
-
-my %lbmodules = (
-       'lb' => [ qw/client client-java common doc logger server state-machine types utils ws-interface ws-test/], 
-       'security' => [qw/gss gsoap-plugin/],
-       'lbjp-common' => [qw/db maildir server-bones trio jp-interface/],
-       'jobid' => [qw/api-c api-cpp api-java/],
-       'jp' => [ qw/client doc index primary server-common ws-interface/ ],
-       );
-
-
-my @opts = (
-       'prefix=s' => \$prefix,
-       'staged=s' => \$staged,
-       'module=s' => \$module,
-       'thrflavour=s' => \$thrflavour,
-       'nothrflavour=s' => \$nothrflavour,
-       'mode=s' => \$mode,
-       'listmodules=s' => \$listmodules,
-       'version=s' => \$version,
-       'output=s' => \$output,
-       'stage=s' => \$stagedir,
-       'lb-tag=s' => \$lb_tag,
-       'lbjp-common-tag=s' => \$lbjp_tag,
-       'jp-tag=s' => \$jp_tag,
-       'security-tag=s' => \$sec_tag,
-       'jobid-tag=s' => \$jobid_tag,
-       'help' => \$help,
-);
-
-for (@nodes) {
-       $enable_nodes{$_} = 0;
-       $disable_nodes{$_} = 0;
-       
-       push @opts,"disable-$_",\$disable_nodes{$_};
-       push @opts,"enable-$_",\$enable_nodes{$_};
-}
-
-push @opts,"with-$_=s",\$extern_prefix{$_} for keys %extern_prefix;
-push @opts,"with-$_=s",\$jar{$_} for keys %jar;
-
-my @keeparg = @ARGV;
-
-GetOptions @opts or die "Errors parsing command line\n";
-
-if ($help) { usage(); exit 0; }
-
-if ($listmodules) {
-       my @m = map "org.glite.$listmodules.$_",@{$lbmodules{$listmodules}};
-       print "@m\n";
-       exit 0;
-}
-
-warn "$0: --version and --output make sense only in --mode=etics\n"
-       if ($version || $output) && $mode ne 'etics';
-
-my $en;
-for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; }
-
-my $dis;
-for (keys %disable_nodes) { $dis = 1 if $disable_nodes{$_}; }
-
-die "--enable-* and --disable-* are mutually exclusive\n"
-       if $en && $dis;
-
-die "--module cannot be used with --enable-* or --disable-*\n"
-       if $module && ($en || $dis);
-
-die "$module: unknown module\n" if $module && ! grep $module,@{$lbmodules{lb}},@{$lbmodules{security}},{$lbmodules{jp}};
-
-if ($dis) {
-       for (@nodes) {
-               $enable_nodes{$_} = 1 unless $disable_nodes{$_};
-       }
-}
-
-if (!$en && !$dis) { $enable_nodes{$_} = 1 for (@nodes) } ;
-
-for (keys %enable_nodes) { delete $enable_nodes{$_} unless $enable_nodes{$_}; }
-
-$stagedir = $prefix unless $stagedir;
-
-if ($mode eq 'build') {
-       print "Writing config.status\n";
-       open CONF,">config.status" or die "config.status: $!\n";
-       print CONF "$0 @keeparg\n";
-       close CONF;
-}
-
-
-my @modules;
-my %aux;
-
-if ($module) {
-#      push @modules,split(/[,.]+/,$module);
-       push @modules,$module;
-}
-else {
-       @modules = map(($extranodmod{$_} ? $extranodmod{$_} : 'lb.'.$_),(keys %enable_nodes));
-       
-       my $n;
-
-       do {
-               local $"="\n";
-               $n = $#modules;
-               push @modules,(map @{$deps{$_}},@modules);
-
-               undef %aux; @aux{@modules} = (1) x ($#modules+1);
-               @modules = keys %aux;
-       } while ($#modules > $n);
-}
-
-@aux{@modules} = (1) x ($#modules+1);
-delete $aux{$_} for (split /,/,$staged);
-@modules = keys %aux;
-
-mode_build() if $mode eq 'build';
-mode_checkout() if $mode eq 'checkout';
-mode_etics($module) if $mode eq 'etics';
-
-sub mode_build {
-       print "\nBuilding modules: @modules\n";
-       
-       my @ext = map @{$need_externs{$_}},@modules;
-       my @myjars = map @{$need_jars{$_}},@modules;
-       undef %aux; @aux{@ext} = 1;
-       @ext = keys %aux;
-       undef %aux; @aux{@myjars} = (1) x ($#myjars+1);
-       @myjars = keys %aux;
-       
-       print "\nRequired externals:\n";
-       print "\t$_: $extern_prefix{$_}\n" for @ext;
-       print "\t$_: $jar{$_}\n" for @myjars;
-       print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n";
-       
-       mkinc($_) for @modules;
-       
-       print "Creating Makefile\n";
-       
-       open MAK,">Makefile" or die "Makefile: $!\n";
-       
-       print MAK "all: @modules\n\nclean:\n";
-       
-       for (@modules) {
-               my $full = full($_);
-               my $build = $topbuild{$_} ? '': '/build';
-               print MAK "\tcd $full$build && \${MAKE} clean\n"
-       }
-       
-       print MAK "\ndistclean:\n";
-       
-       for (@modules) {
-               my $full = full($_);
-               print MAK $topbuild{$_} ?
-                       "\tcd $full$build && \${MAKE} distclean\n" :
-                       "\trm -rf $full$build\n"
-       }
-       
-       print MAK "\n";
-       
-       for (@modules) {
-               my %ldeps; undef %ldeps;  
-               @ldeps{@{$deps{$_}}} = 1;
-               for my $x (split /,/,$staged) { delete $ldeps{$x}; }
-               my @dnames = $module ? () : keys %ldeps;
-       
-               my $full = full($_);
-               my $build = $topbuild{$_} ? '': '/build';
-       
-               print MAK "$_: @dnames\n\tcd $full$build && \${MAKE} && \${MAKE} install\n\n";
-       }
-       
-       close MAK;
-}
-       
-sub mode_checkout() {
-       for (@modules) {
-               my $module = $_;
-               my $tag = "";
-               if ($lb_tag){
-                       for (@{$lbmodules{lb}}){
-                               if ("lb.".$_ eq $module){
-                                       $tag = '-r '.$lb_tag;
-                               }
-                       }       
-               }
-               if ($lbjp_tag){
-                       for (@{$lbmodules{'lbjp-common'}}){
-                               if ("lbjp-common.".$_ eq $module){
-                                        $tag = '-r '.$lbjp_tag;
-                                }
-                       }
-               }
-               if ($jp_tag){
-                       for (@{$lbmodules{'jp'}}){
-                               if ("jp.".$_ eq $module){
-                                        $tag = '-r '.$jp_tag;
-                               }
-                        }
-               }
-               if ($sec_tag){
-                       for (@{$lbmodules{security}}){
-                               if ("security.".$_ eq $module){
-                                        $tag = '-r '.$sec_tag;
-                                }
-                       }
-               }
-               if ($jobid_tag){
-                       for (@{$lbmodules{jobid}}){
-                               if ("jobid.".$_ eq $module){
-                                        $tag = '-r '.$jobid_tag;
-                                }
-                       }
-               }
-               #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
-               #       print "found";
-               #}
-               $_ = full($_);
-               print "\n*** Checking out $_\n";
-               system("cvs checkout  $tag $_") == 0 or die "cvs checkout $tag $_: $?\n";
-       }
-}
-
-BEGIN{
-%need_externs_aux = (
-       'lb.client' => [ qw/cppunit:B classads/ ],
-       'lb.client-java' => [ qw/ant:B/ ],
-       'lb.common' => [ qw/expat cppunit:B classads/ ],
-       'lb.doc' => [],
-       'lb.logger' => [ qw/cppunit:B/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql cppunit:B gsoap:B classads voms lcas gridsite/ ],
-       'lb.state-machine' => [ qw/classads/ ],
-       'lb.utils' => [ qw/cppunit:B/ ],
-       'lb.ws-interface' => [],
-       'lb.ws-test' => [ qw/gsoap:B/ ],
-       'lb.types' => [ qw// ],
-       'lbjp-common.db' => [ qw/mysql/ ],
-       'lbjp-common.maildir' => [ qw// ],
-       'lbjp-common.server-bones' => [ qw// ],
-       'lbjp-common.trio' => [ qw/cppunit:B/ ],
-       'lbjp-common.jp-interface' => [ qw/cppunit:B/ ],
-       'security.gss' =>  [ qw/globus_essentials:R globus:B cares cppunit:B/ ],
-       'security.gsoap-plugin' =>  [ qw/cppunit:B globus_essentials:R globus:B cares gsoap:B/ ],
-       'jobid.api-c' =>  [ qw/cppunit:B/ ],
-       'jobid.api-cpp' =>  [ qw/cppunit:B/ ],
-       'jobid.api-java' =>  [ qw/ant:B jdk:B/ ],
-       'jp.client' => [ qw/gsoap libtar globus_essentials:R globus:B/ ],
-        'jp.doc' => [],
-        'jp.index' => [ qw/gsoap globus_essentials:R globus:B/ ],
-        'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
-        'jp.server-common' => [],
-        'jp.ws-interface' => [],
-);
-
-for my $ext (keys %need_externs_aux) {
-       for (@{$need_externs_aux{$ext}}) {
-               /([^:]*)(?::(.*))?/;
-               push @{$need_externs{$ext}},$1;
-               my $type = $2 ? $2 : 'BR';
-               $need_externs_type{$ext}->{$1} = $type;
-       }
-}
-
-%need_jars = (
-       'jobid.api-java' => [ qw/commons-codec/ ],
-);
-
-for my $jar (keys %need_jars) {
-       for (@{$need_jars{$jar}}) {
-               $need_externs_type{$jar}->{$_} = 'BR';  # XXX
-       }
-}
-
-%deps_aux = (
-       'lb.client' => [ qw/
-               lb.types:B lb.common
-               lbjp-common.trio
-               jobid.api-cpp jobid.api-c
-               security.gss
-       / ],
-       'lb.client-java' => [ qw/
-               lb.types:B
-               jobid.api-java
-       / ],
-       'lb.common' => [ qw/
-               jobid.api-cpp jobid.api-c
-               lb.types:B lbjp-common.trio security.gss
-       / ],
-       'lb.doc' => [ qw/lb.types:B/ ],
-       'lb.logger' => [ qw/
-               lbjp-common.trio
-               jobid.api-c
-               lb.common
-               security.gss
-       / ],
-       'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
-               lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir
-               jobid.api-c
-               security.gsoap-plugin security.gss
-       / ],
-       'lb.state-machine' => [ qw/lb.common lbjp-common.jp-interface security.gss/ ],
-       'lb.utils' => [ qw/
-               lbjp-common.jp-interface
-               jobid.api-c
-               lbjp-common.trio lbjp-common.maildir
-               lb.client lb.state-machine
-       / ],
-       'lb.ws-test' => [ qw/security.gsoap-plugin lb.ws-interface/ ],
-       'lb.ws-interface' => [ qw/lb.types:B/ ],
-       'lb.types' => [ qw// ],
-       'lbjp-common.db' => [ qw/lbjp-common.trio/ ],
-       'lbjp-common.maildir' => [ qw// ],
-       'lbjp-common.server-bones' => [ qw// ],
-       'lbjp-common.trio' => [ qw// ],
-       'security.gss' =>  [ qw// ],
-       'security.gsoap-plugin' =>  [ qw/security.gss/ ],
-       'jobid.api-c' =>  [ qw// ],
-       'jobid.api-cpp' =>  [ qw/jobid.api-c/ ],
-       'jobid.api-java' =>  [ qw// ],
-
-       'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ],
-
-       'jp.client' => [ qw/
-                jp.ws-interface
-                lbjp-common.jp-interface lbjp-common.maildir
-                jobid.api-c
-                security.gsoap-plugin
-        / ],
-       'jp.doc' => [ qw// ],
-       'jp.index' => [ qw/
-                jp.server-common jp.ws-interface
-                lbjp-common.jp-interface lbjp-common.trio lbjp-common.db lbjp-common.server-bones
-                security.gsoap-plugin
-        / ],
-       'jp.primary' => [ qw/
-                jobid.api-c
-                jp.server-common jp.ws-interface
-                lb.state-machine
-                lbjp-common.jp-interface lbjp-common.trio lbjp-common.db lbjp-common.server-bones
-                security.gsoap-plugin
-        / ],
-       'jp.server-common' => [ qw/ 
-                lbjp-common.jp-interface lbjp-common.db
-        / ],
-       'jp.ws-interface' => [ qw// ],
-);
-
-for my $ext (keys %deps_aux) {
-       for (@{$deps_aux{$ext}}) {
-               /([^:]*)(?::(.*))?/;
-               push @{$deps{$ext}},$1;
-               my $type = $2 ? $2 : 'BR';
-               $deps_type{$ext}->{$1} = $type;
-       }
-}
-
-
-%extrafull = ( gridsite=>'org.gridsite.core');
-
-#( java => 'client-java' );
-%extranodmod = (
-       db => 'lbjp-common.db',
-       jpprimary => 'jp.primary',
-       jpindex => 'jp.index',
-       jpclient => 'jp.client',
-);
-
-my @t = qw/lb.client-java jobid.api-java lb.types/;
-@topbuild{@t} = (1) x ($#t+1);
-}
-
-sub full
-{
-       my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
-}
-
-sub mkinc
-{
-       my %aux;
-       undef %aux;
-       my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java
-security.gss security.gsoap-plugin
-jobid.api-c jobid.api-cpp jobid.api-java
-lbjp-common.db lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface
-jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-/;
-       @aux{@m} = (1) x ($#m+1);
-
-       my $short = shift;
-       my $full = full $short;
-
-       unless ($aux{$short}) {
-               print "Makefile.inc not needed in $full\n";
-               return;
-       }
-
-       my $build = '';
-       
-       unless ($topbuild{$_}) {
-               $build = '/build';
-               unless (-d "$full/build") {
-                       mkdir "$full/build" or die "mkdir $full/build: $!\n";
-               }
-               unlink "$full/build/Makefile";
-               symlink "../Makefile","$full/build/Makefile" or die "symlink ../Makefile $full/build/Makefile: $!\n";
-       }
-
-       open MKINC,">$full$build/Makefile.inc"
-               or die "$full$build/Makefile.inc: $!\n";
-
-       print "Creating $full$build/Makefile.inc\n";
-
-       print MKINC qq{
-PREFIX = $prefix
-stagedir = $stagedir
-thrflavour = $thrflavour
-nothrflavour = $nothrflavour
-};
-
-       for (@{$need_externs{$short}}) {
-               print MKINC "${_}_prefix = $extern_prefix{$_}\n"
-       }
-
-       for (@{$need_jars{$short}}) {
-               print MKINC "${_}_jar = $jar{$_}\n"
-       }
-
-       my $need_gsoap = 0;
-       for (@{$need_externs{$short}})  { $need_gsoap = 1 if $_ eq 'gsoap'; }
-
-       print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
-
-       close MKINC;
-}
-
-my %etics_externs;
-my %etics_projects;
-BEGIN{
-       %etics_externs = (
-               globus_essentials=>'vdt_globus_essentials',
-               globus=>'globus',
-               cares=>'c-ares',
-               voms=>'org.glite.security.voms-api-cpp',
-               gridsite=>'org.gridsite.shared',
-               lcas=>'org.glite.security.lcas',
-       );
-       %etics_projects = (
-               vdt=>[qw/globus globus_essentials/],
-               'org.glite'=>[qw/voms gridsite lcas/],
-       );
-};
-
-sub mode_etics {
-       $fmod = shift;
-
-       die "$0: --module required with --etics\n" unless $fmod;
-       
-       my ($subsys,$module) = split /\./,$fmod;
-
-       my ($major,$minor,$rev,$age);
-
-       if ($version) {
-               $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/;
-               ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
-       }
-       else { 
-               open V,"org.glite.$subsys.$module/project/version.properties"
-                       or die "org.glite.$subsys.$module/project/version.properties: $!\n";
-       
-               while ($_ = <V>) {
-                       chomp;
-                       ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
-               }
-               close V;
-       }
-
-       my @copts = ();
-       my %ge;
-       @ge{@{$etics_projects{'org.glite'}}} = (1) x ($#{$etics_projects{'org.glite'}}+1);
-
-       for (@{$need_externs{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
-       }
-
-       for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-
-               push @copts,"--with-$_ \${$eext.location}/$_*.jar";
-       }
-
-
-       my $conf = "glite-$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
-       my $file = $output ? $output : "$conf.ini";
-       open C,">$file" or die "$file: $!\n";
-
-       my $buildroot = $topbuild{"$subsys.$module"} ? '' : "build.root = build\n";
-
-       my $confdir = $topbuild{"$subsys.$module"} ? '..' : '../..';
-
-       print STDERR "Writing $file\n";
-       print C qq{
-[Configuration-$conf]
-profile = None
-moduleName = org.glite.$subsys.$module
-displayName = $conf
-description = org.glite.$subsys.$module
-projectName = org.glite
-age = $age
-deploymentType = None
-tag = $conf
-version = $major.$minor.$rev
-path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz
-
-[Platform-default:VcsCommand]
-displayName = None
-description = None
-tag = cvs -d \${vcsroot} tag -R \${tag} \${moduleName}
-branch = None
-commit = None
-checkout = cvs -d \${vcsroot} co -r \${tag} \${moduleName}
-
-[Platform-default:BuildCommand]
-postpublish = None
-packaging = None
-displayName = None
-description = None
-doc = None
-prepublish = None
-publish = None
-compile = make
-init = None
-install = make install
-clean = make clean
-test = make check
-configure = cd $confdir && \${moduleName}/configure --thrflavour=\${globus.thr.flavor} --nothrflavour=\${globus.nothr.flavor} --prefix=\${prefix} --stage=\${stageDir} --module $subsys.$module @copts
-checkstyle = None
-
-[Platform-default:Property]
-$buildroot
-
-[Platform-default:DynamicDependency]
-
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
-                       }
-               }
-
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
-               print C "$proj|$eext = $type\n";
-       }
-
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "org.glite|org.glite.$_ = $type\n";
-       }
-
-       close C;
-}
-
-sub gsoap_version {
-       local $_;
-       my $gsoap_version;
-       open S,"$extern_prefix{gsoap}/bin/soapcpp2 -v 2>&1 |" or die "$extern_prefix{gsoap}/bin/soapcpp2: $!\n";
-
-       while ($_ = <S>) {
-               chomp;
-
-               $gsoap_version = $1 if /The gSOAP Stub and Skeleton Compiler for C and C\+\+ ([.[:digit:][:alpha:]]+)$/;
-       }
-       close S;
-       return $gsoap_version;
-}
-
-
-sub usage {
-       my @ext = keys %extern_prefix;
-       my @myjars, keys %jar;
-
-       print STDERR qq{
-usage: $0 options
-
-General options (defaults in []):
-  --prefix=PREFIX              destination directory [./stage]
-  --staged=module,module,...   what is already in PREFIX (specify without org.glite.)
-  --thrflavour=flavour
-  --nothrflavour=flavour       threaded and non-treaded flavours [gcc64dbgpthr,gcc64dbg]
-  --listmodules=subsys          list modules of a subsystem
-  
-Mode of operation:
-  --mode={checkout|build|etics}        what to do [build]
-  
-What to build:
-  --module=module              build this module only (mostly in-Etics operation)
-  --enable-NODE                        build this "node" (set of modules) only. Available nodes are
-                                       @{$lbmodules{lb}},@{$lbmodules{security}}
-  --disable-NODE               don't build this node
-  --lb-tag=tag                 checkout LB modules with specific tag
-  --jp-tag=tag                 checkout JP modules with specific tag
-  --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
-  --security-tag=tag           checkout security modules with specific tag
-  --jobid-tag=tag              checkout jobid modules with specific tag
-
-Dependencies:
-  --with-EXTERNAL=PATH         where to look for an external. Required externals
-                               (not all for all modules) are:
-                                       @ext
-  --with-JAR=JAR               where to look for jars. Required jars are:
-                                       @myjars
-                               Summary of what will be used is always printed
-
-};
-
-}
diff --git a/org.glite.lb.client-java/nbproject/build-impl.xml b/org.glite.lb.client-java/nbproject/build-impl.xml
deleted file mode 100755 (executable)
index 9bdbafd..0000000
+++ /dev/null
@@ -1,631 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-*** GENERATED FROM project.xml - DO NOT EDIT  ***
-***         EDIT ../build.xml INSTEAD         ***
-
-For the purpose of easier reading the script
-is divided into following sections:
-
-  - initialization
-  - compilation
-  - jar
-  - execution
-  - debugging
-  - javadoc
-  - junit compilation
-  - junit execution
-  - junit debugging
-  - applet
-  - cleanup
-
-        -->
-<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject2="http://www.netbeans.org/ns/j2se-project/2" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="lb-client-java-impl">
-    <target depends="test,jar,javadoc" description="Build and test whole project." name="default"/>
-    <!-- 
-                ======================
-                INITIALIZATION SECTION 
-                ======================
-            -->
-    <target name="-pre-init">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="-pre-init" name="-init-private">
-        <property file="nbproject/private/config.properties"/>
-        <property file="nbproject/private/configs/${config}.properties"/>
-        <property file="nbproject/private/private.properties"/>
-    </target>
-    <target depends="-pre-init,-init-private" name="-init-user">
-        <property file="${user.properties.file}"/>
-        <!-- The two properties below are usually overridden -->
-        <!-- by the active platform. Just a fallback. -->
-        <property name="default.javac.source" value="1.4"/>
-        <property name="default.javac.target" value="1.4"/>
-    </target>
-    <target depends="-pre-init,-init-private,-init-user" name="-init-project">
-        <property file="nbproject/configs/${config}.properties"/>
-        <property file="nbproject/project.properties"/>
-    </target>
-    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init">
-        <available file="${manifest.file}" property="manifest.available"/>
-        <condition property="manifest.available+main.class">
-            <and>
-                <isset property="manifest.available"/>
-                <isset property="main.class"/>
-                <not>
-                    <equals arg1="${main.class}" arg2="" trim="true"/>
-                </not>
-            </and>
-        </condition>
-        <condition property="manifest.available+main.class+mkdist.available">
-            <and>
-                <istrue value="${manifest.available+main.class}"/>
-                <isset property="libs.CopyLibs.classpath"/>
-            </and>
-        </condition>
-        <condition property="have.tests">
-            <or>
-                <available file="${test.src.dir}"/>
-            </or>
-        </condition>
-        <condition property="have.sources">
-            <or>
-                <available file="${src.dir}"/>
-            </or>
-        </condition>
-        <condition property="netbeans.home+have.tests">
-            <and>
-                <isset property="netbeans.home"/>
-                <isset property="have.tests"/>
-            </and>
-        </condition>
-        <condition property="no.javadoc.preview">
-            <and>
-                <isset property="javadoc.preview"/>
-                <isfalse value="${javadoc.preview}"/>
-            </and>
-        </condition>
-        <property name="run.jvmargs" value=""/>
-        <property name="javac.compilerargs" value=""/>
-        <property name="work.dir" value="${basedir}"/>
-        <condition property="no.deps">
-            <and>
-                <istrue value="${no.dependencies}"/>
-            </and>
-        </condition>
-        <property name="javac.debug" value="true"/>
-        <property name="javadoc.preview" value="true"/>
-        <property name="application.args" value=""/>
-        <property name="source.encoding" value="${file.encoding}"/>
-        <condition property="javadoc.encoding.used" value="${javadoc.encoding}">
-            <and>
-                <isset property="javadoc.encoding"/>
-                <not>
-                    <equals arg1="${javadoc.encoding}" arg2=""/>
-                </not>
-            </and>
-        </condition>
-        <property name="javadoc.encoding.used" value="${source.encoding}"/>
-        <property name="includes" value="**"/>
-        <property name="excludes" value=""/>
-        <property name="do.depend" value="false"/>
-        <condition property="do.depend.true">
-            <istrue value="${do.depend}"/>
-        </condition>
-        <condition property="javac.compilerargs.jaxws" value="-Djava.endorsed.dirs='${jaxws.endorsed.dir}'">
-            <and>
-                <isset property="jaxws.endorsed.dir"/>
-                <available file="nbproject/jaxws-build.xml"/>
-            </and>
-        </condition>
-    </target>
-    <target name="-post-init">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check">
-        <fail unless="src.dir">Must set src.dir</fail>
-        <fail unless="test.src.dir">Must set test.src.dir</fail>
-        <fail unless="build.dir">Must set build.dir</fail>
-        <fail unless="dist.dir">Must set dist.dir</fail>
-        <fail unless="build.classes.dir">Must set build.classes.dir</fail>
-        <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>
-        <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>
-        <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>
-        <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>
-        <fail unless="dist.jar">Must set dist.jar</fail>
-    </target>
-    <target name="-init-macrodef-property">
-        <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1">
-            <attribute name="name"/>
-            <attribute name="value"/>
-            <sequential>
-                <property name="@{name}" value="${@{value}}"/>
-            </sequential>
-        </macrodef>
-    </target>
-    <target name="-init-macrodef-javac">
-        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${src.dir}" name="srcdir"/>
-            <attribute default="${build.classes.dir}" name="destdir"/>
-            <attribute default="${javac.classpath}" name="classpath"/>
-            <attribute default="${includes}" name="includes"/>
-            <attribute default="${excludes}" name="excludes"/>
-            <attribute default="${javac.debug}" name="debug"/>
-            <attribute default="" name="sourcepath"/>
-            <element name="customize" optional="true"/>
-            <sequential>
-                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" includeantruntime="false" includes="@{includes}" sourcepath="@{sourcepath}" srcdir="@{srcdir}">
-                    <classpath>
-                        <path path="@{classpath}"/>
-                    </classpath>
-                    <compilerarg line="${javac.compilerargs} ${javac.compilerargs.jaxws}"/>
-                    <customize/>
-                </javac>
-            </sequential>
-        </macrodef>
-        <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${src.dir}" name="srcdir"/>
-            <attribute default="${build.classes.dir}" name="destdir"/>
-            <attribute default="${javac.classpath}" name="classpath"/>
-            <sequential>
-                <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">
-                    <classpath>
-                        <path path="@{classpath}"/>
-                    </classpath>
-                </depend>
-            </sequential>
-        </macrodef>
-        <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${build.classes.dir}" name="destdir"/>
-            <sequential>
-                <fail unless="javac.includes">Must set javac.includes</fail>
-                <pathconvert pathsep="," property="javac.includes.binary">
-                    <path>
-                        <filelist dir="@{destdir}" files="${javac.includes}"/>
-                    </path>
-                    <globmapper from="*.java" to="*.class"/>
-                </pathconvert>
-                <delete>
-                    <files includes="${javac.includes.binary}"/>
-                </delete>
-            </sequential>
-        </macrodef>
-    </target>
-    <target name="-init-macrodef-junit">
-        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${includes}" name="includes"/>
-            <attribute default="${excludes}" name="excludes"/>
-            <attribute default="**" name="testincludes"/>
-            <sequential>
-                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true">
-                    <batchtest todir="${build.test.results.dir}">
-                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
-                            <filename name="@{testincludes}"/>
-                        </fileset>
-                    </batchtest>
-                    <classpath>
-                        <path path="${run.test.classpath}"/>
-                    </classpath>
-                    <syspropertyset>
-                        <propertyref prefix="test-sys-prop."/>
-                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
-                    </syspropertyset>
-                    <formatter type="brief" usefile="false"/>
-                    <formatter type="xml"/>
-                    <jvmarg line="${run.jvmargs}"/>
-                </junit>
-            </sequential>
-        </macrodef>
-    </target>
-    <target name="-init-macrodef-nbjpda">
-        <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">
-            <attribute default="${main.class}" name="name"/>
-            <attribute default="${debug.classpath}" name="classpath"/>
-            <attribute default="" name="stopclassname"/>
-            <sequential>
-                <nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="dt_socket">
-                    <classpath>
-                        <path path="@{classpath}"/>
-                    </classpath>
-                </nbjpdastart>
-            </sequential>
-        </macrodef>
-        <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1">
-            <attribute default="${build.classes.dir}" name="dir"/>
-            <sequential>
-                <nbjpdareload>
-                    <fileset dir="@{dir}" includes="${fix.includes}*.class"/>
-                </nbjpdareload>
-            </sequential>
-        </macrodef>
-    </target>
-    <target name="-init-debug-args">
-        <property name="version-output" value="java version &quot;${ant.java.version}"/>
-        <condition property="have-jdk-older-than-1.4">
-            <or>
-                <contains string="${version-output}" substring="java version &quot;1.0"/>
-                <contains string="${version-output}" substring="java version &quot;1.1"/>
-                <contains string="${version-output}" substring="java version &quot;1.2"/>
-                <contains string="${version-output}" substring="java version &quot;1.3"/>
-            </or>
-        </condition>
-        <condition property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
-            <istrue value="${have-jdk-older-than-1.4}"/>
-        </condition>
-    </target>
-    <target depends="-init-debug-args" name="-init-macrodef-debug">
-        <macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${main.class}" name="classname"/>
-            <attribute default="${debug.classpath}" name="classpath"/>
-            <element name="customize" optional="true"/>
-            <sequential>
-                <java classname="@{classname}" dir="${work.dir}" fork="true">
-                    <jvmarg line="${debug-args-line}"/>
-                    <jvmarg value="-Xrunjdwp:transport=dt_socket,address=${jpda.address}"/>
-                    <jvmarg line="${run.jvmargs}"/>
-                    <classpath>
-                        <path path="@{classpath}"/>
-                    </classpath>
-                    <syspropertyset>
-                        <propertyref prefix="run-sys-prop."/>
-                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
-                    </syspropertyset>
-                    <customize/>
-                </java>
-            </sequential>
-        </macrodef>
-    </target>
-    <target name="-init-macrodef-java">
-        <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
-            <attribute default="${main.class}" name="classname"/>
-            <element name="customize" optional="true"/>
-            <sequential>
-                <java classname="@{classname}" dir="${work.dir}" fork="true">
-                    <jvmarg line="${run.jvmargs}"/>
-                    <classpath>
-                        <path path="${run.classpath}"/>
-                    </classpath>
-                    <syspropertyset>
-                        <propertyref prefix="run-sys-prop."/>
-                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
-                    </syspropertyset>
-                    <customize/>
-                </java>
-            </sequential>
-        </macrodef>
-    </target>
-    <target name="-init-presetdef-jar">
-        <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1">
-            <jar compress="${jar.compress}" jarfile="${dist.jar}">
-                <j2seproject1:fileset dir="${build.classes.dir}"/>
-            </jar>
-        </presetdef>
-    </target>
-    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-junit,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar" name="init"/>
-    <!--
-                ===================
-                COMPILATION SECTION
-                ===================
-            -->
-    <target depends="init" name="deps-jar" unless="no.deps">
-        <ant antfile="${project.jobid-api-java}/build.xml" inheritall="false" target="jar"/>
-    </target>
-    <target depends="init,deps-jar" name="-pre-pre-compile">
-        <mkdir dir="${build.classes.dir}"/>
-    </target>
-    <target name="-pre-compile">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target if="do.depend.true" name="-compile-depend">
-        <j2seproject3:depend/>
-    </target>
-    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile,-compile-depend" if="have.sources" name="-do-compile">
-        <j2seproject3:javac/>
-        <copy todir="${build.classes.dir}">
-            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
-        </copy>
-    </target>
-    <target name="-post-compile">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>
-    <target name="-pre-compile-single">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">
-        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
-        <j2seproject3:force-recompile/>
-        <j2seproject3:javac excludes="" includes="${javac.includes}" sourcepath="${src.dir}"/>
-    </target>
-    <target name="-post-compile-single">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>
-    <!--
-                ====================
-                JAR BUILDING SECTION
-                ====================
-            -->
-    <target depends="init" name="-pre-pre-jar">
-        <dirname file="${dist.jar}" property="dist.jar.dir"/>
-        <mkdir dir="${dist.jar.dir}"/>
-    </target>
-    <target name="-pre-jar">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar" name="-do-jar-without-manifest" unless="manifest.available">
-        <j2seproject1:jar/>
-    </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available" name="-do-jar-with-manifest" unless="manifest.available+main.class">
-        <j2seproject1:jar manifest="${manifest.file}"/>
-    </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class" name="-do-jar-with-mainclass" unless="manifest.available+main.class+mkdist.available">
-        <j2seproject1:jar manifest="${manifest.file}">
-            <j2seproject1:manifest>
-                <j2seproject1:attribute name="Main-Class" value="${main.class}"/>
-            </j2seproject1:manifest>
-        </j2seproject1:jar>
-        <echo>To run this application from the command line without Ant, try:</echo>
-        <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
-        <property location="${dist.jar}" name="dist.jar.resolved"/>
-        <pathconvert property="run.classpath.with.dist.jar">
-            <path path="${run.classpath}"/>
-            <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>
-        </pathconvert>
-        <echo>java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo>
-    </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class+mkdist.available" name="-do-jar-with-libraries">
-        <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
-        <pathconvert property="run.classpath.without.build.classes.dir">
-            <path path="${run.classpath}"/>
-            <map from="${build.classes.dir.resolved}" to=""/>
-        </pathconvert>
-        <pathconvert pathsep=" " property="jar.classpath">
-            <path path="${run.classpath.without.build.classes.dir}"/>
-            <chainedmapper>
-                <flattenmapper/>
-                <globmapper from="*" to="lib/*"/>
-            </chainedmapper>
-        </pathconvert>
-        <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
-        <copylibs compress="${jar.compress}" jarfile="${dist.jar}" manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
-            <fileset dir="${build.classes.dir}"/>
-            <manifest>
-                <attribute name="Main-Class" value="${main.class}"/>
-                <attribute name="Class-Path" value="${jar.classpath}"/>
-            </manifest>
-        </copylibs>
-        <echo>To run this application from the command line without Ant, try:</echo>
-        <property location="${dist.jar}" name="dist.jar.resolved"/>
-        <echo>java -jar "${dist.jar.resolved}"</echo>
-    </target>
-    <target name="-post-jar">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-post-jar" description="Build JAR." name="jar"/>
-    <!--
-                =================
-                EXECUTION SECTION
-                =================
-            -->
-    <target depends="init,compile" description="Run a main class." name="run">
-        <j2seproject1:java>
-            <customize>
-                <arg line="${application.args}"/>
-            </customize>
-        </j2seproject1:java>
-    </target>
-    <target name="-do-not-recompile">
-        <property name="javac.includes.binary" value=""/>
-    </target>
-    <target depends="init,-do-not-recompile,compile-single" name="run-single">
-        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
-        <j2seproject1:java classname="${run.class}"/>
-    </target>
-    <!--
-                =================
-                DEBUGGING SECTION
-                =================
-            -->
-    <target depends="init" if="netbeans.home" name="-debug-start-debugger">
-        <j2seproject1:nbjpdastart name="${debug.class}"/>
-    </target>
-    <target depends="init,compile" name="-debug-start-debuggee">
-        <j2seproject3:debug>
-            <customize>
-                <arg line="${application.args}"/>
-            </customize>
-        </j2seproject3:debug>
-    </target>
-    <target depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE." if="netbeans.home" name="debug"/>
-    <target depends="init" if="netbeans.home" name="-debug-start-debugger-stepinto">
-        <j2seproject1:nbjpdastart stopclassname="${main.class}"/>
-    </target>
-    <target depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee" if="netbeans.home" name="debug-stepinto"/>
-    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single">
-        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
-        <j2seproject3:debug classname="${debug.class}"/>
-    </target>
-    <target depends="init,-do-not-recompile,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/>
-    <target depends="init" name="-pre-debug-fix">
-        <fail unless="fix.includes">Must set fix.includes</fail>
-        <property name="javac.includes" value="${fix.includes}.java"/>
-    </target>
-    <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix">
-        <j2seproject1:nbjpdareload/>
-    </target>
-    <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>
-    <!--
-                ===============
-                JAVADOC SECTION
-                ===============
-            -->
-    <target depends="init" name="-javadoc-build">
-        <mkdir dir="${dist.javadoc.dir}"/>
-        <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
-            <classpath>
-                <path path="${javac.classpath}"/>
-            </classpath>
-            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
-                <filename name="**/*.java"/>
-            </fileset>
-        </javadoc>
-    </target>
-    <target depends="init,-javadoc-build" if="netbeans.home" name="-javadoc-browse" unless="no.javadoc.preview">
-        <nbbrowse file="${dist.javadoc.dir}/index.html"/>
-    </target>
-    <target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/>
-    <!--
-                =========================
-                JUNIT COMPILATION SECTION
-                =========================
-            -->
-    <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">
-        <mkdir dir="${build.test.classes.dir}"/>
-    </target>
-    <target name="-pre-compile-test">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target if="do.depend.true" name="-compile-test-depend">
-        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
-    </target>
-    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">
-        <j2seproject3:javac classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
-        <copy todir="${build.test.classes.dir}">
-            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
-        </copy>
-    </target>
-    <target name="-post-compile-test">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/>
-    <target name="-pre-compile-test-single">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
-        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
-        <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>
-        <j2seproject3:javac classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}"/>
-        <copy todir="${build.test.classes.dir}">
-            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
-        </copy>
-    </target>
-    <target name="-post-compile-test-single">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>
-    <!--
-                =======================
-                JUNIT EXECUTION SECTION
-                =======================
-            -->
-    <target depends="init" if="have.tests" name="-pre-test-run">
-        <mkdir dir="${build.test.results.dir}"/>
-    </target>
-    <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">
-        <j2seproject3:junit testincludes="**/*Test.java"/>
-    </target>
-    <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">
-        <fail if="tests.failed">Some tests failed; see details above.</fail>
-    </target>
-    <target depends="init" if="have.tests" name="test-report"/>
-    <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/>
-    <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/>
-    <target depends="init" if="have.tests" name="-pre-test-run-single">
-        <mkdir dir="${build.test.results.dir}"/>
-    </target>
-    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
-        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
-        <j2seproject3:junit excludes="" includes="${test.includes}"/>
-    </target>
-    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">
-        <fail if="tests.failed">Some tests failed; see details above.</fail>
-    </target>
-    <target depends="init,-do-not-recompile,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>
-    <!--
-                =======================
-                JUNIT DEBUGGING SECTION
-                =======================
-            -->
-    <target depends="init,compile-test" if="have.tests" name="-debug-start-debuggee-test">
-        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
-        <property location="${build.test.results.dir}/TEST-${test.class}.xml" name="test.report.file"/>
-        <delete file="${test.report.file}"/>
-        <mkdir dir="${build.test.results.dir}"/>
-        <j2seproject3:debug classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner" classpath="${ant.home}/lib/ant.jar:${ant.home}/lib/ant-junit.jar:${debug.test.classpath}">
-            <customize>
-                <syspropertyset>
-                    <propertyref prefix="test-sys-prop."/>
-                    <mapper from="test-sys-prop.*" to="*" type="glob"/>
-                </syspropertyset>
-                <arg value="${test.class}"/>
-                <arg value="showoutput=true"/>
-                <arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.BriefJUnitResultFormatter"/>
-                <arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter,${test.report.file}"/>
-            </customize>
-        </j2seproject3:debug>
-    </target>
-    <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">
-        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>
-    </target>
-    <target depends="init,-do-not-recompile,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>
-    <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">
-        <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>
-    </target>
-    <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/>
-    <!--
-                =========================
-                APPLET EXECUTION SECTION
-                =========================
-            -->
-    <target depends="init,compile-single" name="run-applet">
-        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
-        <j2seproject1:java classname="sun.applet.AppletViewer">
-            <customize>
-                <arg value="${applet.url}"/>
-            </customize>
-        </j2seproject1:java>
-    </target>
-    <!--
-                =========================
-                APPLET DEBUGGING  SECTION
-                =========================
-            -->
-    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-applet">
-        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
-        <j2seproject3:debug classname="sun.applet.AppletViewer">
-            <customize>
-                <arg value="${applet.url}"/>
-            </customize>
-        </j2seproject3:debug>
-    </target>
-    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet" if="netbeans.home" name="debug-applet"/>
-    <!--
-                ===============
-                CLEANUP SECTION
-                ===============
-            -->
-    <target depends="init" name="deps-clean" unless="no.deps">
-        <ant antfile="${project.jobid-api-java}/build.xml" inheritall="false" target="clean"/>
-    </target>
-    <target depends="init" name="-do-clean">
-        <delete dir="${build.dir}"/>
-        <delete dir="${dist.dir}"/>
-    </target>
-    <target name="-post-clean">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/>
-</project>
diff --git a/org.glite.lb.client-java/nbproject/genfiles.properties b/org.glite.lb.client-java/nbproject/genfiles.properties
deleted file mode 100755 (executable)
index 9a7491e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-build.xml.data.CRC32=2a7fa1fb
-build.xml.script.CRC32=584b0e83
-build.xml.stylesheet.CRC32=be360661
-# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
-# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
-nbproject/build-impl.xml.data.CRC32=2a7fa1fb
-nbproject/build-impl.xml.script.CRC32=1298608d
-nbproject/build-impl.xml.stylesheet.CRC32=f1d9da08
diff --git a/org.glite.lb.client-java/nbproject/private/config.properties b/org.glite.lb.client-java/nbproject/private/config.properties
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.glite.lb.client-java/nbproject/private/private.properties b/org.glite.lb.client-java/nbproject/private/private.properties
deleted file mode 100755 (executable)
index 6a0a467..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-do.depend=false
-do.jar=true
-javac.debug=true
-javadoc.preview=true
-jaxws.endorsed.dir=/home/pavel/netbeans-6.0.1/java1/modules/ext/jaxws21/api
-project.jobid-api-java=/home/pavel/Desktop/bakalarka/org.glite.jobid.api-java
-user.properties.file=/home/pavel/.netbeans/6.0/build.properties
diff --git a/org.glite.lb.client-java/nbproject/project.properties b/org.glite.lb.client-java/nbproject/project.properties
deleted file mode 100755 (executable)
index 63edd9f..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-application.title=locallogger
-application.vendor=pavel
-build.classes.dir=${build.dir}/classes
-build.classes.excludes=**/*.java,**/*.form
-# This directory is removed when the project is cleaned:
-build.dir=build
-build.generated.dir=${build.dir}/generated
-# Only compile against the classpath explicitly listed here:
-build.sysclasspath=ignore
-build.test.classes.dir=${build.dir}/test/classes
-build.test.results.dir=${build.dir}/test/results
-debug.classpath=\
-    ${run.classpath}
-debug.test.classpath=\
-    ${run.test.classpath}
-# This directory is removed when the project is cleaned:
-dist.dir=dist
-dist.jar=${dist.dir}/lb-client-java.jar
-dist.javadoc.dir=${dist.dir}/javadoc
-excludes=
-includes=**
-jar.compress=false
-javac.classpath=\
-    ${reference.jobid-api-java.jar}:\
-    ${file.reference.cog-certmanagement.jar}:\
-    ${file.reference.cog-jglobus.jar} 
-# Space-separated list of extra javac options
-javac.compilerargs=
-javac.deprecation=false
-javac.source=
-javac.target=
-javac.test.classpath=\
-    ${javac.classpath}:\
-    ${build.classes.dir}:\
-    ${libs.junit.classpath}:\
-    ${libs.junit_4.classpath}
-javadoc.additionalparam=
-javadoc.author=false
-javadoc.encoding=${source.encoding}
-javadoc.noindex=false
-javadoc.nonavbar=false
-javadoc.notree=false
-javadoc.private=false
-javadoc.splitindex=true
-javadoc.use=true
-javadoc.version=false
-javadoc.windowtitle=
-main.class=org.glite.test.Test
-manifest.file=manifest.mf
-meta.inf.dir=${src.dir}/META-INF
-platform.active=default_platform
-project.jobid-api-java=../jobid-api-java
-reference.jobid-api-java.jar=${project.jobid-api-java}/dist/jobid-api-java.jar
-run.classpath=\
-    ${javac.classpath}:\
-    ${build.classes.dir}
-# Space-separated list of JVM arguments used when running the project
-# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value
-# or test-sys-prop.name=value to set system properties for unit tests):
-run.jvmargs=-Djava.library.path=/media/f/skola/bakalarka/locallogger/build/classes/org/glite/lb/
-run.test.classpath=\
-    ${javac.test.classpath}:\
-    ${build.test.classes.dir}
-source.encoding=UTF-8
-src.dir=src
-test.src.dir=test
-javac.compilerargs.jaxws=
diff --git a/org.glite.lb.client-java/nbproject/project.xml b/org.glite.lb.client-java/nbproject/project.xml
deleted file mode 100755 (executable)
index 7152d94..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://www.netbeans.org/ns/project/1">
-    <type>org.netbeans.modules.java.j2seproject</type>
-    <configuration>
-        <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
-            <name>lb-client-java</name>
-            <minimum-ant-version>1.6.5</minimum-ant-version>
-            <source-roots>
-                <root id="src.dir"/>
-            </source-roots>
-            <test-roots>
-                <root id="test.src.dir"/>
-            </test-roots>
-        </data>
-        <references xmlns="http://www.netbeans.org/ns/ant-project-references/1">
-            <reference>
-                <foreign-project>jobid-api-java</foreign-project>
-                <artifact-type>jar</artifact-type>
-                <script>build.xml</script>
-                <target>jar</target>
-                <clean-target>clean</clean-target>
-                <id>jar</id>
-            </reference>
-        </references>
-    </configuration>
-</project>
diff --git a/org.glite.lb.client-java/project/ChangeLog b/org.glite.lb.client-java/project/ChangeLog
deleted file mode 100644 (file)
index d091928..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-1.0.0-1
-- LB 2.0 release
-
-1.0.0-2
-- fixed configure to work in etics
-
-1.0.0-3
-- Added the dummy 'check' rule to the Makefile
-
-1.0.0-4
-- configure script update (globus flavors added to configure call)
-
-1.0.0-5
-- Added ant_prefix handling to Makefile and configure
-
-1.0.0-6
-- configure script update
-
diff --git a/org.glite.lb.client-java/project/genEventTypes.pl b/org.glite.lb.client-java/project/genEventTypes.pl
deleted file mode 100644 (file)
index e772057..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-@@@LANG: java
-@@@{
-       $dest = shift;
-
-       for my $e ($event->getTypesOrdered) {
-               my $uc = ucfirst $e;
-               my $uuc = uc $e;
-               print "generating $dest/Event$uc.java\n";
-
-               open E,">$dest/Event$uc.java" or die "$dest/Event$uc.java: $!\n";
-
-               print E
-qq{
-package org.glite.lb;
-import org.glite.jobid.CheckedString;
-import org.glite.jobid.Jobid;
-
-public class Event$uc extends Event \{
-       public Event$uc() \{
-       \}
-
-       public String getEventType() \{
-               return "$uc";
-       \}
-};
-
-               selectType $event $e;
-
-               for ($event->getFieldsOrdered) {
-                       my $f = selectField $event $_;
-                       my $fn = $f->{name};
-                       my $fnu = ucfirst $fn;
-                       my $fnuu = uc $fn;
-                       my $t;
-       
-                       while ($fnu =~ /_([a-z])/) {
-                               my $u = uc $1;
-                               $fnu =~ s/_$1/$u/;
-                       }
-       
-                       if ($f->{codes}) {
-                               local $_;
-                               $t = $fnu;
-                               print E
-qq{    public enum $fnu \{ 
-               ${fnuu}_UNDEFINED,
-};
-                               for (@{$f->{codes}}) {
-                                       my $cu = uc $_->{name};
-                                       print E
-qq{            ${fnuu}_${cu},
-};
-                               }
-                               print E
-qq{\}
-};
-                       }
-                       else {
-                               $t = $f->getType;
-                       }
-       
-# XXX: handle nulls in setXX() ?
-                       print E
-qq{    private $t $fn;
-
-       public $t get$fnu() \{
-               return $fn;
-       \}
-
-       public void set$fnu($t val) \{
-               this.$fn = val;
-       \}
-};
-               }
-
-               print E
-
-qq{    public String ulm() \{
-               return (" " +
-};
-       
-
-               for ($event->getFieldsOrdered) {
-                       my $f = selectField $event $_;
-                       my $fn = $f->{name};
-                       my $t = getType $f;
-                       my $fnu = ucfirst $fn;
-                       my $fnuu = uc $fn;
-                       my $val = $t eq 'String' ? 
-                               "new CheckedString($fn).toString()" : $fn;
-
-                       print E
-qq{            "DG.$uuc.$fnuu=\\"" + $val + "\\"" +
-};
-               }
-
-               print E 
-qq{            "");
-       \}
-\}
-};
-
-               close E;
-       }
-
-@@@}
diff --git a/org.glite.lb.client-java/project/version.properties b/org.glite.lb.client-java/project/version.properties
deleted file mode 100644 (file)
index 0e44305..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# $Header$
-module.version=1.0.0
-module.age=6
diff --git a/org.glite.lb.client-java/src/org/glite/lb/Context.java b/org.glite.lb.client-java/src/org/glite/lb/Context.java
deleted file mode 100644 (file)
index 1fc4358..0000000
+++ /dev/null
@@ -1,421 +0,0 @@
-package org.glite.lb;
-
-import java.net.UnknownHostException;
-import java.util.Calendar;
-import java.util.Random;
-import org.glite.jobid.Jobid;
-import org.glite.jobid.CheckedString;
-
-/**
- * Class representing a context for some job
- * 
- * @author Pavel Piskac (173297@mail.muni.cz)
- * @version 15. 3. 2008
- */
-public abstract class Context {
-
-    private int id;
-    private int source;
-    private int flag;
-    private String host;
-    private String user;
-    private String prog;
-    private String srcInstance;
-    private Jobid jobid;
-    private SeqCode seqCode;
-    
-    /**
-     * Creates new instance of Context class.
-     */
-    public Context() {
-    }
-
-    /**
-     * Creates new instance of Context class.
-     * 
-     * @param id message id, if null, random number is generated
-     * @param source one if paramaters of Sources enumeration
-     * @param flag
-     * @param host host name, if null or "", the name is get from host name of this computer
-     * @param user user name
-     * @param prog if null then is used "egd-wms"
-     * @param srcInstance if null then it is set as ""
-     * @param jobid
-     * @throws java.lang.IllegalArgumentException if user or jobid is null 
-     *  or flag < 0 or source <=0 || >= 9 
-     * 
-     */
-    public Context(int id,
-            int source,
-            int flag,
-            String host,
-            String user,
-            String prog,
-            String srcInstance,
-            Jobid jobid) {
-        if (id < 0) {
-            id = new Random().nextInt();
-        }
-
-        if (source <= -1 || source > Sources.EDG_WLL_SOURCE_LB_SERVER) {
-            throw new IllegalArgumentException("Context source");
-        }
-
-        if (flag < 0) {
-            throw new IllegalArgumentException("Context flag");
-        }
-
-        if (host == null || host.equals("")) {
-            try {
-                host = java.net.InetAddress.getLocalHost().getHostName();
-            } catch (UnknownHostException ex) {
-                System.err.println(ex);
-            }
-        }
-
-        if (user == null) {
-            throw new IllegalArgumentException("Context user");
-        }
-
-        if (prog == null) {
-            prog = new String("edg-wms");
-        }
-
-        if (srcInstance == null) {
-            srcInstance = new String("");
-        }
-
-        if (jobid == null) {
-            throw new IllegalArgumentException("Context jobid");
-        }
-
-        this.id = id;
-        this.source = source;
-        this.flag = flag;
-        this.host = new CheckedString(host).toString();
-        this.user = new CheckedString(user).toString();
-        this.prog = new CheckedString(prog).toString();
-        this.srcInstance = new CheckedString(srcInstance).toString();
-        this.jobid = jobid;
-    }
-
-    /**
-     * Converts Sources enum constants to defined string
-     * @param sourceEnum Sources enum constant
-     * @return String representation of Sources enum constants
-     * @throws IllegalArgumentException if wrong source type is set
-     */
-    private String recognizeSource(int sourceEnum) {
-        switch (sourceEnum) {
-            case Sources.EDG_WLL_SOURCE_NONE: return "Undefined";
-            case Sources.EDG_WLL_SOURCE_USER_INTERFACE: return "UserInterface";
-            case Sources.EDG_WLL_SOURCE_NETWORK_SERVER: return "NetworkServer";
-            case Sources.EDG_WLL_SOURCE_WORKLOAD_MANAGER: return "WorkloadManager";
-            case Sources.EDG_WLL_SOURCE_BIG_HELPER: return "BigHelper";
-            case Sources.EDG_WLL_SOURCE_JOB_SUBMISSION: return "JobController";
-            case Sources.EDG_WLL_SOURCE_LOG_MONITOR: return "LogMonitor";
-            case Sources.EDG_WLL_SOURCE_LRMS: return "LRMS";
-            case Sources.EDG_WLL_SOURCE_APPLICATION: return "Application";
-            case Sources.EDG_WLL_SOURCE_LB_SERVER: return "LBServer";
-            default: throw new IllegalArgumentException("wrong source type");
-        }
-    }
-
-    /**
-     * Abstract method which will serve as method for sending messages with events.
-     * @param event event for which will be created and send message
-     */
-    public abstract void log(Event event);
-    
-    /**
-     * Creates message prepared to send
-     * @param event event for which is message generated
-     * @throws IllegalArgumentException if event, source, user or job is null
-     * or flag < 0
-     * @return output String with message
-     */
-    protected String createMessage(Event event) {
-        if (event == null) {
-            throw new IllegalArgumentException("Context event");
-        }
-        
-        if (jobid == null) {
-            throw new IllegalArgumentException("Context jobid");
-        }
-
-        if (jobid.getBkserver() == null) {
-            throw new IllegalArgumentException("Context Jobid bkserver");
-        }
-
-        if (jobid.getPort() <= 0 || jobid.getPort() >= 65536) {
-            throw new IllegalArgumentException("Context Jobid port");
-        }
-        
-        if (jobid.getUnique() == null) {
-            throw new IllegalArgumentException("Context Jobid unique");
-        }
-        
-        if (event == null) {
-            throw new IllegalArgumentException("Context event");
-        }
-
-        if (source <= -1 || source > Sources.EDG_WLL_SOURCE_LB_SERVER) {
-            throw new IllegalArgumentException("Context source");
-        }
-
-        if (flag < 0) {
-            throw new IllegalArgumentException("Context flag");
-        }
-
-        if (host == null || host.equals("")) {
-            try {
-                host = java.net.InetAddress.getLocalHost().getHostName();
-            } catch (UnknownHostException ex) {
-                System.err.println(ex);
-            }
-        }
-
-        if (prog == null) {
-            prog = new String("edg-wms");
-        }
-
-        if (user == null) {
-            throw new IllegalArgumentException("Context user");
-        }
-
-        if (srcInstance == null) {
-            srcInstance = new String("");
-        }
-
-        String output;
-        String date = "";
-        String tmp;
-        date = String.valueOf(Calendar.getInstance().get(Calendar.YEAR));
-        tmp = String.valueOf(Calendar.getInstance().get(Calendar.MONTH) + 1);
-        date += "00".substring(0, 2 - tmp.length()) + tmp;
-        tmp = String.valueOf(Calendar.getInstance().get(Calendar.DATE));
-        date += "00".substring(0, 2 - tmp.length()) + tmp;
-        tmp = String.valueOf(Calendar.getInstance().get(Calendar.HOUR));
-        date += "00".substring(0, 2 - tmp.length()) + tmp;
-        tmp = String.valueOf(Calendar.getInstance().get(Calendar.MINUTE));
-        date += "00".substring(0, 2 - tmp.length()) + tmp;
-        tmp = String.valueOf(Calendar.getInstance().get(Calendar.SECOND));
-        date += "00".substring(0, 2 - tmp.length()) + tmp;
-        date += ".";
-        tmp = String.valueOf(Calendar.getInstance().get(Calendar.MILLISECOND));
-        String tmp2 = "000".substring(0, 3 - tmp.length()) + tmp;
-        date += tmp2 + "000000".substring(tmp.length(), 6);
-
-        seqCode.incrementSeqCode(source);
-
-        output = ("DG.LLLID=" + id +
-                " DG.USER=\"" + user + "\"" +
-                " DATE=" + date +
-                " HOST=\"" + host + "\"" +
-                " PROG=" + prog +
-                " LVL=SYSTEM" +
-                " DG.PRIORITY=0" +
-                " DG.SOURCE=\"" + recognizeSource(source) + "\"" +
-                " DG.SRC_INSTANCE=\"" + srcInstance + "\"" +
-                " DG.EVNT=\"" + event.getEventType() + "\"" +
-                " DG.JOBID=\"" + jobid + "\"" +
-                " DG.SEQCODE=\"" + seqCode + "\"" +
-                event.ulm());
-
-        return output;
-    }
-
-    /**
-     * Return flag 
-     * 
-     * @return flag
-     */
-    public int getFlag() {
-        return flag;
-    }
-
-    /**
-     * Set flag
-     * 
-     * @param flag
-     * @throws java.lang.IllegalArgumentException if flag is lower than 0
-     */
-    public void setFlag(int flag) {
-        if (flag < 0) {
-            throw new IllegalArgumentException("Context flag");
-        }
-
-        this.flag = flag;
-    }
-
-    /**
-     * Returns host name
-     * 
-     * @return host name
-     */
-    public String getHost() {
-        return host;
-    }
-
-    /**
-     * Sets host name
-     * @param host host name
-     * @throws java.lang.IllegalArgumentException if host is null
-     */
-    public void setHost(String host) {
-        if (host == null) {
-            throw new IllegalArgumentException("Context host");
-        }
-
-        this.host = host;
-    }
-
-    /**
-     * Gets message id.
-     * 
-     * @return message id
-     */
-    public int getId() {
-        return id;
-    }
-
-    /**
-     * Sets message id.
-     * 
-     * @param id message id
-     * @throws java.lang.IllegalArgumentException if id is lower than 0
-     */
-    public void setId(int id) {
-        if (id < 0) {
-            throw new IllegalArgumentException("Context id");
-        }
-        this.id = id;
-    }
-
-    /**
-     * Gets jobid.
-     * 
-     * @return jobid
-     */
-    public Jobid getJobid() {
-        return jobid;
-    }
-
-    /**
-     * Sets jobid.
-     * 
-     * @param jobid
-     * @throws java.lang.IllegalArgumentException if jobid is null
-     */
-    public void setJobid(Jobid jobid) {
-        if (jobid == null) {
-            throw new IllegalArgumentException("Context jobid");
-        }
-
-        this.jobid = jobid;
-    }
-
-    /**
-     * Gets prog.
-     * @return prog
-     */
-    public String getProg() {
-        return prog;
-    }
-
-    /**
-     * Sets prog, if prog is null then is set default value "edg-wms"
-     * @param prog
-     */
-    public void setProg(String prog) {
-        if (prog == null) {
-            prog = new String("edg-wms");
-        }
-
-        this.prog = (new CheckedString(prog)).toString();
-    }
-
-    /**
-     * Gets sequence code.
-     * 
-     * @return sequence code
-     */
-    public SeqCode getSeqCode() {
-        return seqCode;
-    }
-
-    /**
-     * Sets sequence code.
-     * @param seqCode sequence code
-     * @throws java.lang.IllegalArgumentException if seqCode is null
-     */
-    public void setSeqCode(SeqCode seqCode) {
-        if (seqCode == null) {
-            throw new IllegalArgumentException("Context seqCode");
-        }
-
-        this.seqCode = seqCode;
-    }
-
-    /**
-     * Gets source which represents which part of sequence code will be changed
-     * @return source
-     */
-    public int getSource() {
-        return source;
-    }
-
-    /**
-     * Sets source which represents which part of sequence code will be changed
-     * @param source source
-     * @throws java.lang.IllegalArgumentException if source is null
-     */
-    public void setSource(int source) {
-        if (source <= -1 || source > Sources.EDG_WLL_SOURCE_LB_SERVER) {
-            throw new IllegalArgumentException("Context source");
-        }
-
-        this.source = source;
-    }
-
-    /**
-     * Gets srcInstance.
-     * @return srcInstance
-     */
-    public String getSrcInstance() {
-        return srcInstance;
-    }
-
-    /**
-     * Sets srcInstace, if srcInstace null then is set "".
-     * @param srcInstance srcInstance
-     */
-    public void setSrcInstance(String srcInstance) {
-        if (srcInstance == null) {
-            srcInstance = new String("");
-        }
-
-        this.srcInstance = new CheckedString(srcInstance).toString();
-    }
-
-    /**
-     * Gets user name.
-     * @return user name
-     */
-    public String getUser() {
-        return user;
-    }
-
-    /**
-     * Sets user name.
-     * @param user user name
-     * @throws java.lang.IllegalArgumentException if user is null
-     */
-    public void setUser(String user) {
-        if (user == null) {
-            throw new IllegalArgumentException("Context user");
-        }
-
-        this.user = (new CheckedString(user)).toString();
-    }
-}
diff --git a/org.glite.lb.client-java/src/org/glite/lb/ContextIL.java b/org.glite.lb.client-java/src/org/glite/lb/ContextIL.java
deleted file mode 100644 (file)
index 2d798cb..0000000
+++ /dev/null
@@ -1,293 +0,0 @@
-package org.glite.lb;
-
-import org.glite.jobid.Jobid;
-
-/**
- * Class which is used to send messages to inter-logger using unix socket.
- * 
- * @author Pavel Piskac (173297@mail.muni.cz)
- */
-public class ContextIL extends Context {
-
-    private String pathToSocket;
-    private String pathToNativeLib;
-    private String prefix;
-    private int repeatWriteToFile = 5;
-    private int connAttempts = 3;
-    private int timeout = 3;
-    private Boolean useUnixSocket = Boolean.TRUE;
-
-    //tutorial http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jni.html
-    //native method which is written in C and imported to Java
-    native int sendToSocket(String socket_path,
-    long filepos,
-    String msg,
-    int msg_size,
-    int conn_attempts,
-    int timeout);
-    
-    /**
-     * Creates new instance of ContextIL.
-     */
-    public ContextIL() {
-    }
-
-    /**
-     * Creates new instance of ContextIL.
-     * 
-     * @param pathToSocket path to unix socket
-     * @param prefix path where are stored messages
-     */
-    public ContextIL(String pathToSocket, String prefix) {
-        this.prefix = prefix;
-        this.pathToSocket = pathToSocket;
-    }
-
-    /**
-     * Creates new instance of ContextIL.
-     * 
-     * @param id message id, if null, random number is generated
-     * @param source one if paramaters of Sources enumeration
-     * @param flag
-     * @param host host name, if null or "", the name is get from host name of this computer
-     * @param user user name
-     * @param prog if null then is used "egd-wms"
-     * @param srcInstance if null then it is set as ""
-     * @param jobid jobid
-     * @param path path to unix socket
-     * @param prefix path where are stored messages
-     * @throws java.lang.IllegalArgumentException if source, user, jobid, prefix 
-     * or path is null or flag < 0
-     */
-    public ContextIL(int id,
-            int source,
-            int flag,
-            String host,
-            String user,
-            String prog,
-            String srcInstance,
-            Jobid jobid,
-            String pathToSocket,
-            String prefix) {
-
-        super(id, source, flag, host, user, prog, srcInstance, jobid);
-
-        if (prefix == null) {
-            throw new IllegalArgumentException("ContextIL prefix");
-        }
-
-        if (pathToSocket == null) {
-            throw new IllegalArgumentException("ContextIL path");
-        }
-
-        this.prefix = prefix;
-        this.pathToSocket = pathToSocket;
-    }
-
-    /**
-     * Writes file position and message to specified socket.
-     * 
-     * @param pathToSocket path to unix socket
-     * @param fileSize size of the file before new message was written there
-     * @param message message which will be send
-     * @param conn_attempts count of connection attempts
-     * @param time_out connection timeout
-     */
-    private void writeToSocket(String pathToSocket,
-            long fileSize,
-            String message) {
-
-        if (useUnixSocket.booleanValue()) {
-            try {
-                System.loadLibrary("glite_lb_sendviasocket");
-               message += '\n';
-                   sendToSocket(pathToSocket,
-                        fileSize,
-                        message,
-                        message.length(),
-                        connAttempts,
-                        timeout);
-                
-            } catch (UnsatisfiedLinkError ex) {
-                useUnixSocket = Boolean.FALSE;
-                System.err.println(ex);
-            }
-        }
-    }
-
-    /**
-     * Writes event message to the file and socket.
-     * 
-     * @param event event
-     * @throws java.lang.IllegalArgumentException if event, prefix or path
-     */
-    public void log(Event event) {
-        if (event == null) {
-            throw new IllegalArgumentException("ContextIL event");
-        }
-
-        if (prefix == null) { 
-            throw new IllegalArgumentException("ContextIL prefix");
-        }
-
-        if (pathToSocket == null || pathToSocket.equals("")) { 
-            pathToSocket = new String("");
-            useUnixSocket = Boolean.FALSE;
-        }
-
-        if (pathToNativeLib == null || pathToNativeLib.equals("")) { 
-            pathToNativeLib = new String("");
-            useUnixSocket = Boolean.FALSE;
-        }
-        
-        String message = super.createMessage(event);
-
-        Long fileLength = ILFileWriter.write(prefix, message, repeatWriteToFile);
-
-        writeToSocket(pathToSocket, fileLength.longValue(), message);
-    }
-
-    /**
-     * Gets path to socket.
-     * 
-     * @return pathToSocket to socket
-     */
-    public String getPathToSocket() {
-        return pathToSocket;
-    }
-
-    /**
-     * Sets path to socket.
-     * 
-     * @param pathToSocket path to socket
-     * @throws java.lang.IllegalArgumentException if path is null
-     */
-    public void setPathToSocket(String pathToSocket) {
-        if (pathToSocket == null) {
-            throw new IllegalArgumentException("ContextIL pathToSocket");
-        }
-
-        this.pathToSocket = pathToSocket;
-    }
-
-    /**
-     * Gets path to nativelib file which is needed to send messages via unix socket
-     * 
-     * @return pathToNativeLib to native library (libnativelib.so)
-     */
-    public String getPathToNativeLib() {
-        return pathToNativeLib;
-    }
-
-    /**
-     * Sets path to nativelib file which is needed to send messages via unix socket
-     * @param pathToNativeLib path to shared library (libnativelib.so)
-     */
-    public void setPathToNativeLib(String pathToNativeLib) {
-        if (pathToNativeLib == null) {
-            throw new IllegalArgumentException("ContextIL pathToNativeLib");
-        }
-
-        this.pathToNativeLib = pathToNativeLib;
-    }
-
-    /**
-     * Gets path where are stored messages.
-     * 
-     * @return path where are stored messages
-     */
-    public String getPrefix() {
-        return prefix;
-    }
-
-    /**
-     * Sets path where are stored messages.
-     * 
-     * @param prefix path where are stored messages
-     */
-    public void setPrefix(String prefix) {
-        if (prefix == null) {
-            throw new IllegalArgumentException("ContextIL prefix");
-        }
-
-        this.prefix = prefix;
-    }
-
-    /**
-     * Gets count of repeated write to file if some exception is thrown.
-     * 
-     * @return count of repeated write to file
-     */
-    public int getRepeatWriteToFile() {
-        return repeatWriteToFile;
-    }
-
-    /**
-     * Sets count of repeated write to file if some exception is thrown.
-     * 
-     * @param repeatWriteToFile count of repeated write to file
-     */
-    public void setRepeatWriteToFile(int repeatWriteToFile) {
-        if (repeatWriteToFile < 1) {
-            throw new IllegalArgumentException("ContextIL repeatWriteToFile");
-        }
-
-        this.repeatWriteToFile = repeatWriteToFile;
-    }
-
-    /**
-     * Gets count of connection attempts which is used while sending the message via unix socket.
-     * 
-     * @return count of connection attempts
-     */
-    public int getConnAttempts() {
-        return connAttempts;
-    }
-
-    /**
-     * Sets count of connection attempts while sending the message via unix socket.
-     * 
-     * @param connAttempts count of connection attempts
-     */
-    public void setConnAttempts(int connAttempts) {
-        if (connAttempts < 1) {
-            throw new IllegalArgumentException("ContextIL conn_attempts");
-        }
-
-        this.connAttempts = connAttempts;
-    }
-
-    /**
-     * Gets timeout which is used while sending the message via unix socket.
-     * 
-     * @return timeout
-     */
-    public int getTimeout() {
-        return timeout;
-    }
-
-    /**
-     * Sets timeout which is used while sending the message via unix socket.
-     * 
-     * @param timeout timeout
-     */
-    public void setTimeout(int timeout) {
-        if (timeout < 1) {
-            throw new IllegalArgumentException("ContextIL time_out");
-        }
-
-        this.timeout = timeout;
-    }
-
-    public Boolean getUseUnixSocket() {
-        return useUnixSocket;
-    }
-
-    public void setUseUnixSocket(Boolean useUnixSocket) {
-        if (useUnixSocket == null) {
-            throw new IllegalArgumentException("ContextIL useUnixSocket");
-        }
-
-        this.useUnixSocket = useUnixSocket;
-    }
-}
diff --git a/org.glite.lb.client-java/src/org/glite/lb/ContextLL.java b/org.glite.lb.client-java/src/org/glite/lb/ContextLL.java
deleted file mode 100644 (file)
index 357c86c..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-package org.glite.lb;
-
-import org.glite.jobid.Jobid;
-
-/** 
- * This class provides sending messages using network sockets.
- * 
- * @author Pavel Piskac (173297@mail.muni.cz)
- */
-public class ContextLL extends Context {
-
-    private String address;
-    private int port = 9002;
-    private String prefix;
-    private int repeatWriteToFile = 5;
-    private int timeout = 30000; //in milliseconds
-    private String pathToCertificate;
-    private SSLSend sslSend = null;
-
-    public ContextLL() {
-    }
-
-    public ContextLL(String address, int port, String prefix) {
-        this.prefix = prefix;
-        this.address = address;
-        this.port = port;
-    }
-
-    public ContextLL(int id,
-            int source,
-            int flag,
-            String host,
-            String user,
-            String prog,
-            String srcInstance,
-            Jobid jobid,
-            String address,
-            int port,
-            String prefix) {
-
-        super(id, source, flag, host, user, prog, srcInstance, jobid);
-
-        if (prefix == null) {
-            throw new IllegalArgumentException("ContextLL prefix");
-        }
-        if (address == null) {
-            throw new IllegalArgumentException("ContextLL socket");
-        }
-        if (port < 0) {
-            throw new IllegalArgumentException("ContextLL port");
-        }
-
-        this.prefix = prefix;
-        this.address = address;
-    }
-
-    @Override
-    public void log(Event event) {
-        if (event == null) {
-            throw new IllegalArgumentException("ContextLL event");
-        }
-
-        if (prefix == null) {
-            throw new IllegalArgumentException("ContextLL prefix");
-        }
-
-        if (address == null) {
-            throw new IllegalArgumentException("ContextLL socket");
-        }
-
-        if (port < 0) {
-            throw new IllegalArgumentException("ContextLL port");
-        }
-
-        if (sslSend == null) {
-            sslSend = new SSLSend();
-        }
-        
-        String message = super.createMessage(event);
-
-        ILFileWriter.write(prefix, message, repeatWriteToFile);
-        
-        
-        sslSend.send(pathToCertificate, address, port, timeout, message);
-    }
-
-    public String getAddress() {
-        return address;
-    }
-
-    public void setAddress(String address) {
-        if (address == null) {
-            throw new IllegalArgumentException("ContextLL address");
-        }
-        
-        this.address = address;
-    }
-
-    public int getPort() {
-        return port;
-    }
-
-    public void setPort(int port) {
-        if (port < 0) {
-            throw new IllegalArgumentException("ContextLL port");
-        }
-        this.port = port;
-    }
-    
-    
-    public String getPrefix() {
-        return prefix;
-    }
-
-    public void setPrefix(String prefix) {
-        if (prefix == null) {
-            throw new IllegalArgumentException("ContextLL prefix");
-        }
-        
-        this.prefix = prefix;
-    }
-
-    public int getRepeatWriteToFile() {
-        return repeatWriteToFile;
-    }
-
-    public void setRepeatWriteToFile(int repeatWriteToFile) {
-        if (repeatWriteToFile < 1) {
-            throw new IllegalArgumentException("ContextLL repeatWriteToFile");
-        }
-        
-        this.repeatWriteToFile = repeatWriteToFile;
-    }
-
-    public int getTimeout() {
-        return timeout;
-    }
-
-    public void setTimeout(int timeout) {
-        if (timeout < 0) {
-            throw new IllegalArgumentException("ContextLL timout");
-        }
-        this.timeout = timeout;
-    }
-
-    public String getPathToCertificate() {
-        return pathToCertificate;
-    }
-
-    public void setPathToCertificate(String pathToCertificate) {
-        if (pathToCertificate == null) {
-            throw new IllegalArgumentException("ContextLL pathToCertificate");
-        }
-        
-        this.pathToCertificate = pathToCertificate;
-    }
-
-    
-}
diff --git a/org.glite.lb.client-java/src/org/glite/lb/Event.java b/org.glite.lb.client-java/src/org/glite/lb/Event.java
deleted file mode 100644 (file)
index 3e61203..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.glite.lb;
-
-/**
- * Abstract class which serves as base for all events.
- * 
- * @author Pavel Piskac (173297@mail.muni.cz)
- */
-public abstract class Event {
-    
-    /**
-     * When implemented, this method returns string which is specific for each event.
-     * 
-     * @return specific string
-     */
-    public abstract String ulm();
-
-    /**
-     * When implemented, this method returns name of event type.
-     * 
-     * @return name of event
-     */
-    public abstract String getEventType();
-}
diff --git a/org.glite.lb.client-java/src/org/glite/lb/ILFileWriter.java b/org.glite.lb.client-java/src/org/glite/lb/ILFileWriter.java
deleted file mode 100644 (file)
index 28cb84d..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-package org.glite.lb;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.nio.channels.FileChannel;
-import java.nio.channels.FileLock;
-
-/**
- * This class provides writing messages to some file.
- * 
- * @author Pavel Piskac (173297@mail.muni.cz)
- */
-public class ILFileWriter {
-
-    public ILFileWriter() {
-    }
-    
-    /**
-     * Writes message to a file and returns size of this file before writing the
-     * data
-     * @param prefix file path
-     * @param message message which will be written
-     * @param repeatWriteToFile count of attempts to write to file in case of failure
-     */
-    public static Long write(String prefix, String message, int repeatWriteToFile) {
-        FileWriter fileWriter = null;
-        Long fileLength = null;
-        RandomAccessFile raf = null;
-        FileLock fileLock = null;
-        File file;
-
-        for (int i = 0; i < repeatWriteToFile; i++) {
-            try {
-                file = new File(prefix);
-                raf = new RandomAccessFile(file, "rw");
-                FileChannel fileChannel = raf.getChannel();
-
-                fileLock = fileChannel.tryLock();
-                if (fileLock != null) {
-                    if (!file.exists()) {
-                        continue;
-                    }
-                    fileLength = new Long(raf.length());
-                    fileWriter = new FileWriter(file, true);
-                    //true means append data at the end of file
-
-                    BufferedWriter bufferedFileWriter = new BufferedWriter(fileWriter);
-
-                    bufferedFileWriter.write(message + '\n');
-                    bufferedFileWriter.flush();
-
-                    if (file.exists()) {
-                        break;
-                    }
-                }
-            } catch (FileNotFoundException ex) {
-                System.err.println(ex);
-            } catch (IOException ex) {
-                System.err.println(ex);
-            } catch (Exception ex) {
-                System.err.println(ex);
-            } finally {
-                if (fileLock != null) {
-                    try {
-                        fileLock.release();
-                    } catch (IOException ex) {
-                        System.err.println(ex);
-                    }
-                }
-
-                try {
-                    raf.close();
-                } catch (IOException ex) {
-                    System.err.println(ex);
-                } catch (NullPointerException ex) {
-                    System.err.println(ex);
-                }
-            }
-        }
-
-        return fileLength;
-    }
-}
diff --git a/org.glite.lb.client-java/src/org/glite/lb/ProducerTestIL.java b/org.glite.lb.client-java/src/org/glite/lb/ProducerTestIL.java
deleted file mode 100644 (file)
index fda43f4..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-package org.glite.lb;
-
-import java.util.Random;
-import org.glite.jobid.Jobid;
-
-/**
- * This class shows how to work with ContextIL.
- * 
- * @author Pavel Piskac
- */
-public class ProducerTestIL {
-
-    public static void main(String[] args) {
-        
-        if (args.length != 10) {
-            System.out.println("How to use test class:\n" +
-                    "you have to set 10 arguments in this order, if the choice is optional \"\" or text has to be set:\n" +
-                    "1. jobid in format \"https://somewhere:port/unique_part\" (required)\n" +
-                    "2. path to shared library written in c to be able to send messages via unix socket (optional)\n" +
-                    "3. source, enum constant from class Sources, determines which part of sequence code will be increased (required)\n" +
-                    "4. flag (required)\n" +
-                    "5. host name, if it is \"\" then is set name of the computer where is test class running (optional)\n" +
-                    "6. user name (required)\n" +
-                    "7. srcInstance (optional)\n" +
-                    "8. path to directory where will be saved files with events for each job (required)\n" +
-                    "9. path to unix socket (required if path to shared library is set)\n" +
-                    "10. description for event in this case event running (required)\n");
-        } else {
-            /* Create new instance of jobid, you can use other constructors too (see org.glite.jobid.api_java.Jobid.java) 
-             * Examples:
-             * Jobid jobid = new Jobid("https://skurut68-2.cesnet.cz:9000/paja6_test2"); 
-             */
-            Jobid jobid = new Jobid(args[0]);
-            System.out.println("jobid: " + args[0]);
-
-            /* Create sequence code
-             * Example:
-             * SeqCode seqCode = new SeqCode();
-             * Insert sequence number in format 
-             * UI=XXXXXX:NS=XXXXXXXXXX:WM=XXXXXX:BH=XXXXXXXXXX:JSS=XXXXXX:LM=XXXXXX:LRMS=XXXXXX:APP=XXXXXX:LBS=XXXXXX
-             * where X is 0-9, or you can just create new instance of SeqCode where all parts are set to 0
-             * Example:
-             * SeqCode seqCode = new SeqCode();
-             * seqCode.getSeqCodeFromString("UI=000001:NS=0000000002:WM=000003:BH=0000000004:" + 
-             * "JSS=000005:LM=000006:LRMS=000007:APP=000008:LBS=000009"); 
-             * seqCode.incrementSeqCode(Sources.EDG_WLL_SOURCE_USER_INTERFACE); 
-             * resulting sequence code will be 
-             * UI=000002:NS=0000000002:WM=000003:BH=0000000004:JSS=000005:LM=000006:LRMS=000007:APP=000008:LBS=000009
-             */
-            SeqCode seqCode = new SeqCode();
-            
-            /* Choose type of sending a log messages (at this time is implemented only ContextIL class)
-             * You can choose from some constructors (see org.glite.lb.client_java.ContextIL class)
-             */
-            ContextIL ctx = new ContextIL();
-
-            /* If you chose emtpy ContextIL constructor you have to set some attributes.
-             * One of them is pathToNativeLib which sais where java can find shared library written in c.
-             * Example: ctx.setPathToNativeLib("/home/paja6/locallogger/build/classes/org/glite/lb/");
-             */
-            ctx.setPathToNativeLib(args[1]);
-            System.out.println("pathToNativeLib: " + args[1]);
-
-            /* Id of the message is some random unique number. 
-             */
-            ctx.setId(new Random().nextInt(99999999));
-
-            /* Source indicates source of the message, it is constant from org.glite.lb.client_java.Sources class
-             * and determines which part of sequence number will be increased.
-             * Example: ctx.setSource(Sources.EDG_WLL_SOURCE_LRMS);
-             * In this case we have to use method which converts args[2] to Sources. In real environment it will
-             * not be used.
-             */
-            ctx.setSource(new Integer(args[2]));
-            System.out.println("source: " + args[2]);
-
-            /* Flag
-             * Example: ctx.setFlag(0);
-             */
-            ctx.setFlag(new Integer(args[3]));
-            System.out.println("flag: " + args[3]);
-
-            /* Name of the computer where is locallogger running
-             * Example: ctx.setHost("pelargir.ics.muni.cz");
-             */
-            ctx.setHost(args[4]);
-            System.out.println("host: " + args[4]);
-
-            /* Name of the user who owns the job.
-             * Example: ctx.setUser("Pavel Piskac");
-             */
-            ctx.setUser(args[5]);
-            System.out.println("user: " + args[5]);
-
-            /* TODO co to vlastne znamena?
-             * Mostly "" is set
-             * Example: ctx.setSrcInstance("");
-             */
-            ctx.setSrcInstance(args[6]);
-            System.out.println("srcInstance: " + args[6]);
-
-            /* Set the jobid for the context.
-             */
-            ctx.setJobid(jobid);
-
-            /* Set the jobid for the context.
-             */
-            ctx.setSeqCode(seqCode);
-
-            /* Number of connection attempts while sending the message via unix socket.
-             * Default value is 3 but you can change it.
-             */
-            ctx.setConnAttempts(5);
-
-            /* Timeout in seconds for the connection while sending the message via unix socket.
-             * Default value is 3 but you can change it.
-             */
-            ctx.setTimeout(2);
-
-            /* Path to directory where will be saved files with logs until inter-logger sends 
-             * the content.
-             * Example: ctx.setPrefix("/home/paja6/tmp/dglog." + jobid.getUnique());
-             */
-            ctx.setPrefix(args[7]);
-            System.out.println("prefix: " + args[7]);
-
-            /* Path to unix socket.
-             * Example: ctx.setPathToSocket("/home/paja6/tmp/il.sock");
-             */
-            ctx.setPathToSocket(args[8]);
-            System.out.println("pathToSocket: " + args[8]);
-
-            /* Create new instance of the event which will be logged.
-             */
-            EventRunning running = new EventRunning();
-
-            /* Set some description for the event.
-             * Example: running.setNode("worker node");
-             */
-            running.setNode(args[9]);
-            System.out.println("node: " + args[9]);
-
-            /* And now is the context and event prepared to work.
-             * 
-             */
-            ctx.log(running);
-        }
-    }
-}
diff --git a/org.glite.lb.client-java/src/org/glite/lb/ProducerTestLL.java b/org.glite.lb.client-java/src/org/glite/lb/ProducerTestLL.java
deleted file mode 100644 (file)
index d5d600c..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-package org.glite.lb;
-
-import java.util.Random;
-import org.glite.jobid.Jobid;
-
-/**
- * This class shows how to work with ContextIL.
- * 
- * @author Pavel Piskac
- */
-public class ProducerTestLL {
-
-    public static void main(String[] args) {
-
-        if (args.length != 12) {
-            System.out.println("How to use test class:\n" +
-                    "you have to set 13 arguments in this order, if the choice is optional \"\" or text has to be set:\n" +
-                    "1. jobid in format \"https://somewhere:port/unique_part\" (required)\n" +
-                    "2. source, enum constant from class Sources, determines which part of sequence code will be increased (required)\n" +
-                    "3. flag (required)\n" +
-                    "4. host name, if it is \"\" then is set name of the computer where is test class running (optional)\n" +
-                    "5. user name (required)\n" +
-                    "6. srcInstace (optional)\n" +
-                    "7. connection timeout (optional)\n" +
-                    "8. proxy server address (required)\n" +
-                    "9. proxy server port, default value is 9002 (optional)\n" +
-                    "10. path to user's certificate (required)\n" + 
-                    "11. path to directory where will be saved files with logs until inter-logger sends the content.");
-        } else {
-            /* Create new instance of jobid, you can use other constructors too (see org.glite.jobid.api_java.Jobid.java) 
-             * Examples:
-             * Jobid jobid = new Jobid("https://skurut68-2.cesnet.cz:9000/paja6_test2");
-             * Jobid jobid = new Jobid("https://skurut68-2.cesnet.cz", 9000, "paja6_test2");
-             * Jobid jobid = new Jobid("https://skurut68-2.cesnet.cz", 9000); //unique part is automatically generated
-             * Jobid jobid = new Jobid();
-             * jobid.setBkserver("https://skurut68-2.cesnet.cz");
-             * jobid.setPort(9000);
-             * jobid.setUnique("paja6_testProxy3");
-             */
-            Jobid jobid = new Jobid(args[0]);
-            System.out.println("jobid: " + args[0]);
-
-            /* Create sequence code
-             * Example:
-             * SeqCode seqCode = new SeqCode();
-             * Insert sequence number in format 
-             * UI=XXXXXX:NS=XXXXXXXXXX:WM=XXXXXX:BH=XXXXXXXXXX:JSS=XXXXXX:LM=XXXXXX:LRMS=XXXXXX:APP=XXXXXX:LBS=XXXXXX
-             * where X is 0-9, or you can just create new instance of SeqCode where all parts are set to 0
-             * Example:
-             * SeqCode seqCode = new SeqCode();
-             * seqCode.getSeqCodeFromString("UI=000001:NS=0000000002:WM=000003:BH=0000000004:" + 
-             * "JSS=000005:LM=000006:LRMS=000007:APP=000008:LBS=000009"); 
-             * seqCode.incrementSeqCode(Sources.USER_INTERFACE); 
-             * resulting sequence code will be 
-             * UI=000002:NS=0000000002:WM=000003:BH=0000000004:JSS=000005:LM=000006:LRMS=000007:APP=000008:LBS=000009
-             */
-            SeqCode seqCode = new SeqCode();
-
-            /* Choose type of sending a log messages (at this time is implemented only ContextIL class)
-             * You can choose from some constructors (see org.glite.lb.client_java.ContextIL class)
-             */
-            ContextLL ctx = new ContextLL();
-
-            /* Id of the message is some random unique number. 
-             * This value will be ceplaced by value from proxy.
-             */
-            ctx.setId(new Random().nextInt(99999999));
-
-            /* Source indicates source of the message, it is constant from org.glite.lb.client_java.Sources class
-             * and determines which part of sequence number will be increased.
-             * Example: ctx.setSource(Sources.EDG_WLL_SOURCE_LRMS);
-             * In this case we have to use method which converts args[2] to Sources. In real environment it will
-             * not be used.
-             */
-            ctx.setSource(new Integer(args[1]));
-            System.out.println("source: " + args[1]);
-
-            /* Flag.
-             * Example: ctx.setFlag(0);
-             */
-            ctx.setFlag(new Integer(args[2]));
-            System.out.println("flag: " + args[2]);
-
-            /* Name of the computer where is locallogger running
-             * Example: ctx.setHost("pelargir.ics.muni.cz");
-             */
-            ctx.setHost(args[3]);
-            System.out.println("host: " + args[3]);
-
-            /* Name of the user who owns the job, this attribute will be replaced
-             * by value get from certificate.
-             * Example: ctx.setUser("Pavel Piskac");
-             */
-            ctx.setUser(args[4]);
-            System.out.println("user: " + args[4]);
-
-            /* TODO co to vlastne znamena?
-             * Mostly "" is set
-             * Example: ctx.setSrcInstance("");
-             */
-            ctx.setSrcInstance(args[5]);
-            System.out.println("srcInstance: " + args[5]);
-
-            /* Set the jobid for the context.
-             */
-            ctx.setJobid(jobid);
-
-            /* Set the jobid for the context.
-             */
-            ctx.setSeqCode(seqCode);
-
-            /* Timeout in seconds for the connection while sending the message via unix socket.
-             * Default value is 3 but you can change it.
-             */
-            ctx.setTimeout(new Integer(args[6]));
-            System.out.println("timeout: " + args[6]);
-
-            /* Address to proxy.
-             * Example:
-             * ctx.setAddress("147.251.3.62");
-             */
-            ctx.setAddress(args[7]);
-            System.out.println("address: " + args[7]);
-
-            /* Proxy server port.
-             * Example:
-             * ctx.setPort(9002);
-             */
-            ctx.setPort(new Integer(args[8]));
-            System.out.println("port: " + args[8]);
-
-            /* Path to user's certificate. Only *.ks and *.p12 certificates are allowed.
-             * Example:
-             * ctx.setPathToCertificate("/home/paja6/myCertificate.p12");
-             */
-            ctx.setPathToCertificate(args[9]);
-            System.out.println("pathToCertificate: " + args[9]);
-
-            /* Path to directory where will be saved files with logs until inter-logger sends 
-             * the content.
-             * Example: ctx.setPrefix("/home/paja6/tmp/dglog." + jobid.getUnique());
-             */
-            ctx.setPrefix(args[10]);
-            System.out.println("prefix: " + args[10]);
-
-            /* Create new instance of the event which will be logged.
-             */
-            EventRunning running = new EventRunning();
-
-            /* Set some description for the event.
-             * Example: running.setNode("worker node");
-             */
-            running.setNode(args[11]);
-            System.out.println("node: " + args[11]);
-
-            /* And now is the context and event prepared to work.
-             * 
-             */
-            ctx.log(running);
-        }
-    }
-}
diff --git a/org.glite.lb.client-java/src/org/glite/lb/SSL.java b/org.glite.lb.client-java/src/org/glite/lb/SSL.java
deleted file mode 100644 (file)
index f185c6c..0000000
+++ /dev/null
@@ -1,239 +0,0 @@
-package org.glite.lb;
-
-import javax.net.ssl.*;
-import java.net.SocketException;
-import java.io.*;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.security.*;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateFactory;
-import java.security.cert.X509Certificate;
-import java.util.Enumeration;
-import org.globus.cog.security.cert.request.BouncyCastleOpenSSLKey;
-import org.globus.gsi.GlobusCredential;
-import org.globus.gsi.GlobusCredentialException;
-import org.gridforum.jgss.ExtendedGSSCredential;
-import org.gridforum.jgss.ExtendedGSSManager;
-import org.ietf.jgss.GSSCredential;
-import org.ietf.jgss.GSSException;
-
-public class SSL {
-
-    static final String proxyProp = "X509UserProxy";
-
-    /**
-     * Implementation of abstract class X509KeyManager. 
-     * It is used to manage X509 certificates which are used to authenticate
-     * the local side of a secure socket.
-     */
-    static class MyX509KeyManager implements X509KeyManager {
-
-        private X509Certificate[] certchain;
-        private PrivateKey key;
-
-        public MyX509KeyManager(Certificate[] cchain, PrivateKey key) {
-            this.certchain = new X509Certificate[cchain.length];
-           System.arraycopy(cchain, 0, this.certchain, 0, cchain.length); 
-            this.key = key;
-        }
-
-        public String chooseClientAlias(String[] keyType, Principal[] issuers, Socket
-socket) {
-/*
-            System.out.println("MyX509KeyManager.chooseClientAlias()");
-            for (int i = 0; i < keyType.length; i++) {
-                System.out.println("MyX509KeyManager.chooseClientAlias() keyType[" + i +
-"]=" + keyType[i]);
-            }
-            for (int i = 0; i < issuers.length; i++) {
-                System.out.println("MyX509KeyManager.chooseClientAlias() issuers[" + i +
-"]=" + issuers[i]);
-            }
-*/
-            return "";
-        }
-
-        public String chooseServerAlias(String keyType, Principal[] issuers, Socket
-socket) {
-/*
-            System.out.println("MyX509KeyManager.chooseServerAlias(" + keyType + ")");
-
-               if (issuers != null) for (int i=0; i<issuers.length; i++) 
-                       System.out.println("    " + issuers[i]);
-*/
-       
-               return "";
-        }
-
-        public X509Certificate[] getCertificateChain(String alias) {
-//            System.out.println("MyX509KeyManager.getCertificateChain(" + alias + ")");
-            return certchain;
-        }
-
-        public String[] getClientAliases(String keyType, Principal[] issuers) {
-//            System.out.println("MyX509KeyManager.getClientAliases(" + keyType + ")");
-            return null;
-        }
-
-        public PrivateKey getPrivateKey(String alias) {
-//            System.out.println("MyX509KeyManager.getPrivateKey(" + alias + ")");
-            return key;
-        }
-
-        public String[] getServerAliases(String keyType, Principal[] issuers) {
-//            System.out.println("MyX509KeyManager.getServerAliases(" + keyType + ")");
-            return null;
-        }
-    }
-
-    /**
-     * Implementation of abstract class X509TrustManager.
-     * It is used to authenticate the remote side of a secure socket.
-     */
-    static class MyX509TrustManager implements X509TrustManager {
-
-        public X509Certificate[] getAcceptedIssuers() {
-            return null;
-        }
-
-        public void checkClientTrusted(X509Certificate[] certs, String authType) {
-            //System.out.println("X509TrustManager.checkClientTrusted(certs["+certs.length+"],"+authType+")");
-        }
-
-        public void checkServerTrusted(X509Certificate[] certs, String authType) throws
-                CertificateException {
-            //System.out.println("----X509TrustManager.checkServerTrusted-----");
-            //System.out.println("number of certs: "+certs.length+", authType="+authType);
-            //for(int i=0;i<certs.length;i++) {
-            //    System.out.println("cert["+i+"]="+certs[i].getSubjectDN());
-            //}
-            //System.out.println("--------------------------------------------");
-        }
-    }
-
-    SSLContext sctx;
-    SSLSocket client;
-    SSLServerSocket server;
-    SSLSession sess;
-    String proxy;
-
-    void init_ctx() throws KeyStoreException,NoSuchAlgorithmException,KeyManagementException {
-           if (sctx == null) {
-
-               if (proxy == null) proxy = System.getProperty(proxyProp);
-
-               TrustManager[] trustAllCerts = new TrustManager[]{new MyX509TrustManager()};
-                       X509KeyManager[] myKeyManager = createX509KeyManager(proxy);
-                    
-                       if (myKeyManager == null) {
-                       throw new NullPointerException("myKeyManager is null");
-               }
-
-               sctx = SSLContext.getInstance("SSLv3");
-               sctx.init(myKeyManager, trustAllCerts, null);
-           }
-    }
-
-    public void setProxy(String p) {
-           proxy = p;
-    }
-
-    public Socket connect(String host,int port,int timeout) throws KeyStoreException,NoSuchAlgorithmException,KeyManagementException,SocketException,IOException {
-
-           init_ctx();
-           
-           client = (SSLSocket) sctx.getSocketFactory().createSocket();
-
-            client.setEnabledProtocols(new String[]{"SSLv3"});
-            client.setUseClientMode(true);
-            client.setSoTimeout(timeout); //read timeout
-
-            client.connect(new InetSocketAddress(host, port), timeout); //connect timeout
-            client.startHandshake();
-
-            sess = client.getSession();
-            if (sess == null) {
-                throw new NullPointerException("null session");
-            }
-
-           return client;
-           //return new PrintStream(client.getOutputStream(),false);
-    }
-
-    public Socket accept(int port,int timeout) 
-           throws KeyStoreException,IOException,SocketException,NoSuchAlgorithmException,KeyManagementException
-    {
-
-       init_ctx();
-
-       server = (SSLServerSocket) sctx.getServerSocketFactory().createServerSocket();
-
-       server.setEnabledProtocols(new String[]{"SSLv3"});
-       server.setSoTimeout(timeout); 
-
-       server.bind(new InetSocketAddress(port));
-
-       SSLSocket conn = (SSLSocket) server.accept();
-
-       return conn;
-    }
-
-    public void close() throws IOException,SocketException {
-           client.close();
-    }
-
-    /**
-     * This methods reads user's certificate
-     * 
-     * @param ksfile path to certificate
-     * @return instance of KeyStore with certificate
-     * @throws java.security.KeyStoreException
-     * @throws java.security.cert.CertificateException
-     * @throws java.security.NoSuchAlgorithmException
-     * @throws java.io.IOException
-     */
-    X509KeyManager[] createX509KeyManager(String ksfile) throws KeyStoreException {
-
-        if (ksfile.endsWith(".pem") || !ksfile.contains(".")) {
-            return readPEM(ksfile);
-        }
-
-        throw new KeyStoreException("Unknown key store");
-    }
-
-    X509KeyManager[] readPEM(String ksfile) {
-        BufferedReader br = null;
-        BufferedInputStream pemFile = null;
-        ByteArrayInputStream bais = null;
-
-        X509KeyManager[] myX509KeyManager = null;
-        
-       try {
-            // read in the credential data
-            File f = new File(ksfile);
-            pemFile = new BufferedInputStream(new FileInputStream(f));
-            byte [] data = new byte[(int)f.length()];
-            pemFile.read(data);
-            
-            GlobusCredential gc = new GlobusCredential(ksfile);
-            Certificate[] cert = gc.getCertificateChain();
-
-            PrivateKey privateKey = gc.getPrivateKey();
-            myX509KeyManager = new X509KeyManager[]{new MyX509KeyManager(cert, privateKey)};
-        } catch (IOException ex) {
-            System.err.println(ex);
-        } catch (GlobusCredentialException ex) {
-            System.err.println(ex);
-        } finally {
-            try {
-                pemFile.close();
-            } catch (IOException ex) {
-                System.err.println(ex);
-            }
-        }
-
-        return myX509KeyManager;
-    }
-}
diff --git a/org.glite.lb.client-java/src/org/glite/lb/SSLSend.java b/org.glite.lb.client-java/src/org/glite/lb/SSLSend.java
deleted file mode 100644 (file)
index b687762..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.glite.lb;
-
-import java.io.IOException;
-import java.io.PrintStream;
-import java.security.*;
-import java.net.Socket;
-
-/**
- * This class opens secure connection using SSLv3 and then sends message to set
- * address.
- * 
- * @author Pavel Piskac
- */
-public class SSLSend {
-
-    private static final String EDG_WLL_LOG_SOCKET_HEADER = "DGLOG";
-
-    /**
-     * This method is used to send messages using a secure socket.
-     * 
-     * @param keyStoreSender path to user's certificate
-     * @param host host name
-     * @param port port number
-     * @param timeout connection timeout
-     * @param message message which will be send
-     */
-    public void send(String keyStoreSender, String host,
-            int port, int timeout, String message) 
-    throws KeyStoreException,IOException,NoSuchAlgorithmException,KeyManagementException
-    {
-
-       SSL lbsock = new SSL();
-
-       lbsock.setProxy(keyStoreSender);
-       Socket sock = lbsock.connect(host,port,timeout);
-       PrintStream s = new PrintStream(sock.getOutputStream(),false);
-
-        s.print(EDG_WLL_LOG_SOCKET_HEADER);
-
-        message = message.replaceFirst("DG.LLLID=[0-9]* ", "");
-        message = message.replaceFirst("DG.USER=\\x22[a-zA-Z ]*\\x22 ", "");
-
-        int messageSize = message.length() + 2;
-        byte revertedInt[] = new byte[4];
-        revertedInt[0] = (byte) (messageSize % 256);
-        messageSize >>= 8;
-        revertedInt[1] = (byte) (messageSize % 256);
-        messageSize >>= 8;
-        revertedInt[2] = (byte) (messageSize % 256);
-        messageSize >>= 8;
-        revertedInt[3] = (byte) (messageSize);
-
-        s.write(revertedInt,0,4);
-       s.print(message + '\n' + '\0');
-       s.flush();
-       s.close();
-    }
-
-}
diff --git a/org.glite.lb.client-java/src/org/glite/lb/SeqCode.java b/org.glite.lb.client-java/src/org/glite/lb/SeqCode.java
deleted file mode 100644 (file)
index 06b1920..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-package org.glite.lb;
-
-/**
- * This class represents sequence code.
- * 
- * @author Pavel Piskac (173297@mail.muni.cz)
- * @version 9. 4. 2008
- */
-public class SeqCode {
-    
-    private int[] seqCode = {0, 0, 0, 0, 0, 0, 0, 0, 0};
-    
-    /**
-     * Empty constructor which creates new instance of SeqCode with all values
-     * equal 0
-     */
-    public SeqCode() {
-    }
-    
-    /**
-     * Constructor which creates new instance of SeqCode with values set by user
-     * in input attribute
-     * 
-     * @param seqCodeString
-     */
-    public SeqCode(String seqCodeString) {
-        getSeqCodeFromString(seqCodeString);
-    }
-
-    /**
-     * This method increments one specific part of sequence code given by part attribute
-     * 
-     * @param part part of sequence number which will be increased
-     */
-    public void incrementSeqCode(int part) {
-        if (part <= -1 || part >= Sources.EDG_WLL_SOURCE_LB_SERVER) {
-            throw new IllegalArgumentException("SeqCode part");
-        }
-        
-        seqCode[part-1]++;
-    }
-    
-    /**
-     * Converts string representation of sequence code to format which is used
-     * in this class.
-     * Insert sequence codes in format:
-     * UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000:LBS=000000
-     * @param seqCodeString
-     */
-    public void getSeqCodeFromString(String seqCodeString) {
-        
-        if (!seqCodeString.matches("UI=\\d{1,}:NS=\\d{1,}:WM=\\d{1,}:BH=\\d{1,}:" +
-                "JSS=\\d{1,}:LM=\\d{1,}:LRMS=\\d{1,}:APP=\\d{1,}:LBS=\\d{1,}")) {
-            throw new IllegalArgumentException("this is not correct sequence code");
-        }
-        
-        int currentPosition = 0;
-        int equalsPosition = 0;
-        int colonPosition = 0;
-        for (int i = 0; i <= 8; i++) {
-            equalsPosition = seqCodeString.indexOf('=', currentPosition);
-            if (i == 8) {
-                colonPosition = seqCodeString.length();
-            } else {
-                colonPosition = seqCodeString.indexOf(':', currentPosition);
-            }
-            seqCode[i] = (new Integer(seqCodeString.substring(equalsPosition+1, colonPosition))).intValue();
-            currentPosition = colonPosition + 1;
-        }
-        
-    }
-    
-    public String toString() {        
-        String tmp = Integer.toString(seqCode[0]);    
-        String output = "UI=";
-        output += "000000".substring(0, 6 - tmp.length ()) + tmp;
-        output += ":";
-        output += "NS=";
-        tmp = Integer.toString(seqCode[1]);
-        output += "0000000000".substring(0, 10 - tmp.length ()) + tmp;
-        output += ":";
-        output += "WM=";
-        tmp = Integer.toString(seqCode[2]);
-        output += "0000000000".substring(0, 6 - tmp.length ()) + tmp;
-        output += ":";
-        output += "BH=";
-        tmp = Integer.toString(seqCode[3]);
-        output += "0000000000".substring(0, 10 - tmp.length ()) + tmp;
-        output += ":";
-        output += "JSS=";
-        tmp = Integer.toString(seqCode[4]);
-        output += "0000000000".substring(0, 6 - tmp.length ()) + tmp;
-        output += ":";
-        output += "LM=";
-        tmp = Integer.toString(seqCode[5]);
-        output += "0000000000".substring(0, 6 - tmp.length ()) + tmp;
-        output += ":";
-        output += "LMRS=";
-        tmp = Integer.toString(seqCode[6]);
-        output += "0000000000".substring(0, 6 - tmp.length ()) + tmp;
-        output += ":";
-        output += "APP=";
-        tmp = Integer.toString(seqCode[7]);
-        output += "0000000000".substring(0, 6 - tmp.length ()) + tmp;
-        output += ":";
-        output += "LBS=";
-        tmp = Integer.toString(seqCode[8]);
-        output += "0000000000".substring(0, 6 - tmp.length ()) + tmp;
-        return output;
-    }
-}
diff --git a/org.glite.lb.client-java/src/org/glite/lb/Sources.java b/org.glite.lb.client-java/src/org/glite/lb/Sources.java
deleted file mode 100644 (file)
index c4e7ba0..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.glite.lb;
-
-/**
- * Enum which represents type if sources.
- * 
- * @author Pavel Piskac (173297@mail.muni.cz)
- */
-public class Sources {
-    public static final int EDG_WLL_SOURCE_NONE = 0;            /* uninitialized value */
-    public static final int EDG_WLL_SOURCE_USER_INTERFACE = 1;
-    public static final int EDG_WLL_SOURCE_NETWORK_SERVER = 2;
-    public static final int EDG_WLL_SOURCE_WORKLOAD_MANAGER = 3;
-    public static final int EDG_WLL_SOURCE_BIG_HELPER = 4;
-    public static final int EDG_WLL_SOURCE_JOB_SUBMISSION = 5;
-    public static final int EDG_WLL_SOURCE_LOG_MONITOR = 6;
-    public static final int EDG_WLL_SOURCE_LRMS = 7;
-    public static final int EDG_WLL_SOURCE_APPLICATION = 8;
-    public static final int EDG_WLL_SOURCE_LB_SERVER = 9;
-    
-    public int source;
-    
-    public Sources() {
-       this.source = 0;
-    }
-    
-    public Sources(int source) {
-       this.source = source;
-    }
-}
diff --git a/org.glite.lb.client-java/src_c/Makefile b/org.glite.lb.client-java/src_c/Makefile
deleted file mode 100755 (executable)
index 4270cbf..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-CC=gcc
-PREFIX=${HOME}/tmp
-PATH_TO_JAVA=${JAVA_HOME}
-
-LIB=libglite_lb_sendviasocket.la
-OBJ=send_via_socket.lo
-
-compile: ${LIB}
-
-${LIB}: ${OBJ}
-       libtool --mode=link ${CC} -rpath ${PREFIX}/lib -o $@ ${OBJ}
-
-%.lo: %.c
-       libtool --mode=compile ${CC} -I${PATH_TO_JAVA}/include -I${PATH_TO_JAVA}/include/linux -c $<
-
-install: compile
-       -mkdir -p ${PREFIX}/lib
-       libtool --mode=install install -m 755 ${LIB} ${PREFIX}/lib
diff --git a/org.glite.lb.client-java/src_c/send_via_proxy.c b/org.glite.lb.client-java/src_c/send_via_proxy.c
deleted file mode 100755 (executable)
index 4894488..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-#include <jni.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <pwd.h>
-#include <sys/un.h>
-#include <stdio.h>
-#include <math.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <errno.h>
-
-/**
- *----------------------------------------------------------------------
- * Open a GSS connection to local-logger, send already formatted ULM string  
- *   and get answer back from local-logger
- * \brief connect to local-logger, send message and get answer back
- * \param[in,out] ctx          context to work with,
- * \param[in] logline          formated ULM string
- *----------------------------------------------------------------------
- */
-int edg_wll_DoLogEvent(
-       edg_wll_Context ctx,
-       edg_wll_LogLine logline)
-{
-       int     ret = 0, answer = EAGAIN;
-        int    conn;
-
-        edg_wll_ResetError(ctx);
-        memset(&conn,0,sizeof(conn));
-
-       /* connect to local-logger */
-       if ((ret = edg_wll_log_connect(ctx,&conn))) {
-               fprintf(stderr, "edg_wll_log_connect error");
-               goto edg_wll_DoLogEvent_end;
-       }
-
-       /* send message */
-       if ((ret = edg_wll_log_write(ctx,conn,logline)) == -1) {
-               fprintf(stderr, "edg_wll_log_write error");
-               goto edg_wll_DoLogEvent_end;
-       }
-
-       /* get answer */
-       if ((ret = edg_wll_log_read(ctx,conn)) == -1) {
-               fprintf(stderr, "edg_wll_log_read error");
-       } else {
-               answer = edg_wll_Error(ctx, NULL, NULL);
-       }
-
-edg_wll_DoLogEvent_end:
-       if (ret) edg_wll_log_close(ctx,conn);
-
-       return 0;
-}
-
-/**
- *----------------------------------------------------------------------
- * connect to locallogger
- *----------------------------------------------------------------------
- */
-int edg_wll_log_connect(edg_wll_Context ctx, int *conn) 
-{
-       int     ret, answer=0, index;
-       char    *my_subject_name = NULL;
-       edg_wll_GssStatus       gss_stat;
-
-       //edg_wll_ResetError(ctx);
-       //edg_wll_poolLock(); 
-
-       /* check if connection already in pool */
-       if ( (index = ConnectionIndex(ctx, ctx->p_destination, ctx->p_dest_port)) == -1 ) {
-               if (ctx->connections->connOpened == ctx->connections->poolSize)
-                       if (ReleaseConnection(ctx, NULL, 0)) 
-                               goto edg_wll_log_connect_end;
-               index = AddConnection(ctx, ctx->p_destination, ctx->p_dest_port);
-               if (index < 0) {
-                    edg_wll_SetError(ctx,EAGAIN,"connection pool size exceeded");
-                   goto edg_wll_log_connect_end;
-               }
-#if 0
-       /* acquire gss credentials */
-       ret = edg_wll_gss_acquire_cred_gsi(
-             ctx->p_proxy_filename ? ctx->p_proxy_filename : ctx->p_cert_filename,
-             ctx->p_proxy_filename ? ctx->p_proxy_filename : ctx->p_key_filename,
-             &ctx->connections->connPool[index].gsiCred, &my_subject_name, &gss_stat);
-       /* give up if unable to acquire prescribed credentials, otherwise go on anonymously */
-       if (ret && ctx->p_proxy_filename) {
-               edg_wll_SetErrorGss(ctx, "edg_wll_gss_acquire_cred_gsi(): failed to load GSI credentials", &gss_stat);
-               goto edg_wll_log_connect_err;
-       }
-       /* gss_connect */
-       if (ctx->connections->connPool[index].gss.context == GSS_C_NO_CONTEXT) {
-
-       /* acquire gss credentials */
-       ret = edg_wll_gss_acquire_cred_gsi(
-             ctx->p_proxy_filename ? ctx->p_proxy_filename : ctx->p_cert_filename,
-             ctx->p_proxy_filename ? ctx->p_proxy_filename : ctx->p_key_filename,
-             &ctx->connections->connPool[index].gsiCred, &my_subject_name, &gss_stat);
-       /* give up if unable to acquire prescribed credentials, otherwise go on anonymously */
-       if (ret && ctx->p_proxy_filename) {
-               edg_wll_SetErrorGss(ctx, "edg_wll_gss_acquire_cred_gsi(): failed to load GSI credentials", &gss_stat);
-               goto edg_wll_log_connect_err;
-       }
-               if ((answer = edg_wll_gss_connect(
-                               ctx->connections->connPool[index].gsiCred,
-                               ctx->connections->connPool[index].peerName,
-                               ctx->connections->connPool[index].peerPort,
-                               &ctx->p_tmp_timeout, 
-                               &ctx->connections->connPool[index].gss,
-                               &gss_stat)) < 0) {
-                       answer = handle_gss_failures(ctx,answer,&gss_stat,"edg_wll_gss_connect()");
-                       goto edg_wll_log_connect_err;
-               }
-               goto edg_wll_log_connect_end;
-       } else goto edg_wll_log_connect_end;
-
-edg_wll_log_connect_err:
-       if (index >= 0) CloseConnection(ctx, &index);
-       index = -1;
-
-edg_wll_log_connect_end:
-       if (index >= 0) edg_wll_connectionTryLock(ctx, index);
-       if (my_subject_name) free(my_subject_name);
-
-       edg_wll_poolUnlock();
-
-       *conn = index;
-       return answer;
-}
-
-/**
- *----------------------------------------------------------------------
- * close connection to locallogger
- *----------------------------------------------------------------------
- */
-int edg_wll_log_close(edg_wll_Context ctx, int conn) 
-{
-       int ret = 0;
-
-       if (conn == -1) return 0;
-       ret = CloseConnection(ctx,&conn);
-       edg_wll_connectionUnlock(ctx,conn);
-       return ret;
-}
-
-/**
- *----------------------------------------------------------------------
- * write/send to locallogger
- *----------------------------------------------------------------------
- */
-int edg_wll_log_write(edg_wll_Context ctx, int conn, edg_wll_LogLine logline)
-{
-       char    header[EDG_WLL_LOG_SOCKET_HEADER_LENGTH+1];
-       int     err;
-       int     answer;
-       size_t  count,sent;
-       int     size;
-       u_int8_t size_end[4];
-       edg_wll_GssStatus gss_code;
-
-       errno = err = answer = count = sent = 0;
-       size = strlen(logline)+1;
-       size_end[0] = size & 0xff; size >>= 8;
-       size_end[1] = size & 0xff; size >>= 8;
-       size_end[2] = size & 0xff; size >>= 8;
-       size_end[3] = size;
-       size = strlen(logline)+1;
-
-       edg_wll_ResetError(ctx);
-
-       sprintf(header,"%s",EDG_WLL_LOG_SOCKET_HEADER);
-       header[EDG_WLL_LOG_SOCKET_HEADER_LENGTH]='\0';
-       if ((err = edg_wll_gss_write_full(&ctx->connections->connPool[conn].gss, header, EDG_WLL_LOG_SOCKET_HEADER_LENGTH, &ctx->p_tmp_timeout, &count, &gss_code)) < 0) {
-               switch (answer = handle_gss_failures(ctx,err,&gss_code,"edg_wll_gss_write_full()")) {
-               case ENOTCONN:
-                       edg_wll_log_close(ctx,conn);
-                       if (edg_wll_log_connect(ctx,&conn) || 
-                           edg_wll_gss_write_full(&ctx->connections->connPool[conn].gss, header, EDG_WLL_LOG_SOCKET_HEADER_LENGTH, &ctx->p_tmp_timeout, &count, &gss_code) < 0) {
-                               edg_wll_UpdateError(ctx,answer,"edg_wll_log_write(): error sending header");
-                               return -1;
-                       }
-                       break;
-               case 0:
-                       break;
-               default:
-                       edg_wll_UpdateError(ctx,answer,"edg_wll_log_write(): error sending header");
-                       return -1;
-               }
-       }
-       sent += count;
-
-       count = 0;
-       if ((err = edg_wll_gss_write_full(&ctx->connections->connPool[conn].gss, size_end, 4, &ctx->p_tmp_timeout, &count, &gss_code)) < 0) {
-                switch (answer = handle_gss_failures(ctx,err,&gss_code,"edg_wll_gss_write_full()")) {
-               case ENOTCONN:
-                       edg_wll_log_close(ctx,conn);
-                       if (edg_wll_log_connect(ctx,&conn) ||
-                           edg_wll_gss_write_full(&ctx->connections->connPool[conn].gss, size_end, 4, &ctx->p_tmp_timeout, &count, &gss_code) < 0) {
-                               edg_wll_UpdateError(ctx,answer,"edg_wll_log_write(): error sending message size");
-                               return -1;
-                       }
-                       break;
-               case 0:
-                       break;
-               default:
-                       edg_wll_UpdateError(ctx,answer,"edg_wll_log_write(): error sending message size");
-                       return -1;
-               
-               }
-        }
-       sent += count;
-
-       count = 0;
-       if (( err = edg_wll_gss_write_full(&ctx->connections->connPool[conn].gss, logline, size, &ctx->p_tmp_timeout, &count, &gss_code)) < 0) {
-               switch (answer = handle_gss_failures(ctx,err,&gss_code,"edg_wll_gss_write_full()")) {
-               case ENOTCONN:
-                       edg_wll_log_close(ctx,conn);
-                       if (edg_wll_log_connect(ctx,&conn) ||
-                           edg_wll_gss_write_full(&ctx->connections->connPool[conn].gss, logline, size, &ctx->p_tmp_timeout, &count, &gss_code) < 0) {
-                               edg_wll_UpdateError(ctx,answer,"edg_wll_log_write(): error sending message");
-                               return -1;
-                       }
-                        break;
-                case 0:
-                        break;
-                default:
-                       edg_wll_UpdateError(ctx,answer,"edg_wll_log_write(): error sending message");
-                       return -1;
-               }
-       }
-       sent += count;
-
-       return sent;
-}
-
-/**
- *----------------------------------------------------------------------
- * read/receive from locallogger
- *----------------------------------------------------------------------
- */
-int edg_wll_log_read(edg_wll_Context ctx, int conn)
-{
-       int     err;
-       int     answer;
-       u_int8_t answer_end[4];
-       size_t  count;
-       edg_wll_GssStatus gss_code;
-
-       errno = err = answer = count = 0;
-
-       edg_wll_ResetError(ctx);
-
-       count = 0;
-       if ((err = edg_wll_gss_read_full(&ctx->connections->connPool[conn].gss, answer_end, 4, &ctx->p_tmp_timeout, &count, &gss_code)) < 0 ) {
-               switch (answer = handle_gss_failures(ctx,err,&gss_code,"edg_wll_gss_read_full()")) {
-               case ENOTCONN:
-                        edg_wll_log_close(ctx,conn);
-                        if (edg_wll_log_connect(ctx,&conn) ||
-                           edg_wll_gss_read_full(&ctx->connections->connPool[conn].gss, answer_end, 4, &ctx->p_tmp_timeout, &count, &gss_code) < 0 ) {
-                               edg_wll_UpdateError(ctx,answer,"edg_wll_log_read(): error reading answer from local-logger");
-                               return -1;
-                       }
-                       break;
-               case 0:
-                       break;
-               default:
-                       edg_wll_UpdateError(ctx,answer,"edg_wll_log_read(): error reading answer from local-logger");
-                       return -1;
-               }
-       } 
-       answer = answer_end[3]; answer <<=8;
-       answer |= answer_end[2]; answer <<=8;
-       answer |= answer_end[1]; answer <<=8;
-       answer |= answer_end[0];
-       edg_wll_SetError(ctx,answer,"edg_wll_log_read(): answer read from locallogger");
-
-        return count;
-}
diff --git a/org.glite.lb.client-java/src_c/send_via_socket.c b/org.glite.lb.client-java/src_c/send_via_socket.c
deleted file mode 100755 (executable)
index 4f0fc95..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-#include <jni.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <pwd.h>
-#include <sys/un.h>
-#include <stdio.h>
-#include <math.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <errno.h>
-
-#define tv_sub(a, b) {\
-       (a).tv_usec -= (b).tv_usec;\
-       (a).tv_sec -= (b).tv_sec;\
-       if ((a).tv_usec < 0) {\
-               (a).tv_sec--;\
-               (a).tv_usec += 1000000;\
-       }\
-}
-
-
-/*!
- * Write to socket
- * Needn't write entire buffer. Timeout is applicable only for non-blocking
- * connections 
- * \param sock IN: connection to work with
- * \param buf IN: buffer
- * \param bufsize IN: max size to write
- * \param timeout INOUT: max time allowed for operation, remaining time on return
- * \retval bytes written (>0) on success
- * \retval -1 on write error
- */
-static ssize_t
-edg_wll_socket_write(
-       int sock,
-       const void *buf,
-       size_t bufsize,
-       struct timeval *timeout)
-{ 
-       ssize_t len = 0;
-       fd_set fds;
-       struct timeval to, before, after;
-
-
-       if ( timeout ) {
-               memcpy(&to, timeout, sizeof to);
-               gettimeofday(&before, NULL);
-       }
-       len = write(sock, buf, bufsize);
-       if ( len <= 0  && errno == EAGAIN ) {
-               FD_ZERO(&fds);
-               FD_SET(sock,&fds);
-               if ( select(sock+1, NULL, &fds, NULL, timeout? &to: NULL) < 0 ) {
-                       len = -1;
-               } else {
-                       len = write(sock, buf, bufsize);
-               }
-       }
-       if ( timeout ) {
-               gettimeofday(&after, NULL);
-               tv_sub(after, before);
-               tv_sub(*timeout, after);
-               if ( timeout->tv_sec < 0 ) {
-                       timeout->tv_sec = 0;
-                       timeout->tv_usec = 0;
-               }
-       }
-
-       return len;
-}
-
-/*!
- * Write specified amount of data to socket
- * Attempts to call edg_wll_socket_write() untill the entire request is satisfied
- * (or times out).
- * \param sock IN: connection to work with
- * \param buf IN: buffer
- * \param bufsize IN: max size to write
- * \param timeout INOUT: max time allowed for operation, remaining time on return
- * \param total OUT: bytes actually written
- * \retval bytes written (>0) on success
- * \retval -1 on write error
- */
-static ssize_t
-edg_wll_socket_write_full(
-       int sock,
-       void *buf,
-       size_t bufsize,
-       struct timeval *timeout,
-       ssize_t *total)
-{
-       ssize_t len;
-       *total = 0;
-
-       while ( *total < bufsize ) {
-               len = edg_wll_socket_write(sock, buf+*total, bufsize-*total, timeout);
-               if (len < 0) return len;
-               *total += len;
-       }
-
-       return 0;
-}
-
-/*
- * edg_wll_log_event_send - send event to the socket
- *
- * Returns: 0 if done properly or errno
- *
- */
-/*int edg_wll_log_event_send(
-       const char *socket_path,
-       long filepos,
-       const char *msg,
-       int msg_size,
-       int conn_attempts,
-       int timeout_int)*/
-/*JNIEXPORT jint JNICALL Java_org_glite_lb_ContextIL_edg_wll_log_event_send
-   (JNIEnv *env, 
-    jobject jobj, 
-    jstring socket_path_j, 
-    jlong filepos_j, 
-    jstring msg_j, 
-    jint msg_size_j, 
-    jint conn_attempts_j, 
-    jint timeout_int_j)*/
-JNIEXPORT jint JNICALL Java_org_glite_lb_client_1java_ContextIL_sendToSocket
-   (JNIEnv *env, 
-    jobject jobj, 
-    jstring socket_path_j, 
-    jlong filepos_j, 
-    jstring msg_j, 
-    jint msg_size_j,
-    jint conn_attempts_j,
-    jint timeout_int_j)
-
-{
-       const char *socket_path = (*env)->GetStringUTFChars(env, socket_path_j, 0);
-       const char *msg = (*env)->GetStringUTFChars(env, msg_j, 0);
-       int timeout_int = (int) timeout_int_j;
-        //int timeout_int = 3;
-        long filepos = (long) filepos_j;
-        int msg_size = (int) msg_size_j; 
-        int conn_attempts = (int) conn_attempts_j; 
-        //int conn_attempts = 3;
-        struct timeval timeout;
-        timeout.tv_sec = timeout_int;
-       timeout.tv_usec = 0;    
-       struct sockaddr_un saddr;
-       int msg_sock,
-           flags,
-           conn_timeout, i;
-        ssize_t count = 0;
-
-
-       if ( (msg_sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0 ) {
-               goto event_send_end;
-       }
-
-       memset(&saddr, 0, sizeof(saddr));
-       saddr.sun_family = AF_UNIX;
-       strcpy(saddr.sun_path, socket_path);
-
-       if (   (flags = fcntl(msg_sock, F_GETFL, 0)) < 0
-               || fcntl(msg_sock, F_SETFL, flags | O_NONBLOCK) < 0 ) {
-               goto cleanup;
-       }
-
-       conn_timeout = floor(timeout.tv_sec/(conn_attempts + 1));
-       for ( i = 0; i < conn_attempts; i++) {
-               if ( connect(msg_sock, (struct sockaddr *)&saddr, sizeof(saddr)) < 0 ) {
-                       if ( errno == EISCONN ) break;
-                       else if ((errno == EAGAIN) || (errno == ETIMEDOUT)) {
-                               sleep(conn_timeout);
-                               timeout.tv_sec -= conn_timeout;
-                               continue;
-                       } else {
-                               goto cleanup;
-                       }
-               } else break;
-       }
-
-       if ( edg_wll_socket_write_full(msg_sock, &filepos, sizeof(filepos), &timeout, &count) < 0
-) {
-               goto cleanup;
-       }
-
-       if ( edg_wll_socket_write_full(msg_sock, (void *)msg, msg_size,
-&timeout, &count) < 0 ) {
-               goto cleanup;
-       }
-
-cleanup:
-       close(msg_sock); 
-
-event_send_end:
-       return 0;
-}
index fc99f0a..967e07a 100644 (file)
@@ -1,16 +1,8 @@
 glite_location:=${GLITE_LOCATION}
 glite_prefix:=${glite_location}
 
-host_cpu:=${shell uname -m}
-ifeq (${host_cpu},x86_64)
-       LDFLAGS:=-L${glite_prefix}/lib64 -L${glite_prefix}/lib
-       nothrflavour=gcc64dbg
-       thrflavour=gcc64dbgpthr
-else
-       LDFLAGS:=-L${glite_prefix}/lib
-       nothrflavour=gcc32dbg
-       thrflavour=gcc32dbgpthr
-endif
+nothrflavour=gcc32dbg
+thrflavour=gcc32dbgpthr
 
 CC:=gcc
 CXX:=g++
@@ -32,6 +24,13 @@ CFLAGS:=${DEBUG} \
 
 CXXFLAGS:=${CFLAGS}
 
+host_cpu:=${shell uname -m}
+ifeq (${host_cpu},x86_64)
+       LDFLAGS:=-L${glite_prefix}/lib64 
+else
+       LDFLAGS:=-L${glite_prefix}/lib
+endif
+
 COMPILE:=libtool --mode=compile ${CC} ${CFLAGS}
 CXXCOMPILE:=libtool --mode=compile ${CXX} ${CXXFLAGS}
 LINK:=libtool --mode=link ${CC} ${LDFLAGS} 
index 1d4f931..3e9bb2d 100644 (file)
@@ -72,7 +72,7 @@ int main(int argc, char *argv[])
 
        /*register*/
        if (edg_wll_NotifNew(ctx, (edg_wll_QueryRec const* const*)conditions, 
-           0, -1, NULL, &notif_id, &valid)) {
+           -1, NULL, &notif_id, &valid)) {
                char    *et,*ed;
 
                 edg_wll_Error(ctx,&et,&ed);
index de54b5f..c1547b0 100644 (file)
@@ -113,7 +113,7 @@ offered load.
 
 \subsubsection{Standard installation}
 
-Install and configure OS and basic services (certificates, CAs, time synchronization, software repositories) according to the \htmladdnormallink{https://twiki.cern.ch/twiki/bin/view/LCG/GenericInstallGuide320}{https://twiki.cern.ch/twiki/bin/view/LCG/GenericInstallGuide320}. Then glite-LB metapackage from appropriate gLite software repository should be installed.
+Install and configure OS and basic services (certificates, CAs, time synchronization, software repositories) according to the \htmladdnormallink{https://twiki.cern.ch/twiki/bin/view/LCG/GenericInstallGuide310}{https://twiki.cern.ch/twiki/bin/view/LCG/GenericInstallGuide310}. Then glite-LB metapackage from appropriate gLite software repository should be installed.
 
 YAIM configuration for \emph{glite-LB} node type 
 (\texttt{/opt/glite/yaim/bin/yaim -c -s site-info.def -n glite-LB}) 
@@ -133,109 +133,37 @@ export data are written for use by lgcmon/R-GMA
 \item \texttt{GLITE\_LB\_RTM\_DN} -- DN using to get notifications from \LB server\\
 (default: \texttt{heppc24.hep.ph.ic.ac.uk} machine certificate)
 \item \texttt{GLITE\_LB\_SUPER\_USERS} -- additional super-users (default: empty)
-\item \texttt{GLITE\_LB\_TYPE} -- type of the \LB service: server, proxy, both (default: server)
 \end{itemize}
 
 In addition to those, YAIM LB module uses following parameters:
 \texttt{INSTALL\_ROOT}, \texttt{GLITE\_LOCATION\_VAR}, \texttt{GLITE\_USER}, \texttt{GLITE\_HOME\_DIR},\texttt{SITE\_EMAIL}.
 
-\subsubsection{Migration to a different OS version}
-\label{inst:OSmigration}
-Migration of a LB server to different machine is possible using
-following simple procedure (just file copy of the MySQL database). We
-tested the migration from SL4 32bit (mysql 4.1.22-2) to SL5 64bit
-(mysql 5.0.45-7).
+\subsubsection{Migration from previous versions}
 
-Steps:
-\begin{itemize}
-\item \emph{Prepare a new machine.} The new machine must get the same hostname 
- as the old machine had. It is a part of job ids stored in the database.
-\item \emph{Move data.} Just stop the MySQL server and move
- \verb'/var/lib/mysql' data directory directly to the target machine.
-\item \emph{(optional) Restore file contexts.} You may need to restore file 
- contexts in case of enabled SELinux. For example, commands on the target 
- machine:
- \begin{verbatim}
- service mysqld stop
- cd /var/lib
- tar xf /tmp/lb.tar
- restorecond -R mysql
- service mysqld start
- \end{verbatim}
-\end{itemize}
+Although new LB server versions are backwards compatible with already 
+stored data (without need for conversion) usually, it is necessary to recreate
+LB database from scratch or to change its database schema at some points.
+Database schema changes are not (currently) performed automatically 
+during YAIM configuration since they take a lot time and temporary disk
+space.  
 
-\subsubsection{Migration of database to support transactions}
-Started from version 1.4.3 of the \texttt{glite-lb-server}
-package, the \LB server introduced optional use of database
-transactions for \LB database updates in order to improve their
-performace. This feature is switched on by default when underlying
-MySQL database uses transactional InnoDB tables. For new
-installations, YAIM configuration process will create transactional
-database automatically. For existing LB server database the migration 
-process is not automatically handled.
-
-Note: If you want to add transaction when migrating to \LB 2.0 skip
-this section and use \LB 2.0 migration procedure. The migration of
-database to support transactions is included in \LB 2.0 migration procedure.
-
-Steps:
+There were two such notable upgrades:
 \begin{itemize}
- \item \emph{Stop the server.} Stop both a \LB server and a MySQL
- server. Making a fresh backup copy of database is a good idea.
- \item \emph{Database conversion.} Use provided SQL script:
-  \begin{quote}
-   \begin{verbatim}
+\item Version 1.4.3 of \texttt{glite-lb-server} package. This \LB server version introduced optional use of database transactions for \LB database updates in order to improve their performace. This feature is switched on by default when underlaying MySQL database uses transactional InnoDB tables. For new installations, YAIM configuration process will create transactional database automatically. Existing databases can be converted using provided SQL command script:
+\begin{quote}
+\begin{verbatim}
 mysql -u lbserver lbserver20 \
         </opt/glite/etc/glite-lb-dbsetup-migrate2transactions.sql
-   \end{verbatim}
-  \end{quote}
- \item \emph{Start the servers.} MySQL and \LB. Check logs.
-\end{itemize}
-
-
-\subsubsection{Migration to \LB 2.0}
-The migration process of existing \LB 1.x database to the \LB 2.0 is
-not handled automatically. The database schema change is required due
-to support of merged \LB server and proxy services using single
-database, pointers to purged jobs (``zombies'') and other
-improvements.
-
-Warning: There are two types of \LB database based on the fact that
-you can have a \LB server or \LB proxy. For more information about \LB
-proxy please see \ref{inst:LBproxy}.
+\end{verbatim}
+\end{quote}
 
-Steps:
-\begin{itemize}
- \item \emph{Stop the server and upgrade to \LB 2.0.} Stop both a \LB
- server and a MySQL server. Making a fresh backup copy of database is
- a good idea. Do the upgrade to \LB 2.0, optionally you can move the
- database to new OS in this step (see \ref{inst:OSmigration}).
- \item \emph{Before migration some database tuning is
- required.} Especially parameter \texttt{innodb\_buffer\_pool\_size}
- needs to be increased, to support bigger transactions. For details
- see Section~\ref{inst:db_tuning}.
- \item \emph{Database type.} Check if you have a \LB server or a \LB
- proxy. In the following step you must properly set the switch
- \verb'-s' (server) or \verb'-p' (proxy).
- \item \emph{Database conversion.} Use provided shell script (with the proper
-  switch from previous step):
-  \begin{quote}
-  \verb'/opt/glite/etc/glite-lb-migrate_db2version20 {-s|-p}'
-  \end{quote}
- \item \emph{(Optional) Drop unnecesary index.} This operation is
-  likely to take a lot of time when applied to large database.
-  \begin{quote}
-  \verb'mysql -u lbserver lbserver20 -e "alter table events drop index host"'
-  \end{quote}
- \item \emph{(Optional) Check the \LB indexes.} You may need to add
- LastUpdateTime for monitoring services. See \ref{maintain:index}.
- \item \emph{Start the servers.} MySQL and \LB. Check logs.
+\item {\sloppy \LB version 2.0.  This version features merged \LB server and  proxy services using single database, pointers to purged jobs (``zombies'') and other improvements requiring database schema changes. Existing databases must be converted using provided shell script \verb'/opt/glite/etc/glite-lb-migrate_db2version20'. Use \verb'-s' parameter to convert database used by \LB server previously and \verb'-p' to convert database used by \LB proxy before. Optionally, unnecesary index can be dropped (this operation is likely to take a lot of time when applied to large database):
+\begin{quote}
+\verb'mysql -u lbserver lbserver20 -e "alter table events drop index host"'
+\end{quote}
+}
 \end{itemize}
 
-This migration procedure is tested in following environment: LB 1.9.x
-from RPMs SL4 32bit (mysql 4.1.22-2), LB server node, migration to SL5
-64bit (mysql 5.0.45-7) LB2.0 RPM. 
-
 %\TODO{automated conversion through YAIM ?}
 
 \subsubsection{Index configuration}
@@ -335,7 +263,7 @@ It is generally recommended to set it to aroung 75\% of RAM size
 (32bit OS/MySQL versions limit this to approx. 2GB due to address space 
 constraints).
 
-\item \texttt{innodb\_flush\_log\_at\_trx\_commit} -- frequency of flushing to disk.
+\item \texttt{innodb\_flush\_logs\_at\_trx\_commit} -- frequency of flushing to disk.
 Recommended values include:
 \begin{itemize}
 \item 1 (default) -- flush at each write transaction commit; relatively
@@ -356,9 +284,6 @@ disk separate from OS and MySQL log files (\texttt{innodb\_log\_group\_home\_dir
 \end{itemize}
 
 \subsection{\LB proxy}
-\label{inst:LBproxy}
-TODO: Describe LB Proxy migration here.
-
 
 All necessary configuration of standalone \LB proxy is done by YAIM,
 previous \LB server section applies to merged server+proxy setups (\LBnew only).
diff --git a/org.glite.lb.harvester/Makefile b/org.glite.lb.harvester/Makefile
new file mode 100644 (file)
index 0000000..63e3886
--- /dev/null
@@ -0,0 +1,81 @@
+top_srcdir=..
+stagedir=.
+package=glite-lb-harvester
+module.version=0.0.0
+PREFIX=/opt/glite
+globus_prefix=/opt/globus
+
+archlib:=lib
+thrflavour:=gcc32dbgpthr
+host_cpu:=${shell uname -m}
+ifeq (${host_cpu},x86_64) 
+        archlib:=lib64
+       thrflavour:=gcc64dbgpthr
+endif   
+
+-include Makefile.inc
+-include ../project/version.properties
+version:=${module.version}
+
+CC=gcc
+VPATH=${top_srcdir}/src
+
+GLOBUS_CPPFLAGS:=-I${globus_prefix}/include/${thrflavour}
+CPPFLAGS:=-I${stagedir}/include -D_GNU_SOURCE -D_REENTRANT ${CPPFLAGS}
+CFLAGS:=-W -Wall -g -O2 ${CFLAGS}
+LDFLAGS:=${LDFLAGS} 
+LIBS:=-L${stagedir}/${archlib} -L${stagedir}/lib \
+       -lglite_lb_common_${thrflavour} \
+       -lglite_lb_client_${thrflavour} \
+       -lpthread -lglite_security_gss_${thrflavour}
+
+ifneq ($(GLITE_LB_HARVESTER_WITH_LBU_DB),no)
+CPPFLAGS:=$(CPPFLAGS) -DWITH_LBU_DB=1
+LIBS:=$(LIBS) -lglite_lbu_db
+endif
+ifeq ($(GLITE_LB_HARVESTER_WITH_OLD_LB),yes)
+CPPFLAGS:=${GLOBUS_CPPFLAGS} $(CPPFLAGS) -DWITH_OLD_LB=1
+LIBS:=$(LIBS) -lglite_wmsutils_cjobid
+else
+LIBS:=$(LIBS) -lglite_jobid
+endif
+
+COMPILE:=libtool --mode=compile ${CC} ${CPPFLAGS} ${CFLAGS}
+LINK:=libtool --mode=link ${CC} ${LDFLAGS}
+INSTALL:=libtool --mode=install install
+
+default: all
+
+compile all: harvester
+
+check:
+
+debug: harvester-dbg
+
+doc:
+
+stage: compile
+       $(MAKE) install PREFIX=${stagedir}
+
+install: compile
+       -mkdir -p ${PREFIX}/bin ${PREFIX}/share/doc/${package}-${version}
+       ${INSTALL} -m 755 harvester ${PREFIX}/bin/glite-lb-harvester
+       ${INSTALL} -m 444 ../doc/README ${PREFIX}/share/doc/${package}-${version}
+
+clean:
+       rm -rfv *.o *.lo .libs/ harvester harvester-dbg
+       rm -rvf log.xml project/ rpmbuild/ RPMS/ tgz/
+
+harvester: harvester.o
+       ${LINK} -o $@ $+ ${LIBS}
+
+harvester-dbg: harvester-dbg.o
+       ${LINK} -o $@ $+ ${LIBS}
+
+harvester-dbg.o: harvester.c
+       ${COMPILE} -Werror -DLOG=1 -DWITH_RTM_SQL_STORAGE=1 -c $< -o $@
+
+%.o: %.c
+       ${COMPILE} -c $<
+
+.PHONY: default all compike debug check doc stage install clean
diff --git a/org.glite.lb.harvester/doc/INSTALL b/org.glite.lb.harvester/doc/INSTALL
new file mode 100644 (file)
index 0000000..f5ff9c9
--- /dev/null
@@ -0,0 +1,42 @@
+Requirements
+============
+
+1) gLite
+- client L&B libraries:
+  - glite-jobid-api-c
+  - glite-lb-common
+  - glite-lb-client
+  - glite-security-gss
+  - globus essential libraries (threaded flavour),
+    use the vesion with the external SSL, not with bundled SSL (!)
+ - glite-lbjp-common-db (build only)
+ - mysql-devel (build only)
+2) postgresql-devel
+
+
+Steps
+=====
+
+./configure
+make
+make install
+
+Use './configure --help' for the options.
+
+
+Manual way
+==========
+
+configure is simple script generating Makefile.inc. You can build harvester
+straight away by make defining the variables manually. For example with gLite
+installed in ~/glite/stage:
+
+(rm Makefile.inc)
+make stagedir=$HOME/glite/stage
+
+
+Testing
+=======
+
+Test for basic functionality covered by 'test.sh' script in sources.
+See './test.sh --help'.
diff --git a/org.glite.lb.harvester/doc/README b/org.glite.lb.harvester/doc/README
new file mode 100644 (file)
index 0000000..f1c393d
--- /dev/null
@@ -0,0 +1,81 @@
+Introduction
+============
+
+L&B Harvester gathers information about jobs from L&B servers using effective
+L&B notification mechanism. It manages notifications and keeps them in
+a persistent storage (file or database table) to reuse later on next launch.
+It takes care about refreshing notifications and queries L&B servers back when
+some notification on expires.
+
+The tool was initially written for Real Time Monitor (project at Imperial
+College in London), later was extended with messaging mechanism for WLCG.
+
+
+Requirements
+============
+
+- lastUpdateTime index on L&B servers
+- harvester identity in super users file on L&B servers
+
+
+Launch (with msg-publish sending messages)
+=========================================
+
+Harvester is sending notifications via msg-publish infrastructure. List of the
+L&B server to harvest is specified via -c option.
+
+1) with newer LB 2.0 servers:
+
+  glite-lb-harvester -c servers.txt -C certfile -K keyfile --wlcg
+
+2) with older LB servers (backward compatible but greedy notifications):
+
+  glite-lb-harvester -c servers.txt -C certfile -K keyfile --wlcg --old
+
+Custom configuration of messaging:
+       --wlcg-binary $HOME/bin/msg-publish
+       --wlcg-topic org.wlcg.usage.JobStatus2
+       --wlcg-config $HOME/etc/msg-publish.conf.wlcg
+
+
+Launch (Real Time Monitor and storing to the database)
+======================================================
+
+Harvester is using postgres database. Table 'lb20' with L&B servers to
+harvest (read-only), table 'jobs' with result job states (read/write). It's
+possible to specify L&B servers list by file instead of 'lb20' table,
+via -c option.
+
+  glite-lb-harvester -C certfile -K keyfile --pg rtm/@:rtm
+
+The connection string after '--pg' is in format:
+  USER/PASSWORD@HOST:DATABASE
+Database schema in 'test.sql'.
+
+
+Other recommended options
+=========================
+
+Use 'glite-lb-harvester --help' for additional options.
+
+For example:
+ - deamonizing and using syslog:
+       '--daemonize --pidfile /var/run/glite-lb-harvester.pid'
+ - decreasing verbosity:
+       '-d 2' (2 for errors and warnings only)
+
+
+Stop
+====
+
+In non-daemon mode CTRL-C can be used, in daemon mode using specified
+pidfile:
+
+ kill `cat /var/run/glite-lb-harvester.pid`
+
+pidfile will vanish after exit.
+
+All notifications are preserved on LB servers, and will expire later. You can
+purge them now, if they won't be needed:
+
+ glite-lb-harvester --cleanup
diff --git a/org.glite.lb.harvester/examples/test.sh b/org.glite.lb.harvester/examples/test.sh
new file mode 100755 (executable)
index 0000000..7105ee1
--- /dev/null
@@ -0,0 +1,836 @@
+#! /bin/sh
+
+
+usage() {
+cat <<EOF
+
+ ./test.sh
+
+ Testing of the L&B harvester using local daemons and databases.
+
+ Requirements:
+  - working L&B software (ideally with passed org.glite.testsuites.ctb/LB/test)
+  - mysql and postgresql databases, with sufficient access
+    pg_hba.conf content for example:
+      local all all trust all
+  - created user \$RTM_NAME (rtm by default) in postgres DB
+  - proxy certificate
+  - writable working directory with harvester built with -DRTM_SQL_STORAGE_ENABLED=1
+    (or via 'make test')
+
+ non-default configuration is possible via following env variables or
+ using ~/.glite.conf:
+   GLITE_LOCATION..................path to glite SW
+   GLOBUS_LOCATION.................path to globus SW
+   GLITE_HOST_CERT.................path to host certificate
+   GLITE_HOST_KEY..................path to host key
+   GLITE_LB_TEST_DB................L&B connection string 
+                                   (default lbserver/@localhost:lbserver20test,
+                                    autocreating the database when empty)
+   GLITE_RTM_TEST_DB...............L&B connection string, existing user with
+                                   privileges required
+                                   (default rtm/@localhost:rtmtest,
+                                    autocreating the database when empty)
+   GLITE_MYSQL_ROOT_USER...........mysql root user (default: root)
+   GLITE_MYSQL_ROOT_PASSWORD.......mysql root password (default: none)
+   GLITE_PG_ROOT_USER..............postgres root user (default: postgres)
+   GLITE_LB_TEST_SERVER_PORT.......(default 10000)
+   GLITE_LB_TEST_PIDFILE...........(default /tmp/glite-lb-test.pid)
+   GLITE_RTM_TEST_PIDFILE..........(default /tmp/glite-rtm-test.pid)
+   GLITE_RTM_TEST_TTL..............notif validity (default 60 seconds)
+   GLITE_RTM_TEST_ADDITIONAL_ARGS..additional arguments for harvester
+
+EOF
+}
+
+
+init() {
+       # get the configuration
+       GLITE_LOCATION=${GLITE_LOCATION:-"/opt/glite"}
+       [ -f /etc/glite.conf ] && . /etc/glite.conf
+       [ -f $HOME/.glite.conf ] && . $HOME/.glite.conf
+       
+       GLOBUS_LOCATION=${GLOBUS_LOCATION:-"/opt/globus"}
+       
+        if [ -n "$GLITE_HOST_CERT" -a -n "$GLITE_HOST_KEY" ] ;then
+               X509_USER_CERT="$GLITE_HOST_CERT"
+               X509_USER_KEY="$GLITE_HOST_KEY"
+       fi
+       
+#      if [ -z "$X509_USER_CERT" -o -z "$X509_USER_KEY" ] ; then
+               if [ -e "$GLOBUS_LOCATION/bin/grid-proxy-info" ] ; then
+                       timeleft=`$GLOBUS_LOCATION/bin/grid-proxy-info 2>&1| \
+                               grep timeleft| sed 's/^.* //'`
+                       if [ "$timeleft" = "0:00:00" -o -z "$timeleft" ]; then 
+                               echo "Proxy certificate check failed."\
+                               " Aborting."
+                               exit 1
+                       fi
+               else
+                       echo "Can't check proxy cert (grid-proxy-info not found). If you do not have valid proxy certificate, set GLITE_HOST_KEY/GLITE_HOST_KEY - otherwise tests will fail!"
+               fi
+#      fi
+       identity=`X509_USER_KEY=${X509_USER_KEY} X509_USER_CERT=${X509_USER_CERT} $GLOBUS_LOCATION/bin/grid-proxy-info 2>&1| \
+               grep identity| sed 's/^[^/]*//'`
+
+       if [ -z "$GLITE_LB_TEST_DB" ]; then
+               GLITE_LB_TEST_DB="lbserver/@localhost:lbserver20test"
+                       need_new_lb_db=1;
+       fi
+       DB_USER=`echo $GLITE_LB_TEST_DB| sed 's!/.*$!!'`
+       DB_HOST=`echo $GLITE_LB_TEST_DB| sed 's!^.*@!!' | sed 's!:.*!!'`
+       DB_NAME=`echo $GLITE_LB_TEST_DB| sed 's!^.*:!!'`
+       MYSQL_ARGS="-u ${GLITE_MYSQL_ROOT_USER:-root}"
+       [ -z "$GLITE_MYSQL_ROOT_PASSWORD" ] || ARGS="--password=${GLITE_MYSQL_ROOT_PASSWORD} $MYSQL_ARGS"
+
+       if [ -z "$GLITE_RTM_TEST_DB" ]; then
+               GLITE_RTM_TEST_DB="rtm/@localhost:rtmtest"
+                       need_new_rtm_db=1;
+       fi
+       RTM_USER=`echo $GLITE_RTM_TEST_DB| sed 's!/.*$!!'`
+       RTM_HOST=`echo $GLITE_RTM_TEST_DB| sed 's!^.*@!!' | sed 's!:.*!!'`
+       RTM_NAME=`echo $GLITE_RTM_TEST_DB| sed 's!^.*:!!'`
+       PG_ARGS="-U ${GLITE_PG_ROOT_USER:-postgres}"
+
+       #other stuff
+       GLITE_LB_TEST_SERVER_PORT=${GLITE_LB_TEST_SERVER_PORT:-"10000"}
+       GLITE_LB_TEST_PIDFILE=${GLITE_LB_TEST_PIDFILE:-"/tmp/glite-lb-test.pid"}
+       GLITE_RTM_TEST_PIDFILE=${GLITE_RTM_TEST_PIDFILE:-"/tmp/glite-rtm-test.pid"}
+       GLITE_RTM_TEST_TTL=${GLITE_RTM_TEST_TTL:-"60"}
+
+       jobreg="$GLITE_LOCATION/examples/glite-lb-job_reg -m `hostname -f`:${GLITE_LB_TEST_SERVER_PORT} -s UserInterface"
+       logev="$GLITE_LOCATION/bin/glite-lb-logevent -x -S `pwd`/LB/proxy.sockstore.sock -U localhost"
+       for dir in "$GLITE_LOCATION/bin" "`pwd`/../build" "`pwd`"; do
+               if [ -x "$dir/glite-lb-harvester-dbg" ]; then
+                       rtm="$dir/glite-lb-harvester-dbg"
+               fi
+               if [ -x "$dir/harvester-dbg" ]; then
+                       rtm="$dir/harvester-dbg"
+               fi
+       done
+       if [ -z "$rtm" ]; then
+               echo "glite-lb-harvester-dbg not found"
+               return 1
+       fi
+
+       if echo "$GLITE_RTM_TEST_ADDITIONAL_ARGS" | grep -- '[^-]\?\(--old\>\|-o\>\)' >/dev/null; then
+               n_notifs=1
+       else
+               n_notifs=2
+       fi
+
+       rm -f log
+}
+
+
+drop_db() {
+return 0
+       [ -z "$lb_db_created" ] || mysqladmin -f $MYSQL_ARGS drop "$DB_NAME"
+       [ -z "$rtm_db_created" ] || dropdb $PG_ARGS "$RTM_NAME"
+}
+
+
+create_db() {
+       echo -n "mysql."
+       # create database when needed
+       if [ "x$need_new_lb_db" = "x1" ]; then
+               mysqladmin -f $MYSQL_ARGS drop $DB_NAME > /dev/null 2>&1
+               echo -n "."
+               mysqladmin -f $MYSQL_ARGS create $DB_NAME && \
+               echo -n "."
+               mysql $MYSQL_ARGS -e "GRANT ALL on $DB_NAME.* to $DB_USER@$DB_HOST" && \
+               echo -n "."
+               mysql -u $DB_USER $DB_NAME -h $DB_HOST < $GLITE_LOCATION/etc/glite-lb-dbsetup.sql || return $?
+               echo -n "."
+               mkdir -p `pwd`/LB
+               cat > `pwd`/LB/glite-lb-index.conf << EOF
+[
+       JobIndices = {
+               [ type = "system"; name = "lastUpdateTime" ]
+       }
+]
+EOF
+               LBDB="$GLITE_LB_TEST_DB" $GLITE_LOCATION/bin/glite-lb-bkindex -r `pwd`/LB/glite-lb-index.conf || return $?
+               lb_db_created="1"
+               echo -n "."
+       else
+               cleanup_mysql || return $?
+       fi
+       echo -n "OK psql."
+       if [ "x$need_new_rtm_db" = "x1" ]; then
+               dropdb $PG_ARGS "$RTM_NAME" >/dev/null 2>&1
+               echo -n "."
+#              createuser $PG_ARGS -A -D "$RTM_NAME" >/dev/null 2>&1
+#              echo -n "."
+               createdb $PG_ARGS --encoding "UTF-8" --owner "$RTM_USER" "$RTM_NAME" >psql-create.log 2>&1 || return $?
+               rm psql-create.log
+               echo -n "."
+               rtm_db_created="1"
+               echo "\i test.sql" | psql -AtF ',' -U "$RTM_USER" "$RTM_NAME" >/dev/null || return $?
+               echo -n "."
+       else
+               cleanup_pg || return $?
+       fi
+       echo "OK"
+}
+
+
+cleanup_mysql() {
+       cat << EOF | mysql -u $DB_USER $DB_NAME -h $DB_HOST || return $?
+DELETE FROM acls;
+DELETE FROM events;
+DELETE FROM events_flesh;
+DELETE FROM jobs;
+DELETE FROM long_fields;
+DELETE FROM notif_jobs;
+DELETE FROM notif_registrations;
+DELETE FROM server_state;
+DELETE FROM short_fields;
+DELETE FROM states;
+DELETE FROM status_tags;
+DELETE FROM users;
+DELETE FROM zombie_jobs;
+DELETE FROM zombie_prefixes;
+DELETE FROM zombie_suffixes;
+EOF
+       echo -n "."
+}
+
+
+cleanup_pg() {
+               cat << EOF | psql -AtF ',' -U "$RTM_USER" "$RTM_NAME" >/dev/null || return $?
+DELETE FROM jobs;
+DELETE FROM notifs;
+EOF
+       echo -n "."
+}
+
+
+run_daemons() {
+       mkdir -p LB/dump LB/purge LB/voms 2>/dev/null
+
+       # checks
+       if [ -f "${GLITE_LB_TEST_PIDFILE}" ]; then
+               echo "L&B server already running (${GLITE_LB_TEST_PIDFILE}, `cat ${GLITE_LB_TEST_PIDFILE}`)"
+               quit=1
+       fi
+       if [ -f "${GLITE_RTM_TEST_PIDFILE}" ]; then
+               echo "L&B harvester already running (${GLITE_RTM_TEST_PIDFILE}, `cat ${GLITE_RTM_TEST_PIDFILE}`)"
+               quit=1
+       fi
+       if [ -e "`pwd`/LB/notif.sock" ]; then
+               if [ "`lsof -t $(pwd)/LB/notif.sock | wc -l`" != "0" ]; then
+                       echo "Notification interlogger already running (using LB/notif.sock, `lsof -t $(pwd)/LB/notif.sock`)"
+                       quit=1
+               fi
+       fi
+       if [ -e "`pwd`/LB/proxy-il.sock" ]; then
+               if [ "`lsof -t $(pwd)/LB/proxy-il.sock | wc -l`" != "0" ]; then
+                       echo "Proxy interlogger already running (using LB/proxy-il.sock, `lsof -t $(pwd)/LB/proxy-il.sock`)"
+                       quit=1
+               fi
+       fi
+       [ -z "$quit" ] || exit 1
+
+       # run L&B server
+       echo -n "L"
+       X509_USER_KEY=${X509_USER_KEY} X509_USER_CERT=${X509_USER_CERT} \
+       $GLITE_LOCATION/bin/glite-lb-bkserverd \
+         -m $GLITE_LB_TEST_DB \
+         -p $GLITE_LB_TEST_SERVER_PORT -w $(($GLITE_LB_TEST_SERVER_PORT + 3))\
+         -i ${GLITE_LB_TEST_PIDFILE} \
+         --withproxy -o `pwd`/LB/proxy.sock\
+         --proxy-il-sock `pwd`/LB/proxy-il.sock --proxy-il-fprefix `pwd`/LB/proxy-data \
+         -D `pwd`/LB/dump -S `pwd`/LB/purge \
+         -V `pwd`/LB/voms \
+         --notif-il-sock `pwd`/LB/notif.sock --notif-il-fprefix `pwd`/LB/notif-data \
+         --super-user "$identity" > `pwd`/LB/glite-lb-test-pre.log 2>&1
+       if [ x"$?" != x"0" ]; then
+               cat `pwd`/LB/glite-lb-test-pre.log
+               echo FAILED
+               drop_db;
+               exit 1
+       fi
+       echo -n "B "
+
+       # run L&B interlogger
+       echo -n "L"
+       X509_USER_KEY=${X509_USER_KEY} X509_USER_CERT=${X509_USER_CERT} \
+       $GLITE_LOCATION/bin/glite-lb-interlogd \
+         --file-prefix `pwd`/LB/proxy-data --socket `pwd`/LB/proxy-il.sock > `pwd`/LB/glite-interlog-test-pre.log 2>&1
+       if [ x"$?" != x"0" ]; then
+               cat `pwd`/LB/glite-interlog-test-pre.log
+               echo FAILED
+               kill_bkserver
+               drop_db;
+               exit 1
+       fi
+       echo -n "I "
+
+       # run L&B notification interlogger
+       echo -n "N"
+       X509_USER_KEY=${X509_USER_KEY} X509_USER_CERT=${X509_USER_CERT} \
+       $GLITE_LOCATION/bin/glite-lb-notif-interlogd \
+         --file-prefix `pwd`/LB/notif-data --socket `pwd`/LB/notif.sock > `pwd`/LB/glite-notif-test-pre.log 2>&1
+       if [ x"$?" != x"0" ]; then
+               cat `pwd`/LB/glite-notif-test-pre.log
+               echo FAILED
+               kill_daemons
+               drop_db;
+               exit 1
+       fi
+       echo -n "I "
+
+       if ! start_harvester; then
+               kill_daemons;
+               drop_db;
+               exit 1
+       fi
+
+       # wait for pidfiles
+       i=0
+       while [ ! -s "${GLITE_LB_TEST_PIDFILE}" -a $i -lt 20 ]; do
+               sleep 0.1
+               i=$(($i+1))
+       done
+       if [ ! -s "${GLITE_LB_TEST_PIDFILE}" ]; then
+               echo "Can't startup L&B server."
+               kill_daemons;
+               drop_db;
+               exit 1
+       fi
+
+       echo -n "notifs."
+       pg_wait 20 "SELECT refresh FROM notifs WHERE notifid IS NOT NULL" $n_notifs || return $?
+       refresh=`echo "$result" | head -n 1`
+       if [ -z "$refresh" ]; then
+               echo "FAIL"
+               return 1
+       fi
+}
+
+
+start_harvester() {
+       # run L&B harvester server
+       echo -n "R"
+       rm -Rf RTM
+       mkdir RTM 2>/dev/null
+       echo "`hostname -f`:${GLITE_LB_TEST_SERVER_PORT}" > `pwd`/RTM/config.txt
+       X509_USER_KEY=${X509_USER_KEY} X509_USER_CERT=${X509_USER_CERT} \
+       ${rtm} \
+         -m $GLITE_RTM_TEST_DB \
+         --pidfile ${GLITE_RTM_TEST_PIDFILE} \
+         --ttl ${GLITE_RTM_TEST_TTL} \
+         --history $((GLITE_RTM_TEST_TTL / 2)) \
+         --debug 12 \
+         --config `pwd`/RTM/config.txt \
+         --daemonize ${GLITE_RTM_TEST_ADDITIONAL_ARGS} 2>`pwd`/RTM/glite-rtm-test-pre.log >`pwd`/RTM/notifs.log
+       if [ x"$?" != x"0" ]; then
+               cat `pwd`/RTM/glite-rtm-test-pre.log
+               echo FAILED
+               return 1
+       fi
+
+       i=0
+       while [ ! -s "${GLITE_RTM_TEST_PIDFILE}" -a $i -lt 20 ]; do
+               sleep 0.1
+               i=$(($i+1))
+       done
+       if [ ! -s "${GLITE_RTM_TEST_PIDFILE}" ]; then
+               echo "Can't startup L&B harvester."
+               kill_daemons;
+               drop_db;
+               exit 1
+       fi
+
+       echo -n "M "
+}
+
+
+cleanup_harvester() {
+       echo -n "cleaning up..."
+       X509_USER_KEY=${X509_USER_KEY} X509_USER_CERT=${X509_USER_CERT} \
+       ${rtm} \
+         -m $GLITE_RTM_TEST_DB \
+         --cleanup \
+         --debug 12 ${GLITE_RTM_TEST_ADDITIONAL_ARGS} >`pwd`/RTM/glite-rtm-test-cleanup.log 2>&1
+       if [ x"$?" != x"0" ]; then
+               cat `pwd`/RTM/glite-rtm-test-cleanup.log
+               echo FAILED
+               return 1
+       fi
+       echo -n "OK "
+}
+
+
+kill_daemons() {
+       pid1=`cat ${GLITE_LB_TEST_PIDFILE} 2>/dev/null`
+       [ -f "${GLITE_RTM_TEST_PIDFILE}" ] && pid2=`cat ${GLITE_RTM_TEST_PIDFILE}`
+       pid3=`lsof -t $(pwd)/LB/notif.sock 2>/dev/null`
+       pid4=`lsof -t $(pwd)/LB/proxy-il.sock 2>/dev/null`
+       [ ! -z "$pid1" ] && kill $pid1
+       [ ! -z "$pid2" ] && kill -2 $pid2
+       [ ! -z "$pid3" ] && kill $pid3
+       [ ! -z "$pid4" ] && kill $pid4
+       sleep 1;
+       [ ! -z "$pid1" ] && kill -9 $pid1 2>/dev/null
+       [ ! -z "$pid2" ] && kill -9 $pid2 2>/dev/null
+       [ ! -z "$pid3" ] && kill -9 $pid3 2>/dev/null
+       [ ! -z "$pid4" ] && kill -9 $pid4 2>/dev/null
+       rm -f "${GLITE_LB_TEST_PIDFILE}" "${GLITE_RTM_TEST_PIDFILE}"
+       rm -f `pwd`/LB/*.sock
+}
+
+
+kill_bkserver() {
+       pid=`cat ${GLITE_LB_TEST_PIDFILE} 2>/dev/null`
+       if [ ! -z "$pid1" ]; then
+               kill $pid;
+               sleep 1;
+               kill -9 $pid
+       fi
+       rm -f "${GLITE_LB_TEST_PIDFILE}"
+}
+
+
+kill_harvester() {
+       pid=`cat ${GLITE_RTM_TEST_PIDFILE} 2>/dev/null`
+       if [ ! -z "$pid1" ]; then
+               kill $pid
+               sleep 1;
+               kill -9 $pid 2>/dev/null
+       fi
+       rm -f "${GLITE_RTM_TEST_PIDFILE}"
+}
+
+
+reg() {
+       echo -n "R"
+       echo $jobreg $@ >> log
+       $jobreg $@ > jobreg.tmp
+       if [ $? -ne 0 ]; then
+               cat jobreg.tmp
+               rm -f jobreg.tmp
+               echo " FAIL!"
+               return 1;
+       fi
+       script=`cat jobreg.tmp | tail -n 2`
+       rm -f jobreg.tmp
+       EDG_JOBID=
+       EDG_WL_SEQUENCE=
+       eval $script
+       if [ -z "$EDG_JOBID" -o -z "$EDG_WL_SEQUENCE" ]; then
+               echo " FAIL!"
+               return 1;
+       fi
+       echo -n "G "
+}
+
+
+ev() {
+       echo -n "E"
+       echo $logev -j "$EDG_JOBID" -c "$EDG_WL_SEQUENCE" "$@" >> log
+       $logev -j "$EDG_JOBID" -c "$EDG_WL_SEQUENCE" "$@" 2> logev-err.tmp >logev.tmp
+       if [ $? -ne 0 ]; then
+               echo " FAIL!"
+               return 2;
+       fi
+       EDG_WL_SEQUENCE=`cat logev.tmp`
+       rm logev.tmp logev-err.tmp
+       echo -n "V "
+}
+
+
+pg_get() {
+       result=
+       lines=
+       echo "$1" | psql -AtF ',' -U "$RTM_USER" "$RTM_NAME" > psql.tmp
+       if [ $? != 0 ]; then
+               return $?
+       fi
+       result="`cat psql.tmp`"
+       lines=`wc -l psql.tmp | sed 's/^[ ]*//' | cut -f1 -d' '`
+#      rm psql.tmp
+       return 0
+}
+
+
+pg_wait() {
+       timeout=$(($1*2))
+       sql="$2"
+       n="$3"
+
+       i=0
+       found=0
+       result=
+       echo -n "S"
+       echo "`date '+%Y-%m-%d %H:%M:%S'` $sql" >> log
+       while [ "$found" = "0" -a $i -lt $timeout ]; do
+               pg_get "$sql" || return $?
+               echo -n "."
+               if [ -z "$n" ]; then
+                       if [ "$lines" != "0" ]; then found=1; fi
+               else
+                       if [ "$lines" = "$n" ]; then found=1; fi
+               fi
+               if [ "$found" = "0" ]; then sleep 0.5; fi
+               i=$(($i+1))
+       done
+       echo -n "Q "
+       result="$result"
+       echo "`date '+%Y-%m-%d %H:%M:%S'` $lines lines" >> log
+       if [ ! -z "$result" ]; then
+               echo "$result" | sed -e 's/\(.*\)/\t\1/' >> log
+       fi
+       return 0
+}
+
+
+my_get() {
+       result=
+       lines=
+       echo "`date '+%Y-%m-%d %H:%M:%S'` $1" >> log
+       echo "$1" | mysql -B -u "$DB_USER" "$DB_NAME" > mysql.tmp
+       if [ $? != 0 ]; then
+               return $?
+       fi
+       result=`cat mysql.tmp | tail -n +2`
+       lines=`echo "$result" | grep -v '^$' | wc -l | sed 's/^[ ]*//'`
+       echo "`date '+%Y-%m-%d %H:%M:%S'` $lines lines" >> log
+       if [ ! -z "$result" ]; then
+               echo "$result" | sed -e 's/\(.*\)/\t\1/' >> log
+       fi
+#      rm -f mysql.tmp
+       return 0
+}
+
+
+# notif propagation
+test_basic() {
+       ok=0
+
+       # submited
+       echo -n "submitted..."
+       reg || return $?
+       pg_wait 10 "SELECT jobid, state FROM jobs WHERE state='Submitted'" || return $?
+       if [ -z "$result" ]; then
+               echo "FAIL"
+               return 0
+       fi
+
+       # waiting
+       echo -n "waiting..."
+       ev -s NetworkServer -e Accepted --from='UserInterface' --from_host=`hostname -f` --from_instance="pid$$" || return $?
+       pg_wait 10 "SELECT jobid, state FROM jobs WHERE state='Waiting'" || return $?
+       if [ -z "$result" ]; then
+               echo "FAIL"
+               return 0
+       fi
+
+       # running
+       echo -n "running..."
+       ev -s LogMonitor -e Running --node="worker node" || return $?
+       pg_wait 10 "SELECT jobid, state FROM jobs WHERE state='Running'" || return $?
+       if [ -z "$result" ]; then
+               echo "FAIL"
+               return 0
+       fi
+
+       ok=1
+       echo "OK"
+}
+
+
+# proper notif registration cleanup
+test_rebind() {
+       ok=0
+
+       # ---- active ---
+       echo -n "$n_notifs notifications "
+       my_get "SELECT notifid FROM notif_registrations" || return $?
+       # STATUS and JDL
+       if [ "$lines" != "$n_notifs" ]; then
+               echo "FAIL"
+               return 0
+       fi
+       echo -n "OK "
+
+       # ---- store & stop ---
+       echo -n "store&quit"
+       pid=`cat ${GLITE_RTM_TEST_PIDFILE}`
+       kill $pid
+       i=0
+       while [ -s "${GLITE_RTM_TEST_PIDFILE}" -a $i -lt 200 ]; do
+               echo -n "."
+               sleep 0.5
+               i=$(($i+1))
+       done
+       if [ -s "${GLITE_RTM_TEST_PIDFILE}" ]; then
+               echo "FAIL"
+               return 0
+       fi
+       echo -n "OK notifs "
+       my_get "SELECT notifid FROM notif_registrations" || return $?
+       if [ "$lines" != "$n_notifs" ]; then
+               echo "FAIL"
+               return 0
+       fi
+       echo -n "OK "
+
+       # ---- launch & rebind ---
+       if ! start_harvester; then
+               kill_daemons;
+               drop_db;
+               exit 1
+       fi
+
+       echo -n "bind"
+       pg_wait 20 "SELECT notifid FROM notifs WHERE notifid IS NOT NULL" $n_notifs || return $?
+       if [ x"$lines" != x"$n_notifs" ]; then
+               echo "FAIL"
+               return 0
+       fi
+
+       echo -n "Done "
+       ev -s LogMonitor -e Done --status_code=OK --reason="Finished, yeah!" --exit_code=0 || return $?
+       pg_wait 20 "SELECT jobid, state FROM jobs WHERE state='Done'"
+       if [ -z "$result" ]; then
+               echo "FAIL"
+               return 0
+       fi
+
+       ok=1
+       echo "OK"
+}
+
+
+test_cleanup() {
+       ok=0
+
+       # ---- deep stop ---
+       echo -n "deep quit"
+       pid=`cat ${GLITE_RTM_TEST_PIDFILE}`
+       kill -2 $pid
+       i=0
+       while [ -s "${GLITE_RTM_TEST_PIDFILE}" -a $i -lt 200 ]; do
+               echo -n "."
+               sleep 0.5
+               i=$(($i+1))
+       done
+       if [ -s "${GLITE_RTMTESTPIDFILE}" ]; then
+               echo "FAIL"
+               return 0
+       fi
+
+       echo -n "$n_notifs notifications..."
+       my_get "SELECT notifid FROM notif_registrations" || return 1
+       if [ "$lines" != "$n_notifs" ]; then
+               echo "FAIL"
+               return 0
+       fi
+
+       cleanup_harvester || return $?
+       echo -n "0 notifications..."
+       my_get "SELECT notifid FROM notif_registrations" || return 1
+       if [ "$lines" != "0" ]; then
+               echo "FAIL"
+               return 0
+       fi
+
+       echo -n "cleandb."
+       cleanup_pg || return $?
+       start_harvester || return $?
+
+       echo -n "notifs."
+       pg_wait 20 "SELECT refresh FROM notifs WHERE notifid IS NOT NULL" $n_notifs || return $?
+       refresh=`echo "$result" | head -n 1`
+       if [ -z "$refresh" ]; then
+               echo "FAIL"
+               return 0
+       fi
+
+       ok=1
+       echo "OK"
+}
+
+
+test_refresh() {
+       ok=0
+
+       echo -n "refresh."
+       pg_wait $((GLITE_RTM_TEST_TTL * 3 / 4)) "SELECT notifid FROM notifs WHERE notifid IS NOT NULL AND refresh>'$refresh'" $n_notifs || return $?
+       if [ -z "$result" ]; then
+               echo "FAIL"
+               return 0
+       fi
+
+       ok=1
+       echo "OK"
+}
+
+
+test_jdl() {
+       ok=0
+
+#      kill_daemons
+#      cleanup_mysql && cleanup_pg || return $?
+#      run_daemons || return $?
+
+       # need to wait for notifications to avoid bootstrap
+       echo -n "notifs."
+       pg_wait 20 "SELECT refresh FROM notifs WHERE notifid IS NOT NULL" $n_notifs || return $?
+       refresh=`echo "$result" | head -n 1`
+       if [ -z "$refresh" ]; then
+               echo "FAIL"
+               return 0
+       fi
+       echo -n "OK "
+
+       echo -n "submitted..."
+       reg || return $?
+       pg_wait 10 "SELECT jobid, state FROM jobs WHERE state='Submitted'" || return $?
+       if [ -z "$result" ]; then
+               echo "FAIL"
+               return 0
+       fi
+       echo -n "OK "
+
+       echo -n "waiting..."
+       cat > jdl.txt << EOF
+[
+ VirtualOrganisation = "TestingVO";
+]
+EOF
+       ev -s NetworkServer -e Accepted --from='UserInterface' --from_host=`hostname -f` --from_instance="pid$$" || return $?
+       ev -s NetworkServer -e EnQueued --queue "very long and chaotic queue" --job=`pwd`/jdl.txt --result START || return $?
+       ev -s NetworkServer -e EnQueued --queue "very long and chaotic queue" --job="`cat jdl.txt`" --result OK || return $?
+       pg_wait 10 "SELECT jobid, state FROM jobs WHERE state='Waiting'" || return $?
+       if [ -z "$result" ]; then
+               echo "FAIL"
+               return 0
+       fi
+       echo -n "OK "
+
+       echo -n "waiting and VO..."
+       pg_wait 10 "SELECT jobid, state FROM jobs WHERE state='Waiting' AND vo='TestingVO'" || return $?
+       if [ -z "$result" ]; then
+               echo "FAIL"
+               return 0
+       fi
+       echo -n "OK "
+
+       #
+       # test JDL via VO change
+       #
+       # never do it at home ;-)
+       #
+
+       echo -n "changed JDL..."
+       ev -s NetworkServer -e EnQueued --queue "very long and chaotic queue" --job="[ VirtualOrganisation=\"TestingVO2\";]" --result OK || return $?
+       pg_wait 10 "SELECT jobid, state FROM jobs WHERE state='Waiting' AND vo='TestingVO2'" || return $?
+       if [ -z "$result" ]; then
+               echo "FAIL"
+               return 0
+       fi
+       echo -n "OK"
+
+       echo -n "changed after waiting..."
+       ev -s WorkloadManager -e EnQueued --queue "very long and chaotic queue" --destination LogMonitor --dest_host localhost --dest_instance pid$$ --job "(car 'testing=true)"  --result=OK || return $?
+       pg_wait 10 "SELECT jobid, state FROM jobs WHERE state='Ready' AND vo='TestingVO2'" || return $?
+       if [ -z "$result" ]; then
+               echo "FAIL"
+               return 0
+       fi
+       echo -n "ready..."
+       ev -s NetworkServer -e EnQueued --queue "very long and chaotic queue" --job="[ VirtualOrganisation=\"TestingVO3\";]" --result OK || return $?
+       pg_wait 10 "SELECT jobid, state FROM jobs WHERE state='Waiting' AND vo='TestingVO3'" || return $?
+       if [ -z "$result" ]; then
+               echo "FAIL"
+               return 0
+       fi
+
+       ok=1
+       echo "OK"
+}
+
+
+quit() {
+       if [ x"$started" = x"" ]; then
+               kill_daemons
+               drop_db
+       fi
+       exit 1
+}
+
+
+fatal() {
+       echo "Fatal error, end"
+       quit
+}
+
+
+start() {
+       echo -n "Launch: "
+       create_db || fatal
+       run_daemons || fatal
+       echo "OK"
+       started=1
+}
+
+
+stop() {
+       kill_daemons
+       drop_db
+}
+
+
+test() {
+       echo -n "Basic: "
+       test_basic || fatal
+       if [ $ok != 1 ]; then quit; fi
+
+       echo -n "Rebind: "
+       test_rebind || fatal
+       if [ $ok != 1 ]; then quit; fi
+
+       echo -n "Cleanup: "
+       test_cleanup || fatal
+       if [ $ok != 1 ]; then quit; fi
+
+       echo -n "Refresh: "
+       test_refresh || fatal
+       if [ $ok != 1 ]; then quit; fi
+
+       echo -n "JDL: "
+       test_jdl || fatal
+       if [ $ok != 1 ]; then quit; fi
+}
+
+
+case x"$1" in
+xstart)
+       init
+       start
+       ;;
+
+xstop)
+       init
+       stop
+       ;;
+
+xtest)
+       init
+       test
+       ;;
+
+x)
+       init
+       start
+       test
+       stop
+       ;;
+
+*)
+       usage
+       exit 1
+esac
diff --git a/org.glite.lb.harvester/examples/test.sql b/org.glite.lb.harvester/examples/test.sql
new file mode 100644 (file)
index 0000000..15736f6
--- /dev/null
@@ -0,0 +1,55 @@
+--
+-- Inicialization (replace pgsql by actual postgres superuser):
+--
+-- 1) grant privileges, someting like this in $data/pg_hba.conf:
+--     local all all trust
+--
+-- 2) create user:
+--     createuser -U pgsql rtm
+--
+-- 3) crate database:
+--     createuser -U pgsql rtm
+--
+-- 4) create tables:
+--     psql -U rtm rtm < test.sql
+--
+
+CREATE TABLE "jobs" (
+       jobid VARCHAR PRIMARY KEY,
+       lb VARCHAR,
+       ce VARCHAR,
+       queue VARCHAR,
+       rb VARCHAR,
+       ui VARCHAR,
+       state VARCHAR,
+       state_entered TIMESTAMP,
+       rtm_timestamp TIMESTAMP,
+       active BOOLEAN,
+       state_changed BOOLEAN,
+       registered TIMESTAMP,
+       vo VARCHAR
+);
+
+CREATE TABLE "lb20" (
+       ip TEXT NOT NULL,
+       branch TEXT NOT NULL,
+       serv_version TEXT NOT NULL,
+       monitored BOOLEAN DEFAULT FALSE,
+       last_seen DATE,
+       first_seen DATE,
+
+       PRIMARY KEY(ip)
+);
+
+CREATE TABLE "notifs" (
+       lb VARCHAR,
+       port INTEGER,
+       notifid VARCHAR,
+       notiftype VARCHAR,
+       valid TIMESTAMP,
+       refresh TIMESTAMP,
+       last_update TIMESTAMP,
+       errors INTEGER,
+
+       PRIMARY KEY(lb, port, notiftype)
+);
diff --git a/org.glite.lb.harvester/project/ChangeLog b/org.glite.lb.harvester/project/ChangeLog
new file mode 100644 (file)
index 0000000..6ec5d9e
--- /dev/null
@@ -0,0 +1,8 @@
+1.0.0-1
+- Initial version
+
+1.0.1-1
+- Changes for Real Time Monitor
+- Workaround for older Globus
+- Minor memleak fixes
+
diff --git a/org.glite.lb.harvester/project/package.description b/org.glite.lb.harvester/project/package.description
new file mode 100644 (file)
index 0000000..addf934
--- /dev/null
@@ -0,0 +1,3 @@
+L&B Harvester gathers information about jobs from L&B servers using effective L&B notification mechanism. It manages notifications and keeps them in a persistent storage (file or database table) to reuse later on next launch. It takes care about refreshing notifications and queries L&B servers back when some notification expires.
+
+The tool was initially written for Real Time Monitor (project at Imperial College in London), later was extended with messaging mechanism for WLCG.
diff --git a/org.glite.lb.harvester/project/package.summary b/org.glite.lb.harvester/project/package.summary
new file mode 100644 (file)
index 0000000..062972a
--- /dev/null
@@ -0,0 +1 @@
+Enhanced L&B notification client.
diff --git a/org.glite.lb.harvester/project/version.properties b/org.glite.lb.harvester/project/version.properties
new file mode 100644 (file)
index 0000000..e575ad0
--- /dev/null
@@ -0,0 +1,2 @@
+module.version=1.0.1
+module.age=1
diff --git a/org.glite.lb.harvester/src/harvester.c b/org.glite.lb.harvester/src/harvester.c
new file mode 100644 (file)
index 0000000..00045b0
--- /dev/null
@@ -0,0 +1,2575 @@
+#ident "$Header$"
+
+/*
+ * Real time monitor.
+ */
+
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/socket.h>
+#include <sys/wait.h>
+#include <assert.h>
+#include <getopt.h>
+#include <pthread.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <syslog.h>
+#include <errno.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <time.h>
+#include <glite/security/glite_gss.h>
+#ifdef WITH_LBU_DB
+#include <glite/lbu/trio.h>
+#include <glite/lbu/db.h>
+#endif
+#include <glite/lb/context.h>
+#ifndef WITH_OLD_LB
+#include <glite/lb/connpool.h>
+#endif
+#include <glite/lb/notification.h>
+#include <glite/lb/consumer.h>
+
+
+// default number of the threads/sockets
+#define RTM_THREADS 5
+// requested notification life in seconds
+#define RTM_NOTIF_TTL 86400
+// consider end of the notification life sooner
+#define RTM_NOTIF_TTL_TO_DEAD 2
+// poll timeout in seconds
+#define RTM_NOTIF_READ_TIMEOUT 5
+// recheck LB server after error in seconds
+#define RTM_ERROR_REPEAT_RATE 120
+// initial read loop time (can be infinity)
+#define RTM_NOTIF_LOOP_MAX_TIME 1800
+// idle "quit" poll
+#define RTM_IDLE_POLL_TIME 0.5
+// purge & summary jobs poll time
+#define RTM_SUMMARY_POLL_TIME 600
+// preventive suicide against memleaks and ugly things (12 h)
+#define RTM_SUICIDE_TIME 43200
+
+#define RTM_SUMMARY_JOBS 100
+
+#define RTM_DB_TABLE_JOBS "jobs"
+#define RTM_DB_TABLE_LBS "lb20"
+#define DBPAR(N) ("$" (N))
+#define DBAMP "\""
+
+// debug message level: insane, debug, progress, warning, error
+#define INS 4
+#define DBG 3
+#define INF 2
+#define WRN 1
+#define ERR 0
+#define DEBUG_LEVEL_MASK 7
+#define DEBUG_GUARD_MASK 8
+
+// internal quit codes
+#define RTM_QUIT_RUN 0
+#define RTM_QUIT_CLEANUP 1
+#define RTM_QUIT_PRESERVE 2
+#define RTM_QUIT_RELOAD 3
+
+// exit codes
+#define RTM_EXIT_OK 0
+#define RTM_EXIT_RELOAD 1
+#define RTM_EXIT_ERROR 2
+
+#define RTM_NOTIF_TYPE_STATUS 1
+#define RTM_NOTIF_TYPE_JDL 2
+#define RTM_NOTIF_TYPE_OLD 3
+#define RTM_NOTIF_TYPE_DONE 4
+
+#ifdef RTM_NO_COLORS
+#define RTM_TTY_RED ""
+#define RTM_TTY_GREEN ""
+#define RTM_TTY_RST ""
+#else
+#define RTM_TTY_RED "\e[1;31m"
+#define RTM_TTY_GREEN "\e[1;32m"
+#define RTM_TTY_RST "\e[0;39m"
+#endif
+
+#ifndef LINE_MAX
+#define LINE_MAX 1023
+#endif
+
+#define RTM_FILE_NOTIFS "/var/tmp/notifs.txt"
+#define RTM_FILE_NOTIF_PRINTF "%s\t%s\t%s\t%s\t%s\t%d\n"
+#define RTM_FILE_NOTIF_SCANF "%511[^\t]\t%511[^\t]\t%511[^\t]\t%511[^\t]\t%511[^\t]\t%511[^\t\r\n]\n"
+#define RTM_FILE_NOTIF_NUM 6
+
+#define WLCG_FILENAME_TEMPLATE "/tmp/wlcg_%02d_XXXXXX"
+#define WLCG_COMMAND_MESSAGE "/opt/lcg/bin/msg-publish -c /opt/lcg/etc/msg-publish.conf org.wlcg.usage.jobStatus %s"
+#define WLCG_BINARY "/usr/bin/msg-publish"
+#define WLCG_CONFIG "/etc/msg-publish/msg-publish.conf"
+#define WLCG_TOPIC "org.wlcg.usage.jobStatus"
+
+
+#ifdef WITH_OLD_LB
+#define glite_jobid_t edg_wlc_JobId
+#define glite_jobid_create edg_wlc_JobIdCreate
+#define glite_jobid_recreate edg_wlc_JobIdRecreate
+#define glite_jobid_dup edg_wlc_JobIdDup
+#define glite_jobid_free edg_wlc_JobIdFree
+#define glite_jobid_parse edg_wlc_JobIdParse
+#define glite_jobid_unparse edg_wlc_JobIdUnparse
+#define glite_jobid_getServer edg_wlc_JobIdGetServer
+#define glite_jobid_getServerParts edg_wlc_JobIdGetServerParts
+#define glite_jobid_getUnique edg_wlc_JobIdGetUnique
+#define edg_wll_NotifNew(CTX, CONDS, FLAGS, SOCK, LADDR, ID, VALID) edg_wll_NotifNew((CTX), (CONDS), (SOCK), (LADDR), (ID), (VALID))
+#define edg_wll_JDLField(STAT, NAME) NULL
+#ifndef GLITE_JOBID_DEFAULT_PORT
+#define GLITE_JOBID_DEFAULT_PORT GLITE_WMSC_JOBID_DEFAULT_PORT
+#endif
+#endif
+
+// TODO: ipv6? :-)
+
+typedef struct {
+       edg_wll_NotifId id;  // notification context (after bootstrap/rebind)
+       char *id_str;        // notification id string
+       int type;            // for distinguish various notifications on one LB
+       char *server;        // LB server hostname
+       unsigned int port;   // LB server port
+       time_t valid;        // maximal validity of the notification
+       time_t refresh;      // when try to refresh (before expiration),
+                            // used for retry time after error too
+       double last_update;  // last change from the server
+       int active;          // helper (compare LB servers and notifications,
+                            // if to save to the persistent storage)
+       int error;           // errors counter
+} notif_t;
+
+typedef struct {
+       int id;
+       pthread_t thread;
+       notif_t *notifs;
+       int nservers;
+       time_t next_refresh;
+       char time_s[100];
+       char *dash_filename;
+       int dash_fd;
+#ifdef WITH_LBU_DB
+       glite_lbu_DBContext dbctx;
+       glite_lbu_Statement insertcmd, updatecmd, updatecmd_vo, updatecmd_mon;
+       int dbcaps;
+#endif
+} thread_t;
+
+typedef struct {
+       char *local_address;
+       int nthreads;
+       char *config_file;
+       char *notif_file;
+       int debug;
+       int guard;
+       int daemonize;
+       char *pidfile;
+       int dive;
+       char *dbcs;  // DB connection string
+       char *cert, *key;
+       int ttl;     // requested time to live (validity) of the notifications
+       int cleanup;        // if to clean up notifications on LB servers
+       int wlcg;           // dashboard messaging
+       int wlcg_no_remove; // don't remove temporary files (for debugging)
+       char *wlcg_binary;  // path msg-publish binary
+       char *wlcg_config;  // msg config file
+       char *wlcg_topic;   // msg topic
+       int wlcg_flush;     // send message for eachnotification
+       int silly;          // old LB 1.9 mode
+
+       int nservers;
+       notif_t *notifs;
+} config_t;
+
+typedef struct {
+       notif_t *notifs;
+       int n, maxn;
+       pthread_mutex_t lock;
+       double last_check;
+       int was_summary; // flag for debugging
+#ifdef WITH_LBU_DB
+       glite_lbu_DBContext dbctx;
+#endif
+} db_t;
+
+
+static const char rcsid[] = "@(#)$Id$";
+
+static int rtm2syslog[] = {
+       LOG_ERR,
+       LOG_WARNING,
+       LOG_INFO,
+       LOG_DEBUG,
+       LOG_DEBUG,
+};
+
+static const struct option opts[] = {
+       { "wlcg-binary", required_argument,     NULL,   0},
+       { "wlcg-config", required_argument,     NULL,   0},
+       { "wlcg-topic", required_argument,      NULL,   0},
+       { "wlcg-flush", no_argument,            NULL,   0},
+       { "help",       no_argument,            NULL,   'h'},
+       { "version",    no_argument,            NULL,   'v'},
+       { "threads",    required_argument,      NULL,   's'},
+       { "debug",      required_argument,      NULL,   'd'},
+       { "daemonize",  no_argument,            NULL,   'D'},
+       { "pidfile",    required_argument,      NULL,   'i'},
+       { "ttl",        required_argument,      NULL,   't'},
+       { "history",    required_argument,      NULL,   'H'},
+       { "config",     required_argument,      NULL,   'c'},
+       { "notifs",     required_argument,      NULL,   'n'},
+       { "port",       required_argument,      NULL,   'p'},
+       { "pg",         required_argument,      NULL,   'm'},
+       { "cert",       required_argument,      NULL,   'C'},
+       { "key",        required_argument,      NULL,   'K'},
+       { "wlcg",       no_argument,            NULL,   'w'},
+       { "old",        no_argument,            NULL,   'o'},
+       { "cleanup",    no_argument,            NULL,   'l'},
+       { NULL,         no_argument,            NULL,   0}
+};
+
+static const char *opts_line = "hvs:d:Di:t:H:c:n:p:m:C:K:wo";
+
+config_t config = {
+       local_address: NULL,
+       nthreads: RTM_THREADS,
+       config_file: NULL,
+       notif_file: NULL,
+       debug: DBG,
+       guard: 1,
+       dive: 10800,
+       dbcs: NULL,
+       cert: NULL,
+       key: NULL,
+       ttl: RTM_NOTIF_TTL,
+       cleanup: 0,
+       wlcg: 0,
+       silly: 0,
+
+       nservers: 0,
+       notifs: NULL,
+};
+db_t db = {
+       notifs: NULL,
+       n: 0,
+       maxn: 0,
+       lock: PTHREAD_MUTEX_INITIALIZER,
+#ifdef WITH_LBU_DB
+       dbctx: NULL
+#endif
+};
+thread_t *threads = NULL;
+volatile sig_atomic_t quit = RTM_QUIT_RUN;
+
+static int listen_port = 0;
+
+#define lprintf(T, LEVEL, FMT, ARGS...) \
+       if ((LEVEL) <= config.debug) lprintf_func((T), (LEVEL), (FMT), ##ARGS)
+#define lprintf_ctx(T, LEVEL, CTX, FMT, ARGS...) \
+       if ((LEVEL) <= config.debug) lprintf_ctx_func((T), (CTX), (LEVEL), (FMT), ##ARGS)
+#define lprintf_dbctx(T, LEVEL, FMT, ARGS...) \
+       if ((LEVEL) <= config.debug) lprintf_dbctx_func((T), (LEVEL), (FMT), ##ARGS)
+
+#ifdef WITH_OLD_LB
+int edg_wll_gss_initialize() {
+       if (globus_module_activate(GLOBUS_GSI_GSSAPI_MODULE) != GLOBUS_SUCCESS) return EINVAL;
+       return 0;
+}
+#endif
+
+void lvprintf_func(thread_t *t, const char *description, int level, const char *fmt, va_list ap) {
+       char prefix[10];
+       char *msg, *line;
+       
+       if (t) snprintf(prefix, sizeof prefix, "[%02d]", t->id);
+       else memcpy(prefix, "[main]", 8);
+       vasprintf(&msg, fmt, ap);
+       if (description) asprintf(&line, "%s %s, %s\n", prefix, msg, description);
+       else asprintf(&line, "%s %s\n", prefix, msg);
+       free(msg);
+
+       if (level <= WRN && !config.daemonize) fprintf(stderr, RTM_TTY_RED);
+       if (config.daemonize) {
+               openlog(NULL, LOG_PID | LOG_CONS, LOG_DAEMON);
+               syslog(rtm2syslog[level], "%s", line);
+               closelog();
+       } else {
+               fputs(line, stderr);
+       }
+       if (level <= WRN && !config.daemonize) fprintf(stderr, RTM_TTY_RST);
+
+       free(line);
+}
+
+
+void lprintf_func(thread_t *t, int level, const char *fmt, ...) {
+       va_list ap;
+
+       va_start(ap, fmt);
+       lvprintf_func(t, NULL, level, fmt, ap);
+       va_end(ap);
+}
+
+
+void lprintf_ctx_func(thread_t *t, edg_wll_Context ctx, int level, const char *fmt, ...) {
+       va_list ap;
+       char *errText, *errDesc, *s;
+
+       va_start(ap, fmt);
+       edg_wll_Error(ctx, &errText, &errDesc);
+       asprintf(&s, "%s: %s", errText, errDesc);
+       lvprintf_func(t, s, level, fmt, ap);
+       free(errText);
+       free(errDesc);
+       free(s);
+       va_end(ap);
+}
+
+
+#ifdef WITH_LBU_DB
+void lprintf_dbctx_func(thread_t *t, int level, const char *fmt, ...) {
+       va_list ap;
+       char *errText = NULL, *errDesc = NULL, *s = NULL;
+       glite_lbu_DBContext dbctx = t ? t->dbctx : db.dbctx;
+
+       va_start(ap, fmt);
+       if (dbctx) {
+               glite_lbu_DBError(dbctx, &errText, &errDesc);
+               asprintf(&s, "%s: %s", errText, errDesc);
+       }
+       lvprintf_func(t, s, level, fmt, ap);
+       free(errText);
+       free(errDesc);
+       free(s);
+       va_end(ap);
+}
+#endif
+
+#ifndef WITH_LBU_DB
+time_t glite_lbu_StrToTime(const char *str) {
+       struct tm       tm;
+
+       memset(&tm,0,sizeof(tm));
+       putenv("TZ=UTC"); tzset();
+       sscanf(str,"%4d-%02d-%02d %02d:%02d:%02d",
+               &tm.tm_year,&tm.tm_mon,&tm.tm_mday,
+               &tm.tm_hour,&tm.tm_min,&tm.tm_sec);
+       tm.tm_year -= 1900;
+       tm.tm_mon--;
+
+       return mktime(&tm);
+}
+
+double glite_lbu_StrToTimestamp(const char *str) {
+       struct tm       tm;
+       double  sec;
+
+       memset(&tm,0,sizeof(tm));
+       putenv("TZ=UTC"); tzset();
+       sscanf(str,"%4d-%02d-%02d %02d:%02d:%lf",
+               &tm.tm_year,&tm.tm_mon,&tm.tm_mday,
+               &tm.tm_hour,&tm.tm_min,&sec);
+       tm.tm_year -= 1900;
+       tm.tm_mon--;
+       tm.tm_sec = sec;
+
+       return (sec - tm.tm_sec) + mktime(&tm);
+}
+#endif
+
+
+// hacky time->string conversion
+char *time2str(thread_t *t, time_t time) {
+       struct tm tm;
+
+       if ((int)time <= 0) memcpy(t->time_s, "-", sizeof("-"));
+       else {
+               localtime_r(&time, &tm);
+               strftime(t->time_s, sizeof(t->time_s), "%F %T", &tm);
+       }
+       return t->time_s;
+}
+
+
+double rtm_gettimeofday() {
+       struct timeval tv;
+
+       gettimeofday(&tv, NULL);
+       return tv.tv_sec + tv.tv_usec / 1000000.0;
+}
+
+
+void rtm_time2str(time_t t, char **str) {
+       struct tm       *tm;
+
+       if (t) {
+               tm = gmtime(&t);
+               asprintf(str,"%4d-%02d-%02d %02d:%02d:%02d",tm->tm_year+1900,tm->tm_mon+1,
+                       tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec);
+       } else
+               *str = strdup("-");
+}
+
+
+void rtm_timestamp2str(double t, char **str) {
+       time_t tsec = t;
+       struct tm *tm = gmtime(&tsec);
+
+       if (t) {
+               t = t - tsec + tm->tm_sec;
+               asprintf(str,"%4d-%02d-%02d %02d:%02d:%02.09f",tm->tm_year+1900,tm->tm_mon+1,
+                        tm->tm_mday,tm->tm_hour,tm->tm_min,t);
+       } else
+               *str = strdup("-");
+}
+
+
+int rtm_str2time(const char *s) {
+       time_t t;
+
+       if (s && memcmp(s, "-", 2) != 0) {
+               t = glite_lbu_StrToTime(s);
+               if (t == (time_t)-1) return 0;
+       } else
+               t = 0;
+
+       return t;
+}
+
+
+int rtm_str2timestamp(const char *s) {
+       double t;
+
+       if (s && memcmp(s, "-", 2) != 0) {
+               t = glite_lbu_StrToTimestamp(s);
+               if (t <= 0.5) return 0.0;
+       } else
+               t = 0.0;
+
+       return t;
+}
+
+
+int rtm_str2notiftype(const char *str) {
+       if (strcasecmp(str, "STATUS") == 0) return RTM_NOTIF_TYPE_STATUS;
+       if (strcasecmp(str, "DONE") == 0) return RTM_NOTIF_TYPE_DONE;
+       if (strcasecmp(str, "JDL") == 0) return RTM_NOTIF_TYPE_JDL;
+       if (strcasecmp(str, "OLD") == 0) return RTM_NOTIF_TYPE_OLD;
+       return -1;
+}
+
+
+const char *rtm_notiftype2str(int type) {
+       switch (type) {
+       case RTM_NOTIF_TYPE_STATUS: return "STATUS";
+       case RTM_NOTIF_TYPE_DONE: return "DONE";
+       case RTM_NOTIF_TYPE_JDL: return "JDL";
+       case RTM_NOTIF_TYPE_OLD: return "OLD";
+       default: return NULL;
+       }
+}
+
+
+void wlcg_timeval2str(struct timeval *t, char **str) {
+       struct tm       *tm;
+
+       tm = gmtime(&t->tv_sec);
+       asprintf(str,"%4d-%02d-%02dT%02d:%02d:%02dZ",tm->tm_year+1900,tm->tm_mon+1,
+               tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec);
+}
+
+
+int wlcg_store_message(thread_t *t, __attribute((unused))notif_t *notif, edg_wll_JobStat *stat) {
+       unsigned int port;
+       int status = 0;
+       char *jobid_str = NULL, *state_str = NULL, *vo = NULL, *lbhost = NULL;
+       char *wlcg_last_update_time_str = NULL, *wlcg_state_start_time_str = NULL;
+
+       jobid_str = stat->jobId ? glite_jobid_unparse(stat->jobId) : strdup("Unknown");
+       glite_jobid_getServerParts(stat->jobId, &lbhost, &port);
+       state_str = edg_wll_StatToString(stat->state);
+       vo = edg_wll_JDLField(stat,"VirtualOrganisation") ? : strdup("Unknown");
+
+       if (!t->dash_filename || !t->dash_fd) {
+               free(t->dash_filename);
+               asprintf(&t->dash_filename, WLCG_FILENAME_TEMPLATE, t->id);
+               if ((t->dash_fd = mkstemp(t->dash_filename)) == -1) {
+                       status = errno;
+                       lprintf(t, ERR, "can't create temporary file '%s': %s", t->dash_filename, strerror(status));
+                       free(t->dash_filename);
+                       t->dash_filename = NULL;
+                       goto quit;
+               }
+       }
+
+       wlcg_timeval2str(&stat->lastUpdateTime, &wlcg_last_update_time_str);
+       wlcg_timeval2str(&stat->stateEnterTime, &wlcg_state_start_time_str);
+
+       dprintf(t->dash_fd, "jobId: %s\n\
+stateName: %s\n\
+ownerDN: %s\n\
+voname: %s\n\
+bkHost: %s:%d\n\
+networkHost: %s\n\
+lastUpdateTime: %s\n\
+stateStartTime: %s\n\
+exitCode: %d\n\
+DoneCode: %d\n\
+destSite: %s\n\
+condorId: %s\n\
+StatusReason: %s\n\
+EOT\n", jobid_str, state_str, stat->owner, vo, lbhost, port, stat->network_server ? : "unknown", wlcg_last_update_time_str, wlcg_state_start_time_str, stat->exit_code, stat->done_code, stat->destination ? : "NULLByPublisher", stat->condorId ? : "0", stat->reason && stat->reason[strspn(stat->reason, " \t\n\r")] != '\0' ? stat->reason : "UNAVAILABLE By Publisher");
+
+       free(wlcg_last_update_time_str);
+       free(wlcg_state_start_time_str);
+quit:
+       free(jobid_str);
+       free(lbhost);
+       free(state_str);
+       free(vo);
+       return status;
+}
+
+
+int wlcg_send_message(thread_t *t) {
+       int status = 0;
+       char *command;
+
+       // WLCG message
+       if (t->dash_fd) { // send only if anything to send
+               close(t->dash_fd);
+               asprintf(&command, "'%s' -c '%s' '%s' '%s'", config.wlcg_binary, config.wlcg_config, config.wlcg_topic, t->dash_filename);
+               lprintf(t, DBG, "calling %s", command);
+               switch (vfork()) {
+               case 0:
+                       if (execlp("/bin/sh", "/bin/sh", "-c", command, NULL) == -1) {
+                               lprintf(t, ERR, "can't exec '%s':%s", command, strerror(errno));
+                       }
+                       _exit(1);
+                       break;
+               case -1:
+                       lprintf(t, ERR, "can't fork: %s", strerror(errno));
+                       break;
+               default:
+                       break;
+               }
+               wait(&status);
+               free(command);
+               if (WIFEXITED(status)) {
+                       status = WEXITSTATUS(status);
+                       if (status) {
+                               lprintf(t, WRN, "%s exited with %d", config.wlcg_binary, status);
+                       } else {
+                               lprintf(t, INF, "%s exited successfully", config.wlcg_binary);
+                               if (!config.wlcg_no_remove) remove(t->dash_filename);
+                       }
+               } else {
+                       lprintf(t, ERR, "%s not exited normally", config.wlcg_binary);
+                       status = -1;
+               }
+               free(t->dash_filename);
+               t->dash_filename = NULL;
+               t->dash_fd = 0;
+       }
+
+       return status;
+}
+
+
+void notif_free(notif_t *notif) {
+       edg_wll_NotifIdFree(notif->id);
+       free(notif->id_str);
+       free(notif->server);
+       memset(notif, 0, sizeof(notif_t));
+}
+
+
+void notif_invalidate(notif_t *notif) {
+       edg_wll_NotifIdFree(notif->id);
+       free(notif->id_str);
+       notif->id = NULL;
+       notif->id_str = NULL;
+       notif->error = 0;
+}
+
+
+int notif_copy(notif_t *dest, notif_t *src) {
+       if (!src || !dest) return EINVAL;
+       memset(dest, 0, sizeof(notif_t));
+       if (src->id) dest->id = edg_wll_NotifIdDup(src->id);
+       if (src->id_str) dest->id_str = strdup(src->id_str);
+       dest->type = src->type;
+       if (src->server) dest->server = strdup(src->server);
+       dest->port = src->port;
+       dest->valid = src->valid;
+       dest->refresh = src->refresh;
+       dest->last_update = src->last_update;
+       dest->active = src->active;
+       dest->error = src->error;
+       return 0;
+}
+
+
+#ifdef WITH_LBU_DB
+static int db_init(thread_t *t, glite_lbu_DBContext *dbctx) {
+       int err, dbcaps;
+
+       if (config.dbcs) {
+               if ((err = glite_lbu_InitDBContext(dbctx, GLITE_LBU_DB_BACKEND_PSQL)) != 0) {
+                       lprintf_dbctx(t, ERR, "can't initialize DB context");
+                       return err;
+               }
+               while ((err = glite_lbu_DBConnect(*dbctx, config.dbcs)) != 0 && !quit) {
+                       lprintf_dbctx(t, ERR, "can't connect to '%s'", config.dbcs);
+                       lprintf(t, INF, "still trying...");
+                       sleep(5);
+               }
+               if (err == 0) {
+                       if ((dbcaps = glite_lbu_DBQueryCaps(*dbctx)) == -1) {
+                               lprintf_dbctx(t, ERR, "can't get database capabilities");
+                               dbcaps = 0;
+                       }
+                       lprintf(t, INF, "DB connected, cs: %s, capabilities: %d", config.dbcs, dbcaps);
+                       if (t == NULL && (dbcaps & GLITE_LBU_DB_CAP_PREPARED) == 0) {
+                               lprintf(NULL, WRN, "postgresql server doesn't support SQL prepared commands, recommended version >= 8.2");
+                       }
+                       if (t) t->dbcaps = dbcaps;
+                       return 0;
+               } else {
+                       glite_lbu_FreeDBContext(*dbctx);
+                       return err;
+               }
+       } else {
+               lprintf(t, DBG, "no DB configured (--pg option)");
+               return -1;
+       }
+}
+
+
+static void db_free(__attribute((unused))thread_t *t, glite_lbu_DBContext dbctx) {
+       if (dbctx) {
+               glite_lbu_DBClose(dbctx);
+               glite_lbu_FreeDBContext(dbctx);
+       }
+}
+#endif
+
+
+static notif_t *db_add_notif(char *notifid, int type, time_t valid, time_t refresh, double last_update, char *server, int port, int active, int errors) {
+       void *tmp;
+       notif_t *notif;
+
+       if (db.n >= db.maxn) {
+               db.maxn = db.n + 20;
+               if ((tmp = realloc(db.notifs, db.maxn * sizeof(notif_t))) == NULL) return NULL;
+               db.notifs = (notif_t *)tmp;
+               memset(db.notifs + db.n, 0, (db.maxn - db.n) * sizeof(notif_t));
+       }
+       notif = db.notifs + db.n;
+       notif->id_str = notifid;
+       notif->type = type;
+       notif->valid = valid;
+       notif->refresh = refresh;
+       notif->last_update = last_update;
+       notif->server = server;
+       notif->port = port;
+       notif->active = active;
+       notif->error = errors;
+       db.n++;
+
+       return notif;
+}
+
+
+static int db_save_notifs_file(thread_t *t) {
+       FILE *f;
+       char *filename = NULL;
+       int retval = 1;
+       notif_t *notif;
+       int i;
+       char *valid_str = NULL, *refresh_str = NULL, *last_update_str = NULL, *id_str = NULL;
+
+       asprintf(&filename, "%s-new", config.notif_file);
+       if ((f = fopen(filename, "wt")) == NULL) {
+               lprintf(t, ERR, "can't write '%s': %s", filename, strerror(errno));
+               goto quit;
+       }
+
+       for (i = 0; i < db.n; i++) {
+               notif = db.notifs + i;
+               if (!notif->active) {
+                       lprintf(t, DBG, "not saving inactive notif %s (%s), server %s:%d", notif->id_str, rtm_notiftype2str(notif->type), notif->server, notif->port);
+                       continue;
+               }
+
+               if (notif->id_str) id_str = strdup(notif->id_str);
+               else if (notif->error) asprintf(&id_str, "%s:%d", notif->server, notif->port);
+               if (id_str) {
+                       rtm_time2str(notif->valid, &valid_str);
+                       rtm_time2str(notif->refresh, &refresh_str);
+                       rtm_timestamp2str(notif->last_update, &last_update_str);
+
+                       fprintf(f, RTM_FILE_NOTIF_PRINTF, id_str, rtm_notiftype2str(notif->type), valid_str, refresh_str, last_update_str, notif->error);
+
+                       free(valid_str); valid_str = NULL;
+                       free(refresh_str); refresh_str = NULL;
+                       free(last_update_str); last_update_str = NULL;
+               }
+               free(id_str);
+               id_str = NULL;
+       }
+       fclose(f);
+       if (rename(filename, config.notif_file) != 0) {
+               lprintf(t, ERR, "can't move new notification file '%s' to '%s': %s", filename, config.notif_file, strerror(errno));
+               goto quit;
+       }
+       retval = 0;
+quit:
+       free(filename);
+       free(valid_str);
+       free(refresh_str);
+       free(last_update_str);
+       return 0;
+}
+
+
+#if defined(WITH_RTM_SQL_STORAGE) && defined(WITH_LBU_DB)
+static int db_save_notifs_sql(thread_t *t) {
+       int retval = 1;
+       notif_t *notif;
+       int i;
+       char *sql = NULL, *valid_str = NULL, *refresh_str = NULL, *last_update_str = NULL;
+       const char *type_str, *amp;
+
+       for (i = 0; i < db.n; i++) {
+               notif = db.notifs + i;
+/*
+               if (!notif->active) {
+                       lprintf(t, INS, "not saving inactive notif %s (%s:%d)", notif->id_str, notif->server, notif->port);
+                       continue;
+               }
+*/
+               type_str = rtm_notiftype2str(notif->type);
+               if (notif->id_str || notif->error) {
+                       if (notif->valid) glite_lbu_TimeToDB(db.dbctx, notif->valid, &valid_str);
+                       else valid_str = strdup("NULL");
+                       if (notif->refresh) glite_lbu_TimeToDB(db.dbctx, notif->refresh, &refresh_str);
+                       else refresh_str = strdup("NULL");
+                       if (notif->last_update) glite_lbu_TimestampToDB(db.dbctx, notif->last_update, &last_update_str);
+                       else last_update_str = strdup("NULL");
+                       amp = notif->id_str ? "'" : " ";
+                       trio_asprintf(&sql, "UPDATE notifs SET notifid=%s%|Ss%s, valid=%s, refresh=%s, last_update=%s, errors=%d WHERE lb='%|Ss' AND port=%d AND notiftype='%|Ss'", amp, notif->id_str ? : "NULL", amp, valid_str, refresh_str, last_update_str, notif->error, notif->server, notif->port, type_str);
+                       switch (glite_lbu_ExecSQL(db.dbctx, sql, NULL)) {
+                       case 0:
+                               // not found - insert
+                               // can be handy when using file as input of LBs
+                               free(sql);
+                               trio_asprintf(&sql, "INSERT INTO notifs (lb, port, notifid, notiftype, valid, refresh, last_update, errors) VALUES ('%|Ss', %d, %s%|Ss%s, '%|Ss', %s, %s, %s, %d)", notif->server, notif->port, amp, notif->id_str ? : "NULL", amp, type_str, valid_str, refresh_str, last_update_str, notif->error);
+                               switch (glite_lbu_ExecSQL(db.dbctx, sql, NULL)) {
+                               case -1:
+                                       lprintf_dbctx(t, ERR, "notif '%s' (%s) insert failed", notif->id_str, type_str);
+                                       goto quit;
+                               case 0:
+                                       lprintf(t, ERR, "notif '%s' (%s) not inserted for unknown reason", type_str);
+                                       break;
+                               default:
+                                       lprintf(t, INS, "notif '%s' (%s) inserted", notif->id_str, type_str);
+                                       break;
+                               }
+                               break;
+                       case -1:
+                               lprintf_dbctx(t, ERR, "notif '%s' (%s) update failed", notif->id_str, type_str);
+                               goto quit;
+                       default:
+                               lprintf(t, INS, "notif '%s' updated", notif->id_str);
+                               break;
+                       }
+               } else {
+                       trio_asprintf(&sql, "UPDATE notifs SET notifid=NULL, valid=NULL, refresh=NULL, last_update=NULL WHERE lb='%|Ss' AND port=%d AND notiftype='%|Ss'", notif->server, notif->port, type_str);
+                       switch (glite_lbu_ExecSQL(db.dbctx, sql, NULL)) {
+                       case 0:
+                               lprintf(t, INS, "cleared %s notif for %s:%d not found, ok", type_str, notif->server, notif->port);
+                               break;
+                       case -1:
+                               lprintf_dbctx(t, ERR, "clearing notif %s for %s:%d failed", type_str, notif->server, notif->port);
+                               goto quit;
+                       default:
+                               lprintf(t, INS, "cleared notif %s for %s:%d", type_str, notif->server, notif->port);
+                               break;
+                       }
+               }
+               free(sql); sql = NULL;
+               free(valid_str); valid_str = NULL;
+               free(refresh_str); refresh_str = NULL;
+               free(last_update_str); last_update_str = NULL;
+       }
+       retval = 0;
+quit:
+       free(sql);
+       free(valid_str);
+       free(refresh_str);
+       free(last_update_str);
+       return 0;
+}
+#endif
+
+
+static int db_save_notifs(thread_t *t) {
+#if 0
+       int i;
+
+       for (i = 0; i < db.n; i++) {
+               notif_t *notif = db.notifs + i;
+               lprintf(NULL, DBG, "save: %s (%s), server: %s:%d, active: %d", notif->id_str, rtm_notiftype2str(notif->type), notif->server, notif->port, notif->active);
+       }
+#endif
+
+#if defined(WITH_LBU_DB)
+       int i, ret;
+       notif_t *notif;
+
+       //
+       // Keep monitored flag when:
+       // 1) used and opened DB
+       // 2) LB servers not from config file
+       //
+       if (t && t->dbctx && !config.config_file) {
+               for (i = 0; i < t->nservers; i++) {
+                       notif = t->notifs + i;
+
+                       if (notif->type == RTM_NOTIF_TYPE_OLD || notif->type == RTM_NOTIF_TYPE_JDL) {
+                               lprintf(t, DBG, "changing monitored flag of %d. notification for %s:%d to %d", i, notif->server, notif->port, notif->error ? 0 : 1);
+                               if ((t->dbcaps & GLITE_LBU_DB_CAP_PREPARED) == 0) {
+                                       char *sql;
+
+                                       trio_asprintf(&sql, "UPDATE " DBAMP RTM_DB_TABLE_LBS DBAMP " SET monitored=%s WHERE ip='%|Ss'", notif->error ? "false" : "true", notif->server);
+                                       ret = glite_lbu_ExecSQL(t->dbctx, sql, NULL);
+                                       free(sql);
+                               } else {
+                                       ret = glite_lbu_ExecPreparedStmt(t->updatecmd_mon, 2,
+                                               GLITE_LBU_DB_TYPE_BOOLEAN, notif->error ? 0 : 1,
+                                               GLITE_LBU_DB_TYPE_VARCHAR, notif->server
+                                       );
+                               }
+                               if (ret == -1) {
+                                       lprintf_dbctx(t, ERR, "can't update monitored flag in " RTM_DB_TABLE_LBS " table");
+                                       return 1;
+                               }
+                       }
+               }
+       }
+#endif
+
+#if defined(WITH_RTM_SQL_STORAGE) && defined(WITH_LBU_DB)
+       if (!db.dbctx) return db_save_notifs_file(t);
+       else return db_save_notifs_sql(t);
+#else
+       return db_save_notifs_file(t);
+#endif
+}
+
+
+static notif_t *db_search_notif(notif_t *notifs, int n, const char *notifid) {
+       int i;
+
+       for (i = 0; i < n && (!notifs[i].id_str || strcmp(notifs[i].id_str, notifid) != 0); i++);
+       return i == n ? NULL : notifs + i;
+}
+
+
+static notif_t *db_search_notif_by_server(notif_t *notifs, int n, const char *server, unsigned int port, int type) {
+       int i;
+
+       for (i = 0; i < n; i++) {
+               if (strcmp(notifs[i].server, server) == 0 && notifs[i].port == port && notifs[i].type == type) break;
+       }
+
+       return i == n ? NULL : notifs + i;
+}
+
+
+static int db_store_change(__attribute((unused))thread_t *t, notif_t *notif, __attribute((unused))int index, edg_wll_JobStat *stat) {
+       char *jobid_str = NULL, *state_str = NULL, *sql = NULL, *sql2 = NULL, *state_entered_str = NULL, *rtm_timestamp_str = NULL, *lbhost = NULL, *unique_str = NULL, *regtime_str = NULL,*vo = NULL;
+       unsigned int port;
+
+       jobid_str = stat->jobId ? glite_jobid_unparse(stat->jobId) : strdup("unknown");
+       glite_jobid_getServerParts(stat->jobId, &lbhost, &port);
+       unique_str = glite_jobid_getUnique(stat->jobId);
+       state_str = edg_wll_StatToString(stat->state);
+       vo = edg_wll_JDLField(stat,"VirtualOrganisation");
+       printf(RTM_TTY_GREEN "notifid: %s (%s), jobid: %s, state: %s, vo: %s, last time: %lf" RTM_TTY_RST "\n", notif->id_str, rtm_notiftype2str(notif->type), jobid_str, state_str, vo, notif->last_update);
+
+#ifdef WITH_LBU_DB
+       if (config.dbcs && t->dbctx) {
+               double state_entered, rtm_timestamp;
+               char *ce, *queue, *colon, *sql_part;
+               const char *rb, *ui, *state, *active, *state_changed, *lb;
+               time_t registered;
+
+               ce = stat->destination ? : "unknown";
+               queue = strchr(ce, '/');
+               if (queue) *queue++='\0';
+               else queue = "unknown";
+               colon = strchr(ce, ':');
+               if (colon) colon[0] = '\0';
+               rb = stat->network_server ? : "unknown";
+               ui = stat->ui_host ? : "unknown";
+               state = state_str ? : "unknown";
+               state_entered = stat->stateEnterTime.tv_sec + stat->stateEnterTime.tv_usec / 1000000.0;
+               rtm_timestamp = rtm_gettimeofday();
+               registered = stat->stateEnterTimes[1 + EDG_WLL_JOB_SUBMITTED];
+               lb = lbhost;
+               active = "true";
+               state_changed = "true";
+
+               if ((t->dbcaps & GLITE_LBU_DB_CAP_PREPARED) == 0) {
+
+               glite_lbu_TimestampToDB(t->dbctx, state_entered, &state_entered_str);
+               glite_lbu_TimestampToDB(t->dbctx, rtm_timestamp, &rtm_timestamp_str);
+               glite_lbu_TimeToDB(t->dbctx, registered, &regtime_str);
+
+               if (vo) trio_asprintf(&sql_part, ", vo='%|Ss' ", vo);
+               else sql_part = strdup("");
+               trio_asprintf(&sql, "UPDATE " RTM_DB_TABLE_JOBS " SET ce='%|Ss', queue='%|Ss', rb='%|Ss', ui='%|Ss', state='%|Ss', state_entered=%s, rtm_timestamp=%s, active=%s, state_changed=%s, registered=%s%sWHERE jobid='%|Ss' AND lb='%|Ss'", ce, queue, rb, ui, state, state_entered_str, rtm_timestamp_str, active, state_changed, regtime_str, sql_part, unique_str, lb);
+               free(sql_part);
+               lprintf(t, INS, "update: %s", sql);
+               switch (glite_lbu_ExecSQL(t->dbctx, sql, NULL)) {
+               case -1:
+                       lprintf_dbctx(t, ERR, "can't get jobs");
+                       goto quit;
+               case 0:
+                       trio_asprintf(&sql2, "INSERT INTO " RTM_DB_TABLE_JOBS " "
+                               "(ce, queue, rb, ui, state, state_entered, rtm_timestamp, jobid, lb, active, state_changed, registered, vo) VALUES "
+                               "('%|Ss', '%|Ss', '%|Ss', '%|Ss', '%|Ss', %s, %s, '%|Ss', '%|Ss', %s, %s, %s, '%|Ss')", ce, queue, rb, ui, state, state_entered_str, rtm_timestamp_str, unique_str, lb, active, state_changed, regtime_str, vo ? : "unknown");
+                       lprintf(t, INS, "insert: %s", sql2);
+                       if (glite_lbu_ExecSQL(t->dbctx, sql2, NULL) == -1) {
+                               lprintf_dbctx(t, ERR, "can't insert job");
+                               goto quit;
+                       }
+                       break;
+               default:
+                       break;
+               }
+
+               } else { // prepared commands
+                       int ret;
+
+                       if (vo) {
+                               ret = glite_lbu_ExecPreparedStmt(t->updatecmd_vo, 13,
+                                       GLITE_LBU_DB_TYPE_VARCHAR, ce,
+                                       GLITE_LBU_DB_TYPE_VARCHAR, queue,
+                                       GLITE_LBU_DB_TYPE_VARCHAR, rb,
+                                       GLITE_LBU_DB_TYPE_VARCHAR, ui,
+                                       GLITE_LBU_DB_TYPE_VARCHAR, state,
+                                       GLITE_LBU_DB_TYPE_TIMESTAMP, state_entered,
+                                       GLITE_LBU_DB_TYPE_TIMESTAMP, rtm_timestamp,
+                                       GLITE_LBU_DB_TYPE_BOOLEAN, 1, // active
+                                       GLITE_LBU_DB_TYPE_BOOLEAN, 1, // state_changed
+                                       GLITE_LBU_DB_TYPE_TIMESTAMP, (double)registered,
+                                       GLITE_LBU_DB_TYPE_VARCHAR, vo, // VO
+
+                                       GLITE_LBU_DB_TYPE_VARCHAR, unique_str, // jobid
+                                       GLITE_LBU_DB_TYPE_VARCHAR, lb // L&B server
+                               );
+                       } else {
+                               ret = glite_lbu_ExecPreparedStmt(t->updatecmd, 12,
+                                       GLITE_LBU_DB_TYPE_VARCHAR, ce,
+                                       GLITE_LBU_DB_TYPE_VARCHAR, queue,
+                                       GLITE_LBU_DB_TYPE_VARCHAR, rb,
+                                       GLITE_LBU_DB_TYPE_VARCHAR, ui,
+                                       GLITE_LBU_DB_TYPE_VARCHAR, state,
+                                       GLITE_LBU_DB_TYPE_TIMESTAMP, state_entered,
+                                       GLITE_LBU_DB_TYPE_TIMESTAMP, rtm_timestamp,
+                                       GLITE_LBU_DB_TYPE_BOOLEAN, 1, // active
+                                       GLITE_LBU_DB_TYPE_BOOLEAN, 1, // state_changed
+                                       GLITE_LBU_DB_TYPE_TIMESTAMP, (double)registered,
+
+                                       GLITE_LBU_DB_TYPE_VARCHAR, unique_str, // jobid
+                                       GLITE_LBU_DB_TYPE_VARCHAR, lb // L&B server
+                               );
+                       }
+
+                       switch (ret) {
+                       case -1:
+                               lprintf_dbctx(t, ERR, "can't update " RTM_DB_TABLE_JOBS " table");
+                               goto quit;
+                       case 0:
+                               if (glite_lbu_ExecPreparedStmt(t->insertcmd, 13,
+                                       GLITE_LBU_DB_TYPE_VARCHAR, ce,
+                                       GLITE_LBU_DB_TYPE_VARCHAR, queue,
+                                       GLITE_LBU_DB_TYPE_VARCHAR, rb,
+                                       GLITE_LBU_DB_TYPE_VARCHAR, ui,
+                                       GLITE_LBU_DB_TYPE_VARCHAR, state,
+                                       GLITE_LBU_DB_TYPE_TIMESTAMP, state_entered,
+                                       GLITE_LBU_DB_TYPE_TIMESTAMP, rtm_timestamp,
+                                       GLITE_LBU_DB_TYPE_VARCHAR, unique_str, // jobid
+                                       GLITE_LBU_DB_TYPE_VARCHAR, lb, // L&B server
+                                       GLITE_LBU_DB_TYPE_BOOLEAN, 1, // active
+                                       GLITE_LBU_DB_TYPE_BOOLEAN, 1, // state_changed
+                                       GLITE_LBU_DB_TYPE_TIMESTAMP, (double)registered,
+                                       GLITE_LBU_DB_TYPE_VARCHAR, vo ? : "unknown" // VO
+                               ) == -1) {
+                                       lprintf_dbctx(t, ERR, "can't insert to " RTM_DB_TABLE_JOBS " table");
+                                       goto quit;
+                               }
+                               break;
+                       default:
+                               break;
+                       }
+               } // prepare commands
+
+       }
+#endif
+
+       // store message
+       if (config.wlcg) {
+               if (wlcg_store_message(t, notif, stat) != 0) goto quit;
+               if (config.wlcg_flush) wlcg_send_message(t);
+       }
+
+quit:
+       free(jobid_str);
+       free(state_str);
+       free(sql);
+       free(sql2);
+       free(state_entered_str);
+       free(rtm_timestamp_str);
+       free(lbhost);
+       free(unique_str);
+       free(regtime_str);
+       free(vo);
+
+       return 0;
+}
+
+
+static int db_summary_getjobids(__attribute((unused))db_t *db, __attribute((unused))int maxn, __attribute((unused))char **jobids, int *n) {
+/*
+       switch (db->was_summary) {
+       case 0:
+               *n = 3;
+               jobids[0] = strdup("https://skurut68-2.cesnet.cz:9000/FJldtiAR2EHC12C3Zz8WjQ");
+               jobids[1] = strdup("https://skurut68-2.cesnet.cz:9000/AWTCWrUCr3uUh6cuRFaENQ");
+               jobids[2] = strdup("https://skurut68-1.cesnet.cz:9000/o73CG2wrNdEQ909mG0Ac1g");
+               break;
+       case 1:
+               *n = 1;
+               jobids[0] = strdup("https://skurut68-2.cesnet.cz:9000/-46Qa2ag4gLsA_Ki-3bSLw");
+
+               break;
+       default: *n = 0; break;
+       }
+       db->was_summary = (db->was_summary + 1) % 3;
+       return 0;
+*/
+       *n = 0;
+       return 0;
+}
+
+
+static int db_summary_setinfo(__attribute((unused))db_t *db, edg_wll_JobStat *stat) {
+       char *jobidstr;
+
+       jobidstr = stat->jobId ? glite_jobid_unparse(stat->jobId) : NULL;
+       printf(RTM_TTY_GREEN "summary: jobid='%s'" RTM_TTY_RST "\n", jobidstr);
+       free(jobidstr);
+       return 0;
+}
+
+
+int rtm_summary(edg_wll_Context ctx, db_t *db) {
+       char *jobids[RTM_SUMMARY_JOBS];
+       edg_wll_QueryRec lbquery[RTM_SUMMARY_JOBS + 1], *qr;
+       const edg_wll_QueryRec *lbqueryext[2];
+       edg_wll_JobStat *jobstates = NULL;
+       int err = 0, ijob = 0, njobs = 0, iquery = 0, k, server_changed = 0;
+       glite_jobid_t jid = NULL;
+       char *server = NULL, *new_server = NULL;
+       unsigned int port = 0, new_port = 0;
+
+       lprintf(NULL, INS, "Summary");
+
+       lbqueryext[0] = lbquery;
+       lbqueryext[1] = NULL;
+       memset(lbquery, 0, sizeof(lbquery));
+
+       do {
+               if (server) {
+
+               if ((iquery >= RTM_SUMMARY_JOBS || server_changed || !njobs) && iquery) {
+                       if ((err = edg_wll_QueryJobsExt(ctx, lbqueryext, 0, NULL, &jobstates)) != 0) {
+                               lprintf_ctx(NULL, ERR, ctx, "query to '%s:%u' failed: %s", server, port, strerror(err));
+                               // report error jobids and skip the job (do nothing)
+                               // TODO
+                       }
+                       for (k = 0; k < iquery; k++) glite_jobid_free(lbquery[k].value.j);
+
+                       if (err == 0) {
+                               for (k = 0; jobstates[k].state != EDG_WLL_JOB_UNDEF; k++) {
+                                       if ((err = db_summary_setinfo(db, jobstates + k)) != 0) lprintf(NULL, ERR, "Can't store %d. summary info for %s:%u", k, server, port);
+                                       edg_wll_FreeStatus(jobstates + k);
+                               }
+                               free(jobstates);
+                               lprintf(NULL, DBG, "query to '%s:%u' succeed", server, port);
+                       }
+
+                       iquery = 0;
+                       memset(lbquery, 0, sizeof(lbquery));
+                       if (!njobs) break; // not needed, just spare summary select
+
+                       server_changed = 0;
+               } else {
+                       lprintf(NULL, DBG, "summary pushed %d. %s\n", iquery, jobids[ijob]);
+                       qr = lbquery + iquery;
+                       iquery++;
+                       qr->attr = EDG_WLL_QUERY_ATTR_JOBID;
+                       qr->op = EDG_WLL_QUERY_OP_EQUAL;
+                       glite_jobid_parse(jobids[ijob], &qr->value.j);
+                       free(jobids[ijob]); jobids[ijob] = NULL;
+                       ijob++;
+               }
+
+               } // server
+
+               if (ijob >= njobs) {
+                       ijob = 0;
+                       memset(jobids, 0, sizeof(jobids));
+                       njobs = 0;
+                       if ((err = db_summary_getjobids(db, RTM_SUMMARY_JOBS, jobids, &njobs)) != 0) {
+                               lprintf(NULL, ERR, "Can't get jobs for the summary");
+                               return err;
+                       }
+                       lprintf(NULL, DBG, "summary for %d jobs", njobs);
+                       if (!njobs) {
+                               if (iquery) continue; // do the last query
+                               else break;
+                       }
+               }
+
+               if ((err = glite_jobid_parse(jobids[ijob], &jid)) != 0) {
+                       lprintf(NULL, ERR, "Can't parse jobid '%s': %s", jobids[ijob], strerror(err));
+                       // report error jobid and skip the job
+                       // TODO
+                       glite_jobid_free(jid); jid = NULL;
+                       free(jobids[ijob]); jobids[ijob] = NULL;
+                       ijob++;
+                       continue;
+               }
+               free(new_server);
+               glite_jobid_getServerParts(jid, &new_server, &new_port);
+               glite_jobid_free(jid); jid = NULL;
+
+               // first or different LB server
+               if (new_server && (!server || strcmp(server, new_server) != 0 || port != new_port)) {
+                       if (server) server_changed = 1;
+
+                       free(server);
+                       server = new_server;
+                       port = new_port;
+
+                       new_server = NULL;
+                       new_port = 0;
+
+                       edg_wll_SetParam(ctx, EDG_WLL_PARAM_QUERY_SERVER, server);
+                       edg_wll_SetParam(ctx, EDG_WLL_PARAM_QUERY_SERVER_PORT, port);
+                       lprintf(NULL, INF, "summary LB server '%s:%u'", server, port);
+               }
+       } while (njobs || iquery);
+
+       free(server);
+       free(new_server);
+
+       return err;
+}
+
+
+/*
+ * Updates error counter and retry times on the notification.
+ *
+ * On errors it lineary increases delay. Minimum delay is
+ * RTM_ERROR_REPEAT_RATE, maximum is half of the configured
+ * bootstrap time.
+ *
+ * \param t            thread context
+ * \param notif                updated notification
+ * \param[IN] index    notification order (for debug printing)
+ * \param is_error[IN] error state (to reset or increment error counter)
+ *
+ */
+static int rtm_update_error_state(thread_t *t, notif_t *notif, int index, int is_error) {
+       int old_error, max_count;
+
+       old_error = notif->error;
+       if (is_error) {
+               if (!notif->error++ || !notif->refresh) notif->refresh = time(NULL);
+               max_count = config.dive / RTM_ERROR_REPEAT_RATE / 2;
+               if (max_count <= 0) max_count = 1;
+               notif->refresh += (notif->error <= max_count ? notif->error : max_count) * RTM_ERROR_REPEAT_RATE;
+               lprintf(t, DBG, "planned to retry at %s", time2str(t, notif->refresh));
+       } else {
+               notif->error = 0;
+       }
+       if (old_error != notif->error) {
+               lprintf(t, DBG, "error count of %d. server %s:%d changed from %d to %d", index, notif->server, notif->port, old_error, notif->error);
+       }
+
+       return 0;
+}
+
+
+/**
+ * Updates notifications in persistent storage. Used to send WLCG messages too.
+ *
+ * \param t    thread context
+ * \param[IN]  new_notif updating notification, NULL = no change in shared memory
+ * \param[IN]  store     0=light (just shared memory), 1=save (flush, really store)
+ * \retval 0 if OK
+ */
+int rtm_update_notif(thread_t *t, notif_t *new_notif, int store) {
+       notif_t *notif;
+       int retval = 1;
+
+       pthread_mutex_lock(&db.lock);
+
+       if (new_notif) {        
+               if ((notif = db_search_notif_by_server(db.notifs, db.n, new_notif->server, new_notif->port, new_notif->type)) == NULL) {
+                       if (db_add_notif(strdup(new_notif->id_str), new_notif->type, new_notif->valid, new_notif->refresh, new_notif->last_update, strdup(new_notif->server), new_notif->port, 1, 0) == NULL) {
+                               lprintf(t, ERR, "can't realloc");
+                               goto quit;
+                       }
+               } else {
+                       notif_free(notif);
+                       notif_copy(notif, new_notif);
+               }
+       }
+
+       wlcg_send_message(t);
+
+       if (store) {
+               if (db_save_notifs(t) != 0) goto quit;
+       }
+       retval = 0;
+       
+quit:
+       pthread_mutex_unlock(&db.lock);
+       return retval;
+}
+
+
+int rtm_drop_notif(thread_t *t, char *notifid, int store) {
+       notif_t *notif;
+       int retval = 1;
+
+       pthread_mutex_lock(&db.lock);
+       if ((notif = db_search_notif(db.notifs, db.n, notifid)) != NULL) {
+               notif_invalidate(notif);
+               if (store)
+                       if (db_save_notifs(t) != 0) goto quit;
+       }
+       retval = 0;
+quit:
+       pthread_mutex_unlock(&db.lock);
+       return retval;
+}
+
+
+int load_notifs_file() {
+       FILE *f;
+       char *results[5];
+       notif_t *new_notif;
+       int err;
+       char *notifidstr;
+       time_t valid, refresh;
+       double last_update;
+       edg_wll_NotifId id;
+       int type, i, errcnt, port;
+       int retval = 1;
+
+       if ((f = fopen(config.notif_file, "rt")) == NULL) {
+               lprintf(NULL, WRN, "WARNING: can't open notification file '%s'", config.notif_file);
+               return 0;
+       }
+
+       results[0] = malloc(RTM_FILE_NOTIF_NUM * 512);
+       for (i = 1; i < RTM_FILE_NOTIF_NUM; i++) {
+               results[i] = results[0] + i * 512;
+       }
+       while ((err = fscanf(f, RTM_FILE_NOTIF_SCANF, results[0], results[1], results[2], results[3], results[4], results[5])) == RTM_FILE_NOTIF_NUM) {
+               notifidstr = results[0];
+               if ((type = rtm_str2notiftype(results[1])) == -1) {
+                       lprintf(NULL, ERR, "unknown notification type '%s' in '%s'", results[1], notifidstr);
+                       continue;
+               }
+
+               valid = rtm_str2time(results[2]);
+               refresh = rtm_str2time(results[3]);
+               last_update = rtm_str2timestamp(results[4]);
+
+               errcnt = 0;
+               if (results[5] && strcasecmp(results[5], "-") != 0) {
+                       errcnt = atoi(results[5]);
+               }
+
+               if (errcnt) {
+                       if (sscanf(notifidstr, "%511[^:]:%d", results[1], &port) != 2) {
+                               lprintf(NULL, WRN, "can't parse server specification '%s'", notifidstr);
+                               continue;
+                       }
+                       if ((new_notif = db_add_notif(NULL, type, valid, refresh, last_update, strdup(results[1]), port, 0, errcnt)) == NULL) {
+                               lprintf(NULL, ERR, "can't alloc");
+                               goto quit;
+                       }
+               } else {
+                       if (edg_wll_NotifIdParse(notifidstr, &id) != 0) {
+                               lprintf(NULL, WRN, "can't parse notification ID '%s'", notifidstr);
+                               continue;
+                       }
+                       if ((new_notif = db_add_notif(strdup(notifidstr), type, valid, refresh, last_update, NULL, 0, 0, errcnt)) == NULL) {
+                               lprintf(NULL, ERR, "can't alloc");
+                               goto quit;
+                       }
+                       edg_wll_NotifIdGetServerParts(id, &new_notif->server, &new_notif->port);
+                       edg_wll_NotifIdFree(id);
+               }
+       }
+       if (err == EOF) retval = 0;
+       else lprintf(NULL, ERR, "can't parse notification file '%s'", config.notif_file);
+quit:
+       fclose(f);
+       free(results[0]);
+       return retval;
+}
+
+
+#if defined(WITH_RTM_SQL_STORAGE) && defined(WITH_LBU_DB)
+int load_notifs_sql() {
+       notif_t *new_notif;
+       int err;
+       char *notifidstr;
+       time_t valid, refresh;
+       double last_update;
+       edg_wll_NotifId id;
+       int type, i, errcnt;
+       int retval = 1;
+       glite_lbu_Statement stmt = NULL;
+       char *results[8];
+
+       if (glite_lbu_ExecSQL(db.dbctx, "SELECT notifid, notiftype, valid, refresh, last_update, errors, lb, port FROM notifs", &stmt) == -1) {
+               lprintf_dbctx(NULL, ERR, "fetching notification failed");
+               goto quit;
+       }
+       while ((err = glite_lbu_FetchRow(stmt, 8, NULL, results)) > 0) {
+               if (results[0] && results[0][0]) notifidstr = strdup(results[0]);
+               else notifidstr = NULL;
+               free(results[0]);
+               results[0] = NULL;
+
+               if ((type = rtm_str2notiftype(results[1])) == -1) {
+                       lprintf(NULL, ERR, "unknown notification type '%s' in '%s'", results[1], notifidstr);
+                       for (i = 0; i < 8; i++) free(results[i]);
+                       free(notifidstr);
+                       continue;
+               }
+               free(results[1]);
+
+               valid = 0;
+               if (results[2] && results[2][0]) {
+                       valid = glite_lbu_DBToTime(db.dbctx, results[2]);
+               }
+               free(results[2]);
+
+               refresh = 0;
+               if (results[3] && results[3][0]) {
+                       refresh = glite_lbu_DBToTime(db.dbctx, results[3]);
+               }
+               free(results[3]);
+
+               last_update = 0;
+               if (results[4] && results[4][0]) {
+                       last_update = glite_lbu_DBToTimestamp(db.dbctx, results[4]);
+               }
+               free(results[4]);
+
+               errcnt = 0;
+               if (results[5] && results[5][0]) errcnt = atoi(results[5]);
+               free(results[5]);
+
+               if ((new_notif = db_add_notif(notifidstr, type, valid, refresh, last_update, (results[6] && !notifidstr) ? strdup(results[6]) : NULL, atoi(results[7]), 0, errcnt)) == NULL) {
+                       free(notifidstr);
+                       free(results[6]);
+                       free(results[7]);
+                       lprintf(NULL, ERR, "can't alloc");
+                       goto quit;
+               }
+               free(results[6]);
+               free(results[7]);
+               if (notifidstr) {
+                       if (edg_wll_NotifIdParse(notifidstr, &id) != 0) {
+                               lprintf(NULL, WRN, "can't parse notification IDs '%s'", notifidstr);
+                               notif_free(new_notif);
+                               db.n--;
+                               continue;
+                       }
+                       edg_wll_NotifIdGetServerParts(id, &new_notif->server, &new_notif->port);
+                       edg_wll_NotifIdFree(id);
+               }
+       }
+       if (err == 0) retval = 0;
+       else lprintf_dbctx(NULL, ERR, "fetching failed");
+quit:
+       if (stmt) glite_lbu_FreeStmt(&stmt);
+       return retval;
+}
+#endif
+
+
+int load_notifs() {
+       int i, ret;
+
+       pthread_mutex_lock(&db.lock);
+
+#if defined(WITH_RTM_SQL_STORAGE) && defined(WITH_LBU_DB)
+       if (!db.dbctx) ret = load_notifs_file();
+       else ret = load_notifs_sql();
+#else
+       ret = load_notifs_file();
+#endif
+       // try to reconnect on bad notifications immediately
+       for (i = 0; i < db.n; i++)
+               if (db.notifs[i].error) db.notifs[i].refresh = 0;
+
+       pthread_mutex_unlock(&db.lock);
+
+       return ret;
+}
+
+
+void db_free_notifs() {
+       int i;
+
+       for (i = 0; i < db.n; i++) notif_free(db.notifs + i);
+       free(db.notifs);
+       db.notifs = NULL;
+       db.n = db.maxn = 0;
+}
+
+
+void *notify_thread(void *thread_data) {
+       struct sockaddr_in addr;
+       int i, j, err;
+       time_t now, bootstrap;
+       edg_wll_NotifId notifid;
+       struct timeval to;
+       edg_wll_JobStat jobstat, *jobstates;
+       notif_t *notif, *notif_jdl;
+       edg_wll_QueryRec *conditions[3] = { NULL, NULL, NULL }, condition[2], condition2[2];
+       int sock = -1, updated = 0, error = 0, received = 0;
+       thread_t *t = (thread_t *)thread_data;
+       edg_wll_Context ctx = NULL;
+       int flags = 0;
+
+       const int       one = 1;
+
+       lprintf(t, DBG, "thread started");
+
+       if (!t->nservers) goto exit;
+
+       // LB
+       if (edg_wll_InitContext(&ctx) != 0) {
+               lprintf(t, ERR, "can't init LB context: %s", strerror(errno));
+               goto exit;
+       }
+       if (config.cert) edg_wll_SetParam(ctx, EDG_WLL_PARAM_X509_CERT, config.cert);
+       if (config.key) edg_wll_SetParam(ctx, EDG_WLL_PARAM_X509_KEY, config.key);
+
+       // socket
+       if ((sock = socket(PF_INET, SOCK_STREAM, 0)) < 0) {
+               lprintf(t, ERR, "can't create socket: %s", strerror(errno));
+               goto exit;
+       }
+       lprintf(t, DBG, "socket created: %d", sock);
+
+       setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
+
+       memset(&addr, 0, sizeof addr);
+       addr.sin_family = AF_INET;
+       if (listen_port) addr.sin_port = htons(listen_port + t->id);
+       addr.sin_addr.s_addr = INADDR_ANY;
+       if (bind(sock, (const struct sockaddr*)&addr, sizeof addr) != 0) {
+               lprintf(t, ERR, "can't bind socket: %s, port = %d", strerror(errno), listen_port ? listen_port + t->id : -1);
+               goto exit;
+       }
+       if (listen(sock, 10) != 0) {
+               lprintf(t, ERR, "can't listen on socket: %s", strerror(errno));
+               goto exit;
+       }
+
+#ifdef WITH_LBU_DB
+       if (db_init(t, &t->dbctx) == 0)
+               if ((t->dbcaps & GLITE_LBU_DB_CAP_PREPARED) != 0) {
+                       if (glite_lbu_PrepareStmt(t->dbctx, "INSERT INTO " DBAMP RTM_DB_TABLE_JOBS DBAMP " "
+                           "(ce, queue, rb, ui, state, state_entered, rtm_timestamp, jobid, lb, active, state_changed, registered, vo)"
+                           " VALUES "
+                           "($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13)",
+                       &t->insertcmd) != 0 || glite_lbu_PrepareStmt(t->dbctx, "UPDATE " DBAMP RTM_DB_TABLE_JOBS DBAMP " "
+                           "SET ce=$1, queue=$2, rb=$3, ui=$4, state=$5, state_entered=$6, rtm_timestamp=$7, active=$8, state_changed=$9, registered=$10 WHERE jobid=$11 AND lb=$12", 
+                       &t->updatecmd) != 0 || glite_lbu_PrepareStmt(t->dbctx, "UPDATE " DBAMP RTM_DB_TABLE_JOBS DBAMP " "
+                           "SET ce=$1, queue=$2, rb=$3, ui=$4, state=$5, state_entered=$6, rtm_timestamp=$7, active=$8, state_changed=$9, registered=$10, vo=$11 WHERE jobid=$12 AND lb=$13", 
+                       &t->updatecmd_vo) != 0 || glite_lbu_PrepareStmt(t->dbctx, "UPDATE " DBAMP RTM_DB_TABLE_LBS DBAMP " "
+                           "SET monitored=$1 WHERE ip=$2",
+                       &t->updatecmd_mon)) {
+                               lprintf_dbctx(t, ERR, "can't create prepare commands");
+                               lprintf(t, DBG, "insertcmd=%p, updatecmd=%p, updatecmd_vo=%p, updatecmd_mon=%p", t->insertcmd, t->updatecmd, t->updatecmd_vo, t->updatecmd_mon);
+                               quit = RTM_QUIT_PRESERVE;
+                       }
+               }
+#endif
+
+       //
+       // notifications loop:
+       //   - refresh/create with bootstrap
+       //   - receive & store changes
+       //
+       while (!quit) {
+               now = time(NULL);
+               t->next_refresh = now + RTM_NOTIF_LOOP_MAX_TIME;
+               for (i = 0; i < t->nservers; i++) {
+                       notif = t->notifs + i;
+                       if (!notif->active) {
+                               lprintf(t, INS, "inactive %d. notification '%s' (%s)", i, notif->id_str, rtm_notiftype2str(notif->type));
+                               continue;
+                       }
+                       // skip invalid LBs if not planned yet
+                       if (notif->error) {
+                               if (notif->refresh > now) {
+                                       lprintf(t, INS, "not planned to retry previously failed %d. notification '%s' (%s), plan %s", i, notif->id_str, rtm_notiftype2str(notif->type), time2str(t, notif->refresh));
+                                       if (t->next_refresh > notif->refresh) t->next_refresh = notif->refresh;
+                                       continue;
+                               }
+                               lprintf(t, DBG, "retry previously failed %d. notification '%s' (%s)", i, notif->id_str, rtm_notiftype2str(notif->type));
+                       }
+                       edg_wll_SetParam(ctx, EDG_WLL_PARAM_NOTIF_SERVER, notif->server);
+                       edg_wll_SetParam(ctx, EDG_WLL_PARAM_NOTIF_SERVER_PORT, notif->port);
+                       now = time(NULL);
+                       if (!notif->valid || notif->valid - RTM_NOTIF_TTL_TO_DEAD <= now || !notif->id_str) {
+                       // new notification
+                               lprintf(t, DBG, "host %s:%d, valid %s, notifstr '%s', notifid %p", notif->server, notif->port, time2str(t, notif->valid), notif->id_str, notif->id);
+
+                               // crazy inter-notif interactions
+                               switch (notif->type) {
+                               case RTM_NOTIF_TYPE_STATUS:
+                                       // STATUS must wait for existing JDL notification
+                                       notif_jdl = db_search_notif_by_server(t->notifs, t->nservers, notif->server, notif->port, RTM_NOTIF_TYPE_JDL);
+                                       if (!notif_jdl || !notif_jdl->valid || notif_jdl->valid - RTM_NOTIF_TTL_TO_DEAD <= now || !notif_jdl->id_str) {
+                                               lprintf(t, DBG, "not created %d. notification for %s:%d (%s), waiting for %d. (JDL)", i, notif->server, notif->port, rtm_notiftype2str(notif->type), i + RTM_NOTIF_TYPE_JDL - RTM_NOTIF_TYPE_STATUS);
+                                               // next retry of STATUS stright before the JDL
+                                               if (notif_jdl) {
+                                                       notif->refresh = notif_jdl->refresh;
+                                                       if (t->next_refresh > notif->refresh) t->next_refresh = notif->refresh;
+                                               }
+                                               continue;
+                                       }
+                                       break;
+                               default:
+                                       break;
+                               }
+                               bootstrap = notif->valid > RTM_NOTIF_TTL_TO_DEAD ? notif->valid - RTM_NOTIF_TTL_TO_DEAD : 0;
+                               if (config.dive > 0 && now - bootstrap > config.dive) {
+                                       bootstrap = now - config.dive;
+                                       lprintf(t, INS, "dive from %s:%d cut to %s (max. dive %d)", notif->server, notif->port, time2str(t, bootstrap), config.dive);
+                               }
+                               // explicitly drop old (failed) notification, if any
+                               if (notif->id_str) {
+                                       if (notif->id) {
+                                               if (edg_wll_NotifDrop(ctx, notif->id)) lprintf_ctx(t, WRN, ctx, "dropping %d. notification '%s' (%s) failed", i, notif->id_str, rtm_notiftype2str(notif->type));
+                                       }
+                                       // remove from the persistent storage now,
+                                       // invalidate && update 
+                                       rtm_drop_notif(t, notif->id_str, 1);
+                                       // free the notification in the current thread
+                                       notif_invalidate(notif);
+                                       now = time(NULL);
+                               }
+                               // create the new notification
+                               notif->valid = now + config.ttl;
+
+                               memset(conditions, 0, sizeof(conditions));
+                               memset(condition, 0, sizeof(condition));
+                               memset(condition2, 0, sizeof(condition2));
+                               flags = 0;
+                               switch(notif->type) {
+#ifndef WITH_OLD_LB
+                               case RTM_NOTIF_TYPE_STATUS:
+                                       conditions[0] = condition;
+                                       condition[0].attr = EDG_WLL_QUERY_ATTR_STATUS;
+                                       condition[0].op = EDG_WLL_QUERY_OP_CHANGED;
+                                       break;
+                               case RTM_NOTIF_TYPE_JDL:
+                                       conditions[0] = condition;
+                                       conditions[1] = condition2;
+                                       condition[0].attr = EDG_WLL_QUERY_ATTR_STATUS;
+                                       condition[0].op = EDG_WLL_QUERY_OP_EQUAL;
+                                       condition[0].value.i = EDG_WLL_JOB_WAITING;
+                                       condition2[0].attr = EDG_WLL_QUERY_ATTR_JDL_ATTR;
+                                       condition2[0].op = EDG_WLL_QUERY_OP_CHANGED;
+                                       flags = EDG_WLL_STAT_CLASSADS;
+                                       break;
+#endif
+                               case RTM_NOTIF_TYPE_OLD:
+                                       flags = EDG_WLL_STAT_CLASSADS;
+                                       break;
+                               case RTM_NOTIF_TYPE_DONE:
+                                       conditions[0] = condition;
+                                       condition[0].attr = EDG_WLL_QUERY_ATTR_STATUS;
+                                       condition[0].op = EDG_WLL_QUERY_OP_EQUAL;
+                                       condition[0].value.i = EDG_WLL_JOB_DONE;
+                                       flags = EDG_WLL_STAT_CHILDREN;
+                                       break;
+                               default:
+                                       assert(notif->type != notif->type); // unknown type
+                                       break;
+                               }
+                               if (edg_wll_NotifNew(ctx, (edg_wll_QueryRec const * const *) conditions, flags, sock, config.local_address, &notif->id, &notif->valid)) {
+                                       memset(condition,0,sizeof condition);
+                                       lprintf_ctx(t, ERR, ctx, "can't create notification on %s:%d", notif->server, notif->port);
+                                       notif->valid = 0;
+                                       notif->id = NULL;
+                                       rtm_update_error_state(t, notif, i, 1);
+                                       error = 1;
+                                       goto cont;
+                               } 
+                               notif->id_str = edg_wll_NotifIdUnparse(notif->id);
+                               lprintf(t, INF, "created %d. notification '%s' (%s), valid: %s", i, notif->id_str, rtm_notiftype2str(notif->type), time2str(t, notif->valid));
+
+                               // bootstrap
+                               memset(condition, 0, sizeof(condition));
+                               flags = 0;
+                               switch (notif->type) {
+                               case RTM_NOTIF_TYPE_STATUS:
+                                       condition[0].attr = EDG_WLL_QUERY_ATTR_LASTUPDATETIME;
+                                       condition[0].op = EDG_WLL_QUERY_OP_WITHIN;
+                                       condition[0].value.t.tv_sec = bootstrap;
+                                       condition[0].value2.t.tv_sec = now;
+                                       flags = EDG_WLL_STAT_CLASSADS;
+                                       break;
+                               case RTM_NOTIF_TYPE_OLD:
+                                       break;
+                               case RTM_NOTIF_TYPE_JDL:
+                                       break;
+                               case RTM_NOTIF_TYPE_DONE:
+                                       break;
+                               default:
+                                       assert(notif->type != notif->type); // unknown type
+                                       break;
+                               }
+
+                               if (condition[0].attr) {
+
+                               lprintf(t, INF, "bootstrap %s:%d (%d), time %s..%d(now)", notif->server, notif->port, i, time2str(t, bootstrap), now);
+                               edg_wll_SetParam(ctx, EDG_WLL_PARAM_QUERY_SERVER, notif->server);
+                               edg_wll_SetParam(ctx, EDG_WLL_PARAM_QUERY_SERVER_PORT, notif->port);
+                               if ((err = edg_wll_QueryJobs(ctx, condition, flags, NULL, &jobstates)) != 0 && err != ENOENT) {
+                                       lprintf_ctx(t, ERR, ctx, "can't bootstrap jobs on %s:%d, time %s..%d(now)", notif->server, notif->port, time2str(t, bootstrap), now);
+                                       //
+                                       // destroy the notification after failed bootstrap
+                                       //
+                                       // This error means there is something nasty on the remote LB server.
+                                       // It could lost some messages between recreating notification,
+                                       // so destroy this notification now.
+                                       //
+                                       if (edg_wll_NotifDrop(ctx, notif->id)) {
+                                               lprintf_ctx(t, WRN, ctx, "dropping %d. notification '%s' (%s) after failed bootstrap failed", i, notif->id_str, rtm_notiftype2str(notif->type));
+                                       } else {
+                                               lprintf(t, INF, "dropped %d. notification '%s' (%s) after failed bootstrap", i, notif->id_str, rtm_notiftype2str(notif->type));
+                                       }
+                                       // free the notification instance in the current thread
+                                       // (not propagated to the persistent storage yet)
+                                       edg_wll_NotifIdFree(notif->id);
+                                       notif->id = NULL;
+                                       free(notif->id_str);
+                                       notif->id_str = NULL;
+                                       notif->valid = 0;
+                                       rtm_update_error_state(t, notif, i, 1);
+                                       error = 1;
+                                       if (t->next_refresh > notif->refresh) t->next_refresh = notif->refresh;
+                                       goto cont;
+                               } else {
+                                       for (j = 0; jobstates[j].state != EDG_WLL_JOB_UNDEF; j++) {
+                                               notif->last_update = jobstates[j].lastUpdateTime.tv_sec + jobstates[j].lastUpdateTime.tv_usec / 1000000.0;
+                                               db_store_change(t, notif, i, jobstates + j);
+                                               edg_wll_FreeStatus(jobstates + j);
+                                       }
+                                       free(jobstates);
+                                       lprintf(t, INF, "bootstrap %s:%d (%d), found %d jobs", notif->server, notif->port, i, j);
+                                       rtm_update_error_state(t, notif, i, 0);
+                                       updated = 1;
+                               }
+
+                               } else {
+                                       rtm_update_error_state(t, notif, i, 0);
+                                       updated = 1;
+                               }
+                       } else if (!notif->id) {
+                       // rebind existing still valid notification
+                               if (edg_wll_NotifIdParse(notif->id_str, &notif->id)) {
+                                       lprintf_ctx(t, WRN, ctx, "can't parse %d. notification '%s' (%s)", i, notif->id_str, rtm_notiftype2str(notif->type));
+                                       notif->valid = 0;
+                                       notif->id = NULL;
+                                       i--;
+                                       continue;
+                               }
+                               notif->valid = now + config.ttl;
+                               if (edg_wll_NotifBind(ctx, notif->id, sock, config.local_address, &notif->valid)) {
+                                       lprintf_ctx(t, WRN, ctx, "can't rebind %d. notification '%s' (%s)", i, notif->id_str, rtm_notiftype2str(notif->type));
+                                       notif->valid = 0;
+                                       edg_wll_NotifIdFree(notif->id);
+                                       notif->id = NULL;
+                                       i--;
+                                       continue;
+                               }
+                               lprintf(t, INF, "bound %d. notification '%s' (%s), valid: %s", i, notif->id_str, rtm_notiftype2str(notif->type), time2str(t, notif->valid));
+                               rtm_update_error_state(t, notif, i, 0);
+                               // no bootstrap here, reliable delivery will send changes
+                               updated = 1;
+                       } else if (!notif->refresh || notif->refresh <= now) {
+                       // refresh notification
+                               time_t valid;
+
+                               valid = now + config.ttl;
+                               if (edg_wll_NotifRefresh(ctx, notif->id, &valid)) {
+                                       lprintf_ctx(t, WRN, ctx, "can't refresh %d. notification '%s' (%s), will try up to %s...", i, notif->id_str, rtm_notiftype2str(notif->type), time2str(t, notif->valid - RTM_NOTIF_TTL_TO_DEAD));
+                                       // refresh failed, just move the refresh time...
+                                       updated = 1;
+                               } else {
+                                       notif->valid = valid;
+                                       lprintf(t, INF, "refreshed %d. notification '%s' (%s), valid: %s", i, notif->id_str, rtm_notiftype2str(notif->type), time2str(t, notif->valid));
+                                       rtm_update_error_state(t, notif, i, 0);
+                                       updated = 1;
+                               }
+                       } else {
+                               lprintf(t, INS, "no change in %d. notification '%s' (%s)", i, notif->id_str, rtm_notiftype2str(notif->type));
+                       }
+
+cont:
+                       if (updated || error) {
+                               if (!error) {
+                                       assert(notif->valid);
+                                       notif->refresh = notif->valid ? (now + ((notif->valid - now) >> 1)) : 0;
+                               
+                               }
+                               // create or refresh OK, bootstrap if needed OK, store the new notification
+                               updated = 0;
+                               error = 0;
+
+                               // quicker refresh (or recreate) if needed
+                               now = time(NULL);
+                               if (notif->valid && now >= notif->refresh) {
+                                       lprintf(t, WRN, "operation not in time, refreshing/recreating the notification '%s' (%s) now", notif->id_str, rtm_notiftype2str(notif->type));
+                                       i--;
+                                       continue;
+                               }
+                               rtm_update_notif(t, notif, 1);
+                       }
+
+                       // compute time of the next event from the new refresh on notification
+                       if (t->next_refresh > notif->refresh) t->next_refresh = notif->refresh;
+               }
+
+               // receive
+               //
+               // cycle here locally around NotifReceive, we know about next
+               // refresh time
+               //
+               lprintf(t, DBG, "waiting for the notifications up to %s...", t->next_refresh ? time2str(t, t->next_refresh) : "0 (no wait)");
+               while (t->next_refresh > now && !quit) {
+                       to.tv_sec = t->next_refresh - now;
+                       if (to.tv_sec > RTM_NOTIF_READ_TIMEOUT) to.tv_sec = RTM_NOTIF_READ_TIMEOUT;
+                       to.tv_usec = 0;
+                       memset(&jobstat, 0, sizeof(jobstat));
+                       notifid = NULL;
+                       err = edg_wll_NotifReceive(ctx, sock, &to, &jobstat, &notifid);
+                       lprintf(t, INS, "received, err=%d%s", err, err == ETIMEDOUT ? " (timeout)":"");
+                       if (err != 0) {
+                               if (err != ETIMEDOUT) {
+                                       lprintf_ctx(t, ERR, ctx, "can't receive notifications");
+                                       // don't cycle too quick...
+                                       sleep(1);
+                               }
+                               // lazily refresh persistent storage here, only after timeouts
+                               if (received) {
+                                       lprintf(t, DBG, "storing notification times");
+                                       rtm_update_notif(t, NULL, 1);
+                                       received = 0;
+                               }
+                       } else {
+                               char *jobidstr, *notifidstr;
+                               double last_update;
+
+                               if (notifid) {
+                                       jobidstr = jobstat.jobId ? glite_jobid_unparse(jobstat.jobId) : NULL;
+                                       notifidstr = notifid ? edg_wll_NotifIdUnparse(notifid) : NULL;
+                                       for (i = 0; i < t->nservers && (!t->notifs[i].id_str || strcmp(notifidstr, t->notifs[i].id_str) != 0); i++);
+                                       if (i == t->nservers) {
+                                               lprintf(t, ERR, "received notify '%s' not found", notifidstr);
+                                       } else {
+                                               received = 1;
+                                               notif = t->notifs + i;
+                                               //
+                                               // last changed time from the arrived notification
+                                               //
+                                               last_update = jobstat.lastUpdateTime.tv_sec + jobstat.lastUpdateTime.tv_usec / 1000000.0;
+                                               if (last_update > notif->last_update) notif->last_update = last_update;
+                                               db_store_change(t, notif, i, &jobstat);
+                                               rtm_update_notif(t, notif, 0);
+                                       }
+                                       free(jobidstr);
+                                       free(notifidstr);
+                               }
+                       }
+                       if (jobstat.state != EDG_WLL_JOB_UNDEF) edg_wll_FreeStatus(&jobstat);
+                       if (notifid) edg_wll_NotifIdFree(notifid);
+
+                       now = time(NULL);
+               } // receive
+       } // main loop
+
+exit:  
+       if (sock != -1) close(sock);
+//     for (i = 0; conditions[i]; i++) free(conditions[i]);
+       if (t->nservers && quit != RTM_QUIT_PRESERVE && quit != RTM_QUIT_RELOAD) {
+               for (i = 0; i < t->nservers; i++) {
+                       if (t->notifs[i].id) {
+                               char *notifidstr;
+
+                               notifidstr = edg_wll_NotifIdUnparse(t->notifs[i].id);
+                               edg_wll_SetParam(ctx, EDG_WLL_PARAM_NOTIF_SERVER, t->notifs[i].server);
+                               edg_wll_SetParam(ctx, EDG_WLL_PARAM_NOTIF_SERVER_PORT, t->notifs[i].port);
+                               if (edg_wll_NotifDrop(ctx, t->notifs[i].id)) {
+                                       lprintf_ctx(t, WRN, ctx, "can't drop %s (%s)", notifidstr, rtm_notiftype2str(t->notifs[i].type));
+                               } else {
+                                       lprintf(t, INF, "notification %s (%s) dropped", notifidstr, rtm_notiftype2str(t->notifs[i].type));
+                               }
+                               rtm_drop_notif(t, t->notifs[i].id_str, 0);
+                               free(notifidstr);
+                       }
+               }
+               rtm_update_notif(t, NULL, 1);
+       }
+#ifdef WITH_LBU_DB
+       if (t->insertcmd) glite_lbu_FreeStmt(&t->insertcmd);
+       if (t->updatecmd) glite_lbu_FreeStmt(&t->updatecmd);
+       if (t->updatecmd_vo) glite_lbu_FreeStmt(&t->updatecmd_vo);
+       if (t->updatecmd_mon) glite_lbu_FreeStmt(&t->updatecmd_mon);
+       db_free(t, t->dbctx);
+#endif
+       if (ctx) edg_wll_FreeContext(ctx);
+       lprintf(t, DBG, "thread ended");
+       pthread_exit(NULL);
+       return NULL;
+}
+
+
+int reconcile_threads() {
+       int iserver, ithread, inotif, gran, mod, nnotifs;
+       int i, j, oldn, type, typestart, typeend;
+       notif_t *a, *b;
+       edg_wll_Context ctx = NULL;
+       edg_wll_NotifId notifid;
+       thread_t *t;
+
+       if (!config.cleanup) {
+               if (config.silly) {
+                       typestart = RTM_NOTIF_TYPE_OLD;
+                       typeend = RTM_NOTIF_TYPE_OLD;
+                       nnotifs = 1;
+               } else {
+                       typestart = RTM_NOTIF_TYPE_STATUS;
+                       typeend = RTM_NOTIF_TYPE_JDL;
+                       nnotifs = 2;
+               }
+
+               oldn = db.n;
+
+               // distribute LB servers between threads
+               // (always use existing loaded notification when found)
+               threads = (thread_t *)calloc(config.nthreads, sizeof(thread_t));
+               gran = config.nservers / config.nthreads, mod = config.nservers % config.nthreads;
+               t = NULL;
+               ithread = 0;
+               inotif = 0;
+               for (iserver = 0; iserver < config.nservers; iserver++) {
+                       // new thread
+                       if (!t || inotif + nnotifs > t->nservers) {
+                               assert(ithread < config.nthreads);   // proper number of threads
+                               assert(!t || inotif == t->nservers); // start or exactly distributed
+                               t = threads + ithread;
+                               t->nservers = nnotifs * ((ithread < mod) ? gran + 1 : gran);
+                               t->notifs = (notif_t *)calloc(t->nservers, sizeof(notif_t));
+                               lprintf(NULL, DBG, "%d. thread: %d notifications", ithread, t->nservers);
+                               ithread++;
+                               inotif = 0;
+                       }
+
+                       // next configured server
+                       a = config.notifs + iserver;
+                       for (type = typestart; type <= typeend; type++) {
+                               // find or create all notification types
+                               b = db_search_notif_by_server(db.notifs, oldn, a->server, a->port, type);
+                               if (!b) b = db_add_notif(NULL, type, 0, 0, 0, strdup(a->server), a->port, 1, 0);
+                               else {
+                                       if (b->id_str) {
+                                               lprintf(NULL, INF, "found previous notification '%s' (%s)", b->id_str, rtm_notiftype2str(b->type));
+                                       } else {
+                                               lprintf(NULL, INF, "found previous server %s:%d (%s), %d errors", b->server, b->port, rtm_notiftype2str(b->type), b->error);
+                                       }
+                                       b->active = 1;
+                               }
+                               // and add each to the thread
+                               notif_copy(t->notifs + inotif, b);
+                               lprintf(NULL, INS, "thread[%d][%d] <- %s:%d (%s), id %s", ithread-1, inotif, b->server, b->port, rtm_notiftype2str(b->type), b->id_str);
+                               inotif++;
+                       }
+               }
+               j = 0;
+               for (i = 0; i < db.n; i++)
+                       if (db.notifs[i].active) j++;
+               assert(j % nnotifs == 0); // each server all notifs
+       }
+
+       if (edg_wll_InitContext(&ctx) != 0) {
+               lprintf(NULL, ERR, "can't init LB context: %s", strerror(errno));
+               return 1;
+       }
+       if (config.cert) edg_wll_SetParam(ctx, EDG_WLL_PARAM_X509_CERT, config.cert);
+       if (config.key) edg_wll_SetParam(ctx, EDG_WLL_PARAM_X509_KEY, config.key);
+       for (j = 0; j < db.n; j++) {
+               if (!db.notifs[j].active) {
+                       if (db.notifs[j].id_str) {
+                               lprintf(NULL, INF, "dropping previous notification '%s' (%s)", db.notifs[j].id_str, rtm_notiftype2str(db.notifs[j].type));
+                               if (edg_wll_NotifIdParse(db.notifs[j].id_str, &notifid)) {
+                                       lprintf(NULL, WRN, "can't parse notification ID '%s'", db.notifs[j].id_str);
+                                       continue;
+                               }
+                               edg_wll_SetParam(ctx, EDG_WLL_PARAM_NOTIF_SERVER, db.notifs[j].server);
+                               edg_wll_SetParam(ctx, EDG_WLL_PARAM_NOTIF_SERVER_PORT, db.notifs[j].port);
+                               if (edg_wll_NotifDrop(ctx, notifid) != 0) {
+                                       lprintf_ctx(NULL, WRN, ctx, "can't drop %s (%s)", db.notifs[j].id_str, rtm_notiftype2str(db.notifs[j].type));
+                               }
+                               edg_wll_NotifIdFree(notifid);
+                               notif_invalidate(db.notifs + j);
+                       }
+               }
+       }
+       edg_wll_FreeContext(ctx);
+
+       return db_save_notifs(NULL);
+}
+
+
+void usage(const char *prog) {
+       fprintf(stderr, "Usage: %s [options]\n"
+               "       -h, --help         display this help\n"
+               "       -v, --version      display version\n"
+               "       -d, --debug LEVEL  debug level (0=error,1=warn,2=info,3=debug,4=insane,\n"
+               "                          +8=not fork)\n"
+               "       -D, --daemonize    daemonize\n"
+               "       -i, --pidfile      the file with process ID\n"
+               "       -s, --threads N    number of slave threads\n"
+               "       -t, --ttl TIME     time to live (validity) of the notifications\n"
+               "                          in seconds (%d)\n"
+               "       -H, --history      historic dive in seconds (<=0 is unlimited)\n"
+               "       -c, --config       config file name (list of LB servers), precedence before " RTM_DB_TABLE_LBS " table\n"
+#ifdef WITH_LBU_DB
+               "       -m, --pg           db connection string (user/pwd@server:dbname) to " RTM_DB_TABLE_LBS " table\n"
+#endif
+               "       -n, --notifs       file for persistent information about active\n"
+               "                          notifications\n"
+               "       -C, --cert         X509 certificate file\n"
+               "       -K, --key          X509 key file\n"
+               "       -o, --old          \"silly\" mode for old L&B 1.9 servers\n"
+               "       -l, --cleanup      clean up the notifications and exit\n"
+               "       -w, --wlcg         enable messaging for dashboard\n"
+               "       --wlcg-binary      full path to msg-publish binary\n"
+               "       --wlcg-topic       topic for msg-publish\n"
+               "       --wlcg-config      config file for msg-publish\n"
+               "       --wlcg-flush       send message on each notification\n"
+               , prog, RTM_NOTIF_TTL);
+       fprintf(stderr, "\n");
+       fprintf(stderr, "List of L&B servers: first it's read the config file if specified (-c option). When config file is not used and connection to database is specified, it's tried DB table " RTM_DB_TABLE_LBS ".\n");
+       fprintf(stderr, "\n");
+}
+
+
+int config_preload(int argn, char *argv[]) {
+       int opt, intval, index;
+       char *err, *s;
+
+       while ((opt = getopt_long(argn, argv, opts_line, opts, &index)) != EOF) {
+               switch (opt) {
+               case 'h':
+               case '?':
+                       usage(argv[0]);
+                       return 1;
+               case 'v':
+                       fprintf(stderr, "%s: %s\n", argv[0], rcsid);
+                       return 1;
+               case 'd':
+                       intval = strtol(optarg, &err, 10);
+                       if (err && err[0]) {
+                               lprintf(NULL, ERR, "debug level number required");
+                               return 2;
+                       }
+                       config.debug = (intval & DEBUG_LEVEL_MASK);
+                       config.guard = !(intval & DEBUG_GUARD_MASK);
+                       break;
+               case 'D':
+                       config.daemonize = 1;
+                       break;
+               case 'i':
+                       config.pidfile = strdup(optarg);
+                       break;
+               case 's':
+                       intval = strtol(optarg, &err, 10);
+                       if (err && err[0]) {
+                               lprintf(NULL, ERR, "number of threads required");
+                               return 2;
+                       }
+                       config.nthreads = intval;
+                       break;
+               case 't':
+                       intval = strtol(optarg, &err, 10);
+                       if (err && err[0]) {
+                               lprintf(NULL, ERR, "requested validity in seconds required");
+                               return 2;
+                       }
+                       config.ttl = intval;
+                       break;
+               case 'H':
+                       intval = strtol(optarg, &err, 10);
+                       if (err && err[0]) {
+                               lprintf(NULL, ERR, "historic dive in seconds required");
+                               return 2;
+                       }
+                       config.dive = intval;
+                       break;
+               case 'c':
+                       free(config.config_file);
+                       config.config_file = strdup(optarg);
+                       break;
+               case 'n':
+                       free(config.notif_file);
+                       config.notif_file = strdup(optarg);
+                       break;
+               case 'p':
+                       listen_port = atoi(optarg);
+                       break;
+               case 'm':
+                       free(config.dbcs);
+                       config.dbcs = strdup(optarg);
+                       break;
+               case 'C':
+                       free(config.cert);
+                       config.cert = strdup(optarg);
+                       break;
+               case 'K':
+                       free(config.key);
+                       config.key = strdup(optarg);
+                       break;
+               case 'l':
+                       config.cleanup = 1;
+                       break;
+               case 'w':
+                       config.wlcg = 1;
+                       break;
+               case 'o':
+                       config.silly = 1;
+                       break;
+               case 0:
+                       switch(index) {
+                       case 0:
+                               config.wlcg_binary = strdup(optarg);
+                               break;
+                       case 1:
+                               config.wlcg_config = strdup(optarg);
+                               break;
+                       case 2:
+                               config.wlcg_topic = strdup(optarg);
+                               break;
+                       case 3:
+                               config.wlcg_flush = 1;
+                               break;
+                       default:
+                               lprintf(NULL, ERR, "crazy option, index %d", index);
+                               break;
+                       }
+                       break;
+               }
+       }
+       if (!config.notif_file) config.notif_file = strdup(RTM_FILE_NOTIFS);
+       if (config.wlcg) {
+               if (!config.wlcg_binary) config.wlcg_binary = strdup(WLCG_BINARY);
+               if (!config.wlcg_config) config.wlcg_config = strdup(WLCG_CONFIG);
+               if (!config.wlcg_topic) config.wlcg_topic = strdup(WLCG_TOPIC);
+       }
+#ifdef WITH_OLD_LB
+       if (!config.silly) {
+               lprintf(NULL, WRN, "compiled with older LB library, switching on silly mode");
+               config.silly = 1;
+       }
+#endif
+
+       if ((s = getenv("GLITE_LB_HARVESTER_NO_REMOVE")) != NULL) {
+               if (s[0] != '0' && strcasecmp(s, "false") != 0) config.wlcg_no_remove = 1;
+       }
+
+       if (INF <= config.debug) {
+               lprintf(NULL, INF, "threads: %d", config.nthreads);
+               lprintf(NULL, INF, "notifs ttl: %d", config.ttl);
+               lprintf(NULL, INF, "historic dive: %d", config.dive);
+               if (config.dbcs) {
+                       lprintf(NULL, INF, "database storage: '%s'", config.dbcs);
+               } else {
+                       lprintf(NULL, INF, "file storage: '%s'", config.notif_file);
+               }
+               lprintf(NULL, INF, "WLCG messaging: %s%s", config.wlcg ? "enabled" : "disabled", config.wlcg_no_remove ? " (not removing tmp files)" : "");
+               lprintf(NULL, INF, "debug level: %d", config.debug);
+               lprintf(NULL, INF, "daemonize: %s", config.daemonize ? "enabled" : "disabled");
+               lprintf(NULL, INF, "fork guard: %s", config.guard ? "enabled" : "disabled");
+               lprintf(NULL, INF, "silly compatibility mode: %s", config.silly ? "enabled" : "disabled");
+       }
+
+       return 0;
+}
+
+
+int config_load() {
+       char line[LINE_MAX], *port, *s;
+       FILE *f;
+       void *tmp;
+       int i, n;
+       int major, minor, sub, version;
+#ifdef WITH_LBU_DB
+       char *results[2];
+       char *result = NULL;
+       glite_lbu_Statement stmt = NULL;
+       int err = 0;
+#endif
+
+       if (config.config_file) {
+               if ((f = fopen(config.config_file, "rt")) == NULL) {
+                       lprintf(NULL, ERR, "can't open config file '%s': %s", config.config_file, strerror(errno));
+                       return 1;
+               }
+
+               n = 10;
+               while (fgets(line, sizeof(line), f) != NULL) {
+                       if ((s = strpbrk(line, "\n\r")) != NULL) s[0] = '\0';
+                       if (line[0] == '\0' || line[0] == '#') continue;
+                       if (config.nservers >= n || !config.notifs) {
+                               n = 2 * n;
+                               if ((tmp = (notif_t *)realloc(config.notifs, n * sizeof(notif_t))) == NULL) {
+                                       lprintf(NULL, ERR, "insufficient memory");
+                                       return 1;
+                               }
+                               config.notifs = tmp;
+                               memset(config.notifs + config.nservers, 0, (n - config.nservers) * sizeof(notif_t));
+                       }
+                       if ((port = strrchr(line, ':')) != NULL) { port[0] = '\0'; port++; }
+                       config.notifs[config.nservers].server = strdup(line);
+                       config.notifs[config.nservers++].port = (port && port[0]) ? atoi(port) : GLITE_JOBID_DEFAULT_PORT;
+               }
+
+               fclose(f);
+       } else
+#ifdef WITH_LBU_DB
+       if (db.dbctx) {
+               if ((err = glite_lbu_ExecSQL(db.dbctx, "SELECT COUNT(*) FROM " RTM_DB_TABLE_LBS, &stmt)) < 0 ||
+                   (err = glite_lbu_FetchRow(stmt, 1, NULL, &result)) < 0) {
+                       goto err;
+               }
+               if (err == 0) {
+                       lprintf(NULL, ERR, "can't count LB servers");
+                       goto err;
+               }
+               n = atoi(result);
+               free(result);
+               glite_lbu_FreeStmt(&stmt);
+
+               config.notifs = calloc(n, sizeof(notif_t));
+               config.nservers = 0;
+               if ((err = glite_lbu_ExecSQL(db.dbctx, "SELECT DISTINCT ip, serv_version FROM " RTM_DB_TABLE_LBS, &stmt)) < 0) {
+                       goto err;
+               }
+               while (config.nservers < n && (err = glite_lbu_FetchRow(stmt, 2, NULL, results)) > 0) {
+                       if (sscanf(results[1], "%d.%d.%d", &major, &minor, &sub) != 3) {
+                               lprintf(NULL, ERR, "can't parse LB server version '%s'", results[1]);
+                               free(results[1]);
+                               break;
+                       }
+                       version = 10000 * major + 100 * minor + sub;
+                       if (version >= 20000 || config.silly) {
+                               config.notifs[config.nservers].server = strdup(results[0]);
+                               config.notifs[config.nservers++].port = GLITE_JOBID_DEFAULT_PORT;
+                       } else {
+                               lprintf(NULL, INF, "skipped older LB server %s (version '%s')", results[0], results[1]);
+                       }
+                       free(results[0]);
+                       free(results[1]);
+               }
+               if (err < 0) goto err;
+               glite_lbu_FreeStmt(&stmt);
+       }
+#endif
+
+       if (INF <= config.debug) {
+               lprintf(NULL, INF, "servers: %d", config.nservers);
+               for (i = 0; i < config.nservers; i++) lprintf(NULL, INF, "  %s:%d", config.notifs[i].server, config.notifs[i].port);
+       }
+
+       return 0;
+#ifdef WITH_LBU_DB
+err:
+       if (err) lprintf_dbctx(NULL, ERR, "can't get LB servers");
+       if (stmt) glite_lbu_FreeStmt(&stmt);
+       if (result) free(result);
+#endif
+       return 1;
+}
+
+
+void config_free() {
+       int i;
+
+       for (i = 0; i < config.nservers; i++) free(config.notifs[i].server);
+       free(config.config_file);
+       free(config.notif_file);
+       free(config.pidfile);
+       free(config.dbcs);
+       free(config.notifs);
+       free(config.cert);
+       free(config.key);
+       free(config.wlcg_binary);
+       free(config.wlcg_config);
+       free(config.wlcg_topic);
+}
+
+
+// on keyboard cleanup notification, on termination signal break with
+// notification preserved
+void handle_signal(int num) {
+       lprintf(NULL, INF, "received signal %d", num);
+       switch (num) {
+       case SIGINT:
+       case SIGTERM:
+       default:
+               quit = RTM_QUIT_PRESERVE;
+               break;
+       }
+}
+
+
+int main(int argn, char *argv[]) {
+       struct sigaction sa;
+       sigset_t sset;
+       int i, j;
+       double t1, t2, last_summary = 0, start_time;
+       thread_t *t;
+       struct stat pstat;
+       pid_t watched;
+       int status;
+       edg_wll_Context ctx = NULL;
+       int retval = RTM_EXIT_ERROR;
+       int cert_mtime = 0;
+
+       // load basic configurations
+       switch (config_preload(argn, argv)) {
+       case 0:
+               break;
+       case 1:
+               retval = RTM_EXIT_OK;
+               goto quit_guard0;
+               break;
+       default:
+               retval = RTM_EXIT_ERROR;
+               goto quit_guard0;
+       }
+
+       // daemonize
+       if (config.pidfile) {
+               FILE *f;
+               char s[256];
+
+               if ((f = fopen(config.pidfile, "rt"))) {
+                       if (fscanf(f, "%255[^\n\r]", s) == 1) {
+                               if (kill(atoi(s),0)) {
+                                       lprintf(NULL, WRN, "stale pidfile, pid = %s, pidfile '%s'", s, config.pidfile);
+                                       fclose(f);
+                               }
+                               else {
+                                       lprintf(NULL, ERR, "another instance running, pid = %s, pidfile '%s'", s, config.pidfile);
+                                       fclose(f);
+                                       goto quit_guard0;
+                               }
+                       } else {
+                               lprintf(NULL, ERR, "another instance possibly running, can't read pidfile '%s': %s", config.pidfile, strerror(errno));
+                               fclose(f);
+                               goto quit_guard0;
+                       }
+               } else if (errno != ENOENT) {
+                       lprintf(NULL, ERR, "error opening pidfile '%s': %s", config.pidfile, strerror(errno));
+                       goto quit_guard0;
+               }
+       }
+       if (config.daemonize) {
+               if (daemon(0, 0) == -1) {
+                       lprintf(NULL, ERR, "can't daemonize: %s", strerror(errno));
+                       goto quit_guard0;
+               }
+       }
+
+       // disable signals to the guardian
+       sigemptyset(&sset);
+       sigaddset(&sset, SIGABRT);
+       sigaddset(&sset, SIGTERM);
+       sigaddset(&sset, SIGINT);
+       pthread_sigmask(SIG_BLOCK, &sset, NULL);
+
+       if (!config.guard) {
+       // not guard
+               if (config.pidfile) {
+                       FILE *f;
+
+                       if ((f = fopen(config.pidfile, "wt")) == NULL) {
+                               lprintf(NULL, ERR, "can't create pidfile '%s': %s", config.pidfile, strerror(errno));
+                               goto quit_guard0;
+                       }
+                       fprintf(f, "%d", getpid());
+                       fclose(f);
+               }
+       } else
+       // guard
+       while ((watched = fork()) != 0) {
+               if (watched == -1) {
+                       lprintf(NULL, ERR, "fork() failed: %s", strerror(errno));
+                       goto quit_guard;
+               }
+               if (config.pidfile) {
+                       FILE *f;
+
+                       if ((f = fopen(config.pidfile, "wt")) == NULL) {
+                               lprintf(NULL, ERR, "can't create pidfile '%s': %s", config.pidfile, strerror(errno));
+                               goto quit_guard0;
+                       }
+                       fprintf(f, "%d", watched);
+                       fclose(f);
+               }
+               if (waitpid(watched, &status, 0) == -1) {
+                       lprintf(NULL, ERR, "waitpid() failed: %s", strerror(errno));
+                       // orpaned child will restart later anyway,
+                       // better to end the child process just now
+                       kill(watched, SIGTERM);
+                       goto quit_guard;
+               }
+               if (WIFSIGNALED(status)) {
+                       switch (WTERMSIG(status)) {
+                       case SIGSEGV:
+                       case SIGILL:
+                       case SIGABRT:
+#ifdef SIGBUS
+                       case SIGBUS:
+#endif
+                               lprintf(NULL, ERR, "caught signal %d from process %d, resurrecting...", WTERMSIG(status), watched);
+                               // slow down the core generator ;-)
+                               // disabled signals and ended child in pidfile, live with it
+                               pthread_sigmask(SIG_UNBLOCK, &sset, NULL);
+                               if (config.pidfile) {
+                                       if (remove(config.pidfile) == -1) lprintf(NULL, WRN, "can't remove pidfile '%s': %s", config.pidfile, strerror(errno));
+                               }
+                               sleep(2);
+                               pthread_sigmask(SIG_BLOCK, &sset, NULL);
+                               break;
+                       default:
+                               lprintf(NULL, WRN, "ended with signal %d", WTERMSIG(status));
+                               goto quit_guard;
+                       }
+               } else if (WIFEXITED(status)) {
+                       retval = WEXITSTATUS(status);
+                       switch(retval) {
+                       case RTM_EXIT_OK:
+                               lprintf(NULL, INF, "exit with status %d, OK", retval);
+                               goto quit_guard;
+                       case RTM_EXIT_RELOAD:
+                               lprintf(NULL, INF, "exit with status %d, reloading", retval);
+                               break;
+                       default:
+                               lprintf(NULL, WRN, "exit with status %d, error", retval);
+                               goto quit_guard;
+                       }
+               } else {
+                       lprintf(NULL, ERR, "unknown child status");
+                       goto quit_guard;
+               }
+       }
+
+       // child continues...
+
+       // threads && Globus
+       if (edg_wll_gss_initialize()) {
+               lprintf(NULL, ERR, "can't initialize GSS");
+               goto quit_guard;
+       }
+
+#ifndef WITH_OLD_LB
+       // connection pool manually (just for tuning memory leaks)
+       if (!edg_wll_initConnections()) {
+               lprintf(NULL, ERR, "can't initialize LB connections");
+               goto quit_guard;
+       }
+#endif
+
+#ifdef WITH_LBU_DB
+       // database
+       switch(db_init(NULL, &db.dbctx)) {
+       case 0:
+               break;
+       case -1:
+               // no db
+               break;
+       default:
+               // error
+               goto quit;
+       }
+#endif
+
+       // load configurations
+       if (config_load()) goto quit;
+#ifdef WITH_OLD_LB
+       // other client certificate settings ignored by older globus,
+       // using environment (certificate the same for all threads)
+       {
+               char *s;
+
+               if (config.cert) {
+                       asprintf(&s, "X509_USER_CERT=%s", config.cert);
+                       putenv(s);
+               }
+               if (config.key) {
+                       asprintf(&s, "X509_USER_KEY=%s", config.key);
+                       putenv(s);
+               }
+       }
+#endif
+
+       // load previous notifications
+       if (load_notifs()) goto quit;
+       // compare lb servers from configuration and notifications,
+       // or clean up and exit if specified
+       if (reconcile_threads()) goto quit;
+       if (config.cleanup) {
+               retval = RTM_EXIT_OK;
+               goto quit;
+       }
+
+       // signal handler
+       sa.sa_handler = handle_signal;
+       sigemptyset(&sa.sa_mask);
+       sa.sa_flags = SA_RESETHAND;
+       if (sigaction(SIGABRT, &sa, NULL) == -1
+           || sigaction(SIGTERM, &sa, NULL) == -1
+           || sigaction(SIGINT, &sa, NULL) == -1) {
+               lprintf(NULL, ERR, "can't handle signal: %s", strerror(errno));
+               goto quit;
+       }
+       // enable signals in main
+       pthread_sigmask(SIG_UNBLOCK, &sset, NULL);
+
+       // launch the threads
+       for (i = 0; i < config.nthreads; i++) {
+               t = threads + i;
+               t->id = i;
+               if (pthread_create(&threads[i].thread, NULL, notify_thread, t) != 0) {
+                       lprintf(NULL, ERR, "[main] can't create %d. thread: %s\n", i, strerror(errno));
+                       goto quit;
+               }
+       }
+
+       edg_wll_InitContext(&ctx);
+       if (config.cert) edg_wll_SetParam(ctx, EDG_WLL_PARAM_X509_CERT, config.cert);
+       if (config.key) edg_wll_SetParam(ctx, EDG_WLL_PARAM_X509_KEY, config.key);
+       last_summary = 0;
+       start_time = rtm_gettimeofday();
+       while (!quit) {
+               t1 = rtm_gettimeofday();
+               if (t1 - last_summary > RTM_SUMMARY_POLL_TIME) {
+                       last_summary = t1;
+                       rtm_summary(ctx, &db);
+               }
+               if (config.guard) {
+                       if (t1 - start_time > RTM_SUICIDE_TIME) {
+                               quit = RTM_QUIT_RELOAD;
+                               lprintf(NULL, INF, "preventive suicide");
+                               break;
+                       }
+                       if (config.cert) {
+                               if (stat(config.cert, &pstat) == 0) {
+                                       if (!cert_mtime) cert_mtime = pstat.st_mtime;
+                                       if (cert_mtime < pstat.st_mtime) {
+                                               lprintf(NULL, INF, "certificate '%s' changed, reloading", config.cert);
+                                               quit = RTM_QUIT_RELOAD;
+                                               break;
+                                       }
+                               } else {
+                                       lprintf(NULL, ERR, "can't check certificate file '%s'", config.cert, strerror(errno));
+                               }
+                       }
+               }
+               t2 = rtm_gettimeofday();
+               if (t2 - t1 < RTM_IDLE_POLL_TIME) usleep((RTM_IDLE_POLL_TIME + t1 - t2) * 1000000);
+       }
+       retval = quit == RTM_QUIT_RELOAD ? RTM_EXIT_RELOAD : RTM_EXIT_OK;
+quit:
+       // cleanup on error
+       if (!quit) quit = RTM_QUIT_CLEANUP;
+       if (threads) {
+               for (i = 0; i < config.nthreads; i++) {
+                       t = threads + i;
+                       if (t->thread) pthread_join(t->thread, NULL);
+                       for (j = 0; j < t->nservers; j++) notif_free(t->notifs + j);
+                       free(t->notifs);
+               }
+               free(threads);
+       }
+
+       if (config.pidfile && !config.guard) {
+               if (remove(config.pidfile) == -1) lprintf(NULL, WRN, "can't remove pidfile '%s': %s", config.pidfile, strerror(errno));
+       }
+
+#ifdef WITH_LBU_DB
+       db_free(NULL, db.dbctx);
+#endif
+       edg_wll_FreeContext(ctx);
+       db_free_notifs();
+       config_free();
+#ifndef WITH_OLD_LB
+       edg_wll_poolFree();
+#endif
+
+       return retval;
+
+quit_guard:
+       if (config.pidfile) {
+               if (remove(config.pidfile) == -1) lprintf(NULL, WRN, "can't remove pidfile '%s': %s", config.pidfile, strerror(errno));
+       }
+quit_guard0:
+       config_free();
+       return retval;
+}
index 9104144..814f9b8 100755 (executable)
@@ -12,19 +12,10 @@ GLITE_LOCATION_VAR=${GLITE_LOCATION_VAR:-$GLITE_LOCATION/var}
 
 [ -f $HOME/.glite.conf ] && . $HOME/.glite.conf
 
-LL_PIDFILE=${LL_PIDFILE:-$GLITE_LOCATION_VAR/glite-lb-logd.pid}
-IL_PIDFILE=${IL_PIDFILE:-$GLITE_LOCATION_VAR/glite-lb-interlogd.pid}
-
 unset creds port
 
 start()
 {
-       case "$GLITE_LB_TYPE" in
-       proxy)
-               echo 'Not starting logd and interlogger, proxy only instance (GLITE_LB_TYPE=proxy).'
-               return 0
-       esac
-
        if test -z "$GLITE_USER" ;then
                echo 'Error: GLITE_USER is not set'
                echo FAILED
@@ -52,36 +43,21 @@ start()
        echo -n Starting glite-lb-logd ...
         (cd /tmp && ls -f /tmp |grep ^dglogd_sock_ |xargs rm -f)
        su - $GLITE_USER -c "$GLITE_LOCATION/bin/glite-lb-logd \
-               -i $LL_PIDFILE $creds $port $sock $fprefix" && echo " done" || echo " FAILED"
+               $creds $port $sock $fprefix" && echo " done" || echo " FAILED"
 
        echo -n Starting glite-lb-interlogd ...
        su - $GLITE_USER -c "$GLITE_LOCATION/bin/glite-lb-interlogd \
-               -i $IL_PIDFILE $creds $sock $fprefix" && echo " done" || echo " FAILED"
-}
-
-killwait()
-{
-       pidfile=$1
-       if [ -f $pidfile ] && pid=`cat $pidfile` && kill $pid 2>/dev/null; then
-               cnt=0
-               while ps p $pid 2>/dev/null >/dev/null; do
-                       sleep 1;
-                       cnt=`expr $cnt + 1`
-                       if [ $cnt = 120 ]; then break; fi
-               done
-               if [ $cnt = 100 ]; then echo " can't stop"
-               else echo " done"; fi
-       else
-               echo " not running"
-       fi
+               $creds $sock $fprefix" && echo " done" || echo " FAILED"
 }
 
 stop()
 {
                echo -n Stopping glite-lb-logd ...
-               killwait $LL_PIDFILE
+               killall glite-lb-logd
+               echo " done"
                echo -n Stopping glite-lb-interlogd ...
-               killwait $IL_PIDFILE
+               killall glite-lb-interlogd
+               echo " done"
 }
 
 status()
index 68ae914..d294ec7 100644 (file)
@@ -68,10 +68,6 @@ environment variable.
 Don't run as daemon (do not fork and put itself into background).
 
 .TP
-.BI \-i " FILE" "\fR,\fP --pidfile " FILE
-Store process id into this file rather than default /var/glite/glite-lb-[notif]-interlogd.pid
-
-.TP
 .BI \-f " PREFIX" "\fR,\fP --file-prefix " PREFIX
 .I PREFIX 
 is path prefix of the event files.
@@ -138,10 +134,10 @@ Print help and exit.
 .I /tmp/interlogger.sock
 Default name of local socket.
 .TP
-.I /var/glite/log/dglogd.log*
+.I /tmp/dglogd.log*
 Default location of event files.
 
-.I /var/glite/log/dglogd.log*.ctl
+.I /tmp/dglogd.log*.ctl
 Interlogger's control files keeping the information on status of
 the corresponding event file wrt. delivery to the target server.
 
index 2a04be6..a28529a 100644 (file)
@@ -82,12 +82,6 @@ Send the messages to interlogger through the UNIX socket
 The value has to be same as used in the cooperating glite-lb-interlogd.
 
 .TP
-.BI \-i " FILE" "\fR,\fP --pidfile " FILE
-Store pid into 
-.I FILE\fR.\fP
-Defaults to /var/glite/glite-lb-logd.pid.
-
-.TP
 .B "-V\fR,\fP --version"
 Print version and exit.
 
@@ -121,7 +115,7 @@ Dangerous, for debugging only! Don't use at all.
 Default name of local socket.
 
 .TP
-.I /var/glite/log/dglogd.log*
+.I /tmp/dglogd.log*
 Default location of the event storage files.
 .TP
 No configuration files needed.
index fa5cbf0..384c89a 100644 (file)
@@ -3,7 +3,6 @@
 #include <errno.h>
 #include <string.h>
 #include <unistd.h>
-#include <stdio.h>
 
 #include "glite/jobid/cjobid.h"
 #include "glite/lb/context.h"
@@ -439,7 +438,7 @@ loop()
                int ret;
     
                if(killflg)
-                       return (0);
+                       exit(0);
 
                clear_error();
                if((ret = input_queue_get(&msg, &offset, INPUT_TIMEOUT)) < 0) 
index 0dac6ea..e6ebded 100644 (file)
@@ -10,7 +10,6 @@
 #include <signal.h>
 #include <pthread.h>
 #include <errno.h>
-#include <assert.h>
 
 #include "interlogd.h"
 #include "glite/lb/log_proto.h"
 #if defined(IL_NOTIFICATIONS)
 #define DEFAULT_PREFIX "/tmp/notif_events"
 #define DEFAULT_SOCKET "/tmp/notif_interlogger.sock"
-#define DEFAULT_PIDFILE "/var/glite/glite-lb-notif-interlogd.pid"
 #else
 #define DEFAULT_PREFIX EDG_WLL_LOG_PREFIX_DEFAULT
 #define DEFAULT_SOCKET "/tmp/interlogger.sock"
-#define DEFAULT_PIDFILE  "/var/glite/glite-lb-interlogd.pid"
 #endif
 
 
-
 /* The name the program was run with, stripped of any leading path. */
 char *program_name;
 int killflg = 0;
@@ -43,8 +39,6 @@ pthread_mutex_t cred_handle_lock = PTHREAD_MUTEX_INITIALIZER;
 
 time_t key_mtime = 0, cert_mtime = 0;
 
-static char *pidfile = DEFAULT_PIDFILE;
-
 static void usage (int status)
 {
        printf("%s - \n"
@@ -60,7 +54,6 @@ static void usage (int status)
               "  -k, --key  <file>          location of server private key\n"
               "  -C, --CAdir <dir>          directory containing CA certificates\n"
               "  -b, --book                 send events to bookkeeping server only\n"
-              "  -i, --pidfile              pid file\n"
               "  -l, --log-server <host>    specify address of log server\n"
               "  -s, --socket <path>        non-default path of local socket\n"
               "  -L, --lazy [<timeout>]     be lazy when closing connections to servers (default, timeout==0 means turn lazy off)\n"
@@ -112,7 +105,6 @@ static struct option const long_options[] =
   {"key", required_argument, 0, 'k'},
   {"book", no_argument, 0, 'b'},
   {"CAdir", required_argument, 0, 'C'},
-  {"pidfile", required_argument, 0, 'i'},
   {"log-server", required_argument, 0, 'l'},
   {"socket", required_argument, 0, 's'},
   {"lazy", optional_argument, 0, 'L'},
@@ -151,7 +143,6 @@ decode_switches (int argc, char **argv)
                           "k:"          /* key */
                           "C:"          /* CA dir */
                           "b"  /* only bookeeping */
-                          "i:"  /* pidfile*/
                "l:" /* log server */
                           "d" /* debug */
                           "p" /* parallel */
@@ -207,10 +198,6 @@ decode_switches (int argc, char **argv)
          log_server = strdup(optarg);
          break;
 
-       case 'i': 
-         pidfile = strdup(optarg);
-         break;
-
        case 'C':
          CAcert_dir = strdup(optarg);
          break;
@@ -292,7 +279,6 @@ main (int argc, char **argv)
   char *p;
   edg_wll_GssStatus gss_stat;
   int ret;
-  FILE *pidf;
 
   program_name = argv[0];
 
@@ -322,23 +308,12 @@ main (int argc, char **argv)
     exit(EXIT_FAILURE);
   }
 
-/* just try it before deamonizing to be able to complain aloud */
-  if (!(pidf = fopen(pidfile,"w"))) {
-       perror(pidfile);
-       exit(EXIT_FAILURE);
-  }
-  fclose(pidf);
-
   if(!debug &&
      (daemon(0,0) < 0)) {
     perror("daemon");
     exit(EXIT_FAILURE);
   }
 
-  pidf = fopen(pidfile,"w"); assert(pidf); /* XXX */
-  fprintf(pidf,"%d\n",getpid());
-  fclose(pidf);
-
 #ifdef LB_PERF
   /* this must be called after installing signal handlers */
   glite_wll_perftest_init(NULL, /* host */
@@ -420,13 +395,11 @@ main (int argc, char **argv)
     il_log(LOG_CRIT, "Fatal error: %s\n", error_get_msg());
     if (killflg) {
       input_queue_detach();
-      unlink(pidfile);
       exit(EXIT_FAILURE);
     }
   }
   il_log(LOG_INFO, "Done!\n");
   input_queue_detach();
-  unlink(pidfile);
 
   exit (0);
 }
index 2ca26ea..b2fdde4 100644 (file)
@@ -60,8 +60,7 @@
 
 // #define TIMEOUT      5
 extern int TIMEOUT;
-#define INPUT_TIMEOUT (5)
-#define RECOVER_TIMEOUT (60)
+#define INPUT_TIMEOUT (60)
 #define EXIT_TIMEOUT (1*60)
 
 typedef struct cred_handle {
index 5556da3..9197bad 100644 (file)
@@ -13,7 +13,6 @@
 #include <unistd.h> 
 #include <string.h>
 #include <getopt.h>
-#include <assert.h>
 #include <errno.h>
 
 #include "glite/lb/context-int.h"
 #include "glite/lb/lb_perftest.h"
 #endif
 
-#define DEFAULT_PIDFILE "/var/glite/glite-lb-logd.pid"
-
 static const char rcsid[] = "@(#)$Id$";
 static int verbose = 0;
 static int debug = 0;
 static int port = EDG_WLL_LOG_PORT_DEFAULT;
 static char *prefix = EDG_WLL_LOG_PREFIX_DEFAULT;
-static char *pidfile = DEFAULT_PIDFILE;
 static char *cert_file = NULL;
 static char *key_file = NULL;
 static char *CAcert_dir = NULL;
@@ -55,7 +51,6 @@ static struct option const long_options[] = {
        { "cert", required_argument, 0, 'c' },
        { "key", required_argument, 0, 'k' },
        { "CAdir", required_argument, 0, 'C' },
-       { "pidfile",required_argument, 0, 'i' },
        { "socket",required_argument, 0, 's' },
        { "noAuth", no_argument, 0, 'x' },
        { "noIPC", no_argument, 0, 'y' },
@@ -88,7 +83,6 @@ usage(char *program_name) {
                "-k, --key  <file>          location of server private key\n"
                "-C, --CAdir <dir>          directory containing CA certificates\n"
                "-s, --socket <dir>         interlogger's socket to send messages to\n"
-               "-i, --pidfile <file>       pid file\n"
                "--noAuth                   do not check caller's identity\n"
                "--noIPC                    do not send messages to inter-logger\n"
                "--noParse                  do not parse messages for correctness\n",
@@ -139,7 +133,6 @@ void handle_signal(int num) {
                                close(confirm_sock);
                                unlink(confirm_sock_name);
                        }
-                       unlink(pidfile);
                        exit(1);
                        break;
                default: break;
@@ -276,7 +269,6 @@ int main(int argc, char *argv[])
    int ret;
    int childpid;
    int opt;
-   FILE *pidf;
 
    int listener_fd;
    int client_fd;
@@ -307,7 +299,6 @@ This is LocalLogger, part of Workload Management System in EU DataGrid & EGEE.\n
        "k:" /* key */
        "C:" /* CA dir */
        "s:" /* socket */
-       "i:" /* pidfile */
        "x"  /* noAuth */
        "y"  /* noIPC */
        "z",  /* noParse */
@@ -323,7 +314,6 @@ This is LocalLogger, part of Workload Management System in EU DataGrid & EGEE.\n
                case 'k': key_file = optarg; break;
                case 'C': CAcert_dir = optarg; break;
                case 's': socket_path = optarg; break;
-               case 'i': pidfile = optarg; break;
                case 'x': noAuth = 1; break;
                case 'y': noIPC = 1; break;
                case 'z': noParse = 1; break;
@@ -407,14 +397,6 @@ This is LocalLogger, part of Workload Management System in EU DataGrid & EGEE.\n
    client_addr_len = sizeof(client_addr);
    bzero((char *) &client_addr, client_addr_len);
 
-/* just try it before deamonizing to be able to complain aloud */
-  if (!(pidf = fopen(pidfile,"w"))) {
-        perror(pidfile);
-        exit(-1);
-  }
-  fclose(pidf);
-
-
    /* daemonize */
    if (debug) {
        edg_wll_ll_log(LOG_INFO,"Running as daemon... [no]\n");
@@ -427,10 +409,6 @@ This is LocalLogger, part of Workload Management System in EU DataGrid & EGEE.\n
        }
    }
 
-  pidf = fopen(pidfile,"w"); assert(pidf); /* XXX */
-  fprintf(pidf,"%d\n",getpid());
-  fclose(pidf);
-
    /*
     * Main loop
     */
index 7543b3b..18fc3b4 100644 (file)
@@ -60,6 +60,6 @@ recover_thread(void *q)
                                il_log(LOG_INFO, "New certificate found and deployed.\n");
                        }
                }
-               sleep(RECOVER_TIMEOUT);
+               sleep(INPUT_TIMEOUT);
        }
 }
index aa16a8f..e920349 100755 (executable)
@@ -19,13 +19,6 @@ GLITE_JP_LOCATION=${GLITE_JP_LOCATION:-$GLITE_LOCATION}
 [ -n "$GLITE_JP_IMPORTER_PIDFILE" ] && jp_importer_pidfile=$GLITE_JP_IMPORTER_PIDFILE ||
        jp_importer_pidfile=$GLITE_LOCATION_VAR/glite-jp-importer.pid
 
-GLITE_LB_TYPE=${GLITE_LB_TYPE:-'server'} # server, proxy, both
-GLITE_LB_PROXY_SOCK=${GLITE_LB_PROXY_SOCK:-'/tmp/glite-lbproxy-ilog.sock'}
-GLITE_LB_PROXY_FPREFIX=${GLITE_LB_PROXY_FPREFIX:-'/tmp/glite-lbproxy-ilog_events'}
-
-IL_PIDFILE=$GLITE_LOCATION_VAR/glite-lb-interlogd.pid
-NOTIF_IL_PIDFILE=$GLITE_LOCATION_VAR/glite-lb-notif-interlogd.pid
-
 unset creds port
 
 start()
@@ -98,23 +91,12 @@ start()
                        GLITE_LB_NOTIF_OTHER_OPTIONS="$GLITE_LB_NOTIF_OTHER_OPTIONS -v -d >> $GLITE_LOCATION_VAR/notif-il.log 2>&1 &"
                fi
        fi
-       case "$GLITE_LB_TYPE" in
-       proxy)
-               proxy="-P --proxy-il-sock $GLITE_LB_PROXY_SOCK --proxy-il-fprefix $GLITE_LB_PROXY_FPREFIX"
-               ;;
-       both)
-               proxy="-B --proxy-il-sock $GLITE_LB_PROXY_SOCK --proxy-il-fprefix $GLITE_LB_PROXY_FPREFIX"
-               ;;
-       *)
-               proxy=''
-               ;;
-       esac
 
        echo -n Starting glite-lb-bkserverd ...
        su - $GLITE_USER -c "$GLITE_LOCATION/bin/glite-lb-bkserverd \
                --notif-il-sock=$GLITE_LB_NOTIF_SOCK \
                --notif-il-fprefix=$GLITE_LB_NOTIF_FPREFIX \
-               $super $creds -i $pidfile $port $wport $dumpdir $purgedir $lbreg_maildir $proxy\
+               $super $creds -i $pidfile $port $wport $dumpdir $purgedir $lbreg_maildir\
                $GLITE_LB_SERVER_OTHER_OPTIONS" \
        && echo " done" || echo " FAILED"
 
@@ -122,7 +104,7 @@ start()
                echo -n Starting glite-lb-notif-interlogd ...
                su - $GLITE_USER -c "$GLITE_LOCATION/bin/glite-lb-notif-interlogd \
                        -f $GLITE_LB_NOTIF_FPREFIX -s $GLITE_LB_NOTIF_SOCK \
-                       -i $NOTIF_IL_PIDFILE -M 10485760 \
+                       -M 10485760 \
                        $creds $GLITE_LB_NOTIF_OTHER_OPTIONS" && echo " done" || echo " FAILED"
        else
                echo Warning: glite-lb-notif-interlogd not installed, LB notifications will not work
@@ -135,24 +117,12 @@ start()
                        $jpps $creds $GLITE_JP_IMPORTER_ARGS" \
                && echo " done" || echo " FAILED"
        fi
-
-       if test x"$GLITE_LB_TYPE" = x"proxy" -o x"$GLITE_LB_TYPE" = x"both" ; then
-               if test -x $GLITE_LOCATION/bin/glite-lb-notif-interlogd; then
-                       echo -n Starting glite-lb-interlogd for proxy ...
-                       su - $GLITE_USER -c "$GLITE_LOCATION/bin/glite-lb-interlogd \
-                               -f $GLITE_LB_PROXY_FPREFIX -s $GLITE_LB_PROXY_SOCK \
-                               -i $IL_PIDFILE \
-                               $creds $GLITE_LB_PREFIX_OTHER_OPTIONS" && echo " done" || echo " FAILED"
-               else
-                       echo Warning: glite-lb-interlogd not installed, logging to LB proxy will not work
-               fi
-       fi
 }
 
 stop_daemon()
 {
        name="$1"
-       local pidfile="$2"
+       pidfile="$2"
 
        if [ -f "$pidfile" ]; then
                pid=`cat "$pidfile"`
@@ -198,29 +168,21 @@ status_daemon()
 
 stop()
 {
-       LC_ALL=C
-
-       stop_daemon glite-lb-notif-interlogd $NOTIF_IL_PIDFILE
-       echo " done"
+       echo -n Stopping glite-lb-notif-interlogd ...
+       killall glite-lb-notif-interlogd
+       echo done
 
        stop_daemon "glite-lb-bkserverd" $pidfile
        if test x"$GLITE_LB_EXPORT_ENABLED" = x"true"; then
                stop_daemon "glite-jp-importer" $jp_importer_pidfile
        fi
-
-       if test -f $IL_PIDFILE; then
-               stop_daemon glite-lb-interlogd $IL_PIDFILE
-               echo "done"
-       else 
-               echo "glite-lb-interlogd for proxy not running"
-       fi
 }
 
 status()
 {
        retval=0
-       LC_ALL=C
 
+       LC_ALL=C
        if netstat -an --unix | grep "^unix .* LISTEN.* ${GLITE_LB_NOTIF_SOCK}$" >/dev/null 2>&1 ;then
                echo glite-lb-notif-interlogd running
        else
@@ -228,13 +190,6 @@ status()
                retval=1
        fi
 
-       if netstat -an --unix | grep "^unix .* LISTEN.* ${GLITE_LB_PROXY_SOCK}$" >/dev/null 2>&1 ;then
-               echo glite-lb-interlogd for proxy running
-       else
-               echo glite-lb-interlogd for proxy not running
-               retval=1
-       fi
-
        status_daemon "glite-lb-bkserverd" "$pidfile" || retval=1
        if test x"$GLITE_LB_EXPORT_ENABLED" = x"true"; then
                status_daemon "glite-jp-importer" "$jp_importer_pidfile" || retval=1
index 53c93fd..b07cbb5 100644 (file)
@@ -531,7 +531,6 @@ int edg_wll_SoapToQueryRec(
                edg_wll_SoapToJobStatCode(*(collection->statName), &(out->attr_id.state));
                break;
        case EDG_WLL_QUERY_ATTR_USERTAG:
-       case EDG_WLL_QUERY_ATTR_JDL_ATTR:
                out->attr_id.tag = strdup(collection->tagName);
                break;
        default:
index 5e05b1d..22cf109 100644 (file)
@@ -12,8 +12,7 @@ default: compile
 compile: at3
 
 at3: at3.in
-       #XXX: sed "s?%PREFIX%?${stagedir}?" at3.in >$@
-       cp at3.in $@
+       sed "s?%PREFIX%?${stagedir}?" at3.in >$@
 
 stage: compile
        $(MAKE) install PREFIX=${stagedir}
index 4711999..544b4c5 100755 (executable)
@@ -5,9 +5,7 @@ use File::Basename;
 my $lines = $ENV{AT3_LINES};
 
 my $prefix;
-use File::Basename;
-
-BEGIN{ $prefix = dirname($0)."/.."; }
+BEGIN{ $prefix = '%PREFIX%'; }
 
 use lib "$prefix/share/perl";
 use gLite::LB::MultiStruct;
index 7b2b5a7..3f70817 100644 (file)
@@ -36,10 +36,7 @@ INSTALL:=libtool --mode=install install
 
 GSOAP_FILES_PREFIX:= bk_ws_
 dotless_gsoap_ver:=${shell echo ${gsoap_default_version} | tr -d . }
-ifeq ($(shell test -f ${stagedir}/lib/libglite_security_gsoap_plugin_${dotless_gsoap_ver}_${nothrflavour}_c.so && echo ok),ok)
-       langflavour:=_c
-endif
-GSOAP_LIB:=-L${stagedir}/lib -lglite_security_gsoap_plugin_${dotless_gsoap_ver}_${nothrflavour}${langflavour}
+GSOAP_LIB:=-L${stagedir}/lib -lglite_security_gsoap_plugin_${dotless_gsoap_ver}_${nothrflavour}
 
 WS_CLIENT_OBJS:= $(GSOAP_FILES_PREFIX)C.o $(GSOAP_FILES_PREFIX)Client.o ws_fault.o
 # ws_typeref.o
@@ -79,6 +76,6 @@ LB.xh: ws_typemap.dat ${stagedir}/interface/LB.wsdl
 
 soap_version.h:
        ${gsoap_bin_prefix}/soapcpp2 /dev/null 
-       perl -ne '$$. == 2 && /.*([0-9]+)\.([0-9]+)\.([0-9]+)([a-z]?).*/ && printf "#define GSOAP_VERSION %d%02d%02d\n#define GSOAP_VERSION_LETTER '\''".($$4?$$4:"\\0")."'\''\n",$$1,$$2,$$3' soapH.h >$@
+       perl -ne '$$. == 2 && /.*([0-9]+)\.([0-9]+)\.([0-9]+)([a-z]).*/ && printf "#define GSOAP_VERSION %d%02d%02d\n#define GSOAP_VERSION_LETTER '\''$$4'\''\n",$$1,$$2,$$3' soapH.h >$@
        -rm soapC.cpp soapH.h soapStub.h soapClient.cpp soapServer.cpp soapClientLib.cpp soapServerLib.cpp
 
diff --git a/org.glite.lbjp-common.db/.cvsignore b/org.glite.lbjp-common.db/.cvsignore
deleted file mode 100644 (file)
index b7d6c92..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-build
-doc
-reports
diff --git a/org.glite.lbjp-common.db/LICENSE b/org.glite.lbjp-common.db/LICENSE
deleted file mode 100644 (file)
index 01b973b..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-LICENSE file for EGEE Middleware
-================================
-
-Copyright (c) 2004 on behalf of the EU EGEE Project: 
-The European Organization for Nuclear Research (CERN), 
-Istituto Nazionale di Fisica Nucleare (INFN), Italy
-Datamat Spa, Italy
-Centre National de la Recherche Scientifique (CNRS), France
-CS Systeme d'Information (CSSI), France
-Royal Institute of Technology, Center for Parallel Computers (KTH-PDC), Sweden
-Universiteit van Amsterdam (UvA), Netherlands
-University of Helsinki (UH.HIP), Finlan
-University of Bergen (UiB), Norway
-Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met: 
-
-1. Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-
-3. The end-user documentation included with the redistribution, if
-any, must include the following acknowledgment: "This product includes
-software developed by The EU EGEE Project (http://cern.ch/eu-egee/)."
-Alternatively, this acknowledgment may appear in the software itself, if
-and wherever such third-party acknowledgments normally appear.
-
-4. The names EGEE and the EU EGEE Project must not be
-used to endorse or promote products derived from this software without
-prior written permission. For written permission, please contact
-<email address>.
-
-5. You are under no obligation whatsoever to provide anyone with any
-bug fixes, patches, or upgrades to the features, functionality or
-performance of the Software ("Enhancements") that you may develop over
-time; however, if you choose to provide your Enhancements to The EU
-EGEE Project, or if you choose to otherwise publish or distribute your
-Enhancements, in source code form without contemporaneously requiring
-end users of The EU EGEE Proejct to enter into a separate written license
-agreement for such Enhancements, then you hereby grant The EU EGEE Project
-a non-exclusive, royalty-free perpetual license to install, use, copy,
-modify, prepare derivative works, incorporate into the EGEE Middleware
-or any other computer software, distribute, and sublicense your
-Enhancements or derivative works thereof, in binary and source code
-form (if any), whether developed by The EU EGEE Project or third parties.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL PROJECT OR ITS CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-This software consists of voluntary contributions made by many
-individuals on behalf of the EU EGEE Prject. For more information on The
-EU EGEE Project, please see http://cern.ch/eu-egee/. For more information on
-EGEE Middleware, please see http://egee-jra1.web.cern.ch/egee-jra1/
-
-
diff --git a/org.glite.lbjp-common.db/Makefile b/org.glite.lbjp-common.db/Makefile
deleted file mode 100644 (file)
index dafb817..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-# defaults
-top_srcdir=..
-builddir=build
-stagedir=.
-distdir=.
-globalprefix=glite
-lbutilsprefix=lbu
-package=glite-lb-utils-db
-PREFIX=/opt/glite
-
-mysql-devel_prefix=/opt/mysql
-postgresql_prefix=/usr
-cppunit_prefix=/opt/cppunit
-thrflavour=gcc32pthr
-nothrflavour=gcc32
-
--include Makefile.inc
--include ../project/version.properties
-
-CC=gcc
-
-VPATH=${top_srcdir}/interface:${top_srcdir}/src:${top_srcdir}/examples
-
-DEBUG:=-g -O0 -W -Wall
-
-MYSQL_SONAME:=$(shell ../project/get_soname.sh mysqlclient ${mysql-devel_prefix}/${libdir} ${mysql_prefix}/${libdir} ${mysql-devel_prefix}/lib ${mysql_prefix}/lib)
-PSQL_SONAME:=$(shell ../project/get_soname.sh pq ${postgresql_prefix}/${libdir} ${postgresql_prefix}/lib)
-
-MYSQL_CPPFLAGS:=-I${mysql-devel_prefix}/include -I${mysql-devel_prefix}/include/mysql
-PSQL_CPPFLAGS:=-I${postgresql_prefix}/include
-
-
-CFLAGS:= \
-       ${DEBUG} \
-       -DVERSION=\"${module.version}\" \
-       -I${stagedir}/include -I${top_srcdir}/src -I. \
-       -I${top_srcdir}/interface \
-       ${COVERAGE_FLAGS} \
-       -D_GNU_SOURCE \
-       -DHAVE_SYSLOG_H=1
-
-ifdef LBS_DB_PROFILE
-       CFLAGS:=${CFLAGS} -DLBS_DB_PROFILE
-endif
-ifneq (${mysql-devel_prefix},no)
-       OBJS:=${OBJS} db-mysql.o
-       CFLAGS:=${CFLAGS} -DMYSQL_SONAME=\"${MYSQL_SONAME}\"
-endif
-ifneq (${postgresql_prefix},no)
-       OBJS:=${OBJS} db-pg.o
-       CFLAGS:=${CFLAGS} -DPSQL_SONAME=\"${PSQL_SONAME}\"
-endif
-
-TEST_LIBS:=-L${cppunit_prefix}/lib -lcppunit
-TEST_INC:=-I${cppunit_prefix}/include
-
-LDFLAGS:=-L${stagedir}/lib ${COVERAGE_FLAGS}
-
-COMPILE:=libtool --mode=compile ${CC} ${CFLAGS}
-LINK:=libtool --mode=link ${CC} -rpath ${stagedir}/lib ${LDFLAGS} 
-INSTALL:=libtool --mode=install install
-
-EXT_LIBS:=-lglite_lbu_trio -lpthread -ldl
-TESTOBJS:=${OBJS} dbtest.o
-OBJS:=${OBJS} db.o
-HDRS:=db.h
-LOBJS:=${OBJS:.o=.lo}
-LTESTOBJS:=${TESTOBJS:.o=.lo}
-
-default all: compile doc
-
-check_soname:
-       if [ "${mysql-devel_prefix}" != no ]; then \
-               if [ "${MYSQL_SONAME}" = notfound ]; then \
-                       echo "MySQL shared library not found!"; \
-                       false; \
-               fi \
-       fi
-       if [ "${postgresql_prefix}" != no ]; then \
-               if [ "${PSQL_SONAME}" = notfound ]; then \
-                       echo "PostgreSQL shared library not found!"; \
-                       false; \
-               fi \
-       fi
-
-libglite_lbu_db.la: check_soname ${LOBJS}
-       ${LINK} -o $@ $+ ${EXT_LIBS}
-
-libglite_lbu_dbtest.la: check_soname ${LTESTOBJS}
-       ${LINK} -o $@ $+ ${EXT_LIBS}
-
-dbtest.lo dbtest.o: db.c db.h
-       ${COMPILE} -DGLITE_LBU_DEFAULT_RESULT_BUFFER_LENGTH=10 -c $< -o $@
-
-db_test_mysql: db_test_mysql.lo libglite_lbu_dbtest.la
-       ${LINK} -o $@ $+ ${EXT_LIBS}
-
-db_test_psql: db_test_psql.lo libglite_lbu_dbtest.la
-       ${LINK} -o $@ $+ ${EXT_LIBS}
-
-db_expire: db_expire.lo libglite_lbu_dbtest.la
-       ${LINK} -o $@ $+ ${EXT_LIBS}
-
-compile: libglite_lbu_db.la
-
-check:
-       -echo No checks here yet.
-
-test_coverage:
-       -mkdir coverage
-       cd coverage && $(MAKE) -f ../Makefile top_srcdir=../../ COVERAGE_FLAGS="-fprofile-arcs -ftest-coverage" check
-       cd coverage && for i in `echo ${OBJS} | tr ' ' '\012' | sort -u`; do gcov $$i ; done
-
-examples: db_test_mysql db_test_psql db_expire
-
-doc:
-
-olddoc:
-       cp ${top_srcdir}/doc/*.dox .
-       echo "PROJECT_NUMBER = ${module.version}" >> C.dox
-       doxygen C.dox
-
-stage: compile
-       $(MAKE) install PREFIX=${stagedir} DOSTAGE=yes
-
-dist: distsrc distbin
-
-distsrc:
-       mkdir -p ${top_srcdir}/${package}-${module.version}
-       cd ${top_srcdir} && GLOBIGNORE="${package}-${module.version}" && cp -Rf * ${package}-${module.version}
-       cd ${top_srcdir} && tar -czf ${distdir}/${package}-${module.version}_src.tar.gz --exclude-from=project/tar_exclude ${package}-${module.version}
-       rm -rf ${top_srcdir}/${package}-${module.version}
-
-distbin:
-       $(MAKE) install PREFIX=`pwd`/tmpbuilddir${stagedir}
-       save_dir=`pwd`; cd tmpbuilddir${stagedir} && tar -czf $$save_dir/${top_srcdir}/${distdir}/${package}-${module.version}_bin.tar.gz *; cd $$save_dir
-       rm -rf tmpbuilddir
-        
-install: all
-       -mkdir -p ${PREFIX}/lib
-       -mkdir -p ${PREFIX}/share/doc/${package}-${module.version}
-       -mkdir -p ${PREFIX}/include/${globalprefix}/${lbutilsprefix}
-       ${INSTALL} -m 644 ${top_srcdir}/LICENSE ${PREFIX}/share/doc/${package}-${module.version}
-       -cp -r C ${PREFIX}/share/doc/${package}-${module.version}
-       ${INSTALL} -m 755 "libglite_lbu_db.la" "${PREFIX}/lib/libglite_lbu_db.la"; \
-       ${INSTALL} -m 644 ${top_srcdir}/interface/${HDRS} ${PREFIX}/include/${globalprefix}/${lbutilsprefix}
-
-clean:
-       rm -rvf *.o *.lo .libs lib* *.c *.h *.dox C/ CPP/
-       rm -rvf log.xml project/ rpmbuild/ RPMS/ tgz/
-       rm -rvf db_expire db_test db_test_mysql db_test_psql
-
-db-mysql.o db-mysql.lo: db-mysql.c
-       ${COMPILE} ${MYSQL_CPPFLAGS} -c $<
-
-db-pg.o db-pg.lo: db-pg.c
-       ${COMPILE} ${PSQL_CPPFLAGS} -c $<
-
-db_test_mysql.o db_test_mysql.lo: db_test.c
-       ${COMPILE} -DMYSQL_BACKEND=1 -c $< -o $@
-
-db_test_psql.o db_test_psql.lo: db_test.c
-       ${COMPILE} -DPSQL_BACKEND=1 -c $< -o $@
-
-%.o %.lo: %.c
-       ${COMPILE} -c $<
-
-db.lo: db.c db.h db-int.h
-db_test_psql.lo: libglite_lbu_dbtest.la db.h db-int.h db_test.c
-db_test_mysql.lo: libglite_lbu_dbtest.la db.h db-int.h db_test.c
-db-mysql.lo: db-mysql.c db-int.h db.h
-db-pg.lo: db-pg.c db-int.h db.h
-
-.PHONY: default all compile check examples doc stage dist distsrc distbin install clean test_coverage check_soname
diff --git a/org.glite.lbjp-common.db/doc/C.dox b/org.glite.lbjp-common.db/doc/C.dox
deleted file mode 100644 (file)
index e5396fa..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-PROJECT_NAME          = "Glite LBJP Common: DB module"
-OUTPUT_DIRECTORY      = C
-OPTIMIZE_OUTPUT_FOR_C = YES
-INPUT                 = \
-                        ../interface/db.h
-SHOW_DIRECTORIES      = NO
-FULL_PATH_NAMES       = NO
-EXTRACT_ALL           = YES
-PDF_HYPERLINKS        = YES
-USE_PDFLATEX          = YES
-MACRO_EXPANSION       = YES
-EXPAND_ONLY_PREDEF    = YES
-#PREDEFINED            = _EDG_WLL_EVENT_COMMON 
-HAVE_DOT              = NO
-GENERATE_MAN          = YES
-MAN_LINKS             = NO
diff --git a/org.glite.lbjp-common.db/examples/db_expire.c b/org.glite.lbjp-common.db/examples/db_expire.c
deleted file mode 100644 (file)
index 3830e0f..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Example (and quick test) of prepared statements expirations.
- * Use 'SET GLOBAL wait_timeout=...' for experimenting.
- *
- * Requires existing database with appropriate access and example table:
- *
- *   mysqladmin -u root -p create test
- *   mysql -u root -p -e 'GRANT ALL on test.* to testuser@localhost'
- *   ./db_test
- *
- * Then you can launch:
- *
- *   ./db_expire
- *
- * Use CS environment variable for different user/pwd@machine:dbname.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "db.h"
-
-#define CS "testuser/@localhost:test"
-#define SELECT_CMD "SELECT id, user, info FROM data WHERE user = ?"
-
-#define dprintf(ARGS) { printf("%s: ", name); printf ARGS; }
-
-
-static void print_blob(unsigned long len, char *blob) {
-       unsigned int i;
-
-       for (i = 0; i < len; i++) printf("%02X ", blob[i]);
-       printf("(='");
-       for (i = 0; i < len; i++) printf("%c", blob[i]);
-       printf("')");
-}
-
-
-static void print_free_result(const char *name, unsigned long *lens, char **res) {
-       dprintf(("  id='%s'=%d\n", res[0], atoi(res[0])));
-
-       dprintf(("  user='%s'\n", res[1]));
-
-       dprintf(("  blob="));
-       if (res[2] && lens) print_blob(lens[2], res[2]);
-       else printf("null");
-       printf("\n");
-
-       free(res[0]);
-       free(res[1]);
-       free(res[2]);
-}
-
-
-static void print_error(glite_lbu_DBContext ctx) {
-       if (ctx) {
-               char *t, *d;
-
-               if (glite_lbu_DBError(ctx, &t, &d)) {
-                       printf("Error %s: %s\n", t, d);
-                       free(t); free(d);
-               }
-       }
-}
-
-
-int main(int argn __attribute((unused)), char *argv[]) {
-       char *name, *user;
-       const char *cs;
-       glite_lbu_DBContext ctx;
-       glite_lbu_Statement stmt;
-       int caps, nr, c;
-       unsigned long lens[3];
-       char *res[3];
-
-       if ((name = strrchr(argv[0], '/')) != NULL) name++;
-       else name = argv[0];
-       if ((cs = getenv("CS")) == NULL) cs = CS;
-
-       // init
-       dprintf(("connecting to %s...\n", cs));
-       if (glite_lbu_InitDBContext(&ctx, GLITE_LBU_DB_BACKEND_MYSQL) != 0) {
-               print_error(ctx);
-               goto failctx;
-       }
-       if (glite_lbu_DBConnect(ctx, cs) != 0) {
-               print_error(ctx);
-               goto failctx;
-       }
-       if ((caps = glite_lbu_DBQueryCaps(ctx)) == -1) {
-               print_error(ctx);
-               goto failcon;
-       }
-       if ((caps & GLITE_LBU_DB_CAP_PREPARED) == 0) {
-               print_error(ctx);
-               dprintf(("can't do prepared commands, exiting."));
-               goto failcon;
-       }
-       // caps
-       glite_lbu_DBSetCaps(ctx, caps | GLITE_LBU_DB_CAP_ERRORS);
-       dprintf(("capabilities: %d\n", caps));
-
-       user = NULL;
-       dprintf(("preparing '%s'...\n", user));
-       if ((glite_lbu_PrepareStmt(ctx, SELECT_CMD, &stmt)) != 0) {
-               print_error(ctx);
-               goto failcon;
-       }
-
-       do {
-               user = "cicomexocitl.civ";
-               dprintf(("executing '%s'...\n", user));
-               if (glite_lbu_ExecPreparedStmt(stmt, 1, GLITE_LBU_DB_TYPE_VARCHAR, user) == -1) {
-                       print_error(ctx);
-                       goto failstmt;
-               }
-               dprintf(("fetching '%s'...\n", user));
-               while ((nr = glite_lbu_FetchRow(stmt, 3, lens, res)) > 0) {
-                       dprintf(("Result: n=%d, res=%p\n", nr, res));
-                       print_free_result(name, lens, res);
-               }
-               if (nr < 0) {
-                       dprintf(("fetch '%s' failed\n", user));
-                       break;
-               }
-               dprintf(("\n"));
-
-               c = fgetc(stdin);
-       } while (c != -1 && (c == '\r' || c == '\n'));
-
-       dprintf(("closing...\n"));
-       glite_lbu_DBClose(ctx);
-       glite_lbu_FreeDBContext(ctx);
-       return 0;
-
-failstmt:
-       printf("closing stmt...\n");
-       glite_lbu_FreeStmt(&stmt);
-failcon:
-       dprintf(("closing...\n"));
-       glite_lbu_DBClose(ctx);
-failctx:
-       glite_lbu_FreeDBContext(ctx);
-       dprintf(("failed\n"));
-       return 1;
-}
diff --git a/org.glite.lbjp-common.db/examples/db_test.c b/org.glite.lbjp-common.db/examples/db_test.c
deleted file mode 100644 (file)
index e1b639f..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Example (and quick test) of this DB module.
- *
- * Requires existing database with appropriate access:
- *
- *   mysqladmin -u root -p create test
- *   mysql -u root -p -e 'GRANT ALL on test.* to testuser@localhost'
- *
- * Or postgres:
- *
- *   createuser -U postgres testuser
- *   createdb -U postgres --owner testuser test
- *
- * Use CS environment variable when using different user/pwd@machine:dbname.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <glite/lbu/trio.h>
-
-#include "db.h"
-
-#define CS "testuser/@localhost:test"
-
-#ifdef PSQL_BACKEND
-#define CREATE_CMD "CREATE TABLE \"data\" (\n\
-    \"id\"    INTEGER NOT NULL,\n\
-    \"user\"  VARCHAR(32) NOT NULL,\n\
-    \"info\"  BYTEA,\n\
-    PRIMARY KEY (\"id\")\n\
-)"
-#define AMP "\""
-#define INSERT_CMD "INSERT INTO " AMP "data" AMP " (" AMP "id" AMP ", " AMP "user" AMP ", " AMP "info" AMP ") VALUES ($1, $2, $3)"
-#define SELECT_CMD "SELECT " AMP "id" AMP ", " AMP "user" AMP ", " AMP "info" AMP " FROM " AMP "data" AMP " WHERE " AMP "user" AMP " = $1"
-#define DB_TEST_BACKEND GLITE_LBU_DB_BACKEND_PSQL
-
-#else
-
-#define CREATE_CMD "CREATE TABLE data (\n\
-    `id`    INT NOT NULL,\n\
-    `user`  VARCHAR(32) NOT NULL,\n\
-    `info`  BLOB,\n\
-    PRIMARY KEY (id),\n\
-    INDEX(`user`)\n\
-) engine=innodb"
-#define AMP "`"
-#define INSERT_CMD "INSERT INTO " AMP "data" AMP " (" AMP "id" AMP ", " AMP "user" AMP ", " AMP "info" AMP ") VALUES (?, ?, ?)"
-#define SELECT_CMD "SELECT " AMP "id" AMP ", " AMP "user" AMP ", " AMP "info" AMP " FROM " AMP "data" AMP " WHERE " AMP "user" AMP " = ?"
-#define DB_TEST_BACKEND GLITE_LBU_DB_BACKEND_MYSQL
-#endif
-
-#define DROP_CMD "DROP TABLE " AMP "data" AMP
-#define INSERT_TRIO_CMD "INSERT INTO " AMP "data" AMP " (" AMP "id" AMP ", " AMP "user" AMP ", " AMP "info" AMP ") VALUES (%d, %s, %s)"
-#define SELECT_TRIO_CMD "SELECT " AMP "id" AMP ", " AMP "user" AMP ", " AMP "info" AMP " FROM " AMP "data" AMP " WHERE " AMP "user" AMP " = '%s'"
-
-#define dprintf(ARGS) { printf("%s: ", name); printf ARGS; }
-
-
-static void print_blob(unsigned long len, char *blob) {
-       unsigned int i;
-
-       for (i = 0; i < len; i++) printf("%02X ", blob[i]);
-       printf("(='");
-       for (i = 0; i < len; i++) printf("%c", blob[i]);
-       printf("')");
-}
-
-
-static void print_free_result(const char *name, unsigned long *lens, char **res) {
-       dprintf(("  id='%s'=%d\n", res[0], atoi(res[0])));
-
-       dprintf(("  user='%s'\n", res[1]));
-
-       dprintf(("  blob="));
-       if (res[2] && lens) print_blob(lens[2], res[2]);
-       else printf("null");
-       printf("\n");
-
-       free(res[0]);
-       free(res[1]);
-       free(res[2]);
-}
-
-
-int main(int argn __attribute((unused)), char *argv[]) {
-       char *name, *cmd;
-       const char *cs;
-       glite_lbu_DBContext ctx;
-       glite_lbu_Statement stmt;
-       int caps;
-
-#ifndef NO_PREPARED
-       char blob1[] = "Guess: blob or _string?"; blob1[15] = 0;
-       char blob2[] = {0, 1, 2, 3, 4, 5};
-#endif
-
-       int nr; 
-       char *res[3];
-       unsigned long lens[3];
-
-       if ((name = strrchr(argv[0], '/')) != NULL) name++;
-       else name = argv[0];
-       if ((cs = getenv("CS")) == NULL) cs = CS;
-       cmd = NULL;
-
-       // init
-       dprintf(("connecting to %s...\n", cs));
-       if (glite_lbu_InitDBContext(&ctx, DB_TEST_BACKEND) != 0) goto failctx;
-       if (glite_lbu_DBConnect(ctx, cs) != 0) goto failctx;
-       if ((caps = glite_lbu_DBQueryCaps(ctx)) == -1) goto failcon;
-#ifndef NO_PREPARED
-       if ((caps & GLITE_LBU_DB_CAP_PREPARED) == 0) {
-               dprintf(("can't do prepared commands, exiting."));
-               goto failcon;
-       }
-#endif
-       // caps
-       glite_lbu_DBSetCaps(ctx, caps | GLITE_LBU_DB_CAP_ERRORS);
-       dprintf(("capabilities: %d\n", caps));
-       // create all needed tables and data
-       dprintf(("creating tables...\n"));
-       glite_lbu_ExecSQL(ctx, DROP_CMD, NULL);
-       if (glite_lbu_ExecSQL(ctx, CREATE_CMD, NULL) == -1) goto failcon;
-       // trio-insert
-       dprintf(("trio-insert...\n"));
-       asprintf(&cmd, INSERT_TRIO_CMD, 1, "'hyperochus'", "NULL");
-       if (glite_lbu_ExecSQL(ctx, cmd, NULL) != 1) goto failcon;
-       free(cmd); cmd = NULL;
-#ifndef NO_PREPARED
-       // prepared-insert
-       dprintf(("prepare-insert...\n"));
-       if (glite_lbu_PrepareStmt(ctx, INSERT_CMD, &stmt) != 0) goto failcon;
-       dprintf(("execute 1. insert...\n"));
-       if (glite_lbu_ExecPreparedStmt(stmt, 3,
-                              GLITE_LBU_DB_TYPE_INT, 2,
-                              GLITE_LBU_DB_TYPE_VARCHAR, "cicomexocitl.civ",
-                              GLITE_LBU_DB_TYPE_BLOB, blob1, sizeof(blob1) - 1) != 1) goto failstmt;
-       dprintf(("execute 2. insert...\n"));
-       if (glite_lbu_ExecPreparedStmt(stmt, 3,
-                              GLITE_LBU_DB_TYPE_INT, 3,
-                              GLITE_LBU_DB_TYPE_VARCHAR, "tartarus",
-                              GLITE_LBU_DB_TYPE_NULL) != 1) goto failstmt;
-       dprintf(("execute 3. insert...\n"));
-       if (glite_lbu_ExecPreparedStmt(stmt, 3,
-                              GLITE_LBU_DB_TYPE_INT, 4,
-                              GLITE_LBU_DB_TYPE_VARCHAR, "harpia",
-                              GLITE_LBU_DB_TYPE_BLOB, blob2, sizeof(blob2)) != 1) goto failstmt;
-       glite_lbu_FreeStmt(&stmt);
-       dprintf(("\n"));
-#endif
-
-       // trio-query
-{
-       const char *user;
-
-       user = "harpia";
-       dprintf(("selecting '%s'...\n", user));
-       asprintf(&cmd, SELECT_TRIO_CMD, user);
-       if (glite_lbu_ExecSQL(ctx, cmd, &stmt) == -1) goto failcon;
-       free(cmd); cmd = NULL;
-       dprintf(("fetching '%s'...\n", user));
-       while ((nr = glite_lbu_FetchRow(stmt, 3, lens, res)) > 0) {
-               dprintf(("Result: n=%d, res=%p\n", nr, res));
-               print_free_result(name, lens, res);
-       }
-       if (nr < 0) dprintf(("fetch '%s' failed\n", user));
-       dprintf(("closing stmt...\n"));
-       glite_lbu_FreeStmt(&stmt);
-       dprintf(("\n"));
-
-       user = "hyperochus";
-       dprintf(("selecting '%s'...\n", user));
-       asprintf(&cmd, SELECT_TRIO_CMD, user);
-       if (glite_lbu_ExecSQL(ctx, cmd, &stmt) == -1) goto failcon;
-       free(cmd); cmd = NULL;
-       dprintf(("fetching '%s'...\n", user));
-       while ((nr = glite_lbu_FetchRow(stmt, 3, lens, res)) > 0) {
-               dprintf(("Result: n=%d, res=%p\n", nr, res));
-               print_free_result(name, lens, res);
-       }
-       if (nr < 0) dprintf(("fetch '%s' failed\n", user));
-       dprintf(("closing stmt...\n"));
-       glite_lbu_FreeStmt(&stmt);
-       dprintf(("\n"));
-
-       user = "nobody";
-       dprintf(("selecting '%s'...\n", user));
-       asprintf(&cmd, SELECT_TRIO_CMD, user);
-       if (glite_lbu_ExecSQL(ctx, cmd, &stmt) == -1) goto failcon;
-       free(cmd); cmd = NULL;
-       dprintf(("fetching '%s'...\n", user));
-       while ((nr = glite_lbu_FetchRow(stmt, 3, lens, res)) > 0) {
-               dprintf(("Result: n=%d, res=%p\n", nr, res));
-               print_free_result(name, lens, res);
-       }
-       if (nr < 0) dprintf(("fetch '%s' failed\n", user));
-       dprintf(("closing stmt...\n"));
-       glite_lbu_FreeStmt(&stmt);
-       dprintf(("\n"));
-
-       dprintf(("nonsese...\n"));
-       if (glite_lbu_ExecSQL(ctx, "nonsense", NULL) == -1) {
-               dprintf(("was error, OK\n"));
-       } else {
-               dprintf(("this should file\n"));
-               goto failcon;
-       }
-}
-
-#ifndef NO_PREPARED
-       // "param" queries
-{
-       const char *user = NULL;
-
-       dprintf(("preparing '%s'...\n", user));
-       if ((glite_lbu_PrepareStmt(ctx, SELECT_CMD, &stmt)) != 0) goto failcon;
-
-       user = "cicomexocitl.civ";
-       dprintf(("executing '%s'...\n", user));
-       if (glite_lbu_ExecPreparedStmt(stmt, 1, GLITE_LBU_DB_TYPE_VARCHAR, user) == -1) goto failstmt;
-       dprintf(("fetching '%s'...\n", user));
-       while ((nr = glite_lbu_FetchRow(stmt, 3, lens, res)) > 0) {
-               dprintf(("Result: n=%d, res=%p\n", nr, res));
-               print_free_result(name, lens, res);
-       }
-       if (nr < 0) dprintf(("fetch '%s' failed\n", user));
-       dprintf(("\n"));
-
-       dprintf(("closing stmt...\n"));
-       glite_lbu_FreeStmt(&stmt);
-       dprintf(("\n"));
-}
-#endif
-
-       dprintf(("closing...\n"));
-       glite_lbu_DBClose(ctx);
-       glite_lbu_FreeDBContext(ctx);
-       return 0;
-
-#ifndef NO_PREPARED
-failstmt:
-       dprintf(("closing stmt...\n"));
-       glite_lbu_FreeStmt(&stmt);
-#endif
-failcon:
-       dprintf(("closing...\n"));
-       glite_lbu_DBClose(ctx);
-failctx:
-       if (ctx) {
-               char *t, *d;
-
-               glite_lbu_DBError(ctx, &t, &d);
-               printf("Error %s: %s\n", t, d);
-               free(t); free(d);
-       }
-       glite_lbu_FreeDBContext(ctx);
-       free(cmd);
-       dprintf(("failed\n"));
-       return 1;
-}
diff --git a/org.glite.lbjp-common.db/interface/db-int.h b/org.glite.lbjp-common.db/interface/db-int.h
deleted file mode 100644 (file)
index 7a86c84..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifdef WIN32
-#define asprintf(STR, FMT...) trio_asprintf((STR), ##FMT)
-#define vasprintf(STR, FMT, VARGS) trio_asprintf((STR), (FMT), (VARGS))
-#define strcasestr(H,N) strstr((H), (N))
-#endif
-
-#define dprintf(CTX, FMT...) if ((CTX)->caps & GLITE_LBU_DB_CAP_ERRORS) fprintf(stderr, ##FMT)
-
-struct glite_lbu_DBContext_s {
-       int backend;
-       struct {
-               int code;
-               char *desc;
-       } err;
-       int caps;
-};
-typedef struct glite_lbu_DBContext_s glite_lbu_DBContext_t;
-
-struct glite_lbu_Statement_s {
-       glite_lbu_DBContext ctx;
-};
-typedef struct glite_lbu_Statement_s glite_lbu_Statement_t;
-
-
-
-typedef struct {
-       int backend;
-
-       int (*initContext)(glite_lbu_DBContext *ctx);
-       void (*freeContext)(glite_lbu_DBContext ctx);
-       int (*connect)(glite_lbu_DBContext ctx, const char *cs);
-       void (*close)(glite_lbu_DBContext ctx);
-       int (*queryCaps)(glite_lbu_DBContext ctx);
-       void (*setCaps)(glite_lbu_DBContext ctx, int caps);
-
-       int (*transaction)(glite_lbu_DBContext ctx);
-       int (*commit)(glite_lbu_DBContext ctx);
-       int (*rollback)(glite_lbu_DBContext ctx);
-
-       int (*fetchRow)(glite_lbu_Statement stmt, unsigned int n, unsigned long *lengths, char **results);
-       void (*freeStmt)(glite_lbu_Statement *stmt);
-
-       int (*queryIndices)(glite_lbu_DBContext ctx, const char *table, char ***key_names, char ****column_names);
-       int (*execSQL)(glite_lbu_DBContext ctx, const char *cmd, glite_lbu_Statement *stmt);
-       int (*queryColumns)(glite_lbu_Statement stmt_gen, char **cols);
-
-       int (*prepareStmt)(glite_lbu_DBContext ctx, const char *sql, glite_lbu_Statement *stmt);
-       int (*execPreparedStmt_v)(glite_lbu_Statement stmt, int n, va_list ap);
-       long int (*lastid)(glite_lbu_Statement stmt);
-
-       void (*timeToDB)(time_t, char **str);
-       void (*timestampToDB)(double t, char **str);
-       time_t (*DBToTime)(const char *str);
-       double (*DBToTimestamp)(const char *str);
-} glite_lbu_DBBackend_t;
-
-int glite_lbu_DBSetError(glite_lbu_DBContext ctx, int code, const char *func, int line, const char *desc, ...);
-
-void glite_lbu_TimeToStrGeneric(time_t t, char **str, const char *amp);
-void glite_lbu_TimestampToStrGeneric(double t, char **str, const char *amp);
diff --git a/org.glite.lbjp-common.db/interface/db.h b/org.glite.lbjp-common.db/interface/db.h
deleted file mode 100644 (file)
index 46a17ae..0000000
+++ /dev/null
@@ -1,407 +0,0 @@
-#ifndef GLITE_LBU_DB_H
-#define GLITE_LBU_DB_H
-
-#include <time.h>
-#include <stdarg.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/**
- * \file db.h
- * \defgroup database Database module
- *
- * Database modul module API (LB & JP Utils).
- *
- * There are two ways to access DB here:
- *
- * - simple:
- * SQL commands as single string. All values are incorporated in the SQL command strings. Proper escaping is required.
- *
- * - enhanced:
- * Prepared SQL commands with separated parameters, functions PrepareStmt() and ExecPreparedStmt(). All values are delivered in separated buffers. Its faster for multiple using and more secure.
- *
- * @{
- */
-
-
-/**
- * Enable transaction support if available.
- *
- * With disabled transaction can be used transaction functions, they are just ignored.
- */
-#define GLITE_LBU_DB_CAP_TRANSACTIONS 1
-
-/**
- * Check prepared parameters support.
- */
-#define GLITE_LBU_DB_CAP_PREPARED 2
-
-/**
- * Check for getting indexes support.
- *
- * Needed for QueryIndices call.
- */
-#define GLITE_LBU_DB_CAP_INDEX 4
-
-
-/**
- * Print all errors.
- *
- * Not returned from detection of capabilities.
- */
-#define GLITE_LBU_DB_CAP_ERRORS 8
-
-
-/**
- * Database connection context.
- */
-typedef struct glite_lbu_DBContext_s *glite_lbu_DBContext;
-
-
-/**
- * Prepared statement, used for SQL statement with parameters.
- */
-typedef struct glite_lbu_Statement_s *glite_lbu_Statement;
-
-
-/**
- * Structure holds date for multi-rows insert.
- */
-typedef struct glite_lbu_bufInsert_s *glite_lbu_bufInsert;
-
-
-
-/**
- * All types of parameteres, they match to the SQL types.
- */
-typedef enum {
-       GLITE_LBU_DB_TYPE_NULL = 0,
-       GLITE_LBU_DB_TYPE_TINYINT = 1,
-       GLITE_LBU_DB_TYPE_INT = 2,
-       GLITE_LBU_DB_TYPE_TINYBLOB = 3,
-       GLITE_LBU_DB_TYPE_TINYTEXT = 4,
-       GLITE_LBU_DB_TYPE_BLOB = 5,
-       GLITE_LBU_DB_TYPE_TEXT = 6,
-       GLITE_LBU_DB_TYPE_MEDIUMBLOB = 7,
-       GLITE_LBU_DB_TYPE_MEDIUMTEXT = 8,
-       GLITE_LBU_DB_TYPE_LONGBLOB = 9,
-       GLITE_LBU_DB_TYPE_LONGTEXT = 10,
-       GLITE_LBU_DB_TYPE_VARCHAR = 11,
-       GLITE_LBU_DB_TYPE_CHAR = 12,
-       GLITE_LBU_DB_TYPE_DATE = 13,
-       GLITE_LBU_DB_TYPE_TIME = 14,
-       GLITE_LBU_DB_TYPE_DATETIME = 15,
-       GLITE_LBU_DB_TYPE_TIMESTAMP = 16,
-       GLITE_LBU_DB_TYPE_BOOLEAN = 17,
-       GLITE_LBU_DB_TYPE_LAST = 18
-} glite_lbu_DBType;
-
-
-
-/**
- * Supported DB backends.
- */
-typedef enum {
-       GLITE_LBU_DB_BACKEND_MYSQL = 0,
-       GLITE_LBU_DB_BACKEND_PSQL,
-       GLITE_LBU_DB_BACKEND_LAST
-} glite_lbu_DBBackendNo;
-
-
-/**
- * Get error state from DB context.
- *
- * \param[in]  ctx   context to work with
- * \param[out] text  error name
- * \param[out] desc  error description
- */
-int glite_lbu_DBError(glite_lbu_DBContext ctx, char **text, char **desc);
-
-
-/**
- * Clear the error from DB context.
- *
- * \param[in] ctx  context to work with
- */
-int glite_lbu_DBClearError(glite_lbu_DBContext ctx);
-
-
-/**
- * Initialize the database context.
- *
- * \param[out] ctx   result context
- * \param[in]  backend  required database backend
- * \return     error code
- */
-int glite_lbu_InitDBContext(glite_lbu_DBContext *ctx, int backend);
-
-
-/**
- * Free database context.
- */
-void glite_lbu_FreeDBContext(glite_lbu_DBContext ctx);
-
-
-/**
- * Connect to the given database.
- *
- * \param[out] ctx     context to work with
- * \param[in] cs       connect string user/password\@host:database
- *
- * \return             error code, 0 = OK
- */
-int glite_lbu_DBConnect(glite_lbu_DBContext ctx, const char *cs);
-
-
-/**
- * Close the connection.
- *
- * \param[in,out] ctx  context to work with
- */
-void glite_lbu_DBClose(glite_lbu_DBContext ctx);
-
-
-/**
- * Check database version and capabilities.
- *
- * \param[in,out] ctx  context to work with
- *
- * \return             capabilities
- * \retval -1          error occured
- */
-int glite_lbu_DBQueryCaps(glite_lbu_DBContext ctx);
-
-
-/**
- * Set the database capabilities on already initialized context.
- *
- * It should be find out by DBQueryCaps() first.
- *
- * \param[in,out] ctx  context to work with
- * \param[in] caps     capabilities to use, should be found out by QueryCaps()
- */
-void glite_lbu_DBSetCaps(glite_lbu_DBContext ctx, int caps);
-
-
-/**
- * Start transaction.
- */
-int glite_lbu_Transaction(glite_lbu_DBContext ctx);
-
-
-/**
- * Commit (end) transaction.
- */
-int glite_lbu_Commit(glite_lbu_DBContext ctx);
-
-
-/**
- * Cancel transaction.
- */
-int glite_lbu_Rollback(glite_lbu_DBContext ctx);
-
-
-/**
- * \param[in,out] stmt  executed SQL statement
- * \param[in] n         number of items for sure there is enough space in lengths and results
- * \param[out] lengths  array with lengths (good for data blobs), may be NULL
- * \param[out] results  array with results, all items are allocated
- *
- * \retval >0  number of fields of the retrieved row
- * \retval 0   no more rows
- * \retval -1  error
- */
-int glite_lbu_FetchRow(glite_lbu_Statement stmt, unsigned int n, unsigned long *lengths, char **results);
-
-
-/**
- * Free the statement structure and destroy its parameters.
- *
- * Statement will be set to NULL and multiple calls are allowed.
- *
- * \param[in,out] stmt  statement
- */
-void glite_lbu_FreeStmt(glite_lbu_Statement *stmt);
-
-
-/**
- * Parse and execute one simple SQL statement.
- * All values are incorporated int the SQL command string.
- *
- * \param[in,out] ctx     context to work with
- * \param[in] cmd         SQL command
- * \param[out] stmt       statement handle with results (makes sense for selects only)
- *
- * \return                number of rows selected, created or affected by update, -1 on error
- */
-int glite_lbu_ExecSQL(glite_lbu_DBContext ctx, const char *cmd, glite_lbu_Statement *stmt);
-
-
-/**
- * Query for column names of the statement.
- *
- * It work only for simple API, so only after ExecSQL().
- *
- * \param[in,out] stmt  the statement handle
- * \param[out] cols     result array of names
- *
- * \return              error code
- */
-int glite_lbu_QueryColumns(glite_lbu_Statement stmt, char **cols);
-
-
-/**
- * Retrieve column names of a query simple SQL statement.
- *
- * \param[in,out] ctx        context to work with
- * \param[in] table          table name
- * \param[out] key_names     one-dimensional index names array
- * \param[out] column_names  two-dimensional column names array
- *
- * \return                0 if OK, nonzero on error
- */
-int glite_lbu_QueryIndices(glite_lbu_DBContext ctx, const char *table, char ***key_names, char ****column_names);
-
-
-/** 
- * Convert time_t into database-specific time string.
- *
- * The result string can be used directly in SQL commands.
- *
- * \param[in]   t    the converted time
- * \param[out]  str  result allocated string
- */
-void glite_lbu_TimeToDB(glite_lbu_DBContext ctx, time_t t, char **str);
-
-
-/** 
- * Convert double into database-specific time string.
- *
- * The result string can be used directly in SQL commands.
- *
- * \param[in]   t    the converted time
- * \param[out]  str  result allocated string
- */
-void glite_lbu_TimestampToDB(glite_lbu_DBContext ctx, double t, char **str);
-
-
-/**
- * Convert database-specific time string to time_t.
- *
- * String is expected in database for (ISO format).
- *
- * \param[in] ctx  context to work with
- * \param[in] str  the converted string
- * \return         result time
- */
-time_t glite_lbu_DBToTime(glite_lbu_DBContext ctx, const char *str);
-
-
-/**
- * Convert database-specific time string to time (double).
- *
- * \param[in] ctx  context to work with
- * \param[in] str  the converted string
- * \return         result time
- * */
-double glite_lbu_DBToTimestamp(glite_lbu_DBContext ctx, const char *str);
-
-
-/* Generic helper time convert functions. */
-void glite_lbu_TimeToStr(time_t t, char **str);
-void glite_lbu_TimestampToStr(double t, char **str);
-time_t glite_lbu_StrToTime(const char *str);
-double glite_lbu_StrToTimestamp(const char *str);
-
-
-/**
- * Init data structure for buffered insert
- *
- * takes table_name and columns string for future multirow insert
- * when insert string oversize size_limit or number of rows to be inserted
- * overcome record_limit, the real insert is triggered
- */
-int glite_lbu_bufferedInsertInit(glite_lbu_DBContext ctx, glite_lbu_bufInsert *bi, const char *table_name, long size_limit, long record_limit, const char * columns);
-
-
-/**
- * adds row of n values into n columns into an insert buffer
- * if num. of rows or size of data oversteps the limits, real
- * multi-row insert is done
- */
-int glite_lbu_bufferedInsert(glite_lbu_bufInsert bi, const char *row);
-
-
-/**
- * Flush buffered data and free bi structure.
- */
-int glite_lbu_bufferedInsertClose(glite_lbu_bufInsert bi);
-
-
-/**
- * Prepare the SQL statement. Use glite_lbu_FreeStmt() to free it.
- *
- * \param[in,out] ctx     context to work with
- * \param[in] sql         SQL command
- * \param[out] stmt       returned SQL statement
- *
- * \return                error code
- */
-int glite_lbu_PrepareStmt(glite_lbu_DBContext ctx, const char *sql, glite_lbu_Statement *stmt);
-
-
-/**
- * Bind input parameters and execute prepared SQL statement.
- * Results can be fetched via glite_lbu_FetchRow.
- *
- * \param[in,out] stmt  SQL statement
- * \param[in]  n                     number of items
- *
- * Variable parameters (n-times):
- *
- * always:
- *
- *   \param type     DB item type
- *
- * then one of them:
- *
- *   \param GLITE_LBU_DB_TYPE_TINYINT             int c
- *   \param GLITE_LBU_DB_TYPE_INT                 long int i
- *   \param GLITE_LBU_DB_TYPE_...BLOB/TEXT        void *b, unsigned long len
- *   \param GLITE_LBU_DB_TYPE_[VAR]CHAR           char *str
- *   \param GLITE_LBU_DB_TYPE_DATE/TIME/DATETIME  time_t t
- *   \param GLITE_LBU_DB_TYPE_TIMESTAMP           double t
- *   \param GLITE_LBU_DB_TYPE_BOOLEAN             int b
- *   \param GLITE_LBU_DB_TYPE_NULL       -
- *
- * \return              number of affected rows, -1 on error
- */
-int glite_lbu_ExecPreparedStmt(glite_lbu_Statement stmt, int n, ...);
-
-
-/**
- * "va_list version" of glite_lbu_ExecPreparedStmt().
- */
-int glite_lbu_ExecPreparedStmt_v(glite_lbu_Statement stmt, int n, va_list ap);
-
-
-/**
- * Returns the last automatically generated id, if any.
- */
-long int glite_lbu_Lastid(glite_lbu_Statement stmt);
-
-
-/**
- * @} database group
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/org.glite.lbjp-common.db/project/ChangeLog b/org.glite.lbjp-common.db/project/ChangeLog
deleted file mode 100644 (file)
index 66100e7..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-1.0.0-2
-- initial version
-
-1.0.0-3
-- distinguish stage from prefix (etics build)
-
-1.0.0-4
-- configure script update (globus flavors added to configure call)
-
-1.0.0-5
-- configure script and Makefile update (splitting mysql dependency into separate run-time and build-time deps)
-
-1.0.0-6
-- configure script update (fixed 'mysql-devel' handling)
-
-1.0.0-7
-- Makefile fixes - streamlining the 'clean' target, fixing MySQL library detection
-1.0.0-8
-- Soname detection logic moved from the Makefille to a shell-out script
-
-1.0.1-1
-- Using second fractions in timestamps
-
-1.0.1-2
-- Makefile relies on the libdir variable
-- New configure script
-
-1.0.1-3
-- Module repacked.
-
-2.0.0-1
-- Multiple DB backends supported
-- API enhanced to support multiple database backends
-
diff --git a/org.glite.lbjp-common.db/project/get_soname.sh b/org.glite.lbjp-common.db/project/get_soname.sh
deleted file mode 100755 (executable)
index 66c6aab..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#! /bin/sh
-
-lib=""
-filename="lib$1.so"
-shift
-for prefix in $@; do
-       for dir in "$prefix" "$prefix/mysql"; do
-               l=`find $dir -maxdepth 1 -name "${filename}"* 2>/dev/null | head -n 1`
-               if [ -f "$l" ]; then
-                       lib=$l
-                       break
-               fi
-       done
-       if [ x"" != x"$lib" ]; then
-               break
-       fi
-done
-
-if [ x"" != x"$lib" ]; then
-       readelf -d $lib | grep SONAME | sed "s/.*\(${filename}.[0-9]\{1,\}\).*/\1/"
-else
-       echo notfound
-fi
diff --git a/org.glite.lbjp-common.db/project/version.properties b/org.glite.lbjp-common.db/project/version.properties
deleted file mode 100644 (file)
index 2e88762..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-: /cvs/jra1mw/org.glite.lbjp-common.db/project/version.properties,v 1.2 2009/01/21 10:44:34 zsustr Exp $
-module.version=2.0.0
-module.age=1
diff --git a/org.glite.lbjp-common.db/src/db-mysql.c b/org.glite.lbjp-common.db/src/db-mysql.c
deleted file mode 100644 (file)
index 60468d7..0000000
+++ /dev/null
@@ -1,1121 +0,0 @@
-#include <sys/types.h>
-#ifdef LBS_DB_PROFILE
-#include <sys/time.h>
-#endif
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-#include <dlfcn.h>
-#include <pthread.h>
-#ifdef HAVE_SYSLOG_H
-#include <syslog.h>
-#endif
-
-#ifdef WIN32
-#include <windows.h>
-#ifndef STDCALL
-#define STDCALL __stdcall
-#endif
-#else
-#define STDCALL
-#endif
-
-#include <mysql.h>
-#include <mysqld_error.h>
-#include <mysql_version.h>
-#include <errmsg.h>
-
-#include "glite/lbu/trio.h"
-#include "db.h"
-#include "db-int.h"
-
-
-#define GLITE_LBU_MYSQL_INDEX_VERSION 40001
-#define GLITE_LBU_MYSQL_PREPARED_VERSION 40102
-#define BUF_INSERT_ROW_ALLOC_BLOCK     1000
-#ifndef GLITE_LBU_DEFAULT_RESULT_BUFFER_LENGTH
-#define GLITE_LBU_DEFAULT_RESULT_BUFFER_LENGTH 256
-#endif
-
-#define CLR_ERR(CTX) glite_lbu_DBClearError((glite_lbu_DBContext)(CTX))
-#define ERR(CTX, CODE, ARGS...) glite_lbu_DBSetError((glite_lbu_DBContext)((CTX)), (CODE), __FUNCTION__, __LINE__, ##ARGS)
-#define STATUS(CTX) glite_lbu_DBError((glite_lbu_DBContext)((CTX)), NULL, NULL)
-#define MY_ERR(CTX) myerr((CTX), __FUNCTION__, __LINE__)
-#define MY_ERRSTMT(STMT) myerrstmt((STMT), __FUNCTION__, __LINE__)
-#define MY_ISOKSTMT(STMT, RETRY) myisokstmt((STMT), __FUNCTION__, __LINE__, (RETRY))
-
-#define USE_TRANS(CTX) ((CTX->generic.caps & GLITE_LBU_DB_CAP_TRANSACTIONS) != 0)
-#define LOAD(SYM, SYM2) if ((*(void **)(&mysql_module.SYM) = dlsym(mysql_module.lib, SYM2)) == NULL) { \
-       err = ERR(ctx, ENOENT, "can't load symbol '%s' from mysql library (%s)", SYM2, dlerror()); \
-       break; \
-}
-
-
-
-struct glite_lbu_DBContextMysql_s {
-       struct glite_lbu_DBContext_s generic;
-       int in_transaction;     /* this flag is set whenever we are in DB transaction */
-       MYSQL *mysql;
-};
-typedef struct glite_lbu_DBContextMysql_s *glite_lbu_DBContextMysql;
-
-
-struct glite_lbu_StatementMysql_s {
-       glite_lbu_Statement_t generic;
-
-       /* for simple commands */
-       MYSQL_RES           *result;
-
-       /* for prepared commands */
-       MYSQL_STMT          *stmt;
-       unsigned long        nrfields;
-       char                *sql;
-};
-typedef struct glite_lbu_StatementMysql_s *glite_lbu_StatementMysql;
-
-
-/*
- * mapping glite DB types to mysql types
- */
-int glite_type_to_mysql[] = {
-       MYSQL_TYPE_NULL,
-       MYSQL_TYPE_TINY,
-       MYSQL_TYPE_LONG,
-       MYSQL_TYPE_TINY_BLOB,
-       MYSQL_TYPE_TINY_BLOB,
-       MYSQL_TYPE_BLOB,
-       MYSQL_TYPE_BLOB,
-       MYSQL_TYPE_MEDIUM_BLOB,
-       MYSQL_TYPE_MEDIUM_BLOB,
-       MYSQL_TYPE_LONG_BLOB,
-       MYSQL_TYPE_LONG_BLOB,
-       MYSQL_TYPE_VAR_STRING,
-       MYSQL_TYPE_STRING,
-       MYSQL_TYPE_DATE,
-       MYSQL_TYPE_TIME,
-       MYSQL_TYPE_DATETIME,
-       MYSQL_TYPE_TIMESTAMP,
-};
-
-
-typedef struct {
-       void *lib;
-       pthread_mutex_t lock;
-
-       void * STDCALL(*mysql_init)(void *);
-       unsigned long STDCALL(*mysql_get_client_version)(void);
-       int STDCALL(*mysql_options)(MYSQL *mysql, enum mysql_option option, const char *arg);
-       unsigned int STDCALL(*mysql_errno)(MYSQL *mysql);
-       const char *STDCALL(*mysql_error)(MYSQL *mysql);
-       unsigned int STDCALL(*mysql_stmt_errno)(MYSQL_STMT *stmt);
-       const char *STDCALL(*mysql_stmt_error)(MYSQL_STMT *stmt);
-       MYSQL * STDCALL(*mysql_real_connect)(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag);
-       void STDCALL(*mysql_close)(MYSQL *mysql);
-       int STDCALL(*mysql_query)(MYSQL *mysql, const char *stmt_str);
-       MYSQL_RES *STDCALL(*mysql_store_result)(MYSQL *mysql);
-       void STDCALL(*mysql_free_result)(MYSQL_RES *result);
-       my_ulonglong STDCALL(*mysql_affected_rows)(MYSQL *mysql);
-       my_bool STDCALL(*mysql_stmt_close)(MYSQL_STMT *);
-       unsigned int STDCALL(*mysql_num_fields)(MYSQL_RES *result);
-       unsigned long *STDCALL(*mysql_fetch_lengths)(MYSQL_RES *result);
-       my_bool STDCALL(*mysql_stmt_bind_result)(MYSQL_STMT *stmt, MYSQL_BIND *bind);
-       int STDCALL(*mysql_stmt_prepare)(MYSQL_STMT *stmt, const char *stmt_str, unsigned long length);
-       int STDCALL(*mysql_stmt_store_result)(MYSQL_STMT *stmt);
-       MYSQL_ROW STDCALL(*mysql_fetch_row)(MYSQL_RES *result);
-       MYSQL_FIELD *STDCALL(*mysql_fetch_field)(MYSQL_RES *result);
-       const char *STDCALL(*mysql_get_server_info)(MYSQL *mysql);
-       MYSQL_STMT *STDCALL(*mysql_stmt_init)(MYSQL *mysql);
-       my_bool STDCALL(*mysql_stmt_bind_param)(MYSQL_STMT *stmt, MYSQL_BIND *bind);
-       int STDCALL(*mysql_stmt_execute)(MYSQL_STMT *stmt);
-       int STDCALL(*mysql_stmt_fetch)(MYSQL_STMT *stmt);
-       my_ulonglong STDCALL(*mysql_stmt_insert_id)(MYSQL_STMT *stmt);
-       my_ulonglong STDCALL(*mysql_stmt_affected_rows)(MYSQL_STMT *stmt);
-       MYSQL_RES *STDCALL(*mysql_stmt_result_metadata)(MYSQL_STMT *stmt);
-       int STDCALL(*mysql_stmt_fetch_column)(MYSQL_STMT *stmt, MYSQL_BIND *bind, unsigned int column, unsigned long offset);
-} mysql_module_t;
-
-
-/* backend module declaration */
-int glite_lbu_InitDBContextMysql(glite_lbu_DBContext *ctx_gen);
-void glite_lbu_FreeDBContextMysql(glite_lbu_DBContext ctx_gen);
-int glite_lbu_DBConnectMysql(glite_lbu_DBContext ctx_gen, const char *cs);
-void glite_lbu_DBCloseMysql(glite_lbu_DBContext ctx_gen);
-int glite_lbu_DBQueryCapsMysql(glite_lbu_DBContext ctx_gen);
-void glite_lbu_DBSetCapsMysql(glite_lbu_DBContext commmon_ctx, int caps);
-int glite_lbu_TransactionMysql(glite_lbu_DBContext ctx_gen);
-int glite_lbu_CommitMysql(glite_lbu_DBContext ctx_gen);
-int glite_lbu_RollbackMysql(glite_lbu_DBContext ctx_gen);
-int glite_lbu_FetchRowMysql(glite_lbu_Statement stmt, unsigned int n, unsigned long *lengths, char **results);
-void glite_lbu_FreeStmtMysql(glite_lbu_Statement *stmt);
-int glite_lbu_QueryIndicesMysql(glite_lbu_DBContext ctx_gen, const char *table, char ***key_names, char ****column_names);
-int glite_lbu_ExecSQLMysql(glite_lbu_DBContext ctx_gen, const char *cmd, glite_lbu_Statement *stmt);
-int glite_lbu_QueryColumnsMysql(glite_lbu_Statement stmt_gen, char **cols);
-int glite_lbu_PrepareStmtMysql(glite_lbu_DBContext ctx_gen, const char *sql, glite_lbu_Statement *stmt_gen);
-int glite_lbu_ExecPreparedStmtMysql_v(glite_lbu_Statement stmt_gen, int n, va_list ap);
-long int glite_lbu_LastidMysql(glite_lbu_Statement stmt_gen);
-
-glite_lbu_DBBackend_t mysql_backend = {
-       backend: GLITE_LBU_DB_BACKEND_MYSQL,
-
-       initContext: glite_lbu_InitDBContextMysql,
-       freeContext: glite_lbu_FreeDBContextMysql,
-       connect: glite_lbu_DBConnectMysql,
-       close: glite_lbu_DBCloseMysql,
-       queryCaps: glite_lbu_DBQueryCapsMysql,
-       setCaps: glite_lbu_DBSetCapsMysql,
-       transaction: glite_lbu_TransactionMysql,
-       commit: glite_lbu_CommitMysql,
-       rollback: glite_lbu_RollbackMysql,
-       fetchRow: glite_lbu_FetchRowMysql,
-       freeStmt: glite_lbu_FreeStmtMysql,
-       queryIndices: glite_lbu_QueryIndicesMysql,
-       execSQL: glite_lbu_ExecSQLMysql,
-       queryColumns: glite_lbu_QueryColumnsMysql,
-
-       timeToDB: glite_lbu_TimeToStr,
-       timestampToDB: glite_lbu_TimestampToStr,
-       DBToTime: glite_lbu_StrToTime,
-       DBToTimestamp: glite_lbu_StrToTimestamp,
-
-       prepareStmt: glite_lbu_PrepareStmtMysql,
-       execPreparedStmt_v: glite_lbu_ExecPreparedStmtMysql_v,
-       lastid: glite_lbu_LastidMysql,
-};
-
-static mysql_module_t mysql_module = {
-       lib: NULL,
-       lock: PTHREAD_MUTEX_INITIALIZER,
-};
-
-
-static int myerr(glite_lbu_DBContextMysql ctx, const char *source, int line);
-static int myerrstmt(glite_lbu_StatementMysql stmt, const char *source, int line);
-static int myisokstmt(glite_lbu_StatementMysql stmt, const char *source, int line, int *retry);
-static int db_connect(glite_lbu_DBContextMysql ctx, const char *cs, MYSQL **mysql);
-static void db_close(MYSQL *mysql);
-static int transaction_test(glite_lbu_DBContext ctx, int *caps);
-static int FetchRowSimple(glite_lbu_DBContextMysql ctx, MYSQL_RES *result, unsigned long *lengths, char **results);
-static int FetchRowPrepared(glite_lbu_DBContextMysql ctx, glite_lbu_StatementMysql stmt, unsigned int n, unsigned long *lengths, char **results);
-static void set_time(MYSQL_TIME *mtime, const double time);
-static void glite_lbu_DBCleanup(void);
-static void glite_lbu_FreeStmt_int(glite_lbu_StatementMysql stmt);
-
-
-/* ---- common ---- */
-
-
-
-int glite_lbu_InitDBContextMysql(glite_lbu_DBContext *ctx_gen) {
-       glite_lbu_DBContextMysql ctx;
-       int err = 0;
-       int ver_u;
-
-       ctx = calloc(1, sizeof *ctx);
-       if (!ctx) return ENOMEM;
-       *ctx_gen = (glite_lbu_DBContext)ctx;
-
-       /* dynamic load the client library */
-       pthread_mutex_lock(&mysql_module.lock);
-       if (!mysql_module.lib) {
-               mysql_module.lib = dlopen(MYSQL_SONAME, RTLD_LAZY | RTLD_LOCAL);
-               if (!mysql_module.lib) return ERR(ctx, ENOENT, "dlopen(): " MYSQL_SONAME ": %s", dlerror());
-               do {
-                       LOAD(mysql_init, "mysql_init");
-                       LOAD(mysql_get_client_version, "mysql_get_client_version");
-                       LOAD(mysql_options, "mysql_options");
-                       LOAD(mysql_errno, "mysql_errno");
-                       LOAD(mysql_error, "mysql_error");
-                       LOAD(mysql_stmt_errno, "mysql_stmt_errno");
-                       LOAD(mysql_stmt_error, "mysql_stmt_error");
-                       LOAD(mysql_real_connect, "mysql_real_connect");
-                       LOAD(mysql_close, "mysql_close");
-                       LOAD(mysql_query, "mysql_query");
-                       LOAD(mysql_store_result, "mysql_store_result");
-                       LOAD(mysql_free_result, "mysql_free_result");
-                       LOAD(mysql_affected_rows, "mysql_affected_rows");
-                       LOAD(mysql_stmt_close, "mysql_stmt_close");
-                       LOAD(mysql_num_fields, "mysql_num_fields");
-                       LOAD(mysql_fetch_lengths, "mysql_fetch_lengths");
-                       LOAD(mysql_stmt_bind_result, "mysql_stmt_bind_result");
-                       LOAD(mysql_stmt_prepare, "mysql_stmt_prepare");
-                       LOAD(mysql_stmt_store_result, "mysql_stmt_store_result");
-                       LOAD(mysql_fetch_row, "mysql_fetch_row");
-                       LOAD(mysql_fetch_field, "mysql_fetch_field");
-                       LOAD(mysql_get_server_info, "mysql_get_server_info");
-                       LOAD(mysql_stmt_init, "mysql_stmt_init");
-                       LOAD(mysql_stmt_bind_param, "mysql_stmt_bind_param");
-                       LOAD(mysql_stmt_execute, "mysql_stmt_execute");
-                       LOAD(mysql_stmt_fetch, "mysql_stmt_fetch");
-                       LOAD(mysql_stmt_insert_id, "mysql_stmt_insert_id");
-                       LOAD(mysql_stmt_affected_rows, "mysql_stmt_affected_rows");
-                       LOAD(mysql_stmt_result_metadata, "mysql_stmt_result_metadata");
-                       LOAD(mysql_stmt_fetch_column, "mysql_stmt_fetch_column");
-
-                       // check the runtime version
-                       ver_u = mysql_module.mysql_get_client_version();
-                       if (ver_u != MYSQL_VERSION_ID) {
-                               fprintf(stderr,"Warning: MySQL library version mismatch (compiled '%d', runtime '%d')", MYSQL_VERSION_ID, ver_u);
-#ifdef SYSLOG_H
-                               syslog(LOG_WARNING,"MySQL library version mismatch (compiled '%d', runtime '%d')", MYSQL_VERSION_ID, ver_u);
-#endif
-                       }
-
-                       pthread_mutex_unlock(&mysql_module.lock);
-                       atexit(glite_lbu_DBCleanup);
-               } while(0);
-
-               if (err) {
-                       dlclose(mysql_module.lib);
-                       mysql_module.lib = NULL;
-                       pthread_mutex_unlock(&mysql_module.lock);
-                       return err;
-               }
-       } else pthread_mutex_unlock(&mysql_module.lock);
-
-       return 0;
-}
-
-
-void glite_lbu_FreeDBContextMysql(glite_lbu_DBContext ctx_gen) {
-       glite_lbu_DBContextMysql ctx = (glite_lbu_DBContextMysql)ctx_gen;
-
-       if (ctx) {
-               assert(ctx->mysql == NULL);
-               free(ctx);
-       }
-}
-
-
-int glite_lbu_DBConnectMysql(glite_lbu_DBContext ctx_gen, const char *cs) {
-       glite_lbu_DBContextMysql ctx = (glite_lbu_DBContextMysql)ctx_gen;
-
-       if (db_connect(ctx, cs, &ctx->mysql) != 0 ||
-           glite_lbu_ExecSQLMysql(ctx_gen, "SET AUTOCOMMIT=1", NULL) < 0 ||
-           glite_lbu_ExecSQLMysql(ctx_gen, "SET TRANSACTION ISOLATION LEVEL REPEATABLE READ", NULL) < 0)
-               return STATUS(ctx);
-       else
-               return 0;
-}
-
-
-void glite_lbu_DBCloseMysql(glite_lbu_DBContext ctx_gen) {
-       glite_lbu_DBContextMysql ctx = (glite_lbu_DBContextMysql)ctx_gen;
-
-       db_close(ctx->mysql);
-       ctx->mysql = NULL;
-       CLR_ERR(ctx);
-}
-
-
-int glite_lbu_DBQueryCapsMysql(glite_lbu_DBContext ctx_gen) {
-       glite_lbu_DBContextMysql ctx = (glite_lbu_DBContextMysql)ctx_gen;
-       MYSQL   *m = ctx->mysql;
-       int     major,minor,sub,version,caps;
-       const char *ver_s;
-
-       caps = 0;
-
-       ver_s = mysql_module.mysql_get_server_info(m);
-       if (!ver_s || 3 != sscanf(ver_s,"%d.%d.%d",&major,&minor,&sub))
-               return ERR(ctx, EINVAL, "problem retreiving MySQL version");
-       version = 10000*major + 100*minor + sub;
-
-       if (version >= GLITE_LBU_MYSQL_INDEX_VERSION) caps |= GLITE_LBU_DB_CAP_INDEX;
-       if (version >= GLITE_LBU_MYSQL_PREPARED_VERSION) caps |= GLITE_LBU_DB_CAP_PREPARED;
-
-       CLR_ERR(ctx);
-       transaction_test(ctx_gen, &caps);
-
-       if (STATUS(ctx) == 0) return caps;
-       else return -1;
-}
-
-
-void glite_lbu_DBSetCapsMysql(glite_lbu_DBContext ctx_gen, int caps) {
-       ctx_gen->caps = caps;
-}
-
-
-int glite_lbu_TransactionMysql(glite_lbu_DBContext ctx_gen) {
-       glite_lbu_DBContextMysql ctx = (glite_lbu_DBContextMysql)ctx_gen;
-
-       CLR_ERR(ctx);
-       if (USE_TRANS(ctx)) {
-               if (glite_lbu_ExecSQLMysql(ctx_gen, "SET AUTOCOMMIT=0", NULL) < 0) goto err;
-               if (glite_lbu_ExecSQLMysql(ctx_gen, "BEGIN", NULL) < 0) goto err;
-               ctx->in_transaction = 1;
-       }
-err:
-       return STATUS(ctx);
-}
-
-
-int glite_lbu_CommitMysql(glite_lbu_DBContext ctx_gen) {
-       glite_lbu_DBContextMysql ctx = (glite_lbu_DBContextMysql)ctx_gen;
-
-       CLR_ERR(ctx);
-       if (USE_TRANS(ctx)) {
-               if (glite_lbu_ExecSQLMysql(ctx_gen, "COMMIT", NULL) < 0) goto err;
-               if (glite_lbu_ExecSQLMysql(ctx_gen, "SET AUTOCOMMIT=1", NULL) < 0) goto err;
-               ctx->in_transaction = 0;
-       }
-err:
-       return STATUS(ctx);
-}
-
-
-int glite_lbu_RollbackMysql(glite_lbu_DBContext ctx_gen) {
-       glite_lbu_DBContextMysql ctx = (glite_lbu_DBContextMysql)ctx_gen;
-
-       CLR_ERR(ctx);
-       if (USE_TRANS(ctx)) { 
-               if (glite_lbu_ExecSQLMysql(ctx_gen, "ROLLBACK", NULL) < 0) goto err;
-               if (glite_lbu_ExecSQLMysql(ctx_gen, "SET AUTOCOMMIT=1", NULL) < 0) goto err;
-               ctx->in_transaction = 0;
-       }
-err:
-       return STATUS(ctx);
-}
-
-
-int glite_lbu_FetchRowMysql(glite_lbu_Statement stmt_gen, unsigned int n, unsigned long *lengths, char **results) {
-       glite_lbu_StatementMysql stmt = (glite_lbu_StatementMysql)stmt_gen;
-       glite_lbu_DBContextMysql ctx = (glite_lbu_DBContextMysql)stmt->generic.ctx;
-
-       memset(results, 0, n * sizeof(*results));
-       if (stmt->result) return FetchRowSimple(ctx, stmt->result, lengths, results);
-       else return FetchRowPrepared(ctx, stmt, n, lengths, results);
-}
-
-
-static void glite_lbu_FreeStmt_int(glite_lbu_StatementMysql stmt) {
-       if (stmt) {
-               if (stmt->result) mysql_module.mysql_free_result(stmt->result);
-               if (stmt->stmt) mysql_module.mysql_stmt_close(stmt->stmt);
-               free(stmt->sql);
-       }
-}
-
-
-void glite_lbu_FreeStmtMysql(glite_lbu_Statement *stmt_gen) {
-       glite_lbu_StatementMysql *stmt = (glite_lbu_StatementMysql*)stmt_gen;
-
-       glite_lbu_FreeStmt_int(*stmt);
-       free(*stmt);
-       *stmt = NULL;
-}
-
-
-int glite_lbu_QueryIndicesMysql(glite_lbu_DBContext ctx_gen, const char *table, char ***key_names, char ****column_names) {
-       glite_lbu_DBContextMysql ctx = (glite_lbu_DBContextMysql)ctx_gen;
-       glite_lbu_Statement stmt;
-
-       size_t  i,j,ret;
-
-/* XXX: "show index from" columns. Matches at least MySQL 4.0.11 */
-       char    *sql, *showcol[12];
-       int     Key_name,Seq_in_index,Column_name,Sub_part;
-
-       char    **keys = NULL;
-       size_t  *cols = NULL;
-       char    **col_names = NULL;
-
-       size_t  nkeys = 0;
-
-       char    ***idx = NULL;
-
-       Key_name = Seq_in_index = Column_name = Sub_part = -1;
-
-       asprintf(&sql, "show index from %s", table);
-       if (glite_lbu_ExecSQLMysql(ctx_gen,sql,&stmt)<0) {
-               free(sql);
-               return STATUS(ctx);
-       }
-       free(sql);
-
-       while ((ret = glite_lbu_FetchRowMysql(stmt,sizeof(showcol)/sizeof(showcol[0]),NULL,showcol)) > 0) {
-               assert(ret <= (int)(sizeof showcol/sizeof showcol[0]));
-
-               if (!col_names) {
-                       col_names = malloc(ret * sizeof col_names[0]);
-                       glite_lbu_QueryColumnsMysql(stmt,col_names);
-                       for (i=0; i<ret; i++) 
-                               if (!strcasecmp(col_names[i],"Key_name")) Key_name = i;
-                               else if (!strcasecmp(col_names[i],"Seq_in_index")) Seq_in_index = i;
-                               else if (!strcasecmp(col_names[i],"Column_name")) Column_name = i;
-                               else if (!strcasecmp(col_names[i],"Sub_part")) Sub_part = i;
-
-                       assert(Key_name >= 0 && Seq_in_index >= 0 && 
-                                       Column_name >= 0 && Sub_part >= 0);
-
-               }
-
-               for (i=0; i<nkeys && strcasecmp(showcol[Key_name],keys[i]); i++);
-
-               if (i == nkeys) {
-                       keys = realloc(keys,(i+2) * sizeof keys[0]);
-                       keys[i] = strdup(showcol[Key_name]);
-//printf("** KEY [%d] %s\n", i, keys[i]);
-                       keys[i+1] = NULL;
-                       cols = realloc(cols,(i+1) * sizeof cols[0]); 
-                       cols[i] = 0;
-                       idx = realloc(idx,(i+2) * sizeof idx[0]);
-                       idx[i] = idx[i+1] = NULL;
-                       nkeys++;
-               }
-
-               j = atoi(showcol[Seq_in_index])-1;
-               if (cols[i] <= j) {
-                       cols[i] = j+1;
-                       idx[i] = realloc(idx[i],(j+2)*sizeof idx[i][0]);
-                       memset(&idx[i][j+1],0,sizeof idx[i][0]);
-               }
-               idx[i][j] = strdup(showcol[Column_name]);
-//printf("****** [%d, %d] %s\n", i, j, idx[i][j]);
-//FIXME: needed?idx[i][j].value.i = atoi(showcol[Sub_part]);
-               for (i = 0; i<ret; i++) free(showcol[i]);
-       }
-
-       glite_lbu_FreeStmtMysql(&stmt);
-       free(cols);
-       free(col_names);
-
-       if (ret == 0) CLR_ERR(ctx);
-       else {
-               free(keys);
-               keys = NULL;
-               for (i = 0; idx[i]; i++) {
-                       for (j = 0; idx[i][j]; j++) free(idx[i][j]);
-                       free(idx[i]);
-               }
-               free(idx);
-               idx = NULL;
-       }
-
-       if (key_names) *key_names = keys;
-       else {
-               for (i = 0; keys[i]; i++) free(keys[i]);
-               free(keys);
-       }
-       *column_names = idx;
-
-       return STATUS(ctx);
-}
-
-
-/* ---- simple ---- */
-
-int glite_lbu_ExecSQLMysql(glite_lbu_DBContext ctx_gen, const char *cmd, glite_lbu_Statement *stmt_gen) {
-       glite_lbu_DBContextMysql ctx = (glite_lbu_DBContextMysql)ctx_gen;
-       glite_lbu_StatementMysql stmt;
-       int     merr;
-       int     retry_nr = 0;
-       int     do_reconnect = 0;
-#ifdef LBS_DB_PROFILE
-       struct timeval  start,end;
-       int     pid;
-
-       static struct timeval sum = {
-               tv_sec: 0,
-               tv_usec: 0
-       };
-#endif
-
-       CLR_ERR(ctx);
-
-       if (stmt_gen) *stmt_gen = NULL;
-       stmt = NULL;
-
-#ifdef LBS_DB_PROFILE
-       gettimeofday(&start,NULL);
-#endif
-
-       while (retry_nr == 0 || do_reconnect) {
-               do_reconnect = 0;
-               if (mysql_module.mysql_query(ctx->mysql, cmd)) {
-                       /* error occured */
-                       switch (merr = mysql_module.mysql_errno(ctx->mysql)) {
-                               case 0:
-                                       break;
-                               case ER_DUP_ENTRY: 
-                                       ERR(ctx, EEXIST, mysql_module.mysql_error(ctx->mysql));
-                                       return -1;
-                                       break;
-                               case CR_SERVER_LOST:
-                               case CR_SERVER_GONE_ERROR:
-                                       if (ctx->in_transaction) {
-                                               ERR(ctx, ERESTART, mysql_module.mysql_error(ctx->mysql));
-                                               return -1;
-                                       }
-                                       else if (retry_nr <= 0) 
-                                               do_reconnect = 1;
-                                       break;
-                               case ER_LOCK_DEADLOCK:
-                                       ERR(ctx, EDEADLOCK, mysql_module.mysql_error(ctx->mysql));
-                                       return -1;
-                                       break;  
-                               default:
-                                       MY_ERR(ctx);
-                                       return -1;
-                                       break;
-                       }
-               }
-               retry_nr++;
-       }
-
-       if (stmt_gen) {
-               stmt = calloc(1, sizeof(*stmt));
-               if (!stmt) {
-                       ERR(ctx, ENOMEM, NULL);
-                       return -1;
-               }
-               stmt->generic.ctx = ctx_gen;
-               stmt->result = mysql_module.mysql_store_result(ctx->mysql);
-               if (!stmt->result) {
-                       if (mysql_module.mysql_errno(ctx->mysql)) {
-                               MY_ERR(ctx);
-                               free(stmt);
-                               return -1;
-                       }
-               }
-               *stmt_gen = (glite_lbu_Statement)stmt;
-       } else {
-               MYSQL_RES       *r = mysql_module.mysql_store_result(ctx->mysql);
-               mysql_module.mysql_free_result(r);
-       }
-#ifdef LBS_DB_PROFILE
-       pid = getpid();
-       gettimeofday(&end,NULL);
-       end.tv_usec -= start.tv_usec;
-       end.tv_sec -= start.tv_sec;
-       if (end.tv_usec < 0) { end.tv_sec--; end.tv_usec += 1000000; }
-
-       sum.tv_usec += end.tv_usec;
-       sum.tv_sec += end.tv_sec + sum.tv_usec / 1000000;
-       sum.tv_usec -= 1000000 * (sum.tv_usec / 1000000);
-       fprintf(stderr,"[%d] %s\n[%d] %3ld.%06ld (sum: %3ld.%06ld)\n",pid,cmd,pid,end.tv_sec,end.tv_usec,sum.tv_sec,sum.tv_usec);
-#endif
-
-       return mysql_module.mysql_affected_rows(ctx->mysql);
-}
-
-
-int glite_lbu_QueryColumnsMysql(glite_lbu_Statement stmt_gen, char **cols)
-{
-       glite_lbu_StatementMysql stmt = (glite_lbu_StatementMysql)stmt_gen;
-       int     i = 0;
-       MYSQL_FIELD     *f;
-
-       CLR_ERR(stmt->generic.ctx);
-       if (!stmt->result) return ERR(stmt->generic.ctx, ENOTSUP, "QueryColumns implemented only for simple API");
-       while ((f = mysql_module.mysql_fetch_field(stmt->result))) cols[i++] = f->name;
-       return i == 0;
-}
-
-
-/* ---- prepared --- */
-
-int glite_lbu_PrepareStmtMysql(glite_lbu_DBContext ctx_gen, const char *sql, glite_lbu_Statement *stmt_gen) {
-       glite_lbu_DBContextMysql ctx = (glite_lbu_DBContextMysql)ctx_gen;
-       glite_lbu_StatementMysql stmt;
-       int ret, retry;
-       MYSQL_RES *meta;
-
-       // init
-       stmt = calloc(1, sizeof(*stmt));
-       stmt->generic.ctx = ctx_gen;
-       *stmt_gen = NULL;
-
-       // create the SQL command
-       if ((stmt->stmt = mysql_module.mysql_stmt_init(ctx->mysql)) == NULL)
-               return STATUS(ctx);
-
-       // prepare the SQL command
-       retry = 1;
-       do {
-               mysql_module.mysql_stmt_prepare(stmt->stmt, sql, strlen(sql));
-               ret = MY_ISOKSTMT(stmt, &retry);
-       } while (ret == 0);
-       if (ret == -1) goto failed;
-
-       // number of fields (0 for no results)
-       if ((meta = mysql_module.mysql_stmt_result_metadata(stmt->stmt)) != NULL) {
-               stmt->nrfields = mysql_module.mysql_num_fields(meta);
-               mysql_module.mysql_free_result(meta);
-       } else
-               stmt->nrfields = 0;
-
-       // remember the command
-       stmt->sql = strdup(sql);
-
-       *stmt_gen = (glite_lbu_Statement)stmt;
-       return CLR_ERR(ctx);
-
-failed:
-       glite_lbu_FreeStmt_int(stmt);
-       free(stmt);
-       return STATUS(ctx);
-}
-
-
-int glite_lbu_ExecPreparedStmtMysql_v(glite_lbu_Statement stmt_gen, int n, va_list ap) {
-       glite_lbu_StatementMysql stmt = (glite_lbu_StatementMysql)stmt_gen;
-       int i, prepare_retry;
-       glite_lbu_DBType type;
-       char *pchar;
-       int *pint;
-       long int *plint;
-       MYSQL_TIME *ptime;
-       int ret, retry;
-       MYSQL_BIND *binds = NULL;
-       void **data = NULL;
-       unsigned long *lens;
-       glite_lbu_Statement newstmt;
-
-       // gather parameters
-       if (n) {
-               binds = calloc(n, sizeof(MYSQL_BIND));
-               data = calloc(n, sizeof(void *));
-               lens = calloc(n, sizeof(unsigned long *));
-       }
-       for (i = 0; i < n; i++) {
-               type = va_arg(ap, glite_lbu_DBType);
-               switch (type) {
-               case GLITE_LBU_DB_TYPE_TINYINT:
-                       pchar = binds[i].buffer = data[i] = malloc(sizeof(char));
-                       *pchar = va_arg(ap, int);
-                       break;
-
-               case GLITE_LBU_DB_TYPE_INT:
-                       plint = binds[i].buffer = data[i] = malloc(sizeof(long int));
-                       *plint = va_arg(ap, long int);
-                       break;
-
-               case GLITE_LBU_DB_TYPE_BOOLEAN:
-                       pint = binds[i].buffer = data[i] = malloc(sizeof(int));
-                       *pint = va_arg(ap, int) ? 1 : 0;
-                       break;
-
-               case GLITE_LBU_DB_TYPE_TINYBLOB:
-               case GLITE_LBU_DB_TYPE_TINYTEXT:
-               case GLITE_LBU_DB_TYPE_BLOB:
-               case GLITE_LBU_DB_TYPE_TEXT:
-               case GLITE_LBU_DB_TYPE_MEDIUMBLOB:
-               case GLITE_LBU_DB_TYPE_MEDIUMTEXT:
-               case GLITE_LBU_DB_TYPE_LONGBLOB:
-               case GLITE_LBU_DB_TYPE_LONGTEXT:
-                       binds[i].buffer = va_arg(ap, void *);
-                       binds[i].length = &lens[i];
-                       lens[i] = va_arg(ap, unsigned long);
-                       break;
-
-               case GLITE_LBU_DB_TYPE_VARCHAR:
-               case GLITE_LBU_DB_TYPE_CHAR:
-                       binds[i].buffer = va_arg(ap, char *);
-                       binds[i].length = &lens[i];
-                       lens[i] = binds[i].buffer ? strlen((char *)binds[i].buffer) : 0;
-                       break;
-
-               case GLITE_LBU_DB_TYPE_DATE:
-               case GLITE_LBU_DB_TYPE_TIME:
-               case GLITE_LBU_DB_TYPE_DATETIME:
-                       ptime = binds[i].buffer = data[i] = malloc(sizeof(MYSQL_TIME));
-                       set_time(ptime, va_arg(ap, time_t));
-                       break;
-
-               case GLITE_LBU_DB_TYPE_TIMESTAMP:
-                       ptime = binds[i].buffer = data[i] = malloc(sizeof(MYSQL_TIME));
-                       set_time(ptime, va_arg(ap, double));
-                       break;
-
-               case GLITE_LBU_DB_TYPE_NULL:
-                       break;
-
-               default:
-                       assert("unimplemented parameter assign" == NULL);
-                       break;
-               }
-               binds[i].buffer_type = glite_type_to_mysql[type];
-       }
-
-       prepare_retry = 2;
-       do {
-               // bind parameters
-               if (n) {
-                       if (mysql_module.mysql_stmt_bind_param(stmt->stmt, binds) != 0) {
-                               MY_ERRSTMT(stmt);
-                               ret = -1;
-                               goto statement_failed;
-                       }
-               }
-
-               // run
-               retry = 1;
-               do {
-                       mysql_module.mysql_stmt_execute(stmt->stmt);
-                       ret = MY_ISOKSTMT(stmt, &retry);
-               } while (ret == 0);
-       statement_failed:
-               if (ret == -1) {
-                       if (mysql_module.mysql_stmt_errno(stmt->stmt) == ER_UNKNOWN_STMT_HANDLER) {
-                               // expired the prepared command ==> restore it
-                               if (glite_lbu_PrepareStmtMysql(stmt->generic.ctx, stmt->sql, &newstmt) == -1) goto failed;
-                               glite_lbu_FreeStmt_int(stmt);
-                               memcpy(stmt, newstmt, sizeof(struct glite_lbu_StatementMysql_s));
-                               prepare_retry--;
-                               ret = 0;
-                       } else goto failed;
-               }
-       } while (ret == 0 && prepare_retry > 0);
-
-       // result
-       retry = 1;
-       do {
-               mysql_module.mysql_stmt_store_result(stmt->stmt);
-               ret = MY_ISOKSTMT(stmt, &retry);
-       } while (ret == 0);
-       if (ret == -1) goto failed;
-
-       // free params
-       if (n) {
-               for (i = 0; i < n; i++) free(data[i]);
-               free(data);
-               free(binds);
-               free(lens);
-       }
-       CLR_ERR(stmt->generic.ctx);
-       return mysql_module.mysql_stmt_affected_rows(stmt->stmt);
-
-failed:
-       for (i = 0; i < n; i++) free(data[i]);
-       free(data);
-       free(binds);
-       free(lens);
-       return -1;
-}
-
-
-long int glite_lbu_LastidMysql(glite_lbu_Statement stmt_gen) {
-       glite_lbu_StatementMysql stmt = (glite_lbu_StatementMysql)stmt_gen;
-       my_ulonglong i;
-
-       CLR_ERR(stmt_gen->ctx);
-       i = mysql_module.mysql_stmt_insert_id(stmt->stmt);
-       assert(i < ((unsigned long int)-1) >> 1);
-       return (long int)i;
-}
-
-
-/*
- * helping function: find oud mysql error and sets on the context
- */
-static int myerr(glite_lbu_DBContextMysql ctx, const char *source, int line) {
-       return glite_lbu_DBSetError(&ctx->generic, EIO, source, line, mysql_module.mysql_error(ctx->mysql));
-}
-
-
-/*
- * helping function: find oud mysql stmt error and sets on the context
- */
-static int myerrstmt(glite_lbu_StatementMysql stmt, const char *source, int line) {    
-       return glite_lbu_DBSetError(stmt->generic.ctx, EIO, source, line, mysql_module.mysql_stmt_error(stmt->stmt));
-}
-
-
-/*
- * helping function: error handle
- *
- * \return -1 failed
- * \return  0 retry
- * \return  1 OK
- */
-static int myisokstmt(glite_lbu_StatementMysql stmt, const char *source, int line, int *retry) {
-       switch (mysql_module.mysql_stmt_errno(stmt->stmt)) {
-               case 0:
-                       return 1;
-                       break;
-               case ER_DUP_ENTRY:
-                       glite_lbu_DBSetError(stmt->generic.ctx, EEXIST, source, line, mysql_module.mysql_stmt_error(stmt->stmt));
-                       return -1;
-                       break;
-               case CR_SERVER_LOST:
-               case CR_SERVER_GONE_ERROR:
-                       if (*retry > 0) {
-                               (*retry)--;
-                               return 0;
-                       } else {
-                               myerrstmt(stmt, source, line);
-                               return -1;
-                       }
-                       break;
-               default:
-                       myerrstmt(stmt, source, line);
-                       return -1;
-                       break;
-       }
-}
-
-
-/*
- * mysql connect
- */
-static int db_connect(glite_lbu_DBContextMysql ctx, const char *cs, MYSQL **mysql) {
-       char    *buf = NULL;
-       char    *host,*user,*pw,*db; 
-       char    *slash,*at,*colon;
-       int      ret;
-#if MYSQL_VERSION_ID >= 50013
-       my_bool reconnect = 1;
-#endif
-
-       // needed for SQL result parameters
-       assert(sizeof(int) >= sizeof(my_bool));
-
-       if (!cs) return ERR(ctx, EINVAL, "connect string not specified");
-       
-       if (!(*mysql = mysql_module.mysql_init(NULL))) return ERR(ctx, ENOMEM, NULL);
-
-       mysql_module.mysql_options(*mysql, MYSQL_READ_DEFAULT_FILE, "my");
-#if MYSQL_VERSION_ID >= 50013
-       /* XXX: may result in weird behaviour in the middle of transaction */
-       mysql_module.mysql_options(*mysql, MYSQL_OPT_RECONNECT, &reconnect);
-#endif
-
-       host = user = pw = db = NULL;
-
-       buf = strdup(cs);
-       slash = strchr(buf,'/');
-       at = strrchr(buf,'@');
-       colon = strrchr(buf,':');
-
-       if (!slash || !at || !colon) {
-               free(buf);
-               db_close(*mysql);
-               *mysql = NULL;
-               return ERR(ctx, EINVAL, "Invalid DB connect string");
-       }
-
-       *slash = *at = *colon = 0;
-       host = at+1;
-       user = buf;
-       pw = slash+1;
-       db = colon+1;
-
-       /* ljocha: CLIENT_FOUND_ROWS added to make authorization check
-        * working in update_notif(). 
-        * Hope it does not break anything else */ 
-       if (!mysql_module.mysql_real_connect(*mysql,host,user,pw,db,0,NULL,CLIENT_FOUND_ROWS)) {
-               ret = MY_ERR(ctx);
-               db_close(*mysql);
-               *mysql = NULL;
-               free(buf);
-               return ret;
-       }
-       free(buf);
-
-       return CLR_ERR(ctx);
-}
-
-
-/*
- * mysql close
- */
-static void db_close(MYSQL *mysql) {
-       if (mysql) mysql_module.mysql_close(mysql);
-}
-
-
-/*
- * test transactions capability:
- */
-static int transaction_test(glite_lbu_DBContext ctx, int *caps) {
-       glite_lbu_Statement stmt;
-       char *table[1] = { NULL }, *res[2] = { NULL, NULL }, *cmd = NULL;
-       int retval;
-
-       (*caps) &= ~GLITE_LBU_DB_CAP_TRANSACTIONS;
-
-       if ((retval = glite_lbu_ExecSQLMysql(ctx, "SHOW TABLES", &stmt)) <= 0 || glite_lbu_FetchRowMysql(stmt, 1, NULL, table) < 0) goto quit;
-       glite_lbu_FreeStmtMysql(&stmt);
-
-       trio_asprintf(&cmd, "SHOW CREATE TABLE %|Ss", table[0]);
-       if (glite_lbu_ExecSQLMysql(ctx, cmd, &stmt) <= 0 || (retval = glite_lbu_FetchRowMysql(stmt, 2, NULL, res)) < 0 ) goto quit;
-       if (retval != 2 || strcmp(res[0], table[0])) {
-               ERR(ctx, EIO, "unexpected show create result");
-               goto quit;
-       }
-
-       if (strstr(res[1],"ENGINE=InnoDB"))
-               (*caps) |= GLITE_LBU_DB_CAP_TRANSACTIONS;
-
-#ifdef LBS_DB_PROFILE
-       fprintf(stderr, "[%d] use_transactions = %d\n", getpid(), USE_TRANS(ctx));
-#endif
-
-quit:
-       glite_lbu_FreeStmtMysql(&stmt);
-       free(table[0]);
-       free(res[0]);
-       free(res[1]);
-       free(cmd);
-       return STATUS(ctx);
-}
-
-
-/*
- * simple version of the fetch
- */
-static int FetchRowSimple(glite_lbu_DBContextMysql ctx, MYSQL_RES *result, unsigned long *lengths, char **results) {
-       MYSQL_ROW            row;
-       unsigned int         nr, i;
-       unsigned long       *len;
-
-       CLR_ERR(ctx);
-
-       if (!(row = mysql_module.mysql_fetch_row(result))) {
-               if (mysql_module.mysql_errno((MYSQL *) ctx->mysql)) {
-                       MY_ERR(ctx);
-                       return -1;
-               } else return 0;
-       }
-
-       nr = mysql_module.mysql_num_fields(result);
-       len = mysql_module.mysql_fetch_lengths(result);
-       for (i=0; i<nr; i++) {
-               if (lengths) lengths[i] = len[i];
-               if (len[i]) {
-                       results[i] = malloc(len[i] + 1);
-                       memcpy(results[i], row[i], len[i]);
-                       results[i][len[i]] = '\000';
-               } else
-                       results[i] = strdup("");
-       }
-
-       return nr;
-}
-
-
-/*
- * prepared version of the fetch
- */
-static int FetchRowPrepared(glite_lbu_DBContextMysql ctx, glite_lbu_StatementMysql stmt, unsigned int n, unsigned long *lengths, char **results) {
-       int ret, retry;
-       unsigned int i;
-       MYSQL_BIND *binds = NULL;
-       unsigned long *lens = NULL;
-
-       if (n != stmt->nrfields) {
-               ERR(ctx, EINVAL, "bad number of result fields");
-               return -1;
-       }
-
-       // space for results
-       if (n) binds = calloc(n, sizeof(MYSQL_BIND));
-       if (!lengths) {
-               lens = calloc(n, sizeof(unsigned long));
-               lengths = lens;
-       }
-       for (i = 0; i < n; i++) {
-               binds[i].buffer_type = MYSQL_TYPE_VAR_STRING;
-               binds[i].buffer_length = GLITE_LBU_DEFAULT_RESULT_BUFFER_LENGTH - 1;
-               binds[i].length = &lengths[i];
-               binds[i].buffer = results[i] = calloc(1, GLITE_LBU_DEFAULT_RESULT_BUFFER_LENGTH);
-       }
-       if (mysql_module.mysql_stmt_bind_result(stmt->stmt, binds) != 0) goto failedstmt;
-
-       // fetch data, all can be truncated
-       retry = 1;
-       do {
-               switch(mysql_module.mysql_stmt_fetch(stmt->stmt)) {
-#ifdef MYSQL_DATA_TRUNCATED
-                       case MYSQL_DATA_TRUNCATED:
-#endif
-                       case 0:
-                               ret = 1; break;
-                       case 1: ret = MY_ISOKSTMT(stmt, &retry); break;
-                       case MYSQL_NO_DATA: ret = 0; goto quit; /* it's OK */
-                       default: ERR(ctx, EIO, "other fetch error"); goto failed;
-               }
-       } while (ret == 0);
-       if (ret == -1) goto failed;
-
-       // check if all fileds had enough buffer space
-       for (i = 0; i < n; i++) {
-               // fetch the rest if needed
-               if (lengths[i] > binds[i].buffer_length) {
-                       unsigned int fetched;
-
-                       fetched = binds[i].buffer_length;
-                       if ((results[i] = realloc(results[i], lengths[i] + 1)) == NULL) {
-                               ERR(ctx, ENOMEM, "insufficient memory for field data");
-                               goto failed;
-                       }
-                       results[i][lengths[i]] = '\000';
-                       binds[i].buffer = results[i] + fetched;
-                       binds[i].buffer_length = lengths[i] - fetched;
-
-                       retry = 1;
-                       do {
-                               switch (mysql_module.mysql_stmt_fetch_column(stmt->stmt, binds + i, i, fetched)) {
-                                       case 0: ret = 1; break;
-                                       case 1: ret = MY_ISOKSTMT(stmt, &retry); break;
-                                       case MYSQL_NO_DATA: ret = 0; goto quit; /* it's OK */
-                                       default: ERR(ctx, EIO, "other fetch error"); goto failed;
-                               }
-                       } while (ret == 0);
-                       if (ret == -1) goto failed;
-               }
-       }
-
-       CLR_ERR(ctx);
-       free(binds);
-       free(lens);
-       return n;
-
-failedstmt:
-       MY_ERRSTMT(stmt);
-failed:
-       ret = -1;
-quit:
-       free(binds);
-       free(lens);
-       for (i = 0; i < n; i++) {
-               free(results[i]);
-               results[i] = NULL;
-       }
-       return ret;
-}
-
-
-static void set_time(MYSQL_TIME *mtime, const double time) {
-       struct tm tm;
-       time_t itime;
-
-       itime = time;
-       gmtime_r(&itime, &tm);
-       memset(mtime, 0, sizeof *mtime);
-       mtime->year = tm.tm_year + 1900;
-       mtime->month = tm.tm_mon + 1;
-       mtime->day = tm.tm_mday;
-       mtime->hour = tm.tm_hour;
-       mtime->minute = tm.tm_min;
-       mtime->second = tm.tm_sec;
-       mtime->second_part = (time - itime) * 1000;
-}
-
-
-static void glite_lbu_DBCleanup(void) {
-       pthread_mutex_lock(&mysql_module.lock);
-       if (mysql_module.lib) {
-               dlclose(mysql_module.lib);
-               mysql_module.lib = NULL;
-       }
-       pthread_mutex_unlock(&mysql_module.lock);
-}
-
-
diff --git a/org.glite.lbjp-common.db/src/db-pg.c b/org.glite.lbjp-common.db/src/db-pg.c
deleted file mode 100644 (file)
index 7d8d743..0000000
+++ /dev/null
@@ -1,603 +0,0 @@
-/**
- * Simple postgres module with org.glite.lbjp-common.db interface.
- * 
- * PostgreSQL limitations:
- *  - prepared commands requires server >= 8.2
- *  - binary data need to be handled manually (libpq limitation)
- */
-
-#include <sys/types.h>
-#include <assert.h>
-#include <dlfcn.h>
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-
-#include <libpq-fe.h>
-
-#include "glite/lbu/trio.h"
-#include "db.h"
-#include "db-int.h"
-
-#ifdef WIN32
-#define STDCALL __stdcall
-#else
-#define STDCALL
-#endif
-
-#define DB_CONNECT_TIMEOUT "20"
-
-#ifdef LOG
-  #define lprintf(FMT...) fprintf(stdout, "[db-pg] %s: ", __FUNCTION__); fprintf(stdout, ##FMT);
-#else
-  #define lprintf(FMT...)
-#endif
-
-#define set_error(CTX, CODE, DESC...) glite_lbu_DBSetError((glite_lbu_DBContext)(CTX), (CODE), __FUNCTION__, __LINE__, ##DESC)
-
-#define LOAD(SYM, SYM2) if ((*(void **)(&psql_module.SYM) = dlsym(psql_module.lib, SYM2)) == NULL) { \
-       err = set_error(ctx, ENOENT, "can't load symbol '%s' from psql library (%s)", SYM2, dlerror()); \
-       break; \
-}
-
-
-struct glite_lbu_DBContextPsql_s {
-       struct glite_lbu_DBContext_s generic;
-       PGconn *conn;
-       int prepared_counts[4];
-};
-typedef struct glite_lbu_DBContextPsql_s *glite_lbu_DBContextPsql;
-
-struct glite_lbu_StatementPsql_s {
-       glite_lbu_Statement_t generic;
-       PGresult *res;
-       int row, nrows;
-       char *sql, *name;
-};
-typedef struct glite_lbu_StatementPsql_s *glite_lbu_StatementPsql;
-
-typedef struct {
-       void *lib;
-       pthread_mutex_t lock;
-
-       /* functions from 8.3.8 client library version (libpq-fe.h) */
-       PGconn *STDCALL(*PQconnectdb)(const char *conninfo);
-       ConnStatusType STDCALL(*PQstatus)(const PGconn *conn);
-       void STDCALL(*PQfinish)(PGconn *conn);
-       char *STDCALL(*PQerrorMessage)(const PGconn *conn);
-       int STDCALL(*PQnfields)(const PGresult *res);
-       char *STDCALL(*PQgetvalue)(const PGresult *res, int tup_num, int field_num);
-       int STDCALL(*PQgetlength)(const PGresult *res, int tup_num, int field_num);
-       void STDCALL(*PQclear)(PGresult *res);
-       PGresult *STDCALL(*PQexec)(PGconn *conn, const char *query);
-       ExecStatusType STDCALL(*PQresultStatus)(const PGresult *res);
-       char *STDCALL(*PQresultErrorMessage)(const PGresult *res);
-       char *STDCALL(*PQcmdTuples)(PGresult *res);
-       int STDCALL(*PQntuples)(const PGresult *res);
-       char *STDCALL(*PQfname)(const PGresult *res, int field_num);
-       size_t STDCALL(*PQescapeStringConn)(PGconn *conn,
-               char *to, const char *from, size_t length,
-               int *error);
-       void STDCALL(*PQfreemem)(void *ptr);
-} psql_module_t;
-
-
-static void glite_lbu_DBCleanup(void);
-
-/* backend module declaration */
-int glite_lbu_InitDBContextPsql(glite_lbu_DBContext *ctx_gen);
-void glite_lbu_FreeDBContextPsql(glite_lbu_DBContext ctx_gen);
-int glite_lbu_DBConnectPsql(glite_lbu_DBContext ctx_gen, const char *cs);
-void glite_lbu_DBClosePsql(glite_lbu_DBContext ctx_gen);
-int glite_lbu_DBQueryCapsPsql(glite_lbu_DBContext ctx_gen);
-void glite_lbu_DBSetCapsPsql(glite_lbu_DBContext commmon_ctx, int caps);
-int glite_lbu_TransactionPsql(glite_lbu_DBContext ctx_gen);
-int glite_lbu_CommitPsql(glite_lbu_DBContext ctx_gen);
-int glite_lbu_RollbackPsql(glite_lbu_DBContext ctx_gen);
-int glite_lbu_FetchRowPsql(glite_lbu_Statement stmt, unsigned int n, unsigned long *lengths, char **results);
-void glite_lbu_FreeStmtPsql(glite_lbu_Statement *stmt);
-//int glite_lbu_QueryIndicesPsql(glite_lbu_DBContext ctx_gen, const char *table, char ***key_names, char ****column_names);
-int glite_lbu_ExecSQLPsql(glite_lbu_DBContext ctx_gen, const char *cmd, glite_lbu_Statement *stmt);
-int glite_lbu_QueryColumnsPsql(glite_lbu_Statement stmt_gen, char **cols);
-int glite_lbu_PrepareStmtPsql(glite_lbu_DBContext ctx_gen, const char *sql, glite_lbu_Statement *stmt_gen);
-int glite_lbu_ExecPreparedStmtPsql_v(glite_lbu_Statement stmt_gen, int n, va_list ap);
-//long int glite_lbu_LastidPsql(glite_lbu_Statement stmt_gen);
-
-glite_lbu_DBBackend_t psql_backend = {
-       backend: GLITE_LBU_DB_BACKEND_PSQL,
-
-       initContext: glite_lbu_InitDBContextPsql,
-       freeContext: glite_lbu_FreeDBContextPsql,
-       connect: glite_lbu_DBConnectPsql,
-       close: glite_lbu_DBClosePsql,
-       queryCaps: glite_lbu_DBQueryCapsPsql,
-       setCaps: glite_lbu_DBSetCapsPsql,
-       transaction: glite_lbu_TransactionPsql,
-       commit: glite_lbu_CommitPsql,
-       rollback: glite_lbu_RollbackPsql,
-       fetchRow: glite_lbu_FetchRowPsql,
-       freeStmt: glite_lbu_FreeStmtPsql,
-       queryIndices: NULL /*glite_lbu_QueryIndicesPsql*/,
-       execSQL: glite_lbu_ExecSQLPsql,
-       queryColumns: glite_lbu_QueryColumnsPsql,
-
-       timeToDB: glite_lbu_TimeToStr,
-       timestampToDB: glite_lbu_TimestampToStr,
-       DBToTime: glite_lbu_StrToTime,
-       DBToTimestamp: glite_lbu_StrToTimestamp,
-
-       prepareStmt: glite_lbu_PrepareStmtPsql,
-       execPreparedStmt_v: glite_lbu_ExecPreparedStmtPsql_v,
-       lastid: NULL/*glite_lbu_LastidPsql*/,
-};
-
-static psql_module_t psql_module = {
-       lib: NULL,
-       lock: PTHREAD_MUTEX_INITIALIZER,
-};
-
-
-/* nicer identifiers in PREPARE/EXECUTE commands */
-static const char *prepared_names[4] = {"select", "update", "insert", "other"};
-
-
-int glite_lbu_InitDBContextPsql(glite_lbu_DBContext *ctx_gen) {
-       glite_lbu_DBContextPsql ctx;
-       int err = 0;
-
-       ctx = calloc(1, sizeof *ctx);
-       if (!ctx) return ENOMEM;
-       *ctx_gen = (glite_lbu_DBContext)ctx;
-
-       /* dynamic load of the client library */
-       pthread_mutex_lock(&psql_module.lock);
-       if (!psql_module.lib) {
-               psql_module.lib = dlopen(PSQL_SONAME, RTLD_LAZY | RTLD_LOCAL);
-               if (!psql_module.lib) return set_error(ctx, ENOENT, "dlopen(): " PSQL_SONAME ": %s", dlerror());
-               do {
-                       LOAD(PQconnectdb, "PQconnectdb");
-                       LOAD(PQstatus, "PQstatus");
-                       LOAD(PQfinish, "PQfinish");
-                       LOAD(PQerrorMessage, "PQerrorMessage");
-                       LOAD(PQnfields, "PQnfields");
-                       LOAD(PQgetvalue, "PQgetvalue");
-                       LOAD(PQgetlength, "PQgetlength");
-                       LOAD(PQclear, "PQclear");
-                       LOAD(PQexec, "PQexec");
-                       LOAD(PQresultStatus, "PQresultStatus");
-                       LOAD(PQresultErrorMessage, "PQresultErrorMessage");
-                       LOAD(PQcmdTuples, "PQcmdTuples");
-                       LOAD(PQntuples, "PQntuples");
-                       LOAD(PQfname, "PQfname");
-                       LOAD(PQescapeStringConn, "PQescapeStringConn");
-                       LOAD(PQfreemem, "PQfreemem");
-
-                       pthread_mutex_unlock(&psql_module.lock);
-                       atexit(glite_lbu_DBCleanup);
-               } while(0);
-
-               if (err) {
-                       dlclose(psql_module.lib);
-                       psql_module.lib = NULL;
-                       pthread_mutex_unlock(&psql_module.lock);
-                       return err;
-               }
-       } else pthread_mutex_unlock(&psql_module.lock);
-
-       return 0;
-}
-
-
-void glite_lbu_FreeDBContextPsql(glite_lbu_DBContext ctx_gen) {
-       glite_lbu_DBContextPsql ctx = (glite_lbu_DBContextPsql)ctx_gen;
-
-       if (ctx) {
-               assert(ctx->conn == NULL);
-               free(ctx);
-       }
-}
-
-
-int glite_lbu_DBConnectPsql(glite_lbu_DBContext ctx_gen, const char *cs) {
-       glite_lbu_DBContextPsql ctx = (glite_lbu_DBContextPsql)ctx_gen;
-       char *buf, *slash, *at, *colon, *host, *user, *pw, *db, *pgcsbuf, *pgcs;
-       char *err;
-
-       host = user = pw = db = NULL;
-       buf = strdup(cs);
-       slash = strchr(buf,'/');
-       at = strrchr(buf,'@');
-       colon = strrchr(buf,':');
-       if (!slash || !at || !colon) {
-               free(buf);
-               return set_error(ctx, EINVAL, "Invalid DB connect string");
-       }
-       *slash = *at = *colon = 0;
-       host = at+1;
-       user = buf;
-       pw = slash+1;
-       db = colon+1;
-
-       trio_asprintf(&pgcsbuf, "host='%|Ss' dbname='%|Ss' user='%|Ss' password='%|Ss' connect_timeout=" DB_CONNECT_TIMEOUT, host, db, user, pw);
-       /* simulate socket acces via localhost similar to MySQL */
-       if (strcmp(host, "localhost") == 0) pgcs = pgcsbuf + strlen("host='localhost' ");
-       else pgcs = pgcsbuf;
-       free(buf);
-
-       lprintf("connection string = %s\n", pgcs);
-       ctx->conn = psql_module.PQconnectdb(pgcs);
-       free(pgcsbuf);
-       if (!ctx->conn) return ENOMEM;
-
-       
-
-       if (psql_module.PQstatus(ctx->conn) != CONNECTION_OK) {
-               asprintf(&err, "Can't connect, %s", psql_module.PQerrorMessage(ctx->conn));
-               psql_module.PQfinish(ctx->conn);
-               ctx->conn = NULL;
-               set_error(ctx, EIO, err);
-               free(err);
-               return EIO;
-       }
-
-       return 0;
-}
-
-
-void glite_lbu_DBClosePsql(glite_lbu_DBContext ctx_gen) {
-       glite_lbu_DBContextPsql ctx = (glite_lbu_DBContextPsql)ctx_gen;
-
-       if (ctx->conn) {
-               psql_module.PQfinish(ctx->conn);
-               ctx->conn = NULL;
-       }
-}
-
-
-int glite_lbu_DBQueryCapsPsql(glite_lbu_DBContext ctx_gen) {
-       glite_lbu_DBContextPsql ctx = (glite_lbu_DBContextPsql)ctx_gen;
-       glite_lbu_Statement stmt;
-       int major, minor, sub, version;
-       int has_prepared = 0;
-       char *res = NULL;
-
-       if (glite_lbu_ExecSQLPsql(ctx_gen, "SHOW server_version", &stmt) == -1) return -1;
-       switch (glite_lbu_FetchRowPsql(stmt, 1, NULL, &res)) {
-       case 1:
-               break;
-       case -1:
-               has_prepared = -1;
-               goto quit;
-       default:
-               goto quit;
-       }
-       if (sscanf(res, "%d.%d.%d", &major, &minor, &sub) != 3) {
-               set_error(ctx, EIO, "can't parse PostgreSQL version string");
-               goto quit;
-       }
-       version = 10000*major + 100*minor + sub;
-       has_prepared = version >= 80200 ? GLITE_LBU_DB_CAP_PREPARED : 0;
-
-quit:
-       free(res);
-       glite_lbu_FreeStmtPsql(&stmt);
-       return has_prepared;
-}
-
-
-void glite_lbu_DBSetCapsPsql(glite_lbu_DBContext ctx_gen, int caps) {
-       ctx_gen->caps = caps;
-}
-
-
-int glite_lbu_TransactionPsql(glite_lbu_DBContext ctx_gen __attribute((unused))) {
-       return 0;
-}
-
-
-int glite_lbu_CommitPsql(glite_lbu_DBContext ctx_gen __attribute((unused))) {
-       return 0;
-}
-
-
-int glite_lbu_RollbackPsql(glite_lbu_DBContext ctx_gen __attribute((unused))) {
-       return 0;
-}
-
-
-int glite_lbu_FetchRowPsql(glite_lbu_Statement stmt_gen, unsigned int maxn, unsigned long *lengths, char **results) {
-       glite_lbu_StatementPsql stmt = (glite_lbu_StatementPsql)stmt_gen;
-       unsigned int i, n;
-       char *s;
-
-       if (stmt->row >= stmt->nrows) return 0;
-
-       n = psql_module.PQnfields(stmt->res);
-       if (n <= 0) {
-               set_error(stmt->generic.ctx, EINVAL, "Result set w/o columns");
-               return -1;
-       }
-       if (n > maxn) {
-               set_error(stmt->generic.ctx, EINVAL, "Not enough room for the result");
-               return -1;
-       }
-       for (i = 0; i < n; i++) {
-               /* sanity check for internal error (NULL when invalid row) */
-               s = psql_module.PQgetvalue(stmt->res, stmt->row, i) ? : "";
-               results[i] = strdup(s);
-               if (lengths) lengths[i] = strlen(s);
-       }
-
-       stmt->row++;
-       return n;
-}
-
-
-void glite_lbu_FreeStmtPsql(glite_lbu_Statement *stmt_gen) {
-       glite_lbu_DBContextPsql ctx;
-       glite_lbu_StatementPsql stmt;
-       char *sql;
-
-       if (!*stmt_gen) return;
-       stmt = (glite_lbu_StatementPsql)(*stmt_gen);
-       ctx = (glite_lbu_DBContextPsql)stmt->generic.ctx;
-       if (stmt->res) psql_module.PQclear(stmt->res);
-       if (stmt->name) {
-               asprintf(&sql, "DEALLOCATE %s", stmt->name);
-               stmt->res = psql_module.PQexec(ctx->conn, sql);
-               free(sql);
-               psql_module.PQclear(stmt->res);
-       }
-       free(stmt->name);
-       free(stmt->sql);
-       free(stmt);
-       *stmt_gen = NULL;
-}
-
-
-int glite_lbu_ExecSQLPsql(glite_lbu_DBContext ctx_gen, const char *cmd, glite_lbu_Statement *stmt_out) {
-       glite_lbu_DBContextPsql ctx = (glite_lbu_DBContextPsql)ctx_gen;
-       glite_lbu_StatementPsql stmt = NULL;
-       int status, n;
-       char *nstr, *errmsg, *pos;
-       PGresult *res;
-
-       lprintf("command = %s\n", cmd);
-       if (stmt_out) *stmt_out = NULL;
-       if ((res = psql_module.PQexec(ctx->conn, cmd)) == NULL) {
-               ctx->generic.err.code = ENOMEM;
-               return -1;
-       }
-
-       status = psql_module.PQresultStatus(res);
-       if (status != PGRES_COMMAND_OK && status != PGRES_TUPLES_OK) {
-               errmsg = psql_module.PQresultErrorMessage(res);
-               if (errmsg) {
-                       errmsg = strdup(errmsg);
-                       if ((pos = strrchr(errmsg, '\n')) != NULL) pos[0] = '\0';
-               }
-               set_error(ctx, EIO, errmsg);
-               free(errmsg);
-               psql_module.PQclear(res);
-               return -1;
-       }
-
-       nstr = psql_module.PQcmdTuples(res);
-       if (nstr && nstr[0]) n = atoi(nstr);
-       else n = psql_module.PQntuples(res);
-       if (stmt_out) {
-               stmt = calloc(1, sizeof(*stmt));
-               stmt->generic.ctx = ctx_gen;
-               stmt->res = res;
-               stmt->nrows = n;
-               *stmt_out = (glite_lbu_Statement)stmt;
-       } else {
-               psql_module.PQclear(res);
-       }
-       return n;
-}
-
-
-int glite_lbu_QueryColumnsPsql(glite_lbu_Statement stmt_gen, char **cols) {
-       glite_lbu_StatementPsql stmt = (glite_lbu_StatementPsql)stmt_gen;
-       int n, i;
-
-       n = psql_module.PQnfields(stmt->res);
-       for (i = 0; i < n; i++) {
-               cols[i] = psql_module.PQfname(stmt->res, i);
-       }
-       return -1;
-}
-
-
-int glite_lbu_PrepareStmtPsql(glite_lbu_DBContext ctx_gen, const char *sql, glite_lbu_Statement *stmt_out) {
-       glite_lbu_DBContextPsql ctx = (glite_lbu_DBContextPsql)ctx_gen;
-       int i, retval = -1;
-       const char *selectp, *updatep, *insertp, *minp;
-       char *sqlPrep = NULL, *s = NULL;
-       glite_lbu_StatementPsql stmt;
-       PGresult *res = NULL;
-
-       // init
-       stmt = calloc(1, sizeof(*stmt));
-       stmt->generic.ctx = ctx_gen;
-       stmt->sql = strdup(sql);
-
-       // name of the prepared command used as ID in postgres
-       i = -1;
-       minp = stmt->sql + strlen(stmt->sql);
-       selectp = strcasestr(stmt->sql, "SELECT");
-       updatep = strcasestr(stmt->sql, "UPDATE");
-       insertp = strcasestr(stmt->sql, "INSERT");
-       if (selectp && selectp < minp) { minp = selectp; i = 0; }
-       if (updatep && updatep < minp) { minp = updatep; i = 1; }
-       if (insertp && insertp < minp) { minp = insertp; i = 2; }
-       if (i == -1 || minp[0] == '\0') i = 3;
-       asprintf(&stmt->name, "%s%d", prepared_names[i], ++ctx->prepared_counts[i]);
-
-       asprintf(&sqlPrep, "PREPARE %s AS %s", stmt->name, stmt->sql);
-       lprintf("prepare = %s\n", sqlPrep);
-       res = psql_module.PQexec(ctx->conn, sqlPrep);
-       if (psql_module.PQresultStatus(res) != PGRES_COMMAND_OK) {
-               asprintf(&s, "error preparing command: %s", psql_module.PQerrorMessage(ctx->conn));
-               set_error(ctx, EIO, s);
-               free(s); s = NULL;
-               goto quit;
-       }
-
-       *stmt_out = (glite_lbu_Statement)stmt;
-       retval = 0;
-
-quit:
-       free(sqlPrep);
-       if (res) psql_module.PQclear(res);
-       if (!retval) return 0;
-
-       free(stmt->name);
-       free(stmt->sql);
-       free(stmt);
-       return retval;
-}
-
-
-int glite_lbu_ExecPreparedStmtPsql_v(glite_lbu_Statement stmt_gen, int n, va_list ap) {
-       glite_lbu_StatementPsql stmt = (glite_lbu_StatementPsql)stmt_gen;
-       glite_lbu_DBContextPsql ctx = (glite_lbu_DBContextPsql)stmt_gen->ctx;
-       int i, retval = -1, status;
-       char **tmpdata = NULL;
-       char *sql = NULL, *s, *nstr;
-       size_t data_len = 0;
-
-       glite_lbu_DBType type;
-
-       if (!stmt || !stmt->sql || !stmt->name)
-               return set_error(ctx, EINVAL, "PrepareStmt() not called");
-
-       if (stmt->res) {
-               psql_module.PQclear(stmt->res);
-               stmt->res = NULL;
-       }
-
-       // gather parameters
-       if (n) {
-               tmpdata = calloc(n, sizeof(char *));
-       }
-       for (i = 0; i < n; i++) {
-               type = va_arg(ap, glite_lbu_DBType);
-
-               switch(type) {
-               case GLITE_LBU_DB_TYPE_TINYINT:
-                       asprintf(&tmpdata[i], "%d", va_arg(ap, int));
-                       break;
-
-               case GLITE_LBU_DB_TYPE_INT:
-                       asprintf(&tmpdata[i], "%ld", va_arg(ap, long int));
-                       break;
-
-               case GLITE_LBU_DB_TYPE_TINYBLOB:
-               case GLITE_LBU_DB_TYPE_TINYTEXT:
-               case GLITE_LBU_DB_TYPE_BLOB:
-               case GLITE_LBU_DB_TYPE_TEXT:
-               case GLITE_LBU_DB_TYPE_MEDIUMBLOB:
-               case GLITE_LBU_DB_TYPE_MEDIUMTEXT:
-               case GLITE_LBU_DB_TYPE_LONGBLOB:
-               case GLITE_LBU_DB_TYPE_LONGTEXT: {
-                       char *tmp, *s;
-                       unsigned long binary_len;
-
-                       s = va_arg(ap, char *);
-                       binary_len = va_arg(ap, unsigned long);
-                       lprintf("blob, len = %lu, ptr = %p\n", binary_len, s);
-                       if (s) {
-                               tmp = malloc(2*binary_len + 1);
-                               psql_module.PQescapeStringConn(ctx->conn, tmp, s, binary_len, NULL);
-                               asprintf(&tmpdata[i], "'%s'", tmp);
-                               lprintf("escaped: '%s'\n", tmpdata[i]);
-                               free(tmp);
-                       } else
-                               tmpdata[i] = strdup("NULL");
-                       break;
-               }
-
-
-               case GLITE_LBU_DB_TYPE_VARCHAR:
-               case GLITE_LBU_DB_TYPE_CHAR:
-                       s = va_arg(ap, char *);
-                       if (s) trio_asprintf(&tmpdata[i], "'%|Ss'", s);
-                       else tmpdata[i] = strdup("NULL");
-                       break;
-
-               case GLITE_LBU_DB_TYPE_DATE:
-               case GLITE_LBU_DB_TYPE_TIME:
-               case GLITE_LBU_DB_TYPE_DATETIME:
-                       glite_lbu_TimeToStr(va_arg(ap, time_t), &tmpdata[i]);
-                       break;
-
-               case GLITE_LBU_DB_TYPE_TIMESTAMP:
-                       glite_lbu_TimestampToStr(va_arg(ap, double), &tmpdata[i]);
-                       break;
-
-               case GLITE_LBU_DB_TYPE_NULL:
-                       tmpdata[i] = strdup("NULL");
-                       break;
-
-               case GLITE_LBU_DB_TYPE_BOOLEAN:
-                       tmpdata[i] = strdup(va_arg(ap, int) ? "true" : "false");
-                       break;
-
-               default:
-                       lprintf("unknown type %d\n", type);
-                       set_error(ctx, EINVAL, "unimplemented type");
-                       goto quit;
-               }
-
-               data_len += strlen(tmpdata[i]);
-       }
-
-       asprintf(&sql, "EXECUTE %s", stmt->name);
-       s = realloc(sql, strlen(sql) + (2 * n - 2) + strlen(" ()") + data_len + 1);
-       if (!s) goto quit;
-       sql = s;
-       for (i = 0; i < n; i++) {
-               strcat(sql, i ? ", " : " (" ); s += 2;
-               strcat(sql, tmpdata[i]);
-       }
-       if (n) strcat(sql, ")");
-
-       lprintf("exec prepared: n = %d, sql = '%s'\n", n, sql);
-       stmt->res = psql_module.PQexec(ctx->conn, sql);
-       status = psql_module.PQresultStatus(stmt->res);
-       if (status != PGRES_COMMAND_OK && status != PGRES_TUPLES_OK) {
-               asprintf(&s, "error executing prepared command '%s' parameters '%s': %s", stmt->sql, sql, psql_module.PQerrorMessage(ctx->conn));
-               set_error(ctx, EIO, s);
-               free(s); s = NULL;
-               goto quit;
-       }
-       nstr = psql_module.PQcmdTuples(stmt->res);
-       //lprintf("cmdtuples: '%s'\n", nstr);
-       if (nstr && nstr[0]) retval = atoi(nstr);
-       else retval = psql_module.PQntuples(stmt->res);
-       stmt->nrows = retval;
-       stmt->row = 0;
-       //lprintf("ntuples/retval: %d\n", retval);
-
-quit:
-       for (i = 0; i < n; i++) free(tmpdata[i]);
-       free(tmpdata);
-       free(sql);
-       return retval;
-}
-
-
-static void glite_lbu_DBCleanup(void) {
-       pthread_mutex_lock(&psql_module.lock);
-       if (psql_module.lib) {
-               dlclose(psql_module.lib);
-               psql_module.lib = NULL;
-       }
-       pthread_mutex_unlock(&psql_module.lock);
-}
diff --git a/org.glite.lbjp-common.db/src/db.c b/org.glite.lbjp-common.db/src/db.c
deleted file mode 100644 (file)
index d65d5a8..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-#include <sys/types.h>
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <glite/lbu/trio.h>
-
-#include "db.h"
-#include "db-int.h"
-
-
-#define VALID(BACKEND) ((BACKEND) >= 0 && (BACKEND) < GLITE_LBU_DB_BACKEND_LAST)
-
-
-struct glite_lbu_bufInsert_s {
-       glite_lbu_DBContext ctx;
-       char    *table_name;
-       char    *columns;       /* names of columns to be inserted into 
-                                * (values separated with commas) */
-       char    **rows;         /* each row hold string of one row to be inserted
-                                * (values separated with commas) */
-       long    rec_num,        /* actual number of rows in structure */
-               rec_size;       /* approx. size of a real insert string */
-       long    size_limit,     /* size and # of records limit which trigger */
-               record_limit;   /* real insert; zero means unlimitted */
-};
-
-
-/* possible backends */
-#ifdef MYSQL_SONAME
-extern glite_lbu_DBBackend_t mysql_backend;
-#else
-#define mysql_backend no_backend
-#endif
-#ifdef PSQL_SONAME
-extern glite_lbu_DBBackend_t psql_backend;
-#else
-#define psql_backend no_backend
-#endif
-
-glite_lbu_DBBackend_t no_backend = {
-       backend: -1,
-
-       /* functions unspecified */
-};
-
-glite_lbu_DBBackend_t *backends[GLITE_LBU_DB_BACKEND_LAST] = {
-       &mysql_backend,
-       &psql_backend
-};
-
-
-/* --- internal functions ---- */
-
-int glite_lbu_DBClearError(glite_lbu_DBContext ctx) {
-       ctx->err.code = 0;
-       if (ctx->err.desc) {
-               free(ctx->err.desc);
-               ctx->err.desc = NULL;
-       }
-       return 0;
-}
-
-
-int glite_lbu_DBSetError(glite_lbu_DBContext ctx, int code, const char *func, int line, const char *desc, ...) {
-       va_list ap;
-
-       if (!code) return ctx->err.code;
-
-       ctx->err.code = code;
-       free(ctx->err.desc);
-       if (desc) {
-               va_start(ap, desc);
-               vasprintf(&ctx->err.desc, desc, ap);
-               va_end(ap);
-       } else
-               ctx->err.desc = NULL;
-       dprintf(ctx, "[db %d] %s:%d %s\n", getpid(), func, line, ctx->err.desc);
-       return code;
-}
-
-
-void glite_lbu_TimeToStrGeneric(time_t t, char **str, const char *amp) {
-       struct tm       *tm = gmtime(&t);
-
-       asprintf(str,"%s%4d-%02d-%02d %02d:%02d:%02d%s",amp,tm->tm_year+1900,tm->tm_mon+1,
-               tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,amp);
-}
-
-
-void glite_lbu_TimeToStr(time_t t, char **str) {
-       glite_lbu_TimeToStrGeneric(t, str, "'");
-}
-
-
-void glite_lbu_TimestampToStrGeneric(double t, char **str, const char *amp) {
-       time_t tsec = t;
-       struct tm *tm = gmtime(&tsec);
-
-       t = t - tsec + tm->tm_sec;
-       asprintf(str,"%s%4d-%02d-%02d %02d:%02d:%02.09f%s",amp,tm->tm_year+1900,tm->tm_mon+1,
-                tm->tm_mday,tm->tm_hour,tm->tm_min,t,amp);
-}
-
-
-void glite_lbu_TimestampToStr(double t, char **str) {
-       glite_lbu_TimestampToStrGeneric(t, str, "'");
-}
-
-
-time_t glite_lbu_StrToTime(const char *str) {
-       struct tm       tm;
-
-       memset(&tm,0,sizeof(tm));
-       putenv("TZ=UTC"); tzset();
-       sscanf(str,"%4d-%02d-%02d %02d:%02d:%02d",
-               &tm.tm_year,&tm.tm_mon,&tm.tm_mday,
-               &tm.tm_hour,&tm.tm_min,&tm.tm_sec);
-       tm.tm_year -= 1900;
-       tm.tm_mon--;
-
-       return mktime(&tm);
-}
-
-
-double glite_lbu_StrToTimestamp(const char *str) {
-       struct tm       tm;
-       double  sec;
-
-       memset(&tm,0,sizeof(tm));
-       putenv("TZ=UTC"); tzset();
-       sscanf(str,"%4d-%02d-%02d %02d:%02d:%lf",
-               &tm.tm_year,&tm.tm_mon,&tm.tm_mday,
-               &tm.tm_hour,&tm.tm_min,&sec);
-       tm.tm_year -= 1900;
-       tm.tm_mon--;
-       tm.tm_sec = sec;
-
-       return (sec - tm.tm_sec) + mktime(&tm);
-}
-
-
-/* ---- API ---- */
-
-
-int glite_lbu_DBError(glite_lbu_DBContext ctx, char **text, char **desc) {
-       if (text) *text = strdup(strerror(ctx->err.code));
-       if (desc) {
-               if (ctx->err.desc) *desc = strdup(ctx->err.desc);
-               else *desc = NULL;
-       }
-
-       return ctx->err.code;
-}
-
-
-int glite_lbu_InitDBContext(glite_lbu_DBContext *ctx, int backend) {
-       int ret;
-
-       if (!VALID(backend)) return EINVAL;
-       if (backends[backend]->backend != backend) return ENOTSUP;
-       ret = backends[backend]->initContext(ctx);
-       if (ctx && *ctx) (*ctx)->backend = backend;
-       return ret;
-}
-
-
-void glite_lbu_FreeDBContext(glite_lbu_DBContext ctx) {
-       if (!ctx || !VALID(ctx->backend)) return;
-
-       free(ctx->err.desc);
-       ctx->err.desc = NULL;
-       backends[ctx->backend]->freeContext(ctx);
-}
-
-
-int glite_lbu_DBConnect(glite_lbu_DBContext ctx, const char *cs) {
-       if (!VALID(ctx->backend)) return EINVAL;
-       return backends[ctx->backend]->connect(ctx, cs);
-}
-
-
-void glite_lbu_DBClose(glite_lbu_DBContext ctx) {
-       if (!VALID(ctx->backend)) return;
-       backends[ctx->backend]->close(ctx);
-}
-
-
-int glite_lbu_DBQueryCaps(glite_lbu_DBContext ctx) {
-       if (!VALID(ctx->backend)) return EINVAL;
-       return backends[ctx->backend]->queryCaps(ctx);
-}
-
-
-void glite_lbu_DBSetCaps(glite_lbu_DBContext ctx, int caps) {
-       if (!VALID(ctx->backend)) return;
-       return backends[ctx->backend]->setCaps(ctx, caps);
-}
-
-
-int glite_lbu_Transaction(glite_lbu_DBContext ctx) {
-       if (!VALID(ctx->backend)) return EINVAL;
-       return backends[ctx->backend]->transaction(ctx);
-}
-
-
-int glite_lbu_Commit(glite_lbu_DBContext ctx) {
-       if (!VALID(ctx->backend)) return EINVAL;
-       return backends[ctx->backend]->commit(ctx);
-}
-
-
-int glite_lbu_Rollback(glite_lbu_DBContext ctx) {
-       if (!VALID(ctx->backend)) return EINVAL;
-       return backends[ctx->backend]->rollback(ctx);
-}
-
-
-int glite_lbu_FetchRow(glite_lbu_Statement stmt, unsigned int n, unsigned long *lengths, char **results) {
-       if (!VALID(stmt->ctx->backend)) return EINVAL;
-       return backends[stmt->ctx->backend]->fetchRow(stmt, n, lengths, results);
-}
-
-
-void glite_lbu_FreeStmt(glite_lbu_Statement *stmt) {
-       if (!stmt || !*stmt || !VALID((*stmt)->ctx->backend)) return;
-       return backends[(*stmt)->ctx->backend]->freeStmt(stmt);
-}
-
-
-int glite_lbu_QueryIndices(glite_lbu_DBContext ctx, const char *table, char ***key_names, char ****column_names) {
-       if (!VALID(ctx->backend)) return EINVAL;
-       return backends[ctx->backend]->queryIndices(ctx, table, key_names, column_names);
-}
-
-
-int glite_lbu_ExecSQL(glite_lbu_DBContext ctx, const char *cmd, glite_lbu_Statement *stmt) {
-       if (!VALID(ctx->backend)) return EINVAL;
-       return backends[ctx->backend]->execSQL(ctx, cmd, stmt);
-}
-
-
-int glite_lbu_QueryColumns(glite_lbu_Statement stmt, char **cols) {
-       if (!VALID(stmt->ctx->backend)) return EINVAL;
-       return backends[stmt->ctx->backend]->queryColumns(stmt, cols);
-}
-
-
-int glite_lbu_PrepareStmt(glite_lbu_DBContext ctx, const char *sql, glite_lbu_Statement *stmt) {
-       if (!VALID(ctx->backend)) return EINVAL;
-       return backends[ctx->backend]->prepareStmt(ctx, sql, stmt);
-}
-
-
-int glite_lbu_ExecPreparedStmt_v(glite_lbu_Statement stmt, int n, va_list ap) {
-       if (!VALID(stmt->ctx->backend)) return EINVAL;
-       return backends[stmt->ctx->backend]->execPreparedStmt_v(stmt, n, ap);
-}
-
-
-int glite_lbu_ExecPreparedStmt(glite_lbu_Statement stmt, int n, ...) {
-       va_list ap;
-       int retval;
-
-       va_start(ap, n);
-       retval = glite_lbu_ExecPreparedStmt_v(stmt, n, ap);
-       va_end(ap);
-
-       return retval;
-}
-
-
-long int glite_lbu_Lastid(glite_lbu_Statement stmt) {
-       if (!VALID(stmt->ctx->backend)) return EINVAL;
-       return backends[stmt->ctx->backend]->lastid(stmt);
-}
-
-
-void glite_lbu_TimeToDB(glite_lbu_DBContext ctx, time_t t, char **str) {
-       if (!VALID(ctx->backend)) return;
-       return backends[ctx->backend]->timeToDB(t, str);
-}
-
-
-void glite_lbu_TimestampToDB(glite_lbu_DBContext ctx, double t, char **str) {
-       if (!VALID(ctx->backend)) return;
-       return backends[ctx->backend]->timestampToDB(t, str);
-}
-
-
-time_t glite_lbu_DBToTime(glite_lbu_DBContext ctx, const char *str) {
-       if (!VALID(ctx->backend)) return (time_t)-1;
-       return backends[ctx->backend]->DBToTime(str);
-}
-
-
-double glite_lbu_DBToTimestamp(glite_lbu_DBContext ctx, const char *str) {
-       if (!VALID(ctx->backend)) return -1;
-       return backends[ctx->backend]->DBToTimestamp(str);
-}
-
-
-#define STATUS(CTX) ((CTX)->err.code)
-#define CLR_ERR(CTX) glite_lbu_DBClearError((CTX))
-int glite_lbu_bufferedInsertInit(glite_lbu_DBContext ctx, glite_lbu_bufInsert *bi, const char *table_name, long size_limit, long record_limit, const char *columns)
-{
-       *bi = calloc(1, sizeof(*bi));
-       (*bi)->ctx = ctx;
-       (*bi)->table_name = strdup(table_name);
-       (*bi)->columns = strdup(columns);
-       (*bi)->rec_num = 0;
-       (*bi)->rec_size = 0;
-       (*bi)->rows = calloc(record_limit, sizeof(*((*bi)->rows)) );
-       (*bi)->size_limit = size_limit;
-       (*bi)->record_limit = record_limit;
-
-        return CLR_ERR(ctx);
-}
-
-
-static int flush_bufferd_insert(glite_lbu_bufInsert bi)
-{
-       char *stmt, *vals, *temp;
-       long i;
-
-
-       if (!bi->rec_num)
-               return STATUS(bi->ctx);
-
-       asprintf(&vals,"(%s)", bi->rows[0]);
-       for (i=1; i < bi->rec_num; i++) {
-               // XXX:  use string add (preallocated memory)
-               asprintf(&temp,"%s,(%s)", vals, bi->rows[i]);
-               free(vals); vals = temp; temp = NULL;
-               free(bi->rows[i]);
-               bi->rows[i] = NULL;
-       }
-       
-       trio_asprintf(&stmt, "insert into %|Ss(%|Ss) values %s;",
-               bi->table_name, bi->columns, vals);
-
-       if (glite_lbu_ExecSQL(bi->ctx,stmt,NULL) < 0) {
-                if (STATUS(bi->ctx) == EEXIST)
-                        CLR_ERR(bi->ctx);
-        }
-
-       /* reset bi counters */
-       bi->rec_size = 0;
-       bi->rec_num = 0;
-       
-       free(vals);
-       free(stmt);
-
-       return STATUS(bi->ctx);
-}
-
-
-int glite_lbu_bufferedInsert(glite_lbu_bufInsert bi, const char *row)
-{
-       bi->rows[bi->rec_num++] = strdup(row);
-       bi->rec_size += strlen(row);
-
-       if ((bi->size_limit && bi->rec_size >= bi->size_limit) ||
-               (bi->record_limit && bi->rec_num >= bi->record_limit))
-       {
-               if (flush_bufferd_insert(bi))
-                       return STATUS(bi->ctx);
-       }
-
-       return CLR_ERR(bi->ctx);
-}
-
-
-static void free_buffered_insert(glite_lbu_bufInsert bi) {
-       long i;
-
-       free(bi->table_name);
-       free(bi->columns);
-       for (i=0; i < bi->rec_num; i++) {
-               free(bi->rows[i]);
-       }
-       free(bi->rows);
-}
-
-
-int glite_lbu_bufferedInsertClose(glite_lbu_bufInsert bi)
-{
-       if (flush_bufferd_insert(bi))
-               return STATUS(bi->ctx);
-       free_buffered_insert(bi);
-
-       return CLR_ERR(bi->ctx);
-}
diff --git a/org.glite.lbjp-common.jp-interface/Makefile b/org.glite.lbjp-common.jp-interface/Makefile
deleted file mode 100644 (file)
index 9bcaf55..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-# defaults
-top_srcdir=..
-builddir=build
-top_builddir=${top_srcdir}/${builddir}
-stagedir=.
-globalprefix=glite
-jpprefix=jp
-package=glite-lbjp-common-jp-interface
-version=0.0.0
-PREFIX=/opt/glite
-
-globus_prefix=/opt/globus
-nothrflavour=gcc32
-thrflavour=gcc32pthr
-expat_prefix=/opt/expat
-gsoap_prefix=/software/gsoap-2.6
-
-CC=gcc
-
--include Makefile.inc
-
-
-VPATH=${top_srcdir}/src:${top_srcdir}/test:${top_srcdir}/project:${jpproject}
-
-DEBUG:=-g -O0 -W -Wno-sign-compare
-CFLAGS:=${DEBUG} -D_GNU_SOURCE -I. -I${top_srcdir}/interface -I${stagedir}/include
-
-offset=0
-version_info:=-version-info ${shell \
-       perl -e '$$,=":"; @F=split "\\.","${version}"; print $$F[0]+$$F[1]+${offset},$$F[2],$$F[1]' }
-
-
-LINK:=libtool --mode=link ${CC} ${LDFLAGS} -rpath ${stagedir}/lib ${version_info}
-LINKXX:=libtool --mode=link ${CXX} ${LDFLAGS} 
-INSTALL:=libtool --mode=install install
-COMPILE:=libtool --mode=compile ${CC} ${CFLAGS}
-
-HDRS:=types.h context.h attr.h known_attr.h backend.h builtin_plugins.h file_plugin.h indexdb.h type_plugin.h
-
-SRCS:=context.c attr.c utils.c indexdb.c
-OBJS:=${SRCS:.c=.lo}
-THROBJS:=${OBJS:.o=.thr.lo}
-LIBS:=-L${stagedir}/lib -lglite_jobid -lglite_lbu_db
-THRLIBS:=${LIBS}
-
-commonlib:= libglite_jp_common_${nothrflavour}.la
-commonlib_thr:= libglite_jp_common_${thrflavour}.la
-
-TEST_LIBS:=-L${cppunit_prefix}/lib -lcppunit -ldl
-TEST_INC:=-I${cppunit_prefix}/include
-
-
-default all: compile
-
-compile: ${commonlib} ${commonlib_thr}
-
-${commonlib}: ${OBJS}
-       ${LINK} -o $@ ${OBJS} ${LIBS}
-
-${commonlib_thr}: ${THROBJS}
-       ${LINK} -o $@ ${THROBJS} ${THRLIBS}
-
-check: type_test
-       ./type_test type_test.xml
-
-type_test: %: %.cpp compile
-       ${CXX} -c ${CFLAGS} ${TEST_INC} $<
-       ${LINKXX} -o $@ $@.o ${commonlib} ${TEST_LIBS} 
-
-doc:
-
-stage: compile
-       $(MAKE) install PREFIX=${stagedir}
-
-install:
-       -mkdir -p ${PREFIX}/include/${globalprefix}/${jpprefix}
-       cd ${top_srcdir}/interface && install -m 644 ${HDRS} ${PREFIX}/include/${globalprefix}/${jpprefix}
-       -mkdir -p ${PREFIX}/lib
-       ${INSTALL} -m 755 ${commonlib} ${commonlib_thr} ${PREFIX}/lib
-
-clean:
-       rm -rvf *.o *.lo .libs lib*
-       rm -rvf log.xml project/ rpmbuild/ RPMS/ tgz/
-       rm -f glite jp
-
-%.thr.lo: %.c
-       ${COMPILE} -o $@ -c $<
-
-%.lo: %.c
-       ${COMPILE} -o $@ -c $< 
diff --git a/org.glite.lbjp-common.jp-interface/build.xml b/org.glite.lbjp-common.jp-interface/build.xml
deleted file mode 100755 (executable)
index 32dd0b9..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-       Copyright (c) Members of the EGEE Collaboration. 2004 
-       See http://eu-egee.org/partners/ for details on the copyright holders
-       For license conditions see the license file or http://eu-egee.org/license.html
-
-       Build file for the GLite JP Common module
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.3  2005/05/26 15:13:25  zurek
-       inserted module.build.file
-
-       Revision 1.2  2004/11/22 13:36:42  dimeglio
-       First version of this file
-       
-       Revision 1.1.1.1  2004/10/15 09:49:02  akrenek
--->
-
-<project name="common" default="dist">
-       
-       <!-- =========================================
-                Builds the GLite JP Primary Module
-            ========================================= -->
-       
-       <!-- =========================================
-            Import properties (order is important)
-            ========================================= -->
-
-       <!-- import baseline & user properties -->
-       <import file="../org.glite/project/baseline.properties.xml" />
-
-       <!-- import component build properties,
-                       component properties &
-                       component common properties -->
-       <import file="./project/properties.xml"/>
-       
-       <!-- import subsystem build properties,
-                       subsystem properties &
-                       subsystem common properties -->
-       <import file="${subsystem.properties.file}"/>
-
-       <!-- import global build properties &
-                       global properties -->
-       <import file="${global.properties.file}" />
-               
-       <!-- =========================================
-                Load dependency property files (order is important)
-            ========================================= -->
-       <property file="${user.dependencies.file}"/>
-       <property file="${component.dependencies.file}" />
-       <property file="${subsystem.dependencies.file}" />
-       <property file="${global.dependencies.file}"/>
-       
-       <!-- =========================================
-                 Load configure options (order is important)
-             ========================================= -->
-        <import file="${global.configure.options.file}"/>
-        <import file="${component.configure.options.file}"/>
-       
-       <!-- =========================================
-                Import task definitions (order is important)
-            ========================================= -->
-       <import file="${subsystem.taskdefs.file}" />
-       <import file="${global.taskdefs.file}" />
-                       
-       <!-- =========================================
-                Load common targets
-            ========================================= -->
-       <import file="${global.targets-simple_make.file}" />
-
-       <!-- =========================================
-                Load version file 
-            ========================================= -->
-       <property file="${module.version.file}"/>
-       <property file="${module.build.file}"/>
-               
-       <!-- ==============================================
-                Local private targets
-            ============================================== -->
-       
-       <target name="localinit"
-               description="Module specific initialization tasks">
-
-               <antcall target="lbmakefiles" />
-       </target>
-               
-       <target name="localcompile"
-               description="Module specific compile tasks">
-       </target>
-       
-       <target name="localclean"
-               description="Module specific cleaning tasks">
-       </target>
-       
-</project>             
diff --git a/org.glite.lbjp-common.jp-interface/configure b/org.glite.lbjp-common.jp-interface/configure
deleted file mode 100755 (executable)
index b3a5b00..0000000
+++ /dev/null
@@ -1,698 +0,0 @@
-#!/usr/bin/perl
-
-# WARNING: Don't edit this file unless it is the master copy in org.glite.lb
-#
-# For the purpose of standalone builds of lb/jobid/lbjp-common components
-# it is copied on tagging 
-
-# $Header$
-
-use Getopt::Long;
-
-my $pwd = `pwd`; chomp $pwd;
-my $prefix = $pwd.'/stage';
-my $stagedir;
-my $staged;
-my $module;
-my $thrflavour = 'gcc64dbgpthr';
-my $nothrflavour = 'gcc64dbg';
-my $mode = 'build';
-my $help = 0;
-my $listmodules;
-my $version;
-my $output;
-my $lb_tag = '';
-my $lbjp_tag = '';
-my $jp_tag = '';
-my $sec_tag = '';
-my $jobid_tag = '';
-my $libdir = 'lib';
-
-my @nodes = qw/client server logger utils doc ws-test db jpprimary jpindex jpclient/;
-my %enable_nodes;
-my %disable_nodes;
-
-my %extern_prefix = (
-       cares => '/opt/c-ares',
-       classads => '/opt/classads',
-       cppunit => '/usr',
-       expat => '/usr',
-       globus => '/opt/globus',
-       jglobus => '/opt/globus',
-       gsoap => '/usr',
-       mysql => '/usr',
-       'mysql-devel' => '',
-       'mysql-server' => '',
-       voms => '/opt/glite',
-       gridsite => '/opt/glite',
-       lcas => '/opt/glite',
-       ant => '/usr',
-       jdk => '/usr',
-       libtar => '/usr',
-);
-
-my %jar = (
-       'commons-codec' => '/usr/share/java/commons-codec-1.3.jar',
-);
-
-
-my %glite_prefix;
-my %need_externs;
-my %need_externs_type;
-my %need_jars;
-my %extrafull;
-my %extranodmod;
-my %deps;
-my %deps_type;
-my %topbuild;
-
-my %lbmodules = (
-       'lb' => [ qw/client common doc logger server state-machine types utils ws-interface ws-test/], 
-       'security' => [qw/gss gsoap-plugin/],
-       'lbjp-common' => [qw/db maildir server-bones trio jp-interface/],
-       'jobid' => [qw/api-c api-cpp/],
-       'jp' => [ qw/client doc index primary server-common ws-interface/ ],
-       );
-
-
-my @opts = (
-       'prefix=s' => \$prefix,
-       'staged=s' => \$staged,
-       'module=s' => \$module,
-       'thrflavour=s' => \$thrflavour,
-       'nothrflavour=s' => \$nothrflavour,
-       'mode=s' => \$mode,
-       'listmodules=s' => \$listmodules,
-       'version=s' => \$version,
-       'output=s' => \$output,
-       'stage=s' => \$stagedir,
-       'lb-tag=s' => \$lb_tag,
-       'lbjp-common-tag=s' => \$lbjp_tag,
-       'jp-tag=s' => \$jp_tag,
-       'security-tag=s' => \$sec_tag,
-       'jobid-tag=s' => \$jobid_tag,
-       'help' => \$help,
-       'libdir=s' => \$libdir,
-);
-
-for (@nodes) {
-       $enable_nodes{$_} = 0;
-       $disable_nodes{$_} = 0;
-       
-       push @opts,"disable-$_",\$disable_nodes{$_};
-       push @opts,"enable-$_",\$enable_nodes{$_};
-}
-
-push @opts,"with-$_=s",\$extern_prefix{$_} for keys %extern_prefix;
-push @opts,"with-$_=s",\$jar{$_} for keys %jar;
-
-my @keeparg = @ARGV;
-
-GetOptions @opts or die "Errors parsing command line\n";
-
-$extern_prefix{'mysql-devel'}=$extern_prefix{mysql} if $extern_prefix{'mysql-devel'} eq '';
-$extern_prefix{'mysql-server'}=$extern_prefix{mysql} if $extern_prefix{'mysql-server'} eq '';
-
-if ($help) { usage(); exit 0; }
-
-if ($listmodules) {
-       my @m = map "org.glite.$listmodules.$_",@{$lbmodules{$listmodules}};
-       print "@m\n";
-       exit 0;
-}
-
-warn "$0: --version and --output make sense only in --mode=etics\n"
-       if ($version || $output) && $mode ne 'etics';
-
-my $en;
-for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; }
-
-my $dis;
-for (keys %disable_nodes) { $dis = 1 if $disable_nodes{$_}; }
-
-die "--enable-* and --disable-* are mutually exclusive\n"
-       if $en && $dis;
-
-die "--module cannot be used with --enable-* or --disable-*\n"
-       if $module && ($en || $dis);
-
-die "$module: unknown module\n" if $module && ! grep $module,@{$lbmodules{lb}},@{$lbmodules{security}},{$lbmodules{jp}};
-
-if ($dis) {
-       for (@nodes) {
-               $enable_nodes{$_} = 1 unless $disable_nodes{$_};
-       }
-}
-
-if (!$en && !$dis) { $enable_nodes{$_} = 1 for (@nodes) } ;
-
-for (keys %enable_nodes) { delete $enable_nodes{$_} unless $enable_nodes{$_}; }
-
-$stagedir = $prefix unless $stagedir;
-
-if ($mode eq 'build') {
-       print "Writing config.status\n";
-       open CONF,">config.status" or die "config.status: $!\n";
-       print CONF "$0 @keeparg\n";
-       close CONF;
-}
-
-
-my @modules;
-my %aux;
-
-if ($module) {
-#      push @modules,split(/[,.]+/,$module);
-       push @modules,$module;
-}
-else {
-       @modules = map(($extranodmod{$_} ? $extranodmod{$_} : 'lb.'.$_),(keys %enable_nodes));
-       
-       my $n;
-
-       do {
-               local $"="\n";
-               $n = $#modules;
-               push @modules,(map @{$deps{$_}},@modules);
-
-               undef %aux; @aux{@modules} = (1) x ($#modules+1);
-               @modules = keys %aux;
-       } while ($#modules > $n);
-}
-
-@aux{@modules} = (1) x ($#modules+1);
-delete $aux{$_} for (split /,/,$staged);
-@modules = keys %aux;
-
-mode_build() if $mode eq 'build';
-mode_checkout() if $mode eq 'checkout';
-mode_etics($module) if $mode eq 'etics';
-
-sub mode_build {
-       print "\nBuilding modules: @modules\n";
-       
-       my @ext = map @{$need_externs{$_}},@modules;
-       my @myjars = map @{$need_jars{$_}},@modules;
-       undef %aux; @aux{@ext} = 1;
-       @ext = keys %aux;
-       undef %aux; @aux{@myjars} = (1) x ($#myjars+1);
-       @myjars = keys %aux;
-       
-       print "\nRequired externals:\n";
-       print "\t$_: $extern_prefix{$_}\n" for @ext;
-       print "\t$_: $jar{$_}\n" for @myjars;
-       print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n";
-       
-       mkinc($_) for @modules;
-       
-       print "Creating Makefile\n";
-       
-       open MAK,">Makefile" or die "Makefile: $!\n";
-       
-       print MAK "all: @modules\n\nclean:\n";
-       
-       for (@modules) {
-               my $full = full($_);
-               my $build = $topbuild{$_} ? '': '/build';
-               print MAK "\tcd $full$build && \${MAKE} clean\n"
-       }
-       
-       print MAK "\ndistclean:\n";
-       
-       for (@modules) {
-               my $full = full($_);
-               print MAK $topbuild{$_} ?
-                       "\tcd $full$build && \${MAKE} distclean\n" :
-                       "\trm -rf $full$build\n"
-       }
-       
-       print MAK "\n";
-       
-       for (@modules) {
-               my %ldeps; undef %ldeps;  
-               @ldeps{@{$deps{$_}}} = 1;
-               for my $x (split /,/,$staged) { delete $ldeps{$x}; }
-               my @dnames = $module ? () : keys %ldeps;
-       
-               my $full = full($_);
-               my $build = $topbuild{$_} ? '': '/build';
-       
-               print MAK "$_: @dnames\n\tcd $full$build && \${MAKE} && \${MAKE} install\n\n";
-       }
-       
-       close MAK;
-}
-       
-sub mode_checkout() {
-       for (@modules) {
-               my $module = $_;
-               my $tag = "";
-               if ($lb_tag){
-                       for (@{$lbmodules{lb}}){
-                               if ("lb.".$_ eq $module){
-                                       $tag = '-r '.$lb_tag;
-                               }
-                       }       
-               }
-               if ($lbjp_tag){
-                       for (@{$lbmodules{'lbjp-common'}}){
-                               if ("lbjp-common.".$_ eq $module){
-                                        $tag = '-r '.$lbjp_tag;
-                                }
-                       }
-               }
-               if ($jp_tag){
-                       for (@{$lbmodules{'jp'}}){
-                               if ("jp.".$_ eq $module){
-                                        $tag = '-r '.$jp_tag;
-                               }
-                        }
-               }
-               if ($sec_tag){
-                       for (@{$lbmodules{security}}){
-                               if ("security.".$_ eq $module){
-                                        $tag = '-r '.$sec_tag;
-                                }
-                       }
-               }
-               if ($jobid_tag){
-                       for (@{$lbmodules{jobid}}){
-                               if ("jobid.".$_ eq $module){
-                                        $tag = '-r '.$jobid_tag;
-                                }
-                       }
-               }
-               #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
-               #       print "found";
-               #}
-               $_ = full($_);
-               print "\n*** Checking out $_\n";
-               system("cvs checkout  $tag $_") == 0 or die "cvs checkout $tag $_: $?\n";
-       }
-}
-
-BEGIN{
-%need_externs_aux = (
-       'lb.client' => [ qw/cppunit:B classads/ ],
-       'lb.client-java' => [ qw/ant:B jglobus jdk:B/ ],
-       'lb.common' => [ qw/expat cppunit:B classads/ ],
-       'lb.doc' => [],
-       'lb.logger' => [ qw/cppunit:B/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite/ ],
-       'lb.state-machine' => [ qw/classads/ ],
-       'lb.utils' => [ qw/cppunit:B/ ],
-       'lb.ws-interface' => [],
-       'lb.ws-test' => [ qw/gsoap:B/ ],
-       'lb.types' => [ qw// ],
-       'lbjp-common.db' => [ qw/mysql:R mysql-devel:B/ ],
-       'lbjp-common.maildir' => [ qw// ],
-       'lbjp-common.server-bones' => [ qw// ],
-       'lbjp-common.trio' => [ qw/cppunit:B/ ],
-       'lbjp-common.jp-interface' => [ qw/cppunit:B/ ],
-       'security.gss' =>  [ qw/globus_essentials:R globus:B cares cppunit:B/ ],
-       'security.gsoap-plugin' =>  [ qw/cppunit:B globus_essentials:R globus:B cares gsoap:B/ ],
-       'jobid.api-c' =>  [ qw/cppunit:B/ ],
-       'jobid.api-cpp' =>  [ qw/cppunit:B/ ],
-       'jobid.api-java' =>  [ qw/ant:B jdk:B/ ],
-       'jp.client' => [ qw/gsoap libtar globus_essentials:R globus:B/ ],
-        'jp.doc' => [],
-        'jp.index' => [ qw/gsoap globus_essentials:R globus:B/ ],
-        'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
-        'jp.server-common' => [],
-        'jp.ws-interface' => [],
-);
-
-for my $ext (keys %need_externs_aux) {
-       for (@{$need_externs_aux{$ext}}) {
-               /([^:]*)(?::(.*))?/;
-               push @{$need_externs{$ext}},$1;
-               my $type = $2 ? $2 : 'BR';
-               $need_externs_type{$ext}->{$1} = $type;
-       }
-}
-
-%need_jars = (
-       'jobid.api-java' => [ qw/commons-codec/ ],
-);
-
-for my $jar (keys %need_jars) {
-       for (@{$need_jars{$jar}}) {
-               $need_externs_type{$jar}->{$_} = 'BR';  # XXX
-       }
-}
-
-%deps_aux = (
-       'lb.client' => [ qw/
-               lb.types:B lb.common
-               lbjp-common.trio
-               jobid.api-cpp jobid.api-c
-               security.gss
-       / ],
-       'lb.client-java' => [ qw/
-               lb.types:B
-               jobid.api-java
-       / ],
-       'lb.common' => [ qw/
-               jobid.api-cpp jobid.api-c
-               lb.types:B lbjp-common.trio security.gss
-       / ],
-       'lb.doc' => [ qw/lb.types:B/ ],
-       'lb.logger' => [ qw/
-               lbjp-common.trio
-               jobid.api-c
-               lb.common
-               security.gss
-       / ],
-       'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
-               lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir
-               jobid.api-c
-               security.gsoap-plugin security.gss
-       / ],
-       'lb.state-machine' => [ qw/lb.types:B lb.common lbjp-common.jp-interface security.gss/ ],
-       'lb.utils' => [ qw/
-               lbjp-common.jp-interface
-               jobid.api-c
-               lbjp-common.trio lbjp-common.maildir
-               lb.client lb.state-machine
-       / ],
-       'lb.ws-test' => [ qw/security.gsoap-plugin lb.ws-interface/ ],
-       'lb.ws-interface' => [ qw/lb.types:B/ ],
-       'lb.types' => [ qw// ],
-       'lbjp-common.db' => [ qw/lbjp-common.trio/ ],
-       'lbjp-common.maildir' => [ qw// ],
-       'lbjp-common.server-bones' => [ qw// ],
-       'lbjp-common.trio' => [ qw// ],
-       'security.gss' =>  [ qw// ],
-       'security.gsoap-plugin' =>  [ qw/security.gss/ ],
-       'jobid.api-c' =>  [ qw// ],
-       'jobid.api-cpp' =>  [ qw/jobid.api-c/ ],
-       'jobid.api-java' =>  [ qw// ],
-
-       'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ],
-
-       'jp.client' => [ qw/
-                jp.ws-interface
-                lbjp-common.jp-interface lbjp-common.maildir
-                jobid.api-c
-                security.gsoap-plugin
-        / ],
-       'jp.doc' => [ qw// ],
-       'jp.index' => [ qw/
-                jp.server-common jp.ws-interface
-                lbjp-common.jp-interface lbjp-common.trio lbjp-common.db lbjp-common.server-bones
-                security.gsoap-plugin
-        / ],
-       'jp.primary' => [ qw/
-                jobid.api-c
-                jp.server-common jp.ws-interface
-                lb.state-machine
-                lbjp-common.jp-interface lbjp-common.trio lbjp-common.db lbjp-common.server-bones
-                security.gsoap-plugin
-        / ],
-       'jp.server-common' => [ qw/ 
-                lbjp-common.jp-interface lbjp-common.db
-        / ],
-       'jp.ws-interface' => [ qw// ],
-);
-
-for my $ext (keys %deps_aux) {
-       for (@{$deps_aux{$ext}}) {
-               /([^:]*)(?::(.*))?/;
-               push @{$deps{$ext}},$1;
-               my $type = $2 ? $2 : 'BR';
-               $deps_type{$ext}->{$1} = $type;
-       }
-}
-
-
-%extrafull = ( gridsite=>'org.gridsite.core');
-
-#( java => 'client-java' );
-%extranodmod = (
-       db => 'lbjp-common.db',
-       jpprimary => 'jp.primary',
-       jpindex => 'jp.index',
-       jpclient => 'jp.client',
-);
-
-my @t = qw/lb.client-java jobid.api-java lb.types/;
-@topbuild{@t} = (1) x ($#t+1);
-}
-
-sub full
-{
-       my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
-}
-
-sub mkinc
-{
-       my %aux;
-       undef %aux;
-       my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java
-security.gss security.gsoap-plugin
-jobid.api-c jobid.api-cpp jobid.api-java
-lbjp-common.db lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface
-jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-/;
-       @aux{@m} = (1) x ($#m+1);
-
-       my $short = shift;
-       my $full = full $short;
-
-       unless ($aux{$short}) {
-               print "Makefile.inc not needed in $full\n";
-               return;
-       }
-
-       my $build = '';
-       
-       unless ($topbuild{$_}) {
-               $build = '/build';
-               unless (-d "$full/build") {
-                       mkdir "$full/build" or die "mkdir $full/build: $!\n";
-               }
-               unlink "$full/build/Makefile";
-               symlink "../Makefile","$full/build/Makefile" or die "symlink ../Makefile $full/build/Makefile: $!\n";
-       }
-
-       open MKINC,">$full$build/Makefile.inc"
-               or die "$full$build/Makefile.inc: $!\n";
-
-       print "Creating $full$build/Makefile.inc\n";
-
-       print MKINC qq{
-PREFIX = $prefix
-stagedir = $stagedir
-thrflavour = $thrflavour
-nothrflavour = $nothrflavour
-libdir = $libdir
-};
-
-       for (@{$need_externs{$short}}) {
-               print MKINC "${_}_prefix = $extern_prefix{$_}\n"
-       }
-
-       for (@{$need_jars{$short}}) {
-               print MKINC "${_}_jar = $jar{$_}\n"
-       }
-
-       my $need_gsoap = 0;
-       for (@{$need_externs{$short}})  { $need_gsoap = 1 if $_ eq 'gsoap'; }
-
-       print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
-
-       close MKINC;
-}
-
-my %etics_externs;
-my %etics_projects;
-BEGIN{
-       %etics_externs = (
-               globus_essentials=>'vdt_globus_essentials',
-               globus=>'globus',
-               cares=>'c-ares',
-               voms=>'org.glite.security.voms-api-cpp',
-               gridsite=>'org.gridsite.shared',
-               lcas=>'org.glite.security.lcas',
-       );
-       %etics_projects = (
-               vdt=>[qw/globus globus_essentials/],
-               'org.glite'=>[qw/voms gridsite lcas/],
-       );
-};
-
-sub mode_etics {
-       $fmod = shift;
-
-       die "$0: --module required with --etics\n" unless $fmod;
-       
-       my ($subsys,$module) = split /\./,$fmod;
-
-       my ($major,$minor,$rev,$age);
-
-       if ($version) {
-               $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/;
-               ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
-       }
-       else { 
-               open V,"org.glite.$subsys.$module/project/version.properties"
-                       or die "org.glite.$subsys.$module/project/version.properties: $!\n";
-       
-               while ($_ = <V>) {
-                       chomp;
-                       ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
-               }
-               close V;
-       }
-
-       my @copts = ();
-       my %ge;
-       @ge{@{$etics_projects{'org.glite'}}} = (1) x ($#{$etics_projects{'org.glite'}}+1);
-
-       for (@{$need_externs{"$subsys.$module"}}) {
-           if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
-           }
-       }
-
-       for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-
-               push @copts,"--with-$_ \${$eext.location}/$_*.jar";
-       }
-
-
-       my $conf = "glite-$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
-       my $file = $output ? $output : "$conf.ini";
-       open C,">$file" or die "$file: $!\n";
-
-       my $buildroot = $topbuild{"$subsys.$module"} ? '' : "build.root = build\n";
-
-       my $confdir = $topbuild{"$subsys.$module"} ? '..' : '../..';
-
-       print STDERR "Writing $file\n";
-       print C qq{
-[Configuration-$conf]
-profile = None
-moduleName = org.glite.$subsys.$module
-displayName = $conf
-description = org.glite.$subsys.$module
-projectName = org.glite
-age = $age
-deploymentType = None
-tag = $conf
-version = $major.$minor.$rev
-path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz
-
-[Platform-default:VcsCommand]
-displayName = None
-description = None
-tag = cvs -d \${vcsroot} tag -R \${tag} \${moduleName}
-branch = None
-commit = None
-checkout = cvs -d \${vcsroot} co -r \${tag} \${moduleName}
-
-[Platform-default:BuildCommand]
-postpublish = None
-packaging = None
-displayName = None
-description = None
-doc = None
-prepublish = None
-publish = None
-compile = make
-init = None
-install = make install
-clean = make clean
-test = make check
-configure = cd $confdir && \${moduleName}/configure --thrflavour=\${globus.thr.flavor} --nothrflavour=\${globus.nothr.flavor} --prefix=\${prefix} --stage=\${stageDir} --libdir=\${libdir} --module $subsys.$module @copts
-checkstyle = None
-
-[Platform-default:Property]
-$buildroot
-
-[Platform-default:DynamicDependency]
-
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
-                       }
-               }
-
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
-               print C "$proj|$eext = $type\n";
-       }
-
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "org.glite|org.glite.$_ = $type\n";
-       }
-
-       close C;
-}
-
-sub gsoap_version {
-       local $_;
-       my $gsoap_version;
-       open S,"$extern_prefix{gsoap}/bin/soapcpp2 -v 2>&1 |" or die "$extern_prefix{gsoap}/bin/soapcpp2: $!\n";
-
-       while ($_ = <S>) {
-               chomp;
-
-               $gsoap_version = $1 if /The gSOAP Stub and Skeleton Compiler for C and C\+\+ ([.[:digit:][:alpha:]]+)$/;
-       }
-       close S;
-       return $gsoap_version;
-}
-
-
-sub usage {
-       my @ext = keys %extern_prefix;
-       my @myjars, keys %jar;
-
-       print STDERR qq{
-usage: $0 options
-
-General options (defaults in []):
-  --prefix=PREFIX              destination directory [./stage]
-  --staged=module,module,...   what is already in PREFIX (specify without org.glite.)
-  --thrflavour=flavour
-  --nothrflavour=flavour       threaded and non-treaded flavours [gcc64dbgpthr,gcc64dbg]
-  --listmodules=subsys          list modules of a subsystem
-  --libdir=libdir              typically [lib,lib64] postfix
-  
-Mode of operation:
-  --mode={checkout|build|etics}        what to do [build]
-  
-What to build:
-  --module=module              build this module only (mostly in-Etics operation)
-  --enable-NODE                        build this "node" (set of modules) only. Available nodes are
-                                       @{$lbmodules{lb}},@{$lbmodules{security}}
-  --disable-NODE               don't build this node
-  --lb-tag=tag                 checkout LB modules with specific tag
-  --jp-tag=tag                 checkout JP modules with specific tag
-  --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
-  --security-tag=tag           checkout security modules with specific tag
-  --jobid-tag=tag              checkout jobid modules with specific tag
-
-Dependencies:
-  --with-EXTERNAL=PATH         where to look for an external. Required externals
-                               (not all for all modules) are:
-                                       @ext
-  --with-JAR=JAR               where to look for jars. Required jars are:
-                                       @myjars
-                               Summary of what will be used is always printed
-
-};
-
-}
diff --git a/org.glite.lbjp-common.jp-interface/interface/attr.h b/org.glite.lbjp-common.jp-interface/interface/attr.h
deleted file mode 100644 (file)
index b8c559f..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef GLITE_JP_ATTR_H
-#define GLITE_JP_ATTR_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void glite_jp_attrval_free(glite_jp_attrval_t *,int);
-void glite_jp_attrval_copy(glite_jp_attrval_t *,const glite_jp_attrval_t *);
-
-/* Search through registered type plugins and call appropriate plugin method.
- * See type_plugin.h for detailed description.
- */
-
-int glite_jp_attrval_cmp(glite_jp_context_t ctx,const glite_jp_attrval_t *a,const glite_jp_attrval_t *b,int *result);
-
-char *glite_jp_attrval_to_db_full(glite_jp_context_t ctx,const glite_jp_attrval_t *attr);
-char *glite_jp_attrval_to_db_index(glite_jp_context_t ctx,const glite_jp_attrval_t *attr,int len);
-
-int glite_jp_attrval_from_db(glite_jp_context_t ctx,const char *str,glite_jp_attrval_t *attr);
-const char *glite_jp_attrval_db_type_full(glite_jp_context_t ctx,const char *attr);
-const char *glite_jp_attrval_db_type_index(glite_jp_context_t ctx,const char *attr,int len);
-
-time_t glite_jp_attr2time(const char *);
-char * glite_jp_time2attr(time_t);
-
-#ifdef __cplusplus
-};
-#endif
-
-
-#endif /* GLITE_JP_ATTR_H */
diff --git a/org.glite.lbjp-common.jp-interface/interface/backend.h b/org.glite.lbjp-common.jp-interface/interface/backend.h
deleted file mode 100644 (file)
index 3c8c1da..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-#ifndef GLITE_JP_BACKEND_H
-#define GLITE_JP_BACKEND_H
-
-/* do we need it?
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-*/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int glite_jppsbe_get_names(
-       glite_jp_context_t ctx,
-       const char *job,
-       const char * /* class */,
-       char    ***names_out
-);
-
-int glite_jppsbe_destination_info(
-       glite_jp_context_t ctx,
-       const char *destination,
-       char **job_out,
-       char **class_out,
-       char **name_out
-);
-
-int glite_jppsbe_get_job_url(
-       glite_jp_context_t ctx,
-       const char *job,
-       const char * /* class */,
-       const char *name,       /* optional within class */
-       char **url_out
-);
-
-int glite_jppsbe_open_file(
-       glite_jp_context_t ctx,
-       const char *job,
-       const char * /* class */,
-       const char *name,       /* optional within class */
-       int mode,
-       void **handle_out
-);
-
-int glite_jppsbe_close_file(
-       glite_jp_context_t ctx,
-       void *handle
-);
-
-int glite_jppsbe_file_attrs(
-       glite_jp_context_t ctx,
-       void *handle,
-       struct stat *buf
-);
-
-int glite_jppsbe_pread(
-       glite_jp_context_t ctx,
-       void *handle,
-       void *buf,
-       size_t nbytes,
-       off_t offset,
-       ssize_t *nbytes_ret
-);
-
-int glite_jppsbe_pwrite(
-       glite_jp_context_t ctx,
-       void *handle,
-       void *buf,
-       size_t nbytes,
-       off_t offset
-);
-
-int glite_jppsbe_append(
-       glite_jp_context_t ctx,
-       void *handle,
-       void *buf,
-       size_t nbytes
-);
-
-int glite_jppsbe_is_metadata(
-       glite_jp_context_t ctx,
-       const char *attr
-);
-
-int glite_jppsbe_get_job_metadata(
-       glite_jp_context_t ctx,
-       const char *job,
-       glite_jp_attrval_t attrs_inout[]
-);
-
-int glite_jppsbe_query(
-       glite_jp_context_t ctx,
-       const glite_jp_query_rec_t query[],
-       char *attrs[],
-       void *arg,
-       int (*callback)(
-               glite_jp_context_t ctx,
-               const char *job,
-               const glite_jp_attrval_t metadata[],
-               void *arg
-       )
-);
-
-char* glite_jpps_get_namespace(
-       const char* attr
-);
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* GLITE_JP_BACKEND_H */
-
diff --git a/org.glite.lbjp-common.jp-interface/interface/builtin_plugins.h b/org.glite.lbjp-common.jp-interface/interface/builtin_plugins.h
deleted file mode 100644 (file)
index 70d900b..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-#define GLITE_JP_FILETYPE_TAGS   "urn:org.glite.jp.primary:tags"
-#define GLITE_JP_FILETYPE_LB     "urn:org.glite.jp.primary:lb"
-#define GLITE_JP_FILETYPE_CLASSAD "urn:org.glite.jp.primary:classad"
-#define GLITE_JP_FILETYPE_ISB    "urn:org.glite.jp.primary:isb"
-#define GLITE_JP_FILETYPE_OSB    "urn:org.glite.jp.primary:osb"
-
-#define GLITE_JP_FPLUG_TAGS_APPEND     0
diff --git a/org.glite.lbjp-common.jp-interface/interface/context.h b/org.glite.lbjp-common.jp-interface/interface/context.h
deleted file mode 100644 (file)
index 4203f56..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef GLITE_JP_CONTEXT_H
-#define GLITE_JP_CONTEXT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int glite_jp_init_context(glite_jp_context_t *);
-void glite_jp_free_context(glite_jp_context_t);
-void glite_jp_free_query_rec(glite_jp_query_rec_t *);
-
-char *glite_jp_peer_name(glite_jp_context_t);
-char *glite_jp_error_chain(glite_jp_context_t);
-
-int glite_jp_stack_error(glite_jp_context_t, const glite_jp_error_t *);
-int glite_jp_clear_error(glite_jp_context_t); 
-
-int glite_jp_add_deferred(glite_jp_context_t,int (*)(glite_jp_context_t,void *),void *);
-int glite_jp_run_deferred(glite_jp_context_t);
-
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* GLITE_JP_CONTEXT_H */
diff --git a/org.glite.lbjp-common.jp-interface/interface/file_plugin.h b/org.glite.lbjp-common.jp-interface/interface/file_plugin.h
deleted file mode 100644 (file)
index eea7d05..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-#ifndef GLITE_JP_FILEPLUGIN_H
-#define GLITE_JP_FILEPLUGIN_H
-
-/** Methods of the file plugin. */
-
-typedef struct _glite_jpps_fplug_op_t {
-
-/** Open a file.
-\param[in] fpctx       Context of the plugin, returned by its init.
-\param[in] bhandle     Handle of the file via JPPS backend.
-\param[in] uri         URI (type) of the opened file.
-\param[out] handle     Handle to the opened file structure, to be passed to other plugin functions.
-*/
-       int     (*open)(void *fpctx,void *bhandle,const char *uri,void **handle);
-/** Open from a string.
-\param[in] fpctx       Context of the plugin, returned by its init.
-\param[in] str         The string to use.
-\param[in] uri         URI (type) of the string
-\param[in] ns          namespace to handle 
-\param[out] handle      Handle to the opened file structure, to be passed to other plugin functions.
-*/
-
-       int     (*open_str)(void *fpctx,const char *str,const char *uri,const char *ns,void **handle);
-
-/** Close the file. Free data associated to a handle */
-       int     (*close)(void *fpctx,void *handle);
-
-/** "Preprocess" the file -- this function is called once after the file is commited */
-       int     (*filecom)(void *fpctx,void *handle);
-
-/** Retrieve value(s) of an attribute.
-\param[in] fpctx       Plugin context.
-\param[in] handle      Handle of the opened file.
-\param[in] ns          Namespace of queried attribute.
-\param[in] attr                Queried attribute.
-\param[out] attrval    GLITE_JP_ATTR_UNDEF-terminated list of value(s) of the attribute.
-                       If there are more and there is an interpretation of their order
-                       they must be sorted, eg. current value of tag is the last one.
-\retval        0 success
-\retval ENOSYS this attribute is not defined by this type of file
-\retval ENOENT no value is present 
-*/
-       int     (*attr)(void *fpctx,void *handle, const char *attr,glite_jp_attrval_t **attrval);
-
-/** File type specific operation. 
-\param[in] fpctx       Plugin context.
-\param[in] handle      Handle of the opened file.
-\param[in] oper                Code of the operation, specific for a concrete plugin.
-*/
-       int     (*generic)(void *fpctx,void *handle,int oper,...);
-       
-} glite_jpps_fplug_op_t;
-
-/** Data describing a plugin. */
-typedef struct _glite_jpps_fplug_data_t {
-       void    *fpctx;         /**< Context passed to plugin operations. */
-       char    **uris;         /**< NULL-terminated list of file types (URIs)
-                                       handled by the plugin. */
-       char    **classes;      /**< The same as uris but filesystem-friendly
-                                       (can be used to construct file names).*/
-       char    **namespaces;   /**< Which attribute namespaces this plugin handles. */
-
-       glite_jpps_fplug_op_t ops;      /**< Plugin operations. */
-} glite_jpps_fplug_data_t;
-       
-/** Initialisation function of the plugin. 
-  Called after dlopen(), must be named "init".
-\param[in] ctx         JPPS context
-\param[out] data       filled-in plugin data
-*/
-  
-typedef int (*glite_jpps_fplug_init_t)(
-       glite_jp_context_t ctx,
-       glite_jpps_fplug_data_t *plugin_data
-);
-
-
-
-
-/* XXX: not really public interface follows */
-
-int glite_jpps_fplug_load(glite_jp_context_t ctx,int argc,char **argv);
-int glite_jpps_fplug_lookup(glite_jp_context_t ctx,const char *uri, glite_jpps_fplug_data_t ***plugin_data);
-int glite_jpps_fplug_lookup_byclass(glite_jp_context_t, const char *class,glite_jpps_fplug_data_t ***plugin_data);
-
-#endif /* GLITE_JP_FILEPLUGIN_H */
diff --git a/org.glite.lbjp-common.jp-interface/interface/indexdb.h b/org.glite.lbjp-common.jp-interface/interface/indexdb.h
deleted file mode 100644 (file)
index 7130d73..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifndef GLITE_JP_INDEXDB_H
-#define GLITE_JP_INDEXDB_H
-
-/**
- * \file indexdb.h
- * \brief Helper functions for accessing Job Provenance Index Server database.
- */
-
-#include "glite/lbu/db.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#ifdef GLITE_JP_INDEX_COMPILE
-
-/**
- * For generating table names.
- */
-#define GLITE_JP_INDEXDB_TABLE_ATTR_PREFIX "attr_"
-
-#endif
-
-
-/**
- * Returns internal id from attribute name.
- *
- * The attribute id is used in some places in the database schema. Because of the future possible changes in the schema, you should rather use other functions to get SQL commands (table names and where conditions).
- *
- * \param[in] name     attribute name
- * \return             attribute id string
- */
-char *glite_jp_indexdb_attr2id(const char *name);
-
-/**
- * Get parts of the SQL SELECT command to the given attribute:
- *
- *   SELECT column, full_value_column FROM table WHERE where;
- *
- * This is quick version requiring additional information about indexing of the attribute.
- */
-int glite_jp_indexdb_attr2select_from_index(const char *name, int indexed, char **column, char **full_value_column, char **table, char **where);
-
-/**
- * Get parts of the SQL SELECT command to the given attribute:
- *
- *   SELECT column, full_value_column FROM table WHERE where;
- *
- * This is the most portable way - it will peep to the DB for information about indexing.
- */
-int glite_jp_indexdb_attr2select_from_db(const char *name, glite_lbu_DBContext dbctx, char **column, char **full_value_column, char **table, char **where);
-
-#ifdef __cplusplus
-};
-#endif
-
-
-#endif /* GLITE_JP_INDEXDB_H */
diff --git a/org.glite.lbjp-common.jp-interface/interface/known_attr.h b/org.glite.lbjp-common.jp-interface/interface/known_attr.h
deleted file mode 100644 (file)
index 8876831..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef GLITE_JP_KNOWN_ATTR_H
-#define GLITE_JP_KNOWN_ATTR_H
-
-/** Namespace of JP system attributes */
-#define GLITE_JP_SYSTEM_NS     "http://egee.cesnet.cz/en/Schema/JP/System"
-#define GLITE_JP_WORKFLOW_NS   "http://egee.cesnet.cz/en/Schema/JP/Workflow"
-
-/** Job owner, as specified with RegisterJob JPPS operation */
-#define GLITE_JP_ATTR_OWNER    GLITE_JP_SYSTEM_NS ":owner" 
-
-/** JobId */
-#define GLITE_JP_ATTR_JOBID    GLITE_JP_SYSTEM_NS ":jobId" 
-
-/** Timestamp of job registration in JP.
- * Should be almost the same time as registration with LB. */
-#define GLITE_JP_ATTR_REGTIME  GLITE_JP_SYSTEM_NS ":regtime" 
-
-/** Workflow node relationships. */
-#define GLITE_JP_ATTR_WF_ANCESTOR GLITE_JP_WORKFLOW_NS ":ancestor"
-#define GLITE_JP_ATTR_WF_SUCCESSOR GLITE_JP_WORKFLOW_NS ":successor"
-
-/** Attributes derived from LB system data
- * \see jp_job_attrs.h */
-
-/** Namespace for LB user tags, schemaless, all values are strings */
-#define GLITE_JP_LBTAG_NS      "http://egee.cesnet.cz/en/WSDL/jp-lbtag"
-#define GLITE_JP_JDL_NS        "http://jdl"
-
-/** Namespace for Sandboxes */
-#define GLITE_JP_ISB_NS       "http://egee.cesnet.cz/en/Schema/JP/ISB"
-#define GLITE_JP_OSB_NS       "http://egee.cesnet.cz/en/Schema/JP/OSB"
-
-/** Namespace for file names listed from tar  */
-#define GLITE_JP_ATTR_ISB_FILENAME     GLITE_JP_ISB_NS ":filename"
-#define GLITE_JP_ATTR_OSB_FILENAME     GLITE_JP_OSB_NS ":filename"
-
-/** Namespace for filenames to be unpacked from sanbox tar */
-#define GLITE_JP_ISB_CONTENT_NS     GLITE_JP_ISB_NS ":content"
-#define GLITE_JP_OSB_CONTENT_NS     GLITE_JP_OSB_NS ":content"
-
-#endif /* GLITE_JP_KNOWN_ATTR_H */
diff --git a/org.glite.lbjp-common.jp-interface/interface/type_plugin.h b/org.glite.lbjp-common.jp-interface/interface/type_plugin.h
deleted file mode 100644 (file)
index d3fffd2..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#ifndef GLITE_JP_TYPEPLUGIN_H
-#define GLITE_JP_TYPEPLUGIN_H
-
-typedef struct _glite_jp_tplug_data_t {
-       
-       char    *namespace;
-       void    *pctx;
-
-/** Compare attribute values. 
-  * \param[in] a value to compare
-  * \param[in] b value to compare
-  * \param[out] result like strcmp()
-  * \param[out] err set if the values cannot be compared
-  * \retval 0 OK
-  * \retval other error
-  */
-       int (*cmp)(
-               void    *ctx,
-               const glite_jp_attrval_t *a,
-               const glite_jp_attrval_t *b,
-               int     *result);
-
-/** Convert to database string representation.
- * It is guaranteed the returned value can be converted back with
- * from_db().
- * The resulting value may not be suitable for indexing with db engine.
- *
- * \param[in] attr the attribute value to convert
- * \retval NULL can't be converted
- * \retval other the string representation.
- * */
-       char * (*to_db_full)(void *ctx,const glite_jp_attrval_t *attr);
-
-/** Convert to a database string representation suitable for indexing.
- * The function is non-decreasing (wrt. cmp() above and strcmp()), however it
- * is not guaranteed to be one-to-one.
- *
- * \param[in] attr the value to convert
- * \param[in] len maximum length of the converted value.
- * \retval NULL can't be converted
- * \retval other the string representation
- */
-       char * (*to_db_index)(void *ctx,const glite_jp_attrval_t *attr,int len);
-
-/** Convert from the database format.
- * \param[in] str the string value
- * \param[inout] attr name contains the name of the attribute to be converted
- *             the rest of attr is filled in.
- */
-       int (*from_db)(void *ctx,const char *str,glite_jp_attrval_t *attr);
-
-/** Query for database types suitable to store values returned by
- * to_db_full() and to_db_index(). 
- * Useful for db column dynamic creation etc.
- * Return pointer to internal static data, non-reentrant.
- */
-       const char * (*db_type_full)(void *ctx,const char *attr);
-       const char * (*db_type_index)(void *ctx,const char *attr,int len);
-
-} glite_jp_tplug_data_t;
-
-/** Plugin init function.
-    Must be called init, supposed to be called as many times as required
-    for different param's (e.g. xsd files).
-    Registers the plugin in ctx.
- */
-
-typedef int (*glite_jp_tplug_init_t)(
-       glite_jp_context_t      ctx,
-       const char              *param,
-       glite_jp_tplug_data_t   *plugin_data
-);
-
-#endif /* GLITE_JP_TYPEPLUGIN_H */
diff --git a/org.glite.lbjp-common.jp-interface/interface/types.h b/org.glite.lbjp-common.jp-interface/interface/types.h
deleted file mode 100644 (file)
index 8aaaaae..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-#ifndef GLITE_JP_TYPES_H
-#define GLITE_JP_TYPES_H
-
-#include <sys/time.h>
-
-typedef struct _glite_jp_error_t {
-       int     code;
-       const char      *desc;
-       const char      *source;
-       struct _glite_jp_error_t *reason;
-} glite_jp_error_t;
-
-typedef struct _glite_jp_context {
-       glite_jp_error_t *error;
-       int     (**deferred_func)(struct _glite_jp_context *,void *);
-       void    **deferred_arg;
-       void    *feeds;
-       struct soap     *other_soap;
-       char    *peer;
-       void    **plugins;
-       void    **type_plugins;
-       void    *dbhandle;
-       char    **trusted_peers;
-       char    *myURL;
-       int     noauth;
-} *glite_jp_context_t;
-
-typedef enum {
-       GLITE_JP_ATTR_ORIG_ANY,         /**< for queries: don't care about origin */
-       GLITE_JP_ATTR_ORIG_SYSTEM,      /**< JP internal, e.g. job owner */
-       GLITE_JP_ATTR_ORIG_USER,        /**< inserted by user explicitely */
-       GLITE_JP_ATTR_ORIG_FILE         /**< coming from uploaded file */
-} glite_jp_attr_orig_t;
-
-typedef struct {
-       char    *name;          /**< including namespace */
-       char    *value;
-       int     binary;         /**< value is binary */
-       size_t  size;           /**< in case of binary value */
-       glite_jp_attr_orig_t    origin; 
-       char    *origin_detail; /**< where it came from, i.e. file URI:name */
-       time_t  timestamp;
-} glite_jp_attrval_t;
-
-
-typedef enum {
-       GLITE_JP_QUERYOP_UNDEF,
-       GLITE_JP_QUERYOP_EQUAL,
-       GLITE_JP_QUERYOP_UNEQUAL,
-       GLITE_JP_QUERYOP_LESS,
-       GLITE_JP_QUERYOP_GREATER,
-       GLITE_JP_QUERYOP_WITHIN,
-       GLITE_JP_QUERYOP_EXISTS,
-       GLITE_JP_QUERYOP__LAST,
-} glite_jp_queryop_t;
-
-typedef struct {
-       char    *attr;
-       glite_jp_queryop_t op;
-       char    *value, *value2;
-       int     binary;
-       size_t  size,size2;
-       glite_jp_attr_orig_t origin;
-} glite_jp_query_rec_t;
-
-#endif /* GLITE_JP_TYPES_H */
diff --git a/org.glite.lbjp-common.jp-interface/project/ChangeLog b/org.glite.lbjp-common.jp-interface/project/ChangeLog
deleted file mode 100644 (file)
index 8537bb9..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-1.0.0-1
-- initial release (copy of original jp.common)
-
-1.0.0-2
-- added required dependence on jobid.api-c
-
-1.0.0-3
-- fixed reference to cppunit
-
-1.0.0-4
-- configure script update (globus flavors added to configure call)
-
-1.0.0-5
-- configure script update
-
-1.0.0-6
-- Module repacked.
-
diff --git a/org.glite.lbjp-common.jp-interface/project/version.properties b/org.glite.lbjp-common.jp-interface/project/version.properties
deleted file mode 100644 (file)
index 11299ee..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#: /cvs/jra1mw/org.glite.lbjp-common.jp-interface/project/version.properties,v 1.1.1.1 2009/01/21 14:43:52 zsustr Exp $
-module.version=1.0.0
-module.age=6
diff --git a/org.glite.lbjp-common.jp-interface/src/attr.c b/org.glite.lbjp-common.jp-interface/src/attr.c
deleted file mode 100644 (file)
index 1b7285c..0000000
+++ /dev/null
@@ -1,291 +0,0 @@
-#include <assert.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#include "glite/jobid/strmd5.h"
-#include "types.h"
-#include "attr.h"
-#include "type_plugin.h"
-#include "context.h"
-
-void glite_jp_attrval_free(glite_jp_attrval_t *a,int f)
-{
-       free(a->name);
-       free(a->value);
-       free(a->origin_detail);
-       memset(a,0,sizeof *a);
-       if (f) free(a);
-}
-
-void glite_jp_attrval_copy(glite_jp_attrval_t *dst,const glite_jp_attrval_t *src)
-{
-       dst->name = strdup(src->name);
-       dst->origin = src->origin;
-       dst->size = src->size;
-       dst->timestamp = src->timestamp;
-       dst->origin_detail = src->origin_detail ? 
-               strdup(src->origin_detail) : NULL;
-       if ((dst->binary = src->binary)) {
-               dst->value = malloc(src->size);
-               memcpy(dst->value,src->value,src->size);
-       }
-       else dst->value = strdup(src->value);
-}
-
-
-#define min(x,y) ((x) > (y) ? (y) : (x))
-
-static int fb_cmp(void *ctx,const glite_jp_attrval_t *a,const glite_jp_attrval_t *b,int *result)
-{
-       if (a->binary != b->binary) return EINVAL;
-       if (a->binary) {
-               *result = memcmp(a->value,b->value,min(a->size,b->size));
-               if (!*result && a->size != b->size) 
-                       *result = a->size > b->size ? 1 : -1;
-       }
-       else *result = strcmp(a->value,b->value);
-       return 0;
-}
-
-/* XXX: depends on specific definition of glite_jp_attr_orig_t */
-static char orig_char[] = "ASUF";
-
-/* XXX: don't allocate memory, don't grow more than twice */
-static int escape_colon(const char *in, char *out)
-{
-       int     i,o;
-
-       for (i=o=0; in[i]; i++) switch (in[i]) {
-               case ':': out[o++] = '\\'; out[o++] = ':'; break;
-               case '\\': out[o++] = '\\'; out[o++] = '\\'; break;
-               default: out[o++] = in[i]; break;
-       }
-       out[o] = 0;
-       return o;
-}
-
-/* XXX: read until unescaped colon is found 
- *      allocates output */
-static char * unescape_colon(const char *in,int *rd)
-{
-       int     i,o;
-       char    *out;
-
-       for (i=o=0; in[i] && in[i] != ':'; i++,o++)
-               if (in[i] == '\\') i++;
-
-       out = malloc(o+1);
-
-       for (i=o=0; in[i] && in[i] != ':'; i++)
-               if (in[i] == '\\') out[o++] = in[++i]; 
-               else out[o++] = in[i];
-
-       out[o] = 0;
-       *rd = i;
-       return out;
-}
-
-static char * fb_to_db_full(void *ctx,const glite_jp_attrval_t *attr)
-{
-       
-       int     vsize = attr->binary ? attr->size * 4/3 + 6 : strlen(attr->value)+1,
-               len;
-
-       /* 4x: + \0 + ASUF + BS + %12d */
-       char    *db = malloc(19 + (attr->origin_detail ? 2*strlen(attr->origin_detail) : 0) + vsize);
-
-       if (attr->origin < 0 || attr->origin > GLITE_JP_ATTR_ORIG_FILE) {
-               free(db); return NULL; 
-       }
-       len = sprintf(db,"%c:%d:%c:",attr->binary ? 'B' : 'S',
-               attr->timestamp,orig_char[attr->origin]);
-
-       if (attr->origin_detail) len += escape_colon(attr->origin_detail,db+len);
-       db[len++] = ':';
-
-       if (attr->binary) {
-               vsize = base64_encode(attr->value,attr->size,db+len,vsize-1);
-               if (vsize < 0) { free(db); return NULL; }
-               db[len+vsize] = 0;
-       }
-       else strcpy(db+len,attr->value);
-
-       return db;
-}
-
-static char * fb_to_db_index(void *ctx,const glite_jp_attrval_t *attr,int len)
-{
-       char    *s;
-
-/* XXX: binary values not really handled. Though the formal semantics is not broken */
-       if (attr->binary) return strdup("XXX"); 
-
-       s = strdup(attr->value);
-       if (len < strlen(s)) s[len] = 0;
-       return s;
-}
-
-static int fb_from_db(void *ctx,const char *str,glite_jp_attrval_t *attr)
-{
-       int     p = 2;
-       char    *colon,*cp;
-
-       if (str[0] != 'B' && str[0] != 'S') return EINVAL;
-       attr->binary = str[0] == 'B';
-       cp = attr->value = strdup(str);
-       
-       colon = strchr(cp+p,':');
-       if (!colon) return EINVAL;
-
-       *colon++ = 0;
-       attr->timestamp = (time_t) atol(cp+p);
-       p = colon-cp;
-
-       for (attr->origin = GLITE_JP_ATTR_ORIG_ANY; orig_char[attr->origin] && orig_char[attr->origin] != cp[p]; attr->origin++);
-       if (!orig_char[attr->origin]) return EINVAL;
-
-       p += 2;
-       if (cp[p] == ':') attr->origin_detail = NULL;
-       else {
-               int     r;
-               attr->origin_detail = unescape_colon(cp+p,&r);
-               p += r;
-       }
-       if (cp[p++] != ':') return EINVAL;
-
-       if (attr->binary) {
-               attr->size = base64_decode(str+p,attr->value,strlen(str));
-               if (attr->size < 0) return EINVAL;
-       }
-       else strcpy(attr->value,str+p);
-
-       return 0;
-}
-
-static const char * fb_type_full(void *ctx,const char *attr)
-{
-       return "mediumblob";
-}
-
-static const char * fb_type_index(void *ctx,const char *attr,int len)
-{
-       static char tbuf[100];
-       sprintf(tbuf,"varchar(%d)",len);
-       return tbuf;
-}
-
-
-
-static glite_jp_tplug_data_t fallback_plugin = {
-       "",
-       NULL,
-       fb_cmp,
-       fb_to_db_full,
-       fb_to_db_index,
-       fb_from_db,
-       fb_type_full,
-       fb_type_index,
-};
-
-static glite_jp_tplug_data_t *get_plugin(glite_jp_context_t ctx,const char *aname)
-{
-       void    **cp = ctx->type_plugins;
-       char    *colon,*ns;
-
-       if (!cp) return &fallback_plugin;
-       glite_jp_clear_error(ctx);
-       ns = strdup(aname);
-       colon = strrchr(ns,':');
-       if (colon) *colon = 0; else *ns = 0;
-
-       while (*cp) {
-               glite_jp_tplug_data_t   *p = *cp;
-               if (!strcmp(ns,p->namespace)) {
-                       free(ns);
-                       return p;
-               }
-               cp++;
-       }
-       free(ns);
-       return &fallback_plugin;        /* XXX: is it always desirable? */
-}
-
-int glite_jp_attrval_cmp(glite_jp_context_t ctx,const glite_jp_attrval_t *a,const glite_jp_attrval_t *b,int *result)
-{
-       glite_jp_tplug_data_t   *ap = get_plugin(ctx,a->name);
-       glite_jp_error_t        err;
-
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-       glite_jp_clear_error(ctx);
-
-       if (strcmp(a->name,b->name)) {
-               err.code = EINVAL;
-               err.desc = "Can't compare different attributes";
-               return glite_jp_stack_error(ctx,&err);
-       }
-
-       return ap->cmp ? ap->cmp(ap->pctx,a,b,result) : fb_cmp(ap->pctx,a,b,result);
-}
-
-char *glite_jp_attrval_to_db_full(glite_jp_context_t ctx,const glite_jp_attrval_t *attr)
-{
-       glite_jp_tplug_data_t   *ap = get_plugin(ctx,attr->name);
-
-       glite_jp_clear_error(ctx);
-       return ap->to_db_full ? ap->to_db_full(ap->pctx,attr) : fb_to_db_full(ap->pctx,attr);
-}
-
-char *glite_jp_attrval_to_db_index(glite_jp_context_t ctx,const glite_jp_attrval_t *attr,int len)
-{
-       glite_jp_tplug_data_t   *ap = get_plugin(ctx,attr->name);
-
-       glite_jp_clear_error(ctx);
-       return ap->to_db_index ? ap->to_db_index(ap->pctx,attr,len) : fb_to_db_index(ap->pctx,attr,len);
-}
-
-
-int glite_jp_attrval_from_db(glite_jp_context_t ctx,const char *str,glite_jp_attrval_t *attr)
-{
-       glite_jp_tplug_data_t   *ap = get_plugin(ctx,attr->name);
-
-       glite_jp_clear_error(ctx);
-       return ap->from_db ? ap->from_db(ap->pctx,str,attr) : fb_from_db(ap->pctx,str,attr);
-}
-
-const char *glite_jp_attrval_db_type_full(glite_jp_context_t ctx,const char *attr)
-{
-       glite_jp_tplug_data_t   *ap = get_plugin(ctx,attr);
-
-       glite_jp_clear_error(ctx);
-       return ap->db_type_full ? ap->db_type_full(ap->pctx,attr) : fb_type_full(ap->pctx,attr);
-}
-
-const char *glite_jp_attrval_db_type_index(glite_jp_context_t ctx,const char *attr,int len)
-{
-       glite_jp_tplug_data_t   *ap = get_plugin(ctx,attr);
-
-       glite_jp_clear_error(ctx);
-       return ap->db_type_index ?  ap->db_type_index(ap->pctx,attr,len) : fb_type_index(ap->pctx,attr,len);
-}
-
-/* XXX: UNIX time, should be ISO blahblah */
-time_t glite_jp_attr2time(const char *a)
-{
-       long    t;
-
-       sscanf(a,"%ld",&t);
-       return t;
-}
-
-/* XXX: UNIX time, should be ISO blahblah */
-char * glite_jp_time2attr(time_t t)
-{
-       char    *r;
-
-       asprintf(&r,"%ld",(long) t);
-       return r;
-}
-
diff --git a/org.glite.lbjp-common.jp-interface/src/context.c b/org.glite.lbjp-common.jp-interface/src/context.c
deleted file mode 100644 (file)
index 62bd3c7..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "types.h"
-#include "context.h"
-
-int glite_jp_init_context(glite_jp_context_t *ctx)
-{
-       return (*ctx = calloc(1,sizeof **ctx)) != NULL;
-}
-
-void glite_jp_free_context(glite_jp_context_t ctx)
-{
-       glite_jp_clear_error(ctx);
-       free(ctx);
-}
-
-char *glite_jp_peer_name(glite_jp_context_t ctx)
-{
-       return strdup(ctx->peer ? ctx->peer : "unknown");
-}
-
-char *glite_jp_error_chain(glite_jp_context_t ctx)
-{
-       char    *ret = NULL,indent[300] = "";
-       int     len = 0,add;
-       char    buf[2000];
-
-       glite_jp_error_t *ep = ctx->error;
-
-       do {
-               add = snprintf(buf,sizeof buf,"%s%s: %s (%s)\n",
-                               indent,
-                               ep->source,
-                               strerror(ep->code),
-                               ep->desc ? ep->desc : "");
-               ret = realloc(ret,len + add + 1);
-               strncpy(ret + len,buf,add); ret[len += add] = 0;
-               strcat(indent,"  ");
-       } while ((ep = ep->reason));
-
-       return ret;
-}
-
-int glite_jp_stack_error(glite_jp_context_t ctx, const glite_jp_error_t *err)
-{
-       glite_jp_error_t        *reason = ctx->error;
-
-       ctx->error = calloc(1,sizeof *ctx->error);
-       ctx->error->code = err->code;
-       ctx->error->desc = err->desc ? strdup(err->desc) : NULL;
-       ctx->error->source = err->source ? strdup(err->source) : NULL;
-       ctx->error->reason = reason;
-
-       return err->code;
-}
-
-int glite_jp_clear_error(glite_jp_context_t ctx)
-{
-       glite_jp_error_t        *e = ctx->error, *r;
-
-       while (e) {
-               r = e->reason;
-               free((char *) e->source);
-               free((char *) e->desc);
-               free(e);
-               e = r;
-       }
-       ctx->error = NULL;
-       return 0;
-}
-
-
-void glite_jp_free_query_rec(glite_jp_query_rec_t *q)
-{
-       free(q->attr); 
-       free(q->value);
-       free(q->value2);
-       memset(q,0,sizeof *q);
-}
-
-int glite_jp_queryrec_copy(glite_jp_query_rec_t *dst, const glite_jp_query_rec_t *src)
-{
-       memcpy(dst,src,sizeof *src);
-       if (src->attr) dst->attr = strdup(src->attr);
-       if (src->value) dst->value = strdup(src->value);
-       if (src->value2) dst->value2 = strdup(src->value2);
-       return 0;
-}
-
-int glite_jp_run_deferred(glite_jp_context_t ctx)
-{
-       int     i,cnt,ret;
-
-       if (!ctx->deferred_func) return 0;
-
-       glite_jp_clear_error(ctx);
-       for (cnt=0;ctx->deferred_func[cnt];cnt++);
-       for (i=0; i<cnt; i++) {
-               if ((ret = (*ctx->deferred_func)(ctx,*ctx->deferred_arg))) {
-                       glite_jp_error_t        err;
-                       char    desc[100];
-
-                       sprintf(desc,"calling func #%d, %p",i,*ctx->deferred_func);
-                       err.code = ret;
-                       err.desc = desc;
-                       err.source = "glite_jp_run_deferred()";
-
-                       glite_jp_stack_error(ctx,&err);
-                       return ret;
-               }
-               else {
-                       memmove(ctx->deferred_func,ctx->deferred_func+1,
-                                       (cnt-i) * sizeof *ctx->deferred_func);
-                       memmove(ctx->deferred_arg,ctx->deferred_arg+1,
-                                       (cnt-i) * sizeof *ctx->deferred_arg);
-               }
-       }
-       free(ctx->deferred_func); ctx->deferred_func = NULL;
-       free(ctx->deferred_arg); ctx->deferred_arg = NULL;
-       return 0;
-}
-
-int glite_jp_add_deferred(
-               glite_jp_context_t ctx,
-               int (*func)(glite_jp_context_t, void *),
-               void *arg
-)
-{
-       int     (**v)(glite_jp_context_t, void *) = ctx->deferred_func;
-       int     i;
-
-       for (i=0; v && v[i]; i++);
-
-       ctx->deferred_func = realloc(ctx->deferred_func, (i+2) * sizeof *ctx->deferred_func);
-       ctx->deferred_func[i] = func;
-       ctx->deferred_func[i+1] = NULL;
-
-       ctx->deferred_arg = realloc(ctx->deferred_arg,(i+2) * sizeof *ctx->deferred_arg);
-       ctx->deferred_arg[i] = arg;
-       ctx->deferred_arg[i+1] = NULL;
-
-       return 0;
-}
diff --git a/org.glite.lbjp-common.jp-interface/src/indexdb.c b/org.glite.lbjp-common.jp-interface/src/indexdb.c
deleted file mode 100644 (file)
index cc1fc77..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-#ident "$Header:"
-
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <stdio.h>
-#include <ctype.h>
-
-#include <glite/jobid/strmd5.h>
-#include <glite/lbu/db.h>
-#include <glite/lbu/trio.h>
-
-#define GLITE_JP_INDEX_COMPILE 1
-
-#include "indexdb.h"
-
-char *glite_jp_indexdb_attr2id(const char *name) {
-       size_t i, len;
-       char *lname, *id;
-
-       len = strlen(name);
-       lname = malloc(len + 1);
-       for (i = 0; i < len + 1; i++) lname[i] = tolower(name[i]);
-       id = str2md5(lname);
-       free(lname);
-
-       return id;
-}
-
-
-int glite_jp_indexdb_attr2select_from_index(const char *name, int indexed __attribute__((unused)), char **column, char **full_value_column, char **table, char **where) {
-       char *id;
-
-       if (column) *column = strdup("value");
-       if (full_value_column) *full_value_column = strdup("full_value");
-       if (table) {
-               id = glite_jp_indexdb_attr2id(name);
-               asprintf(table, GLITE_JP_INDEXDB_TABLE_ATTR_PREFIX "%s", id);
-               free(id);
-       }
-       if (where) *where = strdup("");
-
-       return 0;
-}
-
-
-int glite_jp_indexdb_attr2select_from_db(const char *name, glite_lbu_DBContext dbctx, char **column, char **full_value_column, char **table, char **where) {
-       char *sql, *id;
-       glite_lbu_Statement stmt;
-       int ret;
-
-       if (table) {
-               trio_asprintf(&sql, "SELECT attrid FROM attrs WHERE name='%|Ss'", name);
-               ret = glite_lbu_ExecSQL(dbctx, sql, &stmt);
-               free(sql);
-               switch (ret) {
-               case -1: return glite_lbu_DBError(dbctx, NULL, NULL);
-               case 1: break;
-               default: return EINVAL;
-               }
-               if (glite_lbu_FetchRow(stmt, 1, NULL, &id) < 0) return glite_lbu_DBError(dbctx, NULL, NULL);
-               asprintf(table, GLITE_JP_INDEXDB_TABLE_ATTR_PREFIX "%s", id);
-               free(id);
-               glite_lbu_FreeStmt(&stmt);
-       }
-       if (column) *column = strdup("value");
-       if (full_value_column) *full_value_column = strdup("full_value");
-       if (where) *where = strdup("");
-
-       return 0;
-}
diff --git a/org.glite.lbjp-common.jp-interface/src/utils.c b/org.glite.lbjp-common.jp-interface/src/utils.c
deleted file mode 100644 (file)
index 0be3e8e..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-#include <getopt.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <assert.h>
-#include <limits.h>
-#include <dirent.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "glite/jobid/strmd5.h"
-#include "types.h"
-#include "context.h"
-#include "known_attr.h"
-#include "attr.h"
-
-/*
-#include "feed.h"
-#include "tags.h"
-*/
-
-#include "backend.h"
-
-
-typedef struct _rl_buffer_t {
-        char                    *buf;
-        size_t                  pos, size;
-        off_t                   offset;
-} rl_buffer_t;
-
-/*
- * realloc the line to double size if needed
- *
- * \return 0 if failed, did nothing
- * \return 1 if success
- */
-int check_realloc_line(char **line, size_t *maxlen, size_t len) {
-        void *tmp;
-
-        if (len > *maxlen) {
-                *maxlen <<= 1;
-                tmp = realloc(*line, *maxlen);
-                if (!tmp) return 0;
-                *line = tmp;
-        }
-
-        return 1;
-}
-
-
-char* glite_jpps_get_namespace(const char* attr){
-        char* namespace = strdup(attr);
-        char* colon = strrchr(namespace, ':');
-        if (colon)
-                namespace[strrchr(namespace, ':') - namespace] = 0;
-        else
-                namespace[0] = 0;
-        return namespace;
-}
-
diff --git a/org.glite.lbjp-common.jp-interface/test/type_test.cpp b/org.glite.lbjp-common.jp-interface/test/type_test.cpp
deleted file mode 100644 (file)
index 33211bb..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-#include <assert.h>
-#include <fstream>
-
-#include <cppunit/extensions/HelperMacros.h>
-#include <cppunit/TestFixture.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/XmlOutputter.h>
-#include <cppunit/TestRunner.h>
-#include <cppunit/TestResult.h>
-#include <cppunit/TestResultCollector.h>
-
-#include "types.h"
-#include "attr.h"
-#include "context.h"
-#include "backend.h"
-
-
-class TypePluginTest: public  CppUnit::TestFixture
-{
-       CPPUNIT_TEST_SUITE(TypePluginTest);
-       CPPUNIT_TEST(simple);
-       CPPUNIT_TEST(binary);
-       CPPUNIT_TEST(origin);
-       CPPUNIT_TEST(origin2);
-       CPPUNIT_TEST(index);
-       CPPUNIT_TEST_SUITE_END();
-public:
-       void simple();
-       void binary();
-       void origin();
-       void origin2();
-       void index();
-};
-
-void TypePluginTest::simple()
-{      
-       glite_jp_context_t      ctx;
-
-       glite_jp_attrval_t      attr = {
-               "myattr",
-               "short string",
-               0,0,
-               GLITE_JP_ATTR_ORIG_USER,
-               NULL,
-               0
-       },attr2;
-
-       char    *db;
-
-       glite_jp_init_context(&ctx);
-       attr.timestamp = time(NULL);
-
-       db = glite_jp_attrval_to_db_full(ctx,&attr);
-
-       CPPUNIT_ASSERT_MESSAGE(std::string("glite_jp_attrval_to_db_full()"),db);
-       std::cerr << db << std::endl; 
-
-       glite_jp_attrval_from_db(ctx,db,&attr2);
-       CPPUNIT_ASSERT_MESSAGE(std::string("value"),!strcmp(attr.value,attr2.value));
-       CPPUNIT_ASSERT_MESSAGE(std::string("origin"),attr.origin == attr2.origin);
-       CPPUNIT_ASSERT_MESSAGE(std::string("timestamp"),attr.timestamp == attr2.timestamp);
-}
-
-void TypePluginTest::binary()
-{
-       glite_jp_context_t      ctx;
-
-       glite_jp_attrval_t      attr = {
-               "myattr",
-               NULL,
-               1,1000,
-               GLITE_JP_ATTR_ORIG_USER,
-               NULL,
-               0
-       },attr2;
-
-       char    *db;
-
-       glite_jp_init_context(&ctx);
-       attr.timestamp = time(NULL);
-       attr.value = (char *) malloc(attr.size);
-
-       db = glite_jp_attrval_to_db_full(ctx,&attr);
-
-       CPPUNIT_ASSERT_MESSAGE(std::string("glite_jp_attrval_to_db_full()"),db);
-       std::cerr << db << std::endl; 
-
-       glite_jp_attrval_from_db(ctx,db,&attr2);
-       CPPUNIT_ASSERT_MESSAGE(std::string("size"),attr.size == attr2.size);
-       CPPUNIT_ASSERT_MESSAGE(std::string("value"),!memcmp(attr.value,attr2.value,attr.size));
-}
-
-void TypePluginTest::origin()
-{
-       glite_jp_context_t      ctx;
-
-       glite_jp_attrval_t      attr = {
-               "myattr",
-               NULL,
-               0,0,
-               GLITE_JP_ATTR_ORIG_USER,
-               NULL,
-               0
-       },attr2;
-
-       char    *db;
-
-       glite_jp_init_context(&ctx);
-       attr.timestamp = time(NULL);
-       attr.value = "origin test";
-       attr.origin_detail = "simple origin";
-
-       db = glite_jp_attrval_to_db_full(ctx,&attr);
-
-       CPPUNIT_ASSERT_MESSAGE(std::string("glite_jp_attrval_to_db_full()"),db);
-       std::cerr << db << std::endl; 
-
-       glite_jp_attrval_from_db(ctx,db,&attr2);
-       CPPUNIT_ASSERT_MESSAGE(std::string("origin detail"),!strcmp(attr.origin_detail,attr2.origin_detail));
-}
-
-void TypePluginTest::origin2()
-{
-       glite_jp_context_t      ctx;
-
-       glite_jp_attrval_t      attr = {
-               "myattr",
-               NULL,
-               0,0,
-               GLITE_JP_ATTR_ORIG_USER,
-               NULL,
-               0
-       },attr2;
-
-       char    *db;
-
-       glite_jp_init_context(&ctx);
-       attr.timestamp = time(NULL);
-       attr.value = "origin:test";
-       attr.origin_detail = "ftp://some.server:1234/ugly \\file";
-
-       db = glite_jp_attrval_to_db_full(ctx,&attr);
-
-       CPPUNIT_ASSERT_MESSAGE(std::string("glite_jp_attrval_to_db_full()"),db);
-       std::cerr << db << std::endl; 
-
-       glite_jp_attrval_from_db(ctx,db,&attr2);
-       CPPUNIT_ASSERT_MESSAGE(std::string("origin detail"),!strcmp(attr.origin_detail,attr2.origin_detail));
-       CPPUNIT_ASSERT_MESSAGE(std::string("value"),!strcmp(attr.value,attr2.value));
-}
-
-void TypePluginTest::index()
-{
-       /* TODO: check monotonity */
-}
-
-CPPUNIT_TEST_SUITE_REGISTRATION(TypePluginTest);
-
-
-int main (int argc,const char *argv[])
-{
-       CppUnit::Test *suite = CppUnit::TestFactoryRegistry::getRegistry().makeTest();
-
-       assert(argc == 2);
-       std::ofstream   xml(argv[1]);
-
-       CppUnit::TestResult controller;
-       CppUnit::TestResultCollector result;
-       controller.addListener( &result );
-
-       CppUnit::TestRunner runner;
-       runner.addTest(suite);
-       runner.run(controller);
-
-       CppUnit::XmlOutputter xout( &result, xml );
-       CppUnit::CompilerOutputter tout( &result, std::cout);
-       xout.write();
-       tout.write();
-
-       return result.wasSuccessful() ? 0 : 1 ;
-}
-
-
-
-
-/* fake to link */
-int glite_jppsbe_pread(
-        glite_jp_context_t ctx,
-        void *handle,
-        void *buf,
-        size_t nbytes,
-        off_t offset,
-        ssize_t *nbytes_ret
-)
-{
-       abort();
-}
-
-
diff --git a/org.glite.lbjp-common.maildir/.cvsignore b/org.glite.lbjp-common.maildir/.cvsignore
deleted file mode 100644 (file)
index 378eac2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-build
diff --git a/org.glite.lbjp-common.maildir/Makefile b/org.glite.lbjp-common.maildir/Makefile
deleted file mode 100644 (file)
index 64d0c58..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-# defaults
-top_srcdir=..
-builddir=build
-stagedir=.
-distdir=.
-globalprefix=glite
-lbutilsprefix=lbu
-package=glite-lb-utils-maildir
-version=1.0.0
-PREFIX=/opt/glite
-flavour=gcc32thr
-
-glite_location=/opt/glite
-cppunit_prefix=/opt/cppunit
-thrflavour=gcc32pthr
-nothrflavour=gcc32
-
--include Makefile.inc
--include ../project/version.properties
-
-CC=gcc
-
-VPATH=${top_srcdir}/interface:${top_srcdir}/src:${top_srcdir}/examples
-
-DEBUG:=-g -O0 -W -Wall
-
-CFLAGS:= \
-       ${DEBUG} \
-       -DVERSION=\"${version}\" \
-       -I${stagedir}/include -I${top_srcdir}/src -I. \
-       -I${top_srcdir}/interface \
-       ${COVERAGE_FLAGS} \
-       -D_GNU_SOURCE
-
-LDFLAGS:=-L${stagedir}/lib ${COVERAGE_FLAGS}
-
-COMPILE:=libtool --mode=compile ${CC} ${CFLAGS}
-LINK:=libtool --mode=link ${CC} -rpath ${stagedir}/lib ${LDFLAGS} 
-INSTALL:=libtool --mode=install install
-
-EXT_LIBS:=
-OBJS:=maildir.o
-HDRS:=maildir.h
-LOBJS:=${OBJS:.o=.lo}
-
-default all: compile doc
-
-libglite_lbu_maildir.la: ${LOBJS}
-       ${LINK} -o $@ $< ${EXT_LIBS}
-
-compile: libglite_lbu_maildir.la
-
-check:
-       -echo No checks here yet.
-
-test_coverage:
-       -mkdir coverage
-       cd coverage && $(MAKE) -f ../Makefile top_srcdir=../../ COVERAGE_FLAGS="-fprofile-arcs -ftest-coverage" check
-       cd coverage && for i in `echo ${OBJS} | tr ' ' '\012' | sort -u`; do gcov $$i ; done
-
-examples:
-
-#doc:
-#      cp ${top_srcdir}/doc/*.dox .
-#      echo "PROJECT_NUMBER = ${version}" >> C.dox
-#      doxygen C.dox
-
-stage: compile
-       $(MAKE) install PREFIX=${stagedir} DOSTAGE=yes
-
-install: all
-       -mkdir -p ${PREFIX}/lib
-       -mkdir -p ${PREFIX}/share/doc/${package}-${version}
-       -mkdir -p ${PREFIX}/include/${globalprefix}/${lbutilsprefix}
-       ${INSTALL} -m 755 "libglite_lbu_maildir.la" "${PREFIX}/lib/libglite_lbu_maildir.la"; \
-       ${INSTALL} -m 644 ${top_srcdir}/interface/${HDRS} ${PREFIX}/include/${globalprefix}/${lbutilsprefix}
-
-clean:
-       rm -rvf *.o *.lo .libs lib* *.c *.h *.dox C/ CPP/
-       rm -rvf log.xml project/ rpmbuild/ RPMS/ tgz/
-
-%.o %.lo: %.c
-       ${COMPILE} -c $<
-
-maildir.lo: maildir.c maildir.h
-
-.PHONY: default all compile check examples doc stage dist distsrc distbin install clean test_coverage
diff --git a/org.glite.lbjp-common.maildir/configure b/org.glite.lbjp-common.maildir/configure
deleted file mode 100755 (executable)
index 455145c..0000000
+++ /dev/null
@@ -1,692 +0,0 @@
-#!/usr/bin/perl
-
-# WARNING: Don't edit this file unless it is the master copy in org.glite.lb
-#
-# For the purpose of standalone builds of lb/jobid/lbjp-common components
-# it is copied on tagging 
-
-# $Header$
-
-use Getopt::Long;
-
-my $pwd = `pwd`; chomp $pwd;
-my $prefix = $pwd.'/stage';
-my $stagedir;
-my $staged;
-my $module;
-my $thrflavour = 'gcc64dbgpthr';
-my $nothrflavour = 'gcc64dbg';
-my $mode = 'build';
-my $help = 0;
-my $listmodules;
-my $version;
-my $output;
-my $lb_tag = '';
-my $lbjp_tag = '';
-my $jp_tag = '';
-my $sec_tag = '';
-my $jobid_tag = '';
-
-my @nodes = qw/client server logger utils doc ws-test db jpprimary jpindex jpclient/;
-my %enable_nodes;
-my %disable_nodes;
-
-my %extern_prefix = (
-       cares => '/opt/c-ares',
-       classads => '/opt/classads',
-       cppunit => '/usr',
-       expat => '/usr',
-       globus => '/opt/globus',
-       jglobus => '/opt/globus',
-       gsoap => '/usr',
-       mysql => '/usr',
-       'mysql-devel' => '',
-       voms => '/opt/glite',
-       gridsite => '/opt/glite',
-       lcas => '/opt/glite',
-       ant => '/usr',
-       jdk => '/usr',
-       libtar => '/usr',
-);
-
-my %jar = (
-       'commons-codec' => '/usr/share/java/commons-codec-1.3.jar',
-);
-
-
-my %glite_prefix;
-my %need_externs;
-my %need_externs_type;
-my %need_jars;
-my %extrafull;
-my %extranodmod;
-my %deps;
-my %deps_type;
-my %topbuild;
-
-my %lbmodules = (
-       'lb' => [ qw/client common doc logger server state-machine types utils ws-interface ws-test/], 
-       'security' => [qw/gss gsoap-plugin/],
-       'lbjp-common' => [qw/db maildir server-bones trio jp-interface/],
-       'jobid' => [qw/api-c api-cpp/],
-       'jp' => [ qw/client doc index primary server-common ws-interface/ ],
-       );
-
-
-my @opts = (
-       'prefix=s' => \$prefix,
-       'staged=s' => \$staged,
-       'module=s' => \$module,
-       'thrflavour=s' => \$thrflavour,
-       'nothrflavour=s' => \$nothrflavour,
-       'mode=s' => \$mode,
-       'listmodules=s' => \$listmodules,
-       'version=s' => \$version,
-       'output=s' => \$output,
-       'stage=s' => \$stagedir,
-       'lb-tag=s' => \$lb_tag,
-       'lbjp-common-tag=s' => \$lbjp_tag,
-       'jp-tag=s' => \$jp_tag,
-       'security-tag=s' => \$sec_tag,
-       'jobid-tag=s' => \$jobid_tag,
-       'help' => \$help,
-);
-
-for (@nodes) {
-       $enable_nodes{$_} = 0;
-       $disable_nodes{$_} = 0;
-       
-       push @opts,"disable-$_",\$disable_nodes{$_};
-       push @opts,"enable-$_",\$enable_nodes{$_};
-}
-
-push @opts,"with-$_=s",\$extern_prefix{$_} for keys %extern_prefix;
-push @opts,"with-$_=s",\$jar{$_} for keys %jar;
-
-my @keeparg = @ARGV;
-
-GetOptions @opts or die "Errors parsing command line\n";
-
-$extern_prefix{'mysql-devel'}=$extern_prefix{mysql} if $extern_prefix{'mysql-devel'} eq '';
-
-if ($help) { usage(); exit 0; }
-
-if ($listmodules) {
-       my @m = map "org.glite.$listmodules.$_",@{$lbmodules{$listmodules}};
-       print "@m\n";
-       exit 0;
-}
-
-warn "$0: --version and --output make sense only in --mode=etics\n"
-       if ($version || $output) && $mode ne 'etics';
-
-my $en;
-for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; }
-
-my $dis;
-for (keys %disable_nodes) { $dis = 1 if $disable_nodes{$_}; }
-
-die "--enable-* and --disable-* are mutually exclusive\n"
-       if $en && $dis;
-
-die "--module cannot be used with --enable-* or --disable-*\n"
-       if $module && ($en || $dis);
-
-die "$module: unknown module\n" if $module && ! grep $module,@{$lbmodules{lb}},@{$lbmodules{security}},{$lbmodules{jp}};
-
-if ($dis) {
-       for (@nodes) {
-               $enable_nodes{$_} = 1 unless $disable_nodes{$_};
-       }
-}
-
-if (!$en && !$dis) { $enable_nodes{$_} = 1 for (@nodes) } ;
-
-for (keys %enable_nodes) { delete $enable_nodes{$_} unless $enable_nodes{$_}; }
-
-$stagedir = $prefix unless $stagedir;
-
-if ($mode eq 'build') {
-       print "Writing config.status\n";
-       open CONF,">config.status" or die "config.status: $!\n";
-       print CONF "$0 @keeparg\n";
-       close CONF;
-}
-
-
-my @modules;
-my %aux;
-
-if ($module) {
-#      push @modules,split(/[,.]+/,$module);
-       push @modules,$module;
-}
-else {
-       @modules = map(($extranodmod{$_} ? $extranodmod{$_} : 'lb.'.$_),(keys %enable_nodes));
-       
-       my $n;
-
-       do {
-               local $"="\n";
-               $n = $#modules;
-               push @modules,(map @{$deps{$_}},@modules);
-
-               undef %aux; @aux{@modules} = (1) x ($#modules+1);
-               @modules = keys %aux;
-       } while ($#modules > $n);
-}
-
-@aux{@modules} = (1) x ($#modules+1);
-delete $aux{$_} for (split /,/,$staged);
-@modules = keys %aux;
-
-mode_build() if $mode eq 'build';
-mode_checkout() if $mode eq 'checkout';
-mode_etics($module) if $mode eq 'etics';
-
-sub mode_build {
-       print "\nBuilding modules: @modules\n";
-       
-       my @ext = map @{$need_externs{$_}},@modules;
-       my @myjars = map @{$need_jars{$_}},@modules;
-       undef %aux; @aux{@ext} = 1;
-       @ext = keys %aux;
-       undef %aux; @aux{@myjars} = (1) x ($#myjars+1);
-       @myjars = keys %aux;
-       
-       print "\nRequired externals:\n";
-       print "\t$_: $extern_prefix{$_}\n" for @ext;
-       print "\t$_: $jar{$_}\n" for @myjars;
-       print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n";
-       
-       mkinc($_) for @modules;
-       
-       print "Creating Makefile\n";
-       
-       open MAK,">Makefile" or die "Makefile: $!\n";
-       
-       print MAK "all: @modules\n\nclean:\n";
-       
-       for (@modules) {
-               my $full = full($_);
-               my $build = $topbuild{$_} ? '': '/build';
-               print MAK "\tcd $full$build && \${MAKE} clean\n"
-       }
-       
-       print MAK "\ndistclean:\n";
-       
-       for (@modules) {
-               my $full = full($_);
-               print MAK $topbuild{$_} ?
-                       "\tcd $full$build && \${MAKE} distclean\n" :
-                       "\trm -rf $full$build\n"
-       }
-       
-       print MAK "\n";
-       
-       for (@modules) {
-               my %ldeps; undef %ldeps;  
-               @ldeps{@{$deps{$_}}} = 1;
-               for my $x (split /,/,$staged) { delete $ldeps{$x}; }
-               my @dnames = $module ? () : keys %ldeps;
-       
-               my $full = full($_);
-               my $build = $topbuild{$_} ? '': '/build';
-       
-               print MAK "$_: @dnames\n\tcd $full$build && \${MAKE} && \${MAKE} install\n\n";
-       }
-       
-       close MAK;
-}
-       
-sub mode_checkout() {
-       for (@modules) {
-               my $module = $_;
-               my $tag = "";
-               if ($lb_tag){
-                       for (@{$lbmodules{lb}}){
-                               if ("lb.".$_ eq $module){
-                                       $tag = '-r '.$lb_tag;
-                               }
-                       }       
-               }
-               if ($lbjp_tag){
-                       for (@{$lbmodules{'lbjp-common'}}){
-                               if ("lbjp-common.".$_ eq $module){
-                                        $tag = '-r '.$lbjp_tag;
-                                }
-                       }
-               }
-               if ($jp_tag){
-                       for (@{$lbmodules{'jp'}}){
-                               if ("jp.".$_ eq $module){
-                                        $tag = '-r '.$jp_tag;
-                               }
-                        }
-               }
-               if ($sec_tag){
-                       for (@{$lbmodules{security}}){
-                               if ("security.".$_ eq $module){
-                                        $tag = '-r '.$sec_tag;
-                                }
-                       }
-               }
-               if ($jobid_tag){
-                       for (@{$lbmodules{jobid}}){
-                               if ("jobid.".$_ eq $module){
-                                        $tag = '-r '.$jobid_tag;
-                                }
-                       }
-               }
-               #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
-               #       print "found";
-               #}
-               $_ = full($_);
-               print "\n*** Checking out $_\n";
-               system("cvs checkout  $tag $_") == 0 or die "cvs checkout $tag $_: $?\n";
-       }
-}
-
-BEGIN{
-%need_externs_aux = (
-       'lb.client' => [ qw/cppunit:B classads/ ],
-       'lb.client-java' => [ qw/ant:B jglobus jdk:B/ ],
-       'lb.common' => [ qw/expat cppunit:B classads/ ],
-       'lb.doc' => [],
-       'lb.logger' => [ qw/cppunit:B/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql cppunit:B gsoap:B classads voms lcas gridsite/ ],
-       'lb.state-machine' => [ qw/classads/ ],
-       'lb.utils' => [ qw/cppunit:B/ ],
-       'lb.ws-interface' => [],
-       'lb.ws-test' => [ qw/gsoap:B/ ],
-       'lb.types' => [ qw// ],
-       'lbjp-common.db' => [ qw/mysql:R mysql-devel:B/ ],
-       'lbjp-common.maildir' => [ qw// ],
-       'lbjp-common.server-bones' => [ qw// ],
-       'lbjp-common.trio' => [ qw/cppunit:B/ ],
-       'lbjp-common.jp-interface' => [ qw/cppunit:B/ ],
-       'security.gss' =>  [ qw/globus_essentials:R globus:B cares cppunit:B/ ],
-       'security.gsoap-plugin' =>  [ qw/cppunit:B globus_essentials:R globus:B cares gsoap:B/ ],
-       'jobid.api-c' =>  [ qw/cppunit:B/ ],
-       'jobid.api-cpp' =>  [ qw/cppunit:B/ ],
-       'jobid.api-java' =>  [ qw/ant:B jdk:B/ ],
-       'jp.client' => [ qw/gsoap libtar globus_essentials:R globus:B/ ],
-        'jp.doc' => [],
-        'jp.index' => [ qw/gsoap globus_essentials:R globus:B/ ],
-        'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
-        'jp.server-common' => [],
-        'jp.ws-interface' => [],
-);
-
-for my $ext (keys %need_externs_aux) {
-       for (@{$need_externs_aux{$ext}}) {
-               /([^:]*)(?::(.*))?/;
-               push @{$need_externs{$ext}},$1;
-               my $type = $2 ? $2 : 'BR';
-               $need_externs_type{$ext}->{$1} = $type;
-       }
-}
-
-%need_jars = (
-       'jobid.api-java' => [ qw/commons-codec/ ],
-);
-
-for my $jar (keys %need_jars) {
-       for (@{$need_jars{$jar}}) {
-               $need_externs_type{$jar}->{$_} = 'BR';  # XXX
-       }
-}
-
-%deps_aux = (
-       'lb.client' => [ qw/
-               lb.types:B lb.common
-               lbjp-common.trio
-               jobid.api-cpp jobid.api-c
-               security.gss
-       / ],
-       'lb.client-java' => [ qw/
-               lb.types:B
-               jobid.api-java
-       / ],
-       'lb.common' => [ qw/
-               jobid.api-cpp jobid.api-c
-               lb.types:B lbjp-common.trio security.gss
-       / ],
-       'lb.doc' => [ qw/lb.types:B/ ],
-       'lb.logger' => [ qw/
-               lbjp-common.trio
-               jobid.api-c
-               lb.common
-               security.gss
-       / ],
-       'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
-               lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir
-               jobid.api-c
-               security.gsoap-plugin security.gss
-       / ],
-       'lb.state-machine' => [ qw/lb.types:B lb.common lbjp-common.jp-interface security.gss/ ],
-       'lb.utils' => [ qw/
-               lbjp-common.jp-interface
-               jobid.api-c
-               lbjp-common.trio lbjp-common.maildir
-               lb.client lb.state-machine
-       / ],
-       'lb.ws-test' => [ qw/security.gsoap-plugin lb.ws-interface/ ],
-       'lb.ws-interface' => [ qw/lb.types:B/ ],
-       'lb.types' => [ qw// ],
-       'lbjp-common.db' => [ qw/lbjp-common.trio/ ],
-       'lbjp-common.maildir' => [ qw// ],
-       'lbjp-common.server-bones' => [ qw// ],
-       'lbjp-common.trio' => [ qw// ],
-       'security.gss' =>  [ qw// ],
-       'security.gsoap-plugin' =>  [ qw/security.gss/ ],
-       'jobid.api-c' =>  [ qw// ],
-       'jobid.api-cpp' =>  [ qw/jobid.api-c/ ],
-       'jobid.api-java' =>  [ qw// ],
-
-       'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ],
-
-       'jp.client' => [ qw/
-                jp.ws-interface
-                lbjp-common.jp-interface lbjp-common.maildir
-                jobid.api-c
-                security.gsoap-plugin
-        / ],
-       'jp.doc' => [ qw// ],
-       'jp.index' => [ qw/
-                jp.server-common jp.ws-interface
-                lbjp-common.jp-interface lbjp-common.trio lbjp-common.db lbjp-common.server-bones
-                security.gsoap-plugin
-        / ],
-       'jp.primary' => [ qw/
-                jobid.api-c
-                jp.server-common jp.ws-interface
-                lb.state-machine
-                lbjp-common.jp-interface lbjp-common.trio lbjp-common.db lbjp-common.server-bones
-                security.gsoap-plugin
-        / ],
-       'jp.server-common' => [ qw/ 
-                lbjp-common.jp-interface lbjp-common.db
-        / ],
-       'jp.ws-interface' => [ qw// ],
-);
-
-for my $ext (keys %deps_aux) {
-       for (@{$deps_aux{$ext}}) {
-               /([^:]*)(?::(.*))?/;
-               push @{$deps{$ext}},$1;
-               my $type = $2 ? $2 : 'BR';
-               $deps_type{$ext}->{$1} = $type;
-       }
-}
-
-
-%extrafull = ( gridsite=>'org.gridsite.core');
-
-#( java => 'client-java' );
-%extranodmod = (
-       db => 'lbjp-common.db',
-       jpprimary => 'jp.primary',
-       jpindex => 'jp.index',
-       jpclient => 'jp.client',
-);
-
-my @t = qw/lb.client-java jobid.api-java lb.types/;
-@topbuild{@t} = (1) x ($#t+1);
-}
-
-sub full
-{
-       my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
-}
-
-sub mkinc
-{
-       my %aux;
-       undef %aux;
-       my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java
-security.gss security.gsoap-plugin
-jobid.api-c jobid.api-cpp jobid.api-java
-lbjp-common.db lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface
-jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-/;
-       @aux{@m} = (1) x ($#m+1);
-
-       my $short = shift;
-       my $full = full $short;
-
-       unless ($aux{$short}) {
-               print "Makefile.inc not needed in $full\n";
-               return;
-       }
-
-       my $build = '';
-       
-       unless ($topbuild{$_}) {
-               $build = '/build';
-               unless (-d "$full/build") {
-                       mkdir "$full/build" or die "mkdir $full/build: $!\n";
-               }
-               unlink "$full/build/Makefile";
-               symlink "../Makefile","$full/build/Makefile" or die "symlink ../Makefile $full/build/Makefile: $!\n";
-       }
-
-       open MKINC,">$full$build/Makefile.inc"
-               or die "$full$build/Makefile.inc: $!\n";
-
-       print "Creating $full$build/Makefile.inc\n";
-
-       print MKINC qq{
-PREFIX = $prefix
-stagedir = $stagedir
-thrflavour = $thrflavour
-nothrflavour = $nothrflavour
-};
-
-       for (@{$need_externs{$short}}) {
-               print MKINC "${_}_prefix = $extern_prefix{$_}\n"
-       }
-
-       for (@{$need_jars{$short}}) {
-               print MKINC "${_}_jar = $jar{$_}\n"
-       }
-
-       my $need_gsoap = 0;
-       for (@{$need_externs{$short}})  { $need_gsoap = 1 if $_ eq 'gsoap'; }
-
-       print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
-
-       close MKINC;
-}
-
-my %etics_externs;
-my %etics_projects;
-BEGIN{
-       %etics_externs = (
-               globus_essentials=>'vdt_globus_essentials',
-               globus=>'globus',
-               cares=>'c-ares',
-               voms=>'org.glite.security.voms-api-cpp',
-               gridsite=>'org.gridsite.shared',
-               lcas=>'org.glite.security.lcas',
-       );
-       %etics_projects = (
-               vdt=>[qw/globus globus_essentials/],
-               'org.glite'=>[qw/voms gridsite lcas/],
-       );
-};
-
-sub mode_etics {
-       $fmod = shift;
-
-       die "$0: --module required with --etics\n" unless $fmod;
-       
-       my ($subsys,$module) = split /\./,$fmod;
-
-       my ($major,$minor,$rev,$age);
-
-       if ($version) {
-               $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/;
-               ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
-       }
-       else { 
-               open V,"org.glite.$subsys.$module/project/version.properties"
-                       or die "org.glite.$subsys.$module/project/version.properties: $!\n";
-       
-               while ($_ = <V>) {
-                       chomp;
-                       ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
-               }
-               close V;
-       }
-
-       my @copts = ();
-       my %ge;
-       @ge{@{$etics_projects{'org.glite'}}} = (1) x ($#{$etics_projects{'org.glite'}}+1);
-
-       for (@{$need_externs{"$subsys.$module"}}) {
-           if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
-           }
-       }
-
-       for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-
-               push @copts,"--with-$_ \${$eext.location}/$_*.jar";
-       }
-
-
-       my $conf = "glite-$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
-       my $file = $output ? $output : "$conf.ini";
-       open C,">$file" or die "$file: $!\n";
-
-       my $buildroot = $topbuild{"$subsys.$module"} ? '' : "build.root = build\n";
-
-       my $confdir = $topbuild{"$subsys.$module"} ? '..' : '../..';
-
-       print STDERR "Writing $file\n";
-       print C qq{
-[Configuration-$conf]
-profile = None
-moduleName = org.glite.$subsys.$module
-displayName = $conf
-description = org.glite.$subsys.$module
-projectName = org.glite
-age = $age
-deploymentType = None
-tag = $conf
-version = $major.$minor.$rev
-path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz
-
-[Platform-default:VcsCommand]
-displayName = None
-description = None
-tag = cvs -d \${vcsroot} tag -R \${tag} \${moduleName}
-branch = None
-commit = None
-checkout = cvs -d \${vcsroot} co -r \${tag} \${moduleName}
-
-[Platform-default:BuildCommand]
-postpublish = None
-packaging = None
-displayName = None
-description = None
-doc = None
-prepublish = None
-publish = None
-compile = make
-init = None
-install = make install
-clean = make clean
-test = make check
-configure = cd $confdir && \${moduleName}/configure --thrflavour=\${globus.thr.flavor} --nothrflavour=\${globus.nothr.flavor} --prefix=\${prefix} --stage=\${stageDir} --module $subsys.$module @copts
-checkstyle = None
-
-[Platform-default:Property]
-$buildroot
-
-[Platform-default:DynamicDependency]
-
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
-                       }
-               }
-
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
-               print C "$proj|$eext = $type\n";
-       }
-
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "org.glite|org.glite.$_ = $type\n";
-       }
-
-       close C;
-}
-
-sub gsoap_version {
-       local $_;
-       my $gsoap_version;
-       open S,"$extern_prefix{gsoap}/bin/soapcpp2 -v 2>&1 |" or die "$extern_prefix{gsoap}/bin/soapcpp2: $!\n";
-
-       while ($_ = <S>) {
-               chomp;
-
-               $gsoap_version = $1 if /The gSOAP Stub and Skeleton Compiler for C and C\+\+ ([.[:digit:][:alpha:]]+)$/;
-       }
-       close S;
-       return $gsoap_version;
-}
-
-
-sub usage {
-       my @ext = keys %extern_prefix;
-       my @myjars, keys %jar;
-
-       print STDERR qq{
-usage: $0 options
-
-General options (defaults in []):
-  --prefix=PREFIX              destination directory [./stage]
-  --staged=module,module,...   what is already in PREFIX (specify without org.glite.)
-  --thrflavour=flavour
-  --nothrflavour=flavour       threaded and non-treaded flavours [gcc64dbgpthr,gcc64dbg]
-  --listmodules=subsys          list modules of a subsystem
-  
-Mode of operation:
-  --mode={checkout|build|etics}        what to do [build]
-  
-What to build:
-  --module=module              build this module only (mostly in-Etics operation)
-  --enable-NODE                        build this "node" (set of modules) only. Available nodes are
-                                       @{$lbmodules{lb}},@{$lbmodules{security}}
-  --disable-NODE               don't build this node
-  --lb-tag=tag                 checkout LB modules with specific tag
-  --jp-tag=tag                 checkout JP modules with specific tag
-  --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
-  --security-tag=tag           checkout security modules with specific tag
-  --jobid-tag=tag              checkout jobid modules with specific tag
-
-Dependencies:
-  --with-EXTERNAL=PATH         where to look for an external. Required externals
-                               (not all for all modules) are:
-                                       @ext
-  --with-JAR=JAR               where to look for jars. Required jars are:
-                                       @myjars
-                               Summary of what will be used is always printed
-
-};
-
-}
diff --git a/org.glite.lbjp-common.maildir/interface/maildir.h b/org.glite.lbjp-common.maildir/interface/maildir.h
deleted file mode 100644 (file)
index fbca506..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef GLITE_LBU_MAILDIR_H
-#define GLITE_LBU_MAILDIR_H
-
-/*
- * Functions for reading and writing messages via
- * maildir protocol.
- * Used when registering job to the JP, i.e.
- */
-
-enum {
-       LBMD_TRANS_OK,
-       LBMD_TRANS_FAILED,
-       LBMD_TRANS_FAILED_RETRY,
-};
-       
-extern char lbm_errdesc[];
-
-extern int glite_lbu_MaildirInit(const char *);
-extern int glite_lbu_MaildirStoreMsg(const char *, const char *, const char *);
-extern int glite_lbu_MaildirRetryTransStart(const char *, time_t, time_t, char **, char **);
-extern int glite_lbu_MaildirTransStart(const char *, char **, char **);
-extern int glite_lbu_MaildirTransEnd(const char *, char *, int);
-
-#endif /* GLITE_LBU_MAILDIR_H */
diff --git a/org.glite.lbjp-common.maildir/project/ChangeLog b/org.glite.lbjp-common.maildir/project/ChangeLog
deleted file mode 100644 (file)
index 241af0a..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-1.0.0-1
-- initial version
-
-1.0.0-2
-- configure script update (globus flavors added to configure call)
-
-1.0.0-3
-- configure script update
-
diff --git a/org.glite.lbjp-common.maildir/project/version.properties b/org.glite.lbjp-common.maildir/project/version.properties
deleted file mode 100644 (file)
index af720aa..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# : /cvs/jra1mw/org.glite.lbjp-common.maildir/project/version.properties,v 1.1 2007/11/01 20:17:45 valtri Exp $
-module.version=1.0.0
-module.age=3
diff --git a/org.glite.lbjp-common.maildir/src/maildir.c b/org.glite.lbjp-common.maildir/src/maildir.c
deleted file mode 100644 (file)
index 78c809f..0000000
+++ /dev/null
@@ -1,399 +0,0 @@
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <dirent.h>
-#include <time.h>
-#include <fcntl.h>
-#include <sys/time.h>
-#include <errno.h>
-#include <string.h>
-
-#include "maildir.h"
-
-#define DEFAULT_ROOT   "/tmp/lb_maildir"
-
-enum {
-       LBMD_DIR_TMP = 0,
-       LBMD_DIR_NEW,
-       LBMD_DIR_WORK,
-       LBMD_DIR_POST,
-       LBMD_DIR_UNDELIVERABLE
-};
-
-static const char *dirs[] = { "tmp", "new", "work", "post", "undeliverable" };
-
-
-#define MAX_ERR_LEN            1024
-char lbm_errdesc[MAX_ERR_LEN];
-
-
-static int check_mkdir(const char *dir)
-{
-       struct stat sbuf;
-
-       if ( stat(dir, &sbuf) ) {
-               if ( errno == ENOENT ) {
-                       if ( mkdir(dir, S_IRWXU) ) return 1;
-                       if ( stat(dir, &sbuf) )  return 1;
-               }
-               else return 1;
-       }
-
-       if (!S_ISDIR(sbuf.st_mode)) return 1;
-
-       if (access(dir, R_OK | W_OK)) return 1;
-
-       return 0;
-}
-
-
-int glite_lbu_MaildirInit(
-       const char                 *dir)
-{
-       const char *root = dir? : DEFAULT_ROOT;
-       char            dirname[PATH_MAX];
-       size_t                  i;
-
-       lbm_errdesc[0] = '\0';
-       if ( check_mkdir(root) ) {
-               snprintf(lbm_errdesc, MAX_ERR_LEN, "%s: %s\n", root, strerror(errno));
-               return 1;
-       }
-       
-       for ( i = 0; i < sizeof(dirs)/sizeof((dirs)[0]); i++ ) {
-               snprintf(dirname, PATH_MAX, "%s/%s", root, dirs[i]);
-               if ( check_mkdir(dirname) ) {
-                       snprintf(lbm_errdesc, MAX_ERR_LEN, "%s: %s\n", dirname, strerror(errno));
-                       return 1;
-               }
-       }
-
-       return 0;
-}
-
-
-int glite_lbu_MaildirStoreMsg(
-       const char      *root,
-       const char      *srvname,
-       const char      *msg)
-{
-       char    fname[PATH_MAX],
-               newfname[PATH_MAX];
-       int     fhnd,
-               written,
-               msgsz,
-               ct, i;
-       struct  timeval  tv;
-
-
-       lbm_errdesc[0] = '\0';
-       if ( !root ) root = DEFAULT_ROOT;
-
-       errno = 0;
-       i = 0;
-       while ( 1 ) {
-               if ( ++i > 10 ) {
-                       errno = ECANCELED;
-                       snprintf(lbm_errdesc, MAX_ERR_LEN, "Maximum tries limit reached with unsuccessful file creation");
-                       return -1;
-               }
-               gettimeofday(&tv, NULL);
-               snprintf(fname, PATH_MAX, "%s/%s/%ld_%ld.%s", root, dirs[LBMD_DIR_TMP], tv.tv_sec, tv.tv_usec, srvname);
-               if ( (fhnd = open(fname, O_CREAT|O_EXCL|O_WRONLY, 00600)) < 0 ) {
-                       if ( errno == EEXIST ) { usleep(1000); continue; }
-                       snprintf(lbm_errdesc, MAX_ERR_LEN, "Can't create file %s", fname);
-                       return -1;
-               }
-               break;
-       }
-
-       msgsz = strlen(msg);
-       written = 0;
-       while ( written < msgsz ) {
-               if ( (ct = write(fhnd, msg+written, msgsz-written)) < 0 ) {
-                       if ( errno == EINTR ) { errno = 0; continue; }
-                       snprintf(lbm_errdesc, MAX_ERR_LEN, "Can't write into file %s", fname);
-                       return -1;
-               }
-               written += msgsz;
-       }
-       if ( fsync(fhnd) ) {
-               snprintf(lbm_errdesc, MAX_ERR_LEN, "Can't fsync file %s", fname);
-               return -1;
-       }
-       if ( close(fhnd) ) {
-               snprintf(lbm_errdesc, MAX_ERR_LEN, "Can't close file %s", fname);
-               return -1;
-       }
-       snprintf(newfname, PATH_MAX, "%s/%s/%s", root, dirs[LBMD_DIR_NEW], strrchr(fname, '/')+1);
-       if ( link(fname, newfname) ) {
-               snprintf(lbm_errdesc, MAX_ERR_LEN, "Can't link new file %s", newfname);
-               return -1;
-       }
-
-       return 0;
-}
-
-
-int glite_lbu_MaildirTransEnd(
-       const char                 *root,
-       char                       *fname,
-       int                                     tstate)
-{
-       char            workfname[PATH_MAX],
-                               newfname[PATH_MAX],
-                               origfname[PATH_MAX];
-       struct stat     st;
-
-
-       lbm_errdesc[0] = '\0';
-       if ( !root ) root = DEFAULT_ROOT;
-
-       snprintf(workfname, PATH_MAX, "%s/%s/%s", root, dirs[LBMD_DIR_WORK], fname);
-       unlink(workfname);
-
-       snprintf(origfname, PATH_MAX, "%s/%s/%s", root, dirs[LBMD_DIR_TMP], fname);
-       if ( tstate == LBMD_TRANS_OK ) {
-               unlink(origfname);
-               return 0;
-       }
-
-       if ( tstate == LBMD_TRANS_FAILED ) return 0;
-
-       if ( stat(origfname, &st) ) {
-               snprintf(lbm_errdesc, MAX_ERR_LEN, "Can't stat file '%s'", origfname);
-               return -1;
-       }
-
-       snprintf(newfname, PATH_MAX, "%s/%s/%s", root, dirs[LBMD_DIR_POST], fname);
-       if ( link(origfname, newfname) ) {
-               snprintf(lbm_errdesc, MAX_ERR_LEN, "Can't link new file %s", newfname);
-               return -1;
-       }
-
-       return 0;
-}
-
-
-int glite_lbu_MaildirRetryTransStart(
-       const char      *root,
-       time_t          retry,
-       time_t          remove,
-       char            **msg,
-       char            **fname)
-{
-       static DIR      *dir = NULL;
-       struct dirent   *ent;
-       time_t          tlimit_retry, tlimit_remove;
-       struct stat     st;
-       char            newfname[PATH_MAX],
-                       oldfname[PATH_MAX],
-                       *buf = NULL;
-       int             fhnd,
-                       toread, ct,
-                       bufsz, bufuse;
-
-
-       lbm_errdesc[0] = '\0';
-       if ( !root ) root = DEFAULT_ROOT;
-
-       if ( !dir ) {
-               char    dirname[PATH_MAX];
-               snprintf(dirname, PATH_MAX, "%s/%s", root, dirs[LBMD_DIR_POST]);
-               if ( !(dir = opendir(dirname)) ) {
-                       snprintf(lbm_errdesc, MAX_ERR_LEN, "Can't open directory '%s'", root);
-                       goto err;
-               }
-       }
-
-       tlimit_retry = time(NULL) - retry;
-       tlimit_remove = time(NULL) - remove;
-       do {
-               errno = 0;
-               if ( !(ent = readdir(dir)) ) {
-                       if ( errno == EBADF ) {
-                               snprintf(lbm_errdesc, MAX_ERR_LEN, "Can't read directory '%s'", root);
-                               dir = NULL;
-                               goto err;
-                       } else {
-                               closedir(dir);
-                               dir = NULL;
-                               return 0;
-                       }
-               }
-               if ( ent->d_name[0] == '.' ) continue;
-
-               snprintf(oldfname, PATH_MAX, "%s/%s/%s", root, dirs[LBMD_DIR_POST], ent->d_name);
-               snprintf(newfname, PATH_MAX, "%s/%s/%s", root, dirs[LBMD_DIR_WORK], ent->d_name);
-
-               if ( stat(oldfname, &st) < 0 ) {
-                       snprintf(lbm_errdesc, MAX_ERR_LEN, "Can't stat file '%s'", oldfname);
-                       goto err;
-               }
-
-               /* if we cannot deliver the file for 'remove' time limit, */
-               /* it is moved to undeliverable folder and forgotten      */
-               if ( st.st_mtime < tlimit_remove ) {
-                       snprintf(newfname, PATH_MAX, "%s/%s/%s",
-                                root, dirs[LBMD_DIR_UNDELIVERABLE], ent->d_name);
-               }
-               /* try to deliver file every 'retry' seconds */
-               else if ( st.st_ctime > tlimit_retry ) continue;
-
-
-               if ( rename(oldfname, newfname) ) {
-                       if ( errno == ENOENT ) {
-                               /* maybe some other instance moved this file away... */
-                               continue;
-                       } else {
-                               snprintf(lbm_errdesc, MAX_ERR_LEN, "Can't move file '%s'", oldfname);
-                               goto err;
-                       }
-               } else {
-                       if (st.st_mtime < tlimit_remove) {
-                               /* we have moved undeliverable file to undeliverable folder */
-                               /* no other action needed */
-                               snprintf(oldfname, PATH_MAX, "%s/%s/%s", root, dirs[LBMD_DIR_TMP], ent->d_name);
-                               unlink(oldfname);
-                               continue;
-                       } else {
-                               /* we have found and moved the file  to work folder */
-                               /* going to process it */
-                               break;
-                       }
-               }
-       } while ( 1 );
-
-       if ( (fhnd = open(newfname, O_RDONLY)) < 0 ) {
-               snprintf(lbm_errdesc, MAX_ERR_LEN, "Can't open file '%s'", newfname);
-               goto err;
-       }
-
-       bufuse = bufsz = toread = ct = 0;
-       do {
-               errno = 0;
-               if ( bufuse == bufsz ) {
-                       char *tmp = realloc(buf, bufsz+BUFSIZ);
-                       if ( !tmp ) goto err;
-                       buf = tmp;
-                       bufsz += BUFSIZ;
-               }
-               toread = bufsz - bufuse;
-               if ( (ct = read(fhnd, buf+bufuse, toread)) < 0 ) {
-                       if ( errno == EINTR ) continue;
-                       snprintf(lbm_errdesc, MAX_ERR_LEN, "Can't read file '%s'", newfname);
-                       goto err;
-               }
-               if ( ct == 0 ) break;
-               bufuse += ct;
-       } while ( ct == toread );
-       close(fhnd);
-
-       if ( !(*fname = strdup(ent->d_name)) ) goto err;
-       buf[bufuse] = 0;
-       *msg = buf;
-       return 1;
-
-
-err:
-       if ( buf ) free(buf);
-
-       return -1;
-}
-
-
-int glite_lbu_MaildirTransStart(
-       const char                 *root,
-       char              **msg,
-       char                      **fname)
-{
-       static DIR         *dir = NULL;
-       struct dirent  *ent;
-       char                    newfname[PATH_MAX],
-                                       oldfname[PATH_MAX],
-                                  *buf = NULL;
-       int                             fhnd,
-                                       toread, ct,
-                                       bufsz, bufuse;
-
-
-       lbm_errdesc[0] = '\0';
-       if ( !root ) root = DEFAULT_ROOT;
-
-       if ( !dir ) {
-               char    dirname[PATH_MAX];
-               snprintf(dirname, PATH_MAX, "%s/%s", root, dirs[LBMD_DIR_NEW]);
-               if ( !(dir = opendir(dirname)) ) {
-                       snprintf(lbm_errdesc, MAX_ERR_LEN, "Can't open directory '%s'", root);
-                       goto err;
-               }
-       }
-
-       do {
-               errno = 0;
-               if ( !(ent = readdir(dir)) ) {
-                       if ( errno == EBADF ) {
-                               snprintf(lbm_errdesc, MAX_ERR_LEN, "Can't read directory '%s'", root);
-                               dir = NULL;
-                               goto err;
-                       } else {
-                               closedir(dir);
-                               dir = NULL;
-                               return 0;
-                       }
-               }
-               if ( ent->d_name[0] == '.' ) continue;
-               snprintf(newfname, PATH_MAX, "%s/%s/%s", root, dirs[LBMD_DIR_WORK], ent->d_name);
-               snprintf(oldfname, PATH_MAX, "%s/%s/%s", root, dirs[LBMD_DIR_NEW], ent->d_name);
-               if ( rename(oldfname, newfname) ) {
-                       if ( errno == ENOENT ) {
-                               /* maybe some other instance moved this file away... */
-                               continue;
-                       } else {
-                               snprintf(lbm_errdesc, MAX_ERR_LEN, "Can't move file '%s'", oldfname);
-                               goto err;
-                       }
-               } else {
-                       /* we have found and moved the file with which we will work now */
-                       break;
-               }
-       } while ( 1 );
-
-       if ( (fhnd = open(newfname, O_RDONLY)) < 0 ) {
-               snprintf(lbm_errdesc, MAX_ERR_LEN, "Can't open file '%s'", newfname);
-               goto err;
-       }
-
-       bufuse = bufsz = toread = ct = 0;
-       do {
-               errno = 0;
-               if ( bufuse == bufsz ) {
-                       char *tmp = realloc(buf, bufsz+BUFSIZ);
-                       if ( !tmp ) goto err;
-                       buf = tmp;
-                       bufsz += BUFSIZ;
-               }
-               toread = bufsz - bufuse;
-               if ( (ct = read(fhnd, buf+bufuse, toread)) < 0 ) {
-                       if ( errno == EINTR ) continue;
-                       snprintf(lbm_errdesc, MAX_ERR_LEN, "Can't read file '%s'", newfname);
-                       goto err;
-               }
-               if ( ct == 0 ) break;
-               bufuse += ct;
-       } while ( ct == toread );
-       close(fhnd);
-
-       if ( !(*fname = strdup(ent->d_name)) ) goto err;
-       buf[bufuse] = 0;
-       *msg = buf;
-       return 1;
-
-
-err:
-       if ( buf ) free(buf);
-
-       return -1;
-}
diff --git a/org.glite.lbjp-common.server-bones/.cvsignore b/org.glite.lbjp-common.server-bones/.cvsignore
deleted file mode 100644 (file)
index 378eac2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-build
diff --git a/org.glite.lbjp-common.server-bones/Makefile b/org.glite.lbjp-common.server-bones/Makefile
deleted file mode 100644 (file)
index 4bfdffd..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-# defaults
-top_srcdir=..
-stagedir=.
-globalprefix=glite
-lbutilsprefix=lbu
-package=glite-lb-server-bones
-version=0.0.1
-PREFIX=/opt/glite
-
-CC=gcc
-
--include Makefile.inc
--include ../project/version.properties
-
-VPATH=${top_srcdir}/src:${top_srcdir}/examples
-
-DEBUG:=-g -O0 -Wall
-CFLAGS:= ${DEBUG} -I${top_srcdir}/interface -D_GNU_SOURCE
-LDFLAGS:=
-
-ifdef LB_PROF
-       CFLAGS:= ${CFLAGS} -pg -g
-       LDFLAGS:= ${LDFLAGS} -pg
-endif
-
-COMPILE:=libtool --mode=compile ${CC} ${CFLAGS}
-LINK:=libtool --mode=link ${CC} -rpath ${stagedir}/lib ${LDFLAGS} 
-INSTALL:=libtool --mode=install install
-
-STATICLIB:=libglite_lbu_server_bones.a
-LTLIB:=libglite_lbu_server_bones.la
-
-OBJS:=srvbones.o
-LOBJS:=${OBJS:.o=.lo}
-
-HDRS:=srvbones.h
-
-default all: compile
-
-compile: ${STATICLIB} ${LTLIB} example
-
-${STATICLIB}: ${OBJS}
-       ar crv $@ ${OBJS}
-       ranlib $@
-
-${LTLIB}: ${LOBJS}
-       ${LINK} -o $@ ${LOBJS}
-
-stage: compile
-       $(MAKE) install PREFIX=${stagedir} DOSTAGE=yes
-
-check:
-       -echo "No unit tests so far."
-
-example: srv_example cnt_example
-
-srv_example: srv_example.o
-       ${LINK} -o $@ ${LTLIB} srv_example.o
-
-cnt_example: cnt_example.o
-       ${LINK} -o $@ cnt_example.o
-
-doc:
-
-install:
-       mkdir -p ${PREFIX}/include/${globalprefix}/${lbutilsprefix}
-       mkdir -p ${PREFIX}/lib
-       ${INSTALL} -m 644 ${LTLIB} ${PREFIX}/lib
-       ${INSTALL} -m 644 ${STATICLIB} ${PREFIX}/lib ; \
-       cd ${top_srcdir}/interface && install -m 644 ${HDRS} ${PREFIX}/include/${globalprefix}/${lbutilsprefix}
-
-clean:
-       rm -rvf *.o *.lo .libs lib* srv_example cnt_example
-       rm -rvf log.xml project/ rpmbuild/ RPMS/ tgz/
-
-%.o: %.c
-       ${COMPILE} -c $<
diff --git a/org.glite.lbjp-common.server-bones/configure b/org.glite.lbjp-common.server-bones/configure
deleted file mode 100755 (executable)
index 455145c..0000000
+++ /dev/null
@@ -1,692 +0,0 @@
-#!/usr/bin/perl
-
-# WARNING: Don't edit this file unless it is the master copy in org.glite.lb
-#
-# For the purpose of standalone builds of lb/jobid/lbjp-common components
-# it is copied on tagging 
-
-# $Header$
-
-use Getopt::Long;
-
-my $pwd = `pwd`; chomp $pwd;
-my $prefix = $pwd.'/stage';
-my $stagedir;
-my $staged;
-my $module;
-my $thrflavour = 'gcc64dbgpthr';
-my $nothrflavour = 'gcc64dbg';
-my $mode = 'build';
-my $help = 0;
-my $listmodules;
-my $version;
-my $output;
-my $lb_tag = '';
-my $lbjp_tag = '';
-my $jp_tag = '';
-my $sec_tag = '';
-my $jobid_tag = '';
-
-my @nodes = qw/client server logger utils doc ws-test db jpprimary jpindex jpclient/;
-my %enable_nodes;
-my %disable_nodes;
-
-my %extern_prefix = (
-       cares => '/opt/c-ares',
-       classads => '/opt/classads',
-       cppunit => '/usr',
-       expat => '/usr',
-       globus => '/opt/globus',
-       jglobus => '/opt/globus',
-       gsoap => '/usr',
-       mysql => '/usr',
-       'mysql-devel' => '',
-       voms => '/opt/glite',
-       gridsite => '/opt/glite',
-       lcas => '/opt/glite',
-       ant => '/usr',
-       jdk => '/usr',
-       libtar => '/usr',
-);
-
-my %jar = (
-       'commons-codec' => '/usr/share/java/commons-codec-1.3.jar',
-);
-
-
-my %glite_prefix;
-my %need_externs;
-my %need_externs_type;
-my %need_jars;
-my %extrafull;
-my %extranodmod;
-my %deps;
-my %deps_type;
-my %topbuild;
-
-my %lbmodules = (
-       'lb' => [ qw/client common doc logger server state-machine types utils ws-interface ws-test/], 
-       'security' => [qw/gss gsoap-plugin/],
-       'lbjp-common' => [qw/db maildir server-bones trio jp-interface/],
-       'jobid' => [qw/api-c api-cpp/],
-       'jp' => [ qw/client doc index primary server-common ws-interface/ ],
-       );
-
-
-my @opts = (
-       'prefix=s' => \$prefix,
-       'staged=s' => \$staged,
-       'module=s' => \$module,
-       'thrflavour=s' => \$thrflavour,
-       'nothrflavour=s' => \$nothrflavour,
-       'mode=s' => \$mode,
-       'listmodules=s' => \$listmodules,
-       'version=s' => \$version,
-       'output=s' => \$output,
-       'stage=s' => \$stagedir,
-       'lb-tag=s' => \$lb_tag,
-       'lbjp-common-tag=s' => \$lbjp_tag,
-       'jp-tag=s' => \$jp_tag,
-       'security-tag=s' => \$sec_tag,
-       'jobid-tag=s' => \$jobid_tag,
-       'help' => \$help,
-);
-
-for (@nodes) {
-       $enable_nodes{$_} = 0;
-       $disable_nodes{$_} = 0;
-       
-       push @opts,"disable-$_",\$disable_nodes{$_};
-       push @opts,"enable-$_",\$enable_nodes{$_};
-}
-
-push @opts,"with-$_=s",\$extern_prefix{$_} for keys %extern_prefix;
-push @opts,"with-$_=s",\$jar{$_} for keys %jar;
-
-my @keeparg = @ARGV;
-
-GetOptions @opts or die "Errors parsing command line\n";
-
-$extern_prefix{'mysql-devel'}=$extern_prefix{mysql} if $extern_prefix{'mysql-devel'} eq '';
-
-if ($help) { usage(); exit 0; }
-
-if ($listmodules) {
-       my @m = map "org.glite.$listmodules.$_",@{$lbmodules{$listmodules}};
-       print "@m\n";
-       exit 0;
-}
-
-warn "$0: --version and --output make sense only in --mode=etics\n"
-       if ($version || $output) && $mode ne 'etics';
-
-my $en;
-for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; }
-
-my $dis;
-for (keys %disable_nodes) { $dis = 1 if $disable_nodes{$_}; }
-
-die "--enable-* and --disable-* are mutually exclusive\n"
-       if $en && $dis;
-
-die "--module cannot be used with --enable-* or --disable-*\n"
-       if $module && ($en || $dis);
-
-die "$module: unknown module\n" if $module && ! grep $module,@{$lbmodules{lb}},@{$lbmodules{security}},{$lbmodules{jp}};
-
-if ($dis) {
-       for (@nodes) {
-               $enable_nodes{$_} = 1 unless $disable_nodes{$_};
-       }
-}
-
-if (!$en && !$dis) { $enable_nodes{$_} = 1 for (@nodes) } ;
-
-for (keys %enable_nodes) { delete $enable_nodes{$_} unless $enable_nodes{$_}; }
-
-$stagedir = $prefix unless $stagedir;
-
-if ($mode eq 'build') {
-       print "Writing config.status\n";
-       open CONF,">config.status" or die "config.status: $!\n";
-       print CONF "$0 @keeparg\n";
-       close CONF;
-}
-
-
-my @modules;
-my %aux;
-
-if ($module) {
-#      push @modules,split(/[,.]+/,$module);
-       push @modules,$module;
-}
-else {
-       @modules = map(($extranodmod{$_} ? $extranodmod{$_} : 'lb.'.$_),(keys %enable_nodes));
-       
-       my $n;
-
-       do {
-               local $"="\n";
-               $n = $#modules;
-               push @modules,(map @{$deps{$_}},@modules);
-
-               undef %aux; @aux{@modules} = (1) x ($#modules+1);
-               @modules = keys %aux;
-       } while ($#modules > $n);
-}
-
-@aux{@modules} = (1) x ($#modules+1);
-delete $aux{$_} for (split /,/,$staged);
-@modules = keys %aux;
-
-mode_build() if $mode eq 'build';
-mode_checkout() if $mode eq 'checkout';
-mode_etics($module) if $mode eq 'etics';
-
-sub mode_build {
-       print "\nBuilding modules: @modules\n";
-       
-       my @ext = map @{$need_externs{$_}},@modules;
-       my @myjars = map @{$need_jars{$_}},@modules;
-       undef %aux; @aux{@ext} = 1;
-       @ext = keys %aux;
-       undef %aux; @aux{@myjars} = (1) x ($#myjars+1);
-       @myjars = keys %aux;
-       
-       print "\nRequired externals:\n";
-       print "\t$_: $extern_prefix{$_}\n" for @ext;
-       print "\t$_: $jar{$_}\n" for @myjars;
-       print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n";
-       
-       mkinc($_) for @modules;
-       
-       print "Creating Makefile\n";
-       
-       open MAK,">Makefile" or die "Makefile: $!\n";
-       
-       print MAK "all: @modules\n\nclean:\n";
-       
-       for (@modules) {
-               my $full = full($_);
-               my $build = $topbuild{$_} ? '': '/build';
-               print MAK "\tcd $full$build && \${MAKE} clean\n"
-       }
-       
-       print MAK "\ndistclean:\n";
-       
-       for (@modules) {
-               my $full = full($_);
-               print MAK $topbuild{$_} ?
-                       "\tcd $full$build && \${MAKE} distclean\n" :
-                       "\trm -rf $full$build\n"
-       }
-       
-       print MAK "\n";
-       
-       for (@modules) {
-               my %ldeps; undef %ldeps;  
-               @ldeps{@{$deps{$_}}} = 1;
-               for my $x (split /,/,$staged) { delete $ldeps{$x}; }
-               my @dnames = $module ? () : keys %ldeps;
-       
-               my $full = full($_);
-               my $build = $topbuild{$_} ? '': '/build';
-       
-               print MAK "$_: @dnames\n\tcd $full$build && \${MAKE} && \${MAKE} install\n\n";
-       }
-       
-       close MAK;
-}
-       
-sub mode_checkout() {
-       for (@modules) {
-               my $module = $_;
-               my $tag = "";
-               if ($lb_tag){
-                       for (@{$lbmodules{lb}}){
-                               if ("lb.".$_ eq $module){
-                                       $tag = '-r '.$lb_tag;
-                               }
-                       }       
-               }
-               if ($lbjp_tag){
-                       for (@{$lbmodules{'lbjp-common'}}){
-                               if ("lbjp-common.".$_ eq $module){
-                                        $tag = '-r '.$lbjp_tag;
-                                }
-                       }
-               }
-               if ($jp_tag){
-                       for (@{$lbmodules{'jp'}}){
-                               if ("jp.".$_ eq $module){
-                                        $tag = '-r '.$jp_tag;
-                               }
-                        }
-               }
-               if ($sec_tag){
-                       for (@{$lbmodules{security}}){
-                               if ("security.".$_ eq $module){
-                                        $tag = '-r '.$sec_tag;
-                                }
-                       }
-               }
-               if ($jobid_tag){
-                       for (@{$lbmodules{jobid}}){
-                               if ("jobid.".$_ eq $module){
-                                        $tag = '-r '.$jobid_tag;
-                                }
-                       }
-               }
-               #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
-               #       print "found";
-               #}
-               $_ = full($_);
-               print "\n*** Checking out $_\n";
-               system("cvs checkout  $tag $_") == 0 or die "cvs checkout $tag $_: $?\n";
-       }
-}
-
-BEGIN{
-%need_externs_aux = (
-       'lb.client' => [ qw/cppunit:B classads/ ],
-       'lb.client-java' => [ qw/ant:B jglobus jdk:B/ ],
-       'lb.common' => [ qw/expat cppunit:B classads/ ],
-       'lb.doc' => [],
-       'lb.logger' => [ qw/cppunit:B/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql cppunit:B gsoap:B classads voms lcas gridsite/ ],
-       'lb.state-machine' => [ qw/classads/ ],
-       'lb.utils' => [ qw/cppunit:B/ ],
-       'lb.ws-interface' => [],
-       'lb.ws-test' => [ qw/gsoap:B/ ],
-       'lb.types' => [ qw// ],
-       'lbjp-common.db' => [ qw/mysql:R mysql-devel:B/ ],
-       'lbjp-common.maildir' => [ qw// ],
-       'lbjp-common.server-bones' => [ qw// ],
-       'lbjp-common.trio' => [ qw/cppunit:B/ ],
-       'lbjp-common.jp-interface' => [ qw/cppunit:B/ ],
-       'security.gss' =>  [ qw/globus_essentials:R globus:B cares cppunit:B/ ],
-       'security.gsoap-plugin' =>  [ qw/cppunit:B globus_essentials:R globus:B cares gsoap:B/ ],
-       'jobid.api-c' =>  [ qw/cppunit:B/ ],
-       'jobid.api-cpp' =>  [ qw/cppunit:B/ ],
-       'jobid.api-java' =>  [ qw/ant:B jdk:B/ ],
-       'jp.client' => [ qw/gsoap libtar globus_essentials:R globus:B/ ],
-        'jp.doc' => [],
-        'jp.index' => [ qw/gsoap globus_essentials:R globus:B/ ],
-        'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
-        'jp.server-common' => [],
-        'jp.ws-interface' => [],
-);
-
-for my $ext (keys %need_externs_aux) {
-       for (@{$need_externs_aux{$ext}}) {
-               /([^:]*)(?::(.*))?/;
-               push @{$need_externs{$ext}},$1;
-               my $type = $2 ? $2 : 'BR';
-               $need_externs_type{$ext}->{$1} = $type;
-       }
-}
-
-%need_jars = (
-       'jobid.api-java' => [ qw/commons-codec/ ],
-);
-
-for my $jar (keys %need_jars) {
-       for (@{$need_jars{$jar}}) {
-               $need_externs_type{$jar}->{$_} = 'BR';  # XXX
-       }
-}
-
-%deps_aux = (
-       'lb.client' => [ qw/
-               lb.types:B lb.common
-               lbjp-common.trio
-               jobid.api-cpp jobid.api-c
-               security.gss
-       / ],
-       'lb.client-java' => [ qw/
-               lb.types:B
-               jobid.api-java
-       / ],
-       'lb.common' => [ qw/
-               jobid.api-cpp jobid.api-c
-               lb.types:B lbjp-common.trio security.gss
-       / ],
-       'lb.doc' => [ qw/lb.types:B/ ],
-       'lb.logger' => [ qw/
-               lbjp-common.trio
-               jobid.api-c
-               lb.common
-               security.gss
-       / ],
-       'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
-               lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir
-               jobid.api-c
-               security.gsoap-plugin security.gss
-       / ],
-       'lb.state-machine' => [ qw/lb.types:B lb.common lbjp-common.jp-interface security.gss/ ],
-       'lb.utils' => [ qw/
-               lbjp-common.jp-interface
-               jobid.api-c
-               lbjp-common.trio lbjp-common.maildir
-               lb.client lb.state-machine
-       / ],
-       'lb.ws-test' => [ qw/security.gsoap-plugin lb.ws-interface/ ],
-       'lb.ws-interface' => [ qw/lb.types:B/ ],
-       'lb.types' => [ qw// ],
-       'lbjp-common.db' => [ qw/lbjp-common.trio/ ],
-       'lbjp-common.maildir' => [ qw// ],
-       'lbjp-common.server-bones' => [ qw// ],
-       'lbjp-common.trio' => [ qw// ],
-       'security.gss' =>  [ qw// ],
-       'security.gsoap-plugin' =>  [ qw/security.gss/ ],
-       'jobid.api-c' =>  [ qw// ],
-       'jobid.api-cpp' =>  [ qw/jobid.api-c/ ],
-       'jobid.api-java' =>  [ qw// ],
-
-       'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ],
-
-       'jp.client' => [ qw/
-                jp.ws-interface
-                lbjp-common.jp-interface lbjp-common.maildir
-                jobid.api-c
-                security.gsoap-plugin
-        / ],
-       'jp.doc' => [ qw// ],
-       'jp.index' => [ qw/
-                jp.server-common jp.ws-interface
-                lbjp-common.jp-interface lbjp-common.trio lbjp-common.db lbjp-common.server-bones
-                security.gsoap-plugin
-        / ],
-       'jp.primary' => [ qw/
-                jobid.api-c
-                jp.server-common jp.ws-interface
-                lb.state-machine
-                lbjp-common.jp-interface lbjp-common.trio lbjp-common.db lbjp-common.server-bones
-                security.gsoap-plugin
-        / ],
-       'jp.server-common' => [ qw/ 
-                lbjp-common.jp-interface lbjp-common.db
-        / ],
-       'jp.ws-interface' => [ qw// ],
-);
-
-for my $ext (keys %deps_aux) {
-       for (@{$deps_aux{$ext}}) {
-               /([^:]*)(?::(.*))?/;
-               push @{$deps{$ext}},$1;
-               my $type = $2 ? $2 : 'BR';
-               $deps_type{$ext}->{$1} = $type;
-       }
-}
-
-
-%extrafull = ( gridsite=>'org.gridsite.core');
-
-#( java => 'client-java' );
-%extranodmod = (
-       db => 'lbjp-common.db',
-       jpprimary => 'jp.primary',
-       jpindex => 'jp.index',
-       jpclient => 'jp.client',
-);
-
-my @t = qw/lb.client-java jobid.api-java lb.types/;
-@topbuild{@t} = (1) x ($#t+1);
-}
-
-sub full
-{
-       my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
-}
-
-sub mkinc
-{
-       my %aux;
-       undef %aux;
-       my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java
-security.gss security.gsoap-plugin
-jobid.api-c jobid.api-cpp jobid.api-java
-lbjp-common.db lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface
-jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-/;
-       @aux{@m} = (1) x ($#m+1);
-
-       my $short = shift;
-       my $full = full $short;
-
-       unless ($aux{$short}) {
-               print "Makefile.inc not needed in $full\n";
-               return;
-       }
-
-       my $build = '';
-       
-       unless ($topbuild{$_}) {
-               $build = '/build';
-               unless (-d "$full/build") {
-                       mkdir "$full/build" or die "mkdir $full/build: $!\n";
-               }
-               unlink "$full/build/Makefile";
-               symlink "../Makefile","$full/build/Makefile" or die "symlink ../Makefile $full/build/Makefile: $!\n";
-       }
-
-       open MKINC,">$full$build/Makefile.inc"
-               or die "$full$build/Makefile.inc: $!\n";
-
-       print "Creating $full$build/Makefile.inc\n";
-
-       print MKINC qq{
-PREFIX = $prefix
-stagedir = $stagedir
-thrflavour = $thrflavour
-nothrflavour = $nothrflavour
-};
-
-       for (@{$need_externs{$short}}) {
-               print MKINC "${_}_prefix = $extern_prefix{$_}\n"
-       }
-
-       for (@{$need_jars{$short}}) {
-               print MKINC "${_}_jar = $jar{$_}\n"
-       }
-
-       my $need_gsoap = 0;
-       for (@{$need_externs{$short}})  { $need_gsoap = 1 if $_ eq 'gsoap'; }
-
-       print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
-
-       close MKINC;
-}
-
-my %etics_externs;
-my %etics_projects;
-BEGIN{
-       %etics_externs = (
-               globus_essentials=>'vdt_globus_essentials',
-               globus=>'globus',
-               cares=>'c-ares',
-               voms=>'org.glite.security.voms-api-cpp',
-               gridsite=>'org.gridsite.shared',
-               lcas=>'org.glite.security.lcas',
-       );
-       %etics_projects = (
-               vdt=>[qw/globus globus_essentials/],
-               'org.glite'=>[qw/voms gridsite lcas/],
-       );
-};
-
-sub mode_etics {
-       $fmod = shift;
-
-       die "$0: --module required with --etics\n" unless $fmod;
-       
-       my ($subsys,$module) = split /\./,$fmod;
-
-       my ($major,$minor,$rev,$age);
-
-       if ($version) {
-               $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/;
-               ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
-       }
-       else { 
-               open V,"org.glite.$subsys.$module/project/version.properties"
-                       or die "org.glite.$subsys.$module/project/version.properties: $!\n";
-       
-               while ($_ = <V>) {
-                       chomp;
-                       ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
-               }
-               close V;
-       }
-
-       my @copts = ();
-       my %ge;
-       @ge{@{$etics_projects{'org.glite'}}} = (1) x ($#{$etics_projects{'org.glite'}}+1);
-
-       for (@{$need_externs{"$subsys.$module"}}) {
-           if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
-           }
-       }
-
-       for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-
-               push @copts,"--with-$_ \${$eext.location}/$_*.jar";
-       }
-
-
-       my $conf = "glite-$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
-       my $file = $output ? $output : "$conf.ini";
-       open C,">$file" or die "$file: $!\n";
-
-       my $buildroot = $topbuild{"$subsys.$module"} ? '' : "build.root = build\n";
-
-       my $confdir = $topbuild{"$subsys.$module"} ? '..' : '../..';
-
-       print STDERR "Writing $file\n";
-       print C qq{
-[Configuration-$conf]
-profile = None
-moduleName = org.glite.$subsys.$module
-displayName = $conf
-description = org.glite.$subsys.$module
-projectName = org.glite
-age = $age
-deploymentType = None
-tag = $conf
-version = $major.$minor.$rev
-path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz
-
-[Platform-default:VcsCommand]
-displayName = None
-description = None
-tag = cvs -d \${vcsroot} tag -R \${tag} \${moduleName}
-branch = None
-commit = None
-checkout = cvs -d \${vcsroot} co -r \${tag} \${moduleName}
-
-[Platform-default:BuildCommand]
-postpublish = None
-packaging = None
-displayName = None
-description = None
-doc = None
-prepublish = None
-publish = None
-compile = make
-init = None
-install = make install
-clean = make clean
-test = make check
-configure = cd $confdir && \${moduleName}/configure --thrflavour=\${globus.thr.flavor} --nothrflavour=\${globus.nothr.flavor} --prefix=\${prefix} --stage=\${stageDir} --module $subsys.$module @copts
-checkstyle = None
-
-[Platform-default:Property]
-$buildroot
-
-[Platform-default:DynamicDependency]
-
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
-                       }
-               }
-
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
-               print C "$proj|$eext = $type\n";
-       }
-
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "org.glite|org.glite.$_ = $type\n";
-       }
-
-       close C;
-}
-
-sub gsoap_version {
-       local $_;
-       my $gsoap_version;
-       open S,"$extern_prefix{gsoap}/bin/soapcpp2 -v 2>&1 |" or die "$extern_prefix{gsoap}/bin/soapcpp2: $!\n";
-
-       while ($_ = <S>) {
-               chomp;
-
-               $gsoap_version = $1 if /The gSOAP Stub and Skeleton Compiler for C and C\+\+ ([.[:digit:][:alpha:]]+)$/;
-       }
-       close S;
-       return $gsoap_version;
-}
-
-
-sub usage {
-       my @ext = keys %extern_prefix;
-       my @myjars, keys %jar;
-
-       print STDERR qq{
-usage: $0 options
-
-General options (defaults in []):
-  --prefix=PREFIX              destination directory [./stage]
-  --staged=module,module,...   what is already in PREFIX (specify without org.glite.)
-  --thrflavour=flavour
-  --nothrflavour=flavour       threaded and non-treaded flavours [gcc64dbgpthr,gcc64dbg]
-  --listmodules=subsys          list modules of a subsystem
-  
-Mode of operation:
-  --mode={checkout|build|etics}        what to do [build]
-  
-What to build:
-  --module=module              build this module only (mostly in-Etics operation)
-  --enable-NODE                        build this "node" (set of modules) only. Available nodes are
-                                       @{$lbmodules{lb}},@{$lbmodules{security}}
-  --disable-NODE               don't build this node
-  --lb-tag=tag                 checkout LB modules with specific tag
-  --jp-tag=tag                 checkout JP modules with specific tag
-  --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
-  --security-tag=tag           checkout security modules with specific tag
-  --jobid-tag=tag              checkout jobid modules with specific tag
-
-Dependencies:
-  --with-EXTERNAL=PATH         where to look for an external. Required externals
-                               (not all for all modules) are:
-                                       @ext
-  --with-JAR=JAR               where to look for jars. Required jars are:
-                                       @myjars
-                               Summary of what will be used is always printed
-
-};
-
-}
diff --git a/org.glite.lbjp-common.server-bones/examples/cnt_example.c b/org.glite.lbjp-common.server-bones/examples/cnt_example.c
deleted file mode 100644 (file)
index 80b6af3..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <getopt.h>
-#include <unistd.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#ifndef dprintf
-#define dprintf(x) { if (debug) printf x; fflush(stdout); }
-#endif
-
-#define DEF_MSG                        "Test message\n"
-#define DEF_PORT               9999
-
-static struct option opts[] = {
-       { "help",       no_argument,            NULL, 'h'},
-       { "debug",      no_argument,            NULL, 'd'},
-       { "msg",        required_argument,      NULL, 'm'},
-       { "port",       required_argument,      NULL, 'p'},
-       { "repeat",     required_argument,      NULL, 'r'},
-};
-
-int debug  = 0;
-int    port = DEF_PORT;
-char *msg = NULL;
-
-static int writen(int fd, char *ptr, int nbytes);
-static int readln(int fd, char *out);
-
-static void usage(char *me)
-{
-       fprintf(stderr,
-                       "usage: %s [option]\n"
-                       "    -h, --help                 print this screen\n"
-                       "    -d, --debug                prints debug messages\n"
-                       "    -m, --msg <text>           message to send\n"
-                       "    -p, --port <num>           service port\n", me);
-}
-
-
-int main(int argc, char **argv)
-{
-       struct sockaddr_in      addr;
-       char                            buff[512],
-                                          *me;
-       int                                     opt,
-                                               sock,
-                                               n;
-       int     repeat = 1;
-
-       me = strrchr(argv[0], '/');
-       if ( me ) me++; else me = argv[0];
-       while ( (opt = getopt_long(argc, argv,"p:m:hdr:", opts, NULL)) != EOF )
-       {
-               switch ( opt )
-               {
-               case 'm':
-                       msg = strdup(optarg);
-                       break;
-               case 'p':
-                       port = atoi(optarg);
-                       break;
-               case 'd': debug = 1; break;
-               case 'r': repeat = atoi(optarg); break;
-               case 'h': usage(me); return 0;
-               case '?': usage(me); return 1;
-               }
-       }
-
-       bzero((char *) &addr, sizeof(addr));
-       addr.sin_family = AF_INET;
-       addr.sin_addr.s_addr = inet_addr("127.0.0.1");
-       addr.sin_port = htons(port);
-       if ( (sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
-       {
-               perror("socket");
-               exit(1);
-       }
-       if ( connect(sock, (struct sockaddr *) &addr, sizeof(addr)) < 0 )
-       {
-               perror("connect");
-               exit(1);
-       }
-       n = strlen(msg? msg: DEF_MSG);
-       for (;repeat; repeat--) {
-               if ( writen(sock, msg? msg: DEF_MSG, n) != n )
-               {
-                       dprintf(("error writing message\n"));
-                       exit(1);
-               }
-               printf("reply: "); fflush(stdout);
-               n = readln(sock, buff);
-               if ( n < 0 )
-               {
-                       perror("read() reply error");
-                       return 1;
-               }
-               writen(0, buff, n);
-       }
-       close(sock);
-
-       return 0;
-}
-
-int writen(int fd, char *ptr, int nbytes)
-{
-       int             nleft, nwritten;
-
-       nleft = nbytes;
-       dprintf(("start writing %d bytes\n", nbytes));
-       while ( nleft > 0 )
-       {
-               nwritten = write(fd, ptr, nleft);
-               dprintf(("written %d bytes", nwritten));
-               if ( nwritten <= 0 )
-                       return (nwritten);
-
-               nleft -= nwritten;
-               ptr += nwritten;
-               dprintf((" (left %d bytes)\n", nleft));
-       }
-
-       dprintf(("written %d bytes (return: %d)\n", nwritten, nbytes - nleft));
-       return (nbytes - nleft);
-}
-
-#define BUFFER_SZ                      512
-
-int readln(int fd, char *out)
-{
-       static char             buffer[BUFFER_SZ];
-       static char        *buffer_end = buffer;
-       int                             n;
-
-
-       dprintf(("reading line\n"));
-       while ( 1 ) {
-               if ( buffer_end - buffer ) {
-                       /*      buffer contains data
-                        */
-                       char       *endl;
-
-                       dprintf(("nonempty buffer\n"));
-                       if ( (endl = memchr(buffer, '\n', buffer_end-buffer)) ) {
-                               int             linesz = endl-buffer+1;
-
-                               dprintf(("using buffer data\n"));
-                               memcpy(out, buffer, linesz);
-                               if ( endl+1 != buffer_end )
-                                       memmove(buffer, endl+1, buffer_end-endl-1);
-                               buffer_end -= linesz;
-                               return linesz;
-                       }
-               }
-               dprintf(("reading...\n"));
-               n = read(fd, buffer_end, BUFFER_SZ-(buffer_end-buffer));
-               if ( n < 0 ) {
-                       if ( errno == EAGAIN ) continue;
-                       dprintf(("reading error\n"));
-                       return n;
-               }
-               else if ( n == 0 ) {
-                       int             ret = buffer_end-buffer;
-                       dprintf(("end of reading - returning %d bytes\n", ret));
-                       memcpy(out, buffer, ret);
-                       buffer_end = buffer;
-                       return ret;
-               }
-
-               dprintf(("read %d bytes\n", n));
-               buffer_end += n;
-       }
-
-       return 0;
-}
diff --git a/org.glite.lbjp-common.server-bones/examples/srv_example.c b/org.glite.lbjp-common.server-bones/examples/srv_example.c
deleted file mode 100644 (file)
index 0a19ab4..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <unistd.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include "srvbones.h"
-
-#ifndef dprintf
-#define dprintf(x) { if (debug) printf x; fflush(stdout); }
-#endif
-
-#define sizofa(a)      (sizeof(a)/sizeof((a)[0]))
-
-int debug  = 1;
-
-static int writen(int fd, char *ptr, int nbytes);
-static int readln(int fd, char *out, int nbytes);
-
-static int new_conn(int, struct timeval *, void *);
-static int reject(int);
-static int disconnect(int, struct timeval *, void *);
-
-static int echo(int, struct timeval *, void *);
-static int upper_echo(int, struct timeval *, void *);
-
-#define ECHO_PORT                      9999
-#define UPPER_ECHO_PORT                9998
-
-#define SRV_ECHO                       0
-#define SRV_UPPER_ECHO         1
-
-static struct glite_srvbones_service service_table[] = {
-       { "Echo Service",               -1, new_conn, echo, reject, disconnect },
-       { "Upper Echo Service", -1, new_conn, upper_echo, reject, disconnect }
-};
-
-int main(void)
-{
-       struct sockaddr_in      myaddr;
-
-
-       if (   ((service_table[SRV_ECHO].conn = socket(AF_INET, SOCK_STREAM, 0)) == -1)
-               || ((service_table[SRV_UPPER_ECHO].conn = socket(AF_INET, SOCK_STREAM, 0)) == -1) )
-       {
-               perror("socket");
-               exit(1);
-       }
-
-       bzero((char *) &myaddr, sizeof(myaddr));
-       myaddr.sin_family = AF_INET;
-       myaddr.sin_addr.s_addr = htonl(INADDR_ANY);
-       myaddr.sin_port = htons(ECHO_PORT);
-       if ( bind(service_table[SRV_ECHO].conn, (struct sockaddr *)&myaddr, sizeof(myaddr)) == -1 )
-       {
-               perror("bind");
-               exit(1);
-       }
-       bzero((char *) &myaddr, sizeof(myaddr));
-       myaddr.sin_family = AF_INET;
-       myaddr.sin_addr.s_addr = htonl(INADDR_ANY);
-       myaddr.sin_port = htons(UPPER_ECHO_PORT);
-       if ( bind(service_table[SRV_UPPER_ECHO].conn, (struct sockaddr *)&myaddr, sizeof(myaddr)) == -1 )
-       {
-               perror("bind");
-               exit(1);
-       }
-
-       if (   listen(service_table[SRV_ECHO].conn, 10)
-               || listen(service_table[SRV_UPPER_ECHO].conn, 10) )
-       {
-               perror("listen()");
-               exit(1);
-       }
-
-
-       glite_srvbones_set_param(GLITE_SBPARAM_SLAVES_COUNT, 1);
-       glite_srvbones_run(NULL, service_table, sizofa(service_table), 1);
-
-
-       return 0;
-}
-
-int upper_echo(int fd, struct timeval *to, void *data)
-{
-       int             n, i;
-       char    line[80];
-
-       n = readln(fd, line, 80);
-       if ( n < 0 )
-       {
-               perror("read() message");
-               return n;
-       }
-       else if ( n == 0 )
-               return ENOTCONN;
-
-       for ( i = 0; i < n; i++ )
-               line[i] = toupper(line[i]);
-
-       if ( writen(fd, line, n) != n )
-       {
-               perror("write() message back");
-               return -1;
-       }
-
-       return 0;
-}
-
-int echo(int fd, struct timeval *to, void *data)
-{
-       int             n;
-       char    line[80];
-
-       n = readln(fd, line, 80);
-       dprintf(("%d bytes read\n", n));
-       if ( n < 0 )
-       {
-               perror("read() message");
-               return n;
-       }
-       else if ( n == 0 )
-               return ENOTCONN;
-
-       if ( writen(fd, line, n) != n )
-       {
-               perror("write() message back");
-               return -1;
-       }
-
-       return 0;
-}
-
-int new_conn(int conn, struct timeval *to, void *cdata)
-{
-       dprintf(("srv-bones example: new_conn handler\n"));
-       return 0;
-}
-
-int reject(int conn)
-{
-       dprintf(("srv-bones example: reject handler\n"));
-       return 0;
-}
-
-int disconnect(int conn, struct timeval *to, void *cdata)
-{
-       dprintf(("srv-bones example: disconnect handler\n"));
-       return 0;
-}
-
-int writen(int fd, char *ptr, int nbytes)
-{
-       int             nleft, nwritten;
-
-       nleft = nbytes;
-       dprintf(("start writing %d bytes\n", nbytes));
-       while ( nleft > 0 ) {
-               nwritten = write(fd, ptr, nleft);
-               dprintf(("written %d bytes", nwritten));
-               if ( nwritten <= 0 )
-                       return (nwritten);
-
-               nleft -= nwritten;
-               ptr += nwritten;
-               dprintf((" (left %d bytes)\n", nleft));
-       }
-
-       dprintf(("written %d bytes (return: %d)\n", nwritten, nbytes - nleft));
-       return (nbytes - nleft);
-}
-
-#define BUFFER_SZ                      512
-
-int readln(int fd, char *out, int nbytes)
-{
-       static char             buffer[BUFFER_SZ];
-       static char        *buffer_end = buffer;
-       int                             n;
-
-
-       dprintf(("reading line\n"));
-       while ( 1 ) {
-               if ( buffer_end - buffer ) {
-                       /*      buffer contains data
-                        */
-                       char       *endl;
-
-                       dprintf(("nonempty buffer\n"));
-                       if ( (endl = memchr(buffer, '\n', buffer_end-buffer)) ) {
-                               int             linesz = endl-buffer+1;
-
-                               memcpy(out, buffer, linesz);
-                               if ( endl+1 != buffer_end ) memmove(buffer, endl+1, buffer_end-endl-1);
-                               buffer_end -= linesz;
-                               return linesz;
-                       }
-               }
-
-               dprintf(("reding...\n"));
-               n = read(fd, buffer_end, BUFFER_SZ-(buffer_end-buffer));
-               if ( n < 0 ) {
-                       if ( errno == EAGAIN ) n = 0;
-                       else return n;
-               }
-               if ( n == 0 ) {
-                       int             ret = buffer_end-buffer;
-                       dprintf(("end of reading - returning %d bytes\n", ret));
-                       memcpy(out, buffer, ret);
-                       buffer_end = buffer;
-                       return ret;
-               }
-               dprintf(("read %d bytes\n", n));
-
-               buffer_end += n;
-       }
-
-       return 0;
-}
diff --git a/org.glite.lbjp-common.server-bones/interface/srvbones.h b/org.glite.lbjp-common.server-bones/interface/srvbones.h
deleted file mode 100644 (file)
index 31ab16f..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-#ifndef __ORG_GLITE_LB_SERVER_BONES_BONES_H__
-#define __ORG_GLITE_LB_SERVER_BONES_BONES_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef enum _glite_srvbones_param_t {
-       GLITE_SBPARAM_SLAVES_COUNT,             /**< number of slaves */ 
-       GLITE_SBPARAM_SLAVE_OVERLOAD,           /**< queue items per slave */
-       GLITE_SBPARAM_SLAVE_CONNS_MAX,          /**< commit suicide after that many connections */
-
-/* NULL for timeouts means infinity */
-       GLITE_SBPARAM_IDLE_TIMEOUT,             /**< keep idle connection that long (timeval) */
-       GLITE_SBPARAM_CONNECT_TIMEOUT,          /**< timeout for establishing a connection (timeval) */
-       GLITE_SBPARAM_REQUEST_TIMEOUT,          /**< timeout for a single request (timeval)*/
-} glite_srvbones_param_t;
-
-typedef int (*slave_data_init_hnd)(void **);
-
-struct glite_srvbones_service {
-       char    *id;                    /**< name of the service */
-       int     conn;                   /**< listening socket */
-
-/** Handler called by slave on a newly established connection, 
- * i.e. after accept(2).
- * \param[in] conn             the accepted connection
- * \param[inout] timeout       don't consume more, update with the remaining time
- * \param[inout] user_data     arbitrary user data passed among the functions
- */
-       int     (*on_new_conn_hnd)(     
-               int conn,               
-               struct timeval *timeout,
-               void *user_data
-       );
-
-
-/** Handler called by slave to serve each request.
-  * \param[in] conn            connection to work with
-  * \param[inout] timeout      don't consume more, update with the remaining time
-  * \param[inout] user_data    arbitrary user data passed among the functions
-  *
-  * \retval    0       OK, connection remains open
-  * \retval    ENOTCON terminated gracefully, bones will clean up
-  * \retval    >0      other POSIX errno, non-fatal error
-  * \retval    <0      fatal error, terminate slave
-  */
-       int     (*on_request_hnd)(
-                       int conn,
-                       struct timeval *timeout,
-                       void *user_data
-       );
-
-/** Handler called by master to reject connection on server overload.
-  * Should kick off the client quickly, not imposing aditional load
-  * on server or blocking long time.
-  */
-       int     (*on_reject_hnd)(int conn);
-
-/** Handler called by slave before closing the connection.
-  * Perform server-side cleanup, and terminate the connection gracefully
-  * if there is a way to do so (the disconnect is server-initiated).
-  * close(conn) is called by bones then.
-  * \param[in] conn            connection to work with
-  * \param[inout] timeout      don't consume more time
-  * \param[inout] user_data    arbitrary user data passed among the functions
-  */
-       int     (*on_disconnect_hnd)(
-               int conn,
-               struct timeval *timeout,
-               void *user_data
-       );
-};
-
-extern int glite_srvbones_set_param(glite_srvbones_param_t param, ...);
-
-
-/** Main server function. 
- * 
- * \param[in] slave_data_init_hnd      callback initializing user data on every slave
- */
-extern int glite_srvbones_run(
-       slave_data_init_hnd             slave_data_init,
-       struct glite_srvbones_service  *service_table,
-       size_t                          table_sz,
-       int                             dbg);
-
-/**
- * helper common function to daemonize server
- *
- * \returns 1 OK, 0 error writtten to stderr
- */
-int glite_srvbones_daemonize(const char *servername, const char *custom_pidfile, const char *custom_logfile);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __ORG_GLITE_LB_SERVER_BONES_BONES_H__ */
diff --git a/org.glite.lbjp-common.server-bones/project/ChangeLog b/org.glite.lbjp-common.server-bones/project/ChangeLog
deleted file mode 100644 (file)
index 1d25f18..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-1.0.0-2
-- initial version
-
-1.0.0-3
-- configure script update (globus flavors added to configure call)
-
-1.0.0-4
-- configure script update
-
diff --git a/org.glite.lbjp-common.server-bones/project/version.properties b/org.glite.lbjp-common.server-bones/project/version.properties
deleted file mode 100644 (file)
index 78dfc90..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# : /cvs/jra1mw/org.glite.lbjp-common.server-bones/project/version.properties,v 1.2 2009/01/21 10:44:34 zsustr Exp $
-module.version=1.0.0
-module.age=4
diff --git a/org.glite.lbjp-common.server-bones/src/srvbones.c b/org.glite.lbjp-common.server-bones/src/srvbones.c
deleted file mode 100644 (file)
index 047e26b..0000000
+++ /dev/null
@@ -1,753 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <sys/wait.h>
-#include <errno.h>
-#include <netdb.h>
-#include <assert.h>
-#include <syslog.h>
-#include <sys/time.h>
-#include <time.h>
-#include <stdarg.h>
-#include <signal.h>
-
-#include "srvbones.h"
-
-/* defaults for GLITE_SBPARAM_* */
-
-#define SLAVES_COUNT           5               /* default number of slaves */
-#define SLAVE_OVERLOAD         10              /* queue items per slave */
-#define SLAVE_REQS_MAX         500             /* commit suicide after that many connections */
-#define IDLE_TIMEOUT           30              /* keep idle connection that many seconds */
-#define CONNECT_TIMEOUT                5               /* timeout for establishing a connection */
-#define REQUEST_TIMEOUT                10              /* timeout for a single request */ 
-#define NEW_CLIENT_DURATION    10              /* how long a client is considered new, i.e. busy
-                                                  connection is not closed to serve other clients */
-
-#ifndef dprintf
-#define dprintf(x)                     { if (debug) printf x; }
-#endif
-
-#ifdef LB_PROF
-extern void _start (void), etext (void);
-#endif
-
-static int             running = 0;
-static int             debug = 0;
-static volatile int    die = 0,
-                       child_died = 0;
-static unsigned long   clnt_dispatched = 0,
-                       clnt_accepted = 0;
-
-static struct glite_srvbones_service   *services;
-static int                             services_ct;
-
-static int             set_slaves_ct = SLAVES_COUNT;
-static int             set_slave_overload = SLAVE_OVERLOAD;
-static int             set_slave_reqs_max = SLAVE_REQS_MAX;
-static struct timeval  set_idle_to = {IDLE_TIMEOUT, 0};
-static struct timeval  set_connect_to = {CONNECT_TIMEOUT, 0};
-static struct timeval  set_request_to = {REQUEST_TIMEOUT, 0};
-
-static int dispatchit(int, int, int);
-static int do_sendmsg(int, int, unsigned long, int);
-static int do_recvmsg(int, int *, unsigned long *, int *);
-static int check_timeout(struct timeval, struct timeval, struct timeval);
-static void catchsig(int);
-static void catch_chld(int sig);
-static int slave(int (*)(void **), int);
-
-static void glite_srvbones_set_slaves_ct(int);
-static void glite_srvbones_set_slave_overload(int);
-static void glite_srvbones_set_slave_conns_max(int);
-static void set_timeout(struct timeval *,struct timeval *);
-
-int glite_srvbones_set_param(glite_srvbones_param_t param, ...)
-{
-       va_list ap;
-
-       if ( running ) {
-               dprintf(("Attempting to set srv-bones parameter on running server"));
-               return -1;
-       }
-
-       va_start(ap, param);
-       switch ( param ) {
-       case GLITE_SBPARAM_SLAVES_COUNT:
-               glite_srvbones_set_slaves_ct(va_arg(ap,int)); break;
-       case GLITE_SBPARAM_SLAVE_OVERLOAD:
-               glite_srvbones_set_slave_overload(va_arg(ap,int)); break;
-       case GLITE_SBPARAM_SLAVE_CONNS_MAX:
-               glite_srvbones_set_slave_conns_max(va_arg(ap,int)); break;
-       case GLITE_SBPARAM_IDLE_TIMEOUT:
-               set_timeout(&set_idle_to,va_arg(ap,struct timeval *)); break;
-       case GLITE_SBPARAM_CONNECT_TIMEOUT:
-               set_timeout(&set_connect_to,va_arg(ap,struct timeval *)); break;
-       case GLITE_SBPARAM_REQUEST_TIMEOUT:
-               set_timeout(&set_request_to,va_arg(ap,struct timeval *)); break;
-       }
-       va_end(ap);
-
-       return 0;
-}
-
-int glite_srvbones_run(
-       slave_data_init_hnd                             slave_data_init,
-       struct glite_srvbones_service  *service_table,
-       size_t                                                  table_sz,
-       int                                                             dbg)
-{
-       struct sigaction        sa;
-       sigset_t                        sset;
-       int                                     sock_slave[2], i;
-       int             pstat;
-
-
-       assert(service_table);
-       assert(table_sz > 0);
-
-       services = service_table;
-       services_ct = table_sz;
-       debug = dbg;
-
-       setlinebuf(stdout);
-       setlinebuf(stderr);
-       dprintf(("Master pid %d\n", getpid()));
-
-       if ( socketpair(AF_UNIX, SOCK_STREAM, 0, sock_slave) )
-       {
-               perror("socketpair()");
-               return 1;
-       }
-
-       memset(&sa, 0, sizeof(sa)); assert(sa.sa_handler == NULL);
-       sa.sa_handler = catchsig;
-       sigaction(SIGINT, &sa, NULL);
-       sigaction(SIGTERM, &sa, NULL);
-
-       sa.sa_handler = catch_chld;
-       sigaction(SIGCHLD, &sa, NULL);
-
-       sa.sa_handler = SIG_IGN;
-       sigaction(SIGUSR1, &sa, NULL);
-       sigaction(SIGXFSZ, &sa, NULL);
-
-       sigemptyset(&sset);
-       sigaddset(&sset, SIGCHLD);
-       sigaddset(&sset, SIGTERM);
-       sigaddset(&sset, SIGINT);
-       sigprocmask(SIG_BLOCK, &sset, NULL);
-
-       for ( i = 0; i < set_slaves_ct; i++ )
-               slave(slave_data_init, sock_slave[1]);
-
-       while ( !die )
-       {
-               fd_set                  fds;
-               int                             ret, mx;
-               
-
-               FD_ZERO(&fds);
-               FD_SET(sock_slave[0], &fds);
-               for ( i = 0, mx = sock_slave[0]; i < services_ct; i++ )
-               {
-                       FD_SET(services[i].conn, &fds);
-                       if ( mx < services[i].conn ) mx = services[i].conn;
-               }
-
-               sigprocmask(SIG_UNBLOCK, &sset, NULL);
-               ret = select(mx+1, &fds, NULL, NULL, NULL);
-               sigprocmask(SIG_BLOCK, &sset, NULL);
-
-               if ( ret == -1 && errno != EINTR )
-               {
-                       if ( debug ) perror("select()");
-                       else syslog(LOG_CRIT,"select(): %m");
-
-                       return 1;
-               }
-
-               if ( child_died )
-               {
-                       int             pid;
-
-                       while ( (pid = waitpid(-1, &pstat, WNOHANG)) > 0 )
-                       {
-                               if (WIFEXITED(pstat)) {
-                                       dprintf(("[master] Slave %d exited with return code %d.\n", pid, WEXITSTATUS(pstat)));
-                                       if (WEXITSTATUS(pstat)) {
-                                               syslog(LOG_ERR, "Slave %d exited with return code %d.\n", pid, WEXITSTATUS(pstat));
-                                       }
-                               } 
-                               if (WIFSIGNALED(pstat)) {
-                                       dprintf(("[master] Slave %d terminated with signal %d.\n", pid, WTERMSIG(pstat)));
-                                       switch (WTERMSIG(pstat)) {
-                                               case SIGINT:
-                                               case SIGTERM:
-                                               case SIGUSR1: if (die) break;
-                                               default:
-                                                       syslog(LOG_ERR, "Slave %d terminated with signal %d.\n", pid, WTERMSIG(pstat));
-                                                       break;
-                                       }
-                               }
-                               if ( !die )
-                               {
-                                       int newpid = slave(slave_data_init, sock_slave[1]);
-                                       dprintf(("[master] Servus mortuus [%d] miraculo resurrexit [%d]\n", pid, newpid));
-                               }
-                       }
-                       child_died = 0;
-                       continue;
-               }
-
-               if ( die ) continue;
-
-               
-               if (FD_ISSET(sock_slave[0],&fds)) {
-                       /* slave accepted a request
-                        */
-                       unsigned long   a;
-
-                       if (    (recv(sock_slave[0], &a, sizeof(a), MSG_WAITALL) == sizeof(a))
-                                && (a <= clnt_dispatched)
-                                && (a > clnt_accepted || clnt_accepted > clnt_dispatched) )
-                               clnt_accepted = a;
-               }
-
-               for ( i = 0; i < services_ct; i++ )
-                       if (   FD_ISSET(services[i].conn, &fds)
-                               && dispatchit(sock_slave[0], services[i].conn ,i) )
-                               /* Be carefull!!!
-                                * This must break this for cykle but start the
-                                * while (!die) master cykle from the top also
-                                */
-                               break;
-       }
-
-       dprintf(("[master] Terminating on signal %d\n", die));
-       if (!debug) syslog(LOG_INFO, "Terminating on signal %d\n", die);
-       kill(0, die);
-
-       return 0;
-}
-
-int glite_srvbones_daemonize(const char *servername, const char *custom_pidfile, const char *custom_logfile) {
-       int lfd, opid;
-       FILE *fpid;
-       pid_t master;
-       char *pidfile, *logfile;
-
-       if (!custom_logfile) {
-               asprintf(&logfile, "%s/%s.log", geteuid() == 0 ? "/var/log" : getenv("HOME"), servername);
-       } else {
-               logfile = NULL;
-       }
-       lfd = open(logfile ? logfile : custom_logfile,O_CREAT|O_TRUNC|O_WRONLY,0600);
-       if (lfd < 0) {
-               fprintf(stderr,"%s: %s: %s\n",servername,logfile,strerror(errno));
-               free(logfile);
-               return 0;
-       }
-//     printf("logfile: %s\n", logfile ? logfile : custom_logfile);
-       free(logfile);
-
-       if (daemon(0,1) == -1) {
-               perror("can't daemonize");
-               return 0;
-       }
-       dup2(lfd,1);
-       dup2(lfd,2);
-
-       if (!custom_pidfile) {
-               asprintf(&pidfile, "%s/%s.pid", geteuid() == 0 ? "/var/run" : getenv("HOME"), servername);
-       } else {
-               pidfile = strdup(custom_pidfile);
-       }
-//     printf("pidfile: %s\n", pidfile ? pidfile : custom_pidfile);
-       setpgrp(); /* needs for signalling */
-       master = getpid();
-       fpid = fopen(pidfile,"r");
-       if ( fpid )
-       {
-               opid = -1;
-
-               if ( fscanf(fpid,"%d",&opid) == 1 )
-               {
-                       if ( !kill(opid,0) )
-                       {
-                               fprintf(stderr,"%s: another instance running, pid = %d\n",servername,opid);
-                               return 0;
-                       }
-                       else if (errno != ESRCH) { perror("kill()"); return 0; }
-               }
-               fclose(fpid);
-       } else if (errno != ENOENT) { perror(pidfile); free(pidfile); return 0; }
-
-       if (((fpid = fopen(pidfile, "w")) == NULL) || 
-           (fprintf(fpid, "%d", getpid()) <= 0) ||
-           (fclose(fpid) != 0)) { 
-               perror(pidfile); 
-               free(pidfile); 
-               return 0;
-       }
-
-       free(pidfile);
-       return 1;
-}
-
-static int dispatchit(int sock_slave, int sock, int sidx)
-{
-       struct sockaddr_in      a;
-       unsigned char      *pom;
-       int                                     conn,
-                                               alen, ret;
-
-
-       alen = sizeof(a);
-       if ( (conn = accept(sock, (struct sockaddr *)&a, &alen)) < 0 )
-       { 
-               if (debug)
-               {
-                       perror("accept()");
-                       return 1; 
-               }
-               else
-               {
-                       syslog(LOG_ERR, "accept(): %m");
-                       sleep(5);
-                       return -1;
-               }
-       }
-
-       getpeername(conn, (struct sockaddr *)&a, &alen);
-       pom = (char *) &a.sin_addr.s_addr;
-       if (a.sin_family  == PF_LOCAL) {
-               dprintf(("[master] %s connection from local socket\n",
-                                       services[sidx].id? services[sidx].id: ""));
-       }
-       else {
-               dprintf(("[master] %s connection from %d.%d.%d.%d:%d\n",
-                                       services[sidx].id? services[sidx].id: "",
-                                       (int)pom[0], (int)pom[1], (int)pom[2], (int)pom[3],
-                                       ntohs(a.sin_port)));
-       }
-
-
-       ret = 0;
-       if (    (   clnt_dispatched < clnt_accepted     /* wraparound */
-                    || clnt_dispatched - clnt_accepted < set_slaves_ct * set_slave_overload)
-               && !(ret = do_sendmsg(sock_slave, conn, clnt_dispatched++, sidx)) )
-       {
-               /*      all done
-                */ 
-               dprintf(("[master] Dispatched %lu, last known served %lu\n",
-                               clnt_dispatched-1, clnt_accepted));
-       }
-       else
-       {
-               services[sidx].on_reject_hnd(conn);
-               dprintf(("[master] Rejected new connection due to overload\n"));
-               if ( !debug ) syslog(LOG_ERR, "Rejected new connection due to overload\n");
-       }
-
-       close(conn);
-       if (ret)
-       {
-               perror("sendmsg()");
-               if ( !debug ) syslog(LOG_ERR, "sendmsg(): %m");
-       }
-
-
-       return 0;
-}
-
-
-static int slave(slave_data_init_hnd data_init_hnd, int sock)
-{
-       sigset_t                sset;
-       struct sigaction        sa;
-       struct timeval          client_done,
-                               client_start,
-                               new_client_duration = { NEW_CLIENT_DURATION, 0 };
-
-       void    *clnt_data = NULL;
-       int     conn = -1,
-               srv = -1,
-               req_cnt = 0,
-               sockflags,
-               h_errno,
-               pid, i,
-               first_request = 0; /* 1 -> first request from connected client expected */
-
-
-
-       if ( (pid = fork()) ) return pid;
-
-#ifdef LB_PROF
-       monstartup((u_long)&_start, (u_long)&etext);
-#endif
-
-       srandom(getpid()+time(NULL));
-
-       for ( i = 0; i < services_ct; i++ )
-               close(services[i].conn);
-
-       sigemptyset(&sset);
-       sigaddset(&sset, SIGTERM);
-       sigaddset(&sset, SIGINT);
-       sigaddset(&sset, SIGUSR1);
-
-       memset(&sa, 0, sizeof(sa));
-       sa.sa_handler = catchsig;
-       sigaction(SIGUSR1, &sa, NULL);
-
-       if (   (sockflags = fcntl(sock, F_GETFL, 0)) < 0
-               || fcntl(sock, F_SETFL, sockflags | O_NONBLOCK) < 0 )
-       {
-               dprintf(("[%d] fcntl(master_sock): %s\n", getpid(), strerror(errno)));
-               if ( !debug ) syslog(LOG_CRIT, "fcntl(master_sock): %m");
-               exit(1);
-       }
-
-       if ( data_init_hnd && data_init_hnd(&clnt_data) )
-               /*
-                *      XXX: what if the error remains and master will start new slave
-                *      again and again?
-                *
-                *      Then we are in a deep shit.
-                */
-               exit(1);
-
-       while ( !die && (req_cnt < set_slave_reqs_max || (conn >= 0 && first_request)))
-       {
-               fd_set                          fds;
-               int                                     max = sock,
-                                                       connflags,
-                                                       newconn = -1,
-                                                       newsrv = -1;
-
-               enum { KICK_DONT = 0, KICK_IDLE, KICK_LOAD, KICK_HANDLER, KICK_COUNT }
-                       kick_client = KICK_DONT;
-
-               static char * kicks[] = {
-                       "don't kick",
-                       "idle client",
-                       "high load",
-                       "no request handler",
-                       "request count limit reached",
-               };
-               unsigned long           seq;
-               struct timeval          now,to;
-
-
-               FD_ZERO(&fds);
-               if ( conn < 0 || !first_request) FD_SET(sock, &fds);
-               if ( conn >= 0 ) FD_SET(conn, &fds);
-               if ( conn > sock ) max = conn;
-       
-               to = set_idle_to;
-               sigprocmask(SIG_UNBLOCK, &sset, NULL);
-               switch (select(max+1, &fds, NULL, NULL, to.tv_sec >= 0 ? &to : NULL))
-               {
-               case -1:
-                       if ( errno != EINTR )
-                       {
-                               dprintf(("[%d] select(): %s\n", getpid(), strerror(errno)));
-                               if ( !debug ) syslog(LOG_CRIT, "select(): %m");
-                               exit(1);
-                       }
-                       continue;
-                       
-               case 0:
-                       if ( conn < 0 ) continue;
-                       
-               default:
-                       break;
-               }
-               sigprocmask(SIG_BLOCK, &sset, NULL);
-
-               gettimeofday(&now,NULL);
-
-               if ( conn >= 0 && FD_ISSET(conn, &fds) )
-               {
-                       /*
-                        *      serve the request
-                        */
-                       int             rv;
-
-                       dprintf(("[%d] incoming request\n", getpid()));
-
-                       if ( !services[srv].on_request_hnd )
-                       {
-                               kick_client = KICK_HANDLER;
-                       } else {
-                               req_cnt++;
-                               first_request = 0;
-                               to = set_request_to;
-                               rv = services[srv].on_request_hnd(conn,to.tv_sec>=0 ? &to : NULL,clnt_data);
-                               if ( (rv == ENOTCONN) || (rv == ECONNREFUSED) ) {
-                                       if (services[srv].on_disconnect_hnd
-                                                       && (rv = services[srv].on_disconnect_hnd(conn,NULL,clnt_data)))
-                                       {
-                                               dprintf(("[%d] disconnect handler: %s, terminating\n",getpid(),strerror(rv)));
-                                               exit(1);
-                                       }
-                                       close(conn);
-                                       conn = -1;
-                                       srv = -1;
-                                       dprintf(("[%d] Connection closed\n", getpid()));
-                               }
-                               else if (rv > 0) {
-                                       /*      non-fatal error -> close connection and contiue
-                                        * XXX: likely to leak resources but can we call on_disconnect_hnd() on error? 
-                                        */
-                                       close(conn);
-                                       conn = -1;
-                                       srv = -1;
-                                       dprintf(("[%d] %s, connection closed\n",getpid(),strerror(rv)));
-                                       continue;
-                               }
-                               else if ( rv < 0 ) {
-                                       /*      unknown error -> clasified as FATAL -> kill slave
-                                        */
-                                       dprintf(("[%d] %s, terminating\n",getpid(),strerror(-rv)));
-                                       exit(1);
-                               }
-                               else {
-                                       dprintf(("[%d] request done\n", getpid()));
-                                       gettimeofday(&client_done, NULL);
-                               }
-
-                               if (!check_timeout(new_client_duration,client_start,now)) continue;
-
-                       }
-               } else {
-                       if (conn >= 0 && check_timeout(set_idle_to, client_done, now)) 
-                               kick_client = KICK_IDLE;
-               }
-
-               if ( !die && (conn < 0 || !first_request) && FD_ISSET(sock, &fds) && req_cnt < set_slave_reqs_max )
-               {
-                       /* Prefer slaves with no connection, then kick idle clients,
-                        * active ones last. Wait less if we have serviced a request in the meantime.
-                        * Tuned for HZ=100 timer. */
-                       if ( conn >= 0 ) usleep( kick_client || FD_ISSET(conn, &fds) ? 11000 : 21000);
-                       if ( do_recvmsg(sock, &newconn, &seq, &newsrv) ) switch ( errno )
-                       {
-                       case EINTR: /* XXX: signals are blocked */
-                       case EAGAIN:
-                               continue;
-                       default: dprintf(("[%d] recvmsg(): %s\n", getpid(), strerror(errno)));
-                               if (!debug) syslog(LOG_CRIT,"recvmsg(): %m\n");
-                               exit(1);
-                       }
-                       kick_client = KICK_LOAD;
-               }
-
-               if (req_cnt >= set_slave_reqs_max && !first_request) kick_client = KICK_COUNT;
-
-               if ( kick_client && conn >= 0 )
-               {
-                       if ( services[srv].on_disconnect_hnd )
-                               services[srv].on_disconnect_hnd(conn, NULL, clnt_data);
-                       close(conn);
-                       conn = -1;
-                       srv = -1;
-                       dprintf(("[%d] Connection closed, %s\n", getpid(), kicks[kick_client]));
-               }
-
-               if ( newconn >= 0 )
-               {
-                       int     ret;
-
-                       conn = newconn;
-                       srv = newsrv;
-                       gettimeofday(&client_start, NULL);
-
-                       switch ( send(sock, &seq, sizeof(seq), 0) )
-                       {
-                       case -1:
-                               if (debug) perror("send()");
-                               else syslog(LOG_CRIT, "send(): %m\n");
-                               exit(1);
-                               
-                       case sizeof(seq):
-                               break;
-                               
-                       default: dprintf(("[%d] send(): incomplete message\n", getpid()));
-                               exit(1);
-                       }
-       
-                       req_cnt++;
-                       dprintf(("[%d] serving %s connection %lu\n", getpid(),
-                                       services[srv].id? services[srv].id: "", seq));
-       
-                       connflags = fcntl(conn, F_GETFL, 0);
-                       if ( fcntl(conn, F_SETFL, connflags | O_NONBLOCK) < 0 )
-                       {
-                               dprintf(("[%d] can't set O_NONBLOCK mode (%s), closing.\n", getpid(), strerror(errno)));
-                               if ( !debug ) syslog(LOG_ERR, "can't set O_NONBLOCK mode (%s), closing.\n", strerror(errno));
-                               close(conn);
-                               conn = srv = -1;
-                               continue;
-                       }
-
-                       to = set_connect_to;
-                       if (   services[srv].on_new_conn_hnd
-                               && (ret = services[srv].on_new_conn_hnd(conn, to.tv_sec >= 0 ? &to : NULL, clnt_data)) )
-                       {
-                               dprintf(("[%d] Connection not established, err = %d.\n", getpid(),ret));
-                               if ( !debug ) syslog(LOG_ERR, "Connection not established, err = %d.\n",ret);
-                               close(conn);
-                               conn = srv = -1;
-                               if (ret < 0) exit(1);
-                               continue;
-                       }
-                       gettimeofday(&client_done, NULL);
-                       first_request = 1;
-               }
-       }
-
-       if ( die )
-       {
-               dprintf(("[%d] Terminating on signal %d\n", getpid(), die));
-               if ( !debug ) syslog(LOG_INFO, "Terminating on signal %d", die);
-       }
-
-       if (conn >= 0  && services[srv].on_disconnect_hnd )
-               services[srv].on_disconnect_hnd(conn, NULL, clnt_data);
-
-       dprintf(("[%d] Terminating after %d requests\n", getpid(), req_cnt));
-       if ( !debug ) syslog(LOG_INFO, "Terminating after %d requests", req_cnt);
-
-
-       exit(0);
-}
-
-static void catchsig(int sig)
-{
-       die = sig;
-}
-
-static void catch_chld(int sig)
-{
-       child_died = 1;
-}
-
-static int check_timeout(struct timeval timeout, struct timeval before, struct timeval after)
-{
-       return (timeout.tv_usec <= after.tv_usec - before.tv_usec) ? 
-                       (timeout.tv_sec <= after.tv_sec - before.tv_sec) :
-                       (timeout.tv_sec < after.tv_sec - before.tv_sec);
-}
-
-#define MSG_BUFSIZ     30
-
-/*
- * send socket sock through socket to_sock
- */
-static int do_sendmsg(int to_sock, int sock, unsigned long clnt_dispatched, int srv)
-{
-       struct msghdr           msg = {0};
-       struct cmsghdr     *cmsg;
-       struct iovec            sendiov;
-       int                                     myfds,                                                  /* file descriptors to pass. */
-                                          *fdptr;
-       char                            buf[CMSG_SPACE(sizeof myfds)];  /* ancillary data buffer */
-       char                            sendbuf[MSG_BUFSIZ];                    /* to store unsigned int + \0 */
-
-
-       memset(sendbuf, 0, sizeof(sendbuf));
-       snprintf(sendbuf, sizeof(sendbuf), "%u %lu", srv, clnt_dispatched);
-
-       msg.msg_name = NULL;
-       msg.msg_namelen = 0;
-       msg.msg_iov = &sendiov;
-       msg.msg_iovlen = 1;
-       sendiov.iov_base = sendbuf;
-       sendiov.iov_len = sizeof(sendbuf);
-
-       msg.msg_control = buf;
-       msg.msg_controllen = sizeof buf;
-
-       cmsg = CMSG_FIRSTHDR(&msg);
-       cmsg->cmsg_level = SOL_SOCKET;
-       cmsg->cmsg_type = SCM_RIGHTS;
-       cmsg->cmsg_len = CMSG_LEN(sizeof(int));
-       fdptr = (int *)CMSG_DATA(cmsg);
-       *fdptr = sock;
-
-       msg.msg_controllen = cmsg->cmsg_len;
-       /* send fd to server-slave to do rest of communication */
-       if (sendmsg(to_sock, &msg, 0) < 0)  
-               return 1;
-        
-       return 0;
-}
-
-
-/* receive socket sock through socket from_sock */
-static int do_recvmsg(int from_sock, int *sock, unsigned long *clnt_accepted,int *srv)
-{
-       struct msghdr           msg = {0};
-       struct cmsghdr     *cmsg;
-       struct iovec            recviov;
-       int                                     myfds;                                                  /* file descriptors to pass. */
-       char                            buf[CMSG_SPACE(sizeof(myfds))]; /* ancillary data buffer */
-       char                            recvbuf[MSG_BUFSIZ];
-
-
-       msg.msg_name = NULL;
-       msg.msg_namelen = 0;
-       msg.msg_iov = &recviov;
-       msg.msg_iovlen = 1;
-       recviov.iov_base = recvbuf;
-       recviov.iov_len = sizeof(recvbuf);
-
-       msg.msg_control = buf;
-       msg.msg_controllen = sizeof buf;
-
-       cmsg = CMSG_FIRSTHDR(&msg);
-       cmsg->cmsg_level = SOL_SOCKET;
-       cmsg->cmsg_type = SCM_RIGHTS;
-       cmsg->cmsg_len = CMSG_LEN(sizeof(int));
-       msg.msg_controllen = cmsg->cmsg_len;
-
-       if (recvmsg(from_sock, &msg, 0) < 0) 
-               return 1;
-        
-       *sock = *((int *)CMSG_DATA(cmsg));
-       sscanf(recvbuf, "%u %lu", srv, clnt_accepted);
-
-       return 0;
-}
-
-static void glite_srvbones_set_slaves_ct(int n)
-{
-       set_slaves_ct = (n == -1)? SLAVES_COUNT: n;
-}
-
-static void glite_srvbones_set_slave_overload(int n)
-{
-       set_slave_overload = (n == -1)? SLAVE_OVERLOAD: n;
-}
-
-static void glite_srvbones_set_slave_conns_max(int n)
-{
-       set_slave_reqs_max = (n == -1)? SLAVE_REQS_MAX: n;
-}
-
-static void set_timeout(struct timeval *to, struct timeval *val)
-{
-       if (val) {
-       /* XXX: why not, negative timeouts don't make any sense, IMHO */
-               assert(val->tv_sec >= 0);
-               *to = *val;
-       }
-       else to->tv_sec = -1;
-}
diff --git a/org.glite.lbjp-common.trio/.cvsignore b/org.glite.lbjp-common.trio/.cvsignore
deleted file mode 100644 (file)
index c795b05..0000000
+++ /dev/null
@@ -1 +0,0 @@
-build
\ No newline at end of file
diff --git a/org.glite.lbjp-common.trio/LICENSE b/org.glite.lbjp-common.trio/LICENSE
deleted file mode 100644 (file)
index 01b973b..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-LICENSE file for EGEE Middleware
-================================
-
-Copyright (c) 2004 on behalf of the EU EGEE Project: 
-The European Organization for Nuclear Research (CERN), 
-Istituto Nazionale di Fisica Nucleare (INFN), Italy
-Datamat Spa, Italy
-Centre National de la Recherche Scientifique (CNRS), France
-CS Systeme d'Information (CSSI), France
-Royal Institute of Technology, Center for Parallel Computers (KTH-PDC), Sweden
-Universiteit van Amsterdam (UvA), Netherlands
-University of Helsinki (UH.HIP), Finlan
-University of Bergen (UiB), Norway
-Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met: 
-
-1. Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-
-3. The end-user documentation included with the redistribution, if
-any, must include the following acknowledgment: "This product includes
-software developed by The EU EGEE Project (http://cern.ch/eu-egee/)."
-Alternatively, this acknowledgment may appear in the software itself, if
-and wherever such third-party acknowledgments normally appear.
-
-4. The names EGEE and the EU EGEE Project must not be
-used to endorse or promote products derived from this software without
-prior written permission. For written permission, please contact
-<email address>.
-
-5. You are under no obligation whatsoever to provide anyone with any
-bug fixes, patches, or upgrades to the features, functionality or
-performance of the Software ("Enhancements") that you may develop over
-time; however, if you choose to provide your Enhancements to The EU
-EGEE Project, or if you choose to otherwise publish or distribute your
-Enhancements, in source code form without contemporaneously requiring
-end users of The EU EGEE Proejct to enter into a separate written license
-agreement for such Enhancements, then you hereby grant The EU EGEE Project
-a non-exclusive, royalty-free perpetual license to install, use, copy,
-modify, prepare derivative works, incorporate into the EGEE Middleware
-or any other computer software, distribute, and sublicense your
-Enhancements or derivative works thereof, in binary and source code
-form (if any), whether developed by The EU EGEE Project or third parties.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL PROJECT OR ITS CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-This software consists of voluntary contributions made by many
-individuals on behalf of the EU EGEE Prject. For more information on The
-EU EGEE Project, please see http://cern.ch/eu-egee/. For more information on
-EGEE Middleware, please see http://egee-jra1.web.cern.ch/egee-jra1/
-
-
diff --git a/org.glite.lbjp-common.trio/Makefile b/org.glite.lbjp-common.trio/Makefile
deleted file mode 100644 (file)
index 2d0d747..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-# Default values
-top_srcdir=..
-builddir=build
-top_builddir=${top_srcdir}/${builddir}
-stagedir=.
-distdir=.
-globalprefix=glite
-package=glite-lb-utils-trio
-version=0.0.0
-PREFIX=/opt/glite
-lbuprefix=lbu
-
--include Makefile.inc
--include ../project/version.properties
-
-VPATH=${top_srcdir}/src:${top_srcdir}/test::${top_srcdir}/doc
-
-CC=gcc
-
-DEBUG:=-g -O0 -Wall
-
-CFLAGS:=${DEBUG} -I${top_srcdir}/src -I${top_srcdir}/interface -I. -DDATAGRID_EXTENSION
-
-COMPILE:=libtool --mode=compile ${CC}
-LINK:=libtool --mode=link ${CC} -rpath ${stagedir}/lib ${LDFLAGS} 
-LINKXX:=libtool --mode=link ${CXX} -rpath ${stagedir}/lib ${LDFLAGS} 
-INSTALL:=libtool --mode=install install
-
-REPORTS:=${top_srcdir}/reports
-TEST_LIBS:=-L${cppunit_prefix}/lib -lcppunit -ldl
-TEST_INC:=-I${cppunit_prefix}/include
-
-
-OBJS:=trio.o strio.o escape.o
-LOBJS:=${OBJS:.o=.lo}
-
-HDRS:=trio.h escape.h
-
-STATICLIB:=libglite_lbu_trio.a
-LTLIB:=libglite_lbu_trio.la
-
-default: all
-
-all compile: ${STATICLIB} ${LTLIB}
-
-# to use libtool versioning correcty, we should have:
-#
-# current = major + minor + offset
-# revision = patch
-# age = minor
-#
-# where offset is a sum of maximal released minor's of all previous major's
-# 
-# version_info=-version-info `echo ${version} | cut -d. -f1,2 | tr . :`
-
-# counted minors: n/a
-offset=0
-
-version_info:=-version-info ${shell \
-       perl -e '$$,=":"; @F=split "\\.","${version}"; print $$F[0]+$$F[1]+${offset},$$F[2],$$F[1]' }
-
-${STATICLIB}: ${OBJS}
-       ar crv $@ ${OBJS}
-       ranlib $@
-
-${LTLIB}: ${OBJS}
-       ${LINK} ${version_info} -o $@ ${LOBJS} -lm
-
-stage: compile
-       $(MAKE) install PREFIX=${stagedir} DOSTAGE=yes
-
-check: compile mkreports runtest
-
-mkreports:
-       -mkdir ${REPORTS}
-
-runtest: trio_test
-       ./trio_test ${REPORTS}/trio.xml
-
-trio_test: trio_test.cpp
-       ${CXX} -c ${CFLAGS} ${TEST_INC} $<
-       ${LINKXX} -o $@ trio_test.o ${LTLIB} ${TEST_LIBS}
-       
-
-dist: distsrc distbin
-
-distsrc:
-       mkdir -p ${top_srcdir}/${package}-${version}
-       cd ${top_srcdir} && GLOBIGNORE="${package}-${version}" && cp -Rf * ${package}-${version}
-       cd ${top_srcdir} && tar -czf ${distdir}/${package}-${version}_src.tar.gz --exclude-from=project/tar_exclude ${package}-${version}
-       rm -rf ${top_srcdir}/${package}-${version}
-
-distbin:
-       $(MAKE) install PREFIX=`pwd`/tmpbuilddir${stagedir}
-       save_dir=`pwd`; cd tmpbuilddir${stagedir} && tar -czf $$save_dir/${top_srcdir}/${distdir}/${package}-${version}_bin.tar.gz *; cd $$save_dir
-       rm -rf tmpbuilddir
-
-install: all
-       -mkdir -p ${PREFIX}/lib
-       -mkdir -p ${PREFIX}/share/doc/${package}-${version}
-       -mkdir -p ${PREFIX}/include/${globalprefix}/${lbutilsprefix}
-       -mkdir -p ${PREFIX}/include/${globalprefix}/${lbuprefix}
-       ${INSTALL} -m 644 ${LTLIB} ${STATICLIB} ${PREFIX}/lib
-       ${INSTALL} -m 644 ${top_srcdir}/LICENSE ${PREFIX}/share/doc/${package}-${version}
-       (cd ${top_srcdir}/interface && ${INSTALL} -m 644 ${HDRS} ${PREFIX}/include/${globalprefix}/${lbuprefix})
-
-clean:
-       rm -rvf *.o *.lo .libs lib* *.c *.h *.dox C/ CPP/
-       rm -rvf log.xml project/ rpmbuild/ RPMS/ tgz/
-       
-%.o: %.c
-       ${COMPILE} ${CFLAGS} -c $<
diff --git a/org.glite.lbjp-common.trio/configure b/org.glite.lbjp-common.trio/configure
deleted file mode 100755 (executable)
index 6c3cf92..0000000
+++ /dev/null
@@ -1,711 +0,0 @@
-#!/usr/bin/perl
-
-# WARNING: Don't edit this file unless it is the master copy in org.glite.lb
-#
-# For the purpose of standalone builds of lb/jobid/lbjp-common components
-# it is copied on tagging 
-
-# $Header$
-
-use Getopt::Long;
-
-my $pwd = `pwd`; chomp $pwd;
-my $prefix = $pwd.'/stage';
-my $stagedir;
-my $staged;
-my $module;
-my $thrflavour = 'gcc64dbgpthr';
-my $nothrflavour = 'gcc64dbg';
-my $mode = 'build';
-my $help = 0;
-my $listmodules;
-my $version;
-my $output;
-my $lb_tag = '';
-my $lbjp_tag = '';
-my $jp_tag = '';
-my $sec_tag = '';
-my $jobid_tag = '';
-my $libdir = 'lib';
-
-my @nodes = qw/client server logger utils doc ws-test db jpprimary jpindex jpclient harvester/;
-my %enable_nodes;
-my %disable_nodes;
-
-my %extern_prefix = (
-       cares => '/opt/c-ares',
-       classads => '/opt/classads',
-       cppunit => '/usr',
-       expat => '/usr',
-       globus => '/opt/globus',
-       jglobus => '/opt/globus',
-       gsoap => '/usr',
-       mysql => '/usr',
-       'mysql-devel' => '',
-       'mysql-server' => '',
-       voms => '/opt/glite',
-       gridsite => '/opt/glite',
-       lcas => '/opt/glite',
-       trustmanager => '/opt/glite',
-       ant => '/usr',
-       jdk => '/usr',
-       libtar => '/usr',
-       axis => '/usr',
-       log4c => '/usr',
-       postgresql => '/usr'
-);
-
-my %jar = (
-       'commons-codec' => '/usr/share/java/commons-codec.jar',
-       'commons-lang' => '/usr/share/java/commons-lang.jar',
-);
-
-
-my %glite_prefix;
-my %need_externs;
-my %need_externs_type;
-my %need_jars;
-my %extrafull;
-my %extranodmod;
-my %deps;
-my %deps_type;
-my %topbuild;
-
-my %lbmodules = (
-       'lb' => [ qw/client common doc logger server state-machine types utils ws-interface ws-test harvester/], 
-       'security' => [qw/gss gsoap-plugin/],
-       'lbjp-common' => [qw/db maildir server-bones trio jp-interface/],
-       'jobid' => [qw/api-c api-cpp api-java/],
-       'jp' => [ qw/client doc index primary server-common ws-interface/ ],
-       );
-
-
-my @opts = (
-       'prefix=s' => \$prefix,
-       'staged=s' => \$staged,
-       'module=s' => \$module,
-       'thrflavour=s' => \$thrflavour,
-       'nothrflavour=s' => \$nothrflavour,
-       'mode=s' => \$mode,
-       'listmodules=s' => \$listmodules,
-       'version=s' => \$version,
-       'output=s' => \$output,
-       'stage=s' => \$stagedir,
-       'lb-tag=s' => \$lb_tag,
-       'lbjp-common-tag=s' => \$lbjp_tag,
-       'jp-tag=s' => \$jp_tag,
-       'security-tag=s' => \$sec_tag,
-       'jobid-tag=s' => \$jobid_tag,
-       'help' => \$help,
-       'libdir=s' => \$libdir,
-);
-
-for (@nodes) {
-       $enable_nodes{$_} = 0;
-       $disable_nodes{$_} = 0;
-       
-       push @opts,"disable-$_",\$disable_nodes{$_};
-       push @opts,"enable-$_",\$enable_nodes{$_};
-}
-
-push @opts,"with-$_=s",\$extern_prefix{$_} for keys %extern_prefix;
-push @opts,"with-$_=s",\$jar{$_} for keys %jar;
-
-my @keeparg = @ARGV;
-
-GetOptions @opts or die "Errors parsing command line\n";
-
-$extern_prefix{'mysql-devel'}=$extern_prefix{mysql} if $extern_prefix{'mysql-devel'} eq '';
-$extern_prefix{'mysql-server'}=$extern_prefix{mysql} if $extern_prefix{'mysql-server'} eq '';
-
-if ($help) { usage(); exit 0; }
-
-if ($listmodules) {
-       my @m = map "org.glite.$listmodules.$_",@{$lbmodules{$listmodules}};
-       print "@m\n";
-       exit 0;
-}
-
-warn "$0: --version and --output make sense only in --mode=etics\n"
-       if ($version || $output) && $mode ne 'etics';
-
-my $en;
-for (keys %enable_nodes) { $en = 1 if $enable_nodes{$_}; }
-
-my $dis;
-for (keys %disable_nodes) { $dis = 1 if $disable_nodes{$_}; }
-
-die "--enable-* and --disable-* are mutually exclusive\n"
-       if $en && $dis;
-
-die "--module cannot be used with --enable-* or --disable-*\n"
-       if $module && ($en || $dis);
-
-die "$module: unknown module\n" if $module && ! grep $module,@{$lbmodules{lb}},@{$lbmodules{security}},{$lbmodules{jp}};
-
-if ($dis) {
-       for (@nodes) {
-               $enable_nodes{$_} = 1 unless $disable_nodes{$_};
-       }
-}
-
-if (!$en && !$dis) { $enable_nodes{$_} = 1 for (@nodes) } ;
-
-for (keys %enable_nodes) { delete $enable_nodes{$_} unless $enable_nodes{$_}; }
-
-$stagedir = $prefix unless $stagedir;
-
-if ($mode eq 'build') {
-       print "Writing config.status\n";
-       open CONF,">config.status" or die "config.status: $!\n";
-       print CONF "$0 @keeparg\n";
-       close CONF;
-}
-
-
-my @modules;
-my %aux;
-
-if ($module) {
-#      push @modules,split(/[,.]+/,$module);
-       push @modules,$module;
-}
-else {
-       @modules = map(($extranodmod{$_} ? $extranodmod{$_} : 'lb.'.$_),(keys %enable_nodes));
-       
-       my $n;
-
-       do {
-               local $"="\n";
-               $n = $#modules;
-               push @modules,(map @{$deps{$_}},@modules);
-
-               undef %aux; @aux{@modules} = (1) x ($#modules+1);
-               @modules = keys %aux;
-       } while ($#modules > $n);
-}
-
-@aux{@modules} = (1) x ($#modules+1);
-delete $aux{$_} for (split /,/,$staged);
-@modules = keys %aux;
-
-mode_build() if $mode eq 'build';
-mode_checkout() if $mode eq 'checkout';
-mode_etics($module) if $mode eq 'etics';
-
-sub mode_build {
-       print "\nBuilding modules: @modules\n";
-       
-       my @ext = map @{$need_externs{$_}},@modules;
-       my @myjars = map @{$need_jars{$_}},@modules;
-       undef %aux; @aux{@ext} = 1;
-       @ext = keys %aux;
-       undef %aux; @aux{@myjars} = (1) x ($#myjars+1);
-       @myjars = keys %aux;
-       
-       print "\nRequired externals:\n";
-       print "\t$_: $extern_prefix{$_}\n" for @ext;
-       print "\t$_: $jar{$_}\n" for @myjars;
-       print "\nThis is a poor-man configure, it's up to you to have sources and externals there\n\n";
-       
-       mkinc($_) for @modules;
-       
-       print "Creating Makefile\n";
-       
-       open MAK,">Makefile" or die "Makefile: $!\n";
-       
-       print MAK "all: @modules\n\nclean:\n";
-       
-       for (@modules) {
-               my $full = full($_);
-               my $build = $topbuild{$_} ? '': '/build';
-               print MAK "\tcd $full$build && \${MAKE} clean\n"
-       }
-       
-       print MAK "\ndistclean:\n";
-       
-       for (@modules) {
-               my $full = full($_);
-               print MAK $topbuild{$_} ?
-                       "\tcd $full$build && \${MAKE} distclean\n" :
-                       "\trm -rf $full$build\n"
-       }
-       
-       print MAK "\n";
-       
-       for (@modules) {
-               my %ldeps; undef %ldeps;  
-               @ldeps{@{$deps{$_}}} = 1;
-               for my $x (split /,/,$staged) { delete $ldeps{$x}; }
-               my @dnames = $module ? () : keys %ldeps;
-       
-               my $full = full($_);
-               my $build = $topbuild{$_} ? '': '/build';
-       
-               print MAK "$_: @dnames\n\tcd $full$build && \${MAKE} && \${MAKE} install\n\n";
-       }
-       
-       close MAK;
-}
-       
-sub mode_checkout() {
-       for (@modules) {
-               my $module = $_;
-               my $tag = "";
-               if ($lb_tag){
-                       for (@{$lbmodules{lb}}){
-                               if ("lb.".$_ eq $module){
-                                       $tag = '-r '.$lb_tag;
-                               }
-                       }       
-               }
-               if ($lbjp_tag){
-                       for (@{$lbmodules{'lbjp-common'}}){
-                               if ("lbjp-common.".$_ eq $module){
-                                        $tag = '-r '.$lbjp_tag;
-                                }
-                       }
-               }
-               if ($jp_tag){
-                       for (@{$lbmodules{'jp'}}){
-                               if ("jp.".$_ eq $module){
-                                        $tag = '-r '.$jp_tag;
-                               }
-                        }
-               }
-               if ($sec_tag){
-                       for (@{$lbmodules{security}}){
-                               if ("security.".$_ eq $module){
-                                        $tag = '-r '.$sec_tag;
-                                }
-                       }
-               }
-               if ($jobid_tag){
-                       for (@{$lbmodules{jobid}}){
-                               if ("jobid.".$_ eq $module){
-                                        $tag = '-r '.$jobid_tag;
-                                }
-                       }
-               }
-               #if (grep {"lb.".$_ eq $module} @{$lbmodules{lb}}){
-               #       print "found";
-               #}
-               $_ = full($_);
-               print "\n*** Checking out $_\n";
-               system("cvs checkout  $tag $_") == 0 or die "cvs checkout $tag $_: $?\n";
-       }
-}
-
-BEGIN{
-%need_externs_aux = (
-       'lb.client' => [ qw/cppunit:B classads/ ],
-       'lb.client-java' => [ qw/ant:B jdk:B axis:B trustmanager/ ],
-       'lb.common' => [ qw/expat cares:B cppunit:B classads/ ],
-       'lb.doc' => [],
-       'lb.logger' => [ qw/cppunit:B/ ],
-       'lb.server' => [ qw/globus_essentials:R globus:B expat cares mysql:R mysql-server:R mysql-devel:B cppunit:B gsoap:B classads voms lcas gridsite/ ],
-       'lb.state-machine' => [ qw/classads/ ],
-       'lb.utils' => [ qw/cppunit:B/ ],
-       'lb.ws-interface' => [],
-       'lb.ws-test' => [ qw/gsoap:B/ ],
-       'lb.types' => [ qw// ],
-       'lb.harvester' => [ qw/postgresql:R/ ],
-       'lbjp-common.db' => [ qw/mysql:B mysql-devel:B postgresql:B/ ],
-       'lbjp-common.maildir' => [ qw// ],
-       'lbjp-common.server-bones' => [ qw// ],
-       'lbjp-common.trio' => [ qw/cppunit:B/ ],
-       'lbjp-common.jp-interface' => [ qw/cppunit:B/ ],
-       'security.gss' =>  [ qw/globus_essentials:R globus:B cares cppunit:B/ ],
-       'security.gsoap-plugin' =>  [ qw/cppunit:B globus_essentials:R globus:B cares:B gsoap:B/ ],
-       'jobid.api-c' =>  [ qw/cppunit:B/ ],
-       'jobid.api-cpp' =>  [ qw/cppunit:B/ ],
-       'jobid.api-java' =>  [ qw/ant:B jdk:B/ ],
-       'jp.client' => [ qw/gsoap libtar globus_essentials:R globus:B/ ],
-        'jp.doc' => [],
-        'jp.index' => [ qw/gsoap globus_essentials:R globus:B/ ],
-        'jp.primary' => [ qw/classads gsoap libtar globus_essentials:R globus:B/ ],
-        'jp.server-common' => [],
-        'jp.ws-interface' => [],
-);
-
-for my $ext (keys %need_externs_aux) {
-       for (@{$need_externs_aux{$ext}}) {
-               /([^:]*)(?::(.*))?/;
-               push @{$need_externs{$ext}},$1;
-               my $type = $2 ? $2 : 'BR';
-               $need_externs_type{$ext}->{$1} = $type;
-       }
-}
-
-%need_jars = (
-       'jobid.api-java' => [ qw/commons-codec/ ],
-       'lb.client-java' => [ qw/commons-lang/ ],
-);
-
-for my $jar (keys %need_jars) {
-       for (@{$need_jars{$jar}}) {
-               $need_externs_type{$jar}->{$_} = 'BR';  # XXX
-       }
-}
-
-%deps_aux = (
-       'lb.client' => [ qw/
-               lb.types:B lb.common
-               lbjp-common.trio
-               jobid.api-cpp jobid.api-c
-               security.gss
-       / ],
-       'lb.client-java' => [ qw/
-               lb.types:B
-               lb.ws-interface:B
-               jobid.api-java
-       / ],
-       'lb.common' => [ qw/
-               jobid.api-cpp jobid.api-c
-               lb.types:B lbjp-common.trio security.gss
-       / ],
-       'lb.doc' => [ qw/lb.types:B/ ],
-       'lb.logger' => [ qw/
-               lbjp-common.trio
-               jobid.api-c
-               lb.common
-               security.gss
-       / ],
-       'lb.server' => [ qw/
-               lb.ws-interface lb.types:B lb.common lb.state-machine
-               lbjp-common.db lbjp-common.server-bones lbjp-common.trio lbjp-common.maildir
-               jobid.api-c
-               security.gsoap-plugin security.gss
-       / ],
-       'lb.state-machine' => [ qw/lb.types:B lb.common lbjp-common.jp-interface security.gss/ ],
-       'lb.utils' => [ qw/
-               lbjp-common.jp-interface
-               jobid.api-c
-               lbjp-common.trio lbjp-common.maildir
-               lb.client lb.state-machine
-       / ],
-       'lb.ws-test' => [ qw/security.gsoap-plugin lb.ws-interface/ ],
-       'lb.ws-interface' => [ qw/lb.types:B/ ],
-       'lb.types' => [ qw// ],
-       'lb.harvester' => [ qw/
-               jobid.api-c lbjp-common.trio lbjp-common.db lb.common lb.client
-               security.gss
-       / ],
-       'lbjp-common.db' => [ qw/lbjp-common.trio/ ],
-       'lbjp-common.maildir' => [ qw// ],
-       'lbjp-common.server-bones' => [ qw// ],
-       'lbjp-common.trio' => [ qw// ],
-       'security.gss' =>  [ qw// ],
-       'security.gsoap-plugin' =>  [ qw/security.gss/ ],
-       'jobid.api-c' =>  [ qw// ],
-       'jobid.api-cpp' =>  [ qw/jobid.api-c/ ],
-       'jobid.api-java' =>  [ qw// ],
-
-       'lbjp-common.jp-interface' => [ qw/lbjp-common.db jobid.api-c/ ],
-
-       'jp.client' => [ qw/
-                jp.ws-interface
-                lbjp-common.jp-interface lbjp-common.maildir
-                jobid.api-c
-                security.gsoap-plugin
-        / ],
-       'jp.doc' => [ qw// ],
-       'jp.index' => [ qw/
-                jp.server-common jp.ws-interface
-                lbjp-common.jp-interface lbjp-common.trio lbjp-common.db lbjp-common.server-bones
-                security.gsoap-plugin
-        / ],
-       'jp.primary' => [ qw/
-                jobid.api-c
-                jp.server-common jp.ws-interface
-                lb.state-machine
-                lbjp-common.jp-interface lbjp-common.trio lbjp-common.db lbjp-common.server-bones
-                security.gsoap-plugin
-        / ],
-       'jp.server-common' => [ qw/ 
-                lbjp-common.jp-interface lbjp-common.db
-        / ],
-       'jp.ws-interface' => [ qw// ],
-);
-
-for my $ext (keys %deps_aux) {
-       for (@{$deps_aux{$ext}}) {
-               /([^:]*)(?::(.*))?/;
-               push @{$deps{$ext}},$1;
-               my $type = $2 ? $2 : 'BR';
-               $deps_type{$ext}->{$1} = $type;
-       }
-}
-
-
-%extrafull = ( gridsite=>'org.gridsite.core');
-
-#( java => 'client-java' );
-%extranodmod = (
-       db => 'lbjp-common.db',
-       jpprimary => 'jp.primary',
-       jpindex => 'jp.index',
-       jpclient => 'jp.client',
-);
-
-my @t = qw/lb.client-java jobid.api-java lb.types/;
-@topbuild{@t} = (1) x ($#t+1);
-}
-
-sub full
-{
-       my $short = shift;
-       return $extrafull{$short} ? $extrafull{$short} : 'org.glite.'.$short;
-}
-
-sub mkinc
-{
-       my %aux;
-       undef %aux;
-       my @m=qw/
-lb.client lb.doc lb.state-machine lb.ws-interface lb.logger lb.types lb.common lb.server lb.utils lb.ws-test lb.client-java lb.harvester
-security.gss security.gsoap-plugin
-jobid.api-c jobid.api-cpp jobid.api-java
-lbjp-common.db lbjp-common.maildir lbjp-common.server-bones lbjp-common.trio lbjp-common.jp-interface
-jp.client jp.doc jp.index jp.primary jp.server-common jp.ws-interface
-/;
-       @aux{@m} = (1) x ($#m+1);
-
-       my $short = shift;
-       my $full = full $short;
-
-       unless ($aux{$short}) {
-               print "Makefile.inc not needed in $full\n";
-               return;
-       }
-
-       my $build = '';
-       
-       unless ($topbuild{$_}) {
-               $build = '/build';
-               unless (-d "$full/build") {
-                       mkdir "$full/build" or die "mkdir $full/build: $!\n";
-               }
-               unlink "$full/build/Makefile";
-               symlink "../Makefile","$full/build/Makefile" or die "symlink ../Makefile $full/build/Makefile: $!\n";
-       }
-
-       open MKINC,">$full$build/Makefile.inc"
-               or die "$full$build/Makefile.inc: $!\n";
-
-       print "Creating $full$build/Makefile.inc\n";
-
-       print MKINC qq{
-PREFIX = $prefix
-stagedir = $stagedir
-thrflavour = $thrflavour
-nothrflavour = $nothrflavour
-libdir = $libdir
-};
-
-       for (@{$need_externs{$short}}) {
-               print MKINC "${_}_prefix = $extern_prefix{$_}\n"
-       }
-
-       for (@{$need_jars{$short}}) {
-               print MKINC "${_}_jar = $jar{$_}\n"
-       }
-
-       my $need_gsoap = 0;
-       for (@{$need_externs{$short}})  { $need_gsoap = 1 if $_ eq 'gsoap'; }
-
-       print MKINC "gsoap_default_version=".gsoap_version()."\n"  if $need_gsoap;
-
-       close MKINC;
-}
-
-my %etics_externs;
-my %etics_projects;
-BEGIN{
-       %etics_externs = (
-               globus_essentials=>'vdt_globus_essentials',
-               globus=>'globus',
-               cares=>'c-ares',
-               voms=>'org.glite.security.voms-api-cpp',
-               gridsite=>'org.gridsite.shared',
-               lcas=>'org.glite.security.lcas',
-               trustmanager=>'org.glite.security.trustmanager',
-       );
-       %etics_projects = (
-               vdt=>[qw/globus globus_essentials/],
-               'org.glite'=>[qw/voms gridsite lcas/],
-       );
-};
-
-sub mode_etics {
-       $fmod = shift;
-
-       die "$0: --module required with --etics\n" unless $fmod;
-       
-       my ($subsys,$module) = split /\./,$fmod;
-
-       my ($major,$minor,$rev,$age);
-
-       if ($version) {
-               $version =~ /([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)-(.+)/;
-               ($major,$minor,$rev,$age) = ($1,$2,$3,$4);
-       }
-       else { 
-               open V,"org.glite.$subsys.$module/project/version.properties"
-                       or die "org.glite.$subsys.$module/project/version.properties: $!\n";
-       
-               while ($_ = <V>) {
-                       chomp;
-                       ($major,$minor,$rev) = ($1,$2,$3) if /module\.version\s*=\s*([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/;
-                       $age = $1 if /module\.age\s*=\s*([[:digit:]]+)/;
-               }
-               close V;
-       }
-
-       my @copts = ();
-       my %ge;
-       @ge{@{$etics_projects{'org.glite'}}} = (1) x ($#{$etics_projects{'org.glite'}}+1);
-
-       for (@{$need_externs{"$subsys.$module"}}) {
-           if ($need_externs_type{"$subsys.$module"}->{$_}=~/B/) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-               push @copts,$ge{$_} ? "--with-$_=\${stageDir}" : "--with-$_=\${$eext.location}";
-           }
-       }
-
-       for (@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-
-               push @copts,"--with-$_ \${$eext.location}/$_*.jar";
-       }
-
-
-       my $conf = "glite-$subsys-${module}_R_${major}_${minor}_${rev}_${age}";
-       my $file = $output ? $output : "$conf.ini";
-       open C,">$file" or die "$file: $!\n";
-
-       my $buildroot = $topbuild{"$subsys.$module"} ? '' : "build.root = build\n";
-
-       my $confdir = $topbuild{"$subsys.$module"} ? '..' : '../..';
-
-       print STDERR "Writing $file\n";
-       print C qq{
-[Configuration-$conf]
-profile = None
-moduleName = org.glite.$subsys.$module
-displayName = $conf
-description = org.glite.$subsys.$module
-projectName = org.glite
-age = $age
-deploymentType = None
-tag = $conf
-version = $major.$minor.$rev
-path = \${projectName}/\${moduleName}/\${version}/\${platformName}/\${packageName}-\${version}-\${age}.tar.gz
-
-[Platform-default:VcsCommand]
-displayName = None
-description = None
-tag = cvs -d \${vcsroot} tag -R \${tag} \${moduleName}
-branch = None
-commit = None
-checkout = cvs -d \${vcsroot} co -r \${tag} \${moduleName}
-
-[Platform-default:BuildCommand]
-postpublish = None
-packaging = None
-displayName = None
-description = None
-doc = None
-prepublish = None
-publish = None
-compile = make
-init = None
-install = make install
-clean = make clean
-test = make check
-configure = cd $confdir && \${moduleName}/configure --thrflavour=\${globus.thr.flavor} --nothrflavour=\${globus.nothr.flavor} --prefix=\${prefix} --stage=\${stageDir} --libdir=\${libdir} --module $subsys.$module @copts
-checkstyle = None
-
-[Platform-default:Property]
-$buildroot
-
-[Platform-default:DynamicDependency]
-
-};
-       for (@{$need_externs{"$subsys.$module"}},@{$need_jars{"$subsys.$module"}}) {
-               my $eext = $etics_externs{$_} ? $etics_externs{$_} : $_;
-
-               my $proj = 'externals';
-               for my $p (keys %etics_projects) {
-                       for $m (@{$etics_projects{$p}}) {
-                               $proj = $p if $m eq $_;
-                       }
-               }
-
-               my $type = $need_externs_type{"$subsys.$module"}->{$_};
-               print C "$proj|$eext = $type\n";
-       }
-
-       for (@{$deps{"$subsys.$module"}}) {
-               my $type = $deps_type{"$subsys.$module"}->{$_};
-               print C "org.glite|org.glite.$_ = $type\n";
-       }
-
-       close C;
-}
-
-sub gsoap_version {
-       local $_;
-       my $gsoap_version;
-       open S,"$extern_prefix{gsoap}/bin/soapcpp2 -v 2>&1 |" or die "$extern_prefix{gsoap}/bin/soapcpp2: $!\n";
-
-       while ($_ = <S>) {
-               chomp;
-
-               $gsoap_version = $1 if /The gSOAP Stub and Skeleton Compiler for C and C\+\+ ([.[:digit:][:alpha:]]+)$/;
-       }
-       close S;
-       return $gsoap_version;
-}
-
-
-sub usage {
-       my @ext = keys %extern_prefix;
-       my @myjars, keys %jar;
-
-       print STDERR qq{
-usage: $0 options
-
-General options (defaults in []):
-  --prefix=PREFIX              destination directory [./stage]
-  --staged=module,module,...   what is already in PREFIX (specify without org.glite.)
-  --thrflavour=flavour
-  --nothrflavour=flavour       threaded and non-treaded flavours [gcc64dbgpthr,gcc64dbg]
-  --listmodules=subsys          list modules of a subsystem
-  --libdir=libdir              typically [lib,lib64] postfix
-  
-Mode of operation:
-  --mode={checkout|build|etics}        what to do [build]
-  
-What to build:
-  --module=module              build this module only (mostly in-Etics operation)
-  --enable-NODE                        build this "node" (set of modules) only. Available nodes are
-                                       @{$lbmodules{lb}},@{$lbmodules{security}}
-  --disable-NODE               don't build this node
-  --lb-tag=tag                 checkout LB modules with specific tag
-  --jp-tag=tag                 checkout JP modules with specific tag
-  --lbjp-common-tag=tag         checkout lbjp-common modules with specific tag
-  --security-tag=tag           checkout security modules with specific tag
-  --jobid-tag=tag              checkout jobid modules with specific tag
-
-Dependencies:
-  --with-EXTERNAL=PATH         where to look for an external. Required externals
-                               (not all for all modules) are:
-                                       @ext
-  --with-JAR=JAR               where to look for jars. Required jars are:
-                                       @myjars
-                               Summary of what will be used is always printed
-
-};
-
-}
diff --git a/org.glite.lbjp-common.trio/interface/escape.h b/org.glite.lbjp-common.trio/interface/escape.h
deleted file mode 100644 (file)
index 4795f68..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_COMMON_ESCAPE_H__
-#define __EDG_WORKLOAD_LOGGING_COMMON_ESCAPE_H__
-/*!
- * \file escape.h
- */
-
-#ident "$Header$"
-
-
-/*!
- * \fn char *glite_lbu_EscapeULM(const char *str)
- * \param str           a string to escape
- * \return              new (allocated) escaped string
- * \brief in given string (ULM) escape all ULM_QM, ULM_BS and ULM_LF by ULM_BS
- */
-
-char *glite_lbu_EscapeULM(const char *);
-
-
-/*!
- * \fn char *glite_lbu_UnescapeULM(const char *str)
- * \param str           a string to unescape
- * \return              new (allocated) unescaped string
- * \brief in given string (ULM) unescape all escaped ULM_QM, ULM_BS and ULM_LF
- */
-
-char *glite_lbu_UnescapeULM(const char *);
-
-
-/*!
- * \fn char *glite_lbu_EscapeXML(const char *str);
- * \param str          a string to escape
- * \return             new (allocated) escaped string
- * \brief in given string (XML) escape all unwanted characters
- */
-
-char *glite_lbu_EscapeXML(const char *);
-
-
-/*!
- * \fn char *glite_lbu_UnescapeXML(const char *str)
- * \param str          a string to unescape
- * \return             new (allocated) unescaped string
- * \brief in given string (XML) unescape all escaped characters
- */
-
-char *glite_lbu_UnescapeXML(const char *);
-
-
-/*!
- * \fn char *glite_lbu_EscapeSQL(const char *str)
- * \param str          a string to escape
- * \return             new (allocated) escaped string
- * \briefin given string (SQL) escape all unwanted characters
- */
-
-char *glite_lbu_EscapeSQL(const char *);
-
-#endif /* __EDG_WORKLOAD_LOGGING_COMMON_ESCAPE_H__ */
diff --git a/org.glite.lbjp-common.trio/interface/trio.h b/org.glite.lbjp-common.trio/interface/trio.h
deleted file mode 100644 (file)
index 04f133c..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- ************************************************************************/
-
-#ifndef TRIO_TRIO_H
-#define TRIO_TRIO_H
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdlib.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* make utility and C++ compiler in Windows NT fails to find this symbol */ 
-#if defined(WIN32) && !defined(isascii)
-# define isascii ((unsigned)(x) < 0x80)
-#endif
-
-/*
- * Error codes.
- *
- * Remember to add a textual description to trio_strerror.
- */
-enum {
-  TRIO_EOF      = 1,
-  TRIO_EINVAL   = 2,
-  TRIO_ETOOMANY = 3,
-  TRIO_EDBLREF  = 4,
-  TRIO_EGAP     = 5,
-  TRIO_ENOMEM   = 6,
-  TRIO_ERANGE   = 7
-};
-
-/* Error macros */
-#define TRIO_ERROR_CODE(x) ((-(x)) & 0x00FF)
-#define TRIO_ERROR_POSITION(x) ((-(x)) >> 8)
-#define TRIO_ERROR_NAME(x) trio_strerror(x)
-
-const char *trio_strerror(int);
-
-/*************************************************************************
- * Print Functions
- */
-
-int trio_printf(const char *format, ...);
-int trio_vprintf(const char *format, va_list args);
-int trio_printfv(const char *format, void **args);
-
-int trio_fprintf(FILE *file, const char *format, ...);
-int trio_vfprintf(FILE *file, const char *format, va_list args);
-int trio_fprintfv(FILE *file, const char *format, void **args);
-
-int trio_dprintf(int fd, const char *format, ...);
-int trio_vdprintf(int fd, const char *format, va_list args);
-int trio_dprintfv(int fd, const char *format, void **args);
-
-/* trio_sprintf(target, format, ...)
- * trio_snprintf(target, maxsize, format, ...)
- *
- *   Build 'target' according to 'format' and succesive
- *   arguments. This is equal to the sprintf() and
- *   snprintf() functions.
- */
-int trio_sprintf(char *buffer, const char *format, ...);
-int trio_vsprintf(char *buffer, const char *format, va_list args);
-int trio_sprintfv(char *buffer, const char *format, void **args);
-
-int trio_snprintf(char *buffer, size_t max, const char *format, ...);
-int trio_vsnprintf(char *buffer, size_t bufferSize, const char *format,
-                  va_list args);
-int trio_snprintfv(char *buffer, size_t bufferSize, const char *format,
-                  void **args);
-
-int trio_snprintfcat(char *buffer, size_t max, const char *format, ...);
-int trio_vsnprintfcat(char *buffer, size_t bufferSize, const char *format,
-                      va_list args);
-
-char *trio_aprintf(const char *format, ...);
-char *trio_vaprintf(const char *format, va_list args);
-
-int trio_asprintf(char **ret, const char *format, ...);
-int trio_vasprintf(char **ret, const char *format, va_list args);
-
-/*************************************************************************
- * Scan Functions
- */
-int trio_scanf(const char *format, ...);
-int trio_vscanf(const char *format, va_list args);
-int trio_scanfv(const char *format, void **args);
-
-int trio_fscanf(FILE *file, const char *format, ...);
-int trio_vfscanf(FILE *file, const char *format, va_list args);
-int trio_fscanfv(FILE *file, const char *format, void **args);
-
-int trio_dscanf(int fd, const char *format, ...);
-int trio_vdscanf(int fd, const char *format, va_list args);
-int trio_dscanfv(int fd, const char *format, void **args);
-
-int trio_sscanf(const char *buffer, const char *format, ...);
-int trio_vsscanf(const char *buffer, const char *format, va_list args);
-int trio_sscanfv(const char *buffer, const char *format, void **args);
-
-/*************************************************************************
- * Renaming
- */
-#ifdef TRIO_REPLACE_STDIO
-/* Replace the <stdio.h> functions */
-#ifndef HAVE_PRINTF
-# define printf trio_printf
-#endif
-#ifndef HAVE_VPRINTF
-# define vprintf trio_vprintf
-#endif
-#ifndef HAVE_FPRINTF
-# define fprintf trio_fprintf
-#endif
-#ifndef HAVE_VFPRINTF
-# define vfprintf trio_vfprintf
-#endif
-#ifndef HAVE_SPRINTF
-# define sprintf trio_sprintf
-#endif
-#ifndef HAVE_VSPRINTF
-# define vsprintf trio_vsprintf
-#endif
-#ifndef HAVE_SNPRINTF
-# define snprintf trio_snprintf
-#endif
-#ifndef HAVE_VSNPRINTF
-# define vsnprintf trio_vsnprintf
-#endif
-#ifndef HAVE_SCANF
-# define scanf trio_scanf
-#endif
-#ifndef HAVE_VSCANF
-# define vscanf trio_vscanf
-#endif
-#ifndef HAVE_FSCANF
-# define fscanf trio_fscanf
-#endif
-#ifndef HAVE_VFSCANF
-# define vfscanf trio_vfscanf
-#endif
-#ifndef HAVE_SSCANF
-# define sscanf trio_sscanf
-#endif
-#ifndef HAVE_VSSCANF
-# define vsscanf trio_vsscanf
-#endif
-/* These aren't stdio functions, but we make them look similar */
-#define dprintf trio_dprintf
-#define vdprintf trio_vdprintf
-#define aprintf trio_aprintf
-#define vaprintf trio_vaprintf
-#define asprintf trio_asprintf
-#define vasprintf trio_vasprintf
-#define dscanf trio_dscanf
-#define vdscanf trio_vdscanf
-#endif
-
-/* strio compatible names */
-#define StrScan trio_sscanf
-#define StrFormat trio_sprintf
-#define StrFormatMax trio_snprintf
-#define StrFormatAlloc trio_aprintf
-#define StrFormatAppendMax trio_snprintfcat
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* TRIO_TRIO_H */
diff --git a/org.glite.lbjp-common.trio/project/ChangeLog b/org.glite.lbjp-common.trio/project/ChangeLog
deleted file mode 100644 (file)
index abff374..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-1.0.0-2
-- initial version
-
-1.0.0-3
-- depends on cppunit
-
-1.0.0-4
-- configure script update (globus flavors added to configure call)
-
-1.0.0-5
-- configure script update
-
-1.0.1-1
-- Fixed build with newer gcc versions 
-
-1.0.2-1
-- Fixed syntax error
-
diff --git a/org.glite.lbjp-common.trio/project/version.properties b/org.glite.lbjp-common.trio/project/version.properties
deleted file mode 100644 (file)
index d4b1abd..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# : /cvs/jra1mw/org.glite.lbjp-common.trio/project/version.properties,v 1.2 2009/01/21 10:44:34 zsustr Exp $
-module.version=1.0.2
-module.age=1
diff --git a/org.glite.lbjp-common.trio/src/escape.c b/org.glite.lbjp-common.trio/src/escape.c
deleted file mode 100644 (file)
index 493dac4..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-#ident "$Header$"
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <ctype.h>
-
-#include "escape.h"
-
-#define ULM_QM  '"'
-#define ULM_BS  '\\'
-#define ULM_LF  '\n'
-
-/*
- *----------------------------------------------------------------------
- * 
- * \fn char *glite_lbu_EscapeULM(const char *str)
- * \param str          a string to escape
- * \return             new (allocated) escaped string (is is empty "" if str is NULL)
- * \brief in given string escape all ULM_QM, ULM_BS and ULM_LF by ULM_BS
- *
- * Calls: malloc, strlen
- *
- * Algorithm: array lookup
- *             - the new string will be allocated
- *
- *----------------------------------------------------------------------
- */
-
-char *glite_lbu_EscapeULM(const char *str)
-{
-unsigned int i,j;
-size_t size;
-char *ret;
-
-if (str == NULL) return strdup("");
-if ((size = strlen(str)) == 0) return strdup("");
-
-ret = (char*) malloc(1+2*size*sizeof(char));
-
-j = 0;
-for (i=0; i<size; i++) {
-       if ((str[i] != ULM_BS) && (str[i] != ULM_QM) && (str[i] != ULM_LF)) {
-               ret[j] = str[i];
-               j++;
-       }
-       else {
-               ret[j] = ULM_BS;
-               if (str[i] == ULM_LF) {
-                       ret[j+1] = 'n';
-               }
-               else {
-                       ret[j+1] = str[i];
-               }
-               j += 2;
-       }
-} /* for */
-
-ret[j] = 0;
-
-return ret;
-}
-
-/*
- *----------------------------------------------------------------------
- * 
- * \fn char *glite_lbu_UnescapeULM(const char *str)
- * \param str          a string to unescape
- * \return             new (allocated) unescaped string or NULL (if str NULL or empty)
- * \brief in given string unescape all escaped ULM_QM, ULM_BS and ULM_LF
- *
- * Calls: malloc, strlen
- *
- * Algorithm: array lookup
- *               - the new string will be allocated
- *
- *----------------------------------------------------------------------
- */
-
-char *glite_lbu_UnescapeULM(const char *str)
-{
-unsigned int i,j;
-size_t size;
-char *ret;
-
-if (str == NULL) return NULL;
-
-size  = strlen(str);
-if (size == 0) return NULL;
-
-ret = (char*) malloc(1+size*sizeof(char));
-
-/*
-j = 0;
-for (i=0; i<size; i++) {
-       if ( (str[i] != ULM_BS) || 
-          ((str[i] == ULM_BS) && ((str[i+1] != ULM_BS) && (str[i+1] != ULM_QM) && (str[i+1] != 'n'))) )
-       {
-               if (str[i] == ULM_LF) { ret[j] = 'n'; }
-               else { ret[j] = str[i]; }
-               j++;
-       }
-} 
-*/
-for (i=j=0; i<size; i++,j++)
-       if (str[i] == ULM_BS) switch(str[++i]) {
-               case 'n': ret[j] = ULM_LF; break;
-               default: ret[j] = str[i]; break;
-       } else { ret[j] = str[i]; }
-
-ret[j] = '\0';
-
-return ret;
-}
-
-static const struct {
-       const char c,*e;
-} xml_etab[] = {
-       { '<',"lt" },
-       { '>',"gt" },
-       { '&',"amp" },
-       { '"',"quot" },
-       { '\'',"apos" },
-       { 0, NULL }
-};
-
-#define XML_ESCAPE_SET "<>&\"'"
-
-char *glite_lbu_EscapeXML(const char *in)
-{
-        const char* tmp_in;
-       char    *out;
-       int     cnt,i,j,k;
-
-       if (!in) return NULL;
-
-       for (cnt = 0, tmp_in = in; *tmp_in != '\0'; ++tmp_in) {
-               if (strchr(XML_ESCAPE_SET, *tmp_in) ||
-                       (*tmp_in & 0x7f) < 0x20 /* control character */ ||
-                       (*tmp_in == '%')) cnt++;
-        }
-
-       out = malloc(strlen(in)+1+cnt*5);
-
-       for (i=j=0; in[i]; i++) {
-               for (k=0; xml_etab[k].c && xml_etab[k].c != in[i]; k++);
-               if (xml_etab[k].c) {
-                       int     l;
-
-                       out[j++] = '&';
-                       memcpy(out+j,xml_etab[k].e,l=strlen(xml_etab[k].e));
-                       j += l;
-                       out[j++] = ';';
-               } else if ((in[i] & 0x7f) < 0x20 || in[i] == '%') {
-                       sprintf(out+j, "%%%02x", (unsigned char)in[i]);
-                       j+=3;
-               } else {
-                       out[j++] = in[i];
-               }
-       }
-       out[j] = 0;
-       return out;
-}
-
-char *glite_lbu_UnescapeXML(const char *in)
-{
-       char    *out;
-       int     i,j,k;
-       char    xtmp[3];
-       unsigned char   origchar;
-
-       if (!in) return NULL;
-       out = malloc(strlen(in)+1);
-
-       for (i=j=0; in[i]; j++) if (in[i] == '&') {
-               char    *s = strchr(in+i,';');
-               if (s) {
-                       int     l = s-in-i+1;
-                       for (k=0; xml_etab[k].c && strncasecmp(in+i+1,xml_etab[k].e,l-2); k++);
-                       if (xml_etab[k].c) {
-                               out[j] = xml_etab[k].c;
-                               i += l;
-                       } else out[j] = in[i++];
-               } else out[j] = in[i++];
-       } else if (in[i] == '%') {
-               if (isxdigit(xtmp[0]=in[i+1]) && isxdigit(xtmp[1]=in[i+2])) {
-                       xtmp[2] = '\0';
-                       origchar = (unsigned char) strtol(xtmp, NULL, 16);
-                       if ((origchar & 0x7f) < 0x20 || origchar == '%') {
-                               out[j] = origchar;
-                               i += 3;
-                       } else out[j] = in[i++];
-               } else out[j] = in[i++];
-       } else {
-               out[j] = in[i++];
-       }
-       out[j] = 0;
-       return out;
-}
-
-char *glite_lbu_EscapeSQL(const char *in)
-{
-        const char* tmp_in;
-       char    *out = NULL;
-       int     i,j,cnt;
-
-       if (!in) return NULL;
-
-       for (cnt = 0, tmp_in = in; (tmp_in = strchr(tmp_in,'\'')) != NULL; ++tmp_in) {
-          ++cnt;
-        }
-       for (tmp_in = in; (tmp_in = strchr(tmp_in,'\\')) != NULL; ++tmp_in) {
-          ++cnt;
-        }
-
-       out = malloc(strlen(in)+1+cnt);
-
-       for (i=j=0; in[i]; i++) {
-               if (in[i] == '\\') out[j++] = '\\';
-               if (in[i] == '\'') out[j++] = '\'';
-               out[j++] = in[i];
-       }
-       out[j] = 0;
-
-       return out;
-}
diff --git a/org.glite.lbjp-common.trio/src/strio.c b/org.glite.lbjp-common.trio/src/strio.c
deleted file mode 100644 (file)
index f1ab5b8..0000000
+++ /dev/null
@@ -1,581 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- ************************************************************************/
-
-/*
- * TODO
- * - StrToLongDouble
- */
-static const char rcsid[] = "@(#)$Id$";
-
-#if defined(unix) || defined(__xlC__) || defined(__QNX__)
-# define PLATFORM_UNIX
-#elif defined(WIN32) || defined(_WIN32)
-# define PLATFORM_WIN32
-#elif defined(AMIGA) && defined(__GNUC__)
-# define PLATFORM_UNIX
-#endif
-
-#if defined(__STDC__) && (__STDC_VERSION__ >= 199901L)
-# define TRIO_C99
-#endif
-
-#include "strio.h"
-#include <string.h>
-#include <locale.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include <time.h>
-#include <math.h>
-#ifndef DEBUG
-# define NDEBUG
-#endif
-#include <assert.h>
-
-#ifndef NULL
-# define NULL 0
-#endif
-#define NIL ((char)0)
-#ifndef FALSE
-# define FALSE (1 == 0)
-# define TRUE (! FALSE)
-#endif
-
-#define VALID(x) (NULL != (x))
-#define INVALID(x) (NULL == (x))
-
-#if defined(PLATFORM_UNIX)
-# define USE_STRCASECMP
-# define USE_STRNCASECMP
-# define USE_STRERROR
-# if defined(__QNX__)
-#  define strcasecmp(x,y) stricmp(x,y)
-#  define strncasecmp(x,y,n) strnicmp(x,y,n)
-# endif
-#elif defined(PLATFORM_WIN32)
-# define USE_STRCASECMP
-# define strcasecmp(x,y) strcmpi(x,y)
-#endif
-
-/*************************************************************************
- * StrAppendMax
- */
-char *StrAppendMax(char *target, size_t max, const char *source)
-{
-  assert(VALID(target));
-  assert(VALID(source));
-  assert(max > 0);
-
-  max -= StrLength(target) + 1;
-  return (max > 0) ? strncat(target, source, max) : target;
-}
-
-/*************************************************************************
- * StrCopyMax
- */
-char *StrCopyMax(char *target, size_t max, const char *source)
-{
-  assert(VALID(target));
-  assert(VALID(source));
-  assert(max > 0); /* Includes != 0 */
-
-  target = strncpy(target, source, max - 1);
-  target[max - 1] = (char)0;
-  return target;
-}
-
-/*************************************************************************
- * StrDuplicate
- */
-char *StrDuplicate(const char *source)
-{
-  char *target;
-
-  assert(VALID(source));
-
-  target = StrAlloc(StrLength(source) + 1);
-  if (target)
-    {
-      StrCopy(target, source);
-    }
-  return target;
-}
-
-/*************************************************************************
- * StrDuplicateMax
- */
-char *StrDuplicateMax(const char *source, size_t max)
-{
-  char *target;
-  size_t len;
-
-  assert(VALID(source));
-  assert(max > 0);
-
-  /* Make room for string plus a terminating zero */
-  len = StrLength(source) + 1;
-  if (len > max)
-    {
-      len = max;
-    }
-  target = StrAlloc(len);
-  if (target)
-    {
-      StrCopyMax(target, len, source);
-    }
-  return target;
-}
-
-/*************************************************************************
- * StrEqual
- */
-int StrEqual(const char *first, const char *second)
-{
-  assert(VALID(first));
-  assert(VALID(second));
-
-  if (VALID(first) && VALID(second))
-    {
-#if defined(USE_STRCASECMP)
-      return (0 == strcasecmp(first, second));
-#else
-      while ((*first != NIL) && (*second != NIL))
-       {
-         if (toupper(*first) != toupper(*second))
-           {
-             break;
-           }
-         first++;
-         second++;
-       }
-      return ((*first == NIL) && (*second == NIL));
-#endif
-    }
-  return FALSE;
-}
-
-/*************************************************************************
- * StrEqualCase
- */
-int StrEqualCase(const char *first, const char *second)
-{
-  assert(VALID(first));
-  assert(VALID(second));
-
-  if (VALID(first) && VALID(second))
-    {
-      return (0 == strcmp(first, second));
-    }
-  return FALSE;
-}
-
-/*************************************************************************
- * StrEqualCaseMax
- */
-int StrEqualCaseMax(const char *first, size_t max, const char *second)
-{
-  assert(VALID(first));
-  assert(VALID(second));
-
-  if (VALID(first) && VALID(second))
-    {
-      return (0 == strncmp(first, second, max));
-    }
-  return FALSE;
-}
-
-/*************************************************************************
- * StrEqualLocale
- */
-int StrEqualLocale(const char *first, const char *second)
-{
-  assert(VALID(first));
-  assert(VALID(second));
-
-#if defined(LC_COLLATE)
-  return (strcoll(first, second) == 0);
-#else
-  return StrEqual(first, second);
-#endif
-}
-
-/*************************************************************************
- * StrEqualMax
- */
-int StrEqualMax(const char *first, size_t max, const char *second)
-{
-  assert(VALID(first));
-  assert(VALID(second));
-
-  if (VALID(first) && VALID(second))
-    {
-#if defined(USE_STRNCASECMP)
-      return (0 == strncasecmp(first, second, max));
-#else
-      /* Not adequately tested yet */
-      size_t cnt = 0;
-      while ((*first != NIL) && (*second != NIL) && (cnt <= max))
-       {
-         if (toupper(*first) != toupper(*second))
-           {
-             break;
-           }
-         first++;
-         second++;
-         cnt++;
-       }
-      return ((cnt == max) || ((*first == NIL) && (*second == NIL)));
-#endif
-    }
-  return FALSE;
-}
-
-/*************************************************************************
- * StrError
- */
-const char *StrError(int errorNumber)
-{
-#if defined(USE_STRERROR)
-  return strerror(errorNumber);
-#else
-  return "unknown";
-#endif
-}
-
-/*************************************************************************
- * StrFormatDate
- */
-size_t StrFormatDateMax(char *target,
-                       size_t max,
-                       const char *format,
-                       const struct tm *datetime)
-{
-  assert(VALID(target));
-  assert(VALID(format));
-  assert(VALID(datetime));
-  assert(max > 0);
-  
-  return strftime(target, max, format, datetime);
-}
-
-/*************************************************************************
- * StrHash
- */
-unsigned long StrHash(const char *string, int type)
-{
-  unsigned long value = 0L;
-  char ch;
-
-  assert(VALID(string));
-  
-  switch (type)
-    {
-    case STRIO_HASH_PLAIN:
-      while ( (ch = *string++) != NIL )
-       {
-         value *= 31;
-         value += (unsigned long)ch;
-       }
-      break;
-    default:
-      assert(FALSE);
-      break;
-    }
-  return value;
-}
-
-/*************************************************************************
- * StrMatch
- */
-int StrMatch(char *string, char *pattern)
-{
-  assert(VALID(string));
-  assert(VALID(pattern));
-  
-  for (; ('*' != *pattern); ++pattern, ++string)
-    {
-      if (NIL == *string)
-       {
-         return (NIL == *pattern);
-       }
-      if ((toupper((int)*string) != toupper((int)*pattern))
-         && ('?' != *pattern))
-       {
-         return FALSE;
-       }
-    }
-  /* two-line patch to prevent *too* much recursiveness: */
-  while ('*' == pattern[1])
-    pattern++;
-
-  do
-    {
-      if ( StrMatch(string, &pattern[1]) )
-       {
-         return TRUE;
-       }
-    }
-  while (*string++);
-  
-  return FALSE;
-}
-
-/*************************************************************************
- * StrMatchCase
- */
-int StrMatchCase(char *string, char *pattern)
-{
-  assert(VALID(string));
-  assert(VALID(pattern));
-  
-  for (; ('*' != *pattern); ++pattern, ++string)
-    {
-      if (NIL == *string)
-       {
-         return (NIL == *pattern);
-       }
-      if ((*string != *pattern)
-         && ('?' != *pattern))
-       {
-         return FALSE;
-       }
-    }
-  /* two-line patch to prevent *too* much recursiveness: */
-  while ('*' == pattern[1])
-    pattern++;
-
-  do
-    {
-      if ( StrMatchCase(string, &pattern[1]) )
-       {
-         return TRUE;
-       }
-    }
-  while (*string++);
-  
-  return FALSE;
-}
-
-/*************************************************************************
- * StrSpanFunction
- *
- * Untested
- */
-size_t StrSpanFunction(char *source, int (*Function)(int))
-{
-  size_t count = 0;
-
-  assert(VALID(source));
-  assert(VALID(Function));
-  
-  while (*source != NIL)
-    {
-      if (Function(*source))
-       break; /* while */
-      source++;
-      count++;
-    }
-  return count;
-}
-
-/*************************************************************************
- * StrSubstringMax
- */
-char *StrSubstringMax(const char *string, size_t max, const char *find)
-{
-  size_t count;
-  size_t size;
-  char *result = NULL;
-
-  assert(VALID(string));
-  assert(VALID(find));
-  
-  size = StrLength(find);
-  if (size <= max)
-    {
-      for (count = 0; count <= max - size; count++)
-       {
-         if (StrEqualMax(find, size, &string[count]))
-           {
-             result = (char *)&string[count];
-             break;
-           }
-       }
-    }
-  return result;
-}
-
-/*************************************************************************
- * StrToDouble
- *
- * double ::= [ <sign> ]
- *            ( <number> |
- *              <number> <decimal_point> <number> |
- *              <decimal_point> <number> )
- *            [ <exponential> [ <sign> ] <number> ]
- * number ::= 1*( <digit> )
- * digit ::= ( '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' )
- * exponential ::= ( 'e' | 'E' )
- * sign ::= ( '-' | '+' )
- * decimal_point ::= '.'
- */
-double StrToDouble(const char *source, const char **endp)
-{
-#if defined(TRIO_C99)
-  return strtod(source, endp);
-#else
-  /* Preliminary code */
-  int isNegative = FALSE;
-  int isExponentNegative = FALSE;
-  unsigned long integer = 0;
-  unsigned long fraction = 0;
-  unsigned long fracdiv = 1;
-  unsigned long exponent = 0;
-  double value = 0.0;
-
-  /* First try hex-floats */
-  if ((source[0] == '0') && ((source[1] == 'x') || (source[1] == 'X')))
-    {
-      source += 2;
-      while (isxdigit((int)*source))
-       {
-         integer *= 16;
-         integer += (isdigit((int)*source)
-                     ? (*source - '0')
-                     : 10 + (toupper((int)*source) - 'A'));
-         source++;
-       }
-      if (*source == '.')
-       {
-         source++;
-         while (isxdigit((int)*source))
-           {
-             fraction *= 16;
-             fraction += (isdigit((int)*source)
-                          ? (*source - '0')
-                          : 10 + (toupper((int)*source) - 'A'));
-             fracdiv *= 16;
-             source++;
-           }
-         if ((*source == 'p') || (*source == 'P'))
-           {
-             source++;
-             if ((*source == '+') || (*source == '-'))
-               {
-                 isExponentNegative = (*source == '-');
-                 source++;
-               }
-             while (isdigit((int)*source))
-               {
-                 exponent *= 10;
-                 exponent += (*source - '0');
-                 source++;
-               }
-           }
-       }
-    }
-  else /* Then try normal decimal floats */
-    {
-      isNegative = (*source == '-');
-      /* Skip sign */
-      if ((*source == '+') || (*source == '-'))
-       source++;
-
-      /* Integer part */
-      while (isdigit((int)*source))
-       {
-         integer *= 10;
-         integer += (*source - '0');
-         source++;
-       }
-
-      if (*source == '.')
-       {
-         source++; /* skip decimal point */
-         while (isdigit((int)*source))
-           {
-             fraction *= 10;
-             fraction += (*source - '0');
-             fracdiv *= 10;
-             source++;
-           }
-       }
-      if ((*source == 'e') || (*source == 'E'))
-       {
-         source++; /* Skip exponential indicator */
-         isExponentNegative = (*source == '-');
-         if ((*source == '+') || (*source == '-'))
-           source++;
-         while (isdigit((int)*source))
-           {
-             exponent *= 10;
-             exponent += (*source - '0');
-             source++;
-           }
-       }
-    }
-  
-  value = (double)integer;
-  if (fraction != 0)
-    {
-      value += (double)fraction / (double)fracdiv;
-    }
-  if (exponent != 0)
-    {
-      if (isExponentNegative)
-       value /= pow((double)10, (double)exponent);
-      else
-       value *= pow((double)10, (double)exponent);
-    }
-  if (isNegative)
-    value = -value;
-
-  if (endp)
-    *endp = source;
-  return value;
-#endif
-}
-
-/*************************************************************************
- * StrToFloat
- */
-float StrToFloat(const char *source, const char **endp)
-{
-#if defined(TRIO_C99)
-  return strtof(source, endp);
-#else
-  return (float)StrToDouble(source, endp);
-#endif
-}
-
-/*************************************************************************
- * StrToUpper
- */
-int StrToUpper(char *target)
-{
-  int i = 0;
-
-  assert(VALID(target));
-  
-  while (NIL != *target)
-    {
-      *target = toupper((int)*target);
-      target++;
-      i++;
-    }
-  return i;
-}
diff --git a/org.glite.lbjp-common.trio/src/strio.h b/org.glite.lbjp-common.trio/src/strio.h
deleted file mode 100644 (file)
index 68845a3..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- ************************************************************************/
-
-#ifndef TRIO_STRIO_H
-#define TRIO_STRIO_H
-
-#if !(defined(DEBUG) || defined(NDEBUG))
-# define NDEBUG
-#endif
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#ifndef STRIO_MALLOC
-# define STRIO_MALLOC(n) malloc(n)
-#endif
-#ifndef STRIO_FREE
-# define STRIO_FREE(x) free(x)
-#endif
-
-/*
- * StrAppend(target, source)
- * StrAppendMax(target, maxsize, source)
- *
- *   Append 'source' to 'target'
- *
- * target = StrAlloc(size)
- *
- *   Allocate a new string
- *
- * StrContains(target, substring)
- *
- *   Find out if the string 'substring' is
- *   contained in the string 'target'
- *
- * StrCopy(target, source)
- * StrCopyMax(target, maxsize, source)
- *
- *   Copy 'source' to 'target'
- *
- * target = StrDuplicate(source)
- * target = StrDuplicateMax(source, maxsize)
- *
- *   Allocate and copy 'source' to 'target'
- *
- * StrEqual(first, second)
- * StrEqualMax(first, maxsize, second)
- *
- *   Compare if 'first' is equal to 'second'.
- *   Case-independent.
- *
- * StrEqualCase(first, second)
- * StrEqualCaseMax(first, maxsize, second)
- *
- *   Compare if 'first' is equal to 'second'
- *   Case-dependent. Please note that the use of the
- *   word 'case' has the opposite meaning as that of
- *   strcasecmp().
- *
- * StrFormat(target, format, ...)
- * StrFormatMax(target, maxsize, format, ...)
- *
- *   Build 'target' according to 'format' and succesive
- *   arguments. This is equal to the sprintf() and
- *   snprintf() functions.
- *
- * StrFormatDate(target, format, ...)
- *
- * StrFree(target)
- *
- *   De-allocates a string
- *
- * StrHash(string, type)
- *
- *   Calculates the hash value of 'string' based on the
- *   'type'.
- *
- * StrIndex(target, character)
- * StrIndexLast(target, character)
- *
- *   Find the first/last occurrence of 'character' in
- *   'target'
- *
- * StrLength(target)
- *
- *   Return the length of 'target'
- *
- * StrMatch(string, pattern)
- * StrMatchCase(string, pattern)
- *
- *   Find 'pattern' within 'string'. 'pattern' may contain
- *   wildcards such as * (asterics) and ? (question mark)
- *   which matches zero or more characters and exactly
- *   on character respectively
- *
- * StrScan(source, format, ...)
- *
- *   Equal to sscanf()
- *
- * StrSubstring(target, substring)
- *
- *   Find the first occurrence of the string 'substring'
- *   within the string 'target'
- *
- * StrTokenize(target, list)
- *
- *   Split 'target' into the first token delimited by
- *   one of the characters in 'list'. If 'target' is
- *   NULL then next token will be returned.
- *
- * StrToUpper(target)
- *
- *   Convert all lower case characters in 'target' into
- *   upper case characters.
- */
-
-enum {
-  STRIO_HASH_NONE = 0,
-  STRIO_HASH_PLAIN,
-  STRIO_HASH_TWOSIGNED
-};
-
-#if !defined(DEBUG) || defined(__DECC)
-#define StrAlloc(n) (char *)STRIO_MALLOC(n)
-#define StrAppend(x,y) strcat((x), (y))
-#define StrContains(x,y) (0 != strstr((x), (y)))
-#define StrCopy(x,y) strcpy((x), (y))
-#define StrIndex(x,y) strchr((x), (y))
-#define StrIndexLast(x,y) strrchr((x), (y))
-#define StrFree(x) STRIO_FREE(x)
-#define StrLength(x) strlen((x))
-#define StrSubstring(x,y) strstr((x), (y))
-#define StrTokenize(x,y) strtok((x), (y))
-#define StrToLong(x,y,n) strtol((x), (y), (n))
-#define StrToUnsignedLong(x,y,n) strtoul((x), (y), (n))
-#else /* DEBUG */
- /*
-  * To be able to use these macros everywhere, including in
-  * if() sentences, the assertions are put first in a comma
-  * seperated list.
-  *
-  * Unfortunately the DECC compiler does not seem to like this
-  * so it will use the un-asserted functions above for the
-  * debugging case too.
-  */
-#define StrAlloc(n) \
-     (assert((n) > 0),\
-      (char *)STRIO_MALLOC(n))
-#define StrAppend(x,y) \
-     (assert((x) != NULL),\
-      assert((y) != NULL),\
-      strcat((x), (y)))
-#define StrContains(x,y) \
-     (assert((x) != NULL),\
-      assert((y) != NULL),\
-      (0 != strstr((x), (y))))
-#define StrCopy(x,y) \
-     (assert((x) != NULL),\
-      assert((y) != NULL),\
-      strcpy((x), (y)))
-#define StrIndex(x,c) \
-     (assert((x) != NULL),\
-      strchr((x), (c)))
-#define StrIndexLast(x,c) \
-     (assert((x) != NULL),\
-      strrchr((x), (c)))
-#define StrFree(x) \
-     (assert((x) != NULL),\
-      STRIO_FREE(x))
-#define StrLength(x) \
-     (assert((x) != NULL),\
-      strlen((x)))
-#define StrSubstring(x,y) \
-     (assert((x) != NULL),\
-      assert((y) != NULL),\
-      strstr((x), (y)))
-#define StrTokenize(x,y) \
-     (assert((y) != NULL),\
-      strtok((x), (y)))
-#define StrToLong(x,y,n) \
-     (assert((x) != NULL),\
-      assert((y) != NULL),\
-      assert((n) >= 2 && (n) <= 36),\
-      strtol((x), (y), (n)))
-#define StrToUnsignedLong(x,y,n) \
-     (assert((x) != NULL),\
-      assert((y) != NULL),\
-      assert((n) >= 2 && (n) <= 36),\
-      strtoul((x), (y), (n)))
-#endif /* DEBUG */
-
-char *StrAppendMax(char *target, size_t max, const char *source);
-char *StrCopyMax(char *target, size_t max, const char *source);
-char *StrDuplicate(const char *source);
-char *StrDuplicateMax(const char *source, size_t max);
-int StrEqual(const char *first, const char *second);
-int StrEqualCase(const char *first, const char *second);
-int StrEqualCaseMax(const char *first, size_t max, const char *second);
-int StrEqualLocale(const char *first, const char *second);
-int StrEqualMax(const char *first, size_t max, const char *second);
-const char *StrError(int);
-size_t StrFormatDateMax(char *target, size_t max, const char *format, const struct tm *datetime);
-unsigned long StrHash(const char *string, int type);
-int StrMatch(char *string, char *pattern);
-int StrMatchCase(char *string, char *pattern);
-size_t StrSpanFunction(char *source, int (*Function)(int));
-char *StrSubstringMax(const char *string, size_t max, const char *find);
-float StrToFloat(const char *source, const char **target);
-double StrToDouble(const char *source, const char **target);
-int StrToUpper(char *target);
-
-#endif /* TRIO_STRIO_H */
diff --git a/org.glite.lbjp-common.trio/src/trio.c b/org.glite.lbjp-common.trio/src/trio.c
deleted file mode 100644 (file)
index 6e4211e..0000000
+++ /dev/null
@@ -1,5706 +0,0 @@
-
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- *************************************************************************
- *
- * A note to trio contributors:
- *
- * Avoid heap allocation at all costs to ensure that the trio functions
- * are async-safe. The exceptions are the printf/fprintf functions, which
- * uses fputc, and the asprintf functions and the <alloc> modifier, which
- * by design are required to allocate form the heap.
- *
- ************************************************************************/
-
-/*
- * TODO:
- *  - Scan is probably too permissive about its modifiers.
- *  - C escapes in %#[] ?
- *  - C99 support has not been properly tested.
- *  - Multibyte characters (done for format parsing, except scan groups)
- *  - Complex numbers? (C99 _Complex)
- *  - Boolean values? (C99 _Bool)
- *  - C99 NaN(n-char-sequence) missing
- *  - Should we support the GNU %a alloc modifier? GNU has an ugly hack
- *    for %a, because C99 used %a for other purposes. If specified as
- *    %as or %a[ it is interpreted as the alloc modifier, otherwise as
- *    the C99 hex-float. This means that you cannot scan %as as a hex-float
- *    immediately followed by an 's'.
- *  - Scanning of collating symbols.
- */
-
-static const char rcsid[] = "@(#)$Id$";
-
-/*************************************************************************
- * Trio include files
- */
-#include "trio.h"
-#include "triop.h"
-#include "strio.h"
-
-#ifdef DATAGRID_EXTENSION
-#include "escape.h"
-#endif
-
-/*
- * Encode the error code and the position. This is decoded
- * with TRIO_ERROR_CODE and TRIO_ERROR_POSITION.
- */
-#if TRIO_ERRORS
-# define TRIO_ERROR_RETURN(x,y) (- ((x) + ((y) << 8)))
-#else
-# define TRIO_ERROR_RETURN(x,y) (-1)
-#endif
-
-
-/*************************************************************************
- * Platform and compiler support detection
- */
-#if defined(unix) || defined(__xlC__) || defined(_AIX) || defined(__QNX__)
-# define PLATFORM_UNIX
-#elif defined(AMIGA) && defined(__GNUC__)
-# define PLATFORM_UNIX
-#elif defined(WIN32) || defined(_WIN32) || defined(_MSC_VER)
-# define PLATFORM_WIN32
-# define TRIO_MSVC_5 1100
-#endif
-
-#if defined(__STDC__) && defined(__STDC_VERSION__)
-# if (__STDC_VERSION__ >= 199409L)
-#  define TRIO_COMPILER_SUPPORTS_ISO94
-# endif
-# if (__STDC_VERSION__ >= 199901L)
-#  define TRIO_COMPILER_SUPPORTS_C99
-# endif
-#endif
-
-#if defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)
-# define TRIO_COMPILER_SUPPORTS_UNIX98
-#endif
-
-#if defined(__STDC_ISO_10646__) || defined(MB_LEN_MAX) || defined(USE_MULTIBYTE) || TRIO_WIDECHAR
-# define TRIO_COMPILER_SUPPORTS_MULTIBYTE
-# if !defined(MB_LEN_MAX)
-#  define MB_LEN_MAX 6
-# endif
-#endif
-
-
-/*************************************************************************
- * Generic definitions
- */
-
-#if !(defined(DEBUG) || defined(NDEBUG))
-# define NDEBUG
-#endif
-#include <assert.h>
-#include <ctype.h>
-#if !defined(TRIO_COMPILER_SUPPORTS_C99) && !defined(isblank)
-# define isblank(x) (((x)==32) || ((x)==9))
-#endif
-#include <math.h>
-#include <limits.h>
-#include <float.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <errno.h>
-
-#ifndef NULL
-# define NULL 0
-#endif
-#define NIL ((char)0)
-#ifndef FALSE
-# define FALSE (1 == 0)
-# define TRUE (! FALSE)
-#endif
-#define BOOLEAN_T int
-
-/* mincore() can be used for debugging purposes */
-#define VALID(x) (NULL != (x))
-
-/* xlC crashes on log10(0) */
-#define guarded_log10(x) (((x) == 0.0) ? -HUGE_VAL : log10(x))
-#define guarded_log16(x) (guarded_log10(x) / log10(16.0))
-
-
-/*************************************************************************
- * Platform specific definitions
- */
-#if defined(PLATFORM_UNIX)
-# include <unistd.h>
-# include <signal.h>
-# include <locale.h>
-# define USE_LOCALE
-#endif /* PLATFORM_UNIX */
-#if defined(PLATFORM_WIN32)
-# include <io.h>
-# define read _read
-# define write _write
-#endif /* PLATFORM_WIN32 */
-
-#if TRIO_WIDECHAR
-# if defined(TRIO_COMPILER_SUPPORTS_ISO94)
-#  include <wchar.h>
-#  include <wctype.h>
-# else
-typedef char wchar_t;
-typedef int wint_t;
-#  define WEOF EOF
-#  define iswalnum(x) isalnum(x)
-#  define iswalpha(x) isalpha(x)
-#  define iswblank(x) isblank(x)
-#  define iswcntrl(x) iscntrl(x)
-#  define iswdigit(x) isdigit(x)
-#  define iswgraph(x) isgraph(x)
-#  define iswlower(x) islower(x)
-#  define iswprint(x) isprint(x)
-#  define iswpunct(x) ispunct(x)
-#  define iswspace(x) isspace(x)
-#  define iswupper(x) isupper(x)
-#  define iswxdigit(x) isxdigit(x)
-# endif
-#endif
-
-
-/*************************************************************************
- * Compiler dependent definitions
- */
-
-/* Support for long long */
-#ifndef __cplusplus
-# if !defined(USE_LONGLONG)
-#  if defined(__GNUC__) && !defined(__STRICT_ANSI__)
-#   define USE_LONGLONG
-#  elif defined(__SUNPRO_C)
-#   define USE_LONGLONG
-#  elif defined(_LONG_LONG) || defined(_LONGLONG)
-#   define USE_LONGLONG
-#  endif
-# endif
-#endif
-
-/* The extra long numbers */
-#if defined(USE_LONGLONG)
-typedef signed long long int trio_longlong_t;
-typedef unsigned long long int trio_ulonglong_t;
-#elif defined(_MSC_VER)
-# if (_MSC_VER >= TRIO_MSVC_5)
-typedef signed __int64 trio_longlong_t;
-typedef unsigned __int64 trio_ulonglong_t;
-# else
-typedef signed long int trio_longlong_t;
-typedef unsigned long int trio_ulonglong_t;
-# endif
-#else
-typedef signed long int trio_longlong_t;
-typedef unsigned long int trio_ulonglong_t;
-#endif
-
-/* Maximal and fixed integer types */
-#if defined(TRIO_COMPILER_SUPPORTS_C99)
-# include <stdint.h>
-typedef intmax_t trio_intmax_t;
-typedef uintmax_t trio_uintmax_t;
-typedef int8_t trio_int8_t;
-typedef int16_t trio_int16_t;
-typedef int32_t trio_int32_t;
-typedef int64_t trio_int64_t;
-#elif defined(TRIO_COMPILER_SUPPORTS_UNIX98)
-# include <inttypes.h>
-typedef intmax_t trio_intmax_t;
-typedef uintmax_t trio_uintmax_t;
-typedef int8_t trio_int8_t;
-typedef int16_t trio_int16_t;
-typedef int32_t trio_int32_t;
-typedef int64_t trio_int64_t;
-#elif defined(_MSC_VER) && (_MSC_VER >= TRIO_MSVC_5)
-typedef trio_longlong_t trio_intmax_t;
-typedef trio_ulonglong_t trio_uintmax_t;
-typedef __int8 trio_int8_t;
-typedef __int16 trio_int16_t;
-typedef __int32 trio_int32_t;
-typedef __int64 trio_int64_t;
-#else
-typedef trio_longlong_t trio_intmax_t;
-typedef trio_ulonglong_t trio_uintmax_t;
-# if defined(TRIO_INT8_T)
-typedef TRIO_INT8_T trio_int8_t;
-# else
-typedef signed char trio_int8_t;
-# endif
-# if defined(TRIO_INT16_T)
-typedef TRIO_INT16_T trio_int16_t;
-# else
-typedef signed short trio_int16_t;
-# endif
-# if defined(TRIO_INT32_T)
-typedef TRIO_INT32_T trio_int32_t;
-# else
-typedef signed int trio_int32_t;
-# endif
-# if defined(TRIO_INT64_T)
-typedef TRIO_INT64_T trio_int64_t;
-# else
-typedef trio_longlong_t trio_int64_t;
-# endif
-#endif
-
-
-/*************************************************************************
- * Internal definitions
- */
-
-/* Long double sizes */
-#ifdef LDBL_DIG
-# define MAX_MANTISSA_DIGITS LDBL_DIG
-# define MAX_EXPONENT_DIGITS 4
-#else
-# define MAX_MANTISSA_DIGITS DBL_DIG
-# define MAX_EXPONENT_DIGITS 3
-#endif
-
-/* The maximal number of digits is for base 2 */
-#define MAX_CHARS_IN(x) (sizeof(x) * CHAR_BIT)
-/* The width of a pointer. The number of bits in a hex digit is 4 */
-#define POINTER_WIDTH ((sizeof("0x") - 1) + sizeof(void *) * CHAR_BIT / 4)
-
-/* Infinite and Not-A-Number for floating-point */
-#define INFINITE_LOWER "inf"
-#define INFINITE_UPPER "INF"
-#define LONG_INFINITE_LOWER "infinite"
-#define LONG_INFINITE_UPPER "INFINITE"
-#define NAN_LOWER "nan"
-#define NAN_UPPER "NAN"
-
-/* Various constants */
-enum {
-  TYPE_PRINT = 1,
-  TYPE_SCAN  = 2,
-
-  /* Flags. Use maximum 32 */
-  FLAGS_NEW                 = 0,
-  FLAGS_STICKY              = 1,
-  FLAGS_SPACE               = 2 * FLAGS_STICKY,
-  FLAGS_SHOWSIGN            = 2 * FLAGS_SPACE,
-  FLAGS_LEFTADJUST          = 2 * FLAGS_SHOWSIGN,
-  FLAGS_ALTERNATIVE         = 2 * FLAGS_LEFTADJUST,
-  FLAGS_SHORT               = 2 * FLAGS_ALTERNATIVE,
-  FLAGS_SHORTSHORT          = 2 * FLAGS_SHORT,
-  FLAGS_LONG                = 2 * FLAGS_SHORTSHORT,
-  FLAGS_QUAD                = 2 * FLAGS_LONG,
-  FLAGS_LONGDOUBLE          = 2 * FLAGS_QUAD,
-  FLAGS_SIZE_T              = 2 * FLAGS_LONGDOUBLE,
-  FLAGS_PTRDIFF_T           = 2 * FLAGS_SIZE_T,
-  FLAGS_INTMAX_T            = 2 * FLAGS_PTRDIFF_T,
-  FLAGS_NILPADDING          = 2 * FLAGS_INTMAX_T,
-  FLAGS_UNSIGNED            = 2 * FLAGS_NILPADDING,
-  FLAGS_UPPER               = 2 * FLAGS_UNSIGNED,
-  FLAGS_WIDTH               = 2 * FLAGS_UPPER,
-  FLAGS_WIDTH_PARAMETER     = 2 * FLAGS_WIDTH,
-  FLAGS_PRECISION           = 2 * FLAGS_WIDTH_PARAMETER,
-  FLAGS_PRECISION_PARAMETER = 2 * FLAGS_PRECISION,
-  FLAGS_BASE                = 2 * FLAGS_PRECISION_PARAMETER,
-  FLAGS_BASE_PARAMETER      = 2 * FLAGS_BASE,
-  FLAGS_FLOAT_E             = 2 * FLAGS_BASE_PARAMETER,
-  FLAGS_FLOAT_G             = 2 * FLAGS_FLOAT_E,
-  FLAGS_QUOTE               = 2 * FLAGS_FLOAT_G,
-  FLAGS_WIDECHAR            = 2 * FLAGS_QUOTE,
-  FLAGS_ALLOC               = 2 * FLAGS_WIDECHAR,
-  FLAGS_IGNORE              = 2 * FLAGS_ALLOC,
-  FLAGS_IGNORE_PARAMETER    = 2 * FLAGS_IGNORE,
-  FLAGS_VARSIZE_PARAMETER   = 2 * FLAGS_IGNORE_PARAMETER,
-  FLAGS_FIXED_SIZE          = 2 * FLAGS_VARSIZE_PARAMETER,
-  /* Reused flags */
-  FLAGS_EXCLUDE             = FLAGS_SHORT,
-  FLAGS_USER_DEFINED        = FLAGS_IGNORE,
-  /* Compounded flags */
-  FLAGS_ALL_VARSIZES        = FLAGS_LONG | FLAGS_QUAD | FLAGS_INTMAX_T | FLAGS_PTRDIFF_T | FLAGS_SIZE_T,
-  FLAGS_ALL_SIZES           = FLAGS_ALL_VARSIZES | FLAGS_SHORTSHORT | FLAGS_SHORT,
-
-  NO_POSITION  = -1,
-  NO_WIDTH     =  0,
-  NO_PRECISION = -1,
-  NO_SIZE      = -1,
-
-  NO_BASE      = -1,
-  MIN_BASE     =  2,
-  MAX_BASE     = 36,
-  BASE_BINARY  =  2,
-  BASE_OCTAL   =  8,
-  BASE_DECIMAL = 10,
-  BASE_HEX     = 16,
-
-  /* Maximal number of allowed parameters */
-  MAX_PARAMETERS = 64,
-  /* Maximal number of characters in class */
-  MAX_CHARACTER_CLASS = UCHAR_MAX,
-
-  /* Maximal string lengths for user-defined specifiers */
-  MAX_USER_NAME = 64,
-  MAX_USER_DATA = 256,
-  
-  /* Maximal length of locale separator strings */
-  MAX_LOCALE_SEPARATOR_LENGTH = MB_LEN_MAX,
-  /* Maximal number of integers in grouping */
-  MAX_LOCALE_GROUPS = 64
-};
-
-#define NO_GROUPING ((int)CHAR_MAX)
-
-/* Fundamental formatting parameter types */
-#define FORMAT_UNKNOWN   0
-#define FORMAT_INT       1
-#define FORMAT_DOUBLE    2
-#define FORMAT_CHAR      3
-#define FORMAT_STRING    4
-#define FORMAT_POINTER   5
-#define FORMAT_COUNT     6
-#define FORMAT_PARAMETER 7
-#define FORMAT_GROUP     8
-#if TRIO_GNU
-# define FORMAT_ERRNO    9
-#endif
-#if TRIO_EXTENSION
-# define FORMAT_USER_DEFINED 10
-#endif
-
-/* Character constants */
-#define CHAR_IDENTIFIER '%'
-#define CHAR_BACKSLASH '\\'
-#define CHAR_QUOTE '\"'
-#define CHAR_ADJUST ' '
-
-/* Character class expressions */
-#define CLASS_ALNUM ":alnum:"
-#define CLASS_ALPHA ":alpha:"
-#define CLASS_CNTRL ":cntrl:"
-#define CLASS_DIGIT ":digit:"
-#define CLASS_GRAPH ":graph:"
-#define CLASS_LOWER ":lower:"
-#define CLASS_PRINT ":print:"
-#define CLASS_PUNCT ":punct:"
-#define CLASS_SPACE ":space:"
-#define CLASS_UPPER ":upper:"
-#define CLASS_XDIGIT ":xdigit:"
-
-/*
- * SPECIFIERS:
- *
- *
- * a  Hex-float
- * A  Hex-float
- * c  Character
- * C  Widechar character (wint_t)
- * d  Decimal
- * e  Float
- * E  Float
- * F  Float
- * F  Float
- * g  Float
- * G  Float
- * i  Integer
- * m  Error message
- * n  Count
- * o  Octal
- * p  Pointer
- * s  String
- * S  Widechar string (wchar_t *)
- * u  Unsigned
- * x  Hex
- * X  Hex
- * [] Group
- * <> User-defined
- *
- * Reserved:
- *
- * D  Binary Coded Decimal %D(length,precision) (OS/390)
- */
-#define SPECIFIER_CHAR 'c'
-#define SPECIFIER_STRING 's'
-#define SPECIFIER_DECIMAL 'd'
-#define SPECIFIER_INTEGER 'i'
-#define SPECIFIER_UNSIGNED 'u'
-#define SPECIFIER_OCTAL 'o'
-#define SPECIFIER_HEX 'x'
-#define SPECIFIER_HEX_UPPER 'X'
-#define SPECIFIER_FLOAT_E 'e'
-#define SPECIFIER_FLOAT_E_UPPER 'E'
-#define SPECIFIER_FLOAT_F 'f'
-#define SPECIFIER_FLOAT_F_UPPER 'F'
-#define SPECIFIER_FLOAT_G 'g'
-#define SPECIFIER_FLOAT_G_UPPER 'G'
-#define SPECIFIER_POINTER 'p'
-#define SPECIFIER_GROUP '['
-#define SPECIFIER_UNGROUP ']'
-#define SPECIFIER_COUNT 'n'
-#if TRIO_UNIX98
-# define SPECIFIER_CHAR_UPPER 'C'
-# define SPECIFIER_STRING_UPPER 'S'
-#endif
-#if TRIO_C99
-# define SPECIFIER_HEXFLOAT 'a'
-# define SPECIFIER_HEXFLOAT_UPPER 'A'
-#endif
-#if TRIO_GNU
-# define SPECIFIER_ERRNO 'm'
-#endif
-#if TRIO_EXTENSION
-# define SPECIFIER_BINARY 'b'
-# define SPECIFIER_BINARY_UPPER 'B'
-# define SPECIFIER_USER_DEFINED_BEGIN '<'
-# define SPECIFIER_USER_DEFINED_END '>'
-# define SPECIFIER_USER_DEFINED_SEPARATOR ':'
-#endif
-
-/*
- * QUALIFIERS:
- *
- *
- * Numbers = d,i,o,u,x,X
- * Float = a,A,e,E,f,F,g,G
- * String = s
- * Char = c
- *
- *
- * 9$ Position
- *      Use the 9th parameter. 9 can be any number between 1 and
- *      the maximal argument
- *
- * 9 Width
- *      Set width to 9. 9 can be any number, but must not be postfixed
- *      by '$'
- *
- * h  Short
- *    Numbers:
- *      (unsigned) short int
- *
- * hh Short short
- *    Numbers:
- *      (unsigned) char
- *
- * l  Long
- *    Numbers:
- *      (unsigned) long int
- *    String:
- *      as the S specifier
- *    Char:
- *      as the C specifier
- *
- * ll Long Long
- *    Numbers:
- *      (unsigned) long long int
- *
- * L  Long Double
- *    Float
- *      long double
- *
- * #  Alternative
- *    Float:
- *      Decimal-point is always present
- *    String:
- *      non-printable characters are handled as \number
- *
- *    Spacing
- *
- * +  Sign
- *
- * -  Alignment
- *
- * .  Precision
- *
- * *  Parameter
- *    print: use parameter
- *    scan: no parameter (ignore)
- *
- * q  Quad
- *
- * Z  size_t
- *
- * w  Widechar
- *
- * '  Thousands/quote
- *    Numbers:
- *      Integer part grouped in thousands
- *    Binary numbers:
- *      Number grouped in nibbles (4 bits)
- *    String:
- *      Quoted string
- *
- * j  intmax_t
- * t  prtdiff_t
- * z  size_t
- *
- * !  Sticky
- * @  Parameter (for both print and scan)
- *
- * I  n-bit Integer
- *    Numbers:
- *      The following options exists
- *        I8  = 8-bit integer
- *        I16 = 16-bit integer
- *        I32 = 32-bit integer
- *        I64 = 64-bit integer
- */
-#define QUALIFIER_POSITION '$'
-#define QUALIFIER_SHORT 'h'
-#define QUALIFIER_LONG 'l'
-#define QUALIFIER_LONG_UPPER 'L'
-#define QUALIFIER_ALTERNATIVE '#'
-#define QUALIFIER_SPACE ' '
-#define QUALIFIER_PLUS '+'
-#define QUALIFIER_MINUS '-'
-#define QUALIFIER_DOT '.'
-#define QUALIFIER_STAR '*'
-#define QUALIFIER_CIRCUMFLEX '^'
-#if TRIO_C99
-# define QUALIFIER_SIZE_T 'z'
-# define QUALIFIER_PTRDIFF_T 't'
-# define QUALIFIER_INTMAX_T 'j'
-#endif
-#if TRIO_BSD || TRIO_GNU
-# define QUALIFIER_QUAD 'q'
-#endif
-#if TRIO_GNU
-# define QUALIFIER_SIZE_T_UPPER 'Z'
-#endif
-#if TRIO_MISC
-# define QUALIFIER_WIDECHAR 'w'
-#endif
-#if TRIO_MICROSOFT
-# define QUALIFIER_FIXED_SIZE 'I'
-#endif
-#if TRIO_EXTENSION
-# define QUALIFIER_QUOTE '\''
-# define QUALIFIER_STICKY '!'
-# define QUALIFIER_VARSIZE '&' /* This should remain undocumented */
-# define QUALIFIER_PARAM '@' /* Experimental */
-# define QUALIFIER_COLON ':' /* For scanlists */
-# define QUALIFIER_EQUAL '=' /* For scanlists */
-#endif
-#if DATAGRID_EXTENSION
-# define QUALIFIER_ESCAPE '|'
-#endif
-
-
-/*************************************************************************
- * Internal structures
- */
-
-/* Parameters */
-typedef struct {
-  int type;
-  unsigned long flags;
-  int width;
-  int precision;
-  int base;
-  int varsize;
-#ifdef QUALIFIER_ESCAPE
-  enum dg_escape { ESCAPE_NONE, ESCAPE_ULM, ESCAPE_XML, ESCAPE_SQL } escape;
-#endif
-  int indexAfterSpecifier;
-  union {
-    char *string;
-#if TRIO_WIDECHAR
-    wchar_t *wstring;
-#endif
-    void *pointer;
-    union {
-      trio_uintmax_t as_signed;
-      trio_intmax_t as_unsigned;
-    } number;
-    double doubleNumber;
-    double *doublePointer;
-    long double longdoubleNumber;
-    long double *longdoublePointer;
-    int errorNumber;
-  } data;
-  /* For the user-defined specifier */
-  char user_name[MAX_USER_NAME];
-  char user_data[MAX_USER_DATA];
-} parameter_T;
-
-/* General trio "class" */
-typedef struct _trio_T {
-  void *location;
-  void (*OutStream)(struct _trio_T *, int);
-  void (*InStream)(struct _trio_T *, int *);
-  /*
-   * The number of characters that would have been written/read if
-   * there had been sufficient space.
-   */
-  int processed;
-  /*
-   * The number of characters that are actually written/read.
-   * Processed and committed with only differ for the *nprintf
-   * and *nscanf functions.
-   */
-  int committed;
-  int max;
-  int current;
-} trio_T;
-
-/* References (for user-defined callbacks) */
-typedef struct _reference_T {
-  trio_T *data;
-  parameter_T *parameter;
-} reference_T;
-
-/* Registered entries (for user-defined callbacks) */
-typedef struct _userdef_T {
-  struct _userdef_T *next;
-  trio_callback_t callback;
-  char *name;
-} userdef_T;
-
-
-/*************************************************************************
- * Internal variables
- */
-
-static const char null[] = "(nil)";
-
-#if defined(USE_LOCALE)
-static struct lconv *internalLocaleValues = NULL;
-#endif
-
-/*
- * UNIX98 says "in a locale where the radix character is not defined,
- * the radix character defaults to a period (.)"
- */
-static char internalDecimalPoint[MAX_LOCALE_SEPARATOR_LENGTH + 1] = ".";
-static char internalThousandSeparator[MAX_LOCALE_SEPARATOR_LENGTH + 1] = ",";
-static char internalGrouping[MAX_LOCALE_GROUPS] = { (char)NO_GROUPING };
-
-static const char internalDigitsLower[] = "0123456789abcdefghijklmnopqrstuvwxyz";
-static const char internalDigitsUpper[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-static BOOLEAN_T internalDigitsUnconverted = TRUE;
-static int internalDigitArray[128];
-#if TRIO_EXTENSION
-static BOOLEAN_T internalCollationUnconverted = TRUE;
-static char internalCollationArray[MAX_CHARACTER_CLASS][MAX_CHARACTER_CLASS];
-#endif
-
-static volatile trio_callback_t internalEnterCriticalRegion = NULL;
-static volatile trio_callback_t internalLeaveCriticalRegion = NULL;
-static userdef_T *internalUserDef = NULL;
-
-
-/*************************************************************************
- * trio_strerror [public]
- */
-const char *trio_strerror(int errorcode)
-{
-  /* Textual versions of the error codes */
-  switch (TRIO_ERROR_CODE(errorcode))
-    {
-    case TRIO_EOF:
-      return "End of file";
-    case TRIO_EINVAL:
-      return "Invalid argument";
-    case TRIO_ETOOMANY:
-      return "Too many arguments";
-    case TRIO_EDBLREF:
-      return "Double reference";
-    case TRIO_EGAP:
-      return "Reference gap";
-    case TRIO_ENOMEM:
-      return "Out of memory";
-    case TRIO_ERANGE:
-      return "Invalid range";
-    default:
-      return "Unknown";
-    }
-}
-
-/*************************************************************************
- * TrioIsQualifier [private]
- *
- * Description:
- *  Remember to add all new qualifiers to this function.
- *  QUALIFIER_POSITION must not be added.
- */
-static BOOLEAN_T
-TrioIsQualifier(const char ch)
-{
-  /* QUALIFIER_POSITION is not included */
-  switch (ch)
-    {
-    case '0': case '1': case '2': case '3': case '4':
-    case '5': case '6': case '7': case '8': case '9':
-    case QUALIFIER_PLUS:
-    case QUALIFIER_MINUS:
-    case QUALIFIER_SPACE:
-    case QUALIFIER_DOT:
-    case QUALIFIER_STAR:
-    case QUALIFIER_ALTERNATIVE:
-    case QUALIFIER_SHORT:
-    case QUALIFIER_LONG:
-    case QUALIFIER_LONG_UPPER:
-    case QUALIFIER_CIRCUMFLEX:
-#if defined(QUALIFIER_SIZE_T)
-    case QUALIFIER_SIZE_T:
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
-    case QUALIFIER_PTRDIFF_T:
-#endif
-#if defined(QUALIFIER_INTMAX_T)
-    case QUALIFIER_INTMAX_T:
-#endif
-#if defined(QUALIFIER_QUAD)
-    case QUALIFIER_QUAD:
-#endif
-#if defined(QUALIFIER_SIZE_T_UPPER)
-    case QUALIFIER_SIZE_T_UPPER:
-#endif
-#if defined(QUALIFIER_WIDECHAR)
-    case QUALIFIER_WIDECHAR:
-#endif
-#if defined(QUALIFIER_QUOTE)
-    case QUALIFIER_QUOTE:
-#endif
-#if defined(QUALIFIER_STICKY)
-    case QUALIFIER_STICKY:
-#endif
-#if defined(QUALIFIER_VARSIZE)
-    case QUALIFIER_VARSIZE:
-#endif
-#if defined(QUALIFIER_PARAM)
-    case QUALIFIER_PARAM:
-#endif
-#if defined(QUALIFIER_FIXED_SIZE)
-    case QUALIFIER_FIXED_SIZE:
-#endif
-#ifdef QUALIFIER_ESCAPE
-    case QUALIFIER_ESCAPE:
-#endif
-      return TRUE;
-    default:
-      return FALSE;
-    }
-}
-
-/*************************************************************************
- * TrioGenerateNan [private]
- *
- * Calculating NaN portably is difficult. Some compilers will emit
- * warnings about divide by zero, and others will simply fail to
- * generate a NaN.
- */
-static double
-TrioGenerateNaN(void)
-{
-#if defined(TRIO_COMPILER_SUPPORTS_C99)
-  return nan(NULL);
-#elif defined(DBL_QNAN)
-  return DBL_QNAN;
-#elif defined(PLATFORM_UNIX)
-  double value;
-  void (*signal_handler)(int);
-  
-  signal_handler = signal(SIGFPE, SIG_IGN);
-  value = 0.0 / 0.0;
-  signal(SIGFPE, signal_handler);
-  return value;
-#else
-  return 0.0 / 0.0;
-#endif
-}
-
-/*************************************************************************
- * TrioIsNan [private]
- */
-static int
-TrioIsNan(double number)
-{
-#ifdef isnan
-  /* C99 defines isnan() as a macro */
-  return isnan(number);
-#else
-  double integral, fraction;
-  
-  return (/* NaN is the only number which does not compare to itself */
-         (number != number) ||
-         /* Fallback solution if NaN compares to NaN */
-         ((number != 0.0) &&
-          (fraction = modf(number, &integral),
-           integral == fraction)));
-#endif
-}
-
-/*************************************************************************
- * TrioIsInfinite [private]
- */
-static int
-TrioIsInfinite(double number)
-{
-#ifdef isinf
-  /* C99 defines isinf() as a macro */
-  return isinf(number);
-#else
-  return ((number == HUGE_VAL) ? 1 : ((number == -HUGE_VAL) ? -1 : 0));
-#endif
-}
-
-/*************************************************************************
- * TrioSetLocale [private]
- */
-#if defined(USE_LOCALE)
-static void
-TrioSetLocale(void)
-{
-  internalLocaleValues = (struct lconv *)localeconv();
-  if (internalLocaleValues)
-    {
-      if ((internalLocaleValues->decimal_point) &&
-         (internalLocaleValues->decimal_point[0] != NIL))
-       {
-         StrCopyMax(internalDecimalPoint,
-                    sizeof(internalDecimalPoint),
-                    internalLocaleValues->decimal_point);
-       }
-      if ((internalLocaleValues->thousands_sep) &&
-         (internalLocaleValues->thousands_sep[0] != NIL))
-       {
-         StrCopyMax(internalThousandSeparator,
-                    sizeof(internalThousandSeparator),
-                    internalLocaleValues->thousands_sep);
-       }
-      if ((internalLocaleValues->grouping) &&
-         (internalLocaleValues->grouping[0] != NIL))
-       {
-         StrCopyMax(internalGrouping,
-                    sizeof(internalGrouping),
-                    internalLocaleValues->grouping);
-       }
-    }
-}
-#endif /* defined(USE_LOCALE) */
-
-/*************************************************************************
- * TrioGetPosition [private]
- *
- * Get the %n$ position.
- */
-static int
-TrioGetPosition(const char *format,
-               int *indexPointer)
-{
-  char *tmpformat;
-  int number = 0;
-  int index = *indexPointer;
-
-  number = (int)StrToLong(&format[index], &tmpformat, BASE_DECIMAL);
-  index = (int)(tmpformat - format);
-  if ((number != 0) && (QUALIFIER_POSITION == format[index++]))
-    {
-      *indexPointer = index;
-      /*
-       * number is decreased by 1, because n$ starts from 1, whereas
-       * the array it is indexing starts from 0.
-       */
-      return number - 1;
-    }
-  return NO_POSITION;
-}
-
-/*************************************************************************
- * TrioFindNamespace [private]
- *
- * Find registered user-defined specifier.
- * The prev argument is used for optimisation only.
- */
-static userdef_T *
-TrioFindNamespace(const char *name, userdef_T **prev)
-{
-  userdef_T *def;
-  
-  if (internalEnterCriticalRegion)
-    (void)internalEnterCriticalRegion(NULL);
-  
-  for (def = internalUserDef; def; def = def->next)
-    {
-      /* Case-sensitive string comparison */
-      if (StrEqualCase(def->name, name))
-       break;
-      
-      if (prev)
-       *prev = def;
-    }
-  
-  if (internalLeaveCriticalRegion)
-    (void)internalLeaveCriticalRegion(NULL);
-  
-  return def;
-}
-
-/*************************************************************************
- * TrioPreprocess [private]
- *
- * Description:
- *  Parse the format string
- */
-static int
-TrioPreprocess(int type,
-              const char *format,
-              parameter_T *parameters,
-              va_list arglist,
-              void **argarray)
-{
-#if TRIO_ERRORS
-  /* Count the number of times a parameter is referenced */
-  unsigned short usedEntries[MAX_PARAMETERS];
-#endif
-  /* Parameter counters */
-  int parameterPosition;
-  int currentParam;
-  int maxParam = -1;
-  /* Utility variables */
-  unsigned long flags;
-  int width;
-  int precision;
-  int varsize;
-#ifdef QUALIFIER_ESCAPE
-  enum dg_escape escape;
-#endif
-  int base;
-  int index;  /* Index into formatting string */
-  int dots;  /* Count number of dots in modifier part */
-  BOOLEAN_T positional;  /* Does the specifier have a positional? */
-  BOOLEAN_T got_sticky = FALSE;  /* Are there any sticky modifiers at all? */
-  /*
-   * indices specifies the order in which the parameters must be
-   * read from the va_args (this is necessary to handle positionals)
-   */
-  int indices[MAX_PARAMETERS];
-  int pos = 0;
-  /* Various variables */
-  char ch;
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  int charlen;
-#endif
-  int i = -1;
-  int num;
-  char *tmpformat;
-
-
-#if TRIO_ERRORS
-  /*
-   * The 'parameters' array is not initialized, but we need to
-   * know which entries we have used.
-   */
-  memset(usedEntries, 0, sizeof(usedEntries));
-#endif
-
-  index = 0;
-  parameterPosition = 0;
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  mblen(NULL, 0);
-#endif
-  
-  while (format[index])
-    {
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-      if (! isascii(format[index]))
-       {
-         /*
-          * Multibyte characters cannot be legal specifiers or
-          * modifiers, so we skip over them.
-          */
-         charlen = mblen(&format[index], MB_LEN_MAX);
-         index += (charlen > 0) ? charlen : 1;
-         continue; /* while */
-       }
-#endif /* TRIO_COMPILER_SUPPORTS_MULTIBYTE */
-      if (CHAR_IDENTIFIER == format[index++])
-       {
-         if (CHAR_IDENTIFIER == format[index])
-           {
-             index++;
-             continue; /* while */
-           }
-
-         flags = FLAGS_NEW;
-         dots = 0;
-         currentParam = TrioGetPosition(format, &index);
-         positional = (NO_POSITION != currentParam);
-         if (!positional)
-           {
-             /* We have no positional, get the next counter */
-             currentParam = parameterPosition;
-           }
-          if(currentParam >= MAX_PARAMETERS)
-           {
-             /* Bail out completely to make the error more obvious */
-             return TRIO_ERROR_RETURN(TRIO_ETOOMANY, index);
-           }
-
-         if (currentParam > maxParam)
-           maxParam = currentParam;
-
-         /* Default values */
-         width = NO_WIDTH;
-         precision = NO_PRECISION;
-         base = NO_BASE;
-         varsize = NO_SIZE;
-#ifdef QUALIFIER_ESCAPE
-         escape = ESCAPE_NONE;
-#endif
-
-         while (TrioIsQualifier(format[index]))
-           {
-             ch = format[index++];
-
-             switch (ch)
-               {
-               case QUALIFIER_SPACE:
-                 flags |= FLAGS_SPACE;
-                 break;
-
-               case QUALIFIER_PLUS:
-                 flags |= FLAGS_SHOWSIGN;
-                 break;
-
-               case QUALIFIER_MINUS:
-                 flags |= FLAGS_LEFTADJUST;
-                 flags &= ~FLAGS_NILPADDING;
-                 break;
-
-               case QUALIFIER_ALTERNATIVE:
-                 flags |= FLAGS_ALTERNATIVE;
-                 break;
-
-               case QUALIFIER_DOT:
-                 if (dots == 0) /* Precision */
-                   {
-                     dots++;
-
-                     /* Skip if no precision */
-                     if (QUALIFIER_DOT == format[index])
-                       break;
-                     
-                     /* After the first dot we have the precision */
-                     flags |= FLAGS_PRECISION;
-                     if ((QUALIFIER_STAR == format[index]) ||
-                         (QUALIFIER_PARAM == format[index]))
-                       {
-                         index++;
-                         flags |= FLAGS_PRECISION_PARAMETER;
-
-                         precision = TrioGetPosition(format, &index);
-                         if (precision == NO_POSITION)
-                           {
-                             parameterPosition++;
-                             if (positional)
-                               precision = parameterPosition;
-                             else
-                               {
-                                 precision = currentParam;
-                                 currentParam = precision + 1;
-                               }
-                           }
-                         else
-                           {
-                             if (! positional)
-                               currentParam = precision + 1;
-                             if (width > maxParam)
-                               maxParam = precision;
-                           }
-                         if (currentParam > maxParam)
-                           maxParam = currentParam;
-                       }
-                     else
-                       {
-                         precision = StrToLong(&format[index], &tmpformat, BASE_DECIMAL);
-                         index = (int)(tmpformat - format);
-                       }
-                   }
-                 else if (dots == 1) /* Base */
-                   {
-                     dots++;
-                     
-                     /* After the second dot we have the base */
-                     flags |= FLAGS_BASE;
-                     if ((QUALIFIER_STAR == format[index]) ||
-                         (QUALIFIER_PARAM == format[index]))
-                       {
-                         index++;
-                         flags |= FLAGS_BASE_PARAMETER;
-                         base = TrioGetPosition(format, &index);
-                         if (base == NO_POSITION)
-                           {
-                             parameterPosition++;
-                             if (positional)
-                               base = parameterPosition;
-                             else
-                               {
-                                 base = currentParam;
-                                 currentParam = base + 1;
-                               }
-                           }
-                         else
-                           {
-                             if (! positional)
-                               currentParam = base + 1;
-                             if (base > maxParam)
-                               maxParam = base;
-                           }
-                         if (currentParam > maxParam)
-                           maxParam = currentParam;
-                       }
-                     else
-                       {
-                         base = StrToLong(&format[index], &tmpformat, BASE_DECIMAL);
-                         if (base > MAX_BASE)
-                           return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-                         index = (int)(tmpformat - format);
-                       }
-                   }
-                 else
-                   {
-                     return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-                   }
-                 break; /* QUALIFIER_DOT */
-
-               case QUALIFIER_PARAM:
-                 type = TYPE_PRINT;
-                 /* FALLTHROUGH */
-               case QUALIFIER_STAR:
-                 /* This has different meanings for print and scan */
-                 if (TYPE_PRINT == type)
-                   {
-                     /* Read with from parameter */
-                     flags |= (FLAGS_WIDTH | FLAGS_WIDTH_PARAMETER);
-                     width = TrioGetPosition(format, &index);
-                     if (width == NO_POSITION)
-                       {
-                         parameterPosition++;
-                         if (positional)
-                           width = parameterPosition;
-                         else
-                           {
-                             width = currentParam;
-                             currentParam = width + 1;
-                           }
-                       }
-                     else
-                       {
-                         if (! positional)
-                           currentParam = width + 1;
-                         if (width > maxParam)
-                           maxParam = width;
-                       }
-                     if (currentParam > maxParam)
-                       maxParam = currentParam;
-                   }
-                 else
-                   {
-                     /* Scan, but do not store result */
-                     flags |= FLAGS_IGNORE;
-                   }
-
-                 break; /* QUALIFIER_STAR */
-
-               case '0':
-                 if (! (flags & FLAGS_LEFTADJUST))
-                   flags |= FLAGS_NILPADDING;
-                 /* FALLTHROUGH */
-               case '1': case '2': case '3': case '4':
-               case '5': case '6': case '7': case '8': case '9':
-                 flags |= FLAGS_WIDTH;
-                 /* &format[index - 1] is used to "rewind" the read
-                  * character from format
-                  */
-                 width = StrToLong(&format[index - 1], &tmpformat, BASE_DECIMAL);
-                 index = (int)(tmpformat - format);
-                 break;
-
-               case QUALIFIER_SHORT:
-                 if (flags & FLAGS_SHORTSHORT)
-                   return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-                 else if (flags & FLAGS_SHORT)
-                   flags |= FLAGS_SHORTSHORT;
-                 else
-                   flags |= FLAGS_SHORT;
-                 break;
-
-               case QUALIFIER_LONG:
-                 if (flags & FLAGS_QUAD)
-                   return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-                 else if (flags & FLAGS_LONG)
-                   flags |= FLAGS_QUAD;
-                 else
-                   flags |= FLAGS_LONG;
-                 break;
-
-               case QUALIFIER_LONG_UPPER:
-                 flags |= FLAGS_LONGDOUBLE;
-                 break;
-
-#if defined(QUALIFIER_SIZE_T)
-               case QUALIFIER_SIZE_T:
-                 flags |= FLAGS_SIZE_T;
-                 /* Modify flags for later truncation of number */
-                 if (sizeof(size_t) == sizeof(trio_ulonglong_t))
-                   flags |= FLAGS_QUAD;
-                 else if (sizeof(size_t) == sizeof(long))
-                   flags |= FLAGS_LONG;
-                 break;
-#endif
-
-#if defined(QUALIFIER_PTRDIFF_T)
-               case QUALIFIER_PTRDIFF_T:
-                 flags |= FLAGS_PTRDIFF_T;
-                 if (sizeof(ptrdiff_t) == sizeof(trio_ulonglong_t))
-                   flags |= FLAGS_QUAD;
-                 else if (sizeof(ptrdiff_t) == sizeof(long))
-                   flags |= FLAGS_LONG;
-                 break;
-#endif
-
-#if defined(QUALIFIER_INTMAX_T)
-               case QUALIFIER_INTMAX_T:
-                 flags |= FLAGS_INTMAX_T;
-                 if (sizeof(trio_intmax_t) == sizeof(trio_ulonglong_t))
-                   flags |= FLAGS_QUAD;
-                 else if (sizeof(trio_intmax_t) == sizeof(long))
-                   flags |= FLAGS_LONG;
-                 break;
-#endif
-
-#if defined(QUALIFIER_QUAD)
-               case QUALIFIER_QUAD:
-                 flags |= FLAGS_QUAD;
-                 break;
-#endif
-
-#if defined(QUALIFIER_FIXED_SIZE)
-               case QUALIFIER_FIXED_SIZE:
-                 if (flags & FLAGS_FIXED_SIZE)
-                   return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-
-                 if (flags & (FLAGS_ALL_SIZES | FLAGS_LONGDOUBLE |
-                              FLAGS_WIDECHAR | FLAGS_VARSIZE_PARAMETER))
-                   return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-
-                 if ((format[index] == '6') &&
-                     (format[index + 1] == '4'))
-                   {
-                     varsize = sizeof(trio_int64_t);
-                     index += 2;
-                   }
-                 else if ((format[index] == '3') &&
-                          (format[index + 1] == '2'))
-                   {
-                     varsize = sizeof(trio_int32_t);
-                     index += 2;
-                   }
-                 else if ((format[index] == '1') &&
-                          (format[index + 1] == '6'))
-                   {
-                     varsize = sizeof(trio_int16_t);
-                     index += 2;
-                   }
-                 else if (format[index] == '8')
-                   {
-                     varsize = sizeof(trio_int8_t);
-                     index++;
-                   }
-                 else
-                   return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-                 
-                 flags |= FLAGS_FIXED_SIZE;
-                 break;
-#endif
-
-#ifdef QUALIFIER_ESCAPE
-               case QUALIFIER_ESCAPE:
-                 switch (format[index++]) {
-                   case 'U': escape = ESCAPE_ULM; break;
-                   case 'X': escape = ESCAPE_XML; break;
-                   case 'S': escape = ESCAPE_SQL; break;
-                   default: return TRIO_ERROR_RETURN(TRIO_EINVAL,index);
-                 }
-                 break;
-#endif
-
-
-#if defined(QUALIFIER_WIDECHAR)
-               case QUALIFIER_WIDECHAR:
-                 flags |= FLAGS_WIDECHAR;
-                 break;
-#endif
-
-#if defined(QUALIFIER_SIZE_T_UPPER)
-               case QUALIFIER_SIZE_T_UPPER:
-                 break;
-#endif
-
-#if defined(QUALIFIER_QUOTE)
-               case QUALIFIER_QUOTE:
-                 flags |= FLAGS_QUOTE;
-                 break;
-#endif
-
-#if defined(QUALIFIER_STICKY)
-               case QUALIFIER_STICKY:
-                 flags |= FLAGS_STICKY;
-                 got_sticky = TRUE;
-                 break;
-#endif
-                 
-#if defined(QUALIFIER_VARSIZE)
-               case QUALIFIER_VARSIZE:
-                 flags |= FLAGS_VARSIZE_PARAMETER;
-                 parameterPosition++;
-                 if (positional)
-                   varsize = parameterPosition;
-                 else
-                   {
-                     varsize = currentParam;
-                     currentParam = varsize + 1;
-                   }
-                 if (currentParam > maxParam)
-                   maxParam = currentParam;
-                 break;
-#endif
-
-               default:
-                 /* Bail out completely to make the error more obvious */
-                  return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-               }
-           } /* while qualifier */
-
-         /*
-          * Parameters only need the type and value. The value is
-          * read later.
-          */
-         if (flags & FLAGS_WIDTH_PARAMETER)
-           {
-#if TRIO_ERRORS
-             usedEntries[width] += 1;
-#endif
-             parameters[pos].type = FORMAT_PARAMETER;
-             indices[width] = pos;
-             width = pos++;
-           }
-         if (flags & FLAGS_PRECISION_PARAMETER)
-           {
-#if TRIO_ERRORS
-             usedEntries[precision] += 1;
-#endif
-             parameters[pos].type = FORMAT_PARAMETER;
-             indices[precision] = pos;
-             precision = pos++;
-           }
-         if (flags & FLAGS_BASE_PARAMETER)
-           {
-#if TRIO_ERRORS
-             usedEntries[base] += 1;
-#endif
-             parameters[pos].type = FORMAT_PARAMETER;
-             indices[base] = pos;
-             base = pos++;
-           }
-         if (flags & FLAGS_VARSIZE_PARAMETER)
-           {
-#if TRIO_ERRORS
-             usedEntries[varsize] += 1;
-#endif
-             parameters[pos].type = FORMAT_PARAMETER;
-             indices[varsize] = pos;
-             varsize = pos++;
-           }
-         
-         indices[currentParam] = pos;
-         
-         switch (format[index++])
-           {
-#if defined(SPECIFIER_CHAR_UPPER)
-           case SPECIFIER_CHAR_UPPER:
-             flags |= FLAGS_WIDECHAR;
-             /* FALLTHROUGH */
-#endif
-           case SPECIFIER_CHAR:
-             if (flags & FLAGS_LONG)
-               flags |= FLAGS_WIDECHAR;
-             else if (flags & FLAGS_SHORT)
-               flags &= ~FLAGS_WIDECHAR;
-             parameters[pos].type = FORMAT_CHAR;
-             break;
-
-#if defined(SPECIFIER_STRING_UPPER)
-           case SPECIFIER_STRING_UPPER:
-             flags |= FLAGS_WIDECHAR;
-             /* FALLTHROUGH */
-#endif
-           case SPECIFIER_STRING:
-             if (flags & FLAGS_LONG)
-               flags |= FLAGS_WIDECHAR;
-             else if (flags & FLAGS_SHORT)
-               flags &= ~FLAGS_WIDECHAR;
-             parameters[pos].type = FORMAT_STRING;
-             break;
-
-
-           case SPECIFIER_GROUP:
-             if (TYPE_SCAN == type)
-               {
-                 int depth = 1;
-                 parameters[pos].type = FORMAT_GROUP;
-                 if (format[index] == QUALIFIER_CIRCUMFLEX)
-                   index++;
-                 if (format[index] == SPECIFIER_UNGROUP)
-                   index++;
-                 if (format[index] == QUALIFIER_MINUS)
-                   index++;
-                 /* Skip nested brackets */
-                 while (format[index] != NIL)
-                   {
-                     if (format[index] == SPECIFIER_GROUP)
-                       {
-                         depth++;
-                       }
-                     else if (format[index] == SPECIFIER_UNGROUP)
-                       {
-                         if (--depth <= 0)
-                           {
-                             index++;
-                             break;
-                           }
-                       }
-                     index++;
-                   }
-               }
-             break;
-             
-           case SPECIFIER_INTEGER:
-             parameters[pos].type = FORMAT_INT;
-             break;
-             
-           case SPECIFIER_UNSIGNED:
-             flags |= FLAGS_UNSIGNED;
-             parameters[pos].type = FORMAT_INT;
-             break;
-
-           case SPECIFIER_DECIMAL:
-             /* Disable base modifier */
-             flags &= ~FLAGS_BASE_PARAMETER;
-             base = BASE_DECIMAL;
-             parameters[pos].type = FORMAT_INT;
-             break;
-
-           case SPECIFIER_OCTAL:
-             flags &= ~FLAGS_BASE_PARAMETER;
-             base = BASE_OCTAL;
-             parameters[pos].type = FORMAT_INT;
-             break;
-
-#if defined(SPECIFIER_BINARY)
-           case SPECIFIER_BINARY_UPPER:
-             flags |= FLAGS_UPPER;
-             /* FALLTHROUGH */
-           case SPECIFIER_BINARY:
-             flags |= FLAGS_NILPADDING;
-             flags &= ~FLAGS_BASE_PARAMETER;
-             base = BASE_BINARY;
-             parameters[pos].type = FORMAT_INT;
-             break;
-#endif
-
-           case SPECIFIER_HEX_UPPER:
-             flags |= FLAGS_UPPER;
-             /* FALLTHROUGH */
-           case SPECIFIER_HEX:
-             flags |= FLAGS_UNSIGNED;
-             flags &= ~FLAGS_BASE_PARAMETER;
-             base = BASE_HEX;
-             parameters[pos].type = FORMAT_INT;
-             break;
-
-           case SPECIFIER_FLOAT_E_UPPER:
-             flags |= FLAGS_UPPER;
-             /* FALLTHROUGH */
-           case SPECIFIER_FLOAT_E:
-             flags |= FLAGS_FLOAT_E;
-             parameters[pos].type = FORMAT_DOUBLE;
-             break;
-
-           case SPECIFIER_FLOAT_G_UPPER:
-             flags |= FLAGS_UPPER;
-             /* FALLTHROUGH */
-           case SPECIFIER_FLOAT_G:
-             flags |= FLAGS_FLOAT_G;
-             parameters[pos].type = FORMAT_DOUBLE;
-             break;
-
-           case SPECIFIER_FLOAT_F_UPPER:
-             flags |= FLAGS_UPPER;
-             /* FALLTHROUGH */
-           case SPECIFIER_FLOAT_F:
-             parameters[pos].type = FORMAT_DOUBLE;
-             break;
-
-           case SPECIFIER_POINTER:
-             parameters[pos].type = FORMAT_POINTER;
-             break;
-
-           case SPECIFIER_COUNT:
-             parameters[pos].type = FORMAT_COUNT;
-             break;
-
-#if defined(SPECIFIER_HEXFLOAT)
-# if defined(SPECIFIER_HEXFLOAT_UPPER)
-           case SPECIFIER_HEXFLOAT_UPPER:
-             flags |= FLAGS_UPPER;
-             /* FALLTHROUGH */
-# endif
-           case SPECIFIER_HEXFLOAT:
-             base = BASE_HEX;
-             parameters[pos].type = FORMAT_DOUBLE;
-             break;
-#endif
-
-#if defined(FORMAT_ERRNO)
-           case SPECIFIER_ERRNO:
-             parameters[pos].type = FORMAT_ERRNO;
-             break;
-#endif
-
-#if defined(SPECIFIER_USER_DEFINED_BEGIN)
-           case SPECIFIER_USER_DEFINED_BEGIN:
-             {
-               unsigned int max;
-               int without_namespace = TRUE;
-               
-               parameters[pos].type = FORMAT_USER_DEFINED;
-               parameters[pos].user_name[0] = NIL;
-               tmpformat = (char *)&format[index];
-             
-               while ((ch = format[index]))
-                 {
-                   index++;
-                   if (ch == SPECIFIER_USER_DEFINED_END)
-                     {
-                       if (without_namespace)
-                         {
-                           /* We must get the handle first */
-                           parameters[pos].type = FORMAT_PARAMETER;
-                           parameters[pos].indexAfterSpecifier = index;
-                           parameters[pos].flags = FLAGS_USER_DEFINED;
-                           /* Adjust parameters for insertion of new one */
-                           pos++;
-# if TRIO_ERRORS
-                           usedEntries[currentParam] += 1;
-# endif
-                           parameters[pos].type = FORMAT_USER_DEFINED;
-                           currentParam++;
-                           indices[currentParam] = pos;
-                           if (currentParam > maxParam)
-                             maxParam = currentParam;
-                         }
-                       /* Copy the user data */
-                       max = (unsigned int)(&format[index] - tmpformat);
-                       if (max > MAX_USER_DATA)
-                         max = MAX_USER_DATA;
-                       StrCopyMax(parameters[pos].user_data,
-                                  max,
-                                  tmpformat);
-                       break; /* while */
-                     }
-                   if (ch == SPECIFIER_USER_DEFINED_SEPARATOR)
-                     {
-                       without_namespace = FALSE;
-                       /* Copy the namespace for later looking-up */
-                       max = (int)(&format[index] - tmpformat);
-                       if (max > MAX_USER_NAME)
-                         max = MAX_USER_NAME;
-                       StrCopyMax(parameters[pos].user_name,
-                                  max,
-                                  tmpformat);
-                       tmpformat = (char *)&format[index];
-                     }
-                 }
-               if (ch != SPECIFIER_USER_DEFINED_END)
-                 return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-             }
-             break;
-#endif /* defined(SPECIFIER_USER_DEFINED_BEGIN) */
-             
-           default:
-             /* Bail out completely to make the error more obvious */
-              return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-           }
-
-#if TRIO_ERRORS
-         /*  Count the number of times this entry has been used */
-         usedEntries[currentParam] += 1;
-#endif
-         
-         /* Find last sticky parameters */
-         if (got_sticky && !(flags & FLAGS_STICKY))
-           {
-             for (i = pos - 1; i >= 0; i--)
-               {
-                 if (parameters[i].type == FORMAT_PARAMETER)
-                   continue;
-                 if ((parameters[i].flags & FLAGS_STICKY) &&
-                     (parameters[i].type == parameters[pos].type))
-                   {
-                     /* Do not overwrite current qualifiers */
-                     flags |= (parameters[i].flags & (unsigned long)~FLAGS_STICKY);
-                     if (width == NO_WIDTH)
-                       width = parameters[i].width;
-                     if (precision == NO_PRECISION)
-                       precision = parameters[i].precision;
-                     if (base == NO_BASE)
-                       base = parameters[i].base;
-                     break;
-                   }
-               }
-           }
-         
-         parameters[pos].indexAfterSpecifier = index;
-         parameters[pos].flags = flags;
-         parameters[pos].width = width;
-         parameters[pos].precision = precision;
-         parameters[pos].base = (base == NO_BASE) ? BASE_DECIMAL : base;
-         parameters[pos].varsize = varsize;
-#ifdef QUALIFIER_ESCAPE
-         parameters[pos].escape = escape;
-#endif
-         pos++;
-         
-         if (! positional)
-           parameterPosition++;
-         
-       } /* if identifier */
-      
-    } /* while format characters left */
-
-  for (num = 0; num <= maxParam; num++)
-    {
-#if TRIO_ERRORS
-      if (usedEntries[num] != 1)
-       {
-         if (usedEntries[num] == 0) /* gap detected */
-           return TRIO_ERROR_RETURN(TRIO_EGAP, num);
-         else /* double references detected */
-           return TRIO_ERROR_RETURN(TRIO_EDBLREF, num);
-       }
-#endif
-      
-      i = indices[num];
-
-      /*
-       * FORMAT_PARAMETERS are only present if they must be read,
-       * so it makes no sense to check the ignore flag (besides,
-       * the flags variable is not set for that particular type)
-       */
-      if ((parameters[i].type != FORMAT_PARAMETER) &&
-         (parameters[i].flags & FLAGS_IGNORE))
-       continue; /* for all arguments */
-
-      /*
-       * The stack arguments are read according to ANSI C89
-       * default argument promotions:
-       *
-       *  char           = int
-       *  short          = int
-       *  unsigned char  = unsigned int
-       *  unsigned short = unsigned int
-       *  float          = double
-       *
-       * In addition to the ANSI C89 these types are read (the
-       * default argument promotions of C99 has not been
-       * considered yet)
-       *
-       *  long long
-       *  long double
-       *  size_t
-       *  ptrdiff_t
-       *  intmax_t
-       */
-      switch (parameters[i].type)
-       {
-       case FORMAT_GROUP:
-       case FORMAT_STRING:
-#if TRIO_WIDECHAR
-         if (flags & FLAGS_WIDECHAR)
-           {
-             parameters[i].data.wstring = (argarray == NULL)
-               ? va_arg(arglist, wchar_t *)
-               : (wchar_t *)(argarray[num]);
-           }
-         else
-#endif
-           {
-             parameters[i].data.string = (argarray == NULL)
-               ? va_arg(arglist, char *)
-               : (char *)(argarray[num]);
-           }
-         break;
-
-       case FORMAT_POINTER:
-       case FORMAT_COUNT:
-       case FORMAT_USER_DEFINED:
-       case FORMAT_UNKNOWN:
-         parameters[i].data.pointer = (argarray == NULL)
-           ? va_arg(arglist, void *)
-           : argarray[num];
-         break;
-
-       case FORMAT_CHAR:
-       case FORMAT_INT:
-         if (TYPE_SCAN == type)
-           {
-              if (argarray == NULL)
-                parameters[i].data.pointer = 
-                  (trio_uintmax_t *)va_arg(arglist, void *);
-              else
-                {
-                  if (parameters[i].type == FORMAT_CHAR)
-                    parameters[i].data.pointer =
-                      (trio_uintmax_t *)((char *)argarray[num]);
-                  else if (parameters[i].flags & FLAGS_SHORT)
-                    parameters[i].data.pointer =
-                      (trio_uintmax_t *)((short *)argarray[num]);
-                  else
-                    parameters[i].data.pointer =
-                      (trio_uintmax_t *)((int *)argarray[num]);
-                }
-           }
-         else
-           {
-#if defined(QUALIFIER_VARSIZE) || defined(QUALIFIER_FIXED_SIZE)
-             if ((parameters[i].flags & FLAGS_VARSIZE_PARAMETER) ||
-                 (parameters[i].flags & FLAGS_FIXED_SIZE))
-               {
-                 if (parameters[i].flags & FLAGS_VARSIZE_PARAMETER)
-                   {
-                     /*
-                      * Variable sizes are mapped onto the fixed sizes, in
-                      * accordance with integer promotion.
-                      *
-                      * Please note that this may not be portable, as we
-                      * only guess the size, not the layout of the numbers.
-                      * For example, if int is little-endian, and long is
-                      * big-endian, then this will fail.
-                      */
-                     varsize = (int)parameters[parameters[i].varsize].data.number.as_unsigned;
-                   }
-                 else
-                   {
-                     /* Used for the I<bits> modifiers */
-                     varsize = parameters[i].varsize;
-                   }
-                 parameters[i].flags &= ~FLAGS_ALL_VARSIZES;
-                 
-                 if (varsize <= (int)sizeof(int))
-                   ;
-                 else if (varsize <= (int)sizeof(long))
-                   parameters[i].flags |= FLAGS_LONG;
-#if defined(QUALIFIER_INTMAX_T)
-                 else if (varsize <= (int)sizeof(trio_longlong_t))
-                   parameters[i].flags |= FLAGS_QUAD;
-                 else
-                   parameters[i].flags |= FLAGS_INTMAX_T;
-#else
-                 else
-                   parameters[i].flags |= FLAGS_QUAD;
-#endif
-               }
-#endif /* defined(QUALIFIER_VARSIZE) */
-#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
-             if (parameters[i].flags & FLAGS_SIZE_T)
-               parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(arglist, size_t)
-                 : (trio_uintmax_t)(*((size_t *)argarray[num]));
-             else
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
-             if (parameters[i].flags & FLAGS_PTRDIFF_T)
-               parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(arglist, ptrdiff_t)
-                 : (trio_uintmax_t)(*((ptrdiff_t *)argarray[num]));
-             else
-#endif
-#if defined(QUALIFIER_INTMAX_T)
-             if (parameters[i].flags & FLAGS_INTMAX_T)
-               parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(arglist, trio_intmax_t)
-                 : (trio_uintmax_t)(*((trio_intmax_t *)argarray[num]));
-             else
-#endif
-             if (parameters[i].flags & FLAGS_QUAD)
-               parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(arglist, trio_ulonglong_t)
-                 : (trio_uintmax_t)(*((trio_ulonglong_t *)argarray[num]));
-             else if (parameters[i].flags & FLAGS_LONG)
-               parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(arglist, long)
-                 : (trio_uintmax_t)(*((long *)argarray[num]));
-             else
-               {
-                 if (argarray == NULL)
-                   parameters[i].data.number.as_unsigned = (trio_uintmax_t)va_arg(arglist, int);
-                 else
-                   {
-                     if (parameters[i].type == FORMAT_CHAR)
-                       parameters[i].data.number.as_unsigned = (trio_uintmax_t)(*((char *)argarray[num]));
-                     else if (parameters[i].flags & FLAGS_SHORT)
-                       parameters[i].data.number.as_unsigned = (trio_uintmax_t)(*((short *)argarray[num]));
-                     else
-                       parameters[i].data.number.as_unsigned = (trio_uintmax_t)(*((int *)argarray[num]));
-                   }
-               }
-           }
-         break;
-
-       case FORMAT_PARAMETER:
-         /*
-          * The parameter for the user-defined specifier is a pointer,
-          * whereas the rest (width, precision, base) uses an integer.
-          */
-         if (parameters[i].flags & FLAGS_USER_DEFINED)
-           parameters[i].data.pointer = (argarray == NULL)
-             ? va_arg(arglist, void *)
-             : argarray[num];
-         else
-           parameters[i].data.number.as_unsigned = (argarray == NULL)
-             ? (trio_uintmax_t)va_arg(arglist, int)
-             : (trio_uintmax_t)(*((int *)argarray[num]));
-         break;
-
-       case FORMAT_DOUBLE:
-         if (TYPE_SCAN == type)
-           {
-             if (parameters[i].flags & FLAGS_LONG)
-               parameters[i].data.longdoublePointer = (argarray == NULL)
-                 ? va_arg(arglist, long double *)
-                 : (long double *)((long double *)argarray[num]);
-             else
-                {
-                  if (argarray == NULL)
-                    parameters[i].data.doublePointer =
-                      va_arg(arglist, double *);
-                 else
-                   {
-                     if (parameters[i].flags & FLAGS_SHORT)
-                       parameters[i].data.doublePointer =
-                         (double *)((float *)argarray[num]);
-                     else
-                       parameters[i].data.doublePointer =
-                         (double *)((double *)argarray[num]);
-                   }
-                }
-           }
-         else
-           {
-             if (parameters[i].flags & FLAGS_LONG)
-               parameters[i].data.longdoubleNumber = (argarray == NULL)
-                 ? va_arg(arglist, long double)
-                 : (long double)(*((long double *)argarray[num]));
-             else
-               {
-                 if (argarray == NULL)
-                   parameters[i].data.longdoubleNumber = (long double)va_arg(arglist, double);
-                 else
-                   {
-                     if (parameters[i].flags & FLAGS_SHORT)
-                       parameters[i].data.longdoubleNumber = (long double)(*((float *)argarray[num]));
-                     else
-                       parameters[i].data.longdoubleNumber = (long double)(long double)(*((double *)argarray[num]));
-                   }
-               }
-           }
-         break;
-
-#if defined(FORMAT_ERRNO)
-       case FORMAT_ERRNO:
-         parameters[i].data.errorNumber = errno;
-         break;
-#endif
-
-       default:
-         break;
-       }
-    } /* for all specifiers */
-  return num;
-}
-
-
-/*************************************************************************
- *
- * @FORMATTING
- *
- ************************************************************************/
-
-
-/*************************************************************************
- * TrioWriteNumber [private]
- *
- * Description:
- *  Output a number.
- *  The complexity of this function is a result of the complexity
- *  of the dependencies of the flags.
- */
-static void
-TrioWriteNumber(trio_T *self,
-               trio_uintmax_t number,
-               unsigned long flags,
-               int width,
-               int precision,
-               int base)
-{
-  BOOLEAN_T isNegative;
-  char buffer[MAX_CHARS_IN(trio_uintmax_t) * (1 + MAX_LOCALE_SEPARATOR_LENGTH) + 1];
-  char *bufferend;
-  char *pointer;
-  const char *digits;
-  int i;
-  int length;
-  char *p;
-  int charsPerThousand;
-  int groupingIndex;
-  int count;
-
-  assert(VALID(self));
-  assert(VALID(self->OutStream));
-  assert((base >= MIN_BASE && base <= MAX_BASE) || (base == NO_BASE));
-
-  digits = (flags & FLAGS_UPPER) ? internalDigitsUpper : internalDigitsLower;
-
-  isNegative = (flags & FLAGS_UNSIGNED)
-    ? FALSE
-    : ((trio_intmax_t)number < 0);
-  if (isNegative)
-    number = -number;
-
-  if (flags & FLAGS_QUAD)
-    number &= (trio_ulonglong_t)-1;
-  else if (flags & FLAGS_LONG)
-    number &= (unsigned long)-1;
-  else
-    number &= (unsigned int)-1;
-  
-  /* Build number */
-  pointer = bufferend = &buffer[sizeof(buffer) - 1];
-  *pointer-- = NIL;
-  charsPerThousand = (int)internalGrouping[0];
-  groupingIndex = 1;
-  for (i = 1; i < (int)sizeof(buffer); i++)
-    {
-      *pointer-- = digits[number % base];
-      number /= base;
-      if (number == 0)
-       break;
-
-      if ((flags & FLAGS_QUOTE)
-         && (charsPerThousand != NO_GROUPING)
-         && (i % charsPerThousand == 0))
-       {
-         /*
-          * We are building the number from the least significant
-          * to the most significant digit, so we have to copy the
-          * thousand separator backwards
-          */
-         length = StrLength(internalThousandSeparator);
-         if (((int)(pointer - buffer) - length) > 0)
-           {
-             p = &internalThousandSeparator[length - 1];
-             while (length-- > 0)
-               *pointer-- = *p--;
-           }
-
-         /* Advance to next grouping number */
-         switch (internalGrouping[groupingIndex])
-           {
-           case CHAR_MAX: /* Disable grouping */
-             charsPerThousand = NO_GROUPING;
-             break;
-           case 0: /* Repeat last group */
-             break;
-           default:
-             charsPerThousand = (int)internalGrouping[groupingIndex++];
-             break;
-           }
-       }
-    }
-
-  /* Adjust width */
-  width -= (bufferend - pointer) - 1;
-
-  /* Adjust precision */
-  if (NO_PRECISION != precision)
-    {
-      precision -= (bufferend - pointer) - 1;
-      if (precision < 0)
-       precision = 0;
-      flags |= FLAGS_NILPADDING;
-    }
-
-  /* Adjust width further */
-  if (isNegative || (flags & FLAGS_SHOWSIGN) || (flags & FLAGS_SPACE))
-    width--;
-  if (flags & FLAGS_ALTERNATIVE)
-    {
-      switch (base)
-       {
-       case BASE_BINARY:
-       case BASE_HEX:
-         width -= 2;
-         break;
-       case BASE_OCTAL:
-         width--;
-         break;
-       default:
-         break;
-       }
-    }
-
-  /* Output prefixes spaces if needed */
-  if (! ((flags & FLAGS_LEFTADJUST) ||
-        ((flags & FLAGS_NILPADDING) && (precision == NO_PRECISION))))
-    {
-      count = (precision == NO_PRECISION) ? 0 : precision;
-      while (width-- > count)
-       self->OutStream(self, CHAR_ADJUST);
-    }
-
-  /* width has been adjusted for signs and alternatives */
-  if (isNegative)
-    self->OutStream(self, '-');
-  else if (flags & FLAGS_SHOWSIGN)
-    self->OutStream(self, '+');
-  else if (flags & FLAGS_SPACE)
-    self->OutStream(self, ' ');
-
-  if (flags & FLAGS_ALTERNATIVE)
-    {
-      switch (base)
-       {
-       case BASE_BINARY:
-         self->OutStream(self, '0');
-         self->OutStream(self, (flags & FLAGS_UPPER) ? 'B' : 'b');
-         break;
-
-       case BASE_OCTAL:
-         self->OutStream(self, '0');
-         break;
-
-       case BASE_HEX:
-         self->OutStream(self, '0');
-         self->OutStream(self, (flags & FLAGS_UPPER) ? 'X' : 'x');
-         break;
-
-       default:
-         break;
-       } /* switch base */
-    }
-
-  /* Output prefixed zero padding if needed */
-  if (flags & FLAGS_NILPADDING)
-    {
-      if (precision == NO_PRECISION)
-       precision = width;
-      while (precision-- > 0)
-       {
-         self->OutStream(self, '0');
-         width--;
-       }
-    }
-
-  /* Output the number itself */
-  while (*(++pointer))
-    {
-      self->OutStream(self, *pointer);
-    }
-
-  /* Output trailing spaces if needed */
-  if (flags & FLAGS_LEFTADJUST)
-    {
-      while (width-- > 0)
-       self->OutStream(self, CHAR_ADJUST);
-    }
-}
-
-/*************************************************************************
- * TrioWriteStringCharacter [private]
- *
- * Description:
- *  Output a single character of a string
- */
-static void
-TrioWriteStringCharacter(trio_T *self,
-                        int ch,
-                        unsigned long flags)
-{
-  if (flags & FLAGS_ALTERNATIVE)
-    {
-      if (! (isprint(ch) || isspace(ch)))
-       {
-         /*
-          * Non-printable characters are converted to C escapes or
-          * \number, if no C escape exists.
-          */
-         self->OutStream(self, CHAR_BACKSLASH);
-         switch (ch)
-           {
-           case '\007': self->OutStream(self, 'a'); break;
-           case '\b': self->OutStream(self, 'b'); break;
-           case '\f': self->OutStream(self, 'f'); break;
-           case '\n': self->OutStream(self, 'n'); break;
-           case '\r': self->OutStream(self, 'r'); break;
-           case '\t': self->OutStream(self, 't'); break;
-           case '\v': self->OutStream(self, 'v'); break;
-           case '\\': self->OutStream(self, '\\'); break;
-           default:
-             self->OutStream(self, 'x');
-             TrioWriteNumber(self, (trio_intmax_t)ch,
-                             FLAGS_UNSIGNED | FLAGS_NILPADDING,
-                             2, 2, BASE_HEX);
-             break;
-           }
-       }
-      else if (ch == CHAR_BACKSLASH)
-       {
-         self->OutStream(self, CHAR_BACKSLASH);
-         self->OutStream(self, CHAR_BACKSLASH);
-       }
-      else
-       {
-         self->OutStream(self, ch);
-       }
-    }
-  else
-    {
-      self->OutStream(self, ch);
-    }
-}
-
-/*************************************************************************
- * TrioWriteString [private]
- *
- * Description:
- *  Output a string
- */
-static void
-TrioWriteString(trio_T *self,
-               const char *string,
-               unsigned long flags,
-               int width,
-               int precision)
-{
-  int length;
-  int ch;
-
-  assert(VALID(self));
-  assert(VALID(self->OutStream));
-
-  if (string == NULL)
-    {
-      string = null;
-      length = sizeof(null) - 1;
-      /* Disable quoting for the null pointer */
-      flags &= (~FLAGS_QUOTE);
-      width = 0;
-    }
-  else
-    {
-      length = StrLength(string);
-    }
-  if ((NO_PRECISION != precision) &&
-      (precision < length))
-    {
-      length = precision;
-    }
-  width -= length;
-
-  if (flags & FLAGS_QUOTE)
-    self->OutStream(self, CHAR_QUOTE);
-
-  if (! (flags & FLAGS_LEFTADJUST))
-    {
-      while (width-- > 0)
-       self->OutStream(self, CHAR_ADJUST);
-    }
-
-  while (length-- > 0)
-    {
-      /* The ctype parameters must be an unsigned char (or EOF) */
-      ch = (int)((unsigned char)(*string++));
-      TrioWriteStringCharacter(self, ch, flags);
-    }
-
-  if (flags & FLAGS_LEFTADJUST)
-    {
-      while (width-- > 0)
-       self->OutStream(self, CHAR_ADJUST);
-    }
-  if (flags & FLAGS_QUOTE)
-    self->OutStream(self, CHAR_QUOTE);
-}
-
-/*************************************************************************
- * TrioWriteWideStringCharacter [private]
- *
- * Description:
- *  Output a wide string as a multi-byte sequence
- */
-#if TRIO_WIDECHAR
-static int
-TrioWriteWideStringCharacter(trio_T *self,
-                            wchar_t wch,
-                            unsigned long flags,
-                            int width)
-{
-  int size;
-  int i;
-  int ch;
-  char *string;
-  char buffer[MB_LEN_MAX + 1];
-
-  if (width == NO_WIDTH)
-    width = sizeof(buffer);
-  
-  size = wctomb(buffer, wch);
-  if ((size <= 0) || (size > width) || (buffer[0] == NIL))
-    return 0;
-
-  string = buffer;
-  i = size;
-  while ((width >= i) && (width-- > 0) && (i-- > 0))
-    {
-      /* The ctype parameters must be an unsigned char (or EOF) */
-      ch = (int)((unsigned char)(*string++));
-      TrioWriteStringCharacter(self, ch, flags);
-    }
-  return size;
-}
-#endif /* TRIO_WIDECHAR */
-
-/*************************************************************************
- * TrioWriteString [private]
- *
- * Description:
- *  Output a wide character string as a multi-byte string
- */
-#if TRIO_WIDECHAR
-static void
-TrioWriteWideString(trio_T *self,
-                   const wchar_t *wstring,
-                   unsigned long flags,
-                   int width,
-                   int precision)
-{
-  int length;
-  int size;
-
-  assert(VALID(self));
-  assert(VALID(self->OutStream));
-
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  mblen(NULL, 0);
-#endif
-  
-  if (wstring == NULL)
-    {
-      TrioWriteString(self, NULL, flags, width, precision);
-      return;
-    }
-  
-  if (NO_PRECISION == precision)
-    {
-      length = INT_MAX;
-    }
-  else
-    {
-      length = precision;
-      width -= length;
-    }
-
-  if (flags & FLAGS_QUOTE)
-    self->OutStream(self, CHAR_QUOTE);
-
-  if (! (flags & FLAGS_LEFTADJUST))
-    {
-      while (width-- > 0)
-       self->OutStream(self, CHAR_ADJUST);
-    }
-
-  while (length > 0)
-    {
-      size = TrioWriteWideStringCharacter(self, *wstring++, flags, length);
-      if (size == 0)
-       break; /* while */
-      length -= size;
-    }
-
-  if (flags & FLAGS_LEFTADJUST)
-    {
-      while (width-- > 0)
-       self->OutStream(self, CHAR_ADJUST);
-    }
-  if (flags & FLAGS_QUOTE)
-    self->OutStream(self, CHAR_QUOTE);
-}
-#endif /* TRIO_WIDECHAR */
-
-/*************************************************************************
- * TrioWriteDouble [private]
- */
-static void
-TrioWriteDouble(trio_T *self,
-               long double longdoubleNumber,
-               unsigned long flags,
-               int width,
-               int precision,
-               int base)
-{
-  int charsPerThousand;
-  int length;
-  double number;
-  double workNumber;
-  int integerDigits;
-  int fractionDigits;
-  int exponentDigits;
-  int expectedWidth;
-  int exponent;
-  unsigned int uExponent = 0;
-  double dblBase;
-  BOOLEAN_T isNegative;
-  BOOLEAN_T isExponentNegative = FALSE;
-  BOOLEAN_T isHex;
-  const char *digits;
-  char numberBuffer[MAX_MANTISSA_DIGITS
-                  * (1 + MAX_LOCALE_SEPARATOR_LENGTH) + 1];
-  char *numberPointer;
-  char exponentBuffer[MAX_EXPONENT_DIGITS + 1];
-  char *exponentPointer = NULL;
-  int groupingIndex;
-  char *work;
-  int i;
-  BOOLEAN_T onlyzero;
-  int zeroes = 0;
-  
-  assert(VALID(self));
-  assert(VALID(self->OutStream));
-  assert(base == BASE_DECIMAL || base == BASE_HEX);
-
-  number = (double)longdoubleNumber;
-  
-  /* Look for infinite numbers and non-a-number first */
-  switch (TrioIsInfinite(number))
-    {
-    case 1:
-      /* Positive infinity */
-      TrioWriteString(self,
-                     (flags & FLAGS_UPPER)
-                     ? INFINITE_UPPER
-                     : INFINITE_LOWER,
-                     flags, width, precision);
-      return;
-
-    case -1:
-      /* Negative infinity */
-      TrioWriteString(self,
-                     (flags & FLAGS_UPPER)
-                     ? "-" INFINITE_UPPER
-                     : "-" INFINITE_LOWER,
-                     flags, width, precision);
-      return;
-
-    default:
-      /* Finitude */
-      break;
-    }
-  if (TrioIsNan(number))
-    {
-      TrioWriteString(self,
-                     (flags & FLAGS_UPPER)
-                     ? NAN_UPPER
-                     : NAN_LOWER,
-                     flags, width, precision);
-      return;
-    }
-
-  /* Normal numbers */
-  digits = (flags & FLAGS_UPPER) ? internalDigitsUpper : internalDigitsLower;
-  isHex = (base == BASE_HEX);
-  dblBase = (double)base;
-  
-  if (precision == NO_PRECISION)
-    precision = FLT_DIG;
-  
-  isNegative = (number < 0.0);
-  if (isNegative)
-    number = -number;
-
-  if ((flags & FLAGS_FLOAT_G) || isHex)
-    {
-      if (precision == 0)
-       precision = 1;
-
-      if ((number < 1.0e-4) || (number > pow(10.0, (double)precision)))
-       {
-         /* Use scientific notation */
-         flags |= FLAGS_FLOAT_E;
-       }
-      else if (number < 1.0)
-       {
-         /*
-          * Use normal notation. If the integer part of the number is
-          * zero, then adjust the precision to include leading fractional
-          * zeros.
-          */
-         workNumber = fabs(guarded_log10(number));
-         if (workNumber - floor(workNumber) < 0.001)
-           workNumber--;
-         zeroes = (int)floor(workNumber);
-       }
-    }
-
-  if (flags & FLAGS_FLOAT_E)
-    {
-      /* Scale the number */
-      workNumber = guarded_log10(number);
-      if (workNumber == -HUGE_VAL)
-       {
-         exponent = 0;
-         /* Undo setting */
-         if (flags & FLAGS_FLOAT_G)
-           flags &= ~FLAGS_FLOAT_E;
-       }
-      else
-       {
-         exponent = (int)floor(workNumber);
-         number /= pow(10.0, (double)exponent);
-         isExponentNegative = (exponent < 0);
-         uExponent = (isExponentNegative) ? -exponent : exponent;
-         /* No thousand separators */
-         flags &= ~FLAGS_QUOTE;
-       }
-    }
-
-  /*
-   * Truncated number.
-   *
-   * precision is number of significant digits for FLOAT_G
-   * and number of fractional digits for others
-   */
-  integerDigits = (floor(number) > DBL_EPSILON)
-    ? 1 + (int)guarded_log10(floor(number))
-    : 1;
-  fractionDigits = ((flags & FLAGS_FLOAT_G) && (zeroes == 0))
-    ? precision - integerDigits
-    : zeroes + precision;
-  
-  number = floor(0.5 + number * pow(dblBase, (double)fractionDigits));
-  workNumber = (isHex
-               ? guarded_log16(0.5 + number)
-               : guarded_log10(0.5 + number));
-  if ((int)workNumber + 1 > integerDigits + fractionDigits)
-    {
-      if (flags & FLAGS_FLOAT_E)
-       {
-         /* Adjust if number was rounded up one digit (ie. 0.99 to 1.00) */
-         exponent--;
-         uExponent -= (isExponentNegative) ? 1 : -1;
-         number /= dblBase;
-       }
-      else
-       {
-         /* Adjust if number was rounded up one digit (ie. 99 to 100) */
-         integerDigits++;
-       }
-    }
-  
-  /* Build the fraction part */
-  numberPointer = &numberBuffer[sizeof(numberBuffer) - 1];
-  *numberPointer = NIL;
-  onlyzero = TRUE;
-  for (i = 0; i < fractionDigits; i++)
-    {
-      *(--numberPointer) = digits[(int)fmod(number, dblBase)];
-      number = floor(number / dblBase);
-
-      if ((flags & FLAGS_FLOAT_G) && !(flags & FLAGS_ALTERNATIVE))
-        {
-          /* Prune trailing zeroes */
-          if (numberPointer[0] != digits[0])
-            onlyzero = FALSE;
-          else if (onlyzero && (numberPointer[0] == digits[0]))
-            numberPointer++;
-        }
-      else
-        onlyzero = FALSE;
-    }
-  
-  /* Insert decimal point */
-  if ((flags & FLAGS_ALTERNATIVE) || ((fractionDigits > 0) && !onlyzero))
-    {
-      i = StrLength(internalDecimalPoint);
-      while (i> 0)
-       {
-         *(--numberPointer) = internalDecimalPoint[--i];
-       }
-    }
-  /* Insert the integer part and thousand separators */
-  charsPerThousand = (int)internalGrouping[0];
-  groupingIndex = 1;
-  for (i = 1; i < integerDigits + 1; i++)
-    {
-      *(--numberPointer) = digits[(int)fmod(number, dblBase)];
-      number = floor(number / dblBase);
-      if (number < DBL_EPSILON)
-       break;
-
-      if ((i > 0)
-         && ((flags & (FLAGS_FLOAT_E | FLAGS_QUOTE)) == FLAGS_QUOTE)
-         && (charsPerThousand != NO_GROUPING)
-         && (i % charsPerThousand == 0))
-       {
-         /*
-          * We are building the number from the least significant
-          * to the most significant digit, so we have to copy the
-          * thousand separator backwards
-          */
-         length = StrLength(internalThousandSeparator);
-         integerDigits += length;
-         if (((int)(numberPointer - numberBuffer) - length) > 0)
-           {
-             work = &internalThousandSeparator[length - 1];
-             while (length-- > 0)
-               *(--numberPointer) = *work--;
-           }
-
-         /* Advance to next grouping number */
-         if (charsPerThousand != NO_GROUPING)
-           {
-             switch (internalGrouping[groupingIndex])
-               {
-               case CHAR_MAX: /* Disable grouping */
-                 charsPerThousand = NO_GROUPING;
-                 break;
-               case 0: /* Repeat last group */
-                 break;
-               default:
-                 charsPerThousand = (int)internalGrouping[groupingIndex++];
-                 break;
-               }
-           }
-       }
-    }
-  
-  /* Build the exponent */
-  exponentDigits = 0;
-  if (flags & FLAGS_FLOAT_E)
-    {
-      exponentPointer = &exponentBuffer[sizeof(exponentBuffer) - 1];
-      *exponentPointer-- = NIL;
-      do {
-       *exponentPointer-- = digits[uExponent % base];
-       uExponent /= base;
-       exponentDigits++;
-      } while (uExponent);
-    }
-
-  /*
-   * Calculate expected width.
-   *  sign + integer part + thousands separators + decimal point
-   *  + fraction + exponent
-   */
-  expectedWidth = StrLength(numberPointer);
-  if (isNegative || (flags & FLAGS_SHOWSIGN))
-    expectedWidth += sizeof("-") - 1;
-  if (exponentDigits > 0)
-    expectedWidth += exponentDigits +
-      ((exponentDigits > 1) ? sizeof("E+") : sizeof("E+0")) - 1;
-  if (isHex)
-    expectedWidth += sizeof("0X") - 1;
-  
-  /* Output prefixing */
-  if (flags & FLAGS_NILPADDING)
-    {
-      /* Leading zeros must be after sign */
-      if (isNegative)
-       self->OutStream(self, '-');
-      else if (flags & FLAGS_SHOWSIGN)
-       self->OutStream(self, '+');
-      if (isHex)
-       {
-         self->OutStream(self, '0');
-         self->OutStream(self, (flags & FLAGS_UPPER) ? 'X' : 'x');
-       }
-      if (!(flags & FLAGS_LEFTADJUST))
-       {
-         for (i = expectedWidth; i < width; i++)
-           {
-             self->OutStream(self, '0');
-           }
-       }
-    }
-  else
-    {
-      /* Leading spaces must be before sign */
-      if (!(flags & FLAGS_LEFTADJUST))
-       {
-         for (i = expectedWidth; i < width; i++)
-           {
-             self->OutStream(self, CHAR_ADJUST);
-           }
-       }
-      if (isNegative)
-       self->OutStream(self, '-');
-      else if (flags & FLAGS_SHOWSIGN)
-       self->OutStream(self, '+');
-      if (isHex)
-       {
-         self->OutStream(self, '0');
-         self->OutStream(self, (flags & FLAGS_UPPER) ? 'X' : 'x');
-       }
-    }
-  /* Output number */
-  for (i = 0; numberPointer[i]; i++)
-    {
-      self->OutStream(self, numberPointer[i]);
-    }
-  /* Output exponent */
-  if (exponentDigits > 0)
-    {
-      self->OutStream(self,
-                     isHex
-                     ? ((flags & FLAGS_UPPER) ? 'P' : 'p')
-                     : ((flags & FLAGS_UPPER) ? 'E' : 'e'));
-      self->OutStream(self, (isExponentNegative) ? '-' : '+');
-
-      /* The exponent must contain at least two digits */
-      if (exponentDigits == 1)
-        self->OutStream(self, '0');
-
-      for (i = 0; i < exponentDigits; i++)
-       {
-         self->OutStream(self, exponentPointer[i + 1]);
-       }
-    }
-  /* Output trailing spaces */
-  if (flags & FLAGS_LEFTADJUST)
-    {
-      for (i = expectedWidth; i < width; i++)
-       {
-         self->OutStream(self, CHAR_ADJUST);
-       }
-    }
-}
-
-/*************************************************************************
- * TrioFormatProcess [private]
- */
-static int
-TrioFormatProcess(trio_T *data,
-                 const char *format,
-                 parameter_T *parameters)
-
-{
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  int charlen;
-#endif
-  int i;
-  const char *string;
-  void *pointer;
-  unsigned long flags;
-  int width;
-  int precision;
-  int base;
-  int index;
-  
-  index = 0;
-  i = 0;
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  mblen(NULL, 0);
-#endif
-  
-  while (format[index])
-    {
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-      if (! isascii(format[index]))
-       {
-         charlen = mblen(&format[index], MB_LEN_MAX);
-         while (charlen-- > 0)
-           {
-             data->OutStream(data, format[index++]);
-           }
-         continue; /* while */
-       }
-#endif /* TRIO_COMPILER_SUPPORTS_MULTIBYTE */
-      if (CHAR_IDENTIFIER == format[index])
-       {
-         if (CHAR_IDENTIFIER == format[index + 1])
-           {
-             data->OutStream(data, CHAR_IDENTIFIER);
-             index += 2;
-           }
-         else
-           {
-             /* Skip the parameter entries */
-             while (parameters[i].type == FORMAT_PARAMETER)
-               i++;
-             
-             flags = parameters[i].flags;
-
-             /* Find width */
-             width = parameters[i].width;
-             if (flags & FLAGS_WIDTH_PARAMETER)
-               {
-                 /* Get width from parameter list */
-                 width = (int)parameters[width].data.number.as_signed;
-               }
-             
-             /* Find precision */
-             if (flags & FLAGS_PRECISION)
-               {
-                 precision = parameters[i].precision;
-                 if (flags & FLAGS_PRECISION_PARAMETER)
-                   {
-                     /* Get precision from parameter list */
-                     precision = (int)parameters[precision].data.number.as_signed;
-                   }
-               }
-             else
-               {
-                 precision = NO_PRECISION;
-               }
-
-             /* Find base */
-             base = parameters[i].base;
-             if (flags & FLAGS_BASE_PARAMETER)
-               {
-                 /* Get base from parameter list */
-                 base = (int)parameters[base].data.number.as_signed;
-               }
-             
-             switch (parameters[i].type)
-               {
-               case FORMAT_CHAR:
-                 if (flags & FLAGS_QUOTE)
-                   data->OutStream(data, CHAR_QUOTE);
-                 if (! (flags & FLAGS_LEFTADJUST))
-                   {
-                     while (--width > 0)
-                       data->OutStream(data, CHAR_ADJUST);
-                   }
-#if TRIO_WIDECHAR
-                 if (flags & FLAGS_WIDECHAR)
-                   {
-                     TrioWriteWideStringCharacter(data,
-                                                  (wchar_t)parameters[i].data.number.as_signed,
-                                                  flags,
-                                                  NO_WIDTH);
-                   }
-                 else
-#endif
-                   TrioWriteStringCharacter(data,
-                                            (int)parameters[i].data.number.as_signed,
-                                            flags);
-
-                 if (flags & FLAGS_LEFTADJUST)
-                   {
-                     while(--width > 0)
-                       data->OutStream(data, CHAR_ADJUST);
-                   }
-                 if (flags & FLAGS_QUOTE)
-                   data->OutStream(data, CHAR_QUOTE);
-
-                 break; /* FORMAT_CHAR */
-
-               case FORMAT_INT:
-                 if (base == NO_BASE)
-                   base = BASE_DECIMAL;
-
-                 TrioWriteNumber(data,
-                                 parameters[i].data.number.as_signed,
-                                 flags,
-                                 width,
-                                 precision,
-                                 base);
-
-                 break; /* FORMAT_INT */
-
-               case FORMAT_DOUBLE:
-                 TrioWriteDouble(data,
-                                 parameters[i].data.longdoubleNumber,
-                                 flags,
-                                 width,
-                                 precision,
-                                 base);
-                 break; /* FORMAT_DOUBLE */
-
-               case FORMAT_STRING:
-#if TRIO_WIDECHAR
-                 if (flags & FLAGS_WIDECHAR)
-                   {
-                     TrioWriteWideString(data,
-                                         parameters[i].data.wstring,
-                                         flags,
-                                         width,
-                                         precision);
-                   }
-                 else
-#endif
-#ifdef QUALIFIER_ESCAPE
-                 {
-                   char *s = NULL;
-                    static const char* empty = "(null)";
-                   switch (parameters[i].escape)
-                   {
-                       case ESCAPE_ULM:
-                               s = glite_lbu_EscapeULM(parameters[i].data.string);
-                               break;
-                       case ESCAPE_XML:
-                               s = glite_lbu_EscapeXML(parameters[i].data.string);
-                               break;
-                       case ESCAPE_SQL:
-                               s = glite_lbu_EscapeSQL(parameters[i].data.string);
-                               break;
-                       case ESCAPE_NONE:
-                               s = strdup(parameters[i].data.string ? parameters[i].data.string : empty);
-                               break;
-                   }
-                   TrioWriteString(data,s,flags,width,precision);
-                   free(s);
-                 }
-#else
-                 {
-                     TrioWriteString(data,
-                                     parameters[i].data.string,
-                                     flags,
-                                     width,
-                                     precision);
-                 }
-#endif
-                 break; /* FORMAT_STRING */
-
-               case FORMAT_POINTER:
-                 {
-                   reference_T reference;
-                   
-                   reference.data = data;
-                   reference.parameter = &parameters[i];
-                   trio_print_pointer(&reference, parameters[i].data.pointer);
-                 }
-                 break; /* FORMAT_POINTER */
-
-               case FORMAT_COUNT:
-                 pointer = parameters[i].data.pointer;
-                 if (NULL != pointer)
-                   {
-                     /*
-                      * C99 paragraph 7.19.6.1.8 says "the number of
-                      * characters written to the output stream so far by
-                      * this call", which is data->committed
-                      */
-#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
-                     if (flags & FLAGS_SIZE_T)
-                       *(size_t *)pointer = (size_t)data->committed;
-                     else
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
-                     if (flags & FLAGS_PTRDIFF_T)
-                       *(ptrdiff_t *)pointer = (ptrdiff_t)data->committed;
-                     else
-#endif
-#if defined(QUALIFIER_INTMAX_T)
-                     if (flags & FLAGS_INTMAX_T)
-                       *(trio_intmax_t *)pointer = (trio_intmax_t)data->committed;
-                     else
-#endif
-                     if (flags & FLAGS_QUAD)
-                       {
-                         *(trio_ulonglong_t *)pointer = (trio_ulonglong_t)data->committed;
-                       }
-                     else if (flags & FLAGS_LONG)
-                       {
-                         *(long int *)pointer = (long int)data->committed;
-                       }
-                     else if (flags & FLAGS_SHORT)
-                       {
-                         *(short int *)pointer = (short int)data->committed;
-                       }
-                     else
-                       {
-                         *(int *)pointer = (int)data->committed;
-                       }
-                   }
-                 break; /* FORMAT_COUNT */
-
-               case FORMAT_PARAMETER:
-                 break; /* FORMAT_PARAMETER */
-
-#if defined(FORMAT_ERRNO)
-               case FORMAT_ERRNO:
-                 string = StrError(parameters[i].data.errorNumber);
-                 if (string)
-                   {
-                     TrioWriteString(data,
-                                     string,
-                                     flags,
-                                     width,
-                                     precision);
-                   }
-                 else
-                   {
-                     data->OutStream(data, '#');
-                     TrioWriteNumber(data,
-                                     (trio_intmax_t)parameters[i].data.errorNumber,
-                                     flags,
-                                     width,
-                                     precision,
-                                     BASE_DECIMAL);
-                   }
-                 break; /* FORMAT_ERRNO */
-#endif /* defined(FORMAT_ERRNO) */
-
-#if defined(FORMAT_USER_DEFINED)
-               case FORMAT_USER_DEFINED:
-                 {
-                   reference_T reference;
-                   userdef_T *def = NULL;
-
-                   if (parameters[i].user_name[0] == NIL)
-                     {
-                       /* Use handle */
-                       if ((i > 0) ||
-                           (parameters[i - 1].type == FORMAT_PARAMETER))
-                         def = (userdef_T *)parameters[i - 1].data.pointer;
-                     }
-                   else
-                     {
-                       /* Look up namespace */
-                       def = TrioFindNamespace(parameters[i].user_name, NULL);
-                     }
-                   if (def) {
-                     reference.data = data;
-                     reference.parameter = &parameters[i];
-                     def->callback(&reference);
-                   }
-                 }
-                 break;
-#endif /* defined(FORMAT_USER_DEFINED) */
-                 
-               default:
-                 break;
-               } /* switch parameter type */
-
-             /* Prepare for next */
-             index = parameters[i].indexAfterSpecifier;
-             i++;
-           }
-       }
-      else /* not identifier */
-       {
-         data->OutStream(data, format[index++]);
-       }
-    }
-  return data->processed;
-}
-
-/*************************************************************************
- * TrioFormatRef [private]
- */
-static int
-TrioFormatRef(reference_T *reference,
-              const char *format,
-              va_list arglist,
-              void **argarray)
-{
-  int status;
-  parameter_T parameters[MAX_PARAMETERS];
-
-  status = TrioPreprocess(TYPE_PRINT, format, parameters, arglist, argarray);
-  if (status < 0)
-    return status;
-
-  return TrioFormatProcess(reference->data, format, parameters);
-}
-
-/*************************************************************************
- * TrioFormat [private]
- *
- * Description:
- *  This is the main engine for formatting output
- */
-static int
-TrioFormat(void *destination,
-          size_t destinationSize,
-          void (*OutStream)(trio_T *, int),
-          const char *format,
-          va_list arglist,
-          void **argarray)
-{
-  int status;
-  trio_T data;
-  parameter_T parameters[MAX_PARAMETERS];
-
-  assert(VALID(OutStream));
-  assert(VALID(format));
-
-  memset(&data, 0, sizeof(data));
-  data.OutStream = OutStream;
-  data.location = destination;
-  data.max = destinationSize;
-
-#if defined(USE_LOCALE)
-  if (NULL == internalLocaleValues)
-    {
-      TrioSetLocale();
-    }
-#endif
-
-  status = TrioPreprocess(TYPE_PRINT, format, parameters, arglist, argarray);
-  if (status < 0)
-    return status;
-
-  return TrioFormatProcess(&data, format, parameters);
-}
-
-/*************************************************************************
- * TrioOutStreamFile [private]
- */
-static void
-TrioOutStreamFile(trio_T *self,
-                 int output)
-{
-  FILE *file = (FILE *)self->location;
-
-  assert(VALID(self));
-  assert(VALID(file));
-
-  self->processed++;
-  self->committed++;
-  (void)fputc(output, file);
-}
-
-/*************************************************************************
- * TrioOutStreamFileDescriptor [private]
- */
-static void
-TrioOutStreamFileDescriptor(trio_T *self,
-                           int output)
-{
-  int fd = *((int *)self->location);
-  char ch;
-
-  assert(VALID(self));
-
-  ch = (char)output;
-  (void)write(fd, &ch, sizeof(char));
-  self->processed++;
-  self->committed++;
-}
-
-/*************************************************************************
- * TrioOutStreamString [private]
- */
-static void
-TrioOutStreamString(trio_T *self,
-                   int output)
-{
-  char **buffer = (char **)self->location;
-
-  assert(VALID(self));
-  assert(VALID(buffer));
-
-  **buffer = (char)output;
-  (*buffer)++;
-  self->processed++;
-  self->committed++;
-}
-
-/*************************************************************************
- * TrioOutStreamStringMax [private]
- */
-static void
-TrioOutStreamStringMax(trio_T *self,
-                      int output)
-{
-  char **buffer;
-
-  assert(VALID(self));
-  buffer = (char **)self->location;
-  assert(VALID(buffer));
-
-  if (self->processed < self->max)
-    {
-      **buffer = (char)output;
-      (*buffer)++;
-      self->committed++;
-    }
-  self->processed++;
-}
-
-/*************************************************************************
- * TrioOutStreamStringDynamic [private]
- */
-#define DYNAMIC_START_SIZE 32
-struct dynamicBuffer {
-  char *buffer;
-  size_t length;
-  size_t allocated;
-};
-
-static void
-TrioOutStreamStringDynamic(trio_T *self,
-                          int output)
-{
-  struct dynamicBuffer *infop;
-  
-  assert(VALID(self));
-  assert(VALID(self->location));
-
-  infop = (struct dynamicBuffer *)self->location;
-
-  if (infop->buffer == NULL)
-    {
-      /* Start with a reasonable size */
-      infop->buffer = (char *)TRIO_MALLOC(DYNAMIC_START_SIZE);
-      if (infop->buffer == NULL)
-       return; /* fail */
-      
-      infop->allocated = DYNAMIC_START_SIZE;
-      self->processed = 0;
-      self->committed = 0;
-    }
-  else if (self->committed + sizeof(NIL) >= infop->allocated)
-    {
-      char *newptr;
-      
-      /* Allocate increasing chunks */
-      newptr = (char *)TRIO_REALLOC(infop->buffer, infop->allocated * 2);
-      
-      if (newptr == NULL)
-       return;
-
-      infop->buffer = newptr;
-      infop->allocated *= 2;
-    }
-  
-  infop->buffer[self->committed] = (char)output;
-  self->committed++;
-  self->processed++;
-  
-  infop->length = self->committed;
-}
-
-/*************************************************************************
- * printf
- */
-int
-trio_printf(const char *format,
-           ...)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(format));
-  
-  va_start(args, format);
-  status = TrioFormat(stdout, 0, TrioOutStreamFile, format, args, NULL);
-  va_end(args);
-  return status;
-}
-
-int
-trio_vprintf(const char *format,
-            va_list args)
-{
-  assert(VALID(format));
-
-  return TrioFormat(stdout, 0, TrioOutStreamFile, format, args, NULL);
-}
-
-#ifdef __GNUC__
-#define UNUSED_VAR __attribute__((unused))
-#else
-#define UNUSED_VAR
-#endif
-
-static void shutup_unitialized(va_list *dummy UNUSED_VAR) {
-}
-
-int
-trio_printfv(const char *format,
-            void ** args)
-{
-  va_list dummy;
-  shutup_unitialized(&dummy);
-  
-  assert(VALID(format));
-
-  return TrioFormat(stdout, 0, TrioOutStreamFile, format, dummy, args);
-}
-
-/*************************************************************************
- * fprintf
- */
-int
-trio_fprintf(FILE *file,
-            const char *format,
-            ...)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(file));
-  assert(VALID(format));
-  
-  va_start(args, format);
-  status = TrioFormat(file, 0, TrioOutStreamFile, format, args, NULL);
-  va_end(args);
-  return status;
-}
-
-int
-trio_vfprintf(FILE *file,
-             const char *format,
-             va_list args)
-{
-  assert(VALID(file));
-  assert(VALID(format));
-  
-  return TrioFormat(file, 0, TrioOutStreamFile, format, args, NULL);
-}
-
-int
-trio_fprintfv(FILE *file,
-             const char *format,
-             void ** args)
-{
-  va_list dummy;
-  shutup_unitialized(&dummy);
-  
-  assert(VALID(file));
-  assert(VALID(format));
-  
-  return TrioFormat(file, 0, TrioOutStreamFile, format, dummy, args);
-}
-
-/*************************************************************************
- * dprintf
- */
-int
-trio_dprintf(int fd,
-            const char *format,
-            ...)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(format));
-  
-  va_start(args, format);
-  status = TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, args, NULL);
-  va_end(args);
-  return status;
-}
-
-int
-trio_vdprintf(int fd,
-             const char *format,
-             va_list args)
-{
-  assert(VALID(format));
-  
-  return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, args, NULL);
-}
-
-int
-trio_dprintfv(int fd,
-             const char *format,
-             void **args)
-{
-  va_list dummy;
-  shutup_unitialized(&dummy);
-  
-  assert(VALID(format));
-  
-  return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, dummy, args);
-}
-
-/*************************************************************************
- * sprintf
- */
-int
-trio_sprintf(char *buffer,
-            const char *format,
-            ...)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-  
-  va_start(args, format);
-  status = TrioFormat(&buffer, 0, TrioOutStreamString, format, args, NULL);
-  *buffer = NIL; /* Terminate with NIL character */
-  va_end(args);
-  return status;
-}
-
-int
-trio_vsprintf(char *buffer,
-             const char *format,
-             va_list args)
-{
-  int status;
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  status = TrioFormat(&buffer, 0, TrioOutStreamString, format, args, NULL);
-  *buffer = NIL;
-  return status;
-}
-
-int
-trio_sprintfv(char *buffer,
-             const char *format,
-             void **args)
-{
-  int status;
-  va_list dummy;
-  shutup_unitialized(&dummy);
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  status = TrioFormat(&buffer, 0, TrioOutStreamString, format, dummy, args);
-  *buffer = NIL;
-  return status;
-}
-
-/*************************************************************************
- * snprintf
- */
-int
-trio_snprintf(char *buffer,
-             size_t bufferSize,
-             const char *format,
-             ...)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  va_start(args, format);
-  status = TrioFormat(&buffer, bufferSize > 0 ? bufferSize - 1 : 0,
-                     TrioOutStreamStringMax, format, args, NULL);
-  if (bufferSize > 0)
-    *buffer = NIL;
-  va_end(args);
-  return status;
-}
-
-int
-trio_vsnprintf(char *buffer,
-              size_t bufferSize,
-              const char *format,
-              va_list args)
-{
-  int status;
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  status = TrioFormat(&buffer, bufferSize > 0 ? bufferSize - 1 : 0,
-                     TrioOutStreamStringMax, format, args, NULL);
-  if (bufferSize > 0)
-    *buffer = NIL;
-  return status;
-}
-
-int
-trio_snprintfv(char *buffer,
-              size_t bufferSize,
-              const char *format,
-              void **args)
-{
-  int status;
-  va_list dummy;
-  shutup_unitialized(&dummy);
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  status = TrioFormat(&buffer, bufferSize > 0 ? bufferSize - 1 : 0,
-                     TrioOutStreamStringMax, format, dummy, args);
-  if (bufferSize > 0)
-    *buffer = NIL;
-  return status;
-}
-
-/*************************************************************************
- * snprintfcat
- * Appends the new string to the buffer string overwriting the '\0'
- * character at the end of buffer.
- */
-int
-trio_snprintfcat(char *buffer,
-                size_t bufferSize,
-                const char *format,
-                ...)
-{
-  int status;
-  va_list args;
-  size_t buf_len;
-
-  va_start(args, format);
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  buf_len = strlen(buffer);
-  buffer = &buffer[buf_len];
-
-  status = TrioFormat(&buffer, bufferSize - 1 - buf_len,
-                     TrioOutStreamStringMax, format, args, NULL);
-  va_end(args);
-  *buffer = NIL;
-  return status;
-}
-
-int
-trio_vsnprintfcat(char *buffer,
-                 size_t bufferSize,
-                 const char *format,
-                 va_list args)
-{
-  int status;
-  size_t buf_len;
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  buf_len = strlen(buffer);
-  buffer = &buffer[buf_len];
-  status = TrioFormat(&buffer, bufferSize - 1 - buf_len,
-                     TrioOutStreamStringMax, format, args, NULL);
-  *buffer = NIL;
-  return status;
-}
-
-/*************************************************************************
- * trio_aprintf
- */
-
-/* Deprecated */
-char *
-trio_aprintf(const char *format,
-            ...)
-{
-  va_list args;
-  struct dynamicBuffer info;
-
-  assert(VALID(format));
-  
-  info.buffer = NULL;
-  info.length = 0;
-  info.allocated = 0;
-
-  va_start(args, format);
-  (void)TrioFormat(&info, 0, TrioOutStreamStringDynamic, format, args, NULL);
-  va_end(args);
-  if (info.length) {
-    info.buffer[info.length] = NIL; /* we terminate this with a zero byte */
-    return info.buffer;
-  }
-  else
-    return NULL;
-}
-
-/* Deprecated */
-char *
-trio_vaprintf(const char *format,
-             va_list args)
-{
-  struct dynamicBuffer info;
-
-  assert(VALID(format));
-  
-  info.buffer = NULL;
-  info.length = 0;
-  info.allocated = 0;
-
-  (void)TrioFormat(&info, 0, TrioOutStreamStringDynamic, format, args, NULL);
-  if (info.length) {
-    info.buffer[info.length] = NIL; /* we terminate this with a zero byte */
-    return info.buffer;
-  }
-  else
-    return NULL;
-}
-
-int
-trio_asprintf(char **result,
-             const char *format,
-             ...)
-{
-  va_list args;
-  int status;
-  struct dynamicBuffer info;
-
-  assert(VALID(format));
-
-  info.buffer = NULL;
-  info.length = 0;
-  info.allocated = 0;
-
-  va_start(args, format);
-  status = TrioFormat(&info, 0, TrioOutStreamStringDynamic, format, args, NULL);
-  va_end(args);
-  if (status < 0) {
-     *result = NULL;
-     return status;
-  }
-  if (info.length == 0) {
-    /*
-     * If the length is zero, no characters have been written and therefore
-     * no memory has been allocated, but we must to allocate and return an
-     * empty string.
-     */
-    info.buffer = (char *)TRIO_MALLOC(sizeof(char));
-    if (info.buffer == NULL) {
-      *result = NULL;
-      return TRIO_ERROR_RETURN(TRIO_ENOMEM, 0);
-    }
-  }
-  info.buffer[info.length] = NIL; /* we terminate this with a zero byte */
-  *result = info.buffer;
-  
-  return status;
-}
-
-int
-trio_vasprintf(char **result,
-              const char *format,
-              va_list args)
-{
-  int status;
-  struct dynamicBuffer info;
-
-  assert(VALID(format));
-
-  info.buffer = NULL;
-  info.length = 0;
-  info.allocated = 0;
-
-  status = TrioFormat(&info, 0, TrioOutStreamStringDynamic, format, args, NULL);
-  if (status < 0) {
-     *result = NULL;
-     return status;
-  }
-  if (info.length == 0) {
-    info.buffer = (char *)TRIO_MALLOC(sizeof(char));
-    if (info.buffer == NULL) {
-      *result = NULL;
-      return TRIO_ERROR_RETURN(TRIO_ENOMEM, 0);
-    }
-  }
-  info.buffer[info.length] = NIL; /* we terminate this with a zero byte */
-  *result = info.buffer;
-  
-  return status;
-}
-
-
-/*************************************************************************
- *
- * @CALLBACK
- *
- ************************************************************************/
-
-
-/*************************************************************************
- * trio_register [public]
- */
-void *
-trio_register(trio_callback_t callback,
-             const char *name)
-{
-  userdef_T *def;
-  userdef_T *prev = NULL;
-
-  if (callback == NULL)
-    return NULL;
-
-  if (name)
-    {
-      /* Handle built-in namespaces */
-      if (name[0] == ':')
-       {
-         if (StrEqual(name, ":enter"))
-           {
-             internalEnterCriticalRegion = callback;
-           }
-         else if (StrEqual(name, ":leave"))
-           {
-             internalLeaveCriticalRegion = callback;
-           }
-         return NULL;
-       }
-      
-      /* Bail out if namespace is too long */
-      if (StrLength(name) >= MAX_USER_NAME)
-       return NULL;
-      
-      /* Bail out if namespace already is registered */
-      def = TrioFindNamespace(name, &prev);
-      if (def)
-       return NULL;
-    }
-  
-  def = (userdef_T *)TRIO_MALLOC(sizeof(userdef_T));
-  if (def)
-    {
-      if (internalEnterCriticalRegion)
-       (void)internalEnterCriticalRegion(NULL);
-      
-      if (name)
-       {
-         /* Link into internal list */
-         if (prev == NULL)
-           internalUserDef = def;
-         else
-           prev->next = def;
-       }
-      /* Initialize */
-      def->callback = callback;
-      def->name = (name == NULL)
-       ? NULL
-       : StrDuplicate(name);
-      def->next = NULL;
-
-      if (internalLeaveCriticalRegion)
-       (void)internalLeaveCriticalRegion(NULL);
-    }
-  return def;
-}
-
-/*************************************************************************
- * trio_unregister [public]
- */
-void
-trio_unregister(void *handle)
-{
-  userdef_T *self = (userdef_T *)handle;
-  userdef_T *def;
-  userdef_T *prev = NULL;
-
-  assert(VALID(self));
-
-  if (self->name)
-    {
-      def = TrioFindNamespace(self->name, &prev);
-      if (def)
-       {
-         if (internalEnterCriticalRegion)
-           (void)internalEnterCriticalRegion(NULL);
-         
-         if (prev == NULL)
-           internalUserDef = NULL;
-         else
-           prev->next = def->next;
-         
-         if (internalLeaveCriticalRegion)
-           (void)internalLeaveCriticalRegion(NULL);
-       }
-      StrFree(self->name);
-    }
-  TRIO_FREE(self);
-}
-
-/*************************************************************************
- * trio_get_format [public]
- */
-const char *
-trio_get_format(void *ref)
-{
-  assert(((reference_T *)ref)->parameter->type == FORMAT_USER_DEFINED);
-  
-  return (((reference_T *)ref)->parameter->user_data);
-}
-
-/*************************************************************************
- * trio_get_argument [public]
- */
-void *
-trio_get_argument(void *ref)
-{
-  assert(((reference_T *)ref)->parameter->type == FORMAT_USER_DEFINED);
-  
-  return ((reference_T *)ref)->parameter->data.pointer;
-}
-
-/*************************************************************************
- * trio_get_width / trio_set_width [public]
- */
-int
-trio_get_width(void *ref)
-{
-  return ((reference_T *)ref)->parameter->width;
-}
-
-void
-trio_set_width(void *ref,
-              int width)
-{
-  ((reference_T *)ref)->parameter->width = width;
-}
-
-/*************************************************************************
- * trio_get_precision / trio_set_precision [public]
- */
-int
-trio_get_precision(void *ref)
-{
-  return (((reference_T *)ref)->parameter->precision);
-}
-
-void
-trio_set_precision(void *ref,
-                  int precision)
-{
-  ((reference_T *)ref)->parameter->precision = precision;
-}
-
-/*************************************************************************
- * trio_get_base / trio_set_base [public]
- */
-int
-trio_get_base(void *ref)
-{
-  return (((reference_T *)ref)->parameter->base);
-}
-
-void
-trio_set_base(void *ref,
-             int base)
-{
-  ((reference_T *)ref)->parameter->base = base;
-}
-
-/*************************************************************************
- * trio_get_long / trio_set_long [public]
- */
-int
-trio_get_long(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_LONG);
-}
-
-void
-trio_set_long(void *ref,
-             int is_long)
-{
-  if (is_long)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_LONG;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_LONG;
-}
-
-/*************************************************************************
- * trio_get_longlong / trio_set_longlong [public]
- */
-int
-trio_get_longlong(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_QUAD);
-}
-
-void
-trio_set_longlong(void *ref,
-                 int is_longlong)
-{
-  if (is_longlong)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_QUAD;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_QUAD;
-}
-
-/*************************************************************************
- * trio_get_longdouble / trio_set_longdouble [public]
- */
-int
-trio_get_longdouble(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_LONGDOUBLE);
-}
-
-void
-trio_set_longdouble(void *ref,
-                   int is_longdouble)
-{
-  if (is_longdouble)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_LONGDOUBLE;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_LONGDOUBLE;
-}
-
-/*************************************************************************
- * trio_get_short / trio_set_short [public]
- */
-int
-trio_get_short(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_SHORT);
-}
-
-void
-trio_set_short(void *ref,
-              int is_short)
-{
-  if (is_short)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_SHORT;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_SHORT;
-}
-
-/*************************************************************************
- * trio_get_shortshort / trio_set_shortshort [public]
- */
-int
-trio_get_shortshort(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_SHORTSHORT);
-}
-
-void
-trio_set_shortshort(void *ref,
-              int is_shortshort)
-{
-  if (is_shortshort)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_SHORTSHORT;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_SHORTSHORT;
-}
-
-/*************************************************************************
- * trio_get_alternative / trio_set_alternative [public]
- */
-int
-trio_get_alternative(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_ALTERNATIVE);
-}
-
-void
-trio_set_alternative(void *ref,
-                    int is_alternative)
-{
-  if (is_alternative)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_ALTERNATIVE;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_ALTERNATIVE;
-}
-
-/*************************************************************************
- * trio_get_alignment / trio_set_alignment [public]
- */
-int
-trio_get_alignment(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_LEFTADJUST);
-}
-
-void
-trio_set_alignment(void *ref,
-                  int is_leftaligned)
-{
-  if (is_leftaligned)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_LEFTADJUST;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_LEFTADJUST;
-}
-
-/*************************************************************************
- * trio_get_spacing /trio_set_spacing [public]
- */
-int
-trio_get_spacing(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_SPACE);
-}
-
-void
-trio_set_spacing(void *ref,
-                int is_space)
-{
-  if (is_space)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_SPACE;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_SPACE;
-}
-
-/*************************************************************************
- * trio_get_sign / trio_set_sign [public]
- */
-int
-trio_get_sign(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_SHOWSIGN);
-}
-
-void
-trio_set_sign(void *ref,
-             int is_sign)
-{
-  if (is_sign)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_SHOWSIGN;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_SHOWSIGN;
-}
-
-/*************************************************************************
- * trio_get_padding / trio_set_padding [public]
- */
-int
-trio_get_padding(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_NILPADDING);
-}
-
-void
-trio_set_padding(void *ref,
-                int is_padding)
-{
-  if (is_padding)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_NILPADDING;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_NILPADDING;
-}
-
-/*************************************************************************
- * trio_get_quote / trio_set_quote [public]
- */
-int
-trio_get_quote(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_QUOTE);
-}
-
-void
-trio_set_quote(void *ref,
-              int is_quote)
-{
-  if (is_quote)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_QUOTE;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_QUOTE;
-}
-
-/*************************************************************************
- * trio_get_upper / trio_set_upper [public]
- */
-int
-trio_get_upper(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_UPPER);
-}
-
-void
-trio_set_upper(void *ref,
-              int is_upper)
-{
-  if (is_upper)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_UPPER;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_UPPER;
-}
-
-/*************************************************************************
- * trio_get_largest / trio_set_largest [public]
- */
-#if TRIO_C99
-int
-trio_get_largest(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_INTMAX_T);
-}
-
-void
-trio_set_largest(void *ref,
-                int is_largest)
-{
-  if (is_largest)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_INTMAX_T;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_INTMAX_T;
-}
-#endif
-
-/*************************************************************************
- * trio_get_ptrdiff / trio_set_ptrdiff [public]
- */
-int
-trio_get_ptrdiff(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_PTRDIFF_T);
-}
-
-void
-trio_set_ptrdiff(void *ref,
-                int is_ptrdiff)
-{
-  if (is_ptrdiff)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_PTRDIFF_T;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_PTRDIFF_T;
-}
-
-/*************************************************************************
- * trio_get_size / trio_set_size [public]
- */
-#if TRIO_C99
-int
-trio_get_size(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_SIZE_T);
-}
-
-void
-trio_set_size(void *ref,
-             int is_size)
-{
-  if (is_size)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_SIZE_T;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_SIZE_T;
-}
-#endif
-
-/*************************************************************************
- * trio_print_int [public]
- */
-void
-trio_print_int(void *ref,
-              int number)
-{
-  reference_T *self = (reference_T *)ref;
-
-  TrioWriteNumber(self->data,
-                 (trio_intmax_t)number,
-                 self->parameter->flags,
-                 self->parameter->width,
-                 self->parameter->precision,
-                 self->parameter->base);
-}
-
-/*************************************************************************
- * trio_print_uint [public]
- */
-void
-trio_print_uint(void *ref,
-               unsigned int number)
-{
-  reference_T *self = (reference_T *)ref;
-
-  TrioWriteNumber(self->data,
-                 (trio_intmax_t)number,
-                 self->parameter->flags | FLAGS_UNSIGNED,
-                 self->parameter->width,
-                 self->parameter->precision,
-                 self->parameter->base);
-}
-
-/*************************************************************************
- * trio_print_double [public]
- */
-void
-trio_print_double(void *ref,
-                 double number)
-{
-  reference_T *self = (reference_T *)ref;
-
-  TrioWriteDouble(self->data,
-                 number,
-                 self->parameter->flags,
-                 self->parameter->width,
-                 self->parameter->precision,
-                 self->parameter->base);
-}
-
-/*************************************************************************
- * trio_print_string [public]
- */
-void
-trio_print_string(void *ref,
-                 char *string)
-{
-  reference_T *self = (reference_T *)ref;
-
-  TrioWriteString(self->data,
-                 string,
-                 self->parameter->flags,
-                 self->parameter->width,
-                 self->parameter->precision);
-}
-
-/*************************************************************************
- * trio_print_pointer [public]
- */
-void
-trio_print_pointer(void *ref,
-                  void *pointer)
-{
-  reference_T *self = (reference_T *)ref;
-  unsigned long flags;
-  trio_uintmax_t number;
-
-  if (NULL == pointer)
-    {
-      const char *string = null;
-      while (*string)
-       self->data->OutStream(self->data, *string++);
-    }
-  else
-    {
-      /*
-       * The subtraction of the null pointer is a workaround
-       * to avoid a compiler warning. The performance overhead
-       * is negligible (and likely to be removed by an
-       * optimising compiler). The (char *) casting is done
-       * to please ANSI C++.
-       */
-      number = (trio_uintmax_t)((char *)pointer - (char *)0);
-      /* Shrink to size of pointer */
-      number &= (trio_uintmax_t)-1;
-      flags = self->parameter->flags;
-      flags |= (FLAGS_UNSIGNED | FLAGS_ALTERNATIVE |
-               FLAGS_NILPADDING);
-      TrioWriteNumber(self->data,
-                     (trio_intmax_t)number,
-                     flags,
-                     POINTER_WIDTH,
-                     NO_PRECISION,
-                     BASE_HEX);
-    }
-}
-
-/*************************************************************************
- * trio_print_ref [public]
- */
-int
-trio_print_ref(void *ref,
-              const char *format,
-              ...)
-{
-  int status;
-  va_list arglist;
-
-  assert(VALID(format));
-  
-  va_start(arglist, format);
-  status = TrioFormatRef((reference_T *)ref, format, arglist, NULL);
-  va_end(arglist);
-  return status;
-}
-
-/*************************************************************************
- * trio_vprint_ref [public]
- */
-int
-trio_vprint_ref(void *ref,
-               const char *format,
-               va_list arglist)
-{
-  assert(VALID(format));
-  
-  return TrioFormatRef((reference_T *)ref, format, arglist, NULL);
-}
-
-/*************************************************************************
- * trio_printv_ref [public]
- */
-int
-trio_printv_ref(void *ref,
-               const char *format,
-               void **argarray)
-{
-  va_list dummy;
-  shutup_unitialized(&dummy);
-  
-  assert(VALID(format));
-  
-  return TrioFormatRef((reference_T *)ref, format, dummy, argarray);
-}
-
-
-/*************************************************************************
- *
- * @SCANNING
- *
- ************************************************************************/
-
-
-/*************************************************************************
- * TrioSkipWhitespaces [private]
- */
-static int
-TrioSkipWhitespaces(trio_T *self)
-{
-  int ch;
-
-  ch = self->current;
-  while (isspace(ch))
-    {
-      self->InStream(self, &ch);
-    }
-  return ch;
-}
-
-/*************************************************************************
- * TrioGetCollation [private]
- */
-#if TRIO_EXTENSION
-static void
-TrioGetCollation()
-{
-  int i;
-  int j;
-  int k;
-  char first[2];
-  char second[2];
-
-  /* This is computational expensive */
-  first[1] = NIL;
-  second[1] = NIL;
-  for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-    {
-      k = 0;
-      first[0] = (char)i;
-      for (j = 0; j < MAX_CHARACTER_CLASS; j++)
-       {
-         second[0] = (char)j;
-         if (StrEqualLocale(first, second))
-           internalCollationArray[i][k++] = (char)j;
-       }
-      internalCollationArray[i][k] = NIL;
-    }
-}
-#endif
-
-/*************************************************************************
- * TrioGetCharacterClass [private]
- *
- * FIXME:
- *  multibyte
- */
-static int
-TrioGetCharacterClass(const char *format,
-                     int *indexPointer,
-                     unsigned long *flagsPointer,
-                     int *characterclass)
-{
-  int index = *indexPointer;
-  int i;
-  char ch;
-  char range_begin;
-  char range_end;
-
-  *flagsPointer &= ~FLAGS_EXCLUDE;
-
-  if (format[index] == QUALIFIER_CIRCUMFLEX)
-    {
-      *flagsPointer |= FLAGS_EXCLUDE;
-      index++;
-    }
-  /*
-   * If the ungroup character is at the beginning of the scanlist,
-   * it will be part of the class, and a second ungroup character
-   * must follow to end the group.
-   */
-  if (format[index] == SPECIFIER_UNGROUP)
-    {
-      characterclass[(int)SPECIFIER_UNGROUP]++;
-      index++;
-    }
-  /*
-   * Minus is used to specify ranges. To include minus in the class,
-   * it must be at the beginning of the list
-   */
-  if (format[index] == QUALIFIER_MINUS)
-    {
-      characterclass[(int)QUALIFIER_MINUS]++;
-      index++;
-    }
-  /* Collect characters */
-  for (ch = format[index];
-       (ch != SPECIFIER_UNGROUP) && (ch != NIL);
-       ch = format[++index])
-    {
-      switch (ch)
-       {
-       case QUALIFIER_MINUS: /* Scanlist ranges */
-         
-         /*
-          * Both C99 and UNIX98 describes ranges as implementation-
-          * defined.
-          *
-          * We support the following behaviour (although this may
-          * change as we become wiser)
-          * - only increasing ranges, ie. [a-b] but not [b-a]
-          * - transitive ranges, ie. [a-b-c] == [a-c]
-          * - trailing minus, ie. [a-] is interpreted as an 'a'
-          *   and a '-'
-          * - duplicates (although we can easily convert these
-          *   into errors)
-          */
-         range_begin = format[index - 1];
-         range_end = format[++index];
-         if (range_end == SPECIFIER_UNGROUP)
-           {
-             /* Trailing minus is included */
-             characterclass[(int)ch]++;
-             ch = range_end;
-             break; /* for */
-           }
-         if (range_end == NIL)
-           return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-         if (range_begin > range_end)
-           return TRIO_ERROR_RETURN(TRIO_ERANGE, index);
-           
-         for (i = (int)range_begin; i <= (int)range_end; i++)
-           characterclass[i]++;
-           
-         ch = range_end;
-         break;
-         
-#if TRIO_EXTENSION
-
-       case SPECIFIER_GROUP:
-         
-         switch (format[index + 1])
-           {
-           case QUALIFIER_DOT: /* Collating symbol */
-             /*
-              * FIXME: This will be easier to implement when multibyte
-              * characters have been implemented. Until now, we ignore
-              * this feature.
-              */
-             for (i = index + 2; ; i++)
-               {
-                 if (format[i] == NIL)
-                   /* Error in syntax */
-                   return -1;
-                 else if (format[i] == QUALIFIER_DOT)
-                   break; /* for */
-               }
-             if (format[++i] != SPECIFIER_UNGROUP)
-               return -1;
-             
-             index = i;
-             break;
-         
-           case QUALIFIER_EQUAL: /* Equivalence class expressions */
-             {
-               unsigned int j;
-               unsigned int k;
-           
-               if (internalCollationUnconverted)
-                 {
-                   /* Lazy evalutation of collation array */
-                   TrioGetCollation();
-                   internalCollationUnconverted = FALSE;
-                 }
-               for (i = index + 2; ; i++)
-                 {
-                   if (format[i] == NIL)
-                     /* Error in syntax */
-                     return -1;
-                   else if (format[i] == QUALIFIER_EQUAL)
-                     break; /* for */
-                   else
-                     {
-                       /* Mark any equivalent character */
-                       k = (unsigned int)format[i];
-                       for (j = 0; internalCollationArray[k][j] != NIL; j++)
-                         characterclass[(int)internalCollationArray[k][j]]++;
-                     }
-                 }
-               if (format[++i] != SPECIFIER_UNGROUP)
-                 return -1;
-               
-               index = i;
-             }
-             break;
-         
-           case QUALIFIER_COLON: /* Character class expressions */
-         
-             if (StrEqualMax(CLASS_ALNUM, sizeof(CLASS_ALNUM) - 1,
-                             &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (isalnum(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_ALNUM) - 1;
-               }
-             else if (StrEqualMax(CLASS_ALPHA, sizeof(CLASS_ALPHA) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (isalpha(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_ALPHA) - 1;
-               }
-             else if (StrEqualMax(CLASS_CNTRL, sizeof(CLASS_CNTRL) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (iscntrl(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_CNTRL) - 1;
-               }
-             else if (StrEqualMax(CLASS_DIGIT, sizeof(CLASS_DIGIT) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (isdigit(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_DIGIT) - 1;
-               }
-             else if (StrEqualMax(CLASS_GRAPH, sizeof(CLASS_GRAPH) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (isgraph(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_GRAPH) - 1;
-               }
-             else if (StrEqualMax(CLASS_LOWER, sizeof(CLASS_LOWER) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (islower(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_LOWER) - 1;
-               }
-             else if (StrEqualMax(CLASS_PRINT, sizeof(CLASS_PRINT) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (isprint(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_PRINT) - 1;
-               }
-             else if (StrEqualMax(CLASS_PUNCT, sizeof(CLASS_PUNCT) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (ispunct(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_PUNCT) - 1;
-               }
-             else if (StrEqualMax(CLASS_SPACE, sizeof(CLASS_SPACE) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (isspace(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_SPACE) - 1;
-               }
-             else if (StrEqualMax(CLASS_UPPER, sizeof(CLASS_UPPER) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (isupper(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_UPPER) - 1;
-               }
-             else if (StrEqualMax(CLASS_XDIGIT, sizeof(CLASS_XDIGIT) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (isxdigit(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_XDIGIT) - 1;
-               }
-             else
-               {
-                 characterclass[(int)ch]++;
-               }
-             break;
-
-           default:
-             characterclass[(int)ch]++;
-             break;
-           }
-         break;
-         
-#endif /* TRIO_EXTENSION */
-         
-       default:
-         characterclass[(int)ch]++;
-         break;
-       }
-    }
-  return 0;
-}
-
-/*************************************************************************
- * TrioReadNumber [private]
- *
- * We implement our own number conversion in preference of strtol and
- * strtoul, because we must handle 'long long' and thousand separators.
- */
-static BOOLEAN_T
-TrioReadNumber(trio_T *self,
-              trio_uintmax_t *target,
-              unsigned long flags,
-              int width,
-              int base)
-{
-  trio_uintmax_t number = 0;
-  int digit;
-  int count;
-  BOOLEAN_T isNegative = FALSE;
-  int j;
-
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-  assert((base >= MIN_BASE && base <= MAX_BASE) || (base == NO_BASE));
-
-  if (internalDigitsUnconverted)
-    {
-      /* Lazy evaluation of digits array */
-      memset(internalDigitArray, -1, sizeof(internalDigitArray));
-      for (j = 0; j < (int)sizeof(internalDigitsLower) - 1; j++)
-       {
-         internalDigitArray[(int)internalDigitsLower[j]] = j;
-         internalDigitArray[(int)internalDigitsUpper[j]] = j;
-       }
-      internalDigitsUnconverted = FALSE;
-    }
-  
-  TrioSkipWhitespaces(self);
-  
-  if (!(flags & FLAGS_UNSIGNED))
-    {
-      /* Leading sign */
-      if (self->current == '+')
-       {
-         self->InStream(self, NULL);
-       }
-      else if (self->current == '-')
-       {
-         self->InStream(self, NULL);
-         isNegative = TRUE;
-       }
-    }
-  
-  count = self->processed;
-  
-  if (flags & FLAGS_ALTERNATIVE)
-    {
-      switch (base)
-       {
-       case NO_BASE:
-       case BASE_OCTAL:
-       case BASE_HEX:
-       case BASE_BINARY:
-         if (self->current == '0')
-           {
-             self->InStream(self, NULL);
-             if (self->current)
-               {
-                 if ((base == BASE_HEX) &&
-                     (toupper(self->current) == 'X'))
-                   {
-                     self->InStream(self, NULL);
-                   }
-                 else if ((base == BASE_BINARY) &&
-                          (toupper(self->current) == 'B'))
-                   {
-                     self->InStream(self, NULL);
-                   }
-               }
-           }
-         else
-           return FALSE;
-         break;
-       default:
-         break;
-       }
-    }
-
-  while (((width == NO_WIDTH) || (self->processed - count < width)) &&
-        (! ((self->current == EOF) || isspace(self->current))))
-    {
-      if (isascii(self->current))
-       {
-         digit = internalDigitArray[self->current];
-         /* Abort if digit is not allowed in the specified base */
-         if ((digit == -1) || (digit >= base))
-           break;
-       }
-      else if (flags & FLAGS_QUOTE)
-       {
-         /* Compare with thousands separator */
-         for (j = 0; internalThousandSeparator[j] && self->current; j++)
-           {
-             if (internalThousandSeparator[j] != self->current)
-               break;
-
-             self->InStream(self, NULL);
-           }
-         if (internalThousandSeparator[j])
-           break; /* Mismatch */
-         else
-           continue; /* Match */
-       }
-      else
-       break;
-            
-      number *= base;
-      number += digit;
-
-      self->InStream(self, NULL);
-    }
-
-  /* Was anything read at all? */
-  if (self->processed == count)
-    return FALSE;
-  
-  if (target)
-    *target = (isNegative) ? -number : number;
-  return TRUE;
-}
-
-/*************************************************************************
- * TrioReadChar [private]
- */
-static int
-TrioReadChar(trio_T *self,
-            char *target,
-            unsigned long flags,
-            int width)
-{
-  int i;
-  char ch;
-  trio_uintmax_t number;
-  
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-
-  for (i = 0;
-       (self->current != EOF) && (i < width);
-       i++)
-    {
-      ch = (char)self->current;
-      self->InStream(self, NULL);
-      if ((flags & FLAGS_ALTERNATIVE) && (ch == CHAR_BACKSLASH))
-       {
-         switch (self->current)
-           {
-           case '\\': ch = '\\'; break;
-           case 'a': ch = '\007'; break;
-           case 'b': ch = '\b'; break;
-           case 'f': ch = '\f'; break;
-           case 'n': ch = '\n'; break;
-           case 'r': ch = '\r'; break;
-           case 't': ch = '\t'; break;
-           case 'v': ch = '\v'; break;
-           default:
-             if (isdigit(self->current))
-               {
-                 /* Read octal number */
-                 if (!TrioReadNumber(self, &number, 0, 3, BASE_OCTAL))
-                   return 0;
-                 ch = (char)number;
-               }
-             else if (toupper(self->current) == 'X')
-               {
-                 /* Read hexadecimal number */
-                 self->InStream(self, NULL);
-                 if (!TrioReadNumber(self, &number, 0, 2, BASE_HEX))
-                   return 0;
-                 ch = (char)number;
-               }
-             else
-               {
-                 ch = (char)self->current;
-               }
-             break;
-           }
-       }
-      
-      if (target)
-       target[i] = ch;
-    }
-  return i + 1;
-}
-
-/*************************************************************************
- * TrioReadString [private]
- */
-static BOOLEAN_T
-TrioReadString(trio_T *self,
-              char *target,
-              unsigned long flags,
-              int width)
-{
-  int i;
-  
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-
-  TrioSkipWhitespaces(self);
-    
-  /*
-   * Continue until end of string is reached, a whitespace is encountered,
-   * or width is exceeded
-   */
-  for (i = 0;
-       ((width == NO_WIDTH) || (i < width)) &&
-       (! ((self->current == EOF) || isspace(self->current)));
-       i++)
-    {
-      if (TrioReadChar(self, &target[i], flags, 1) == 0)
-       break; /* for */
-    }
-  if (target)
-    target[i] = NIL;
-  return TRUE;
-}
-
-/*************************************************************************
- * TrioReadWideChar [private]
- */
-#if TRIO_WIDECHAR
-static int
-TrioReadWideChar(trio_T *self,
-                wchar_t *target,
-                unsigned long flags,
-                int width)
-{
-  int i;
-  int j;
-  int size;
-  int amount = 0;
-  wchar_t wch;
-  char buffer[MB_LEN_MAX + 1];
-  
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-
-  for (i = 0;
-       (self->current != EOF) && (i < width);
-       i++)
-    {
-      if (isascii(self->current))
-       {
-         if (TrioReadChar(self, buffer, flags, 1) == 0)
-           return 0;
-         buffer[1] = NIL;
-       }
-      else
-       {
-         /*
-          * Collect a multibyte character, by enlarging buffer until
-          * it contains a fully legal multibyte character, or the
-          * buffer is full.
-          */
-         j = 0;
-         do
-           {
-             buffer[j++] = (char)self->current;
-             buffer[j] = NIL;
-             self->InStream(self, NULL);
-           }
-         while ((j < (int)sizeof(buffer)) && (mblen(buffer, (size_t)j) != j));
-       }
-      if (target)
-       {
-         size = mbtowc(&wch, buffer, sizeof(buffer));
-         if (size > 0)
-           target[i] = wch;
-       }
-      amount += size;
-      self->InStream(self, NULL);
-    }
-  return amount;
-}
-#endif /* TRIO_WIDECHAR */
-
-/*************************************************************************
- * TrioReadWideString [private]
- */
-#if TRIO_WIDECHAR
-static BOOLEAN_T
-TrioReadWideString(trio_T *self,
-                  wchar_t *target,
-                  unsigned long flags,
-                  int width)
-{
-  int i;
-  int size;
-  
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-
-  TrioSkipWhitespaces(self);
-
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  mblen(NULL, 0);
-#endif
-  
-  /*
-   * Continue until end of string is reached, a whitespace is encountered,
-   * or width is exceeded
-   */
-  for (i = 0;
-       ((width == NO_WIDTH) || (i < width)) &&
-       (! ((self->current == EOF) || isspace(self->current)));
-       )
-    {
-      size = TrioReadWideChar(self, &target[i], flags, 1);
-      if (size == 0)
-       break; /* for */
-
-      i += size;
-    }
-  if (target)
-    target[i] = L'\0';
-  return TRUE;
-}
-#endif /* TRIO_WIDECHAR */
-
-/*************************************************************************
- * TrioReadGroup [private]
- *
- * FIXME: characterclass does not work with multibyte characters
- */
-static BOOLEAN_T
-TrioReadGroup(trio_T *self,
-             char *target,
-             int *characterclass,
-             unsigned long flags,
-             int width)
-{
-  int ch;
-  int i;
-  
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-
-  ch = self->current;
-  for (i = 0;
-       ((width == NO_WIDTH) || (i < width)) &&
-       (! ((ch == EOF) ||
-          (((flags & FLAGS_EXCLUDE) != 0) ^ (characterclass[ch] == 0))));
-       i++)
-    {
-      if (target)
-       target[i] = (char)ch;
-      self->InStream(self, &ch);
-    }
-  
-  if (target)
-    target[i] = NIL;
-  return TRUE;
-}
-
-/*************************************************************************
- * TrioReadDouble [private]
- *
- * FIXME:
- *  add long double
- */
-static BOOLEAN_T
-TrioReadDouble(trio_T *self,
-              double *target,
-              unsigned long flags,
-              int width)
-{
-  int ch;
-  char doubleString[512] = "";
-  int index = 0;
-  int start;
-  int j;
-  BOOLEAN_T isHex = FALSE;
-
-  if ((width == NO_WIDTH) || (width > (int)sizeof(doubleString) - 1))
-    width = sizeof(doubleString) - 1;
-  
-  TrioSkipWhitespaces(self);
-  
-  /*
-   * Read entire double number from stream. StrToDouble requires a
-   * string as input, but InStream can be anything, so we have to
-   * collect all characters.
-   */
-  ch = self->current;
-  if ((ch == '+') || (ch == '-'))
-    {
-      doubleString[index++] = (char)ch;
-      self->InStream(self, &ch);
-      width--;
-    }
-
-  start = index;
-  switch (ch)
-    {
-    case 'n':
-    case 'N':
-      /* Not-a-number */
-      if (index != 0)
-       break;
-      /* FALLTHROUGH */
-    case 'i':
-    case 'I':
-      /* Infinity */
-      while (isalpha(ch) && (index - start < width))
-       {
-         doubleString[index++] = (char)ch;
-         self->InStream(self, &ch);
-       }
-      doubleString[index] = NIL;
-
-      /* Case insensitive string comparison */
-      if (StrEqual(&doubleString[start], INFINITE_UPPER) ||
-         StrEqual(&doubleString[start], LONG_INFINITE_UPPER))
-       {
-         *target = ((start == 1 && doubleString[0] == '-'))
-           ? -HUGE_VAL
-           : HUGE_VAL;
-         return TRUE;
-       }
-      if (StrEqual(doubleString, NAN_LOWER))
-       {
-         /* NaN must not have a preceeding + nor - */
-         *target = TrioGenerateNaN();
-         return TRUE;
-       }
-      return FALSE;
-      
-    default:
-      break;
-    }
-  
-  if (ch == '0')
-    {
-      doubleString[index++] = (char)ch;
-      self->InStream(self, &ch);
-      if (toupper(ch) == 'X')
-       {
-         isHex = TRUE;
-         doubleString[index++] = (char)ch;
-         self->InStream(self, &ch);
-       }
-    }
-  while ((ch != EOF) && (index - start < width))
-    {
-      /* Integer part */
-      if (isHex ? isxdigit(ch) : isdigit(ch))
-       {
-         doubleString[index++] = (char)ch;
-         self->InStream(self, &ch);
-       }
-      else if (flags & FLAGS_QUOTE)
-       {
-         /* Compare with thousands separator */
-         for (j = 0; internalThousandSeparator[j] && self->current; j++)
-           {
-             if (internalThousandSeparator[j] != self->current)
-               break;
-
-             self->InStream(self, &ch);
-           }
-         if (internalThousandSeparator[j])
-           break; /* Mismatch */
-         else
-           continue; /* Match */
-       }
-      else
-       break; /* while */
-    }
-  if (ch == '.')
-    {
-      /* Decimal part */
-      doubleString[index++] = (char)ch;
-      self->InStream(self, &ch);
-      while ((isHex ? isxdigit(ch) : isdigit(ch)) &&
-            (index - start < width))
-       {
-         doubleString[index++] = (char)ch;
-         self->InStream(self, &ch);
-       }
-      if (isHex ? (toupper(ch) == 'P') : (toupper(ch) == 'E'))
-       {
-         /* Exponent */
-         doubleString[index++] = (char)ch;
-         self->InStream(self, &ch);
-         if ((ch == '+') || (ch == '-'))
-           {
-             doubleString[index++] = (char)ch;
-             self->InStream(self, &ch);
-           }
-         while ((isHex ? isxdigit(ch) : isdigit(ch)) &&
-                (index - start < width))
-           {
-             doubleString[index++] = (char)ch;
-             self->InStream(self, &ch);
-           }
-       }
-    }
-
-  if ((index == start) || (*doubleString == NIL))
-    return FALSE;
-  
-  if (flags & FLAGS_LONGDOUBLE)
-/*     *longdoublePointer = StrToLongDouble()*/
-    return FALSE; /* FIXME: Remove when long double is implemented */
-  else
-    {
-      *target = StrToDouble(doubleString, NULL);
-    }
-  return TRUE;
-}
-
-/*************************************************************************
- * TrioReadPointer [private]
- */
-static BOOLEAN_T
-TrioReadPointer(trio_T *self,
-               void **target,
-               unsigned long flags)
-{
-  trio_uintmax_t number;
-  char buffer[sizeof(null)];
-
-  flags |= (FLAGS_UNSIGNED | FLAGS_ALTERNATIVE | FLAGS_NILPADDING);
-  
-  if (TrioReadNumber(self,
-                    &number,
-                    flags,
-                    POINTER_WIDTH,
-                    BASE_HEX))
-    {
-      /*
-       * The strange assignment of number is a workaround for a compiler
-       * warning
-       */
-      if (target)
-       *target = (char *)0 + number;
-      return TRUE;
-    }
-  else if (TrioReadString(self,
-                         (flags & FLAGS_IGNORE)
-                         ? NULL
-                         : buffer,
-                         0,
-                         sizeof(null) - 1))
-    {  
-      if (StrEqualCase(buffer, null))
-       {
-         if (target)
-           *target = NULL;
-         return TRUE;
-       }
-    }
-  return FALSE;
-}
-
-/*************************************************************************
- * TrioScan [private]
- */
-static int
-TrioScan(const void *source,
-        size_t sourceSize,
-        void (*InStream)(trio_T *, int *),
-        const char *format,
-        va_list arglist,
-        void **argarray)
-{
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  int charlen;
-#endif
-  int status;
-  int assignment;
-  parameter_T parameters[MAX_PARAMETERS];
-  trio_T internalData;
-  trio_T *data;
-  int ch;
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  int cnt;
-#endif
-  int index; /* Index of format string */
-  int i; /* Index of current parameter */
-  unsigned long flags;
-  int width;
-  int base;
-  void *pointer;
-
-  assert(VALID(InStream));
-  assert(VALID(format));
-
-  memset(&internalData, 0, sizeof(internalData));
-  data = &internalData;
-  data->InStream = InStream;
-  data->location = (void *)source;
-  data->max = sourceSize;
-
-#if defined(USE_LOCALE)
-  if (NULL == internalLocaleValues)
-    {
-      TrioSetLocale();
-    }
-#endif
-  
-  status = TrioPreprocess(TYPE_SCAN, format, parameters, arglist, argarray);
-  if (status < 0)
-    return status;
-
-  assignment = 0;
-  i = 0;
-  index = 0;
-  data->InStream(data, &ch);
-
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  mblen(NULL, 0);
-#endif
-
-  while (format[index])
-    {
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-      if (! isascii(format[index]))
-       {
-         charlen = mblen(&format[index], MB_LEN_MAX);
-         /* Compare multibyte characters in format string */
-         for (cnt = 0; cnt < charlen - 1; cnt++)
-           {
-             if (ch != format[index + cnt])
-               {
-                 return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-               }
-             data->InStream(data, &ch);
-           }
-         continue; /* while */
-       }
-#endif /* TRIO_COMPILER_SUPPORTS_MULTIBYTE */
-      if (EOF == ch)
-       return EOF;
-      
-      if (CHAR_IDENTIFIER == format[index])
-       {
-         if (CHAR_IDENTIFIER == format[index + 1])
-           {
-             /* Two % in format matches one % in input stream */
-             if (CHAR_IDENTIFIER == ch)
-               {
-                 data->InStream(data, &ch);
-                 index += 2;
-                 continue; /* while format chars left */
-               }
-             else
-               return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-           }
-
-         /* Skip the parameter entries */
-         while (parameters[i].type == FORMAT_PARAMETER)
-           i++;
-         
-         flags = parameters[i].flags;
-         /* Find width */
-         width = parameters[i].width;
-         if (flags & FLAGS_WIDTH_PARAMETER)
-           {
-             /* Get width from parameter list */
-             width = (int)parameters[width].data.number.as_signed;
-           }
-         /* Find base */
-         base = parameters[i].base;
-         if (flags & FLAGS_BASE_PARAMETER)
-           {
-             /* Get base from parameter list */
-             base = (int)parameters[base].data.number.as_signed;
-           }
-         
-         switch (parameters[i].type)
-           {
-           case FORMAT_INT:
-             {
-               trio_uintmax_t number;
-
-               if (0 == base)
-                 base = BASE_DECIMAL;
-
-               if (!TrioReadNumber(data,
-                                   &number,
-                                   flags,
-                                   width,
-                                   base))
-                 return assignment;
-               assignment++;
-               
-               if (!(flags & FLAGS_IGNORE))
-                 {
-                   pointer = parameters[i].data.pointer;
-#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
-                   if (flags & FLAGS_SIZE_T)
-                     *(size_t *)pointer = (size_t)number;
-                   else
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
-                   if (flags & FLAGS_PTRDIFF_T)
-                     *(ptrdiff_t *)pointer = (ptrdiff_t)number;
-                   else
-#endif
-#if defined(QUALIFIER_INTMAX_T)
-                   if (flags & FLAGS_INTMAX_T)
-                     *(trio_intmax_t *)pointer = (trio_intmax_t)number;
-                   else
-#endif
-                   if (flags & FLAGS_QUAD)
-                     *(trio_ulonglong_t *)pointer = (trio_ulonglong_t)number;
-                   else if (flags & FLAGS_LONG)
-                     *(long int *)pointer = (long int)number;
-                   else if (flags & FLAGS_SHORT)
-                     *(short int *)pointer = (short int)number;
-                   else
-                     *(int *)pointer = (int)number;
-                 }
-             }
-             break; /* FORMAT_INT */
-             
-           case FORMAT_STRING:
-#if TRIO_WIDECHAR
-             if (flags & FLAGS_WIDECHAR)
-               {
-                 if (!TrioReadWideString(data,
-                                         (flags & FLAGS_IGNORE)
-                                         ? NULL
-                                         : parameters[i].data.wstring,
-                                         flags,
-                                         width))
-                   return assignment;
-               }
-             else
-#endif
-               {
-                 if (!TrioReadString(data,
-                                     (flags & FLAGS_IGNORE)
-                                     ? NULL
-                                     : parameters[i].data.string,
-                                     flags,
-                                     width))
-                   return assignment;
-               }
-             assignment++;
-             break; /* FORMAT_STRING */
-             
-           case FORMAT_DOUBLE:
-             if (!TrioReadDouble(data,
-                                 (flags & FLAGS_IGNORE)
-                                 ? NULL
-                                 : parameters[i].data.doublePointer,
-                                 flags,
-                                 width))
-               return assignment;
-             assignment++;
-             break; /* FORMAT_DOUBLE */
-
-           case FORMAT_GROUP:
-             {
-               int characterclass[MAX_CHARACTER_CLASS + 1];
-               int rc;
-
-               /* Skip over modifiers */
-               while (format[index] != SPECIFIER_GROUP)
-                 {
-                   index++;
-                 }
-               /* Skip over group specifier */
-               index++;
-               
-               memset(characterclass, 0, sizeof(characterclass));
-               rc = TrioGetCharacterClass(format,
-                                          &index,
-                                          &flags,
-                                          characterclass);
-               if (rc < 0)
-                 return rc;
-
-               if (!TrioReadGroup(data,
-                                  (flags & FLAGS_IGNORE)
-                                  ? NULL
-                                  : parameters[i].data.string,
-                                  characterclass,
-                                  flags,
-                                  parameters[i].width))
-                 return assignment;
-               assignment++;
-             }
-             break; /* FORMAT_GROUP */
-             
-           case FORMAT_COUNT:
-             pointer = parameters[i].data.pointer;
-             if (NULL != pointer)
-               {
-#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
-                 if (flags & FLAGS_SIZE_T)
-                   *(size_t *)pointer = (size_t)data->committed;
-                 else
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
-                 if (flags & FLAGS_PTRDIFF_T)
-                   *(ptrdiff_t *)pointer = (ptrdiff_t)data->committed;
-                 else
-#endif
-#if defined(QUALIFIER_INTMAX_T)
-                 if (flags & FLAGS_INTMAX_T)
-                   *(trio_intmax_t *)pointer = (trio_intmax_t)data->committed;
-                 else
-#endif
-                 if (flags & FLAGS_QUAD)
-                   {
-                     *(trio_ulonglong_t *)pointer = (trio_ulonglong_t)data->committed;
-                   }
-                 else if (flags & FLAGS_LONG)
-                   {
-                     *(long int *)pointer = (long int)data->committed;
-                   }
-                 else if (flags & FLAGS_SHORT)
-                   {
-                     *(short int *)pointer = (short int)data->committed;
-                   }
-                 else
-                   {
-                     *(int *)pointer = (int)data->committed;
-                   }
-               }
-             break; /* FORMAT_COUNT */
-             
-           case FORMAT_CHAR:
-#if TRIO_WIDECHAR
-             if (flags & FLAGS_WIDECHAR)
-               {
-                 if (TrioReadWideChar(data,
-                                      (flags & FLAGS_IGNORE)
-                                      ? NULL
-                                      : parameters[i].data.wstring,
-                                      flags,
-                                      (width == NO_WIDTH) ? 1 : width) > 0)
-                   return assignment;
-               }
-             else
-#endif
-               {
-                 if (TrioReadChar(data,
-                                  (flags & FLAGS_IGNORE)
-                                  ? NULL
-                                  : parameters[i].data.string,
-                                  flags,
-                                  (width == NO_WIDTH) ? 1 : width) > 0)
-                   return assignment;
-               }
-             assignment++;
-             break; /* FORMAT_CHAR */
-             
-           case FORMAT_POINTER:
-             if (!TrioReadPointer(data,
-                                  (flags & FLAGS_IGNORE)
-                                  ? NULL
-                                  : (void **)parameters[i].data.pointer,
-                                  flags))
-               return assignment;
-             assignment++;
-             break; /* FORMAT_POINTER */
-             
-           case FORMAT_PARAMETER:
-             break; /* FORMAT_PARAMETER */
-             
-           default:
-             return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-           }
-         ch = data->current;
-         index = parameters[i].indexAfterSpecifier;
-         i++;
-       }
-      else /* Not an % identifier */
-       {
-         if (isspace((int)format[index]))
-           {
-             /* Whitespaces may match any amount of whitespaces */
-             ch = TrioSkipWhitespaces(data);
-           }
-         else if (ch == format[index])
-           {
-             data->InStream(data, &ch);
-           }
-         else
-           return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-         
-         index++;
-       }
-    }
-  return assignment;
-}
-
-/*************************************************************************
- * TrioInStreamFile [private]
- */
-static void
-TrioInStreamFile(trio_T *self,
-                int *intPointer)
-{
-  FILE *file = (FILE *)self->location;
-
-  assert(VALID(self));
-  assert(VALID(file));
-
-  self->current = fgetc(file);
-  self->processed++;
-  self->committed++;
-  
-  if (VALID(intPointer))
-    {
-      *intPointer = self->current;
-    }
-}
-
-/*************************************************************************
- * TrioInStreamFileDescriptor [private]
- */
-static void
-TrioInStreamFileDescriptor(trio_T *self,
-                          int *intPointer)
-{
-  int fd = *((int *)self->location);
-  int size;
-  unsigned char input;
-
-  assert(VALID(self));
-
-  size = read(fd, &input, sizeof(char));
-  self->current = (size == 0) ? EOF : input;
-  self->processed++;
-  self->committed++;
-  
-  if (VALID(intPointer))
-    {
-      *intPointer = self->current;
-    }
-}
-
-/*************************************************************************
- * TrioInStreamString [private]
- */
-static void
-TrioInStreamString(trio_T *self,
-                  int *intPointer)
-{
-  unsigned char **buffer;
-
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-  assert(VALID(self->location));
-
-  buffer = (unsigned char **)self->location;
-  self->current = (*buffer)[0];
-  if (self->current == NIL)
-    self->current = EOF;
-  (*buffer)++;
-  self->processed++;
-  self->committed++;
-  
-  if (VALID(intPointer))
-    {
-      *intPointer = self->current;
-    }
-}
-
-/*************************************************************************
- * scanf
- */
-int
-trio_scanf(const char *format,
-          ...)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(format));
-  
-  va_start(args, format);
-  status = TrioScan(stdin, 0, TrioInStreamFile, format, args, NULL);
-  va_end(args);
-  return status;
-}
-
-int
-trio_vscanf(const char *format,
-           va_list args)
-{
-  assert(VALID(format));
-  
-  return TrioScan(stdin, 0, TrioInStreamFile, format, args, NULL);
-}
-
-int
-trio_scanfv(const char *format,
-           void **args)
-{
-  va_list dummy;
-  shutup_unitialized(&dummy);
-  
-  assert(VALID(format));
-  
-  return TrioScan(stdin, 0, TrioInStreamFile, format, dummy, args);
-}
-
-/*************************************************************************
- * fscanf
- */
-int
-trio_fscanf(FILE *file,
-           const char *format,
-           ...)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(file));
-  assert(VALID(format));
-  
-  va_start(args, format);
-  status = TrioScan(file, 0, TrioInStreamFile, format, args, NULL);
-  va_end(args);
-  return status;
-}
-
-int
-trio_vfscanf(FILE *file,
-            const char *format,
-            va_list args)
-{
-  assert(VALID(file));
-  assert(VALID(format));
-  
-  return TrioScan(file, 0, TrioInStreamFile, format, args, NULL);
-}
-
-int
-trio_fscanfv(FILE *file,
-            const char *format,
-            void **args)
-{
-  va_list dummy;
-  shutup_unitialized(&dummy);
-  
-  assert(VALID(file));
-  assert(VALID(format));
-  
-  return TrioScan(file, 0, TrioInStreamFile, format, dummy, args);
-}
-
-/*************************************************************************
- * dscanf
- */
-int
-trio_dscanf(int fd,
-           const char *format,
-           ...)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(format));
-  
-  va_start(args, format);
-  status = TrioScan(&fd, 0, TrioInStreamFileDescriptor, format, args, NULL);
-  va_end(args);
-  return status;
-}
-
-int
-trio_vdscanf(int fd,
-            const char *format,
-            va_list args)
-{
-  assert(VALID(format));
-  
-  return TrioScan(&fd, 0, TrioInStreamFileDescriptor, format, args, NULL);
-}
-
-int
-trio_dscanfv(int fd,
-             const char *format,
-             void **args)
-{
-  va_list dummy;
-  shutup_unitialized(&dummy);
-  
-  assert(VALID(format));
-  
-  return TrioScan(&fd, 0, TrioInStreamFileDescriptor, format, dummy, args);
-}
-
-/*************************************************************************
- * sscanf
- */
-int
-trio_sscanf(const char *buffer,
-           const char *format,
-           ...)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-  
-  va_start(args, format);
-  status = TrioScan(&buffer, 0, TrioInStreamString, format, args, NULL);
-  va_end(args);
-  return status;
-}
-
-int
-trio_vsscanf(const char *buffer,
-            const char *format,
-            va_list args)
-{
-  assert(VALID(buffer));
-  assert(VALID(format));
-  
-  return TrioScan(&buffer, 0, TrioInStreamString, format, args, NULL);
-}
-
-int
-trio_sscanfv(const char *buffer,
-            const char *format,
-            void **args)
-{
-  va_list dummy;
-  shutup_unitialized(&dummy);
-  
-  assert(VALID(buffer));
-  assert(VALID(format));
-  
-  return TrioScan(&buffer, 0, TrioInStreamString, format, dummy, args);
-}
-
diff --git a/org.glite.lbjp-common.trio/src/triop.h b/org.glite.lbjp-common.trio/src/triop.h
deleted file mode 100644 (file)
index ca49fab..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 2000 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- ************************************************************************
- *
- * Private functions, types, etc. used for callback functions.
- *
- * The ref pointer is an opaque type and should remain as such.
- * Private data must only be accessible through the getter and
- * setter functions.
- *
- ************************************************************************/
-
-#ifndef TRIO_TRIOP_H
-#define TRIO_TRIOP_H
-
-#include <stdlib.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef TRIO_C99
-# define TRIO_C99 1
-#endif
-#ifndef TRIO_BSD
-# define TRIO_BSD 1
-#endif
-#ifndef TRIO_GNU
-# define TRIO_GNU 1
-#endif
-#ifndef TRIO_MISC
-# define TRIO_MISC 1
-#endif
-#ifndef TRIO_UNIX98
-# define TRIO_UNIX98 1
-#endif
-#ifndef TRIO_MICROSOFT
-# define TRIO_MICROSOFT 1
-#endif
-#ifndef TRIO_EXTENSION
-# define TRIO_EXTENSION 1
-#endif
-#ifndef TRIO_WIDECHAR
-# define TRIO_WIDECHAR 0
-#endif
-#ifndef TRIO_ERRORS
-# define TRIO_ERRORS 1
-#endif
-
-#ifndef TRIO_MALLOC
-# define TRIO_MALLOC(n) malloc(n)
-#endif
-#ifndef TRIO_REALLOC
-# define TRIO_REALLOC(x,n) realloc((x),(n))
-#endif
-#ifndef TRIO_FREE
-# define TRIO_FREE(x) free(x)
-#endif
-
-typedef int (*trio_callback_t)(void *ref);
-
-void *trio_register(trio_callback_t callback, const char *name);
-void trio_unregister(void *handle);
-
-const char *trio_get_format(void *ref);
-void *trio_get_argument(void *ref);
-
-/* Modifiers */
-int  trio_get_width(void *ref);
-void trio_set_width(void *ref, int width);
-int  trio_get_precision(void *ref);
-void trio_set_precision(void *ref, int precision);
-int  trio_get_base(void *ref);
-void trio_set_base(void *ref, int base);
-int  trio_get_padding(void *ref);
-void trio_set_padding(void *ref, int is_padding);
-int  trio_get_short(void *ref); /* h */
-void trio_set_shortshort(void *ref, int is_shortshort);
-int  trio_get_shortshort(void *ref); /* hh */
-void trio_set_short(void *ref, int is_short);
-int  trio_get_long(void *ref); /* l */
-void trio_set_long(void *ref, int is_long);
-int  trio_get_longlong(void *ref); /* ll */
-void trio_set_longlong(void *ref, int is_longlong);
-int  trio_get_longdouble(void *ref); /* L */
-void trio_set_longdouble(void *ref, int is_longdouble);
-int  trio_get_alternative(void *ref); /* # */
-void trio_set_alternative(void *ref, int is_alternative);
-int  trio_get_alignment(void *ref); /* - */
-void trio_set_alignment(void *ref, int is_leftaligned);
-int  trio_get_spacing(void *ref); /* (space) */
-void trio_set_spacing(void *ref, int is_space);
-int  trio_get_sign(void *ref); /* + */
-void trio_set_sign(void *ref, int is_showsign);
-int  trio_get_quote(void *ref); /* ' */
-void trio_set_quote(void *ref, int is_quote);
-int  trio_get_upper(void *ref);
-void trio_set_upper(void *ref, int is_upper);
-#if TRIO_C99
-int  trio_get_largest(void *ref); /* j */
-void trio_set_largest(void *ref, int is_largest);
-int  trio_get_ptrdiff(void *ref); /* t */
-void trio_set_ptrdiff(void *ref, int is_ptrdiff);
-int  trio_get_size(void *ref); /* z / Z */
-void trio_set_size(void *ref, int is_size);
-#endif
-
-/* Printing */
-int trio_print_ref(void *ref, const char *format, ...);
-int trio_vprint_ref(void *ref, const char *format, va_list args);
-int trio_printv_ref(void *ref, const char *format, void **args);
-
-void trio_print_int(void *ref, int number);
-void trio_print_uint(void *ref, unsigned int number);
-/*  void trio_print_long(void *ref, long number); */
-/*  void trio_print_ulong(void *ref, unsigned long number); */
-void trio_print_double(void *ref, double number);
-void trio_print_string(void *ref, char *string);
-void trio_print_pointer(void *ref, void *pointer);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* TRIO_TRIOP_H */
diff --git a/org.glite.lbjp-common.trio/test/trio_test.cpp b/org.glite.lbjp-common.trio/test/trio_test.cpp
deleted file mode 100644 (file)
index 2cbe502..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-#include <iostream>
-#include <cstring>
-
-#include <cppunit/extensions/HelperMacros.h>
-#include <cppunit/TestFixture.h>
-
-#include "trio.h"
-
-class TrioTest: public  CppUnit::TestFixture
-{
-       CPPUNIT_TEST_SUITE(TrioTest);
-       CPPUNIT_TEST(escapeULM);
-       CPPUNIT_TEST(escapeXML);
-       CPPUNIT_TEST(escapeSQL);
-       CPPUNIT_TEST_SUITE_END();
-
-public:
-       void escapeULM();
-       void escapeXML();
-       void escapeSQL();
-};
-
-void TrioTest::escapeULM()
-{
-       char    *e, *r = "START we have =, \\\", and \\n in the string END";
-
-       trio_asprintf(&e,"START %|Us END", "we have =, \", and \n in the string"),
-       std::cerr << e << std::endl;
-
-       CPPUNIT_ASSERT_MESSAGE("escape ULM failed",!strcmp(e,r));
-}
-
-void TrioTest::escapeXML()
-{
-       char    *e, *r = "START there is a &lt;tag&gt; containing &amp;something; &lt;/tag&gt; END";
-
-       trio_asprintf(&e,"START %|Xs END", "there is a <tag> containing &something; </tag>"),
-       std::cerr << e << std::endl;
-
-       CPPUNIT_ASSERT_MESSAGE("escape XML failed",!strcmp(e,r));
-}
-
-void TrioTest::escapeSQL()
-{
-       char    *e, *r = "START SQL doesn''t like '' END";
-
-       trio_asprintf(&e,"START %|Ss END", "SQL doesn't like '"),
-       std::cerr << e << std::endl;
-
-       CPPUNIT_ASSERT_MESSAGE("escape SQL failed",!strcmp(e,r));
-}
-
-CPPUNIT_TEST_SUITE_REGISTRATION( TrioTest );
-
-#include <assert.h>
-#include <fstream>
-
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/XmlOutputter.h>
-#include <cppunit/TestRunner.h>
-#include <cppunit/TestResult.h>
-#include <cppunit/TestResultCollector.h>
-
-int main (int argc,const char *argv[])
-{
-       CppUnit::Test *suite = CppUnit::TestFactoryRegistry::getRegistry().makeTest();
-
-       assert(argc == 2);
-       std::ofstream   xml(argv[1]);
-
-       CppUnit::TestResult controller;
-       CppUnit::TestResultCollector result;
-       controller.addListener( &result );
-
-       CppUnit::TestRunner runner;
-       runner.addTest(suite);
-       runner.run(controller);
-
-       CppUnit::XmlOutputter xout( &result, xml );
-       CppUnit::CompilerOutputter tout( &result, std::cout);
-       xout.write();
-       tout.write();
-
-       return result.wasSuccessful() ? 0 : 1 ;
-}
diff --git a/org.glite.lbjp-common/project/version.properties b/org.glite.lbjp-common/project/version.properties
deleted file mode 100644 (file)
index 929dec5..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# : /cvs/glite/org.glite.lbjp-common/project/version.properties,v 1.1 2009/01/21 12:57:26 akrenek Exp $
-module.version=2.0.0
-module.age=1