This commit was manufactured by cvs2svn to create branch 'glite-lb- glite-lb-server_R_1_0_0
authorcvs2svn <admin@example.com>
Fri, 10 Dec 2004 13:01:21 +0000 (13:01 +0000)
committercvs2svn <admin@example.com>
Fri, 10 Dec 2004 13:01:21 +0000 (13:01 +0000)
server_branch_1_0_0'.

Sprout from master 2004-12-10 13:01:20 UTC Aleš Křenek <ljocha@ics.muni.cz> 'imported statistics counting'
Delete:
    org.glite.deployment.lb/.cvsignore
    org.glite.deployment.lb/build.xml
    org.glite.deployment.lb/config/scripts/glite-lb-config.py
    org.glite.deployment.lb/config/scripts/remove_all_rpms.sh
    org.glite.deployment.lb/config/templates/glite-lb.cfg.xml
    org.glite.deployment.lb/doc/release_notes/release_notes.doc
    org.glite.deployment.lb/doc/release_notes/release_notes.html
    org.glite.deployment.lb/doc/release_notes/release_notes.pdf
    org.glite.deployment.lb/project/.cvsignore
    org.glite.deployment.lb/project/build.properties
    org.glite.deployment.lb/project/glite-lb.sdf.xml.template
    org.glite.deployment.lb/project/glite-lb.spec
    org.glite.deployment.lb/project/lxscript-rpm.xsl
    org.glite.deployment.lb/project/lxscript-tgz.xsl
    org.glite.deployment.lb/project/properties.xml
    org.glite.deployment.lb/project/quattor-template.xsl
    org.glite.deployment.lb/project/version.properties
    org.glite.jp.common/.cvsignore
    org.glite.jp.common/Makefile
    org.glite.jp.common/build.xml
    org.glite.jp.common/interface/context.h
    org.glite.jp.common/interface/strmd5.h
    org.glite.jp.common/interface/types.h
    org.glite.jp.common/project/build.properties
    org.glite.jp.common/project/configure.properties.xml
    org.glite.jp.common/project/properties.xml
    org.glite.jp.common/project/tar_exclude
    org.glite.jp.common/project/version.properties
    org.glite.jp.common/src/context.c
    org.glite.jp.common/src/strmd5.c
    org.glite.jp.index/.cvsignore
    org.glite.jp.index/Makefile
    org.glite.jp.index/build.xml
    org.glite.jp.index/project/JobProvenanceIS.wsdl
    org.glite.jp.index/project/build.properties
    org.glite.jp.index/project/configure.properties.xml
    org.glite.jp.index/project/properties.xml
    org.glite.jp.index/project/tar_exclude
    org.glite.jp.index/project/version.properties
    org.glite.jp.index/src/simple_server.c
    org.glite.jp.index/src/soap_ops.c
    org.glite.jp.index/src/typemap.dat
    org.glite.jp.primary/.cvsignore
    org.glite.jp.primary/Makefile
    org.glite.jp.primary/build.xml
    org.glite.jp.primary/examples/jpps-test.c
    org.glite.jp.primary/project/build.properties
    org.glite.jp.primary/project/configure.properties.xml
    org.glite.jp.primary/project/properties.xml
    org.glite.jp.primary/project/tar_exclude
    org.glite.jp.primary/project/version.properties
    org.glite.jp.primary/src/backend.h
    org.glite.jp.primary/src/feed.c
    org.glite.jp.primary/src/feed.h
    org.glite.jp.primary/src/ftp_backend.c
    org.glite.jp.primary/src/is_client.c
    org.glite.jp.primary/src/jptype_map.h
    org.glite.jp.primary/src/simple_server.c
    org.glite.jp.primary/src/soap_ops.c
    org.glite.jp.primary/src/tags.c
    org.glite.jp.primary/src/tags.h
    org.glite.jp.primary/src/typemap.dat
    org.glite.jp.ws-interface/.cvsignore
    org.glite.jp.ws-interface/LICENSE
    org.glite.jp.ws-interface/Makefile
    org.glite.jp.ws-interface/build.xml
    org.glite.jp.ws-interface/interface/JobProvenanceIS.wsdl
    org.glite.jp.ws-interface/interface/JobProvenancePS.wsdl
    org.glite.jp.ws-interface/interface/JobProvenanceTypes.wsdl
    org.glite.jp.ws-interface/project/build.properties
    org.glite.jp.ws-interface/project/configure.properties.xml
    org.glite.jp.ws-interface/project/glite-jp-ws-interface.spec
    org.glite.jp.ws-interface/project/properties.xml
    org.glite.jp.ws-interface/project/tar_exclude
    org.glite.jp.ws-interface/project/version.properties
    org.glite.jp/.cvsignore
    org.glite.jp/build.xml
    org.glite.jp/project/build.properties
    org.glite.jp/project/dependencies.properties
    org.glite.jp/project/glite.jp.csf.xml
    org.glite.jp/project/properties.xml
    org.glite.jp/project/run-workspace
    org.glite.jp/project/taskdefs.xml
    org.glite.jp/project/version.properties
    org.glite.lb.client-interface/.cvsignore
    org.glite.lb.client-interface/LICENSE
    org.glite.lb.client-interface/Makefile
    org.glite.lb.client-interface/build.xml
    org.glite.lb.client-interface/interface/CountRef.h
    org.glite.lb.client-interface/interface/Event.h.T
    org.glite.lb.client-interface/interface/Job.h
    org.glite.lb.client-interface/interface/JobStatus.h.T
    org.glite.lb.client-interface/interface/LoggingExceptions.h
    org.glite.lb.client-interface/interface/Notification.h
    org.glite.lb.client-interface/interface/ServerConnection.h
    org.glite.lb.client-interface/interface/consumer.h
    org.glite.lb.client-interface/interface/consumer_fake.h
    org.glite.lb.client-interface/interface/context.h
    org.glite.lb.client-interface/interface/dump.h
    org.glite.lb.client-interface/interface/events.h.T
    org.glite.lb.client-interface/interface/jobstat.h.T
    org.glite.lb.client-interface/interface/load.h
    org.glite.lb.client-interface/interface/notification.h
    org.glite.lb.client-interface/interface/notifid.h
    org.glite.lb.client-interface/interface/producer.h.T
    org.glite.lb.client-interface/interface/producer_fake.h
    org.glite.lb.client-interface/interface/purge.h
    org.glite.lb.client-interface/interface/statistics.h
    org.glite.lb.client-interface/project/build.properties
    org.glite.lb.client-interface/project/configure.properties.xml
    org.glite.lb.client-interface/project/properties.xml
    org.glite.lb.client-interface/project/tar_exclude
    org.glite.lb.client-interface/project/version.properties
    org.glite.lb.client/.cvsignore
    org.glite.lb.client/LICENSE
    org.glite.lb.client/Makefile
    org.glite.lb.client/build.xml
    org.glite.lb.client/doc/README-fake
    org.glite.lb.client/examples/aborted.l
    org.glite.lb.client/examples/cancelled.l
    org.glite.lb.client/examples/chkpt.l
    org.glite.lb.client/examples/cleared.l
    org.glite.lb.client/examples/consumer_fake.c
    org.glite.lb.client/examples/done.l
    org.glite.lb.client/examples/done_dag.l
    org.glite.lb.client/examples/done_subjob.l
    org.glite.lb.client/examples/failed_dag.l
    org.glite.lb.client/examples/failed_subjob.l
    org.glite.lb.client/examples/feed_shark.c
    org.glite.lb.client/examples/gen_begin
    org.glite.lb.client/examples/gen_sample_job
    org.glite.lb.client/examples/job_log.c
    org.glite.lb.client/examples/job_reg.c
    org.glite.lb.client/examples/log_usertag_proxy.c
    org.glite.lb.client/examples/notify.c
    org.glite.lb.client/examples/producer_fake.c
    org.glite.lb.client/examples/query_ext.c
    org.glite.lb.client/examples/query_seq_code.c
    org.glite.lb.client/examples/ready.l
    org.glite.lb.client/examples/ready_dag.l
    org.glite.lb.client/examples/ready_subjob.l
    org.glite.lb.client/examples/running.l
    org.glite.lb.client/examples/running_dag.l
    org.glite.lb.client/examples/running_subjob.l
    org.glite.lb.client/examples/scheduled.l
    org.glite.lb.client/examples/scheduled_dag.l
    org.glite.lb.client/examples/scheduled_subjob.l
    org.glite.lb.client/examples/stats.c
    org.glite.lb.client/examples/submitted.l
    org.glite.lb.client/examples/submitted_dag.l
    org.glite.lb.client/examples/submitted_subjob.l
    org.glite.lb.client/examples/waiting.l
    org.glite.lb.client/examples/waiting_dag.l
    org.glite.lb.client/examples/waiting_subjob.l
    org.glite.lb.client/project/build.properties
    org.glite.lb.client/project/configure.properties.xml
    org.glite.lb.client/project/properties.xml
    org.glite.lb.client/project/tar_exclude
    org.glite.lb.client/project/version.properties
    org.glite.lb.client/src/Event.cpp.T
    org.glite.lb.client/src/Job.cpp
    org.glite.lb.client/src/JobStatus.cpp.T
    org.glite.lb.client/src/Notification.cpp
    org.glite.lb.client/src/ServerConnection.cpp
    org.glite.lb.client/src/args.c.T
    org.glite.lb.client/src/args.h
    org.glite.lb.client/src/connection.c
    org.glite.lb.client/src/connection.h
    org.glite.lb.client/src/consumer.c
    org.glite.lb.client/src/dump.c
    org.glite.lb.client/src/load.c
    org.glite.lb.client/src/logevent.c.T
    org.glite.lb.client/src/notification.c
    org.glite.lb.client/src/prod_proto.c
    org.glite.lb.client/src/prod_proto.h
    org.glite.lb.client/src/producer.c
    org.glite.lb.client/src/purge.c
    org.glite.lb.client/src/statistics.c
    org.glite.lb.client/src/uiwrap.c.T
    org.glite.lb.client/test/prod_proto_test.c
    org.glite.lb.client/test/producer_test.cpp
    org.glite.lb.common/.cvsignore
    org.glite.lb.common/LICENSE
    org.glite.lb.common/Makefile
    org.glite.lb.common/build.xml
    org.glite.lb.common/interface/authz.h
    org.glite.lb.common/interface/context-int.h
    org.glite.lb.common/interface/escape.h
    org.glite.lb.common/interface/events_parse.h
    org.glite.lb.common/interface/il_string.h
    org.glite.lb.common/interface/lb_gss.h
    org.glite.lb.common/interface/lb_plain_io.h
    org.glite.lb.common/interface/log_proto.h
    org.glite.lb.common/interface/mini_http.h
    org.glite.lb.common/interface/trio.h
    org.glite.lb.common/interface/ulm_parse.h
    org.glite.lb.common/interface/xml_conversions.h
    org.glite.lb.common/interface/xml_parse.h
    org.glite.lb.common/project/build.properties
    org.glite.lb.common/project/configure.properties.xml
    org.glite.lb.common/project/properties.xml
    org.glite.lb.common/project/tar_exclude
    org.glite.lb.common/project/version.properties
    org.glite.lb.common/src/context.c
    org.glite.lb.common/src/escape.c
    org.glite.lb.common/src/events.c.T
    org.glite.lb.common/src/events_parse.c.T
    org.glite.lb.common/src/il_int.c
    org.glite.lb.common/src/il_log.c
    org.glite.lb.common/src/il_msg.c
    org.glite.lb.common/src/il_string.c
    org.glite.lb.common/src/lb_gss.c
    org.glite.lb.common/src/lb_plain_io.c
    org.glite.lb.common/src/mini_http.c
    org.glite.lb.common/src/notifid.c
    org.glite.lb.common/src/param.c
    org.glite.lb.common/src/query_rec.c
    org.glite.lb.common/src/status.c.T
    org.glite.lb.common/src/strio.c
    org.glite.lb.common/src/strio.h
    org.glite.lb.common/src/trio.c
    org.glite.lb.common/src/triop.h
    org.glite.lb.common/src/ulm_parse.c
    org.glite.lb.common/src/xml_conversions.c
    org.glite.lb.common/src/xml_parse.c.T
    org.glite.lb.common/test/il_int_test.cpp
    org.glite.lb.common/test/il_string_test.cpp
    org.glite.lb.common/test/il_test.cpp
    org.glite.lb.common/test/parse.cpp.T
    org.glite.lb.common/test/test_gss.cpp
    org.glite.lb.logger/.cvsignore
    org.glite.lb.logger/LICENSE
    org.glite.lb.logger/Makefile
    org.glite.lb.logger/build.xml
    org.glite.lb.logger/config/startup
    org.glite.lb.logger/project/build.properties
    org.glite.lb.logger/project/configure.properties.xml
    org.glite.lb.logger/project/properties.xml
    org.glite.lb.logger/project/tar_exclude
    org.glite.lb.logger/project/version.properties
    org.glite.lb.logger/src/event_queue.c
    org.glite.lb.logger/src/event_store.c
    org.glite.lb.logger/src/il_error.c
    org.glite.lb.logger/src/il_error.h
    org.glite.lb.logger/src/il_master.c
    org.glite.lb.logger/src/input_queue_socket.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/logd_proto.c
    org.glite.lb.logger/src/logd_proto.h
    org.glite.lb.logger/src/queue_mgr.c
    org.glite.lb.logger/src/queue_thread.c
    org.glite.lb.logger/src/recover.c
    org.glite.lb.logger/src/send_event.c
    org.glite.lb.logger/src/server_msg.c
    org.glite.lb.logger/test/IlTestBase.cpp
    org.glite.lb.logger/test/IlTestBase.h
    org.glite.lb.logger/test/event_queueTest.cpp
    org.glite.lb.logger/test/event_storeTest.cpp
    org.glite.lb.logger/test/il_test.cpp
    org.glite.lb.logger/test/input_queue_socketTest.cpp
    org.glite.lb.logger/test/ll_test.cpp
    org.glite.lb.logger/test/logd_proto_test.c
    org.glite.lb.logger/test/server_msgTest.cpp
    org.glite.lb.server-bones/.cvsignore
    org.glite.lb.server-bones/Makefile
    org.glite.lb.server-bones/build.xml
    org.glite.lb.server-bones/examples/cnt_example.c
    org.glite.lb.server-bones/examples/srv_example.c
    org.glite.lb.server-bones/interface/srvbones.h
    org.glite.lb.server-bones/project/build.properties
    org.glite.lb.server-bones/project/configure.properties.xml
    org.glite.lb.server-bones/project/properties.xml
    org.glite.lb.server-bones/project/tar_exclude
    org.glite.lb.server-bones/project/version.properties
    org.glite.lb.server-bones/src/srvbones.c
    org.glite.lb.ws-interface/.Makefile.swp
    org.glite.lb.ws-interface/.cvsignore
    org.glite.lb.ws-interface/LICENSE
    org.glite.lb.ws-interface/Makefile
    org.glite.lb.ws-interface/build.xml
    org.glite.lb.ws-interface/interface/LB.wsdl
    org.glite.lb.ws-interface/project/build.properties
    org.glite.lb.ws-interface/project/configure.properties.xml
    org.glite.lb.ws-interface/project/properties.xml
    org.glite.lb.ws-interface/project/tar_exclude
    org.glite.lb.ws-interface/project/version.properties
    org.glite.lb/.cvsignore
    org.glite.lb/LICENSE
    org.glite.lb/build.xml
    org.glite.lb/project/MultiStruct.pm
    org.glite.lb/project/StructField.pm
    org.glite.lb/project/at3
    org.glite.lb/project/build.properties
    org.glite.lb/project/dependencies.properties
    org.glite.lb/project/events.T
    org.glite.lb/project/glite.lb.csf.xml
    org.glite.lb/project/properties.xml
    org.glite.lb/project/run-workspace
    org.glite.lb/project/status.T
    org.glite.lb/project/taskdefs.xml
    org.glite.lb/project/types.T
    org.glite.lb/project/version.properties
    org.glite.security.proxyrenewal/.cvsignore
    org.glite.security.proxyrenewal/LICENSE
    org.glite.security.proxyrenewal/Makefile
    org.glite.security.proxyrenewal/build.xml
    org.glite.security.proxyrenewal/config/startup
    org.glite.security.proxyrenewal/interface/renewal.h
    org.glite.security.proxyrenewal/project/build.properties
    org.glite.security.proxyrenewal/project/configure.properties.xml
    org.glite.security.proxyrenewal/project/properties.xml
    org.glite.security.proxyrenewal/project/tar_exclude
    org.glite.security.proxyrenewal/project/taskdefs.xml
    org.glite.security.proxyrenewal/project/version.properties
    org.glite.security.proxyrenewal/src/api.c
    org.glite.security.proxyrenewal/src/client.c
    org.glite.security.proxyrenewal/src/commands.c
    org.glite.security.proxyrenewal/src/common.c
    org.glite.security.proxyrenewal/src/renew.c
    org.glite.security.proxyrenewal/src/renewal_locl.h
    org.glite.security.proxyrenewal/src/renewd.c
    org.glite.security.proxyrenewal/src/renewd_locl.h
    org.glite.wms-utils.exception/.cvsignore
    org.glite.wms-utils.exception/LICENSE
    org.glite.wms-utils.exception/Makefile.am
    org.glite.wms-utils.exception/bootstrap
    org.glite.wms-utils.exception/build.xml
    org.glite.wms-utils.exception/configure.ac
    org.glite.wms-utils.exception/interface/Makefile.am
    org.glite.wms-utils.exception/interface/glite/wmsutils/exception/Exception.h
    org.glite.wms-utils.exception/interface/glite/wmsutils/exception/exception_codes.h
    org.glite.wms-utils.exception/project/build.properties
    org.glite.wms-utils.exception/project/configure.properties.xml
    org.glite.wms-utils.exception/project/properties.xml
    org.glite.wms-utils.exception/project/version.properties
    org.glite.wms-utils.exception/src/Exception.cpp
    org.glite.wms-utils.exception/src/Makefile.am
    org.glite.wms-utils.jobid/.cvsignore
    org.glite.wms-utils.jobid/LICENSE
    org.glite.wms-utils.jobid/Makefile.am
    org.glite.wms-utils.jobid/bootstrap
    org.glite.wms-utils.jobid/build.xml
    org.glite.wms-utils.jobid/configure.ac
    org.glite.wms-utils.jobid/examples/Makefile.am
    org.glite.wms-utils.jobid/examples/testjobid.c
    org.glite.wms-utils.jobid/interface/Makefile.am
    org.glite.wms-utils.jobid/interface/glite/wmsutils/jobid/JobId.h
    org.glite.wms-utils.jobid/interface/glite/wmsutils/jobid/JobIdExceptions.h
    org.glite.wms-utils.jobid/interface/glite/wmsutils/jobid/cjobid.h
    org.glite.wms-utils.jobid/interface/glite/wmsutils/jobid/manipulation.h
    org.glite.wms-utils.jobid/project/build.properties
    org.glite.wms-utils.jobid/project/configure.properties.xml
    org.glite.wms-utils.jobid/project/properties.xml
    org.glite.wms-utils.jobid/project/version.properties
    org.glite.wms-utils.jobid/src/Makefile.am
    org.glite.wms-utils.jobid/src/jobid/JobId.cpp
    org.glite.wms-utils.jobid/src/jobid/JobIdExceptions.cpp
    org.glite.wms-utils.jobid/src/jobid/Makefile.am
    org.glite.wms-utils.jobid/src/jobid/cjobid.c
    org.glite.wms-utils.jobid/src/jobid/manipulation.cpp
    org.glite.wms-utils.jobid/src/jobid/strmd5.c
    org.glite.wms-utils.jobid/src/jobid/strmd5.h
    org.gridsite.core/.cvsignore
    org.gridsite.core/CHANGES
    org.gridsite.core/INSTALL
    org.gridsite.core/LICENSE
    org.gridsite.core/README
    org.gridsite.core/VERSION
    org.gridsite.core/build.xml
    org.gridsite.core/doc/README.htcp-bin
    org.gridsite.core/doc/admin.html
    org.gridsite.core/doc/build-apache2.sh
    org.gridsite.core/doc/config.html
    org.gridsite.core/doc/findproxyfile.1
    org.gridsite.core/doc/gacl.html
    org.gridsite.core/doc/htcp.1
    org.gridsite.core/doc/htll.1
    org.gridsite.core/doc/htls.1
    org.gridsite.core/doc/htmkdir.1
    org.gridsite.core/doc/htrm.1
    org.gridsite.core/doc/httpd-fileserver.conf
    org.gridsite.core/doc/httpd-webserver.conf
    org.gridsite.core/doc/index.html
    org.gridsite.core/doc/install.html
    org.gridsite.core/doc/library.html
    org.gridsite.core/doc/module.html
    org.gridsite.core/doc/urlencode.1
    org.gridsite.core/doc/user.html
    org.gridsite.core/interface/gridsite-gacl.h
    org.gridsite.core/interface/gridsite.h
    org.gridsite.core/project/build.properties
    org.gridsite.core/project/configure.properties.xml
    org.gridsite.core/project/dependencies.properties
    org.gridsite.core/project/gridsite.core.csf.xml
    org.gridsite.core/project/properties.xml
    org.gridsite.core/project/taskdefs.xml
    org.gridsite.core/project/version.properties
    org.gridsite.core/src/Doxyfile
    org.gridsite.core/src/Makefile
    org.gridsite.core/src/delegation.h
    org.gridsite.core/src/doxygen.css
    org.gridsite.core/src/doxyheader.html
    org.gridsite.core/src/findproxyfile.c
    org.gridsite.core/src/gaclexample.c
    org.gridsite.core/src/gridsite.spec
    org.gridsite.core/src/grst-delegation.c
    org.gridsite.core/src/grst_admin.h
    org.gridsite.core/src/grst_admin_file.c
    org.gridsite.core/src/grst_admin_gacl.c
    org.gridsite.core/src/grst_admin_main.c
    org.gridsite.core/src/grst_gacl.c
    org.gridsite.core/src/grst_http.c
    org.gridsite.core/src/grst_x509.c
    org.gridsite.core/src/htcp
    org.gridsite.core/src/htcp.c
    org.gridsite.core/src/htproxyput.c
    org.gridsite.core/src/mod_gridsite.c
    org.gridsite.core/src/mod_ssl-private.h
    org.gridsite.core/src/proxyput-example.c
    org.gridsite.core/src/real-gridsite-admin.cgi
    org.gridsite.core/src/roffit
    org.gridsite.core/src/urlencode.c

424 files changed:
org.glite.deployment.lb/.cvsignore [deleted file]
org.glite.deployment.lb/build.xml [deleted file]
org.glite.deployment.lb/config/scripts/glite-lb-config.py [deleted file]
org.glite.deployment.lb/config/scripts/remove_all_rpms.sh [deleted file]
org.glite.deployment.lb/config/templates/glite-lb.cfg.xml [deleted file]
org.glite.deployment.lb/doc/release_notes/release_notes.doc [deleted file]
org.glite.deployment.lb/doc/release_notes/release_notes.html [deleted file]
org.glite.deployment.lb/doc/release_notes/release_notes.pdf [deleted file]
org.glite.deployment.lb/project/.cvsignore [deleted file]
org.glite.deployment.lb/project/build.properties [deleted file]
org.glite.deployment.lb/project/glite-lb.sdf.xml.template [deleted file]
org.glite.deployment.lb/project/glite-lb.spec [deleted file]
org.glite.deployment.lb/project/lxscript-rpm.xsl [deleted file]
org.glite.deployment.lb/project/lxscript-tgz.xsl [deleted file]
org.glite.deployment.lb/project/properties.xml [deleted file]
org.glite.deployment.lb/project/quattor-template.xsl [deleted file]
org.glite.deployment.lb/project/version.properties [deleted file]
org.glite.jp.common/.cvsignore [deleted file]
org.glite.jp.common/Makefile [deleted file]
org.glite.jp.common/build.xml [deleted file]
org.glite.jp.common/interface/context.h [deleted file]
org.glite.jp.common/interface/strmd5.h [deleted file]
org.glite.jp.common/interface/types.h [deleted file]
org.glite.jp.common/project/build.properties [deleted file]
org.glite.jp.common/project/configure.properties.xml [deleted file]
org.glite.jp.common/project/properties.xml [deleted file]
org.glite.jp.common/project/tar_exclude [deleted file]
org.glite.jp.common/project/version.properties [deleted file]
org.glite.jp.common/src/context.c [deleted file]
org.glite.jp.common/src/strmd5.c [deleted file]
org.glite.jp.index/.cvsignore [deleted file]
org.glite.jp.index/Makefile [deleted file]
org.glite.jp.index/build.xml [deleted file]
org.glite.jp.index/project/JobProvenanceIS.wsdl [deleted file]
org.glite.jp.index/project/build.properties [deleted file]
org.glite.jp.index/project/configure.properties.xml [deleted file]
org.glite.jp.index/project/properties.xml [deleted file]
org.glite.jp.index/project/tar_exclude [deleted file]
org.glite.jp.index/project/version.properties [deleted file]
org.glite.jp.index/src/simple_server.c [deleted file]
org.glite.jp.index/src/soap_ops.c [deleted file]
org.glite.jp.index/src/typemap.dat [deleted file]
org.glite.jp.primary/.cvsignore [deleted file]
org.glite.jp.primary/Makefile [deleted file]
org.glite.jp.primary/build.xml [deleted file]
org.glite.jp.primary/examples/jpps-test.c [deleted file]
org.glite.jp.primary/project/build.properties [deleted file]
org.glite.jp.primary/project/configure.properties.xml [deleted file]
org.glite.jp.primary/project/properties.xml [deleted file]
org.glite.jp.primary/project/tar_exclude [deleted file]
org.glite.jp.primary/project/version.properties [deleted file]
org.glite.jp.primary/src/backend.h [deleted file]
org.glite.jp.primary/src/feed.c [deleted file]
org.glite.jp.primary/src/feed.h [deleted file]
org.glite.jp.primary/src/ftp_backend.c [deleted file]
org.glite.jp.primary/src/is_client.c [deleted file]
org.glite.jp.primary/src/jptype_map.h [deleted file]
org.glite.jp.primary/src/simple_server.c [deleted file]
org.glite.jp.primary/src/soap_ops.c [deleted file]
org.glite.jp.primary/src/tags.c [deleted file]
org.glite.jp.primary/src/tags.h [deleted file]
org.glite.jp.primary/src/typemap.dat [deleted file]
org.glite.jp.ws-interface/.cvsignore [deleted file]
org.glite.jp.ws-interface/LICENSE [deleted file]
org.glite.jp.ws-interface/Makefile [deleted file]
org.glite.jp.ws-interface/build.xml [deleted file]
org.glite.jp.ws-interface/interface/JobProvenanceIS.wsdl [deleted file]
org.glite.jp.ws-interface/interface/JobProvenancePS.wsdl [deleted file]
org.glite.jp.ws-interface/interface/JobProvenanceTypes.wsdl [deleted file]
org.glite.jp.ws-interface/project/build.properties [deleted file]
org.glite.jp.ws-interface/project/configure.properties.xml [deleted file]
org.glite.jp.ws-interface/project/glite-jp-ws-interface.spec [deleted file]
org.glite.jp.ws-interface/project/properties.xml [deleted file]
org.glite.jp.ws-interface/project/tar_exclude [deleted file]
org.glite.jp.ws-interface/project/version.properties [deleted file]
org.glite.jp/.cvsignore [deleted file]
org.glite.jp/build.xml [deleted file]
org.glite.jp/project/build.properties [deleted file]
org.glite.jp/project/dependencies.properties [deleted file]
org.glite.jp/project/glite.jp.csf.xml [deleted file]
org.glite.jp/project/properties.xml [deleted file]
org.glite.jp/project/run-workspace [deleted file]
org.glite.jp/project/taskdefs.xml [deleted file]
org.glite.jp/project/version.properties [deleted file]
org.glite.lb.client-interface/.cvsignore [deleted file]
org.glite.lb.client-interface/LICENSE [deleted file]
org.glite.lb.client-interface/Makefile [deleted file]
org.glite.lb.client-interface/build.xml [deleted file]
org.glite.lb.client-interface/interface/CountRef.h [deleted file]
org.glite.lb.client-interface/interface/Event.h.T [deleted file]
org.glite.lb.client-interface/interface/Job.h [deleted file]
org.glite.lb.client-interface/interface/JobStatus.h.T [deleted file]
org.glite.lb.client-interface/interface/LoggingExceptions.h [deleted file]
org.glite.lb.client-interface/interface/Notification.h [deleted file]
org.glite.lb.client-interface/interface/ServerConnection.h [deleted file]
org.glite.lb.client-interface/interface/consumer.h [deleted file]
org.glite.lb.client-interface/interface/consumer_fake.h [deleted file]
org.glite.lb.client-interface/interface/context.h [deleted file]
org.glite.lb.client-interface/interface/dump.h [deleted file]
org.glite.lb.client-interface/interface/events.h.T [deleted file]
org.glite.lb.client-interface/interface/jobstat.h.T [deleted file]
org.glite.lb.client-interface/interface/load.h [deleted file]
org.glite.lb.client-interface/interface/notification.h [deleted file]
org.glite.lb.client-interface/interface/notifid.h [deleted file]
org.glite.lb.client-interface/interface/producer.h.T [deleted file]
org.glite.lb.client-interface/interface/producer_fake.h [deleted file]
org.glite.lb.client-interface/interface/purge.h [deleted file]
org.glite.lb.client-interface/interface/statistics.h [deleted file]
org.glite.lb.client-interface/project/build.properties [deleted file]
org.glite.lb.client-interface/project/configure.properties.xml [deleted file]
org.glite.lb.client-interface/project/properties.xml [deleted file]
org.glite.lb.client-interface/project/tar_exclude [deleted file]
org.glite.lb.client-interface/project/version.properties [deleted file]
org.glite.lb.client/.cvsignore [deleted file]
org.glite.lb.client/LICENSE [deleted file]
org.glite.lb.client/Makefile [deleted file]
org.glite.lb.client/build.xml [deleted file]
org.glite.lb.client/doc/README-fake [deleted file]
org.glite.lb.client/examples/aborted.l [deleted file]
org.glite.lb.client/examples/cancelled.l [deleted file]
org.glite.lb.client/examples/chkpt.l [deleted file]
org.glite.lb.client/examples/cleared.l [deleted file]
org.glite.lb.client/examples/consumer_fake.c [deleted file]
org.glite.lb.client/examples/done.l [deleted file]
org.glite.lb.client/examples/done_dag.l [deleted file]
org.glite.lb.client/examples/done_subjob.l [deleted file]
org.glite.lb.client/examples/failed_dag.l [deleted file]
org.glite.lb.client/examples/failed_subjob.l [deleted file]
org.glite.lb.client/examples/feed_shark.c [deleted file]
org.glite.lb.client/examples/gen_begin [deleted file]
org.glite.lb.client/examples/gen_sample_job [deleted file]
org.glite.lb.client/examples/job_log.c [deleted file]
org.glite.lb.client/examples/job_reg.c [deleted file]
org.glite.lb.client/examples/log_usertag_proxy.c [deleted file]
org.glite.lb.client/examples/notify.c [deleted file]
org.glite.lb.client/examples/producer_fake.c [deleted file]
org.glite.lb.client/examples/query_ext.c [deleted file]
org.glite.lb.client/examples/query_seq_code.c [deleted file]
org.glite.lb.client/examples/ready.l [deleted file]
org.glite.lb.client/examples/ready_dag.l [deleted file]
org.glite.lb.client/examples/ready_subjob.l [deleted file]
org.glite.lb.client/examples/running.l [deleted file]
org.glite.lb.client/examples/running_dag.l [deleted file]
org.glite.lb.client/examples/running_subjob.l [deleted file]
org.glite.lb.client/examples/scheduled.l [deleted file]
org.glite.lb.client/examples/scheduled_dag.l [deleted file]
org.glite.lb.client/examples/scheduled_subjob.l [deleted file]
org.glite.lb.client/examples/stats.c [deleted file]
org.glite.lb.client/examples/submitted.l [deleted file]
org.glite.lb.client/examples/submitted_dag.l [deleted file]
org.glite.lb.client/examples/submitted_subjob.l [deleted file]
org.glite.lb.client/examples/waiting.l [deleted file]
org.glite.lb.client/examples/waiting_dag.l [deleted file]
org.glite.lb.client/examples/waiting_subjob.l [deleted file]
org.glite.lb.client/project/build.properties [deleted file]
org.glite.lb.client/project/configure.properties.xml [deleted file]
org.glite.lb.client/project/properties.xml [deleted file]
org.glite.lb.client/project/tar_exclude [deleted file]
org.glite.lb.client/project/version.properties [deleted file]
org.glite.lb.client/src/Event.cpp.T [deleted file]
org.glite.lb.client/src/Job.cpp [deleted file]
org.glite.lb.client/src/JobStatus.cpp.T [deleted file]
org.glite.lb.client/src/Notification.cpp [deleted file]
org.glite.lb.client/src/ServerConnection.cpp [deleted file]
org.glite.lb.client/src/args.c.T [deleted file]
org.glite.lb.client/src/args.h [deleted file]
org.glite.lb.client/src/connection.c [deleted file]
org.glite.lb.client/src/connection.h [deleted file]
org.glite.lb.client/src/consumer.c [deleted file]
org.glite.lb.client/src/dump.c [deleted file]
org.glite.lb.client/src/load.c [deleted file]
org.glite.lb.client/src/logevent.c.T [deleted file]
org.glite.lb.client/src/notification.c [deleted file]
org.glite.lb.client/src/prod_proto.c [deleted file]
org.glite.lb.client/src/prod_proto.h [deleted file]
org.glite.lb.client/src/producer.c [deleted file]
org.glite.lb.client/src/purge.c [deleted file]
org.glite.lb.client/src/statistics.c [deleted file]
org.glite.lb.client/src/uiwrap.c.T [deleted file]
org.glite.lb.client/test/prod_proto_test.c [deleted file]
org.glite.lb.client/test/producer_test.cpp [deleted file]
org.glite.lb.common/.cvsignore [deleted file]
org.glite.lb.common/LICENSE [deleted file]
org.glite.lb.common/Makefile [deleted file]
org.glite.lb.common/build.xml [deleted file]
org.glite.lb.common/interface/authz.h [deleted file]
org.glite.lb.common/interface/context-int.h [deleted file]
org.glite.lb.common/interface/escape.h [deleted file]
org.glite.lb.common/interface/events_parse.h [deleted file]
org.glite.lb.common/interface/il_string.h [deleted file]
org.glite.lb.common/interface/lb_gss.h [deleted file]
org.glite.lb.common/interface/lb_plain_io.h [deleted file]
org.glite.lb.common/interface/log_proto.h [deleted file]
org.glite.lb.common/interface/mini_http.h [deleted file]
org.glite.lb.common/interface/trio.h [deleted file]
org.glite.lb.common/interface/ulm_parse.h [deleted file]
org.glite.lb.common/interface/xml_conversions.h [deleted file]
org.glite.lb.common/interface/xml_parse.h [deleted file]
org.glite.lb.common/project/build.properties [deleted file]
org.glite.lb.common/project/configure.properties.xml [deleted file]
org.glite.lb.common/project/properties.xml [deleted file]
org.glite.lb.common/project/tar_exclude [deleted file]
org.glite.lb.common/project/version.properties [deleted file]
org.glite.lb.common/src/context.c [deleted file]
org.glite.lb.common/src/escape.c [deleted file]
org.glite.lb.common/src/events.c.T [deleted file]
org.glite.lb.common/src/events_parse.c.T [deleted file]
org.glite.lb.common/src/il_int.c [deleted file]
org.glite.lb.common/src/il_log.c [deleted file]
org.glite.lb.common/src/il_msg.c [deleted file]
org.glite.lb.common/src/il_string.c [deleted file]
org.glite.lb.common/src/lb_gss.c [deleted file]
org.glite.lb.common/src/lb_plain_io.c [deleted file]
org.glite.lb.common/src/mini_http.c [deleted file]
org.glite.lb.common/src/notifid.c [deleted file]
org.glite.lb.common/src/param.c [deleted file]
org.glite.lb.common/src/query_rec.c [deleted file]
org.glite.lb.common/src/status.c.T [deleted file]
org.glite.lb.common/src/strio.c [deleted file]
org.glite.lb.common/src/strio.h [deleted file]
org.glite.lb.common/src/trio.c [deleted file]
org.glite.lb.common/src/triop.h [deleted file]
org.glite.lb.common/src/ulm_parse.c [deleted file]
org.glite.lb.common/src/xml_conversions.c [deleted file]
org.glite.lb.common/src/xml_parse.c.T [deleted file]
org.glite.lb.common/test/il_int_test.cpp [deleted file]
org.glite.lb.common/test/il_string_test.cpp [deleted file]
org.glite.lb.common/test/il_test.cpp [deleted file]
org.glite.lb.common/test/parse.cpp.T [deleted file]
org.glite.lb.common/test/test_gss.cpp [deleted file]
org.glite.lb.logger/.cvsignore [deleted file]
org.glite.lb.logger/LICENSE [deleted file]
org.glite.lb.logger/Makefile [deleted file]
org.glite.lb.logger/build.xml [deleted file]
org.glite.lb.logger/config/startup [deleted file]
org.glite.lb.logger/project/build.properties [deleted file]
org.glite.lb.logger/project/configure.properties.xml [deleted file]
org.glite.lb.logger/project/properties.xml [deleted file]
org.glite.lb.logger/project/tar_exclude [deleted file]
org.glite.lb.logger/project/version.properties [deleted file]
org.glite.lb.logger/src/event_queue.c [deleted file]
org.glite.lb.logger/src/event_store.c [deleted file]
org.glite.lb.logger/src/il_error.c [deleted file]
org.glite.lb.logger/src/il_error.h [deleted file]
org.glite.lb.logger/src/il_master.c [deleted file]
org.glite.lb.logger/src/input_queue_socket.c [deleted file]
org.glite.lb.logger/src/interlogd.c [deleted file]
org.glite.lb.logger/src/interlogd.h [deleted file]
org.glite.lb.logger/src/logd.c [deleted file]
org.glite.lb.logger/src/logd_proto.c [deleted file]
org.glite.lb.logger/src/logd_proto.h [deleted file]
org.glite.lb.logger/src/queue_mgr.c [deleted file]
org.glite.lb.logger/src/queue_thread.c [deleted file]
org.glite.lb.logger/src/recover.c [deleted file]
org.glite.lb.logger/src/send_event.c [deleted file]
org.glite.lb.logger/src/server_msg.c [deleted file]
org.glite.lb.logger/test/IlTestBase.cpp [deleted file]
org.glite.lb.logger/test/IlTestBase.h [deleted file]
org.glite.lb.logger/test/event_queueTest.cpp [deleted file]
org.glite.lb.logger/test/event_storeTest.cpp [deleted file]
org.glite.lb.logger/test/il_test.cpp [deleted file]
org.glite.lb.logger/test/input_queue_socketTest.cpp [deleted file]
org.glite.lb.logger/test/ll_test.cpp [deleted file]
org.glite.lb.logger/test/logd_proto_test.c [deleted file]
org.glite.lb.logger/test/server_msgTest.cpp [deleted file]
org.glite.lb.server-bones/.cvsignore [deleted file]
org.glite.lb.server-bones/Makefile [deleted file]
org.glite.lb.server-bones/build.xml [deleted file]
org.glite.lb.server-bones/examples/cnt_example.c [deleted file]
org.glite.lb.server-bones/examples/srv_example.c [deleted file]
org.glite.lb.server-bones/interface/srvbones.h [deleted file]
org.glite.lb.server-bones/project/build.properties [deleted file]
org.glite.lb.server-bones/project/configure.properties.xml [deleted file]
org.glite.lb.server-bones/project/properties.xml [deleted file]
org.glite.lb.server-bones/project/tar_exclude [deleted file]
org.glite.lb.server-bones/project/version.properties [deleted file]
org.glite.lb.server-bones/src/srvbones.c [deleted file]
org.glite.lb.ws-interface/.Makefile.swp [deleted file]
org.glite.lb.ws-interface/.cvsignore [deleted file]
org.glite.lb.ws-interface/LICENSE [deleted file]
org.glite.lb.ws-interface/Makefile [deleted file]
org.glite.lb.ws-interface/build.xml [deleted file]
org.glite.lb.ws-interface/interface/LB.wsdl [deleted file]
org.glite.lb.ws-interface/project/build.properties [deleted file]
org.glite.lb.ws-interface/project/configure.properties.xml [deleted file]
org.glite.lb.ws-interface/project/properties.xml [deleted file]
org.glite.lb.ws-interface/project/tar_exclude [deleted file]
org.glite.lb.ws-interface/project/version.properties [deleted file]
org.glite.lb/.cvsignore [deleted file]
org.glite.lb/LICENSE [deleted file]
org.glite.lb/build.xml [deleted file]
org.glite.lb/project/MultiStruct.pm [deleted file]
org.glite.lb/project/StructField.pm [deleted file]
org.glite.lb/project/at3 [deleted file]
org.glite.lb/project/build.properties [deleted file]
org.glite.lb/project/dependencies.properties [deleted file]
org.glite.lb/project/events.T [deleted file]
org.glite.lb/project/glite.lb.csf.xml [deleted file]
org.glite.lb/project/properties.xml [deleted file]
org.glite.lb/project/run-workspace [deleted file]
org.glite.lb/project/status.T [deleted file]
org.glite.lb/project/taskdefs.xml [deleted file]
org.glite.lb/project/types.T [deleted file]
org.glite.lb/project/version.properties [deleted file]
org.glite.security.proxyrenewal/.cvsignore [deleted file]
org.glite.security.proxyrenewal/LICENSE [deleted file]
org.glite.security.proxyrenewal/Makefile [deleted file]
org.glite.security.proxyrenewal/build.xml [deleted file]
org.glite.security.proxyrenewal/config/startup [deleted file]
org.glite.security.proxyrenewal/interface/renewal.h [deleted file]
org.glite.security.proxyrenewal/project/build.properties [deleted file]
org.glite.security.proxyrenewal/project/configure.properties.xml [deleted file]
org.glite.security.proxyrenewal/project/properties.xml [deleted file]
org.glite.security.proxyrenewal/project/tar_exclude [deleted file]
org.glite.security.proxyrenewal/project/taskdefs.xml [deleted file]
org.glite.security.proxyrenewal/project/version.properties [deleted file]
org.glite.security.proxyrenewal/src/api.c [deleted file]
org.glite.security.proxyrenewal/src/client.c [deleted file]
org.glite.security.proxyrenewal/src/commands.c [deleted file]
org.glite.security.proxyrenewal/src/common.c [deleted file]
org.glite.security.proxyrenewal/src/renew.c [deleted file]
org.glite.security.proxyrenewal/src/renewal_locl.h [deleted file]
org.glite.security.proxyrenewal/src/renewd.c [deleted file]
org.glite.security.proxyrenewal/src/renewd_locl.h [deleted file]
org.glite.wms-utils.exception/.cvsignore [deleted file]
org.glite.wms-utils.exception/LICENSE [deleted file]
org.glite.wms-utils.exception/Makefile.am [deleted file]
org.glite.wms-utils.exception/bootstrap [deleted file]
org.glite.wms-utils.exception/build.xml [deleted file]
org.glite.wms-utils.exception/configure.ac [deleted file]
org.glite.wms-utils.exception/interface/Makefile.am [deleted file]
org.glite.wms-utils.exception/interface/glite/wmsutils/exception/Exception.h [deleted file]
org.glite.wms-utils.exception/interface/glite/wmsutils/exception/exception_codes.h [deleted file]
org.glite.wms-utils.exception/project/build.properties [deleted file]
org.glite.wms-utils.exception/project/configure.properties.xml [deleted file]
org.glite.wms-utils.exception/project/properties.xml [deleted file]
org.glite.wms-utils.exception/project/version.properties [deleted file]
org.glite.wms-utils.exception/src/Exception.cpp [deleted file]
org.glite.wms-utils.exception/src/Makefile.am [deleted file]
org.glite.wms-utils.jobid/.cvsignore [deleted file]
org.glite.wms-utils.jobid/LICENSE [deleted file]
org.glite.wms-utils.jobid/Makefile.am [deleted file]
org.glite.wms-utils.jobid/bootstrap [deleted file]
org.glite.wms-utils.jobid/build.xml [deleted file]
org.glite.wms-utils.jobid/configure.ac [deleted file]
org.glite.wms-utils.jobid/examples/Makefile.am [deleted file]
org.glite.wms-utils.jobid/examples/testjobid.c [deleted file]
org.glite.wms-utils.jobid/interface/Makefile.am [deleted file]
org.glite.wms-utils.jobid/interface/glite/wmsutils/jobid/JobId.h [deleted file]
org.glite.wms-utils.jobid/interface/glite/wmsutils/jobid/JobIdExceptions.h [deleted file]
org.glite.wms-utils.jobid/interface/glite/wmsutils/jobid/cjobid.h [deleted file]
org.glite.wms-utils.jobid/interface/glite/wmsutils/jobid/manipulation.h [deleted file]
org.glite.wms-utils.jobid/project/build.properties [deleted file]
org.glite.wms-utils.jobid/project/configure.properties.xml [deleted file]
org.glite.wms-utils.jobid/project/properties.xml [deleted file]
org.glite.wms-utils.jobid/project/version.properties [deleted file]
org.glite.wms-utils.jobid/src/Makefile.am [deleted file]
org.glite.wms-utils.jobid/src/jobid/JobId.cpp [deleted file]
org.glite.wms-utils.jobid/src/jobid/JobIdExceptions.cpp [deleted file]
org.glite.wms-utils.jobid/src/jobid/Makefile.am [deleted file]
org.glite.wms-utils.jobid/src/jobid/cjobid.c [deleted file]
org.glite.wms-utils.jobid/src/jobid/manipulation.cpp [deleted file]
org.glite.wms-utils.jobid/src/jobid/strmd5.c [deleted file]
org.glite.wms-utils.jobid/src/jobid/strmd5.h [deleted file]
org.gridsite.core/.cvsignore [deleted file]
org.gridsite.core/CHANGES [deleted file]
org.gridsite.core/INSTALL [deleted file]
org.gridsite.core/LICENSE [deleted file]
org.gridsite.core/README [deleted file]
org.gridsite.core/VERSION [deleted file]
org.gridsite.core/build.xml [deleted file]
org.gridsite.core/doc/README.htcp-bin [deleted file]
org.gridsite.core/doc/admin.html [deleted file]
org.gridsite.core/doc/build-apache2.sh [deleted file]
org.gridsite.core/doc/config.html [deleted file]
org.gridsite.core/doc/findproxyfile.1 [deleted file]
org.gridsite.core/doc/gacl.html [deleted file]
org.gridsite.core/doc/htcp.1 [deleted file]
org.gridsite.core/doc/htll.1 [deleted file]
org.gridsite.core/doc/htls.1 [deleted file]
org.gridsite.core/doc/htmkdir.1 [deleted file]
org.gridsite.core/doc/htrm.1 [deleted file]
org.gridsite.core/doc/httpd-fileserver.conf [deleted file]
org.gridsite.core/doc/httpd-webserver.conf [deleted file]
org.gridsite.core/doc/index.html [deleted file]
org.gridsite.core/doc/install.html [deleted file]
org.gridsite.core/doc/library.html [deleted file]
org.gridsite.core/doc/module.html [deleted file]
org.gridsite.core/doc/urlencode.1 [deleted file]
org.gridsite.core/doc/user.html [deleted file]
org.gridsite.core/interface/gridsite-gacl.h [deleted file]
org.gridsite.core/interface/gridsite.h [deleted file]
org.gridsite.core/project/build.properties [deleted file]
org.gridsite.core/project/configure.properties.xml [deleted file]
org.gridsite.core/project/dependencies.properties [deleted file]
org.gridsite.core/project/gridsite.core.csf.xml [deleted file]
org.gridsite.core/project/properties.xml [deleted file]
org.gridsite.core/project/taskdefs.xml [deleted file]
org.gridsite.core/project/version.properties [deleted file]
org.gridsite.core/src/Doxyfile [deleted file]
org.gridsite.core/src/Makefile [deleted file]
org.gridsite.core/src/delegation.h [deleted file]
org.gridsite.core/src/doxygen.css [deleted file]
org.gridsite.core/src/doxyheader.html [deleted file]
org.gridsite.core/src/findproxyfile.c [deleted file]
org.gridsite.core/src/gaclexample.c [deleted file]
org.gridsite.core/src/gridsite.spec [deleted file]
org.gridsite.core/src/grst-delegation.c [deleted file]
org.gridsite.core/src/grst_admin.h [deleted file]
org.gridsite.core/src/grst_admin_file.c [deleted file]
org.gridsite.core/src/grst_admin_gacl.c [deleted file]
org.gridsite.core/src/grst_admin_main.c [deleted file]
org.gridsite.core/src/grst_gacl.c [deleted file]
org.gridsite.core/src/grst_http.c [deleted file]
org.gridsite.core/src/grst_x509.c [deleted file]
org.gridsite.core/src/htcp [deleted file]
org.gridsite.core/src/htcp.c [deleted file]
org.gridsite.core/src/htproxyput.c [deleted file]
org.gridsite.core/src/mod_gridsite.c [deleted file]
org.gridsite.core/src/mod_ssl-private.h [deleted file]
org.gridsite.core/src/proxyput-example.c [deleted file]
org.gridsite.core/src/real-gridsite-admin.cgi [deleted file]
org.gridsite.core/src/roffit [deleted file]
org.gridsite.core/src/urlencode.c [deleted file]

diff --git a/org.glite.deployment.lb/.cvsignore b/org.glite.deployment.lb/.cvsignore
deleted file mode 100644 (file)
index 3a4edf6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.project
diff --git a/org.glite.deployment.lb/build.xml b/org.glite.deployment.lb/build.xml
deleted file mode 100644 (file)
index 0ceaee9..0000000
+++ /dev/null
@@ -1,104 +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 LB Server Deployment Unit
-       
-    Authors: Alberto Di Meglio <alberto.di.meglio@cern.ch>     
-
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.4  2004/10/14 16:07:53  dimeglio
-       Removed wms.thirdparty-globus-ssl-utils
-       
-       Revision 1.3  2004/10/14 11:50:22  dimeglio
-       Fixed some name and formatting issues
-       
-       Revision 1.2  2004/10/06 11:42:02  harakaly
-       first fill-up
-       
-       Revision 1.1  2004/10/06 09:19:24  dimeglio
-       First version of this file
-       
--->
-
-<project name="deployment-lb" default="dist">
-
-       <!-- =========================================
-                Builds the gLite LB Server Deployment Unit
-                ========================================= -->
-
-       <!-- =========================================
-            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}"/>
-
-
-       <!-- =========================================
-                Import task definitions (order is important)
-                ========================================= -->
-       <import file="${subsystem.taskdefs.file}" />
-       <import file="${global.taskdefs.file}" />
-
-       <!-- =========================================
-                Load configure options
-                ========================================= -->
-       <property file="${global.configure.options.file}"/>
-
-       <!-- =========================================
-                Load common targets
-                ========================================= -->
-       <import file="${global.targets-external-dependencies.file}"/>
-       <import file="${global.targets-deploy.file}" />
-
-       <!-- =========================================
-                Load version file 
-                ========================================= -->
-       <property file="${module.version.file}"/>
-
-       <!-- ==============================================
-                Local private targets
-                ============================================== -->
-
-       <target name="localinit"
-               description="Module specific initialization tasks">
-       </target>
-
-       <target name="localcompile"
-               description="Module specific compilation tasks">
-       </target>
-
-       <target name="localclean"
-               description="Module specific cleaning tasks">
-       </target>
-
-</project>
diff --git a/org.glite.deployment.lb/config/scripts/glite-lb-config.py b/org.glite.deployment.lb/config/scripts/glite-lb-config.py
deleted file mode 100644 (file)
index d6f2af6..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-#!/usr/bin/env python
-################################################################################
-#
-# 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
-#
-################################################################################
-# glite-lb-config v. 0.2.0
-#
-# Post-installation script for configuring the gLite Logging and Bookkeping Server
-# Robert Harakaly < robert.harakaly@cern.ch >
-# Diana Bosio <Diana.Bosio@cern.ch>
-# Leanne Guy <leanne.guy@cern.ch>
-#
-# Version info: $Id$
-#
-# Usage: python glite-lb-config [-c|-v|-h|--help]
-#        -c          print configuration
-#        -v          print version
-#        -h,--help   print usage info
-#
-# Return codes: 0 - Ok
-#               1 - Configuration failed
-#
-################################################################################
-
-import os,string
-import sys, posix, getopt,time
-
-sys.path.append(".")
-from gLiteInstallerLib import gLib 
-import mysql as MySQL
-
-# Set global variables here 
-global params                         # all config values from the XML file
-
-class glite_lb:
-
-    def __init__(self):
-        self.mysql = MySQL.Mysql()
-        self.verbose = 0
-        self.version = "0.2.0"
-        self.name = "glite-lb"
-        self.friendly_name = "gLite Logging and Bookkeeping"
-        
-    #-------------------------------------------------------------------------------
-    # Banner 
-    #-------------------------------------------------------------------------------
-
-    def banner(self):
-
-        print "\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
-        print "Configuring the %s" % self.friendly_name
-        print "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n"
-    
-    #-------------------------------------------------------------------------------
-    # Copyright 
-    #-------------------------------------------------------------------------------
-
-    def copyright(self):
-
-        print '\nCopyright (c) Members of the EGEE Collaboration. 2004'
-        print 'See http://eu-egee.org/partners/ for details on the copyright holders'
-        print 'For license conditions see the license file or http://eu-egee.org/license.html'
-
-    #-------------------------------------------------------------------------------
-    # Version
-    #-------------------------------------------------------------------------------
-
-    def showVersion(self):
-
-        print '\n%s-config  v. %s\n' % (self.name,self.version)
-    
-    #-------------------------------------------------------------------------------
-    # Usage
-    #-------------------------------------------------------------------------------
-
-    def usage(self,msg = ""):
-
-        if msg:
-            print "\n%s" % (msg)
-        
-        self.copyright()
-        self.showVersion()
-    
-        print """Usage: \n
-Edit the configuration file %s.cfg.xml in
-%s/etc.config/templates\n
-save it as %s/etc/config/%s.cfg.xml
-and run the script as follows\n 
-python %s-config [OPTION...]""" % (self.name, os.environ['GLITE_LOCATION'], \
-        os.environ['GLITE_LOCATION'], self.name, self.name)
-
-        print '    -c, --checkconf     print the service configuration'
-        print '    -v, --version       print the version of the configuration script'
-        print '    -h, --help          print this usage information'
-        print '\n'
-
-    #-------------------------------------------------------------------------------
-    # All the configuration code goes here
-    #-------------------------------------------------------------------------------
-
-    def start(self):
-        self.mysql.start()
-        os.system('%s/etc/init.d/glite-lb-bkserverd start' % os.environ['GLITE_LOCATION'])
-        
-        return 0
-        
-    def stop(self):
-        os.system('%s/etc/init.d/glite-lb-bkserverd stop' % os.environ['GLITE_LOCATION'])
-        self.mysql.stop()
-        
-        return 0
-        
-    def configure(self):
-        # Create all directories needed
-        if params.has_key('dirlist'):
-           dirlist = string.split(params['dirlist'],',')
-           for d in dirlist:
-              glib.check_dir(d,0777)
-        glib.check_dir(params['GLITE_CERT_DIR'])
-         
-        # Create the GLITE_USER if it doesn't exists
-        print "Creating/Verifying the GLITE_USER account %s" % params['GLITE_USER']
-        glib.add_user(params['GLITE_USER'],params['GLITE_USER'])
-        (uid,gid) = glib.get_user_info(params['GLITE_USER'])
-        glib.check_dir(os.environ['GLITE_LOCATION_VAR'],0755, uid, gid)
-        glib.check_dir("/home/%s/.certs" % params['GLITE_USER'],0755, uid, gid)
-        lb_cert_path = pwd.getpwnam(params['GLITE_USER'])[5] + "/" + params['user.certificate.path']
-
-        # Copy certificates
-        glib.check_dir( lb_cert_path, 0755, uid, gid)
-        os.system("cp %s %s %s/" % (params['host.certificate.file'], params['host.key.file'], lb_cert_path))
-        os.chown("%s/hostcert.pem" % lb_cert_path, uid,gid)
-        os.chown("%s/hostkey.pem" % lb_cert_path, uid,gid)
-        glib.export('GLITE_HOST_CERT',"%s/hostcert.pem" % lb_cert_path)
-        glib.export('GLITE_HOST_KEY',"%s/hostkey.pem" % lb_cert_path)
-                
-        # Create the MySQL database
-        self.mysql.stop()
-        time.sleep(5)
-        self.mysql.start()
-        
-        print '#-------------------------------------------------------------------'
-        print ('Creating MySQL %s database.' % params['lb.database.name'])
-        print '#-------------------------------------------------------------------'
-        
-        os.system('/usr/bin/mysqlaccess %s %s' % (params['lb.database.username'], params['lb.database.name']))
-        file = open('/tmp/mysql_ct', 'w')
-        text = ['CREATE DATABASE %s;\n' % params['lb.database.name'], 
-                   'GRANT ALL PRIVILEGES ON %s.* TO %s@localhost IDENTIFIED BY "";\n' % (params['lb.database.name'],params['lb.database.username']),
-                   'USE %s;\n' % params['lb.database.name'],
-                   '\. %s/etc/glite-lb-dbsetup.sql\n' % os.environ['GLITE_LOCATION']]
-
-        file.writelines(text)
-        file.close()
-        os.system('/usr/bin/mysql < /tmp/mysql_ct')
-        os.system('/bin/rm /tmp/mysql_ct')
-        if not os.path.exists('/tmp/mysql.sock'):
-            os.symlink('/var/lib/mysql/mysql.sock', '/tmp/mysql.sock')
-        self.mysql.stop()
-         
-        return 0
-        
-#-------------------------------------------------------------------------------
-# Set all environment variables
-#-------------------------------------------------------------------------------
-
-def set_env():
-
-    # gLite
-    glib.export('GLITE_LOCATION');
-    glib.export('GLITE_LOCATION_VAR');
-    if not os.path.exists(os.environ['GLITE_LOCATION_VAR']):
-        os.mkdir(os.environ['GLITE_LOCATION_VAR'],0755)
-    glib.export('GLITE_LOCATION_LOG');
-    if not os.path.exists(os.environ['GLITE_LOCATION_LOG']):
-        os.mkdir(os.environ['GLITE_LOCATION_LOG'],0755)
-    glib.export('GLITE_LOCATION_TMP');
-    if not os.path.exists(os.environ['GLITE_LOCATION_TMP']):
-        os.mkdir(os.environ['GLITE_LOCATION_TMP'],0755)
-
-    (uid,gid) = glib.add_user(params['GLITE_USER'])
-    lb_cert_path = pwd.getpwnam(params['GLITE_USER'])[5] + "/" + params['user.certificate.path']
-    glib.export('GLITE_HOST_CERT',"%s/hostcert.pem" % lb_cert_path)
-    glib.export('GLITE_HOST_KEY',"%s/hostkey.pem" % lb_cert_path)
-    glib.export('GLOBUS_LOCATION',params['GLOBUS_LOCATION'])
-    glib.export('GLITE_CERT_DIR',params['ca.certificates.dir'])
-
-    # bin and lib paths
-    glib.addEnvPath("PATH","/usr/bin/:%s/bin:%s/externals/bin:%s/bin" % (os.environ['GLOBUS_LOCATION'],os.environ['GLITE_LOCATION'],os.environ['GLITE_LOCATION']))
-    glib.addEnvPath("LD_LIBRARY_PATH","/usr/lib:%s/lib:%s/externals/lib:%s/lib" % (os.environ['GLOBUS_LOCATION'], os.environ['GLITE_LOCATION'],os.environ['GLITE_LOCATION']))
-
-    # Set environment
-    glib.setUserEnv()
-    
-#-------------------------------------------------------------------------------
-#  Main program begins here 
-#-------------------------------------------------------------------------------
-
-if __name__ == '__main__':
-
-    # Command line opts if any
-    try:
-        opts, args = getopt.getopt(sys.argv[1:], 'chv', ['checkconf', 'help', 'version','stop','start'])
-    except getopt.GetoptError:
-        usage(msg = "Unknown options(s)")
-        sys.exit(1)
-
-    # The script must be run as root
-    if not os.geteuid()==0:
-        print '"\nThis script must be run as root\n'
-        sys.exit(1)
-        
-    # Get an instance of the library class
-    glib = gLib()
-    
-    # Load parameters
-    params = {}
-    if glib.loadConfiguration("%s/../glite-lb.cfg.xml" % glib.getScriptPath(),params):
-        print "Configuration files not found.\nPlease verify if the configuration files are copied from the templates directory\n"
-        sys.exit(1)
-    
-    verbose = 0
-    if params.has_key('glite.installer.verbose'):
-        if params['glite.installer.verbose'] == "true":
-            verbose = 1
-    glib.verbose = verbose
-    
-    # Set up the environment
-    set_env()
-          
-    # Instantiate the service classes
-    service = glite_lb()
-    service.verbose = verbose
-    
-    # Check cli options
-    for o, a in opts:
-        if o in ("-h", "--help"):
-            service.usage()
-            sys.exit(0)
-        if o in ("-v", "--version"):
-            service.showVersion()
-            sys.exit(0)
-        if o in ("-c", "--checkconf"):
-            service.copyright()
-            service.showVersion()
-            glib.print_params(params)
-            sys.exit(0)
-        if o == "--stop":
-            service.stop()
-            sys.exit(0)
-        if o == "--start":
-            service.start()
-            sys.exit(0)
-
-    # Check certificates
-    if params.has_key('glite.installer.checkcerts'):
-        if params['glite.installer.checkcerts'] == "true":
-            if glib.check_certs(params) != 0:
-                print "Certificate files are not found\n" 
-                sys.exit(1)
-    
-    # Print configuration parameters
-    if verbose:
-        glib.print_params(params)
-
-    service.copyright()
-    service.showVersion()
-    service.banner()
-        
-    # Configure the service
-    if service.configure() == 0:
-        print "%s configuration successfully completed\n" % service.friendly_name
-    else:
-        print "An error occurred while configuring the %s" % service.friendly_name
-        sys.exit(1)
-        
-    # Start the service
-    # service.stop()
-    if service.start() != 0:
-        print "An error occurred while starting the %s" % service.friendly_name
-        sys.exit(1)
-
diff --git a/org.glite.deployment.lb/config/scripts/remove_all_rpms.sh b/org.glite.deployment.lb/config/scripts/remove_all_rpms.sh
deleted file mode 100755 (executable)
index 2835ee1..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-
-#!/bin/sh
-
-rpm -e edg-fetch-crl-1.0.0-EGEE \
-ca_ArmeSFo-0.23-1 \
-ca_ASGCCA-0.23-1 \
-ca_BEGrid-0.23-1 \
-ca_CERN-0.23-1 \
-ca_CESNET-0.23-1 \
-ca_CNRS-0.23-1 \
-ca_CNRS-DataGrid-0.23-1 \
-ca_CNRS-Projets-0.23-1 \
-ca_CyGrid-0.23-1 \
-ca_DOEGrids-0.23-1 \
-ca_DOESG-Root-0.23-1 \
-ca_ESnet-0.23-1 \
-ca_FNAL-0.23-1 \
-ca_FNAL_KCA-0.23-1 \
-ca_GermanGrid-0.23-1 \
-ca_Grid-Ireland-0.23-1 \
-ca_GridCanada-0.23-1 \
-ca_HellasGrid-0.23-1 \
-ca_INFN-0.23-1 \
-ca_IUCC-0.23-1 \
-ca_LIP-0.23-1 \
-ca_NIKHEF-0.23-1 \
-ca_NorduGrid-0.23-1 \
-ca_PK-Grid-0.23-1 \
-ca_PolishGrid-0.23-1 \
-ca_Russia-0.23-1 \
-ca_SlovakGrid-0.23-1 \
-ca_Spain-0.23-1 \
-ca_UKeScience-0.23-1 \
-glite-wms-utils-exception-0.1.0-0 \
-glite-wms-utils-jobid-0.1.0-0 \
-glite-lb-client-interface-0.2.0-0 \
-glite-lb-server-bones-0.0.0-0 \
-glite-lb-common-0.2.0-0 \
-glite-lb-logger-0.2.0-0 \
-glite-lb-server-0.3.0-0 \
-glite-security-proxyrenewal-0.1.0-1 \
-ares-1.1.1-EGEE \
-gpt-VDT1.2.0rh9-1 \
-vdt_globus_essentials-VDT1.2.0rh9-1 \
-perl-Expect.pm-1.01-9 \
-myproxy-1.14-EGEE \
-MySQL-client-4.0.20-0 \
-MySQL-server-4.0.20-0
-
diff --git a/org.glite.deployment.lb/config/templates/glite-lb.cfg.xml b/org.glite.deployment.lb/config/templates/glite-lb.cfg.xml
deleted file mode 100644 (file)
index 44a7dad..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<!--  Parameters for  configuring the org.glite.data.io-daemon service -->
-<config>
-       <parameters>
-
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-               <!-- User-defined parameters - Please change them -->
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-
-               <!-- gLite configuration -->
-               <glite.installer.verbose
-                       description="Enable verbose output"
-                       value="true"/>
-                       
-               <glite.installer.checkcerts
-                       description="Enable check of host certificates"
-                       value="true"/>
-
-               <GLITE_USER
-                       description="The account used to run the LB daemons"
-                       value="changeme"/>
-                       
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-               <!-- Optimization parameters - Change them if you know what you're doing -->
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-
-               <!-- MySQL DB -->
-               <lb.database.name
-                       description="The mySQL database name to create for storing LB data
-                                               Now it must be set to the default value"
-                       value="lbserver20"/>
-                       
-               <lb.database.username
-                       description="The username to be used to access the local mySQL server
-                                               Now it must be set to the default value"
-                       value="lbserver"/>
-                       
-               <GLOBUS_LOCATION
-                       description="The location of the Globus Toolkit"
-                       value="/opt/globus"/>
-                                               
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-               <!-- System parameters - You should leave these alone -->
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->               
-               <dirlist value='/opt/glite/var'/>
-       </parameters>
-</config>
\ No newline at end of file
diff --git a/org.glite.deployment.lb/doc/release_notes/release_notes.doc b/org.glite.deployment.lb/doc/release_notes/release_notes.doc
deleted file mode 100644 (file)
index 5fc59f7..0000000
Binary files a/org.glite.deployment.lb/doc/release_notes/release_notes.doc and /dev/null differ
diff --git a/org.glite.deployment.lb/doc/release_notes/release_notes.html b/org.glite.deployment.lb/doc/release_notes/release_notes.html
deleted file mode 100644 (file)
index 1db7585..0000000
+++ /dev/null
@@ -1,1720 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=Generator content="Microsoft Word 11 (filtered)">
-<title>gLite LB Server Release Notes</title>
-<style>
-<!--
- /* Font Definitions */
- @font-face
-       {font-family:Helvetica;
-       panose-1:2 11 6 4 2 2 2 2 2 4;}
-@font-face
-       {font-family:Wingdings;
-       panose-1:5 0 0 0 0 0 0 0 0 0;}
-@font-face
-       {font-family:Tahoma;
-       panose-1:2 11 6 4 3 5 4 4 2 4;}
-@font-face
-       {font-family:Times;
-       panose-1:2 2 6 3 5 4 5 2 3 4;}
-@font-face
-       {font-family:"Univers \(W1\)";
-       panose-1:0 0 0 0 0 0 0 0 0 0;}
- /* Style Definitions */
- p.MsoNormal, li.MsoNormal, div.MsoNormal
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-h1
-       {margin-top:12.0pt;
-       margin-right:0mm;
-       margin-bottom:3.0pt;
-       margin-left:21.6pt;
-       text-align:justify;
-       text-indent:-21.6pt;
-       font-size:12.0pt;
-       font-family:Arial;
-       text-transform:uppercase;
-       layout-grid-mode:line;
-       font-weight:bold;}
-h2
-       {margin-top:12.0pt;
-       margin-right:0mm;
-       margin-bottom:3.0pt;
-       margin-left:28.8pt;
-       text-align:justify;
-       text-indent:-28.8pt;
-       font-size:11.0pt;
-       font-family:Arial;
-       text-transform:uppercase;
-       font-weight:bold;}
-h3
-       {margin-top:10.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:36.0pt;
-       text-align:justify;
-       text-indent:-36.0pt;
-       font-size:11.0pt;
-       font-family:Arial;
-       font-weight:bold;}
-h4
-       {margin-top:10.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:43.2pt;
-       text-align:justify;
-       text-indent:-43.2pt;
-       page-break-after:avoid;
-       font-size:11.0pt;
-       font-family:Arial;
-       font-weight:bold;
-       font-style:italic;}
-h5
-       {margin-top:12.0pt;
-       margin-right:0mm;
-       margin-bottom:3.0pt;
-       margin-left:50.4pt;
-       text-align:justify;
-       text-indent:-50.4pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";
-       font-weight:normal;}
-h6
-       {margin-top:12.0pt;
-       margin-right:0mm;
-       margin-bottom:3.0pt;
-       margin-left:57.6pt;
-       text-align:justify;
-       text-indent:-57.6pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";
-       font-weight:normal;
-       font-style:italic;}
-p.MsoHeading7, li.MsoHeading7, div.MsoHeading7
-       {margin-top:12.0pt;
-       margin-right:0mm;
-       margin-bottom:3.0pt;
-       margin-left:64.8pt;
-       text-align:justify;
-       text-indent:-64.8pt;
-       font-size:11.0pt;
-       font-family:Arial;}
-p.MsoHeading8, li.MsoHeading8, div.MsoHeading8
-       {margin-top:12.0pt;
-       margin-right:0mm;
-       margin-bottom:3.0pt;
-       margin-left:72.0pt;
-       text-align:justify;
-       text-indent:-72.0pt;
-       font-size:11.0pt;
-       font-family:Arial;
-       font-style:italic;}
-p.MsoHeading9, li.MsoHeading9, div.MsoHeading9
-       {margin-top:12.0pt;
-       margin-right:0mm;
-       margin-bottom:3.0pt;
-       margin-left:79.2pt;
-       text-align:justify;
-       text-indent:-79.2pt;
-       font-size:9.0pt;
-       font-family:Arial;
-       font-weight:bold;
-       font-style:italic;}
-p.MsoIndex1, li.MsoIndex1, div.MsoIndex1
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:12.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:12.0pt;
-       font-family:"Times New Roman";}
-p.MsoToc1, li.MsoToc1, div.MsoToc1
-       {margin-top:6.0pt;
-       margin-right:0mm;
-       margin-bottom:6.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:10.0pt;
-       font-family:"Times New Roman";
-       text-transform:uppercase;
-       font-weight:bold;}
-p.MsoToc2, li.MsoToc2, div.MsoToc2
-       {margin-top:0mm;
-       margin-right:0mm;
-       margin-bottom:0mm;
-       margin-left:11.0pt;
-       margin-bottom:.0001pt;
-       text-align:justify;
-       font-size:10.0pt;
-       font-family:"Times New Roman";
-       font-variant:small-caps;}
-p.MsoToc3, li.MsoToc3, div.MsoToc3
-       {margin-top:0mm;
-       margin-right:0mm;
-       margin-bottom:0mm;
-       margin-left:22.0pt;
-       margin-bottom:.0001pt;
-       text-align:justify;
-       font-size:10.0pt;
-       font-family:"Times New Roman";
-       font-style:italic;}
-p.MsoToc4, li.MsoToc4, div.MsoToc4
-       {margin-top:0mm;
-       margin-right:0mm;
-       margin-bottom:0mm;
-       margin-left:33.0pt;
-       margin-bottom:.0001pt;
-       text-align:justify;
-       font-size:9.0pt;
-       font-family:"Times New Roman";}
-p.MsoToc5, li.MsoToc5, div.MsoToc5
-       {margin-top:0mm;
-       margin-right:0mm;
-       margin-bottom:0mm;
-       margin-left:44.0pt;
-       margin-bottom:.0001pt;
-       text-align:justify;
-       font-size:9.0pt;
-       font-family:"Times New Roman";}
-p.MsoToc6, li.MsoToc6, div.MsoToc6
-       {margin-top:0mm;
-       margin-right:0mm;
-       margin-bottom:0mm;
-       margin-left:55.0pt;
-       margin-bottom:.0001pt;
-       text-align:justify;
-       font-size:9.0pt;
-       font-family:"Times New Roman";}
-p.MsoToc7, li.MsoToc7, div.MsoToc7
-       {margin-top:0mm;
-       margin-right:0mm;
-       margin-bottom:0mm;
-       margin-left:66.0pt;
-       margin-bottom:.0001pt;
-       text-align:justify;
-       font-size:9.0pt;
-       font-family:"Times New Roman";}
-p.MsoToc8, li.MsoToc8, div.MsoToc8
-       {margin-top:0mm;
-       margin-right:0mm;
-       margin-bottom:0mm;
-       margin-left:77.0pt;
-       margin-bottom:.0001pt;
-       text-align:justify;
-       font-size:9.0pt;
-       font-family:"Times New Roman";}
-p.MsoToc9, li.MsoToc9, div.MsoToc9
-       {margin-top:0mm;
-       margin-right:0mm;
-       margin-bottom:0mm;
-       margin-left:88.0pt;
-       margin-bottom:.0001pt;
-       text-align:justify;
-       font-size:9.0pt;
-       font-family:"Times New Roman";}
-p.MsoNormalIndent, li.MsoNormalIndent, div.MsoNormalIndent
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:12.0pt;
-       margin-left:35.4pt;
-       text-align:justify;
-       text-indent:-7.0pt;
-       font-size:12.0pt;
-       font-family:Times;}
-p.MsoFootnoteText, li.MsoFootnoteText, div.MsoFootnoteText
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoCommentText, li.MsoCommentText, div.MsoCommentText
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:6.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:8.0pt;
-       font-family:"Times New Roman";}
-p.MsoHeader, li.MsoHeader, div.MsoHeader
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoFooter, li.MsoFooter, div.MsoFooter
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoCaption, li.MsoCaption, div.MsoCaption
-       {margin-top:6.0pt;
-       margin-right:0mm;
-       margin-bottom:6.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:11.0pt;
-       font-family:"Times New Roman";
-       font-weight:bold;}
-span.MsoFootnoteReference
-       {vertical-align:super;}
-p.MsoBodyText, li.MsoBodyText, div.MsoBodyText
-       {margin-top:3.0pt;
-       margin-right:0mm;
-       margin-bottom:3.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoBodyText3, li.MsoBodyText3, div.MsoBodyText3
-       {margin-top:2.5pt;
-       margin-right:0mm;
-       margin-bottom:2.5pt;
-       margin-left:0mm;
-       text-align:justify;
-       page-break-after:avoid;
-       font-size:10.0pt;
-       font-family:Arial;}
-p.MsoBlockText, li.MsoBlockText, div.MsoBlockText
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       text-indent:17.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-a:link, span.MsoHyperlink
-       {color:blue;
-       text-decoration:underline;}
-a:visited, span.MsoHyperlinkFollowed
-       {color:purple;
-       text-decoration:underline;}
-p.MsoDocumentMap, li.MsoDocumentMap, div.MsoDocumentMap
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       background:navy;
-       font-size:11.0pt;
-       font-family:Tahoma;}
-p
-       {margin-top:5.0pt;
-       margin-right:0mm;
-       margin-bottom:5.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:12.0pt;
-       font-family:"Times New Roman";}
-tt
-       {font-family:"Courier New";}
-p.3eretraitnormal, li.3eretraitnormal, div.3eretraitnormal
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:3.0pt;
-       margin-left:102.9pt;
-       text-align:justify;
-       text-indent:-17.85pt;
-       font-size:12.0pt;
-       font-family:"Times New Roman";}
-p.2eretraitjustifi, li.2eretraitjustifi, div.2eretraitjustifi
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:3.0pt;
-       margin-left:40.0mm;
-       text-align:justify;
-       text-indent:-7.1pt;
-       line-height:12.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.2eretraitnormal, li.2eretraitnormal, div.2eretraitnormal
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:3.0pt;
-       margin-left:18.0pt;
-       text-align:justify;
-       text-indent:-18.0pt;
-       font-size:12.0pt;
-       font-family:"Times New Roman";}
-p.1erretraitnormal, li.1erretraitnormal, div.1erretraitnormal
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:12.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:12.0pt;
-       font-family:"Times New Roman";}
-p.titrebloc, li.titrebloc, div.titrebloc
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:11.0pt;
-       font-family:Arial;
-       font-weight:bold;}
-p.TitreTable, li.TitreTable, div.TitreTable
-       {margin-top:6.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:0mm;
-       text-align:center;
-       font-size:12.0pt;
-       font-family:Arial;
-       font-weight:bold;}
-p.form, li.form, div.form
-       {margin-top:6.0pt;
-       margin-right:7.05pt;
-       margin-bottom:0mm;
-       margin-left:0mm;
-       margin-bottom:.0001pt;
-       text-align:justify;
-       background:black;
-       border:none;
-       padding:0mm;
-       font-size:14.0pt;
-       font-family:"Univers \(W1\)";
-       color:white;
-       text-transform:uppercase;
-       font-weight:bold;}
-p.HB, li.HB, div.HB
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:12.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       page-break-after:avoid;
-       font-size:12.0pt;
-       font-family:"Times New Roman";
-       color:black;
-       font-weight:bold;}
-p.reference, li.reference, div.reference
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       page-break-after:avoid;
-       font-size:9.0pt;
-       font-family:Arial;}
-p.1erretraitjustifi, li.1erretraitjustifi, div.1erretraitjustifi
-       {margin-top:6.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:14.2pt;
-       text-align:justify;
-       text-indent:-14.2pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.ZonetatEnTte, li.ZonetatEnTte, div.ZonetatEnTte
-       {margin-top:2.0pt;
-       margin-right:2.85pt;
-       margin-bottom:2.0pt;
-       margin-left:2.85pt;
-       text-align:center;
-       page-break-after:avoid;
-       font-size:36.0pt;
-       font-family:Arial;
-       text-transform:uppercase;
-       font-weight:bold;}
-p.DocTitle, li.DocTitle, div.DocTitle
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:0mm;
-       text-align:center;
-       font-size:22.0pt;
-       font-family:Arial;
-       font-variant:small-caps;
-       color:gray;
-       letter-spacing:4.0pt;
-       font-weight:bold;}
-p.DocDate, li.DocDate, div.DocDate
-       {margin-top:6.0pt;
-       margin-right:0mm;
-       margin-bottom:6.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:11.0pt;
-       font-family:Arial;
-       layout-grid-mode:line;
-       font-weight:bold;}
-p.DocSubTitle, li.DocSubTitle, div.DocSubTitle
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:0mm;
-       text-align:center;
-       line-height:12.0pt;
-       font-size:12.0pt;
-       font-family:Arial;
-       font-variant:small-caps;
-       color:gray;
-       letter-spacing:4.0pt;
-       font-weight:bold;}
- /* Page Definitions */
- @page Section1
-       {size:595.3pt 841.9pt;
-       margin:70.85pt 70.85pt 70.85pt 70.85pt;}
-div.Section1
-       {page:Section1;}
- /* List Definitions */
- ol
-       {margin-bottom:0mm;}
-ul
-       {margin-bottom:0mm;}
--->
-</style>
-
-</head>
-
-<body lang=EN-GB link=blue vlink=purple>
-
-<div class=Section1>
-
-<p class=DocTitle><span lang=FR style='font-variant:normal !important;
-text-transform:uppercase'>gLite Logging &amp; Bookkeeping Server</span></p>
-
-<h1><span lang=FR>1. </span><span lang=FR>Release Description</span></h1>
-
-<p class=MsoNormal>This release contains the gLite Logging &amp; Bookkeeping
-Server module v. 0.2.0. The following sections provide additional information about
-the release content, the module dependencies, the know bugs and issues and a
-list of bugs closed since the previous release. For information about
-installing and using the gLite Logging &amp; Bookkeeping Server, please refer
-to the gLite Installation and User Guides. </p>
-
-<h1>2. Release contents</h1>
-
-<p class=MsoNormal>The gLite Logging &amp; Bookkeeping Server v. 0.2.0 is
-composed of the following gLite components:</p>
-
-<p class=MsoNormal>&nbsp;</p>
-
-<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0 width=634
- style='width:475.4pt;border-collapse:collapse;border:none'>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>Component name</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>Version</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>File</span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>org.glite.deployment.lb</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>0.2.0</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041126/installers/glite-lb_installer.sh">http://glite.web.cern.ch/glite/packages/I20041210/installers/glite-lb_installer.sh</a>
-  </span></p>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041210/bin/rhel30/noarch/RPMS/glite-lb-config-0.2.0-1.noarch.rpm">http://glite.web.cern.ch/glite/packages/I20041210/bin/rhel30/noarch/RPMS/glite-lb-config-0.2.0-1.noarch.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>org.glite.deployment.config</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>0.3.0</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041210/bin/rhel30/noarch/RPMS/glite-%20config-0.3.0-1.noarch.rpm">http://glite.web.cern.ch/glite/packages/I20041210/bin/rhel30/noarch/RPMS/glite-
-  config-0.3.0-1.noarch.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=FR style='font-size:10.0pt'>glite-lb-client-interface</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=FR style='font-size:10.0pt'>0.3.1</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041210/bin/rhel30/i386/RPMS/glite-lb-client-interface-0.3.1-2.i386.rpm">http://glite.web.cern.ch/glite/packages/I20041210/bin/rhel30/i386/RPMS/glite-lb-client-interface-0.3.1-2.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=FR style='font-size:10.0pt'>glite-lb-common</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=FR style='font-size:10.0pt'>0.4.1</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=FR style='font-size:
-  10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041210/bin/rhel30/i386/RPMS/glite-lb-common-0.4.1-2.i386.rpm">http://glite.web.cern.ch/glite/packages/I20041210/bin/rhel30/i386/RPMS/glite-lb-common-0.4.1-2.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>glite-lb-logger</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>0.4.1</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=FR style='font-size:
-  10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041210/bin/rhel30/i386/RPMS/glite-lb-logger-0.4.1-3.i386.rpm">http://glite.web.cern.ch/glite/packages/I20041210/bin/rhel30/i386/RPMS/glite-lb-logger-0.4.1-3.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=FR style='font-size:10.0pt'>glite-lb-server</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=FR style='font-size:10.0pt'>0.6.2</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=FR style='font-size:
-  10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041210/bin/rhel30/i386/RPMS/glite-lb-server-0.6.2-4.i386.rpm">http://glite.web.cern.ch/glite/packages/I20041210/bin/rhel30/i386/RPMS/glite-lb-server-0.6.2-4.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>glite-lb-server-bones</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>0.1.0</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/i386/RPMS/glite-lb-server-bones-0.1.0-1.i386.rpm">http://glite.web.cern.ch/glite/packages/I20041210/bin/rhel30/i386/RPMS/glite-lb-server-bones-0.1.0-1.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>glite-lb-ws-interface</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>0.1.0</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041210/bin/rhel30/i386/RPMS/glite-lb-ws-interface-0.1.0-0.i386.rpm">http://glite.web.cern.ch/glite/packages/I20041210/bin/rhel30/i386/RPMS/glite-lb-ws-interface-0.1.0-0.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>glite-security-proxyrenewal</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>0.1.1</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041210/bin/rhel30/i386/RPMS/glite-security-proxyrenewal-0.1.1-1.i386.rpm">http://glite.web.cern.ch/glite/packages/I20041210/bin/rhel30/i386/RPMS/glite-security-proxyrenewal-0.1.1-1.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>glite-wms-utils-exception</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>0.1.2</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/i386/RPMS/glite-wms-utils-exception-0.1.2-1.i386.rpm">http://glite.web.cern.ch/glite/packages/I20041210/bin/rhel30/i386/RPMS/glite-wms-utils-exception-0.1.2-1.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>glite-wms-utils-jobid</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>0.1.2</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/i386/RPMS/glite-wms-utils-jobid-0.1.2-1.i386.rpm">http://glite.web.cern.ch/glite/packages/I20041210/bin/rhel30/i386/RPMS/glite-wms-utils-jobid-0.1.2-1.i386.rpm</a></span></span></p>
-  </td>
- </tr>
-</table>
-
-<p class=MsoNormal><span lang=EN-US>&nbsp;</span></p>
-
-<h1>3. Dependencies</h1>
-
-<p class=MsoNormal>The gLite Logging &amp; Bookkeeping Server module has the
-following dependencies:</p>
-
-<p class=MsoNormal>&nbsp;</p>
-
-<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0 width=640
- style='width:480.3pt;border-collapse:collapse;border:none'>
- <tr>
-  <td width=187 valign=top style='width:140.1pt;border:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  10.0pt'>Component name</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.6pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>Version</span></p>
-  </td>
-  <td width=387 valign=top style='width:290.6pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>RPM file name</span></p>
-  </td>
- </tr>
- <tr>
-  <td width=187 valign=top style='width:140.1pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span lang=EN-US
-  style='font-size:10.0pt'>gLite Security Utilities</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.6pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>0.2.0</span></p>
-  </td>
-  <td width=387 valign=top style='width:290.6pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041210/installers/glite-security-utils_installer.sh">http://glite.web.cern.ch/glite/packages/I20041210/installers/glite-security-utils_installer.sh</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=187 valign=top style='width:140.1pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  10.0pt'>GPT</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.6pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>VDT 1.2.0</span></p>
-  </td>
-  <td width=387 valign=top style='width:290.6pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/gpt-VDT1.2.0rh9-1.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/gpt-<span
-  lang=EN-GB>VDT1.2.0rh9</span>-1.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=187 valign=top style='width:140.1pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  10.0pt'>VDT Globus Essentials</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.6pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>VDT 1.2.0</span></p>
-  </td>
-  <td width=387 valign=top style='width:290.6pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/vdt_globus_essentials-VDT1.2.0rh9-1.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/vdt_globus_essentials-<span
-  lang=EN-GB>VDT1.2.0rh9</span>-1.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=187 valign=top style='width:140.1pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  10.0pt'>MySQL-server</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.6pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>4.0.20</span></p>
-  </td>
-  <td width=387 valign=top style='width:290.6pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/MySQL-server-4.0.20-0.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/MySQL-server-<span
-  lang=EN-GB>4.0.20</span>-0.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=187 valign=top style='width:140.1pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  10.0pt'>MySQL-client</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.6pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>4.0.20</span></p>
-  </td>
-  <td width=387 valign=top style='width:290.6pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/MySQL-client-4.0.20-0.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/MySQL-client-<span
-  lang=EN-GB>4.0.20</span>-0.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=187 valign=top style='width:140.1pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  10.0pt'>ares</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.6pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>1.1.1</span></p>
-  </td>
-  <td width=387 valign=top style='width:290.6pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/ares-1.1.1-EGEE.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/ares-<span
-  lang=EN-GB>1.1.1</span>-EGEE.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=187 valign=top style='width:140.1pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  10.0pt'>myproxy</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.6pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>1.14</span></p>
-  </td>
-  <td width=387 valign=top style='width:290.6pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/myproxy-1.14-EGEE.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/myproxy-<span
-  lang=EN-GB>1.14</span>-EGEE.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=187 valign=top style='width:140.1pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  10.0pt'>perl-Expect.pm</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.6pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>1.01</span></p>
-  </td>
-  <td width=387 valign=top style='width:290.6pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/per-Expect.pm-1.01-9.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/per-Expect.pm-<span
-  lang=EN-GB>1.01</span>-9.i386.rpm</a></span></span></p>
-  </td>
- </tr>
-</table>
-
-<p class=MsoNormal>&nbsp;</p>
-
-<h1>4. Known bugs and issues</h1>
-
-<p class=MsoNormal align=left style='text-align:left'>This release has the
-following bugs and issues. Bug numbers refer to the gLite Bug Tracking system
-database hosted on the CERN Savannah system at <a
-href="https://savannah.cern.ch/bugs/?group=jra1mdw">https://savannah.cern.ch/bugs/?group=jra1mdw</a>
-.</p>
-
-<p class=MsoNormal align=left style='text-align:left'>&nbsp;</p>
-
-<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
- style='border-collapse:collapse;border:none'>
- <tr>
-  <td width=106 valign=top style='width:79.3pt;border:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>Bug number</span></p>
-  </td>
-  <td width=513 valign=top style='width:385.1pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>Description</span></p>
-  </td>
- </tr>
- <tr>
-  <td width=106 valign=top style='width:79.3pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5125"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#5125</span></a></span></p>
-  </td>
-  <td width=513 valign=top style='width:385.1pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5125"><span
-  style='color:windowtext;text-decoration:none'>glite-lb-bkserverd
-  start/stop/status displays usage options</span></a>&nbsp;</span></p>
-  </td>
- </tr>
- <tr>
-  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5202"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#5202</span></a></span></p>
-  </td>
-  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
-  border-right:solid windowtext 1.0pt;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5202"><span
-  style='color:windowtext;text-decoration:none'>no RPM provides the
-  lb-local-logger daemon - </span></a>&nbsp;</span></p>
-  </td>
- </tr>
- <tr>
-  <td width=106 valign=top style='width:79.3pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5248"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#5248</span></a></span></p>
-  </td>
-  <td width=513 valign=top style='width:385.1pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5248"><span
-  style='color:windowtext;text-decoration:none'>When running
-  &quot;glite-lb-bkserverd start&quot;, glite-lb-bkserverd doesn't start in
-  background</span></a>&nbsp;</span></p>
-  </td>
- </tr>
- <tr>
-  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5833"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#5833</span></a></span></p>
-  </td>
-  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
-  border-right:solid windowtext 1.0pt;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5833"><span
-  style='color:windowtext;text-decoration:none'>all jobs in SUBMITTED after a
-  job storm</span></a>&nbsp;</span></p>
-  </td>
- </tr>
- <tr>
-  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5903"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#5903</span></a></span></p>
-  </td>
-  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
-  border-right:solid windowtext 1.0pt;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5903"><span
-  style='color:windowtext;text-decoration:none'>glite-lb-bkserverd script gives
-  bash: /root/.bashrc: Permission denied error </span></a>&nbsp;</span></p>
-  </td>
- </tr>
- <tr>
-  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5904"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#5904</span></a></span></p>
-  </td>
-  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
-  border-right:solid windowtext 1.0pt;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5904"><span
-  style='color:windowtext;text-decoration:none'>glite-lb-bkserverd does not
-  check default location for credentials</span></a>&nbsp;</span></p>
-  </td>
- </tr>
- <tr>
-  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5926"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#5926</span></a></span></p>
-  </td>
-  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
-  border-right:solid windowtext 1.0pt;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5926"><span
-  style='color:windowtext;text-decoration:none'>Default user should not be used
-  in the init.d scripts</span></a>&nbsp;</span></p>
-  </td>
- </tr>
- <tr>
-  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5932"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#5932</span></a></span></p>
-  </td>
-  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
-  border-right:solid windowtext 1.0pt;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5932"><span
-  style='color:windowtext;text-decoration:none'>credential file created in
-  /var/tmp is unnecessary</span></a>&nbsp;</span></p>
-  </td>
- </tr>
- <tr>
-  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5934"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#5934</span></a></span></p>
-  </td>
-  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
-  border-right:solid windowtext 1.0pt;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5934"><span
-  style='color:windowtext;text-decoration:none'>service start and stop notifications
-  are inconsistent for glite-lb-bkserverd init,d script</span></a>&nbsp;</span></p>
-  </td>
- </tr>
-</table>
-
-<p class=MsoNormal align=left style='text-align:left'>&nbsp;</p>
-
-<p class=MsoNormal align=left style='text-align:left'>No removal procedure is
-provided with this release apart from the removal of the RPMS. Any account,
-group or other resource created during the module configuration must be
-manually cleaned.</p>
-
-<p class=MsoNormal align=left style='margin:0mm;margin-bottom:.0001pt;
-text-align:left;text-autospace:none'><span lang=EN-US style='font-size:10.0pt;
-font-family:"Courier New"'>&nbsp;</span></p>
-
-<h1>5. Bugs closed since last release</h1>
-
-<p class=MsoNormal align=left style='text-align:left'>This release fixes the
-following bugs and issues. Since there are no previous public releases, this
-list refers to the previous development release. Bug numbers refer to the gLite
-Bug Tracking system database hosted on the CERN Savannah system at <a
-href="https://savannah.cern.ch/bugs/?group=jra1mdw">https://savannah.cern.ch/bugs/?group=jra1mdw</a>
- </p>
-
-<p class=MsoNormal align=left style='text-align:left'>&nbsp;</p>
-
-<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
- style='border-collapse:collapse;border:none'>
- <tr>
-  <td width=121 valign=top style='width:90.45pt;border:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>Bug number</span></p>
-  </td>
-  <td width=499 valign=top style='width:373.95pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>Description</span></p>
-  </td>
- </tr>
- <tr>
-  <td width=121 valign=top style='width:90.45pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=4627"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#4627</span></a></span></p>
-  </td>
-  <td width=499 valign=top style='width:373.95pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=4627"><span
-  style='color:windowtext;text-decoration:none'>no licence found in lb packages</span></a>&nbsp;</span></p>
-  </td>
- </tr>
- <tr>
-  <td width=121 valign=top style='width:90.45pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5236"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#5236</span></a></span></p>
-  </td>
-  <td width=499 valign=top style='width:373.95pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5236"><span
-  style='color:windowtext;text-decoration:none'>LB install/config documentation
-  has some errors</span></a>&nbsp;</span></p>
-  </td>
- </tr>
- <tr>
-  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5912"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#5912</span></a></span></p>
-  </td>
-  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
-  border-right:solid windowtext 1.0pt;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5912"><span
-  style='color:windowtext;text-decoration:none'>glite-lb-bkserver daemon looks
-  hangs is /tmp/mysql.sock is not present</span></a>&nbsp;</span></p>
-  </td>
- </tr>
- <tr>
-  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5930"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#5930</span></a></span></p>
-  </td>
-  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
-  border-right:solid windowtext 1.0pt;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5930"><span
-  style='color:windowtext;text-decoration:none'>running start on started
-  service is not an error. </span></a>&nbsp;</span></p>
-  </td>
- </tr>
-</table>
-
-<p class=MsoNormal align=left style='text-align:left'>&nbsp;</p>
-
-<h1>6. Previous Releases</h1>
-
-<h2>6.1. Release 0.1.0</h2>
-
-<h3><span lang=FR>6.1.1. </span><span lang=FR>Release Description</span></h3>
-
-<p class=MsoNormal>This release contains the gLite Logging &amp; Bookkeeping
-Server module v. 0.1.0. The following sections provide additional information
-about the release content, the module dependencies, the know bugs and issues
-and a list of bugs closed since the previous release. For information about
-installing and using the gLite Logging &amp; Bookkeeping Server, please refer
-to the gLite Installation and User Guides. </p>
-
-<h3>6.1.2. <span lang=FR>Release</span> contents</h3>
-
-<p class=MsoNormal>The gLite Logging &amp; Bookkeeping Server v. 0.1.0 is
-composed of the following gLite components:</p>
-
-<p class=MsoNormal>&nbsp;</p>
-
-<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0 width=634
- style='width:475.4pt;border-collapse:collapse;border:none'>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>Component name</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>Version</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>File</span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>org.glite.deployment.lb</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>0.1.0</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041126/installers/glite-lb_installer.sh">http://glite.web.cern.ch/glite/packages/I20041126/installers/glite-lb_installer.sh</a>
-  </span></p>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/noarch/RPMS/glite-lb-config-0.1.0-1.noarch.rpm">http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/noarch/RPMS/glite-lb-config-0.1.0-1.noarch.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>org.glite.deployment.config</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>0.1.0</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/noarch/RPMS/glite-ce-config-0.1.0-1.noarch.rpm">http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/noarch/RPMS/glite-
-  config-0.1.0-1.noarch.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=FR style='font-size:10.0pt'>glite-lb-client-interface</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=FR style='font-size:10.0pt'>0.3.0</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/i386/RPMS/glite-lb-client-interface-0.3.0-2.i386.rpm">http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/i386/RPMS/glite-lb-client-interface-0.3.0-2.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>glite-lb-logger</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>0.3.0</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=FR style='font-size:
-  10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/i386/RPMS/glite-lb-logger-0.3.0-3.i386.rpm">http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/i386/RPMS/glite-lb-logger-0.3.0-3.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>glite-lb-common</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>0.3.0</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/i386/RPMS/glite-lb-common-0.3.0-2.i386.rpm">http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/i386/RPMS/glite-lb-common-0.3.0-2.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>glite-lb-server</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>0.5.2</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/i386/RPMS/glite-lb-server-0.5.2-4.i386.rpm">http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/i386/RPMS/glite-lb-server-0.5.2-4.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>glite-lb-server-bones</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>0.1.0</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/i386/RPMS/glite-lb-server-bones-0.1.0-1.i386.rpm">http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/i386/RPMS/glite-lb-server-bones-0.1.0-1.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>glite-wms-utils-jobid</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>0.1.2</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/i386/RPMS/glite-wms-utils-jobid-0.1.2-1.i386.rpm">http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/i386/RPMS/glite-wms-utils-jobid-0.1.2-1.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>glite-wms-utils-exception</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>0.1.2</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/i386/RPMS/glite-wms-utils-exception-0.1.2-1.i386.rpm">http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/i386/RPMS/glite-wms-utils-exception-0.1.2-1.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=177 valign=top style='width:133.0pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>glite-security-proxyrenewal</span></p>
-  </td>
-  <td width=63 valign=top style='width:47.5pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>0.1.0</span></p>
-  </td>
-  <td width=393 valign=top style='width:294.9pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/i386/RPMS/glite-security-proxyrenewal-0.1.0-1.i386.rpm">http://glite.web.cern.ch/glite/packages/I20041126/bin/rhel30/i386/RPMS/glite-security-proxyrenewal-0.1.0-1.i386.rpm</a></span></span></p>
-  </td>
- </tr>
-</table>
-
-<p class=MsoNormal><span lang=EN-US>&nbsp;</span></p>
-
-<h3>6.1.3. <span lang=FR>Dependencies</span></h3>
-
-<p class=MsoNormal>The gLite Logging &amp; Bookkeeping Server module has the
-following dependencies:</p>
-
-<p class=MsoNormal>&nbsp;</p>
-
-<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0 width=640
- style='width:480.3pt;border-collapse:collapse;border:none'>
- <tr>
-  <td width=187 valign=top style='width:140.1pt;border:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  10.0pt'>Component name</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.6pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>Version</span></p>
-  </td>
-  <td width=387 valign=top style='width:290.6pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>RPM file name</span></p>
-  </td>
- </tr>
- <tr>
-  <td width=187 valign=top style='width:140.1pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span lang=EN-US
-  style='font-size:10.0pt'>gLite Security Utilities</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.6pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt'>0.2.0</span></p>
-  </td>
-  <td width=387 valign=top style='width:290.6pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'>http://glite.web.cern.ch/glite/packages/I20041126/installers/glite-security-utils_installer.sh</span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=187 valign=top style='width:140.1pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  10.0pt'>GPT</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.6pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>VDT 1.2.0</span></p>
-  </td>
-  <td width=387 valign=top style='width:290.6pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/gpt-VDT1.2.0rh9-1.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/gpt-<span
-  lang=EN-GB>VDT1.2.0rh9</span>-1.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=187 valign=top style='width:140.1pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  10.0pt'>VDT Globus Essentials</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.6pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>VDT 1.2.0</span></p>
-  </td>
-  <td width=387 valign=top style='width:290.6pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/vdt_globus_essentials-VDT1.2.0rh9-1.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/vdt_globus_essentials-<span
-  lang=EN-GB>VDT1.2.0rh9</span>-1.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=187 valign=top style='width:140.1pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  10.0pt'>MySQL-server</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.6pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>4.0.20</span></p>
-  </td>
-  <td width=387 valign=top style='width:290.6pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/MySQL-server-4.0.20-0.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/MySQL-server-<span
-  lang=EN-GB>4.0.20</span>-0.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=187 valign=top style='width:140.1pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  10.0pt'>MySQL-client</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.6pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>4.0.20</span></p>
-  </td>
-  <td width=387 valign=top style='width:290.6pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/MySQL-client-4.0.20-0.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/MySQL-client-<span
-  lang=EN-GB>4.0.20</span>-0.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=187 valign=top style='width:140.1pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  10.0pt'>ares</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.6pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>1.1.1</span></p>
-  </td>
-  <td width=387 valign=top style='width:290.6pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/ares-1.1.1-EGEE.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/ares-<span
-  lang=EN-GB>1.1.1</span>-EGEE.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=187 valign=top style='width:140.1pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  10.0pt'>myproxy</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.6pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>1.14</span></p>
-  </td>
-  <td width=387 valign=top style='width:290.6pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/myproxy-1.14-EGEE.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/myproxy-<span
-  lang=EN-GB>1.14</span>-EGEE.i386.rpm</a></span></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=187 valign=top style='width:140.1pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  10.0pt'>perl-Expect.pm</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.6pt;border-top:none;border-left:none;
-  border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>1.01</span></p>
-  </td>
-  <td width=387 valign=top style='width:290.6pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span class=MsoHyperlink><span lang=EN-US
-  style='font-size:10.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/per-Expect.pm-1.01-9.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/per-Expect.pm-<span
-  lang=EN-GB>1.01</span>-9.i386.rpm</a></span></span></p>
-  </td>
- </tr>
-</table>
-
-<p class=MsoNormal>&nbsp;</p>
-
-<h3>6.1.4. Known bugs and issues</h3>
-
-<p class=MsoNormal align=left style='text-align:left'>This release has the
-following bugs and issues. Bug numbers refer to the gLite Bug Tracking system
-database hosted on the CERN Savannah system at <a
-href="https://savannah.cern.ch/bugs/?group=jra1mdw">https://savannah.cern.ch/bugs/?group=jra1mdw</a>
-.</p>
-
-<p class=MsoNormal align=left style='text-align:left'>&nbsp;</p>
-
-<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
- style='border-collapse:collapse;border:none'>
- <tr>
-  <td width=121 valign=top style='width:90.45pt;border:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>Bug number</span></p>
-  </td>
-  <td width=499 valign=top style='width:373.95pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'>Description</span></p>
-  </td>
- </tr>
- <tr>
-  <td width=121 valign=top style='width:90.45pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5125"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#5125</span></a></span></p>
-  </td>
-  <td width=499 valign=top style='width:373.95pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5125"><span
-  style='color:windowtext;text-decoration:none'>glite-lb-bkserverd
-  start/stop/status displays usage options</span></a>&nbsp;</span></p>
-  </td>
- </tr>
- <tr>
-  <td width=121 valign=top style='width:90.45pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5248"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#5248</span></a></span></p>
-  </td>
-  <td width=499 valign=top style='width:373.95pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:10.0pt'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5248"><span
-  style='color:windowtext;text-decoration:none'>When running
-  &quot;glite-lb-bkserverd start&quot;, glite-lb-bkserverd doesn't start in
-  background</span></a>&nbsp;</span></p>
-  </td>
- </tr>
-</table>
-
-<p class=MsoNormal align=left style='text-align:left'>&nbsp;</p>
-
-<p class=MsoNormal align=left style='text-align:left'>No removal procedure is
-provided with this release apart from the removal of the RPMS. Any account,
-group or other resource created during the module configuration must be
-manually cleaned.</p>
-
-<p class=MsoNormal align=left style='margin:0mm;margin-bottom:.0001pt;
-text-align:left;text-autospace:none'><span lang=EN-US style='font-size:10.0pt;
-font-family:"Courier New"'>&nbsp;</span></p>
-
-<h3>6.1.5. Bugs closed since last release</h3>
-
-<p class=MsoNormal align=left style='text-align:left'>This release fixes the
-following bugs and issues. Since there are no previous public releases, this
-list refers to the previous development release. Bug numbers refer to the gLite
-Bug Tracking system database hosted on the CERN Savannah system at <a
-href="https://savannah.cern.ch/bugs/?group=jra1mdw">https://savannah.cern.ch/bugs/?group=jra1mdw</a>
- </p>
-
-<p class=MsoNormal align=left style='text-align:left'>&nbsp;</p>
-
-<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
- style='border-collapse:collapse;border:none'>
- <tr>
-  <td width=121 valign=top style='width:90.45pt;border:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal>Bug number</p>
-  </td>
-  <td width=499 valign=top style='width:373.95pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal>Description</p>
-  </td>
- </tr>
- <tr>
-  <td width=121 valign=top style='width:90.45pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=4627"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#4627</span></a></p>
-  </td>
-  <td width=499 valign=top style='width:373.95pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=4627"><span
-  style='color:windowtext;text-decoration:none'>no licence found in lb packages</span></a>&nbsp;</p>
-  </td>
- </tr>
- <tr>
-  <td width=121 valign=top style='width:90.45pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5236"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#5236</span></a></p>
-  </td>
-  <td width=499 valign=top style='width:373.95pt;border-top:none;border-left:
-  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=5236"><span
-  style='color:windowtext;text-decoration:none'>LB install/config documentation
-  has some errors</span></a>&nbsp;</p>
-  </td>
- </tr>
-</table>
-
-<p class=MsoNormal align=left style='text-align:left'>&nbsp;</p>
-
-<p class=MsoNormal>&nbsp;</p>
-
-</div>
-
-</body>
-
-</html>
diff --git a/org.glite.deployment.lb/doc/release_notes/release_notes.pdf b/org.glite.deployment.lb/doc/release_notes/release_notes.pdf
deleted file mode 100644 (file)
index 353c3a2..0000000
Binary files a/org.glite.deployment.lb/doc/release_notes/release_notes.pdf and /dev/null differ
diff --git a/org.glite.deployment.lb/project/.cvsignore b/org.glite.deployment.lb/project/.cvsignore
deleted file mode 100644 (file)
index caf4eaa..0000000
+++ /dev/null
@@ -1 +0,0 @@
-glite-lb.sdf.xml
diff --git a/org.glite.deployment.lb/project/build.properties b/org.glite.deployment.lb/project/build.properties
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.glite.deployment.lb/project/glite-lb.sdf.xml.template b/org.glite.deployment.lb/project/glite-lb.sdf.xml.template
deleted file mode 100644 (file)
index 9fd493f..0000000
+++ /dev/null
@@ -1,114 +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
--->
-
-<node name="glite-lb-node" version="@module.version@">
-       <services>
-               <service name="glite-lb-service">
-                       <components>
-                           <component name="glite-config"
-                                       version="0.3.0"
-                                       age="1"
-                                       build="1"
-                                       arch="noarch"/>
-                                       
-                <component name="glite-lb-config"
-                        version="@module.version@"
-                        age="@module.age@"
-                        build="@module.build@"
-                        arch="noarch"/>
-
-                               <component name="glite-lb-client-interface"
-                                       version="@org.glite.lb.client-interface.version@"
-                                       age="@org.glite.lb.client-interface.age@"
-                                       build="@org.glite.lb.client-interface.build@"
-                                       arch="i386"/>
-
-                               <component name="glite-lb-ws-interface"
-                                       version="@org.glite.lb.ws-interface.version@"
-                                       age="@org.glite.lb.ws-interface.age@"
-                                       build="@org.glite.lb.ws-interface.build@"
-                                       arch="i386"/>
-                       
-                               <component name="glite-lb-logger"
-                                       version="@org.glite.lb.logger.version@"
-                                       age="@org.glite.lb.logger.age@"
-                                       build="@org.glite.lb.logger.build@"
-                                       arch="i386"/>
-               
-                               <component name="glite-lb-common"
-                                       version="@org.glite.lb.common.version@"
-                                       age="@org.glite.lb.common.age@"
-                                       build="@org.glite.lb.common.build@"
-                                       arch="i386"/>
-       
-                               <component name="glite-lb-server"
-                                       version="@org.glite.lb.server.version@"
-                                       age="@org.glite.lb.server.age@"
-                                       build="@org.glite.lb.server.build@"
-                                       arch="i386"/>
-                                          
-                               <component name="glite-lb-server-bones"
-                                       version="@org.glite.lb.server-bones.version@"
-                                       age="@org.glite.lb.server-bones.age@"
-                                       build="@org.glite.lb.server-bones.build@"
-                                       arch="i386"/>
-                                          
-                               <component name="glite-wms-utils-jobid"
-                                       version="@org.glite.wms-utils.jobid.version@"
-                                       age="@org.glite.wms-utils.jobid.age@"
-                                       build="@org.glite.wms-utils.jobid.build@"
-                                       arch="i386"/>
-       
-                               <component name="glite-wms-utils-exception"
-                                       version="@org.glite.wms-utils.exception.version@"
-                                       age="@org.glite.wms-utils.exception.age@"
-                                       build="@org.glite.wms-utils.exception.build@"
-                                       arch="i386"/>
-       
-                               <component name="glite-security-proxyrenewal"
-                                       version="@org.glite.security.proxyrenewal.version@"
-                                       age="@org.glite.security.proxyrenewal.age@"
-                                       build="@org.glite.security.proxyrenewal.build@"
-                                       arch="i386"/>
-       
-                       </components>
-                       <dependencies>
-                               <external name="MySQL-server"
-                                       version="4.0.20"
-                                       age="0"
-                                       arch="i386"/>
-                               <external name="MySQL-client"
-                                       version="4.0.20"
-                                       age="0"
-                                       arch="i386"/>                             
-                               <external name="ares"
-                                       version="1.1.1"
-                                       age="EGEE"
-                                       arch="i386"/>                             
-                               <external name="vdt_globus_essentials"
-                                       version="VDT1.2.0rh9"
-                                       age="1"
-                                       arch="i386"/>
-                               <external name="gpt"
-                                       version="VDT1.2.0rh9"
-                                       age="1"
-                                       arch="i386"/>                                            
-                               <external name="myproxy"
-                                       version="1.14"
-                                       age="EGEE"
-                                       arch="i386"/>
-                               <external name="perl-Expect.pm"
-                                       version="1.01"
-                                       age="9"
-                                       arch="i386"/>
-                       </dependencies>
-               </service>
-       </services>
-       <dependencies>
-         <!-- glite service tool -->
-       </dependencies>
-</node>
diff --git a/org.glite.deployment.lb/project/glite-lb.spec b/org.glite.deployment.lb/project/glite-lb.spec
deleted file mode 100644 (file)
index cf7c650..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-Summary:gLite LB node installation package
-Name:glite-lb-config
-Version:@MODULE.VERSION@
-Release:@MODULE.BUILD@
-Copyright:Open Source EGEE License
-Vendor:EU EGEE project
-Group:System/Application
-Prefix:/opt/glite
-BuildArch:noarch
-BuildRoot:%{_builddir}/%{name}-%{version}
-Requires: glite-lb-common, glite-lb-logger, glite-lb-server, glite-security-proxyrenewal, glite-lb-client-interface, MySQL-server, MySQL-client, expat, ares,vdt_globus_essentials, glite-wms-utils-jobid, glite-wms-utils-exception, myproxy, perl-Expect.pm 
-
-AutoReqProv:no
-Source:glite-lb.tar.gz
-%define debug_package %{nil}
-
-%description
-gLite Logging and Bookkeeping node installation package
-
-%prep
-
-%setup -c
-
-%build
-
-%install
-
-%clean
-%pre
-%post
-#echo "post install script"
-%preun
-%postun
-%files
-%attr(755,root,root) %{prefix}/etc/config/scripts/glite-lb-config.py
-%attr(644,root,root) %{prefix}/etc/config/templates/glite-lb.cfg.xml
-%attr(644,root,root) %{prefix}/share/doc/glite-lb/release_notes/release_notes.doc
-%attr(644,root,root) %{prefix}/share/doc/glite-lb/release_notes/release_notes.pdf
-%attr(644,root,root) %{prefix}/share/doc/glite-lb/release_notes/release_notes.html
-
-%changelog
-
diff --git a/org.glite.deployment.lb/project/lxscript-rpm.xsl b/org.glite.deployment.lb/project/lxscript-rpm.xsl
deleted file mode 100644 (file)
index 79eb3dc..0000000
+++ /dev/null
@@ -1,254 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<xsl:stylesheet version="1.0" 
-       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-       
-       <xsl:output method="xml" 
-               indent="yes"
-               encoding="UTF-8"
-               omit-xml-declaration="yes"/>
-
-       <!-- Definition of variables and parameters -->
-       <xsl:param name="repository"/>
-       <xsl:param name="ext-repository"/>
-
-       <!-- global processing -->
-       <xsl:template match="/">
-#!/bin/sh
-
-# 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
-
-# glite-lb_installer v. <xsl:value-of select="/node/@version"/>
-#
-# The glite-lb_installer installs the gLite Logging and Bookkeeping Server
-#
-# Usage: glite-lb_installer [-u|-v|--help]
-#        -u          uninstall
-#        -v          print version
-#        --help      print script usage info
-# Return codes: 0 - Ok
-#               1 - if a file could not be downloaded
-
-###############################################################################
-
-#Parse the RPMLIST to strip out the RPMS that are already installed
-function parseRPMList()
-{
-        newRPMLIST=""
-        localRPMLIST=`rpm -qa`
-        for i in $RPMLIST
-        do
-                g=`echo $i | sed -e 's/\.i386\.rpm//g'`
-                g=`echo $g | sed -e 's/\.noarch\.rpm//g'`
-                if [ -z "`echo $localRPMLIST | grep $g`" ]; then
-                        newRPMLIST="${newRPMLIST} $i"
-                else
-                        echo "$i is already installed. It will be skipped."
-                fi
-        done
-                                                                                                                                                             
-        RPMLIST=$newRPMLIST
-}
-
-
-#Downloads and install the module RPMS
-function install()
-{
-       version
-       echo
-       echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-       echo x Please wait, downloading the gLite Logging and Bookkeeping Server... x
-       echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-       echo
-
-        mkdir -p glite-lb
-        cd glite-lb
-
-       # Download global dependencies  
-       <xsl:for-each select="node/dependencies">
-               <xsl:apply-templates>
-                               <xsl:with-param name="install">true</xsl:with-param>
-               </xsl:apply-templates>
-       </xsl:for-each>
-       
-       <xsl:for-each select="node/services/service">
-
-       # Download <xsl:value-of select="@name"/> dependencies RPMS from repository
-               <xsl:for-each select="dependencies">
-                       <xsl:apply-templates>
-                               <xsl:with-param name="install">true</xsl:with-param>
-                       </xsl:apply-templates>
-               </xsl:for-each>
-
-       # Download <xsl:value-of select="@name"/> RPMS from repository
-               <xsl:for-each select="components">
-                       <xsl:apply-templates>
-                               <xsl:with-param name="install">true</xsl:with-param>
-                       </xsl:apply-templates>
-               </xsl:for-each>
-
-       </xsl:for-each>
-               
-       # Install all RPMS
-       echo
-       echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-       echo x Please wait, installing the gLite Logging and Bookkeeping Server... x
-       echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-       echo
-       parseRPMList
-       rpm -Uvh $RPMLIST
-       echo
-       echo Done!
-       echo
-       echo For more information refer to the gLite Installation and User Guides or to the gLite web site \(http:\/\/www.glite.org\)
-       echo Please report problems and comments to the gLite Team at project-eu-egee-middleware-integration-support@cern.ch
-
-       cd ..
-}
-
-###############################################################################
-function uninstall()
-{
-       version
-
-       # Global dependencies   
-       <xsl:for-each select="node/dependencies">
-               <xsl:apply-templates>
-                       <xsl:with-param name="install">false</xsl:with-param>
-               </xsl:apply-templates>
-       </xsl:for-each>
-               
-       <xsl:for-each select="node/services/service">
-
-       # <xsl:value-of select="@name"/> dependencies RPMS from repository
-               <xsl:for-each select="dependencies">
-                       <xsl:apply-templates>
-                               <xsl:with-param name="install">false</xsl:with-param>
-                       </xsl:apply-templates>
-               </xsl:for-each>
-
-       # <xsl:value-of select="@name"/> RPMS from repository
-               <xsl:for-each select="components">
-                       <xsl:apply-templates>
-                               <xsl:with-param name="install">false</xsl:with-param>
-                       </xsl:apply-templates>
-               </xsl:for-each>
-
-       </xsl:for-each>
-               
-       # Uninstall all RPMS
-       echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-       echo x  Please wait, uninstalling the gLite Logging and Bookkeeping Server... x
-       echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-       echo
-       rpm -ev $RPMLIST
-       echo
-       echo Done!
-}
-
-###############################################################################
-function usage()
-{
-       echo 
-       echo Copyright \(c\) Members of the EGEE Collaboration. 2004 
-       echo See http://eu-egee.org/partners/ for details on the copyright holders
-       echo For license conditions see the license file or http://eu-egee.org/license.html
-       echo 
-       echo glite-lb_installer v. <xsl:value-of select="/node/@version"/>
-       echo 
-       echo The glite-lb_installer installs the gLite Logging and Bookkeeping Server
-       echo 
-       echo Usage: glite-lb_installer \[-u\|-v\|--help\]
-       echo -u          uninstall
-       echo -v          print version
-       echo --help      print script usage info
-       echo 
-       echo Return codes:
-       echo 0 - Ok
-       echo 1 - if a file could not be downloaded
-       echo 
-}
-
-###############################################################################
-function version
-{
-       echo 
-       echo Copyright \(c\) Members of the EGEE Collaboration. 2004 
-       echo See http://eu-egee.org/partners/ for details on the copyright holders
-       echo For license conditions see the license file or http://eu-egee.org/license.html
-       echo 
-       echo glite-lb_installer v. <xsl:value-of select="/node/@version"/>
-       echo 
-}
-
-
-RPMLIST=
-
-###############################################################################
-# Main
-
-while getopts uvh opt
-do
-       case $opt in
-               'u') uninstall
-                    exit 0     
-                    ;;
-               'v') version
-                    exit 0     
-                    ;;
-               'h') usage
-                    exit 0     
-                    ;;
-       esac
-done
-
-install
-
-exit 0
-       </xsl:template>
-
-       <xsl:template name="dependencies" match="external">
-               <xsl:param name="install"/>
-               <xsl:variable name="package"><xsl:value-of select="@name"/>-<xsl:value-of select="@version"/>-<xsl:value-of select="@age"/>.<xsl:value-of select="@arch"/>.rpm</xsl:variable>
-               <xsl:variable name="package.name"><xsl:value-of select="@name"/>-<xsl:value-of select="@version"/>-<xsl:value-of select="@age"/></xsl:variable>
-               <xsl:choose>
-                       <xsl:when test="$install = 'true'">
-wget -N --non-verbose <xsl:value-of select="$ext-repository"/><xsl:value-of select="$package"/>
-if [ ! -f "<xsl:value-of select="$package"/>" ]
-then
-       echo 
-       echo ERROR: <xsl:value-of select="$package"/> could not be downloaded!
-       exit 1
-fi
-RPMLIST="$RPMLIST <xsl:value-of select="$package"/>"
-                       </xsl:when>
-                       <xsl:otherwise>
-RPMLIST="$RPMLIST <xsl:value-of select="$package.name"/>"
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:template>
-       
-       <xsl:template name="components" match="component">
-               <xsl:param name="install"/>
-               <xsl:variable name="package"><xsl:value-of select="@name"/>-<xsl:value-of select="@version"/>-<xsl:value-of select="@age"/>.<xsl:value-of select="@arch"/>.rpm</xsl:variable>
-               <xsl:variable name="package.name"><xsl:value-of select="@name"/>-<xsl:value-of select="@version"/>-<xsl:value-of select="@age"/></xsl:variable>
-               <xsl:choose>
-                       <xsl:when test="$install='true'">
-wget -N --non-verbose <xsl:value-of select="$repository"/><xsl:value-of select="@arch"/>/RPMS/<xsl:value-of select="$package"/>
-if [ ! -f "<xsl:value-of select="$package"/>" ]
-then
-       echo 
-       echo ERROR: <xsl:value-of select="$package"/> could not be downloaded!
-       exit 1
-fi
-RPMLIST="$RPMLIST <xsl:value-of select="$package"/>"
-                       </xsl:when>
-                       <xsl:otherwise>
-RPMLIST="$RPMLIST <xsl:value-of select="$package.name"/>"
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:template>
-
-</xsl:stylesheet>
diff --git a/org.glite.deployment.lb/project/lxscript-tgz.xsl b/org.glite.deployment.lb/project/lxscript-tgz.xsl
deleted file mode 100644 (file)
index 5b55e40..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<xsl:stylesheet version="1.0" 
-       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-       
-       <xsl:output method="xml" 
-               indent="yes"
-               encoding="UTF-8"
-               omit-xml-declaration="yes"/>
-
-       <!-- Definition of variables and parameters -->
-       <xsl:param name="repository"/>
-       <xsl:param name="ext-repository"/>
-
-       <!-- global processing -->
-       <xsl:template match="/">
-#!/bin/sh
-#
-# glite-lb_tgz_installer
-# usage: glite-lb_tgz_installer [-u]
-#               -u             uninstall
-#
-# glite-lb_tgz_installer installs the gLite <xsl:value-of select="/node/@name"/> Deployment Unit from biniary tarballs
-#
-<!-- Put here pre-install instructions -->
-PREFIX=/opt/glite
-
-###############################################################################
-# Download global dependencies 
-               <xsl:for-each select="node/dependencies">
-                       <xsl:apply-templates/>
-               </xsl:for-each>
-###############################################################################
-               
-               <xsl:for-each select="node/services/service">
-###############################################################################
-# Download <xsl:value-of select="@name"/> dependencies RPMS from repository
-                       <xsl:for-each select="dependencies">
-                               <xsl:apply-templates/>
-                       </xsl:for-each>
-###############################################################################
-# Download <xsl:value-of select="@name"/> RPMS from repository
-                       <xsl:for-each select="components">
-                               <xsl:apply-templates/>
-                       </xsl:for-each>
-###############################################################################
-               </xsl:for-each>
-               
-       </xsl:template>
-
-       <xsl:template name="dependencies" match="external">
-               <xsl:variable name="package"><xsl:value-of select="@name"/>-<xsl:value-of select="@version"/>-<xsl:value-of select="@age"/>.<xsl:value-of select="@arch"/>.rpm</xsl:variable>
-wget <xsl:value-of select="$ext-repository"/><xsl:value-of select="$package"/>
-       </xsl:template>
-       
-       <xsl:template name="components" match="component">
-               <xsl:variable name="package"><xsl:value-of select="@name"/>-<xsl:value-of select="@version"/>_bin.tar.gz</xsl:variable>
-wget <xsl:value-of select="$repository"/>i386/tgz/<xsl:value-of select="$package"/>
-tar -xzf <xsl:value-of select="$package"/> $PREFIX
-       </xsl:template>
-
-</xsl:stylesheet>
diff --git a/org.glite.deployment.lb/project/properties.xml b/org.glite.deployment.lb/project/properties.xml
deleted file mode 100644 (file)
index 638f02b..0000000
+++ /dev/null
@@ -1,50 +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
-
-       Common build properties file for the gLite LB Server Node Deployment Unit
-       
-       Author: Alberto Di Meglio <alberto.di.meglio@cern.ch>
-       Version info: $Id$
-       Release: $Name$ 
-       
-       Revision history:
-       $Log$
--->
-
-<project name="gLite LB Server Deployment Unit common properties">
-
-       <!-- Include build properties to allow overwriting 
-            of properties for subsystem                    -->
-       <property file="project/build.properties" />    
-
-       <!-- ======================================================
-          Define corresponding subsystem properties
-                ====================================================== -->
-
-       <!-- Subsystem name -->
-       <property name="subsystem.name" value="${deployment.subsystem.name}"/>
-               
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${deployment.subsystem.prefix}"/>
-
-       <!-- ======================================================
-          Define component properties
-                ====================================================== -->
-                               
-       <!-- Component name prefix -->
-       <property name="component.prefix" value="lb" />
-                       
-       <!-- ======================================================
-          Define general component properties
-                ====================================================== -->
-       
-       <import file="${component.general.properties.file}" />
-                                               
-       <!-- ======================================================
-                Define extra properties here ...
-                ====================================================== -->
-                
-</project>
diff --git a/org.glite.deployment.lb/project/quattor-template.xsl b/org.glite.deployment.lb/project/quattor-template.xsl
deleted file mode 100644 (file)
index e0bd623..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<xsl:stylesheet version="1.0" 
-       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-       
-       <xsl:output method="xml" 
-               indent="yes"
-               encoding="UTF-8"
-               omit-xml-declaration="yes"/>
-
-       <!-- Definition of variables and parameters -->
-
-       <!-- global processing -->
-       <xsl:template match="/">
-template pro_software_glite_lb;
-
-#
-# 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
-#
-# glite-lb Quattor template v. <xsl:value-of select="/node/@version"/>
-#
-
-# Global dependencies  
-               <xsl:for-each select="node/dependencies">
-                       <xsl:apply-templates/>
-               </xsl:for-each>
-       
-               <xsl:for-each select="node/services/service">
-
-# <xsl:value-of select="@name"/> dependencies
-                       <xsl:for-each select="dependencies">
-                               <xsl:apply-templates/>
-                       </xsl:for-each>
-
-# <xsl:value-of select="@name"/> RPMS
-                       <xsl:for-each select="components">
-                               <xsl:apply-templates/>
-                       </xsl:for-each>
-
-               </xsl:for-each>
-       </xsl:template>
-
-       <xsl:template name="dependencies" match="external">
-"/software/packages"=pkg_repl("<xsl:value-of select="@name"/>","<xsl:value-of select="@version"/>-<xsl:value-of select="@age"/>","<xsl:value-of select="@arch"/>");
-       </xsl:template>
-       
-       <xsl:template name="components" match="component">
-"/software/packages"=pkg_repl("<xsl:value-of select="@name"/>","<xsl:value-of select="@version"/>-<xsl:value-of select="@age"/>","<xsl:value-of select="@arch"/>");
-       </xsl:template>
-
-</xsl:stylesheet>
diff --git a/org.glite.deployment.lb/project/version.properties b/org.glite.deployment.lb/project/version.properties
deleted file mode 100644 (file)
index 61f3e64..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#Thu Dec 09 08:14:11 CET 2004
-module.version=0.2.0
-module.build=68
-module.age=1
diff --git a/org.glite.jp.common/.cvsignore b/org.glite.jp.common/.cvsignore
deleted file mode 100644 (file)
index 3a4edf6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.project
diff --git a/org.glite.jp.common/Makefile b/org.glite.jp.common/Makefile
deleted file mode 100644 (file)
index 8626261..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-# defaults
-top_srcdir=.
-builddir=build
-top_builddir=${top_srcdir}/${builddir}
-stagedir=.
-distdir=.
-globalprefix=glite
-lbprefix=lb
-package=glite-jp-common
-version=0.0.0
-PREFIX=/opt/glite
-
-glite_location=/opt/glite
-globus_prefix=/opt/globus
-nothrflavour=gcc32
-thrflavour=gcc32pthr
-expat_prefix=/opt/expat
-ares_prefix=/opt/ares
-gsoap_prefix=/software/gsoap-2.6
-
-CC=gcc
-
--include Makefile.inc
-
-
-VPATH=${top_srcdir}/src:${top_srcdir}/test:${top_srcdir}/project:${jpproject}
-
-GLOBUSINC:= -I${globus_prefix}/include/${nothrflavour}
-
-
-DEBUG:=-g -O0 
-CFLAGS:=${DEBUG} -I. -I${top_srcdir}/interface -I${stagedir}/include \
-       ${GLOBUSINC}
-
-LINK:=libtool --mode=link ${CC} ${LDFLAGS} -rpath ${stagedir}/lib
-LINKXX:=libtool --mode=link ${CXX} ${LDFLAGS} 
-INSTALL:=libtool --mode=install install
-COMPILE:=libtool --mode=compile ${CC} ${CFLAGS}
-
-HDRS:=types.h context.h strmd5.h
-
-SRCS:=context.c strmd5.c
-OBJS:=${SRCS:.c=.lo}
-
-commonlib:= libglite_jp_common.la
-
-default all: compile
-
-compile: ${commonlib}
-
-${commonlib}: ${OBJS}
-       ${LINK} -o $@ ${OBJS}
-
-check: 
-       -echo nothing yet
-
-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} ${PREFIX}/lib
-
-dist: distsrc distbin
-
-# FIXME: just copied from LB
-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
-        
-clean:
-
-%.lo: %.c
-       ${COMPILE} -o $@ -c $< 
diff --git a/org.glite.jp.common/build.xml b/org.glite.jp.common/build.xml
deleted file mode 100755 (executable)
index f20263f..0000000
+++ /dev/null
@@ -1,93 +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.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}"/>
-               
-       <!-- ==============================================
-                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.jp.common/interface/context.h b/org.glite.jp.common/interface/context.h
deleted file mode 100644 (file)
index 20effb2..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef __GLITE_JP_CONTEXT
-#define __GLITE_JP_CONTEXT
-
-int glite_jp_init_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);
-
-
-#endif
diff --git a/org.glite.jp.common/interface/strmd5.h b/org.glite.jp.common/interface/strmd5.h
deleted file mode 100755 (executable)
index c5d76b6..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef _GLITE_STRMD5_H
-#define _GLITE_STRMD5_H
-
-#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);
-
-#endif /* _GLITE_STRMD5_H */
diff --git a/org.glite.jp.common/interface/types.h b/org.glite.jp.common/interface/types.h
deleted file mode 100644 (file)
index 70e8482..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-#ifndef __GLITE_JP_TYPES
-#define __GLITE_JP_TYPES
-
-#include <sys/time.h>
-
-typedef struct _glite_jp_error_t {
-       int     code;
-       char    *desc;
-       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;
-} *glite_jp_context_t;
-
-typedef enum {
-       GLITE_JP_FILECLASS_UNDEF,
-       GLITE_JP_FILECLASS_INPUT,
-       GLITE_JP_FILECLASS_OUTPUT,
-       GLITE_JP_FILECLASS_LBLOG,
-       GLITE_JP_FILECLASS_TAGS,
-       GLITE_JP_FILECLASS__LAST
-} glite_jp_fileclass_t;
-
-typedef struct {
-       char    *name;
-       int     sequence;
-       time_t  timestamp;
-       int     binary;
-       size_t  size;
-       char    *value;
-} glite_jp_tagval_t;
-
-typedef enum {
-       GLITE_JP_ATTR_UNDEF,
-       GLITE_JP_ATTR_OWNER,
-       GLITE_JP_ATTR_TIME,
-       GLITE_JP_ATTR_TAG,
-       GLITE_JP_ATTR__LAST
-} glite_jp_attrtype_t;
-
-typedef struct {
-       glite_jp_attrtype_t     type;
-       char    *name;
-} glite_jp_attr_t;
-
-typedef struct {
-       glite_jp_attr_t attr;
-       union {
-               char    *s;
-               int     i;
-               struct timeval time;
-               glite_jp_tagval_t tag;
-       } value;
-} 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__LAST,
-} glite_jp_queryop_t;
-
-typedef struct {
-       glite_jp_attr_t attr;
-       glite_jp_queryop_t op;
-       union _glite_jp_query_rec_val {
-               char    *s;
-               int     i;
-               struct timeval time;
-       } value,value2;
-} glite_jp_query_rec_t;
-
-#endif
diff --git a/org.glite.jp.common/project/build.properties b/org.glite.jp.common/project/build.properties
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.glite.jp.common/project/configure.properties.xml b/org.glite.jp.common/project/configure.properties.xml
deleted file mode 100644 (file)
index 5f0ea37..0000000
+++ /dev/null
@@ -1,52 +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
-
-       Configuration options for the gLite JP Common module
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       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
--->
-
-       <!-- ======================================================
-         Define extra properties here ...
-         ====================================================== -->
-        
-       <project name="JP Common configuration options">                                                                        
-               <target name="lbmakefiles">
-                       <exec executable="ln" failonerror="true">
-                               <arg line="-fs ${component.dir}/Makefile ${module.build.dir}/Makefile"/>
-                       </exec>
-                       <echo file="${module.build.dir}/Makefile.inc">
-top_srcdir=..
-builddir=build
-stagedir=${stage.abs.dir}
-distdir=${dist.dir}
-globalprefix=${global.prefix}
-jpprefix=${subsystem.prefix}
-package=${module.package.name}
-PREFIX=${install.dir}
-version=${module.version}
-glite_location=${with.glite.location}
-globus_prefix=${with.globus.prefix}
-expat_prefix=${with.expat.prefix}
-gsoap_prefix=${with.gsoap.prefix}
-ares_prefix=${with.ares.prefix}
-thrflavour=${with.globus.thr.flavor}
-nothrflavour=${with.globus.nothr.flavor}
-cppunit=${with.cppunit.prefix}
-jpproject=${subsystem.project.dir}
-project=${component.project.dir}
-                       </echo>
-           </target>
-       </project>
diff --git a/org.glite.jp.common/project/properties.xml b/org.glite.jp.common/project/properties.xml
deleted file mode 100755 (executable)
index b9d669d..0000000
+++ /dev/null
@@ -1,52 +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
-
-       Common build properties file for the gLite JP Common component
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$ 
-       
-       Revision history:
-       $Log$
-       Revision 1.1.1.1  2004/10/15 09:49:02  akrenek
--->
-
-<project name="JP Common component common properties">
-
-       <!-- Include build properties to allow overwriting 
-            of properties for subsystem                    -->
-       <property file="project/build.properties" />    
-
-       <!-- ======================================================
-          Define corresponding subsystem properties
-                ====================================================== -->
-
-       <!-- Subsystem name -->
-       <property name="subsystem.name" value="${jp.subsystem.name}"/>
-               
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${jp.subsystem.prefix}"/>
-
-       <!-- ======================================================
-          Define component properties
-                ====================================================== -->
-                               
-       <!-- Component name prefix -->
-       <property name="component.prefix" value="common" />
-                       
-       <!-- ======================================================
-          Define general component properties
-                ====================================================== -->
-       
-       <import file="${component.general.properties.file}" />
-                                               
-       <!-- ======================================================
-                Define extra properties here ...
-                ====================================================== -->
-                
-                                                               
-</project>
diff --git a/org.glite.jp.common/project/tar_exclude b/org.glite.jp.common/project/tar_exclude
deleted file mode 100644 (file)
index e1fcd1a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-tar_exclude
-CVS
-build.xml
-build
-build.properties
-properties.xml
-configure.properties.xml
-.cvsignore
-.project
-.cdtproject
diff --git a/org.glite.jp.common/project/version.properties b/org.glite.jp.common/project/version.properties
deleted file mode 100644 (file)
index 999300f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Dec 10 13:33:53 CET 2004
-module.version=0.1.0
-module.build=3
-module.age=1
diff --git a/org.glite.jp.common/src/context.c b/org.glite.jp.common/src/context.c
deleted file mode 100644 (file)
index 016bc59..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-#include <string.h>
-#include <stdlib.h>
-
-#include "types.h"
-#include "context.h"
-
-int glite_jp_init_context(glite_jp_context_t *ctx)
-{
-       *ctx = calloc(1,sizeof **ctx);
-}
-
-char *glite_jp_peer_name(glite_jp_context_t ctx)
-{
-       return strdup("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(e->source);
-               free(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.name); q->attr.name = NULL;
-       switch (q->attr.type) {
-               case GLITE_JP_ATTR_OWNER:
-               case GLITE_JP_ATTR_TAG:
-                       free(q->value.s); q->value.s = NULL;
-                       if (q->op == GLITE_JP_QUERYOP_WITHIN) {
-                               free(q->value2.s);
-                               q->value2.s = NULL;
-                       }
-                       break;
-               default: break;
-       }
-}
-
-int glite_jp_attr_copy(glite_jp_attr_t *dst,const glite_jp_attr_t *src)
-{
-       dst->name = src->name ? strdup(src->name) : NULL;
-       dst->type = src->type;
-       return 0;
-}
-
-int glite_jp_queryrec_copy(glite_jp_query_rec_t *dst, const glite_jp_query_rec_t *src)
-{
-       glite_jp_attr_copy(&dst->attr,&src->attr);
-       dst->op = src->op;
-       switch (src->attr.type) {
-               case GLITE_JP_ATTR_OWNER:
-               case GLITE_JP_ATTR_TAG:
-                       dst->value.s = strdup(src->value.s);
-                       if (dst->op == GLITE_JP_QUERYOP_WITHIN)
-                               dst->value2.s = strdup(src->value2.s);
-                       break;
-               case GLITE_JP_ATTR_TIME:
-                       memcpy(&dst->value.time,&src->value.time,sizeof dst->value.time);
-                       if (dst->op == GLITE_JP_QUERYOP_WITHIN)
-                               memcpy(&dst->value2.time,&src->value2.time,sizeof dst->value2.time);
-                       break;
-       }
-       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++);
-
-       ctx->deferred_func = realloc(ctx->deferred_func, (i+1) * sizeof *ctx->deferred_func);
-       ctx->deferred_func[i] = func;
-       ctx->deferred_func[i+1] = NULL;
-
-       ctx->deferred_arg = realloc(ctx->deferred_arg,(i+1) * sizeof *ctx->deferred_arg);
-       ctx->deferred_arg[i] = arg;
-       ctx->deferred_arg[i+1] = NULL;
-
-       return 0;
-}
diff --git a/org.glite.jp.common/src/strmd5.c b/org.glite.jp.common/src/strmd5.c
deleted file mode 100755 (executable)
index 87fd400..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-#include <openssl/md5.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "strmd5.h"
-
-static char mbuf[33];
-
-static int base64_encode(const void *enc, int enc_size, char *out, int out_max_size)
-{
-    static const char* b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
-
-    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;
-}
-
-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.jp.index/.cvsignore b/org.glite.jp.index/.cvsignore
deleted file mode 100644 (file)
index 3a4edf6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.project
diff --git a/org.glite.jp.index/Makefile b/org.glite.jp.index/Makefile
deleted file mode 100644 (file)
index 3b893cd..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-# defaults
-top_srcdir=.
-builddir=build
-top_builddir=${top_srcdir}/${builddir}
-stagedir=.
-distdir=.
-globalprefix=glite
-lbprefix=lb
-package=glite-lb-server
-version=0.0.0
-PREFIX=/opt/glite
-
-glite_location=/opt/glite
-globus_prefix=/opt/globus
-nothrflavour=gcc32
-thrflavour=gcc32pthr
-expat_prefix=/opt/expat
-ares_prefix=/opt/ares
-gsoap_prefix=/software/gsoap-2.6
-
-CC=gcc
-
--include Makefile.inc
-
-
-VPATH=${top_srcdir}/src:${top_srcdir}/examples:${top_srcdir}/test:${top_srcdir}/project:${jpproject}
-
-GLOBUS_LIBS:=-L${globus_prefix}/lib \
-       -lglobus_common_${nothrflavour} \
-       -lglobus_gssapi_gsi_${nothrflavour}
-
-DEBUG:=-g -O0  -DDEBUG
-
-CFLAGS:=${DEBUG} -I. -I${gsoap_prefix}/include -I${stagedir}/include
-LDFLAGS:=-L${stagedir}/lib
-
-LINK:=libtool --mode=link ${CC} ${LDFLAGS} 
-LINKXX:=libtool --mode=link ${CXX} ${LDFLAGS} 
-INSTALL:=libtool --mode=install install
-
-
-daemon:=glite-jp-indexd
-example:=jpis-test
-soap_prefix:=jpis_
-
-SRCS:= simple_server.c soap_ops.c \
-       ${soap_prefix}C.c \
-       ${soap_prefix}Server.c
-
-EXA_SRCS:=jpis-test.c ${soap_prefix}C.c ${soap_prefix}Client.c
-
-
-OBJS:=${SRCS:.c=.o} stdsoap2.o
-EXA_OBJS:=${EXA_SRCS:.c=.o} stdsoap2.o
-
-COMMONLIB:=-lglite_jp_common
-
-default all: compile
-
-compile: ${daemon} ${example}
-
-${daemon}: ${OBJS}
-       ${LINK} -o $@ ${OBJS} ${COMMONLIB} ${GLOBUS_LIBS}
-
-${example}: ${EXA_OBJS}
-       ${LINK} -o $@ ${EXA_OBJS}
-
-JobProvenanceIS.xh: JobProvenanceIS.wsdl JobProvenanceTypes.wsdl typemap.dat
-       cp  ${jpproject}/JobProvenanceTypes.wsdl .
-       ${gsoap_prefix}/bin/wsdl2h -t ${top_srcdir}/src/typemap.dat -c -o $@ $<
-       rm -f JobProvenanceTypes.wsdl
-
-${soap_prefix}C.c ${soap_prefix}H.h: JobProvenanceIS.xh
-       ${gsoap_prefix}/bin/soapcpp2 -w -c -p ${soap_prefix} JobProvenanceIS.xh
-
-#$(SOAP_PREFIX)H.h $(SOAP_PREFIX)C.c: LB.xh
-#        $(GSOAP_BIN_PATH)/soapcpp2 -w -c -p $(SOAP_PREFIX) LB.xh
-#
-#LB.xh: LB.wsdl typemap.dat
-#         $(GSOAP_BIN_PATH)/wsdl2h -c -o $@ LB.wsdl
-#
-
-
-check: 
-       -echo nothing yet
-
-doc:
-
-stage: compile
-       ${INSTALL} -m 755 ${daemon} ${stagedir}/bin
-
-dist: distsrc distbin
-
-# FIXME: just copied from LB
-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:
-       -mkdir -p ${PREFIX}/bin ${PREFIX}/etc ${PREFIX}/etc/init.d
-       for p in bkserverd bkindex; do \
-               ${INSTALL} -m 755 "glite_lb_$$p" "${PREFIX}/bin/glite-lb-$$p"; \
-       done
-
-       for f in dbsetup.sql index.conf.template; do \
-               ${INSTALL} -m 644 ${top_srcdir}/config/"glite-lb-$$f" ${PREFIX}/etc; \
-       done
-
-       ${INSTALL} -m 755 ${top_srcdir}/config/startup ${PREFIX}/etc/init.d/glite-lb-bkserverd
-
-clean:
-
-soap_ops.o jpis-test.o simple_server.o: ${soap_prefix}H.h
-
-# we have no real config.h but have to force gSoap not to use
-# linux ftime with broken (aka obsolete) DST information
-
-stdsoap2.o: ${gsoap_prefix}/devel/stdsoap2.c
-       test -f config.h || touch config.h
-       @echo 'The following warning "time_t (de)serialization is not MT safe on this platform" is harmless'
-       ${CC} -o $@ -c -DHAVE_CONFIG_H ${CFLAGS} ${gsoap_prefix}/devel/stdsoap2.c
-
diff --git a/org.glite.jp.index/build.xml b/org.glite.jp.index/build.xml
deleted file mode 100755 (executable)
index 547659a..0000000
+++ /dev/null
@@ -1,93 +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 Index module
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.1.1.1  2004/10/15 09:49:13  akrenek
--->
-
-<project name="index" default="dist">
-       
-       <!-- =========================================
-                Builds the GLite JP Index 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}"/>
-               
-       <!-- ==============================================
-                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.jp.index/project/JobProvenanceIS.wsdl b/org.glite.jp.index/project/JobProvenanceIS.wsdl
deleted file mode 100644 (file)
index 26f97a4..0000000
+++ /dev/null
@@ -1,531 +0,0 @@
-<WSDL:definitions
-       xmlns:tns="http://glite.org/wsdl/services/jp"
-       xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-       xmlns:jp="http://glite.org/wsdl/types/jp"
-       xmlns:SOAP="http://schemas.xmlsoap.org/wsdl/soap/"
-       xmlns:WSDL="http://schemas.xmlsoap.org/wsdl/"
-       xmlns="http://schemas.xmlsoap.org/wsdl/"
-       targetNamespace="http://glite.org/wsdl/services/jp"
-       name="JobProvenance">
-
-       <WSDL:types>
-               <schema
-                       targetNamespace="http://glite.org/wsdl/types/jp"
-                       xmlns="http://www.w3.org/2001/XMLSchema"
-                       elementFormDefault="unqualified" attributeFormDefault="unqualified">
-                       <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
-
-                       <simpleType name="Attribute">
-                               <restriction base="xsd:string">
-                               </restriction>
-                       </simpleType>
-                       <simpleType name="UploadClass">
-                               <restriction base="xsd:string">
-                                       <enumeration value="INPUT-SANDBOX"/>
-                                       <enumeration value="OUTPUT-SANDBOX"/>
-                                       <enumeration value="JOB-LOG"/>
-                               </restriction>
-                       </simpleType>
-                       <simpleType name="QueryOp">
-                               <restriction base="xsd:string">
-                                       <enumeration value="EQUAL"/>
-                                       <enumeration value="UNEQUAL"/>
-                                       <enumeration value="LESS"/>
-                                       <enumeration value="GREATER"/>
-                                       <enumeration value="WITHIN"/>
-                               </restriction>
-                       </simpleType>
-                       <complexType name="TagValue">
-                               <sequence>
-                                       <element name="name" type="xsd:string" minOccurs="1" maxOccurs="1" nillable="true"/>
-                                       <element name="sequence" type="xsd:int" minOccurs="0" maxOccurs="1"/>
-                                       <element name="timestamp" type="xsd:dateTime" minOccurs="0" maxOccurs="1" nillable="true"/>
-                                       <element name="stringValue" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
-                                       <element name="blobValue" type="xsd:base64Binary" minOccurs="0" maxOccurs="1" nillable="true"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="Attributes">
-                               <sequence>
-                                       <element name="item" type="jp:Attribute" minOccurs="0" maxOccurs="unbounded" nillable="true"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="GenericJPFaultType">
-                               <sequence>
-                                       <element name="source" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-                                       <element name="code" type="xsd:int" minOccurs="1" maxOccurs="1"/>
-                                       <element name="text" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-                                       <element name="description" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="reason" type="jp:GenericJPFaultType" minOccurs="0" maxOccurs="1"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="PrimaryQueryElement">
-                               <sequence>
-                                       <element name="attr" type="jp:Attribute" minOccurs="1" maxOccurs="1"/>
-                                       <element name="op" type="jp:QueryOp" minOccurs="1" maxOccurs="1"/>
-                                       <element name="value" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="PrimaryQuery">
-                               <sequence>
-                                       <element name="item" type="jp:PrimaryQueryElement" minOccurs="0" maxOccurs="unbounded"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="IndexQueryRecord">
-                               <sequence>
-                                       <element name="op" type="jp:QueryOp" minOccurs="1" maxOccurs="1"/>
-                                       <element name="value" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="IndexQueryElement">
-                               <sequence>
-                                       <element name="attr" type="jp:Attribute" minOccurs="1" maxOccurs="1"/>
-                                       <element name="record" type="jp:IndexQueryRecord" minOccurs="1"  maxOccurs="unbounded"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="IndexQuery">
-                               <sequence>
-                                       <element name="item" type="jp:IndexQueryElement" minOccurs="1" maxOccurs="unbounded"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="JobRecord">
-                               <sequence>
-                                       <element name="jobid" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-                                       <element name="PSContact" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="JobRecords">
-                               <sequence>
-                                       <element name="record" type="jp:JobRecord" minOccurs="0" maxOccurs="unbounded"/>
-                               </sequence>
-                       </complexType>
-
-                       <complexType name="AttrUpdate">
-                               <sequence>
-                                       <element name="name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-                                       <element name="value" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="AttrUpdates">
-                               <sequence>
-                                       <element name="item" type="jp:AttrUpdate" minOccurs="0" maxOccurs="unbounded" nillable="true"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="JobUpdate">
-                               <sequence>
-                                       <element name="jobid" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-                                       <element name="attributes" type="jp:AttrUpdates" minOccurs="1" maxOccurs="1"/>
-                                       <element name="tags" type="jp:AttrUpdates" minOccurs="1" maxOccurs="1"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="UpdateJobsData">
-                               <sequence>
-                                       <element name="job" type="jp:JobUpdate" minOccurs="0" maxOccurs="unbounded"/>
-                               </sequence>
-                       </complexType>
-                               
-                       <complexType name="FeedIndexResponse">
-                               <sequence>
-                                       <element name="feedId" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
-                                       <element name="expires" type="xsd:dateTime" minOccurs="0" maxOccurs="1" nillable="true"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="GetJobResponse">
-                               <sequence>
-                                       <element name="jobLog" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
-                                       <element name="inputSandbox" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
-                                       <element name="outputSandbox" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
-                                       <element name="tags" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="StartUploadResponse">
-                               <sequence>
-                                       <element name="destination" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
-                                       <element name="commitBefore" type="xsd:dateTime" minOccurs="0" maxOccurs="1" nillable="true"/>
-                               </sequence>
-                       </complexType>
-                       <element name="GenericJPFault" type="jp:GenericJPFaultType"/>
-               </schema>
-       </WSDL:types>
-       <message name="RegisterJobRequest">
-               <part name="x" type="xsd:string"/>
-       </message>
-       <message name="StartUploadRequest">
-               <part name="uclass" type="jp:UploadClass"/>
-               <part name="commitTimeout" type="xsd:duration"/>
-               <part name="contentType" type="xsd:string"/>
-       </message>
-       <message name="StartUploadResponse">
-               <part name="destination" type="xsd:string"/>
-               <part name="commitBefore" type="xsd:dateTime"/>
-       </message>
-       <message name="CommitUploadRequest">
-               <part name="destination" type="xsd:string"/>
-       </message>
-       <message name="RecordTagRequest">
-               <part name="jobid" type="xsd:string"/>
-               <part name="tag" type="jp:TagValue"/>
-       </message>
-       <message name="FeedIndexRequest">
-               <part name="destination" type="xsd:string"/>
-               <part name="attributes" type="jp:Attributes"/>
-               <part name="conditions" type="jp:PrimaryQuery"/>
-               <part name="continuous" type="xsd:boolean"/>
-       </message>
-       <message name="FeedIndexResponse">
-               <part name="feedId" type="xsd:string"/>
-               <part name="expires" type="xsd:dateTime"/>
-       </message>
-       <message name="FeedIndexRefreshRequest">
-               <part name="feedId" type="xsd:string"/>
-       </message>
-       <message name="GetJobRequest">
-               <part name="jobid" type="xsd:string"/>
-       </message>
-       <message name="GetJobResponse">
-               <part name="jobLog" type="xsd:string"/>
-               <part name="inputSandbox" type="xsd:string"/>
-               <part name="outputSandbox" type="xsd:string"/>
-               <part name="tags" type="xsd:string"/>
-       </message>
-       <message name="GenericJPFault">
-               <part name="fault" element="jp:GenericJPFault"/>
-       </message>
-       <message name="EmptyResponse"/>
-       <portType name="JobProvenancePS_PortType">
-               <operation name="RegisterJob">
-                       <documentation>Register job with JP primary storage.
-Job registration in LB is propagated to JP immediately so that JP is aware of the job,
-despite no furhter information is available in it.
-
-Input: JobId
-
-Output: N/A
-
-Faults: GenericJPFault
-                       </documentation>
-                       <input message="tns:RegisterJobRequest"/>
-                       <output message="tns:EmptyResponse"/>
-                       <fault name="f" message="tns:GenericJPFault"/>
-               </operation>
-               <operation name="StartUpload">
-                       <documentation>Initiate upload of of sandbox/dump of job life log from LB.
-WM component responsible for job sandbox management and LB server call JP to declare
-intention to upload intput/output sandbox and job life log.
-
-Input:
-
-uclass: type of the upload - INPUT_SANDBOX, OUTPUT_SANDBOX, JOB_LOG
-
-commitTimeout: upper limit on time for which JP waits for committing this upload transaction
-
-contentType: MIME type of the uploaded file
-
-Output:
-
-destination: URL where the client should upload the file
-
-commitBefore: acutual time when the upload transaction times out
-
-Faults: GenericJPFault
-
-
-Initiate upload of of sandbox/dump of job life log from LB.</documentation>
-                       <input message="tns:StartUploadRequest"/>
-                       <output message="tns:StartUploadResponse"/>
-                       <fault name="f" message="tns:GenericJPFault"/>
-               </operation>
-               <operation name="CommitUpload">
-                       <documentation>Confirm upload.
-Should be called after a file upload initiaded with StartUpload is finished.
-
-Input:
-
-destination: Upload destination URL (to match with the original request)
-
-Output:
-
-Faults: GenericJPFault
-                       </documentation>
-                       <input message="tns:CommitUploadRequest"/>
-                       <output message="tns:EmptyResponse"/>
-                       <fault name="f" message="tns:GenericJPFault"/>
-               </operation>
-               <operation name="RecordTag">
-                       <documentation>Record a value of user tag.
-JP tags are either standalone or override values of their LB counterparts.
-However, JP tag values are still distinguishable those inherited from LB.
-JP tags may be either strings or blobs.
-
-Input:
-
-jobid:
-
-tag: structure containing name, timestamp, optional sequence number to order tag values
-without relying on timestamps, and string or blob value.
-
-Output: N/A
-
-Faults: GenericJPFault
-                       </documentation>
-                       <input message="tns:RecordTagRequest"/>
-                       <output message="tns:EmptyResponse"/>
-                       <fault name="f" message="tns:GenericJPFault"/>
-               </operation>
-               <operation name="FeedIndex">
-                       <documentation>Start feeding JP index server.
-Called by the index server to start batch feed, and optionally also subscribe for incremental feed.
-
-JP index server subscribes with JP primary storage using a query
-containing conditions on primary metadata and a list of queryable attributes
-of the index server (i.e. data which should be sent to the index server).
-
-When a matching job record is created or modified within the primary storage
-the job record data are sent to the subscribed index server.
-
-The subscription is soft-state, it expires after certain time unless refreshed by the client explicitely.
-
-In the batch mode the query has the same form
-with additional flag asking for all matching records (i.e.\ not only
-arriving afterwards).
-
-Input:
-
-destination: where to send the job record data
-
-attributes: which job record attributes should be sent to the requesting index server
-
-conditions: list of query conditions. Each conditions has the form Attribute Operator Value,
-where Attribute is any of job record attributes and Operator is one of EQUAL, UNEQUAL, LESS, GREATER, WITHIN.
-
-continuous: flag determining that the query is incremental (not batch) 
-
-Output:
-
-feedId: unique Id of the feed request, to be used in refresh, cancelation etc.
-
-expires: when the feed times out. Must be refreshed before this time.
-
-Faults: GenericJPFault
-                       </documentation>
-                       <input message="tns:FeedIndexRequest"/>
-                       <output message="tns:FeedIndexResponse"/>
-                       <fault name="f" message="tns:GenericJPFault"/>
-               </operation>
-               <operation name="FeedIndexRefresh">
-                       <documentation>Extend batch feed subscription (used by index server)
-
-Input: feedId returned previously by FeedIndex
-
-Output: the same as for FeedIndex
-
-Faults: GenericJPFault
-                       </documentation>
-                       <input message="tns:FeedIndexRefreshRequest"/>
-                       <output message="tns:FeedIndexResponse"/>
-                       <fault name="f" message="tns:GenericJPFault"/>
-               </operation>
-               <operation name="GetJob">
-                       <documentation>Retrieve job record URL's when jobid is known
-Used either to bypass JP index server query for this specific case, or after the index server query to
-retrieve actual job record.
-
-Input: jobid
-
-Output:
-
-jobLog, inputSandbox, outputSandbox, tags: URL's to components of the job record.
-
-Faults: GenericJPFault
-                       </documentation>
-                       <input message="tns:GetJobRequest"/>
-                       <output message="tns:GetJobResponse"/>
-                       <fault name="f" message="tns:GenericJPFault"/>
-               </operation>
-       </portType>
-       <binding name="JobProvenancePS" type="tns:JobProvenancePS_PortType">
-               <SOAP:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
-               <operation name="RegisterJob">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-               <operation name="StartUpload">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-               <operation name="CommitUpload">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-               <operation name="RecordTag">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-               <operation name="FeedIndex">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-               <operation name="FeedIndexRefresh">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-               <operation name="GetJob">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-       </binding>
-       <service name="JobProvenancePS">
-               <documentation>Job Provenance Primary Storage service</documentation>
-               <port name="JobProvenancePS" binding="tns:JobProvenancePS">
-                       <SOAP:address location="http://localhost:10001"/>
-               </port>
-       </service>
-
-       <message name="QueryJobsRequest">
-               <part name="conditions" type="jp:IndexQuery"/>
-       </message>
-
-       <message name="QueryJobsResponse">
-               <part name="jobs" type="jp:JobRecords"/>
-       </message>
-               
-       <message name="UpdateJobsRequest">
-               <part name="feedId" type="xsd:string"/>
-               <part name="data" type="jp:UpdateJobsData"/>
-               <part name="feedDone" type="xsd:boolean"/>
-       </message>
-       
-       <portType name="JobProvenanceIS_PortType">
-               <operation name="UpdateJobs">
-                       <documentation>Store or update information on jobs within the JP index server.
-Called directly by the primary storage, used for both batch and incremental feed.
-
-Input:
-
-data: list of job record updates. Each contains jobid, list of JP attribute values and user tag values.
-
-feedDone: flag indicating end of batch feed. (In order to avoid potential problems with buffer allocation
-the huge dataset of batch feed is split into reasonable chunks and delivered with more UpdateJobs calls.)
-
-Output: N/A
-
-Faults: GenericJPFault
-
-
-                       </documentation>
-                       <input message="tns:UpdateJobsRequest"/>
-                       <output message="tns:EmptyResponse"/>
-                       <fault name="f" message="tns:GenericJPFault"/>
-               </operation>
-               <operation name="QueryJobs">
-                       <documentation>Retrieve pointers to job records of jobs matching a query.
-Input: conditions - list of lists of query conditions.
-       Elements of the inner lists refer to a single job attribute, the conditions are or-ed.
-       Elements of the outer list may refer to different job attributes, they are and-ed.
-
-Output:
-
-jobs: list of JobId, PSContact (URL of the primary storage which manges this job) pairs
-
-Faults: GenericJPFault
-                       </documentation>
-                       <input message="tns:QueryJobsRequest"/>
-                       <output message="tns:QueryJobsResponse"/>
-                       <fault name="f" message="tns:GenericJPFault"/>
-               </operation>
-       </portType>
-
-       <binding name="JobProvenanceIS" type="tns:JobProvenanceIS_PortType">
-               <SOAP:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
-               <operation name="UpdateJobs">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-               <operation name="QueryJobs">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-       </binding>
-
-       <service name="JobProvenanceIS">
-               <documentation>Job Provenance Index service</documentation>
-               <port name="JobProvenanceIS" binding="tns:JobProvenanceIS">
-                       <SOAP:address location="http://localhost:10001"/>
-               </port>
-       </service>
-               
-
-</WSDL:definitions>
diff --git a/org.glite.jp.index/project/build.properties b/org.glite.jp.index/project/build.properties
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.glite.jp.index/project/configure.properties.xml b/org.glite.jp.index/project/configure.properties.xml
deleted file mode 100644 (file)
index 72af8f4..0000000
+++ /dev/null
@@ -1,53 +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
-
-       Configuration options for the gLite JP Index module
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.2  2004/11/22 14:00:37  dimeglio
-       Updated to use standard files
-       Fixed names (was using common instead of real module name)
-       
-       Revision 1.1.1.1  2004/10/15 09:49:13  akrenek
--->
-
-       <!-- ======================================================
-         Define extra properties here ...
-         ====================================================== -->
-        
-       <project name="JP Common configuration options">                                                                        
-               <target name="lbmakefiles">
-                       <exec executable="ln" failonerror="true">
-                               <arg line="-fs ${component.dir}/Makefile ${module.build.dir}/Makefile"/>
-                       </exec>
-                       <echo file="${module.build.dir}/Makefile.inc">
-top_srcdir=..
-builddir=build
-stagedir=${stage.abs.dir}
-distdir=${dist.dir}
-globalprefix=${global.prefix}
-lbprefix=${subsystem.prefix}
-package=${module.package.name}
-PREFIX=${install.dir}
-version=${module.version}
-glite_location=${with.glite.location}
-globus_prefix=${with.globus.prefix}
-expat_prefix=${with.expat.prefix}
-gsoap_prefix=${with.gsoap.prefix}
-ares_prefix=${with.ares.prefix}
-thrflavour=${with.globus.thr.flavor}
-nothrflavour=${with.globus.nothr.flavor}
-cppunit=${with.cppunit.prefix}
-jpproject=${subsystem.project.dir}
-project=${component.project.dir}
-                       </echo>
-           </target>
-       </project>
diff --git a/org.glite.jp.index/project/properties.xml b/org.glite.jp.index/project/properties.xml
deleted file mode 100755 (executable)
index 5f56392..0000000
+++ /dev/null
@@ -1,52 +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
-
-       Common build properties file for the gLite JP Index component
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$ 
-       
-       Revision history:
-       $Log$
-       Revision 1.1.1.1  2004/10/15 09:49:13  akrenek
--->
-
-<project name="JP Index component common properties">
-
-       <!-- Include build properties to allow overwriting 
-            of properties for subsystem                    -->
-       <property file="project/build.properties" />    
-
-       <!-- ======================================================
-          Define corresponding subsystem properties
-                ====================================================== -->
-
-       <!-- Subsystem name -->
-       <property name="subsystem.name" value="${jp.subsystem.name}"/>
-               
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${jp.subsystem.prefix}"/>
-
-       <!-- ======================================================
-          Define component properties
-                ====================================================== -->
-                               
-       <!-- Component name prefix -->
-       <property name="component.prefix" value="index" />
-                       
-       <!-- ======================================================
-          Define general component properties
-                ====================================================== -->
-       
-       <import file="${component.general.properties.file}" />
-                                               
-       <!-- ======================================================
-                Define extra properties here ...
-                ====================================================== -->
-                
-                                                               
-</project>
diff --git a/org.glite.jp.index/project/tar_exclude b/org.glite.jp.index/project/tar_exclude
deleted file mode 100644 (file)
index e1fcd1a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-tar_exclude
-CVS
-build.xml
-build
-build.properties
-properties.xml
-configure.properties.xml
-.cvsignore
-.project
-.cdtproject
diff --git a/org.glite.jp.index/project/version.properties b/org.glite.jp.index/project/version.properties
deleted file mode 100644 (file)
index a0d1638..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Dec 10 13:35:33 CET 2004
-module.version=0.1.0
-module.build=2
-module.age=1
diff --git a/org.glite.jp.index/src/simple_server.c b/org.glite.jp.index/src/simple_server.c
deleted file mode 100644 (file)
index ccaa5a7..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-#include "glite/jp/types.h"
-#include "glite/jp/context.h"
-
-#include "jpis_H.h"
-
-int main() {
-   struct soap soap;
-   int i, m, s; // master and slave sockets
-
-   glite_jp_context_t  ctx;
-
-   soap_init(&soap);
-   glite_jp_init_context(&ctx);
-   soap.user = (void *) ctx;
-
-   srand48(time(NULL)); /* feed id generation */
-
-   m = soap_bind(&soap, NULL, 8902, 100);
-   if (m < 0)
-      soap_print_fault(&soap, stderr);
-   else
-   {
-      fprintf(stderr, "Socket connection successful: master socket = %d\n", m);
-      for (i = 1; ; i++) {
-         s = soap_accept(&soap);
-         if (s < 0) {
-            soap_print_fault(&soap, stderr);
-            break;
-         }
-         soap_serve(&soap); // process RPC request
-         soap_destroy(&soap); // clean up class instances
-         soap_end(&soap); // clean up everything and close socket
-        glite_jp_run_deferred(ctx);
-      }
-   }
-   soap_done(&soap); // close master socket
-
-   return 0;
-}
diff --git a/org.glite.jp.index/src/soap_ops.c b/org.glite.jp.index/src/soap_ops.c
deleted file mode 100644 (file)
index 5af7352..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <stdio.h>
-#include <fcntl.h>
-
-#include "glite/jp/types.h"
-#include "glite/jp/context.h"
-
-#include "jpis_H.h"
-#include "JobProvenanceIS.nsmap"
-
-static struct jptype__GenericJPFaultType *jp2s_error(struct soap *soap,
-               const glite_jp_error_t *err)
-{
-       struct jptype__GenericJPFaultType *ret = NULL;
-       if (err) {
-               ret = soap_malloc(soap,sizeof *ret);
-               memset(ret,0,sizeof *ret);
-               ret->code = err->code;
-               ret->source = soap_strdup(soap,err->source);
-               ret->text = soap_strdup(soap,strerror(err->code));
-               ret->description = soap_strdup(soap,err->desc);
-               ret->reason = jp2s_error(soap,err->reason);
-       }
-       return ret;
-}
-
-static void err2fault(const glite_jp_context_t ctx,struct soap *soap)
-{
-       char    *et;
-       struct SOAP_ENV__Detail *detail = soap_malloc(soap,sizeof *detail);
-       struct _GenericJPFault *f = soap_malloc(soap,sizeof *f);
-
-
-       f->jptype__GenericJPFault = jp2s_error(soap,ctx->error);
-
-       detail->__type = SOAP_TYPE__GenericJPFault;
-       detail->value = f;
-       detail->__any = NULL;
-
-       soap_receiver_fault(soap,"Oh, shit!",NULL);
-       if (soap->version == 2) soap->fault->SOAP_ENV__Detail = detail;
-       else soap->fault->detail = detail;
-}
-
-static void s2jp_tag(const struct jptype__TagValue *stag,glite_jp_tagval_t *jptag)
-{
-       memset(jptag,0,sizeof *jptag);
-       jptag->name = strdup(stag->name);
-       jptag->sequence = stag->sequence ? *stag->sequence : 0;
-       jptag->timestamp = stag->timestamp ? *stag->timestamp : 0;
-       if (stag->stringValue) jptag->value = strdup(stag->stringValue);
-       else if (stag->blobValue) {
-               jptag->binary = 1;
-               jptag->size = stag->blobValue->__size;
-               jptag->value = (char *) stag->blobValue->__ptr;
-       }
-}
-
-#define CONTEXT_FROM_SOAP(soap,ctx) glite_jp_context_t ctx = (glite_jp_context_t) ((soap)->user)
-
-SOAP_FMAC5 int SOAP_FMAC6 jpsrv__UpdateJobs(
-       struct soap *soap,
-       char *feed_id,
-       struct jptype__UpdateJobsData *jobs,
-       enum xsd__boolean done
-)
-{
-       printf("%s items %d jobid %s\n",__FUNCTION__,jobs->__sizejob,
-                       jobs->job[0]->jobid);
-       return SOAP_OK;
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 jpsrv__QueryJobs(
-       struct soap *soap,
-       struct jptype__IndexQuery *query,
-       struct jpsrv__QueryJobsResponse *resp
-)
-{
-       puts(__FUNCTION__);
-       return SOAP_OK;
-}
-
diff --git a/org.glite.jp.index/src/typemap.dat b/org.glite.jp.index/src/typemap.dat
deleted file mode 100644 (file)
index 7032cb2..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-jpsrv = http://glite.org/wsdl/services/jp
-jptype = http://glite.org/wsdl/types/jp
diff --git a/org.glite.jp.primary/.cvsignore b/org.glite.jp.primary/.cvsignore
deleted file mode 100644 (file)
index 3a4edf6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.project
diff --git a/org.glite.jp.primary/Makefile b/org.glite.jp.primary/Makefile
deleted file mode 100644 (file)
index 2e9b3c4..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-# defaults
-top_srcdir=.
-builddir=build
-top_builddir=${top_srcdir}/${builddir}
-stagedir=.
-distdir=.
-globalprefix=glite
-jpprefix=jp
-package=glite-jp-primary
-version=0.0.0
-PREFIX=/opt/glite
-
-glite_location=/opt/glite
-globus_prefix=/opt/globus
-nothrflavour=gcc32
-thrflavour=gcc32pthr
-expat_prefix=/opt/expat
-ares_prefix=/opt/ares
-gsoap_prefix=/software/gsoap-2.6
-
-CC=gcc
-
--include Makefile.inc
-
-
-VPATH=${top_srcdir}/src:${top_srcdir}/examples:${top_srcdir}/test:${top_srcdir}/project:${stagedir}/interface
-
-GLOBUS_LIBS:=-L${globus_prefix}/lib \
-       -lglobus_common_${nothrflavour} \
-       -lglobus_gssapi_gsi_${nothrflavour}
-
-DEBUG:=-g -O0  -DDEBUG
-
-CFLAGS:=${DEBUG} -I. -I${top_srcdir}/src -I${gsoap_prefix}/include -I${stagedir}/include
-LDFLAGS:=-L${stagedir}/lib
-
-LINK:=libtool --mode=link ${CC} ${LDFLAGS} 
-LINKXX:=libtool --mode=link ${CXX} ${LDFLAGS} 
-INSTALL:=libtool --mode=install install
-
-
-daemon:=glite-jp-primarystoraged
-example:=jpps-test
-ps_prefix:=jpps_
-is_prefix:=jpis_
-
-gsoap_version=`${gsoap_prefix}/bin/soapcpp2 -version 2>&1 | cut -d' ' -f4 | perl -F\\\\. -nae '$$F[2] =~ s/\D*$$//; print $$F[2]+100*$$F[1]+10000*$$F[0]'`
-
-CFLAGS+=-DGSOAP_VERSION=${gsoap_version}
-
-
-SRCS:= simple_server.c soap_ops.c \
-       ftp_backend.c \
-       feed.c tags.c\
-       is_client.c \
-       ${ps_prefix}ServerLib.c \
-       ${is_prefix}ClientLib.c jpps_C.c
-#      env_C.c
-
-EXA_SRCS:=jpps-test.c ${ps_prefix}C.c ${ps_prefix}Client.c
-
-
-OBJS:=${SRCS:.c=.o}
-EXA_OBJS:=${EXA_SRCS:.c=.o}
-
-COMMONLIB:=-lglite_jp_common
-GSOAPLIB:=-L${gsoap_prefix}/lib -lgsoap${GSOAP_DEBUG}
-
-default all: compile
-
-compile: ${daemon} ${example}
-
-${daemon}: ${OBJS}
-       ${LINK} -o $@ ${OBJS} ${COMMONLIB} ${GSOAPLIB} ${GLOBUS_LIBS} 
-
-${example}: ${EXA_OBJS}
-       ${LINK} -o $@ ${EXA_OBJS} ${GSOAPLIB}  
-
-JobProvenanceIS.xh JobProvenancePS.xh: %.xh: %.wsdl JobProvenanceTypes.wsdl typemap.dat
-       cp  ${stagedir}/interface/JobProvenanceTypes.wsdl .
-       ${gsoap_prefix}/bin/wsdl2h  -t ${top_srcdir}/src/typemap.dat -c -o $@ $<
-       rm -f JobProvenanceTypes.wsdl
-
-${ps_prefix}Client.c ${ps_prefix}ClientLib.c  \
-${ps_prefix}Server.c ${ps_prefix}ServerLib.c  \
-${ps_prefix}C.c ${ps_prefix}H.h: JobProvenancePS.xh
-       ${gsoap_prefix}/bin/soapcpp2 -n -w -c -p ${ps_prefix} JobProvenancePS.xh
-
-${is_prefix}ClientLib.c ${is_prefix}Client.c \
-${is_prefix}C.c ${is_prefix}H.h: JobProvenanceIS.xh
-       ${gsoap_prefix}/bin/soapcpp2 -n -w -c -p ${is_prefix} JobProvenanceIS.xh
-
-env_C.c env_Server.c:
-       touch env.xh
-       cp  ${jpproject}/JobProvenanceTypes.wsdl .
-       ${gsoap_prefix}/bin/wsdl2h  -t ${top_srcdir}/src/typemap.dat -c -o env.xh JobProvenanceTypes.wsdl
-       rm -f JobProvenanceTypes.wsdl
-       ${gsoap_prefix}/bin/soapcpp2 -w -c -p env_ env.xh
-
-#$(SOAP_PREFIX)H.h $(SOAP_PREFIX)C.c: LB.xh
-#        $(GSOAP_BIN_PATH)/soapcpp2 -w -c -p $(SOAP_PREFIX) LB.xh
-#
-#LB.xh: LB.wsdl typemap.dat
-#         $(GSOAP_BIN_PATH)/wsdl2h -c -o $@ LB.wsdl
-#
-
-
-simple_server.o: ${is_prefix}H.h ${ps_prefix}H.h
-
-check: 
-       -echo nothing yet
-
-doc:
-
-stage: compile
-       ${MAKE} PREFIX=${stagedir} DOSTAGE=yes install
-
-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:
-       -mkdir -p ${PREFIX}/bin ${PREFIX}/etc ${PREFIX}/examples ${PREFIX}/etc/init.d
-       ${INSTALL} -m 755 ${daemon} ${PREFIX}/bin
-       ${INSTALL} -m 755 jpps-test ${PREFIX}/examples/glite-jp-primary-test
-
-
-clean:
-
-simple_server.o soap_ops.o jpps-test.o: ${ps_prefix}H.h
-
-# we have no real config.h but have to force gSoap not to use
-# linux ftime with broken (aka obsolete) DST information
-
-stdsoap2.o: ${gsoap_prefix}/devel/stdsoap2.c
-       test -f config.h || touch config.h
-       @echo 'The following warning "time_t (de)serialization is not MT safe on this platform" is harmless'
-       ${CC} -o $@ -c -DWITH_NONAMESPACES -DHAVE_CONFIG_H ${CFLAGS} ${gsoap_prefix}/devel/stdsoap2.c
-
diff --git a/org.glite.jp.primary/build.xml b/org.glite.jp.primary/build.xml
deleted file mode 100755 (executable)
index 28c0d13..0000000
+++ /dev/null
@@ -1,97 +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 Primary module
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.2  2004/11/22 13:55:30  dimeglio
-       First version of this file
-       Use central subsystem definition
-       
-       Revision 1.1.1.1  2004/10/15 09:49:24  akrenek
--->
-
-<project name="primary" 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}"/>
-               
-       <!-- ==============================================
-                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.jp.primary/examples/jpps-test.c b/org.glite.jp.primary/examples/jpps-test.c
deleted file mode 100644 (file)
index 8cf9c6f..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-#include <stdio.h>
-#include <sysexits.h>
-#include <string.h>
-#include <assert.h>
-
-#include "jpps_H.h"
-#include "jpps_.nsmap"
-
-#include "jptype_map.h"
-
-static void usage(const char *me)
-{
-       fprintf(stderr,"%s: [-s server-url] operation args \n\n"
-                       "       operations are:\n"
-                       "               RegisterJob jobid\n"
-                       "               StartUpload jobid class(0,1,2) commit_before mimetype\n"
-                       "               CommitUpload destination\n"
-                       "               RecordTag jobid tagname sequence stringvalue\n"
-                       "               GetJob jobid\n"
-                       "               FeedIndex destination query_number history continuous\n"
-                       "               FeedIndexRefresh feedid\n"
-               ,me);
-
-       exit (EX_USAGE);
-}
-       
-static int check_fault(struct soap *soap,int err) {
-       struct SOAP_ENV__Detail *detail;
-       struct jptype__GenericJPFaultType       *f;
-       char    *reason,indent[200] = "  ";
-
-       switch(err) {
-               case SOAP_OK: puts("OK");
-                             break;
-               case SOAP_FAULT:
-               case SOAP_SVR_FAULT:
-                       if (soap->version == 2) {
-                               detail = soap->fault->SOAP_ENV__Detail;
-                               reason = soap->fault->SOAP_ENV__Reason;
-                       }
-                       else {
-                               detail = soap->fault->detail;
-                               reason = soap->fault->faultstring;
-                       }
-                       fputs(reason,stderr);
-                       putc('\n',stderr);
-                       assert(detail->__type == SOAP_TYPE__GenericJPFault);
-#if GSOAP_VERSION >=20700
-                       f = ((struct _GenericJPFault *) detail->fault)
-#else
-                       f = ((struct _GenericJPFault *) detail->value)
-#endif
-                               -> jptype__GenericJPFault;
-
-                       while (f) {
-                               fprintf(stderr,"%s%s: %s (%s)\n",indent,
-                                               f->source,f->text,f->description);
-                               f = f->reason;
-                               strcat(indent,"  ");
-                       }
-                       return -1;
-
-               default: soap_print_fault(soap,stderr);
-                        return -1;
-       }
-       return 0;
-}
-
-static struct jptype__Attribute sample_attr[] = {
-                       { OWNER, NULL },
-                       { TIME, "submitted" },
-                       { TAG, "test" },
-};
-
-static struct jptype__PrimaryQueryElement sample_query[][5] = {
-       {
-               { sample_attr+OWNER, EQUAL, "unknown", NULL },
-               { NULL, 0, NULL, NULL }
-       },
-};
-
-int main(int argc,char *argv[])
-{
-       char    *server = "http://localhost:8901";
-       int     opt;
-       struct soap     *soap = soap_new();
-
-       if (argc < 2) usage(argv[0]); 
-
-       soap_init(soap);
-       soap_set_namespaces(soap, jpps__namespaces);
-
-       while ((opt = getopt(argc,argv,"s:")) >= 0) switch (opt) {
-               case 's': server = optarg;
-                         argv += 2;
-                       break;
-               case '?': usage(argv[0]);
-       }
-
-       if (!strcasecmp(argv[1],"RegisterJob")) {
-               struct jpsrv__RegisterJobResponse       r;
-
-               if (argc != 3) usage(argv[0]);
-               check_fault(soap,
-                       soap_call_jpsrv__RegisterJob(soap,server,"",argv[2],&r));
-       } else if (!strcasecmp(argv[1], "StartUpload")) {
-               struct jpsrv__StartUploadResponse r;
-
-               if (argc != 6) usage(argv[0]);
-               if (!check_fault(soap,
-                               soap_call_jpsrv__StartUpload(soap, server, "",
-                                       argv[2], atoi(argv[3]), atoi(argv[4]), argv[5], &r))) {
-                       printf("Destination: %s\nCommit before: %s\n", r.destination, ctime(&r.commitBefore));
-               }
-       } else if (!strcasecmp(argv[1], "CommitUpload")) {
-               struct jpsrv__CommitUploadResponse r;
-
-               if (argc != 3) usage(argv[0]);
-               if (!check_fault(soap,
-                               soap_call_jpsrv__CommitUpload(soap, server, "",
-                                       argv[2], &r))) {
-                       /* OK */
-               }
-       } else if (!strcasecmp(argv[1], "RecordTag")) {
-               struct jpsrv__RecordTagResponse r;
-               struct jptype__TagValue tagval;
-               
-               if (argc != 6) usage(argv[0]);
-               
-               tagval.name = argv[3];
-               tagval.sequence = NULL;
-               tagval.timestamp = NULL;
-               tagval.stringValue = argv[5];
-               tagval.blobValue = NULL;
-               
-               if (!check_fault(soap,
-                               soap_call_jpsrv__RecordTag(soap, server, "",
-                                       argv[2], &tagval, &r))) {
-                       /* OK */
-               }
-       } else if (!strcasecmp(argv[1],"FeedIndex")) {
-               struct jpsrv__FeedIndexResponse r;
-               struct jptype__Attribute        *ap[2];
-               struct jptype__Attributes       attr = { 2, ap };
-               struct jptype__PrimaryQueryElement *qp[100];
-               struct jptype__PrimaryQuery     qry = { 0, qp }; 
-
-               int     i,j,qi = atoi(argv[3])-1;
-
-               if (argc != 6) usage(argv[0]);
-
-               for (i=0; i<attr.__sizeitem; i++) ap[i] = sample_attr+i;
-
-               for (i=0; sample_query[qi][i].attr; i++)
-                       qp[i] = &sample_query[qi][i];
-               qry.__sizeitem = i;
-               
-               if (!check_fault(soap,soap_call_jpsrv__FeedIndex(soap,server,"",
-                               argv[2],&attr,&qry,!strcasecmp(argv[4],"true"),
-                                       !strcasecmp(argv[5],"true"),
-                                       &r)))
-               {
-                       printf("FeedId: %s\nExpires: %s\n",r.feedId,ctime(&r.expires));
-               }
-       } else if (!strcasecmp(argv[1], "FeedIndexRefresh")) {
-               struct jpsrv__FeedIndexRefreshResponse r;
-
-               if (argc != 3) usage(argv[0]);
-               if (!check_fault(soap,
-                               soap_call_jpsrv__FeedIndexRefresh(soap, server, "",
-                                       argv[2], &r))) {
-                       printf("FeedId: %s\nExpires: %s\n",r.feedId,ctime(&r.expires));
-               }
-       } else if (!strcasecmp(argv[1],"GetJob")) {
-               struct jpsrv__GetJobResponse    r;
-
-               if (argc != 3) usage(argv[0]);
-               
-               if (!check_fault(soap,soap_call_jpsrv__GetJob(soap,server,"",
-                                               argv[2],&r)))
-               {
-                       printf("JobLog:\t%s\nInput:\t%s\nOutput:\t%s\nTags:\t%s\n",
-                                       r.jobLog,r.inputSandbox,r.outputSandbox,r.tags);
-               }
-
-       }
-       else usage(argv[0]);
-
-       return 0;
-}
-
-
-/* XXX: we don't use it */
-SOAP_NMAC struct Namespace namespaces[] = { {NULL,NULL} };
diff --git a/org.glite.jp.primary/project/build.properties b/org.glite.jp.primary/project/build.properties
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.glite.jp.primary/project/configure.properties.xml b/org.glite.jp.primary/project/configure.properties.xml
deleted file mode 100644 (file)
index 3f88fbf..0000000
+++ /dev/null
@@ -1,52 +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
-
-       Configuration options for the gLite JP Primary module
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.2  2004/10/15 12:19:28  akrenek
-       build with gsoap 2.7 too
-       
-       Revision 1.1.1.1  2004/10/15 09:49:24  akrenek
--->
-
-       <!-- ======================================================
-         Define extra properties here ...
-         ====================================================== -->
-        
-       <project name="LB Common configuration options">                                                                        
-               <target name="lbmakefiles">
-                       <exec executable="ln" failonerror="true">
-                               <arg line="-fs ${component.dir}/Makefile ${module.build.dir}/Makefile"/>
-                       </exec>
-                       <echo file="${module.build.dir}/Makefile.inc">
-top_srcdir=..
-builddir=build
-stagedir=${stage.abs.dir}
-distdir=${dist.dir}
-globalprefix=${global.prefix}
-lbprefix=${subsystem.prefix}
-package=${module.package.name}
-PREFIX=${install.dir}
-version=${module.version}
-glite_location=${with.glite.location}
-globus_prefix=${with.globus.prefix}
-expat_prefix=${with.expat.prefix}
-ares_prefix=${with.ares.prefix}
-gsoap_prefix=${with.gsoap.prefix}
-thrflavour=${with.globus.thr.flavor}
-nothrflavour=${with.globus.nothr.flavor}
-cppunit=${with.cppunit.prefix}
-jpproject=${subsystem.project.dir}
-project=${component.project.dir}
-                       </echo>
-           </target>
-       </project>
diff --git a/org.glite.jp.primary/project/properties.xml b/org.glite.jp.primary/project/properties.xml
deleted file mode 100755 (executable)
index 2149dd4..0000000
+++ /dev/null
@@ -1,51 +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
-
-       Common build properties file for the gLite JP Primary component
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$ 
-       
-       Revision history:
-       $Log$
--->
-
-<project name="JP Primary component common properties">
-
-       <!-- Include build properties to allow overwriting 
-            of properties for subsystem                    -->
-       <property file="project/build.properties" />    
-
-       <!-- ======================================================
-          Define corresponding subsystem properties
-                ====================================================== -->
-
-       <!-- Subsystem name -->
-       <property name="subsystem.name" value="${jp.subsystem.name}"/>
-               
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${jp.subsystem.prefix}"/>
-
-       <!-- ======================================================
-          Define component properties
-                ====================================================== -->
-                               
-       <!-- Component name prefix -->
-       <property name="component.prefix" value="primary" />
-                       
-       <!-- ======================================================
-          Define general component properties
-                ====================================================== -->
-       
-       <import file="${component.general.properties.file}" />
-                                               
-       <!-- ======================================================
-                Define extra properties here ...
-                ====================================================== -->
-                
-                                                               
-</project>
diff --git a/org.glite.jp.primary/project/tar_exclude b/org.glite.jp.primary/project/tar_exclude
deleted file mode 100644 (file)
index e1fcd1a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-tar_exclude
-CVS
-build.xml
-build
-build.properties
-properties.xml
-configure.properties.xml
-.cvsignore
-.project
-.cdtproject
diff --git a/org.glite.jp.primary/project/version.properties b/org.glite.jp.primary/project/version.properties
deleted file mode 100644 (file)
index 1343828..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Dec 10 13:37:05 CET 2004
-module.version=0.1.0
-module.build=3
-module.age=1
diff --git a/org.glite.jp.primary/src/backend.h b/org.glite.jp.primary/src/backend.h
deleted file mode 100644 (file)
index bb143e9..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-#ifndef __GLITE_JP_BACKEND
-#define __GLITE_JP_BACKEND
-
-#include <sys/types.h>
-#include <unistd.h>
-
-int glite_jppsbe_init(
-       glite_jp_context_t ctx,
-       int *argc,
-       char *argv[]
-);
-
-int glite_jppsbe_init_slave(
-       glite_jp_context_t ctx
-);
-
-int glite_jppsbe_register_job( 
-       glite_jp_context_t ctx,
-       const char *job,
-       const char *owner
-);
-
-int glite_jppsbe_start_upload(
-       glite_jp_context_t ctx,
-       const char *job,
-       glite_jp_fileclass_t class,
-       const char *content_type,
-       char **destination_out,
-       time_t *commit_before_inout
-);
-
-int glite_jppsbe_commit_upload(
-       glite_jp_context_t ctx,
-       const char *destination
-);
-
-int glite_jppsbe_destination_info(
-       glite_jp_context_t ctx,
-       const char *destination,
-       char **job_out,
-       glite_jp_fileclass_t *class_out
-);
-
-int glite_jppsbe_get_job_url(
-       glite_jp_context_t ctx,
-       const char *job,
-       glite_jp_fileclass_t class,
-       char **url_out
-);
-
-int glite_jppsbe_open_file(
-       glite_jp_context_t ctx,
-       const char *job,
-       glite_jp_fileclass_t class,
-       int mode,
-       void **handle_out
-);
-
-int glite_jppsbe_close_file(
-       glite_jp_context_t ctx,
-       void *handle
-);
-
-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_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[],
-       const glite_jp_attrval_t metadata[],
-       int (*callback)(
-               glite_jp_context_t ctx,
-               const char *job,
-               const glite_jp_attrval_t metadata[]
-       )
-);
-
-#endif
diff --git a/org.glite.jp.primary/src/feed.c b/org.glite.jp.primary/src/feed.c
deleted file mode 100644 (file)
index 297eb23..0000000
+++ /dev/null
@@ -1,264 +0,0 @@
-#include <stdio.h>
-#include <time.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-
-#include "glite/jp/types.h"
-#include "glite/jp/strmd5.h"
-#include "feed.h"
-
-
-/* 
- * seconds before feed expires: should be 
- * XXX: should be configurable, default for real deployment sort of 1 hour
- */
-#define FEED_TTL       120
-
-static int check_qry_item(
-               glite_jp_context_t ctx,
-               const glite_jp_query_rec_t    *qry,
-               const glite_jp_attrval_t *attr
-)
-{
-       int     cmp,cmp2;
-       long    scmp,ucmp;
-
-       switch (qry->attr.type) {
-               case GLITE_JP_ATTR_OWNER:
-               case GLITE_JP_ATTR_TAG:
-                       cmp = strcmp(attr->value.s,qry->value.s);
-                       break;
-               case GLITE_JP_ATTR_TIME:
-                       scmp = (ucmp = attr->value.time.tv_usec - qry->value.time.tv_usec) > 0 ? 0 : -1;
-                       ucmp -= 1000000 * scmp;
-                       scmp += attr->value.time.tv_sec - qry->value.time.tv_sec;
-                       cmp = scmp ? scmp : ucmp;
-                       break;
-       }
-       switch (qry->op) {
-               case GLITE_JP_QUERYOP_EQUAL: return !cmp;
-               case GLITE_JP_QUERYOP_UNEQUAL: return cmp;
-               case GLITE_JP_QUERYOP_LESS: return cmp < 0;
-               case GLITE_JP_QUERYOP_GREATER: return cmp > 0;
-
-               case GLITE_JP_QUERYOP_WITHIN:
-                       switch (qry->attr.type) {
-                       case GLITE_JP_ATTR_OWNER:
-                       case GLITE_JP_ATTR_TAG:
-                               cmp2 = strcmp(attr->value.s,qry->value2.s);
-                               break;
-                       case GLITE_JP_ATTR_TIME:
-                               scmp = (ucmp = attr->value.time.tv_usec - qry->value2.time.tv_usec) > 0 ? 0 : -1;
-                               ucmp -= 1000000 * scmp;
-                               scmp += attr->value.time.tv_sec - qry->value2.time.tv_sec;
-                               cmp2 = scmp ? scmp : ucmp;
-                               break;
-                       }
-                       return cmp >= 0 && cmp2 <= 0;
-       }
-}
-
-/* XXX: limit on query size -- I'm lazy to malloc() */
-#define QUERY_MAX      100
-
-static int match_feed(
-               glite_jp_context_t ctx,
-               const struct jpfeed *feed,
-               const char *job,
-               const glite_jp_attrval_t attrs[] /* XXX: not checked for correctness */
-)
-{
-       int     i;
-       int     attri[GLITE_JP_ATTR__LAST];
-       int     qi[QUERY_MAX];
-
-       glite_jp_attrval_t *newattr = NULL;
-
-       glite_jp_clear_error(ctx);
-
-       for (i=0; i<GLITE_JP_ATTR__LAST; i++) attri[i] = -1;
-       for (i=0; attrs[i].attr.type; i++) attri[attrs[i].attr.type] = i;
-
-       if (feed->qry) {
-               int     j,complete = 1;
-
-               memset(qi,0,sizeof qi);
-               for (i=0; feed->qry[i].attr.type; i++) {
-                       assert(i<QUERY_MAX);
-                       if ((j=attri[feed->qry[i].attr.type]) >=0) {
-                               if (check_qry_item(ctx,feed->qry+i,attrs+j))
-                                       qi[i] = 1; /* matched */
-                               else return 0;  /* can't be satisfied */
-                       }
-                       else complete = 0;
-               }
-
-               /* not all attributes in query are known from input 
-                * we have to retrieve job metadata from the backend
-                */
-               if (!complete) {
-                       glite_jp_attrval_t      meta[GLITE_JP_ATTR__LAST+1];
-                       int     qai[GLITE_JP_ATTR__LAST];
-
-                       memset(meta,0,sizeof meta);
-                       j=0;
-                       for (i=0; feed->qry[i].attr.type; i++) if (!qi[i]) {
-                               meta[j].attr.type = feed->qry[i].attr.type;
-                               meta[j].attr.name = feed->qry[i].attr.name;
-                               qai[feed->qry[i].attr.type] = i;
-                               j++;
-                       }
-
-                       if (glite_jppsbe_get_job_metadata(ctx,job,meta)) {
-                               glite_jp_error_t        err;
-                               err.code = EIO;
-                               err.source = __FUNCTION__;
-                               err.desc = "complete query";
-                               return glite_jp_stack_error(ctx,&err);
-                       }
-
-                       for (i=0; j=meta[i].attr.type; i++)
-                               if (!check_qry_item(ctx,feed->qry+qai[j],meta+i))
-                                       return 0;
-               }
-       }
-
-       /* matched completely */
-       return glite_jpps_single_feed(ctx,feed->destination,job,attrs);
-       return 0;
-}
-
-int glite_jpps_match_attr(
-               glite_jp_context_t ctx,
-               const char *job,
-               const glite_jp_attrval_t attrs[]
-)
-{
-       struct jpfeed   *f = (struct jpfeed *) ctx->feeds;
-       int     i,j;
-       int     attri[GLITE_JP_ATTR__LAST];
-
-       glite_jp_clear_error(ctx);
-
-       for (i=0; i<GLITE_JP_ATTR__LAST; i++) attri[i] = -1;
-       for (i=0; attrs[i].attr.type; i++) {
-               if (attrs[i].attr.type >= GLITE_JP_ATTR__LAST ||
-                               attrs[i].attr.type <= 0)
-               {
-                       glite_jp_error_t        err;
-                       err.code = EINVAL;
-                       err.source = __FUNCTION__;
-                       err.desc = "unknown attribute";
-                       return glite_jp_stack_error(ctx,&err);
-               }
-               if (attri[attrs[i].attr.type] >= 0) {
-                       glite_jp_error_t        err;
-                       err.code = EINVAL;
-                       err.source = __FUNCTION__;
-                       err.desc = "double attribute change";
-                       return glite_jp_stack_error(ctx,&err);
-               }
-
-               attri[attrs[i].attr.type] = i;
-       }
-
-       for (;f; f = f->next) {
-               for (i=0; f->attrs[i].type && attri[f->attrs[i].type] == -1; i++);
-               /* XXX: ignore any errors */
-               if (f->attrs[i].type) match_feed(ctx,f,job,attrs);
-       }
-
-       return glite_jp_clear_error(ctx);
-}
-
-int glite_jpps_match_file(
-       glite_jp_context_t ctx,
-       const char *job,
-       glite_jp_fileclass_t class
-)
-{
-       fprintf(stderr,"%s: \n",__FUNCTION__);
-       return 0;
-}
-
-int glite_jpps_match_tag(
-       glite_jp_context_t ctx,
-       const char *job,
-       const glite_jp_tagval_t *tag
-)
-{
-       fprintf(stderr,"%s: \n",__FUNCTION__);
-       return 0;
-}
-
-static char *generate_feedid(void)
-{
-       char    hname[200],buf[1000];
-
-       gethostname(hname,sizeof hname);
-       snprintf(buf,sizeof buf,"%s%d%ld",hname,getpid(),lrand48());
-       buf[sizeof buf-1] = 0;
-       return str2md5base64(buf);
-}
-
-
-int glite_jpps_run_feed(
-       glite_jp_context_t ctx,
-       const char *destination,
-       const glite_jp_attr_t *attrs,
-       const glite_jp_query_rec_t *qry,
-       char **feed_id)
-{
-       fprintf(stderr,"%s: \n",__FUNCTION__);
-       return 0;
-}
-
-static int register_feed_deferred(glite_jp_context_t ctx,void *feed)
-{
-       struct jpfeed   *f = feed;
-
-       f->next = ctx->feeds;
-       ctx->feeds = f;
-       return 0;
-}
-
-/* FIXME:
- * - volatile implementation: should store the registrations in a file
- *   and recover after restart
- * - should communicate the data among all server slaves
- */
-int glite_jpps_register_feed(
-       glite_jp_context_t ctx,
-       const char *destination,
-       const glite_jp_attr_t *attrs,
-       const glite_jp_query_rec_t *qry,
-       char **feed_id,
-       time_t *expires)
-{
-       int     i;
-       struct jpfeed   *f = calloc(1,sizeof *f);
-
-       if (!*feed_id) *feed_id = generate_feedid();
-       time(expires); *expires += FEED_TTL;
-
-       f->id = strdup(*feed_id);
-       f->destination = strdup(destination);
-       f->expires = *expires;
-       for (i=0; attrs[i].type; i++) {
-               f->attrs = realloc(f->attrs,(i+2) * sizeof *f->attrs);
-               glite_jp_attr_copy(f->attrs+i,attrs+i);
-               memset(f->attrs+i+1,0,sizeof *f->attrs);
-       }
-       for (i=0; qry[i].attr.type; i++) {
-               f->qry = realloc(f->qry,(i+2) * sizeof *f->qry);
-               glite_jp_queryrec_copy(f->qry+i,qry+i);
-               memset(f->qry+i+1,0,sizeof *f->qry);
-       }
-
-       glite_jp_add_deferred(ctx,register_feed_deferred,f);
-
-       return 0;
-}
-
diff --git a/org.glite.jp.primary/src/feed.h b/org.glite.jp.primary/src/feed.h
deleted file mode 100644 (file)
index 1551a82..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef __GLITE_JP_FEED
-#define __GLITE_JP_FEED
-
-
-struct jpfeed {
-       char    *id,*destination;
-       time_t  expires;
-       glite_jp_attr_t *attrs;
-       glite_jp_query_rec_t    *qry;
-       struct jpfeed   *next;
-};
-
-
-int glite_jpps_match_attr(glite_jp_context_t,const char *,const glite_jp_attrval_t[]);
-int glite_jpps_match_file(glite_jp_context_t,const char *,glite_jp_fileclass_t);
-int glite_jpps_match_tag(glite_jp_context_t,const char *,const glite_jp_tagval_t *);
-int glite_jpps_run_feed(glite_jp_context_t,const char *,const glite_jp_attr_t *,const glite_jp_query_rec_t *,char **);
-int glite_jpps_register_feed(glite_jp_context_t,const char *,const glite_jp_attr_t *,const glite_jp_query_rec_t *,char **,time_t *);
-
-#endif
-
diff --git a/org.glite.jp.primary/src/ftp_backend.c b/org.glite.jp.primary/src/ftp_backend.c
deleted file mode 100644 (file)
index b598f0a..0000000
+++ /dev/null
@@ -1,1701 +0,0 @@
-#ident "$Header$"
-
-#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/jp/types.h"
-#include "glite/jp/context.h"
-#include "glite/jp/strmd5.h"
-
-#include "tags.h"
-#include "backend.h"
-
-#define UPLOAD_SUFFIX ".upload"
-#define LOCK_SUFFIX ".lock"
-
-struct ftpbe_config {
-       char *internal_path;
-       char *external_path;
-       char *gridmap;
-       char *logname;
-};
-
-static struct ftpbe_config *config = NULL;
-
-struct fhandle_rec {
-       int fd;
-       int fd_append;
-};
-typedef struct fhandle_rec *fhandle;
-
-static struct option ftpbe_opts[] = {
-       { "ftp-internal-path", 1, NULL, 'I' },
-       { "ftp-external-path", 1, NULL, 'E' },
-       { "ftp-gridmap",       1, NULL, 'G' },
-       { NULL,                0, NULL,  0  }
-};
-
-static struct {
-       glite_jp_fileclass_t    type;
-       char *                  fname;
-       } class_to_fname_tab[] = {
-               { GLITE_JP_FILECLASS_INPUT,  "input" },
-               { GLITE_JP_FILECLASS_OUTPUT, "output" },
-               { GLITE_JP_FILECLASS_LBLOG,  "lblog" },
-               { GLITE_JP_FILECLASS_TAGS,   "tags" },
-               { GLITE_JP_FILECLASS_UNDEF,  NULL }
-       };
-
-static char *class_to_fname(glite_jp_fileclass_t type)
-{
-       int i;
-
-       for (i = 0; class_to_fname_tab[i].type != GLITE_JP_FILECLASS_UNDEF; i++)
-               if (type == class_to_fname_tab[i].type)
-                       return class_to_fname_tab[i].fname;
-
-       return NULL;
-}
-
-static glite_jp_fileclass_t fname_to_class(char* fname)
-{
-       int i;
-
-       for (i = 0; class_to_fname_tab[i].type != GLITE_JP_FILECLASS_UNDEF; i++)
-               if (!strcmp(fname, class_to_fname_tab[i].fname))
-                       return class_to_fname_tab[i].type;
-
-       return GLITE_JP_FILECLASS_UNDEF;
-}
-
-static int config_check(
-       glite_jp_context_t ctx,
-       struct ftpbe_config *config)
-{
-       return config == NULL ||
-               config->internal_path == NULL ||
-               config->external_path == NULL ||
-               config->gridmap == NULL ||
-               config->logname == NULL;
-
-       /* XXX check reality */
-}
-
-static int jobid_unique_pathname(glite_jp_context_t ctx, const char *job, 
-                         char **unique, char **ju_path, int get_path)
-{
-       char *p;
-       glite_jp_error_t err;
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       p = strrchr(job, '/');
-       if (!p) {
-               err.code = EINVAL;
-               err.desc = "Malformed jobid";
-               return glite_jp_stack_error(ctx,&err);
-       }
-       /* XXX thorough checks */
-       if (!(*unique = strdup(p+1))) {
-               err.code = ENOMEM;
-               return glite_jp_stack_error(ctx,&err);
-       }
-       if (get_path) {
-               if (!(*ju_path = strdup(p+1))) {
-                       free(*unique);
-                       err.code = ENOMEM;
-                       return glite_jp_stack_error(ctx,&err);
-               }
-               *(*ju_path + 10) = '\0';
-       }
-       return 0;
-}
-
-static int mkdirpath(const char* path, int prefixlen)
-{
-       char *wpath, *p;
-       int goout, ret;
-
-       wpath = strdup(path);
-       if (!wpath) {
-               errno = ENOMEM;
-               return -1;
-       }
-
-       p = wpath + prefixlen;
-       goout = 0;
-       while (!goout) {
-               while (*p == '/') p++;
-               while (*p != '/' && *p != '\0') p++;
-               goout = (*p == '\0');
-               *p = '\0';
-               ret = mkdir(wpath, S_IRUSR | S_IWUSR | S_IXUSR);
-               if (ret < 0 && errno != EEXIST) break;
-               *p = '/';
-       }
-       free(wpath);
-       return goout ? 0 : ret;
-}
-
-static long regtime_trunc(long tv_sec)
-{
-       return tv_sec / (86400*7);
-}
-
-static long regtime_ceil(long tv_sec)
-{
-       return (tv_sec % (86400*7)) ? tv_sec/(86400*7)+1 : tv_sec/(86400*7) ;
-}
-
-/********************************************************************************/
-int glite_jppsbe_init(
-       glite_jp_context_t ctx,
-       int *argc,
-       char *argv[]
-)
-{
-       glite_jp_error_t err;
-       int opt;
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       config = (struct ftpbe_config *) calloc(1, sizeof *config);
-       if (!config) {
-               err.code = ENOMEM;
-               return glite_jp_stack_error(ctx,&err);
-       }
-
-       config->logname = getlogin();
-
-       while ((opt = getopt_long(*argc, argv, "I:E:G:", ftpbe_opts, NULL)) != EOF) {
-               switch (opt) {
-                       case 'I': config->internal_path = optarg; break;
-                       case 'E': config->external_path = optarg; break;
-                       case 'G': config->gridmap = optarg; break;
-                       default: break;
-               }
-       }
-
-       if (config_check(ctx, config)) {
-               err.code = EINVAL;
-               err.desc = "Invalid FTP backend configuration";
-               return glite_jp_stack_error(ctx,&err);
-       }
-
-       return 0;
-}
-
-int glite_jppsbe_init_slave(
-       glite_jp_context_t ctx
-)
-{
-       /* Nothing to do */
-}
-
-int glite_jppsbe_register_job( 
-       glite_jp_context_t ctx,
-       const char *job,
-       const char *owner
-)
-{
-       glite_jp_error_t err;
-       char *int_dir = NULL;
-       char *int_fname = NULL;
-       char *data_dir = NULL;
-       char *data_fname = NULL;
-       char *ju = NULL;
-       char *ju_path = NULL;
-       char *ownerhash = NULL;
-       FILE *regfile = NULL;
-       struct timeval reg_tv;
-       long reg_tv_trunc;
-       struct stat statbuf;
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       assert(job != NULL);
-       assert(owner != NULL);
-
-       gettimeofday(&reg_tv, NULL);
-       reg_tv_trunc = regtime_trunc(reg_tv.tv_sec);
-
-       if (jobid_unique_pathname(ctx, job, &ju, &ju_path, 1) != 0) {
-               err.code = ctx->error->code;
-               err.desc = "Cannot obtain jobid unique path/name";
-               return glite_jp_stack_error(ctx,&err);
-       }
-
-       if (asprintf(&int_dir, "%s/regs/%s",
-                       config->internal_path, ju_path) == -1) {
-               err.code = ENOMEM;
-               return glite_jp_stack_error(ctx,&err);
-       }
-
-       if (mkdirpath(int_dir, strlen(config->internal_path)) < 0 &&
-                       errno != EEXIST) {
-               free(int_dir);
-               err.code = errno;
-               err.desc = "Cannot mkdir jobs's reg directory";
-               return glite_jp_stack_error(ctx,&err);
-       }
-       free(int_dir);
-
-       if (asprintf(&int_fname, "%s/regs/%s/%s.info",
-                       config->internal_path, ju_path, ju) == -1) {
-               err.code = ENOMEM;
-               return glite_jp_stack_error(ctx,&err);
-       }
-
-       if (stat(int_fname, &statbuf) < 0) {
-               if (errno != ENOENT) {
-                       err.code = errno;
-                       err.desc = "Cannot stat jobs's reg info file";
-                       goto error_out;
-               }
-       } else {
-               err.code = EEXIST;
-               err.desc = "Job already registered";
-               goto error_out;
-       }
-
-       regfile = fopen(int_fname, "w");
-       if (regfile == NULL) {
-               err.code = errno;
-               err.desc = "Cannot open jobs's reg info file";
-               goto error_out;
-       }
-
-       ownerhash = str2md5(owner); /* static buffer */
-       
-       if (fprintf(regfile, "%d %ld.%06ld %s %s %d %s\n", 1,
-               (long)reg_tv.tv_sec, (long)reg_tv.tv_usec, job,
-               ownerhash, strlen(owner), owner) < 1 || ferror(regfile)) {
-               fclose(regfile);
-               err.code = errno;
-               err.desc = "Cannot write jobs's reg info file";
-               goto error_out;
-       }
-       if (fclose(regfile) != 0 ) {
-               err.code = errno;
-               err.desc = "Cannot close(write) jobs's reg info file";
-               goto error_out;
-       }
-
-       if (asprintf(&data_dir, "%s/data/%s/%d/%s",
-                       config->internal_path, ownerhash, regtime_trunc(reg_tv.tv_sec), ju) == -1) {
-               err.code = ENOMEM;
-               goto error_out;
-       }
-       if (asprintf(&data_fname, "%s/_info", data_dir) == -1) {
-               err.code = ENOMEM;
-               goto error_out;
-       }
-       if (mkdirpath(data_dir, strlen(config->internal_path)) < 0 &&
-                       errno != EEXIST) {
-               err.code = errno;
-               err.desc = "Cannot mkdir jobs's data directory";
-               goto error_out;
-       }
-
-       if (link(int_fname, data_fname) < 0) {
-               err.code = errno;
-               err.desc = "Cannot link job's reg and data info files";
-               goto error_out;
-       }
-
-error_out:
-       free(int_fname);
-       free(data_fname);
-       if (err.code && data_dir) rmdir(data_dir);
-       free(data_dir);
-       if (err.code) {
-               return glite_jp_stack_error(ctx,&err);
-       } else {
-               return 0;
-       }
-}
-
-static int add_to_gridmap(glite_jp_context_t ctx, const char *dn)
-{
-       FILE *gridmap = NULL;
-       glite_jp_error_t err;
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       gridmap = fopen(config->gridmap, "a");
-       if (!gridmap) {
-               err.code = errno;
-               err.desc = "Cannot open gridmap file";
-               return glite_jp_stack_error(ctx,&err);
-       }
-       if (fprintf(gridmap, "\"%s\" %s\n", dn, config->logname) < 6 ||
-               ferror(gridmap)) {
-               err.code = EIO;
-               err.desc = "Cannot write to gridmap file";
-               fclose(gridmap);
-               return glite_jp_stack_error(ctx,&err);
-       }
-       fclose(gridmap);
-       return 0;
-}
-
-static int remove_from_gridmap(glite_jp_context_t ctx, const char *dn)
-{
-       FILE *gridmap = NULL;
-       char *temp_name = NULL;
-       FILE *temp_file = NULL;
-       glite_jp_error_t err;
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-       
-       /* XXX */
-       return 0;
-}
-
-int glite_jppsbe_start_upload(
-       glite_jp_context_t ctx,
-       const char *job,
-       glite_jp_fileclass_t class,
-       const char *content_type,
-       char **destination_out,
-       time_t *commit_before_inout
-)
-{
-       char *int_fname = NULL;
-       char *lock_fname = NULL;
-       FILE *lockfile = NULL;
-       FILE *regfile = NULL;
-       char *fname = NULL;
-       char *data_dir = NULL;
-       char *data_lock = NULL;
-       char *ju = NULL;
-       char *ju_path = NULL;
-       char *peername = NULL;
-       int info_version;
-       long reg_time;
-       char ownerhash[33];
-       glite_jp_error_t err;
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       assert(job!=NULL);
-       assert(destination_out!=NULL);
-
-       fname = class_to_fname(class);
-       assert(fname!=NULL);
-
-       if (jobid_unique_pathname(ctx, job, &ju, &ju_path, 1) != 0) {
-               err.code = ctx->error->code;
-               err.desc = "Cannot obtain jobid unique path/name";
-               return glite_jp_stack_error(ctx,&err);
-       }
-
-       peername = glite_jp_peer_name(ctx);
-
-       if (asprintf(&int_fname, "%s/regs/%s/%s.info",
-                       config->internal_path, ju_path, ju) == -1) {
-               err.code = ENOMEM;
-               goto error_out;
-       }
-       regfile = fopen(int_fname, "r");
-       if (regfile == NULL) {
-               err.code = errno;
-               if (errno == ENOENT) 
-                       err.desc = "Job not registered";
-               else
-                       err.desc = "Cannot open jobs's reg info file";
-               goto error_out;
-       }
-       if (fscanf(regfile, "%d %ld.%*ld %*s %s ", &info_version,
-               &reg_time, ownerhash) < 3 || ferror(regfile)) {
-               fclose(regfile);
-               err.code = errno;
-               err.desc = "Cannot read jobs's reg info file";
-               goto error_out;
-       }
-       fclose(regfile);
-
-       /* XXX authorization */
-
-       if (asprintf(&data_dir, "%s/data/%s/%d/%s",
-                       config->internal_path, ownerhash, regtime_trunc(reg_time), ju) == -1) {
-               err.code = ENOMEM;
-               goto error_out;
-       }
-
-       if (asprintf(&lock_fname, "%s/%s" LOCK_SUFFIX,
-                       data_dir, fname) == -1) {
-               err.code = ENOMEM;
-               goto error_out;
-       }
-
-       if (commit_before_inout != NULL)
-               *commit_before_inout = (time_t) LONG_MAX;  /* XXX no timeout enforced */
-
-       lockfile = fopen(lock_fname, "w");
-       if (lockfile == NULL) {
-               err.code = errno;
-               err.desc = "Cannot open uploads's lock file";
-               goto error_out;
-       }
-
-       if (fprintf(lockfile, "%ld %d %s\n", (long)*commit_before_inout,
-               peername ? peername : 0,
-               peername ? peername : "") < 1 || ferror(regfile)) {
-               fclose(lockfile);
-               err.code = errno;
-               err.desc = "Cannot write upload's lock file";
-               goto error_out;
-       }
-       if (fclose(lockfile) != 0 ) {
-               err.code = errno;
-               err.desc = "Cannot close(write) upload's lock file";
-               goto error_out;
-       }
-
-       if (asprintf(destination_out, "%s/data/%s/%d/%s/%s" UPLOAD_SUFFIX,
-                       config->external_path, ownerhash, regtime_trunc(reg_time), ju, fname) == -1) {
-               err.code = ENOMEM;
-               goto error_out;
-       }
-
-       if (add_to_gridmap(ctx, peername)) {
-               err.code = EIO;
-               err.desc = "Cannot add peer DN to ftp server authorization file";
-               goto error_out;
-       }
-
-error_out:
-       free(int_fname);
-       free(data_dir);
-       if (err.code && data_lock) unlink(data_lock);
-       free(data_lock);
-       free(ju); free(ju_path);
-       if (err.code) {
-               return glite_jp_stack_error(ctx,&err);
-       } else {
-               return 0;
-       }
-}
-
-int glite_jppsbe_commit_upload(
-       glite_jp_context_t ctx,
-       const char *destination
-)
-{
-       size_t dest_len;
-       size_t suff_len;
-       size_t extp_len;
-       long commit_before;
-       int lockpeerlen;
-       char *lockpeername = NULL;
-       char *peername = NULL;
-       char *dest_rw = NULL;
-       char *dest_rw_suff = NULL;
-       char *dest_rw_lock = NULL;
-       FILE *lockfile = NULL;
-       glite_jp_error_t err;
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       assert(destination != NULL);
-
-       suff_len = strlen(UPLOAD_SUFFIX);
-       dest_len = strlen(destination);
-       extp_len = strlen(config->external_path);
-
-       if (dest_len < suff_len ||
-               strcmp(UPLOAD_SUFFIX, destination + (dest_len - suff_len)) ||
-               strncmp(destination, config->external_path, extp_len)) {
-               err.code = EINVAL;
-               err.desc = "Forged destination path";
-               return glite_jp_stack_error(ctx,&err);
-       }
-
-       if (asprintf(&dest_rw_suff, "%s%s", config->internal_path,
-               destination + extp_len) == -1) {
-               err.code = ENOMEM;
-               return glite_jp_stack_error(ctx,&err);
-       }
-       dest_rw = strdup(dest_rw_suff);
-       if (!dest_rw) {
-               err.code = ENOMEM;
-               goto error_out;
-       }
-       *(dest_rw + (strlen(dest_rw_suff) - suff_len)) = '\0';
-
-       if (asprintf(&dest_rw_lock, "%s" LOCK_SUFFIX, dest_rw) == -1) {
-               err.code = ENOMEM;
-               goto error_out;
-       }
-       
-       lockfile = fopen(dest_rw_lock, "r");
-       if (lockfile == NULL) {
-               err.code = errno;
-               err.desc = "Cannot open upload's lock file";
-               goto error_out;
-       }
-       if (fscanf(lockfile, "%ld %d ", &commit_before, &lockpeerlen) < 2 || ferror(lockfile)) {
-               fclose(lockfile);
-               err.code = errno;
-               err.desc = "Cannot read upload's lock file";
-               goto error_out;
-       }
-       if (lockpeerlen) {
-               lockpeername = (char*) calloc(1, lockpeerlen+1);
-               if (!lockpeername) {
-                       err.code = ENOMEM;
-                       goto error_out;
-               }
-               if (fgets(lockpeername, lockpeerlen+1, lockfile) == NULL) {
-                       fclose(lockfile);
-                       err.code = errno;
-                       err.desc = "Cannot read upload's lock file";
-                       goto error_out;
-               }
-       }
-       fclose(lockfile);
-
-       peername = glite_jp_peer_name(ctx);
-       if (lockpeername && (!peername || strcmp(lockpeername, peername))) {
-               err.code = EPERM;
-               err.desc = "Upload started by client of different identity";
-               goto error_out;
-       }
-
-       if (rename(dest_rw_suff, dest_rw) < 0) {
-               err.code = errno;
-               err.desc = "Cannot move upload file to the final place";
-               goto error_out;
-       }
-
-       if (unlink(dest_rw_lock) < 0) {
-               err.code = errno;
-               err.desc = "Cannot unlink upload's lock file";
-               goto error_out;
-       }
-
-error_out:
-       free(dest_rw);
-       free(dest_rw_suff);
-       free(dest_rw_lock);
-       free(peername);
-       free(lockpeername);
-       if (err.code) {
-               return glite_jp_stack_error(ctx,&err);
-       } else {
-               return 0;
-       }
-}
-
-int glite_jppsbe_destination_info(
-       glite_jp_context_t ctx,
-       const char *destination,
-       char **job,
-       glite_jp_fileclass_t *class
-)
-{
-       size_t dest_len;
-       size_t suff_len;
-       size_t extp_len;
-       char *dest_rw = NULL;
-       char *dest_rw_suff = NULL;
-       char *dest_rw_info = NULL;
-       FILE *infofile = NULL;
-       char *classname = NULL;
-       char jobstr[256+1];
-       glite_jp_error_t err;
-
-       assert(destination != NULL);
-       assert(job != NULL);
-       assert(class != NULL);
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       suff_len = strlen(UPLOAD_SUFFIX);
-       dest_len = strlen(destination);
-       extp_len = strlen(config->external_path);
-
-       if (dest_len < suff_len ||
-               strcmp(UPLOAD_SUFFIX, destination + (dest_len - suff_len)) ||
-               strncmp(destination, config->external_path, extp_len)) {
-               err.code = EINVAL;
-               err.desc = "Forged destination path";
-               return glite_jp_stack_error(ctx,&err);
-       }
-
-       if (asprintf(&dest_rw_suff, "%s%s", config->internal_path,
-               destination + extp_len) == -1) {
-               err.code = ENOMEM;
-               return glite_jp_stack_error(ctx,&err);
-       }
-       dest_rw = strdup(dest_rw_suff);
-       if (!dest_rw) {
-               err.code = ENOMEM;
-               goto error_out;
-       }
-       *(dest_rw + (strlen(dest_rw_suff) - suff_len)) = '\0';
-
-       classname = strrchr(dest_rw,'/');
-       if (classname == NULL) {
-               err.code = EINVAL;
-               err.desc = "Forged destination path";
-               goto error_out;
-       }
-       *classname++ ='\0';
-       *class = fname_to_class(classname);
-       if (!class == GLITE_JP_FILECLASS_UNDEF) {
-               err.code = EINVAL;
-               err.desc = "Forged destination path";
-               goto error_out;
-       }
-
-       if (asprintf(&dest_rw_info, "%s/_info", dest_rw) == -1) {
-               err.code = ENOMEM;
-               goto error_out;
-       }
-       
-       infofile = fopen(dest_rw_info, "r");
-       if (infofile == NULL) {
-               err.code = errno;
-               err.desc = "Cannot open _info file";
-               goto error_out;
-       }
-       if (fscanf(infofile, "%*d %*ld.%*ld %256s ", jobstr) < 1 || ferror(infofile)) {
-               fclose(infofile);
-               err.code = errno;
-               err.desc = "Cannot read _info file";
-               goto error_out;
-       }
-       *job = strdup(jobstr);
-       fclose(infofile);
-
-error_out:
-       free(dest_rw);
-       free(dest_rw_suff);
-       free(dest_rw_info);
-       if (err.code) {
-               return glite_jp_stack_error(ctx,&err);
-       } else {
-               return 0;
-       }
-}
-
-
-int glite_jppsbe_get_job_url(
-       glite_jp_context_t ctx,
-       const char *job,
-       glite_jp_fileclass_t class,
-       char **url_out
-)
-{
-       FILE *regfile = NULL;
-       char *int_fname = NULL;
-       char *fname = NULL;
-       char *ju = NULL;
-       char *ju_path = NULL;
-       int info_version;
-       long reg_time;
-       char ownerhash[33];
-       glite_jp_error_t err;
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       assert(job!=NULL);
-       assert(class != GLITE_JP_FILECLASS_UNDEF);
-       assert(url_out != NULL);
-
-       fname = class_to_fname(class);
-       assert(fname!=NULL);
-
-       if (jobid_unique_pathname(ctx, job, &ju, &ju_path, 1) != 0) {
-               err.code = ctx->error->code;
-               err.desc = "Cannot obtain jobid unique path/name";
-               return glite_jp_stack_error(ctx,&err);
-       }
-
-       if (asprintf(&int_fname, "%s/regs/%s/%s.info",
-                       config->internal_path, ju_path, ju) == -1) {
-               err.code = ENOMEM;
-               goto error_out;
-       }
-       regfile = fopen(int_fname, "r");
-       if (regfile == NULL) {
-               err.code = errno;
-               if (errno == ENOENT) 
-                       err.desc = "Job not registered";
-               else
-                       err.desc = "Cannot open jobs's reg info file";
-               goto error_out;
-       }
-       if (fscanf(regfile, "%d %ld.%*ld %*s %s", &info_version,
-               &reg_time, ownerhash) < 3 || ferror(regfile)) {
-               fclose(regfile);
-               err.code = errno;
-               err.desc = "Cannot read jobs's reg info file";
-               goto error_out;
-       }
-       fclose(regfile);
-
-       if (asprintf(url_out, "%s/data/%s/%d/%s/%s",
-                       config->external_path, ownerhash, regtime_trunc(reg_time), ju, fname) == -1) {
-               err.code = ENOMEM;
-               goto error_out;
-       }
-
-error_out:
-       free(int_fname);
-       free(ju); free(ju_path);
-       if (err.code) {
-               return glite_jp_stack_error(ctx,&err);
-       } else {
-               return 0;
-       }
-}
-
-static int get_job_fname(
-       glite_jp_context_t ctx,
-       const char *job,
-       glite_jp_fileclass_t class,
-       char **fname_out
-)
-{
-       FILE *regfile = NULL;
-       char *fname = NULL;
-       char *int_fname = NULL;
-       char *ju = NULL;
-       char *ju_path = NULL;
-       int info_version;
-       long reg_time;
-       char ownerhash[33];
-       glite_jp_error_t err;
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       assert(job!=NULL);
-       assert(class != GLITE_JP_FILECLASS_UNDEF);
-       assert(fname_out != NULL);
-
-       fname = class_to_fname(class);
-       assert(fname!=NULL);
-
-       if (jobid_unique_pathname(ctx, job, &ju, &ju_path, 1) != 0) {
-               err.code = ctx->error->code;
-               err.desc = "Cannot obtain jobid unique path/name";
-               return glite_jp_stack_error(ctx,&err);
-       }
-
-       if (asprintf(&int_fname, "%s/regs/%s/%s.info",
-                       config->internal_path, ju_path, ju) == -1) {
-               err.code = ENOMEM;
-               goto error_out;
-       }
-       regfile = fopen(int_fname, "r");
-       if (regfile == NULL) {
-               err.code = errno;
-               if (errno == ENOENT) 
-                       err.desc = "Job not registered";
-               else
-                       err.desc = "Cannot open jobs's reg info file";
-               goto error_out;
-       }
-       if (fscanf(regfile, "%d %ld.%*ld %*s %s", &info_version,
-               &reg_time, ownerhash) < 3 || ferror(regfile)) {
-               fclose(regfile);
-               err.code = errno;
-               err.desc = "Cannot read jobs's reg info file";
-               goto error_out;
-       }
-       fclose(regfile);
-
-       if (asprintf(fname_out, "%s/data/%s/%d/%s/%s",
-                       config->internal_path, ownerhash, regtime_trunc(reg_time), ju, fname) == -1) {
-               err.code = ENOMEM;
-               goto error_out;
-       }
-
-error_out:
-       free(int_fname);
-       free(ju); free(ju_path);
-       if (err.code) {
-               return glite_jp_stack_error(ctx,&err);
-       } else {
-               return 0;
-       }
-}
-
-int glite_jppsbe_open_file(
-       glite_jp_context_t ctx,
-       const char *job,
-       glite_jp_fileclass_t class,
-       int mode,
-       void **handle_out
-)
-{
-       fhandle handle = NULL;
-       char* fname = NULL;
-       glite_jp_error_t err;
-
-       assert(handle_out != NULL);
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       if (get_job_fname(ctx, job, class, &fname)) {
-               err.code = ctx->error->code;
-               err.desc = "Cannot construct internal filename";
-               return glite_jp_stack_error(ctx,&err);
-       }
-
-       handle = (fhandle) calloc(1,sizeof(*handle));
-       if (handle == NULL) {
-               err.code = ENOMEM;
-               goto error_out;
-       }
-
-       handle->fd = open(fname, mode, S_IRUSR | S_IWUSR);
-       if (handle->fd < 0) {
-               err.code = errno;
-               err.desc = "Cannot open requested file";
-               free(handle);
-               goto error_out;
-       }
-       handle->fd_append = open(fname, mode | O_APPEND, S_IRUSR | S_IWUSR);
-       if (handle->fd_append < 0) {
-               err.code = errno;
-               err.desc = "Cannot open requested file for append";
-               close(handle->fd);
-               free(handle);
-               goto error_out;
-       }
-       *handle_out = (void*) handle;
-
-error_out:
-       free(fname);
-       if (err.code) { 
-               return glite_jp_stack_error(ctx,&err);
-       } else { 
-               return 0;
-       }
-}
-
-int glite_jppsbe_close_file(
-       glite_jp_context_t ctx,
-       void *handle
-)
-{
-       glite_jp_error_t err;
-
-       assert(handle != NULL);
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       if (close(((fhandle)handle)->fd_append) < 0) {
-               err.code = errno;
-               err.desc = "Error closing file descriptor (fd_append)";
-               goto error_out;
-       }
-       if (close(((fhandle)handle)->fd) < 0) {
-               err.code = errno;
-               err.desc = "Error closing file descriptor";
-               goto error_out;
-       }
-
-error_out:
-       free(handle);
-       if (err.code) {
-               return glite_jp_stack_error(ctx,&err);
-       } else { 
-               return 0;
-       }
-}
-
-int glite_jppsbe_pread(
-       glite_jp_context_t ctx,
-       void *handle,
-       void *buf,
-       size_t nbytes,
-       off_t offset,
-       ssize_t *nbytes_ret
-)
-{
-       ssize_t ret;
-       glite_jp_error_t err;
-
-       assert(handle != NULL);
-       assert(buf != NULL);
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       if ((ret = pread(((fhandle)handle)->fd, buf, nbytes, offset)) < 0) {
-               err.code = errno;
-               err.desc = "Error in pread()";
-               return glite_jp_stack_error(ctx,&err);
-       }
-       *nbytes_ret = ret;
-
-       return 0;
-}
-
-int glite_jppsbe_pwrite(
-       glite_jp_context_t ctx,
-       void *handle,
-       void *buf,
-       size_t nbytes,
-       off_t offset
-)
-{
-       glite_jp_error_t err;
-
-       assert(handle != NULL);
-       assert(buf != NULL);
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       if (pwrite(((fhandle)handle)->fd, buf, nbytes, offset) < 0) {
-               err.code = errno;
-               err.desc = "Error in pwrite()";
-               return glite_jp_stack_error(ctx,&err);
-       }
-
-       return 0;
-}
-
-int glite_jppsbe_append(
-       glite_jp_context_t ctx,
-       void *handle,
-       void *buf,
-       size_t nbytes
-)
-{
-       glite_jp_error_t err;
-
-       assert(handle != NULL);
-       assert(buf != NULL);
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       if (write(((fhandle)handle)->fd_append, buf, nbytes) < 0) {
-               err.code = errno;
-               err.desc = "Error in write()";
-               return glite_jp_stack_error(ctx,&err);
-       }
-
-       return 0;
-}
-
-static int get_job_info(
-       glite_jp_context_t ctx,
-       const char *job,
-       char **owner,
-       struct timeval *tv_reg
-)
-{
-       char *ju = NULL;
-       char *ju_path = NULL;
-       FILE *regfile = NULL;
-       long reg_time_sec;
-       long reg_time_usec;
-       int ownerlen = 0;
-       int info_version;
-       char *int_fname = NULL;
-       glite_jp_error_t err;
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       if (jobid_unique_pathname(ctx, job, &ju, &ju_path, 1) != 0) {
-               err.code = ctx->error->code;
-               err.desc = "Cannot obtain jobid unique path/name";
-               return glite_jp_stack_error(ctx,&err);
-       }
-
-       if (asprintf(&int_fname, "%s/regs/%s/%s.info",
-                       config->internal_path, ju_path, ju) == -1) {
-               err.code = ENOMEM;
-               goto error_out;
-       }
-       regfile = fopen(int_fname, "r");
-       if (regfile == NULL) {
-               err.code = errno;
-               if (errno == ENOENT) 
-                       err.desc = "Job not registered";
-               else
-                       err.desc = "Cannot open jobs's reg info file";
-               goto error_out;
-       }
-       if (fscanf(regfile, "%d %ld.%ld %*s %*s %d ", &info_version,
-               &reg_time_sec, &reg_time_usec, &ownerlen) < 4 || ferror(regfile)) {
-               fclose(regfile);
-               err.code = errno;
-               err.desc = "Cannot read jobs's reg info file";
-               goto error_out;
-       }
-       if (ownerlen) {
-               *owner = (char *) calloc(1, ownerlen+1);
-               if (!*owner) {
-                       err.code = ENOMEM;
-                       goto error_out;
-               }
-               if (fgets(*owner, ownerlen+1, regfile) == NULL) {
-                       fclose(regfile);
-                       free(*owner);
-                       err.code = errno;
-                       err.desc = "Cannot read jobs's reg info file";
-                       goto error_out;
-               }
-       }
-       fclose(regfile);
-
-       tv_reg->tv_sec = reg_time_sec;
-       tv_reg->tv_usec = reg_time_usec;
-
-error_out:
-       free(int_fname);
-       free(ju);
-       free(ju_path);
-       if (err.code) {
-               return glite_jp_stack_error(ctx,&err);
-       } else { 
-               return 0;
-       }
-}
-
-static int get_job_info_int(
-       glite_jp_context_t ctx,
-       const char *int_fname,
-       char **jobid,
-       char **owner,
-       struct timeval *tv_reg
-)
-{
-       FILE *regfile = NULL;
-       long reg_time_sec;
-       long reg_time_usec;
-       int ownerlen = 0;
-       int info_version;
-       char jobid_buf[256];
-       glite_jp_error_t err;
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       regfile = fopen(int_fname, "r");
-       if (regfile == NULL) {
-               err.code = errno;
-               err.desc = "Cannot open jobs's reg info file";
-               goto error_out;
-       }
-       if (fscanf(regfile, "%d %ld.%ld %s %*s %d ", &info_version,
-               &reg_time_sec, &reg_time_usec, jobid_buf, &ownerlen) < 5 || ferror(regfile)) {
-               fclose(regfile);
-               err.code = errno;
-               err.desc = "Cannot read jobs's reg info file";
-               goto error_out;
-       }
-       *jobid = strdup(jobid_buf);
-       if (ownerlen) {
-               *owner = (char *) calloc(1, ownerlen+1);
-               if (!*owner) {
-                       err.code = ENOMEM;
-                       goto error_out;
-               }
-               if (fgets(*owner, ownerlen+1, regfile) == NULL) {
-                       fclose(regfile);
-                       free(*owner);
-                       err.code = errno;
-                       err.desc = "Cannot read jobs's reg info file";
-                       goto error_out;
-               }
-       }
-       fclose(regfile);
-
-       tv_reg->tv_sec = reg_time_sec;
-       tv_reg->tv_usec = reg_time_usec;
-
-error_out:
-       if (err.code) {
-               return glite_jp_stack_error(ctx,&err);
-       } else { 
-               return 0;
-       }
-}
-
-int glite_jppsbe_get_job_metadata(
-       glite_jp_context_t ctx,
-       const char *job,
-       glite_jp_attrval_t attrs_inout[]
-)
-{
-       int got_info = 0;
-       struct timeval tv_reg;
-       char *owner = NULL;
-       int got_tags = 0;
-       void *tags_handle = NULL;
-       glite_jp_tagval_t* tags = NULL;
-       int i,j;
-       glite_jp_error_t err;
-
-       assert(job != NULL);
-       assert(attrs_inout != NULL);
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       for (i = 0; attrs_inout[i].attr.type != GLITE_JP_ATTR_UNDEF; i++) {
-               switch (attrs_inout[i].attr.type) {
-               case GLITE_JP_ATTR_OWNER:
-               case GLITE_JP_ATTR_TIME:
-                       if (!got_info) {
-                               if (get_job_info(ctx, job, &owner, &tv_reg)) {
-                                       err.code = ctx->error->code;
-                                       err.desc = "Cannot retrieve job info";
-                                       goto error_out;
-                               }
-                               got_info = 1;
-                       }
-                       break;
-               case GLITE_JP_ATTR_TAG:
-                       if (!got_tags) {
-                               if (glite_jppsbe_open_file(ctx, job, GLITE_JP_FILECLASS_TAGS,
-                                       O_RDONLY, &tags_handle)) {
-                                       err.code = ctx->error->code;
-                                       err.desc = "Cannot open tag file";
-                                       goto error_out;
-                               }
-                               if (glite_jpps_tag_readall(ctx, tags_handle, &tags)) {
-                                       err.code = ctx->error->code;
-                                       err.desc = "Cannot read tags";
-                                       glite_jppsbe_close_file(ctx, tags_handle);
-                                       goto error_out;
-                               }
-                               glite_jppsbe_close_file(ctx, tags_handle);
-                               got_tags = 1;
-                       }
-                       break;
-               default:
-                       err.code = EINVAL;
-                       err.desc = "Invalid attribute type";
-                       goto error_out;
-                       break;
-               }
-
-               switch (attrs_inout[i].attr.type) {
-               case GLITE_JP_ATTR_OWNER:
-                       attrs_inout[i].value.s = strdup(owner);
-                       if (!attrs_inout[i].value.s) {
-                               err.code = ENOMEM;
-                               err.desc = "Cannot copy owner string";
-                               goto error_out;
-                       }       
-                       break;
-               case GLITE_JP_ATTR_TIME:
-                       attrs_inout[i].value.time = tv_reg;
-                       break;
-               case GLITE_JP_ATTR_TAG:
-                       for (j = 0; tags[j].name != NULL; j++) {
-                               if (!strcmp(tags[j].name, attrs_inout[i].attr.name)) {
-                                       if (glite_jpps_tagval_copy(ctx, &tags[j],
-                                               &attrs_inout[i].value.tag)) {
-                                               err.code = ENOMEM;
-                                               err.desc = "Cannot copy tag value";
-                                               goto error_out;
-                                       }
-                                       break;
-                               }
-                       }
-                       if (!tags[j].name) attrs_inout[i].value.tag.name = NULL;
-                       break;
-               default:
-                       break;
-               }
-       }
-
-error_out:
-       free(owner);
-       if (tags) for (j = 0; tags[j].name != NULL; j++) {
-               free(tags[j].name);
-               free(tags[j].value);
-       }
-       free(tags);
-       
-       if (err.code) {
-               while (i > 0) {
-                       i--;
-                       switch (attrs_inout[i].attr.type) {
-                       case GLITE_JP_ATTR_OWNER:
-                               free(attrs_inout[i].value.s);
-                               break;
-                       case GLITE_JP_ATTR_TAG:
-                               free(attrs_inout[i].value.tag.name);
-                               free(attrs_inout[i].value.tag.value);
-                       default:
-                               break;
-                       }
-               }
-               return glite_jp_stack_error(ctx,&err);
-       } else {
-               return 0;
-       }
-}
-static int compare_timeval(struct timeval a, struct timeval b)
-{
-       if (a.tv_sec < b.tv_sec) return -1;
-       if (a.tv_sec > b.tv_sec) return 1;
-       if (a.tv_usec < b.tv_usec) return -1;
-       if (a.tv_usec > b.tv_usec) return 1;
-       return 0;
-}
-
-static int query_phase2(
-       glite_jp_context_t ctx,
-       const char *ownerhash,
-       long regtime_tr,
-       int q_tags,
-       int md_tags,
-       const glite_jp_query_rec_t query[],
-       glite_jp_attrval_t metadata[],
-       int (*callback)(
-               glite_jp_context_t ctx,
-               const char *job,
-               const glite_jp_attrval_t metadata[]
-       )
-);
-
-static int query_phase2(
-       glite_jp_context_t ctx,
-       const char *ownerhash,
-       long regtime_tr,
-       int q_tags,
-       int md_tags,
-       const glite_jp_query_rec_t query[],
-       glite_jp_attrval_t metadata[],
-       int (*callback)(
-               glite_jp_context_t ctx,
-               const char *job,
-               const glite_jp_attrval_t metadata[]
-       )
-)
-{
-       char *time_dirname = NULL;
-       DIR *time_dirp = NULL;
-       struct dirent *jobent;
-       char *info_fname = NULL;
-       char *jobid = NULL;
-       char *owner = NULL;
-       struct timeval tv_reg;
-       void *tags_handle = NULL;
-       int matching;
-       int i, j;
-       glite_jp_tagval_t* tags = NULL;
-       glite_jp_error_t err;
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       if (asprintf(&time_dirname, "%s/data/%s/%d", config->internal_path,
-                       ownerhash, regtime_tr) == -1) {
-               err.code = ENOMEM;
-               return glite_jp_stack_error(ctx,&err);
-       }
-       time_dirp = opendir(time_dirname);
-       if (!time_dirp) {
-               free(time_dirname);
-               return 0; /* found nothing */
-       }
-       while ((jobent = readdir(time_dirp)) != NULL) {
-               if (!strcmp(jobent->d_name, ".")) continue;
-               if (!strcmp(jobent->d_name, "..")) continue;
-               if (asprintf(&info_fname, "%s/%s/_info", time_dirname,
-                               jobent->d_name) == -1) {
-                       err.code = ENOMEM;
-                       goto error_out;
-               }
-               if (get_job_info_int(ctx, info_fname, &jobid, &owner,  &tv_reg)) {
-                       err.code = EIO;
-                       err.desc = "Cannot retrieve job info";
-                       goto error_out;
-               }
-               if (q_tags || md_tags) {
-                       if (glite_jppsbe_open_file(ctx, jobid, GLITE_JP_FILECLASS_TAGS,
-                               O_RDONLY, &tags_handle)) {
-                               err.code = ctx->error->code;
-                               err.desc = "Cannot open tag file";
-                               goto error_out;
-                       }
-                       if (glite_jpps_tag_readall(ctx, tags_handle, &tags)) {
-                               err.code = ctx->error->code;
-                               err.desc = "Cannot read tags";
-                               glite_jppsbe_close_file(ctx, tags_handle);
-                               goto error_out;
-                       }
-                       glite_jppsbe_close_file(ctx, tags_handle);
-                       tags_handle = NULL;
-               }
-
-               matching = 1;
-               for (i = 0; matching && query[i].attr.type != GLITE_JP_ATTR_UNDEF; i++) {
-                       switch (query[i].attr.type) {
-                       case GLITE_JP_ATTR_OWNER:
-                               if (query[i].value.s == NULL || 
-                                       strcmp(query[i].value.s, owner)) matching = 0;
-                               break;
-                       case GLITE_JP_ATTR_TIME:
-                               switch (query[i].op) {
-                                       case GLITE_JP_QUERYOP_EQUAL:
-                                               matching = !compare_timeval(tv_reg, query[i].value.time);
-                                               break;
-                                       case GLITE_JP_QUERYOP_UNEQUAL:
-                                               matching = compare_timeval(tv_reg, query[i].value.time);
-                                               break;
-                                       case GLITE_JP_QUERYOP_LESS:
-                                               matching = compare_timeval(tv_reg, query[i].value.time) < 0;
-                                               break;
-                                       case GLITE_JP_QUERYOP_GREATER:
-                                               matching = compare_timeval(tv_reg, query[i].value.time) > 0;
-                                               break;
-                                       case GLITE_JP_QUERYOP_WITHIN:
-                                               matching = compare_timeval(tv_reg, query[i].value.time) >= 0
-                                                       && compare_timeval(tv_reg, query[i].value2.time) <= 0;
-                                               break;
-                               }
-                               break;
-                       case GLITE_JP_ATTR_TAG:
-                               if (!tags) {
-                                       matching = 0;
-                                       break;
-                               }
-                               for (j = 0; tags[j].name != NULL; j++) {
-                                       if (!strcmp(tags[j].name, query[i].attr.name)) {
-                                               switch (query[i].op) {
-                                               case GLITE_JP_QUERYOP_EQUAL:
-                                                       matching = !strcmp(tags[j].value, query[i].value.s);
-                                                       break;
-                                               case GLITE_JP_QUERYOP_UNEQUAL:
-                                                       matching = strcmp(tags[j].value, query[i].value.s);
-                                                       break;
-                                               case GLITE_JP_QUERYOP_LESS:
-                                                       matching = strcmp(tags[j].value, query[i].value.s) < 0;
-                                                       break;
-                                               case GLITE_JP_QUERYOP_GREATER:
-                                                       matching = strcmp(tags[j].value, query[i].value.s) > 0;
-                                                       break;
-                                               case GLITE_JP_QUERYOP_WITHIN:
-                                                       matching = strcmp(tags[j].value, query[i].value.s) >= 0 \
-                                                               && strcmp(tags[j].value, query[i].value2.s) <= 0 ;
-                                                       break;
-                                               default:
-                                                       break;
-                                               }
-                                       }
-                               }
-                               break;
-                       default:
-                               break;
-                       }
-               }
-               if (!matching) {
-                       free(info_fname); info_fname = NULL;
-                       free(jobid); jobid = NULL;
-                       if (tags) for (j = 0; tags[j].name != NULL; j++) {
-                               free(tags[j].name);
-                               free(tags[j].value);
-                       }
-                       free(tags); tags = NULL;
-                       continue;
-               }
-
-               for (i = 0; metadata[i].attr.type != GLITE_JP_ATTR_UNDEF; i++) {
-                       switch (metadata[i].attr.type) {
-                       case GLITE_JP_ATTR_OWNER:
-                               metadata[i].value.s = owner;
-                               break;
-                       case GLITE_JP_ATTR_TIME:
-                               metadata[i].value.time = tv_reg;
-                               break;
-                       case GLITE_JP_ATTR_TAG:
-                               for (j = 0; tags[j].name != NULL; j++) {
-                                       if (!strcmp(tags[j].name, metadata[i].attr.name)) {
-                                               if (glite_jpps_tagval_copy(ctx, &tags[j],
-                                                       &metadata[i].value.tag)) {
-                                                       err.code = ENOMEM;
-                                                       err.desc = "Cannot copy tag value";
-                                                       goto error_out;
-                                               }
-                                               break;
-                                       }
-                               }
-                               if (!tags[j].name) {
-                                       metadata[i].value.tag.name = NULL;
-                                       metadata[i].value.tag.value = NULL;
-                               }
-                               break;
-                       default:
-                               break;
-                       }
-               }
-               (*callback)(ctx, jobid, metadata);
-               free(jobid); jobid = NULL;
-               while (i > 0) {
-                       i--;
-                       switch (metadata[i].attr.type) {
-                       case GLITE_JP_ATTR_TAG:
-                               free(metadata[i].value.tag.name);
-                               free(metadata[i].value.tag.value);
-                       default:
-                               break;
-                       }
-               }
-       }
-
-error_out:
-       if (tags) for (j = 0; tags[j].name != NULL; j++) {
-               free(tags[j].name);
-               free(tags[j].value);
-       }
-       if (tags_handle) glite_jppsbe_close_file(ctx, tags_handle);
-       free(info_fname);
-       free(owner);
-       free(jobid);
-       closedir(time_dirp);
-       free(time_dirname);
-       if (err.code)  {
-               while (i > 0) {
-                       i--;
-                       switch (metadata[i].attr.type) {
-                       case GLITE_JP_ATTR_TAG:
-                               free(metadata[i].value.tag.name);
-                               free(metadata[i].value.tag.value);
-                       default:
-                               break;
-                       }
-               }
-               return glite_jp_stack_error(ctx,&err);
-       } else
-               return 0;
-}
-
-int glite_jppsbe_query(
-       glite_jp_context_t ctx,
-       const glite_jp_query_rec_t query[],
-       const glite_jp_attrval_t metadata[],
-       int (*callback)(
-               glite_jp_context_t ctx,
-               const char *job,
-               const glite_jp_attrval_t metadata[]
-       )
-)
-{
-       /* XXX clone metadata */
-       int i;
-       char *q_exact_owner = NULL;
-       char *ownerhash = NULL;
-       long q_min_time = 0;
-       long q_max_time = LONG_MAX;
-       long q_min_time_tr;
-       long q_max_time_tr;
-       int q_with_tags = 0;
-       int md_info = 0;
-       int md_tags = 0;
-       char *owner_dirname = NULL;
-       DIR *owner_dirp = NULL;
-       struct dirent *ttimeent;
-       char *data_dirname = NULL;
-       DIR *data_dirp = NULL;
-       struct dirent *ownerent;
-       long ttime = 0;
-       glite_jp_attrval_t *metadata_templ = NULL;
-       glite_jp_error_t err;
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       for (i = 0; query[i].attr.type != GLITE_JP_ATTR_UNDEF; i++) {
-               if (query[i].attr.type == GLITE_JP_ATTR_OWNER && query[i].op == GLITE_JP_QUERYOP_EQUAL) {
-                       q_exact_owner = query[i].value.s;
-               }
-               if (query[i].attr.type == GLITE_JP_ATTR_TIME) {
-                       switch (query[i].op) {
-                       case GLITE_JP_QUERYOP_EQUAL:
-                               q_min_time = query[i].value.time.tv_sec;
-                               q_max_time = query[i].value.time.tv_sec + 1;
-                               break;
-                       case GLITE_JP_QUERYOP_LESS:
-                               if (q_max_time > query[i].value.time.tv_sec + 1)
-                                       q_max_time = query[i].value.time.tv_sec + 1;
-                               break;
-                       case GLITE_JP_QUERYOP_WITHIN:
-                               if (q_max_time > query[i].value2.time.tv_sec + 1)
-                                       q_max_time = query[i].value2.time.tv_sec + 1;
-                               /* fallthrough */
-                       case GLITE_JP_QUERYOP_GREATER:
-                               if (q_min_time < query[i].value.time.tv_sec)
-                                       q_min_time = query[i].value.time.tv_sec;
-                               break;
-                       default:
-                               err.code = EINVAL;
-                               err.desc = "Invalid query op";
-                               return glite_jp_stack_error(ctx,&err);
-                               break;
-                       }
-               }
-               if (query[i].attr.type == GLITE_JP_ATTR_TAG) 
-                       q_with_tags = 1;
-
-       }
-
-       for (i = 0; metadata[i].attr.type != GLITE_JP_ATTR_UNDEF; i++) {
-               switch (metadata[i].attr.type) {
-               case GLITE_JP_ATTR_OWNER:
-               case GLITE_JP_ATTR_TIME:
-                       md_info = 1;
-                       break;
-               case GLITE_JP_ATTR_TAG:
-                       md_tags = 1;
-                       break;
-               default:
-                       err.code = EINVAL;
-                       err.desc = "Invalid attribute type in metadata parameter";
-                       return glite_jp_stack_error(ctx,&err);
-                       break;
-               }
-       }
-       metadata_templ = (glite_jp_attrval_t *) calloc(i + 1, sizeof(glite_jp_attrval_t));
-       if (!metadata_templ) {
-               err.code = ENOMEM;
-               return glite_jp_stack_error(ctx,&err);
-       }
-       memcpy(metadata_templ, metadata, (i + 1) * sizeof(glite_jp_attrval_t));
-       
-       q_min_time_tr = regtime_trunc(q_min_time);
-       q_max_time_tr = regtime_ceil(q_max_time);
-
-       if (q_exact_owner) {
-               ownerhash = str2md5(q_exact_owner); /* static buffer */
-               if (asprintf(&owner_dirname, "%s/data/%s", config->internal_path, ownerhash) == -1) {
-                       err.code = ENOMEM;
-                       return glite_jp_stack_error(ctx,&err);
-               }
-               owner_dirp = opendir(owner_dirname);
-               free(owner_dirname);
-               if (!owner_dirp) {
-                       free(metadata_templ);
-                       return 0; /* found nothing */
-               }
-               while ((ttimeent = readdir(owner_dirp)) != NULL) {
-                       if (!strcmp(ttimeent->d_name, ".")) continue;
-                       if (!strcmp(ttimeent->d_name, "..")) continue;
-                       ttime = atol(ttimeent->d_name);
-                       if (ttime >= q_min_time_tr && ttime < q_max_time_tr) {
-                               if (query_phase2(ctx, ownerhash, ttime, q_with_tags, md_tags,
-                                               query, metadata_templ, callback)) {
-                                       err.code = EIO;
-                                       err.desc = "query_phase2() error";
-                                       goto error_out;
-                               }
-                       }
-               }
-       } else { /* !q_exact_owner */
-               if (asprintf(&data_dirname, "%s/data", config->internal_path) == -1) {
-                       err.code = ENOMEM;
-                       goto error_out;
-               }
-               data_dirp = opendir(data_dirname);
-               if (!data_dirp) {
-                       err.code = EIO;
-                       err.desc = "Cannot open data directory";
-                       goto error_out;
-               }
-               while ((ownerent = readdir(data_dirp)) != NULL) {
-                       if (!strcmp(ownerent->d_name, ".")) continue;
-                       if (!strcmp(ownerent->d_name, "..")) continue;
-                       if (asprintf(&owner_dirname, "%s/data/%s", config->internal_path,
-                                       ownerent->d_name) == -1) {
-                               err.code = ENOMEM;
-                               goto error_out;
-                       }
-                       owner_dirp = opendir(owner_dirname);
-                       free(owner_dirname);
-                       if (!owner_dirp) {
-                               err.code = EIO;
-                               err.desc = "Cannot open owner data directory";
-                               goto error_out;
-                       }
-                       while ((ttimeent = readdir(owner_dirp)) != NULL) {
-                               if (!strcmp(ttimeent->d_name, ".")) continue;
-                               if (!strcmp(ttimeent->d_name, "..")) continue;
-                               ttime = atol(ttimeent->d_name);
-                               if (ttime >= q_min_time_tr && ttime < q_max_time_tr) {
-                                       if (query_phase2(ctx, ownerent->d_name, ttime, q_with_tags, md_tags,
-                                                       query, metadata_templ, callback)) {
-                                               err.code = EIO;
-                                               err.desc = "query_phase2() error";
-                                               goto error_out;
-                                       }
-                               }
-                       }
-                       closedir(owner_dirp); owner_dirp = NULL;
-               }
-               closedir(data_dirp); data_dirp = NULL;
-       }
-       return 0;
-
-error_out:
-       if (owner_dirp) closedir(owner_dirp);
-       if (data_dirp) closedir(data_dirp);
-       free(data_dirname);
-       free(metadata_templ);
-       return glite_jp_stack_error(ctx,&err);
-}
-
-/* XXX:
-- no primary authorization yet
-- no concurrency control yet
-- partial success in pwrite,append
-- "unique" part of jobid is assumed to be unique across bookkeeping servers
-- repository versioning not fully implemented yet
-*/
diff --git a/org.glite.jp.primary/src/is_client.c b/org.glite.jp.primary/src/is_client.c
deleted file mode 100644 (file)
index 1d0446a..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <stdio.h>
-#include <time.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-
-#include "glite/jp/types.h"
-
-#include "feed.h"
-#include "jpis_H.h"
-#include "jpis_.nsmap"
-
-int glite_jpps_single_feed(
-               glite_jp_context_t ctx,
-               const char *destination,
-               const char *job,
-               const glite_jp_attrval_t attrs[]
-)
-{
-       /* TODO: really call JP Index server (via interlogger) */
-       printf("feed to %s, job %s\n",destination,job);
-
-       if (soap_call_jpsrv__UpdateJobs(ctx->other_soap,destination,"",
-               /* FIXME: feedId */ "",
-               /* FIXME: UpdateJobsData */ NULL,
-               0,
-               NULL
-       )) fprintf(stderr,"UpdateJobs: %s %s\n",ctx->other_soap->fault->faultcode,
-               ctx->other_soap->fault->faultstring);
-
-       return 0;
-}
diff --git a/org.glite.jp.primary/src/jptype_map.h b/org.glite.jp.primary/src/jptype_map.h
deleted file mode 100644 (file)
index 6df0828..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#if GSOAP_VERSION >= 20700
-#define INPUT_SANDBOX  jptype__UploadClass__INPUT_SANDBOX
-#define OUTPUT_SANDBOX jptype__UploadClass__OUTPUT_SANDBOX
-#define JOB_LOG        jptype__UploadClass__JOB_LOG
-
-#define OWNER jptype__AttributeType__OWNER
-#define TIME jptype__AttributeType__TIME
-#define TAG jptype__AttributeType__TAG
-
-#define EQUAL jptype__QueryOp__EQUAL
-#define UNEQUAL jptype__QueryOp__UNEQUAL
-#define LESS jptype__QueryOp__LESS
-#define GREATER jptype__QueryOp__GREATER
-#define WITHIN jptype__QueryOp__WITHIN
-#endif
-
diff --git a/org.glite.jp.primary/src/simple_server.c b/org.glite.jp.primary/src/simple_server.c
deleted file mode 100644 (file)
index 3bbb743..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#include <stdio.h>
-
-#include "glite/jp/types.h"
-#include "glite/jp/context.h"
-
-#include "jpps_H.h"
-
-extern SOAP_NMAC struct Namespace jpis__namespaces[],jpps__namespaces[];
-
-int main(int argc, char *argv[]) {
-   struct soap soap;
-   int i, m, s; // master and slave sockets
-
-   glite_jp_context_t  ctx;
-
-   soap_init(&soap);
-   soap_set_namespaces(&soap, jpps__namespaces);
-
-   glite_jp_init_context(&ctx);
-
-   if (glite_jppsbe_init(ctx, &argc, argv)) {
-          /* XXX log */
-          fputs(glite_jp_error_chain(ctx), stderr);
-          exit(1);
-   }
-
-   soap.user = (void *) ctx;
-
-   ctx->other_soap = soap_new();
-   soap_init(ctx->other_soap);
-   soap_set_namespaces(ctx->other_soap,jpis__namespaces);
-
-   srand48(time(NULL)); /* feed id generation */
-
-   m = soap_bind(&soap, NULL, 8901, 100);
-   if (m < 0)
-      soap_print_fault(&soap, stderr);
-   else
-   {
-      fprintf(stderr, "Socket connection successful: master socket = %d\n", m);
-      for (i = 1; ; i++) {
-         s = soap_accept(&soap);
-         if (s < 0) {
-            soap_print_fault(&soap, stderr);
-            break;
-         }
-         jpps__serve(&soap); // process RPC request
-         soap_destroy(&soap); // clean up class instances
-         soap_end(&soap); // clean up everything and close socket
-        glite_jp_run_deferred(ctx);
-      }
-   }
-   soap_done(&soap); // close master socket
-
-   return 0;
-}
-
-/* XXX: we don't use it */
-SOAP_NMAC struct Namespace namespaces[] = { {NULL,NULL} };
diff --git a/org.glite.jp.primary/src/soap_ops.c b/org.glite.jp.primary/src/soap_ops.c
deleted file mode 100644 (file)
index 1e5534b..0000000
+++ /dev/null
@@ -1,374 +0,0 @@
-#include <stdio.h>
-#include <fcntl.h>
-
-#include "glite/jp/types.h"
-#include "glite/jp/context.h"
-
-#include "feed.h"
-
-#include "jpps_H.h"
-/* #include "JobProvenancePS.nsmap" */
-#include "jpps_.nsmap" 
-
-#include "jptype_map.h"
-
-static struct jptype__GenericJPFaultType *jp2s_error(struct soap *soap,
-               const glite_jp_error_t *err)
-{
-       struct jptype__GenericJPFaultType *ret = NULL;
-       if (err) {
-               ret = soap_malloc(soap,sizeof *ret);
-               memset(ret,0,sizeof *ret);
-               ret->code = err->code;
-               ret->source = soap_strdup(soap,err->source);
-               ret->text = soap_strdup(soap,strerror(err->code));
-               ret->description = soap_strdup(soap,err->desc);
-               ret->reason = jp2s_error(soap,err->reason);
-       }
-       return ret;
-}
-
-static void err2fault(const glite_jp_context_t ctx,struct soap *soap)
-{
-       char    *et;
-       struct SOAP_ENV__Detail *detail = soap_malloc(soap,sizeof *detail);
-       struct _GenericJPFault *f = soap_malloc(soap,sizeof *f);
-
-
-       f->jptype__GenericJPFault = jp2s_error(soap,ctx->error);
-
-       detail->__type = SOAP_TYPE__GenericJPFault;
-#if GSOAP_VERSION >= 20700
-       detail->fault = f;
-#else
-       detail->value = f;
-#endif
-       detail->__any = NULL;
-
-       soap_receiver_fault(soap,"Oh, shit!",NULL);
-       if (soap->version == 2) soap->fault->SOAP_ENV__Detail = detail;
-       else soap->fault->detail = detail;
-}
-
-static glite_jp_fileclass_t s2jp_fileclass(enum jptype__UploadClass class)
-{
-       switch (class) {
-               case INPUT_SANDBOX: return GLITE_JP_FILECLASS_INPUT;
-               case OUTPUT_SANDBOX: return GLITE_JP_FILECLASS_OUTPUT;
-               case JOB_LOG: return GLITE_JP_FILECLASS_LBLOG;
-               default: return GLITE_JP_FILECLASS_UNDEF;
-       }
-}
-
-static void s2jp_tag(const struct jptype__TagValue *stag,glite_jp_tagval_t *jptag)
-{
-       memset(jptag,0,sizeof *jptag);
-       jptag->name = strdup(stag->name);
-       jptag->sequence = stag->sequence ? *stag->sequence : 0;
-       jptag->timestamp = stag->timestamp ? *stag->timestamp : 0;
-       if (stag->stringValue) jptag->value = strdup(stag->stringValue);
-       else if (stag->blobValue) {
-               jptag->binary = 1;
-               jptag->size = stag->blobValue->__size;
-               jptag->value = (char *) stag->blobValue->__ptr;
-       }
-}
-
-#define CONTEXT_FROM_SOAP(soap,ctx) glite_jp_context_t ctx = (glite_jp_context_t) ((soap)->user)
-
-SOAP_FMAC5 int SOAP_FMAC6 jpsrv__RegisterJob(
-               struct soap *soap,
-               char *job,
-               struct jpsrv__RegisterJobResponse *response)
-{
-       CONTEXT_FROM_SOAP(soap,ctx);
-       char    *owner = glite_jp_peer_name(ctx);
-       glite_jp_attrval_t owner_val[2];
-
-       if (glite_jppsbe_register_job(ctx,job,owner)) {
-               err2fault(ctx,soap);
-               free(owner);
-               return SOAP_FAULT;
-       }
-
-       owner_val[0].attr.type = GLITE_JP_ATTR_OWNER;
-       owner_val[0].value.s = owner;
-       owner_val[1].attr.type = GLITE_JP_ATTR_UNDEF;
-
-/* XXX: errrors should be ingored but not silently */
-       glite_jpps_match_attr(ctx,job,owner_val); 
-       free(owner);
-
-       return SOAP_OK;
-}
-
-
-SOAP_FMAC5 int SOAP_FMAC6 jpsrv__StartUpload(
-               struct soap *soap,
-               char *job,
-               enum jptype__UploadClass class,
-               time_t commit_before,
-               char *content_type,
-               struct jpsrv__StartUploadResponse *response)
-{
-       CONTEXT_FROM_SOAP(soap,ctx);
-       glite_jp_fileclass_t    jclass = s2jp_fileclass(class);
-       char    *destination;
-
-       if (glite_jppsbe_start_upload(ctx,job,jclass,content_type,&destination,&commit_before)) {
-               err2fault(ctx,soap);
-               return SOAP_FAULT;
-       }
-
-       response->destination = soap_strdup(soap,destination);
-       free(destination);
-       response->commitBefore = commit_before;
-
-       return SOAP_OK;
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 jpsrv__CommitUpload(
-               struct soap *soap,
-               char *destination,
-               struct jpsrv__CommitUploadResponse *response)
-{
-       CONTEXT_FROM_SOAP(soap,ctx);
-       char    *job = NULL;
-       glite_jp_fileclass_t    class;
-
-       if (glite_jppsbe_commit_upload(ctx,destination)) {
-               err2fault(ctx,soap);
-               return SOAP_FAULT;
-       }
-
-       /* XXX: should not fail when commit_upload was OK */
-       glite_jppsbe_destination_info(ctx,destination,&job,&class);
-
-       /* XXX: ignore errors but don't fail silenty */
-       glite_jpps_match_file(ctx,job,class);
-
-       return SOAP_OK;
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 jpsrv__RecordTag(
-               struct soap *soap,
-               char *job,
-               struct jptype__TagValue *tag,
-               struct jpsrv__RecordTagResponse *response)
-{
-       CONTEXT_FROM_SOAP(soap,ctx);
-       void    *tagfile;
-
-       glite_jp_tagval_t       mytag;
-
-       if (glite_jppsbe_open_file(ctx,job,GLITE_JP_FILECLASS_TAGS,
-                                       O_WRONLY|O_CREAT,&tagfile))
-       {
-               err2fault(ctx,soap);
-               return SOAP_FAULT;
-       }
-
-       if (glite_jpps_tag_append(ctx,tagfile,&mytag)) {
-               err2fault(ctx,soap);
-               glite_jppsbe_close_file(ctx,tagfile);
-               return SOAP_FAULT;
-       }
-
-       if (glite_jppsbe_close_file(ctx,tagfile)) {
-               err2fault(ctx,soap);
-               return SOAP_FAULT;
-       }
-
-       /* XXX: ignore errors but don't fail silenty */
-
-       s2jp_tag(tag,&mytag);
-       glite_jpps_match_tag(ctx,job,&mytag);
-
-       return SOAP_OK;
-}
-
-static void s2jp_attr(const struct jptype__Attribute *in,glite_jp_attr_t *out)
-{
-       switch (in->type) {
-               case OWNER: out->type = GLITE_JP_ATTR_OWNER; break;
-               case TIME: out->type = GLITE_JP_ATTR_TIME;
-                          out->name = strdup(in->name);
-                          break;
-               case TAG: out->type = GLITE_JP_ATTR_TAG;
-                         out->name = strdup(in->name);
-                         break;
-               default: break;
-       }
-}
-
-static void s2jp_queryval(
-               const char *in,
-               glite_jp_attrtype_t type,
-               union _glite_jp_query_rec_val *out)
-{
-       switch (type) {
-               case GLITE_JP_ATTR_OWNER:
-               case GLITE_JP_ATTR_TAG:
-                       out->s = strdup(in);
-                       break;
-               case GLITE_JP_ATTR_TIME:
-                       out->time.tv_sec = atoi(in);
-                       break;
-       }
-}
-
-static void s2jp_query(const struct jptype__PrimaryQueryElement *in, glite_jp_query_rec_t *out)
-{
-       s2jp_attr(in->attr,&out->attr);
-
-       switch (in->op) {
-               case EQUAL: out->op = GLITE_JP_QUERYOP_EQUAL; break;
-               case UNEQUAL: out->op = GLITE_JP_QUERYOP_UNEQUAL; break;
-               case LESS: out->op = GLITE_JP_QUERYOP_LESS; break;
-               case GREATER: out->op = GLITE_JP_QUERYOP_GREATER; break;
-               case WITHIN:
-                       out->op = GLITE_JP_QUERYOP_WITHIN;
-                       s2jp_queryval(in->value2,out->attr.type,&out->value2);
-                       break;
-       }
-
-       s2jp_queryval(in->value,out->attr.type,&out->value);
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 jpsrv__FeedIndex(
-               struct soap *soap,
-               char *destination,
-               struct jptype__Attributes *attributes,
-               struct jptype__PrimaryQuery *query,
-               enum xsd__boolean history,
-               enum xsd__boolean continuous,
-               struct jpsrv__FeedIndexResponse *response)
-{      
-
-/* deferred processing: return feed_id to the index server first,
- * start feeding it afterwards -- not before the index server actually
- * knows feed_id and is ready to accept the feed.
- *
- * Has to be done within the same server slave, 
- * passed through the context */
-
-       CONTEXT_FROM_SOAP(soap,ctx);
-       char    *feed_id = NULL;
-       time_t  expires = 0;
-       int     ret = SOAP_OK;
-
-       glite_jp_attr_t *attrs = calloc(attributes->__sizeitem+1,sizeof *attrs);
-       glite_jp_query_rec_t    *qry = calloc(query->__sizeitem+1,sizeof *qry);
-       int     i;
-
-       glite_jp_clear_error(ctx);
-
-       for (i = 0; i<attributes->__sizeitem; i++) s2jp_attr(attributes->item[i],attrs+i);
-       for (i = 0; i<query->__sizeitem; i++) s2jp_query(query->item[i],qry+i);
-
-       if (history) {
-               if (glite_jpps_run_feed(ctx,destination,attrs,qry,&feed_id)) {
-                       err2fault(ctx,soap);
-                       ret = SOAP_FAULT;
-                       goto cleanup;
-               }
-       }
-
-       if (continuous) {
-               if (glite_jpps_register_feed(ctx,destination,attrs,qry,&feed_id,&expires)) {
-                       err2fault(ctx,soap);
-                       ret = SOAP_FAULT;
-                       goto cleanup;
-               }
-       }
-
-       if (!history && !continuous) {
-               glite_jp_error_t        err;
-               err.code = EINVAL;
-               err.source = __FUNCTION__;
-               err.desc = "at least one of <history> and <continous> must be true";
-               glite_jp_stack_error(ctx,&err);
-               err2fault(ctx,soap);
-               ret = SOAP_FAULT;
-               goto cleanup;
-       }
-
-       response->expires = expires;
-       response->feedId = soap_strdup(soap,feed_id);
-
-cleanup:
-       free(feed_id);
-       for (i=0; attrs[i].type; i++) free(attrs[i].name);
-       free(attrs);
-       for (i=0; qry[i].attr.type; i++) glite_jp_free_query_rec(qry+i);
-       free(qry);
-
-       return ret;
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 jpsrv__FeedIndexRefresh(
-               struct soap *soap,
-               char *feed_id,
-               struct jpsrv__FeedIndexRefreshResponse *response)
-{
-       fprintf(stderr,"%s: not implemented\n",__FUNCTION__);
-       abort();
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 jpsrv__GetJob(
-               struct soap *soap,
-               char *job,
-               struct jpsrv__GetJobResponse *response)
-{
-       CONTEXT_FROM_SOAP(soap,ctx);
-       char    *url;
-
-       struct {
-               glite_jp_fileclass_t    type;
-               char    **url;
-               char    *name;
-       } tab[] = {
-               { GLITE_JP_FILECLASS_INPUT, &response->inputSandbox, "input sandbox" },
-               { GLITE_JP_FILECLASS_OUTPUT, &response->outputSandbox, "output sandbox" },
-               { GLITE_JP_FILECLASS_LBLOG, &response->jobLog, "L&B log" },
-               { GLITE_JP_FILECLASS_TAGS, &response->tags, "JP tags" },
-               { GLITE_JP_FILECLASS_UNDEF, NULL, NULL }
-       };
-
-       int     i,gotone = 0;
-       glite_jp_error_t        err;
-               
-       for (i=0; tab[i].type; i++) {
-               glite_jp_clear_error(ctx);
-               switch (glite_jppsbe_get_job_url(ctx,job,tab[i].type,&url)) {
-                       case 0: *tab[i].url = soap_strdup(soap,url);
-                               free(url);
-                               gotone = 1;
-                               break;
-                       case ENOENT:
-                               *tab[i].url = NULL;
-                               break;
-                       default: 
-                               err.code = ctx->error->code;
-                               err.source = "jpsrv__GetJob()";
-                               err.desc = tab[i].name;
-                               glite_jp_stack_error(ctx,&err);
-                               err2fault(ctx,soap);
-                               glite_jp_clear_error(ctx);
-                               return SOAP_FAULT;
-               }
-       }
-
-       if (!gotone) {
-               glite_jp_clear_error(ctx);
-               err.code = ENOENT;
-               err.source = __FUNCTION__;
-               err.desc = "No file found for this job";
-               glite_jp_stack_error(ctx,&err);
-               err2fault(ctx,soap);
-               glite_jp_clear_error(ctx);
-               return SOAP_FAULT;
-       }
-       return SOAP_OK;
-}
-
diff --git a/org.glite.jp.primary/src/tags.c b/org.glite.jp.primary/src/tags.c
deleted file mode 100644 (file)
index 1f11b4d..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-#include <stdlib.h>
-
-#include <glite/jp/types.h>
-#include "tags.h"
-#include "backend.h"
-
-/* magic name_len value_len binary sequence timestamp */
-#define HEADER "JP#TAG# %05u %012lu %c %05u %012lu#"
-#define HEADER_SIZE 48
-
-int glite_jpps_tag_append(
-       glite_jp_context_t ctx,
-       void *handle,
-       const glite_jp_tagval_t *tag
-)
-{
-       char    hdr[HEADER_SIZE+1];
-       glite_jp_error_t        err;
-
-       unsigned long   vlen = tag->binary ? tag->size :
-                               (tag->value ? strlen(tag->value) : 0);
-       int     nlen;
-
-       memset(&err,0,sizeof err);
-       err.source = "glite_jpps_tag_append()";
-
-       if (!tag->name) {
-               err.code = EINVAL;
-               err.desc = "tag name";
-               return glite_jp_stack_error(ctx,&err);
-       }
-
-       nlen = strlen(tag->name);
-
-       assert(sprintf(hdr,HEADER,nlen,vlen,
-                       tag->binary ? "B" : "S",
-                       tag->sequence, tag->timestamp) == HEADER_SIZE);
-
-       if (glite_jppsbe_append(ctx,handle,hdr,HEADER_SIZE)) {
-               err.code = EIO;
-               err.desc = "write tag header";
-               return glite_jp_stack_error(ctx,&err);
-       }
-
-       if (glite_jppsbe_append(ctx,handle,tag->name,nlen)) {
-               err.code = EIO;
-               err.desc = "write tag name";
-               return glite_jp_stack_error(ctx,&err);
-       }
-
-       if (glite_jppsbe_append(ctx,handle,tag->value,vlen)) {
-               err.code = EIO;
-               err.desc = "write tag value";
-               return glite_jp_stack_error(ctx,&err);
-       }
-
-       return 0;
-}
-
-int glite_jpps_tagval_copy(
-       glite_jp_context_t ctx,
-       glite_jp_tagval_t *from,
-       glite_jp_tagval_t *to
-)
-{
-       glite_jp_error_t err;
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       to->name = strdup(from->name);
-       if (!to->name) {
-               err.code = ENOMEM;
-               return glite_jp_stack_error(ctx,&err);
-       }
-       to->sequence = from->sequence;
-       to->timestamp = from->timestamp;
-       to->binary = from->binary;
-       to->size = from->size;
-       to->value = (char *) malloc(to->size);
-       if (!to->value) {
-               free(to->name);
-               err.code = ENOMEM;
-               return glite_jp_stack_error(ctx,&err);
-       }
-       memcpy(from->value, to->value, to->size);
-
-       return 0;
-}
-
-int glite_jpps_tag_read(
-       glite_jp_context_t ctx,
-       void *handle,
-       off_t offset,
-       glite_jp_tagval_t *tagvalue,
-       size_t *shift
-)
-{
-       char hdr[HEADER_SIZE+1];
-       unsigned int nlen;
-       unsigned long  vlen;
-       char binary;
-       unsigned sequence;
-       unsigned timestamp;
-       char * name = NULL;
-       char * value = NULL;
-       ssize_t ret;
-       glite_jp_error_t err;
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       hdr[HEADER_SIZE] = '\0';
-       if (glite_jppsbe_pread(ctx, handle, hdr, HEADER_SIZE, offset, &ret)) {
-               err.code = EIO;
-               err.desc = "Cannot read tag header";
-               goto error_out;
-       }
-       if (ret == 0) {
-               err.code = ENOENT;
-               err.desc = "No more tags in the file";
-               goto error_out;
-       }
-       /* #define HEADER "JP#TAG# %05u %012lu %c %05u %012lu#" */
-       if (sscanf(hdr, HEADER, &nlen, &vlen, &binary, &sequence, &timestamp) < 5) {
-               err.code = EILSEQ;
-               err.desc = "Incorrect tag header format";
-               goto error_out;
-       }
-       name = (char*) malloc(nlen + 1);
-       if (!name) {
-               err.code = ENOMEM;
-               goto error_out;
-       }
-       name[nlen] = '\0';
-       value = (char*) malloc(vlen + 1);
-       if (!value) {
-               err.code = ENOMEM;
-               goto error_out;
-       }
-       value[vlen] = '\0';
-       if (glite_jppsbe_pread(ctx, handle, name, nlen, offset + HEADER_SIZE, &ret)) {
-               err.code = EIO;
-               err.desc = "Cannot read tag name";
-               goto error_out;
-       }
-       if (glite_jppsbe_pread(ctx, handle, value, vlen, offset + HEADER_SIZE + nlen, &ret)) {
-               err.code = EIO;
-               err.desc = "Cannot read tag value";
-               goto error_out;
-       }
-       
-       tagvalue->name = name;
-       tagvalue->sequence = sequence;
-       tagvalue->timestamp = timestamp;
-       tagvalue->binary = (binary == 'B') ? 1 : 0;
-       tagvalue->size = vlen;
-       tagvalue->value = value;
-
-       *shift = HEADER_SIZE + nlen + vlen;
-
-       return 0;
-error_out:
-       free(name);
-       free(value);
-       return glite_jp_stack_error(ctx,&err);
-}
-
-/*
-int glite_jpps_tag_read(glite_jp_context_t, void *, off_t, glite_jp_tagval_t *, size_t);
-int glite_jpps_tag_readall(glite_jp_context_t, void *, glite_jp_tagval_t **);
-*/
-
-int glite_jpps_tag_readall(
-       glite_jp_context_t ctx,
-       void *handle,
-       glite_jp_tagval_t **tags_out
-)
-{
-       glite_jp_tagval_t * tags = NULL;
-       void * newspace;
-       int ntags = 0;
-       int ntagspace = 0;
-       off_t offset = 0;
-       int ret;
-       size_t shift;
-       glite_jp_error_t err;
-
-       glite_jp_clear_error(ctx);
-       memset(&err,0,sizeof err);
-       err.source = __FUNCTION__;
-
-       ntagspace = 1;
-       tags = (glite_jp_tagval_t *) calloc(ntagspace + 1, sizeof(*tags));
-       if (!tags) {
-               err.code = ENOMEM;
-               return glite_jp_stack_error(ctx,&err);
-       }
-       while (!(ret = glite_jpps_tag_read(ctx, handle, offset, &tags[ntags], &shift))) {
-               offset += shift;
-               ntags++;
-               if (ntagspace <= ntags) {
-                       ntagspace += 1;
-                       newspace = realloc(tags, (ntagspace + 1) * sizeof(*tags));
-                       if (!newspace) {
-                               err.code = ENOMEM;
-                               goto error_out;
-                       }
-                       tags = (glite_jp_tagval_t *) newspace;
-               }
-       }
-       if (ret == ENOENT) {
-               *tags_out = tags;
-               return 0;
-       } else {
-               err.code = EIO;
-               err.desc = "Error reading tag value";
-       }
-
-error_out:
-       for (; ntags-- ;) {
-               free(tags[ntags].name);
-               free(tags[ntags].value);
-       }
-       free(tags);
-       return glite_jp_stack_error(ctx,&err);
-}
diff --git a/org.glite.jp.primary/src/tags.h b/org.glite.jp.primary/src/tags.h
deleted file mode 100644 (file)
index 0d8afa8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-int glite_jpps_tag_append(glite_jp_context_t,void *,const glite_jp_tagval_t *);
diff --git a/org.glite.jp.primary/src/typemap.dat b/org.glite.jp.primary/src/typemap.dat
deleted file mode 100644 (file)
index 7032cb2..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-jpsrv = http://glite.org/wsdl/services/jp
-jptype = http://glite.org/wsdl/types/jp
diff --git a/org.glite.jp.ws-interface/.cvsignore b/org.glite.jp.ws-interface/.cvsignore
deleted file mode 100755 (executable)
index 1df717b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-.project
-.cdtproject
\ No newline at end of file
diff --git a/org.glite.jp.ws-interface/LICENSE b/org.glite.jp.ws-interface/LICENSE
deleted file mode 100755 (executable)
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.jp.ws-interface/Makefile b/org.glite.jp.ws-interface/Makefile
deleted file mode 100644 (file)
index 73cd9ad..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-# Default values
-top_srcdir=.
-builddir=build
-top_builddir=${top_srcdir}/${builddir}
-stagedir=.
-distdir=.
-globalprefix=glite
-package=glite-jp-ws-interface
-version=0.0.0
-PREFIX=/opt/glite
-
--include Makefile.inc
-
-VPATH=${top_srcdir}/interface
-STAGETO=interface
-
-WSDL=JobProvenancePS.wsdl JobProvenanceTypes.wsdl 
-
-all compile:
-
-check: 
-       @echo No unit test required for interface-only module.
-
-stage:
-       $(MAKE) install PREFIX=${stagedir}
-
-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=${top_srcdir}/tmpbuilddir
-       cd ${top_srcdir}/tmpbuilddir && tar -czf ${top_srcdir}/${distdir}/${package}-${version}_bin.tar.gz *
-       rm -rf ${top_srcdir}/tmpbuilddir
-       
-install:
-       -mkdir -p ${PREFIX}/${STAGETO}
-       -mkdir -p ${PREFIX}/share/doc/${package}-${version}
-       install -m 644 ${top_srcdir}/LICENSE ${PREFIX}/share/doc/${package}-${version}
-       cd ${top_srcdir}/interface && install -m 644 ${WSDL} ${PREFIX}/${STAGETO}
-
-clean:
-       rm -f *.h
-       
diff --git a/org.glite.jp.ws-interface/build.xml b/org.glite.jp.ws-interface/build.xml
deleted file mode 100644 (file)
index 44d86eb..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Build file for the GLite jp ws-interface component
-       
-       Authors: Joachim Flammer <Joachim.Flammer@Cern.ch>      
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.5  2004/07/20 16:08:30  flammer
-       Changed incorrect my_... instead of .._template entries for subsystem and component.
-       
-       Revision 1.4  2004/07/16 16:32:53  flammer
-       Added comment where to add language target.
-       
-       Revision 1.3  2004/07/16 14:56:55  flammer
-       Corrected input path of build.properties.
-       
-       Revision 1.2  2004/07/06 20:43:19  flammer
-       Update of configure & targets.
-       
-       Revision 1.1.1.1  2004/06/18 12:40:17  flammer
-       Added general component template.
-       
-       
--->
-
-<project name="ws-interface" default="dist">
-
-       <!-- ==============================================
-             Builds the GLite jp ws-interface component
-            ============================================== -->
-       
-       <!-- =========================================
-             Import properties (order is important)
-            ========================================= -->
-       
-       <!-- Import baseline properties & 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 configuration definitions (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
-            ========================================= -->
-       <!-- Put your language target (java/c++-ant/c++-autotool/perl) here -->
-       <import file="${global.targets-simple_make.file}" />
-               
-       <!-- =========================================
-                Load version file 
-            ========================================= -->
-       <property file="${module.version.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.jp.ws-interface/interface/JobProvenanceIS.wsdl b/org.glite.jp.ws-interface/interface/JobProvenanceIS.wsdl
deleted file mode 100644 (file)
index 84c8844..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-<WSDL:definitions
-       xmlns:tns="http://glite.org/wsdl/services/jp"
-       xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-       xmlns:jp="http://glite.org/wsdl/types/jp"
-       xmlns:SOAP="http://schemas.xmlsoap.org/wsdl/soap/"
-       xmlns:WSDL="http://schemas.xmlsoap.org/wsdl/"
-       xmlns="http://schemas.xmlsoap.org/wsdl/"
-       targetNamespace="http://glite.org/wsdl/services/jp"
-       name="JobProvenanceIS">
-
-       <import namespace="http://glite.org/wsdl/types/jp" location="JobProvenanceTypes.wsdl"/>
-
-       <message name="GenericJPFault">
-               <part name="fault" element="jp:GenericJPFault"/>
-       </message>
-
-       <message name="QueryJobsRequest">
-               <part name="conditions" type="jp:IndexQuery"/>
-       </message>
-
-       <message name="QueryJobsResponse">
-               <part name="jobs" type="jp:JobRecords"/>
-       </message>
-               
-       <message name="UpdateJobsRequest">
-               <part name="feedId" type="xsd:string"/>
-               <part name="data" type="jp:UpdateJobsData"/>
-               <part name="feedDone" type="xsd:boolean"/>
-       </message>
-       <message name="EmptyResponse"/>
-       
-       <portType name="JobProvenanceIS_PortType">
-               <operation name="UpdateJobs">
-                       <documentation>Store or update information on jobs within the JP index server.
-Called directly by the primary storage, used for both batch and incremental feed.
-
-Input:
-
-data: list of job record updates. Each contains jobid, list of JP attribute values and user tag values.
-
-feedDone: flag indicating end of batch feed. (In order to avoid potential problems with buffer allocation
-the huge dataset of batch feed is split into reasonable chunks and delivered with more UpdateJobs calls.)
-
-Output: N/A
-
-Faults: GenericJPFault
-
-
-                       </documentation>
-                       <input message="tns:UpdateJobsRequest"/>
-                       <output message="tns:EmptyResponse"/>
-                       <fault name="f" message="tns:GenericJPFault"/>
-               </operation>
-               <operation name="QueryJobs">
-                       <documentation>Retrieve pointers to job records of jobs matching a query.
-Input: conditions - list of lists of query conditions.
-       Elements of the inner lists refer to a single job attribute, the conditions are or-ed.
-       Elements of the outer list may refer to different job attributes, they are and-ed.
-
-Output:
-
-jobs: list of JobId, PSContact (URL of the primary storage which manges this job) pairs
-
-Faults: GenericJPFault
-                       </documentation>
-                       <input message="tns:QueryJobsRequest"/>
-                       <output message="tns:QueryJobsResponse"/>
-                       <fault name="f" message="tns:GenericJPFault"/>
-               </operation>
-       </portType>
-
-       <binding name="JobProvenanceIS" type="tns:JobProvenanceIS_PortType">
-               <SOAP:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
-               <operation name="UpdateJobs">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-               <operation name="QueryJobs">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-       </binding>
-
-       <service name="JobProvenanceIS">
-               <documentation>Job Provenance Index service</documentation>
-               <port name="JobProvenanceIS" binding="tns:JobProvenanceIS">
-                       <SOAP:address location="http://localhost:10001"/>
-               </port>
-       </service>
-               
-
-</WSDL:definitions>
diff --git a/org.glite.jp.ws-interface/interface/JobProvenancePS.wsdl b/org.glite.jp.ws-interface/interface/JobProvenancePS.wsdl
deleted file mode 100644 (file)
index 7c777dd..0000000
+++ /dev/null
@@ -1,307 +0,0 @@
-<WSDL:definitions
-       xmlns:tns="http://glite.org/wsdl/services/jp"
-       xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-       xmlns:jp="http://glite.org/wsdl/types/jp"
-       xmlns:SOAP="http://schemas.xmlsoap.org/wsdl/soap/"
-       xmlns:WSDL="http://schemas.xmlsoap.org/wsdl/"
-       xmlns="http://schemas.xmlsoap.org/wsdl/"
-       targetNamespace="http://glite.org/wsdl/services/jp"
-       name="JobProvenancePS">
-
-       <import namespace="http://glite.org/wsdl/types/jp" location="JobProvenanceTypes.wsdl"/>
-
-       <message name="RegisterJobRequest">
-               <part name="job" type="xsd:string"/>
-       </message>
-       <message name="StartUploadRequest">
-               <part name="job" type="xsd:string"/>
-               <part name="uclass" type="jp:UploadClass"/>
-               <part name="commitBefore" type="xsd:dateTime"/>
-               <part name="contentType" type="xsd:string"/>
-       </message>
-       <message name="StartUploadResponse">
-               <part name="destination" type="xsd:string"/>
-               <part name="commitBefore" type="xsd:dateTime"/>
-       </message>
-       <message name="CommitUploadRequest">
-               <part name="destination" type="xsd:string"/>
-       </message>
-       <message name="RecordTagRequest">
-               <part name="jobid" type="xsd:string"/>
-               <part name="tag" type="jp:TagValue"/>
-       </message>
-       <message name="FeedIndexRequest">
-               <part name="destination" type="xsd:string"/>
-               <part name="attributes" type="jp:Attributes"/>
-               <part name="conditions" type="jp:PrimaryQuery"/>
-               <part name="history" type="xsd:boolean"/>
-               <part name="continuous" type="xsd:boolean"/>
-       </message>
-       <message name="FeedIndexResponse">
-               <part name="feedId" type="xsd:string"/>
-               <part name="expires" type="xsd:dateTime"/>
-       </message>
-       <message name="FeedIndexRefreshRequest">
-               <part name="feedId" type="xsd:string"/>
-       </message>
-       <message name="GetJobRequest">
-               <part name="jobid" type="xsd:string"/>
-       </message>
-       <message name="GetJobResponse">
-               <part name="jobLog" type="xsd:string"/>
-               <part name="inputSandbox" type="xsd:string"/>
-               <part name="outputSandbox" type="xsd:string"/>
-               <part name="tags" type="xsd:string"/>
-       </message>
-       <message name="GenericJPFault">
-               <part name="fault" element="jp:GenericJPFault"/>
-       </message>
-       <message name="EmptyResponse"/>
-       <portType name="JobProvenancePS_PortType">
-               <operation name="RegisterJob">
-                       <documentation>Register job with JP primary storage.
-Job registration in LB is propagated to JP immediately so that JP is aware of the job,
-despite no furhter information is available in it.
-
-Input: JobId
-
-Output: N/A
-
-Faults: GenericJPFault
-                       </documentation>
-                       <input message="tns:RegisterJobRequest"/>
-                       <output message="tns:EmptyResponse"/>
-                       <fault name="f" message="tns:GenericJPFault"/>
-               </operation>
-               <operation name="StartUpload">
-                       <documentation>Initiate upload of of sandbox/dump of job life log from LB.
-WM component responsible for job sandbox management and LB server call JP to declare
-intention to upload intput/output sandbox and job life log.
-
-Input:
-
-uclass: type of the upload - INPUT_SANDBOX, OUTPUT_SANDBOX, JOB_LOG
-
-commitTimeout: upper limit on time for which JP waits for committing this upload transaction
-
-contentType: MIME type of the uploaded file
-
-Output:
-
-destination: URL where the client should upload the file
-
-commitBefore: acutual time when the upload transaction times out
-
-Faults: GenericJPFault
-
-
-Initiate upload of of sandbox/dump of job life log from LB.</documentation>
-                       <input message="tns:StartUploadRequest"/>
-                       <output message="tns:StartUploadResponse"/>
-                       <fault name="f" message="tns:GenericJPFault"/>
-               </operation>
-               <operation name="CommitUpload">
-                       <documentation>Confirm upload.
-Should be called after a file upload initiaded with StartUpload is finished.
-
-Input:
-
-destination: Upload destination URL (to match with the original request)
-
-Output:
-
-Faults: GenericJPFault
-                       </documentation>
-                       <input message="tns:CommitUploadRequest"/>
-                       <output message="tns:EmptyResponse"/>
-                       <fault name="f" message="tns:GenericJPFault"/>
-               </operation>
-               <operation name="RecordTag">
-                       <documentation>Record a value of user tag.
-JP tags are either standalone or override values of their LB counterparts.
-However, JP tag values are still distinguishable those inherited from LB.
-JP tags may be either strings or blobs.
-
-Input:
-
-jobid:
-
-tag: structure containing name, timestamp, optional sequence number to order tag values
-without relying on timestamps, and string or blob value.
-
-Output: N/A
-
-Faults: GenericJPFault
-                       </documentation>
-                       <input message="tns:RecordTagRequest"/>
-                       <output message="tns:EmptyResponse"/>
-                       <fault name="f" message="tns:GenericJPFault"/>
-               </operation>
-               <operation name="FeedIndex">
-                       <documentation>Start feeding JP index server.
-Called by the index server to start batch feed, and optionally also subscribe for incremental feed.
-
-JP index server subscribes with JP primary storage using a query
-containing conditions on primary metadata and a list of queryable attributes
-of the index server (i.e. data which should be sent to the index server).
-
-When a matching job record is created or modified within the primary storage
-the job record data are sent to the subscribed index server.
-
-The subscription is soft-state, it expires after certain time unless refreshed by the client explicitely.
-
-In the batch mode the query has the same form
-with additional flag asking for all matching records (i.e.\ not only
-arriving afterwards).
-
-Input:
-
-destination: where to send the job record data
-
-attributes: which job record attributes should be sent to the requesting index server
-
-conditions: list of query conditions. Each conditions has the form Attribute Operator Value,
-where Attribute is any of job record attributes and Operator is one of EQUAL, UNEQUAL, LESS, GREATER, WITHIN.
-
-continuous: flag determining that the query is incremental (not batch) 
-
-Output:
-
-feedId: unique Id of the feed request, to be used in refresh, cancelation etc.
-
-expires: when the feed times out. Must be refreshed before this time.
-
-Faults: GenericJPFault
-                       </documentation>
-                       <input message="tns:FeedIndexRequest"/>
-                       <output message="tns:FeedIndexResponse"/>
-                       <fault name="f" message="tns:GenericJPFault"/>
-               </operation>
-               <operation name="FeedIndexRefresh">
-                       <documentation>Extend batch feed subscription (used by index server)
-
-Input: feedId returned previously by FeedIndex
-
-Output: the same as for FeedIndex
-
-Faults: GenericJPFault
-                       </documentation>
-                       <input message="tns:FeedIndexRefreshRequest"/>
-                       <output message="tns:FeedIndexResponse"/>
-                       <fault name="f" message="tns:GenericJPFault"/>
-               </operation>
-               <operation name="GetJob">
-                       <documentation>Retrieve job record URL's when jobid is known
-Used either to bypass JP index server query for this specific case, or after the index server query to
-retrieve actual job record.
-
-Input: jobid
-
-Output:
-
-jobLog, inputSandbox, outputSandbox, tags: URL's to components of the job record.
-
-Faults: GenericJPFault
-                       </documentation>
-                       <input message="tns:GetJobRequest"/>
-                       <output message="tns:GetJobResponse"/>
-                       <fault name="f" message="tns:GenericJPFault"/>
-               </operation>
-       </portType>
-       <binding name="JobProvenancePS" type="tns:JobProvenancePS_PortType">
-               <SOAP:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
-               <operation name="RegisterJob">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-               <operation name="StartUpload">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-               <operation name="CommitUpload">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-               <operation name="RecordTag">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-               <operation name="FeedIndex">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-               <operation name="FeedIndexRefresh">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-               <operation name="GetJob">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/jp"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-       </binding>
-
-       <service name="JobProvenancePS">
-               <documentation>Job Provenance Primary Storage service</documentation>
-               <port name="JobProvenancePS" binding="tns:JobProvenancePS">
-                       <SOAP:address location="http://localhost:10001"/>
-               </port>
-       </service>
-</WSDL:definitions>
diff --git a/org.glite.jp.ws-interface/interface/JobProvenanceTypes.wsdl b/org.glite.jp.ws-interface/interface/JobProvenanceTypes.wsdl
deleted file mode 100644 (file)
index e1a6db4..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0"?>
-<WSDL:definitions
-       xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
-       xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-       xmlns:WSDL="http://schemas.xmlsoap.org/wsdl/"
-       xmlns="http://schemas.xmlsoap.org/wsdl/"
-       xmlns:jp="http://glite.org/wsdl/types/jp"
-       targetNamespace="http://glite.org/wsdl/types/jp"
-       name="JobProvenanceTypes">
-
-
-<WSDL:types>   
-
-<schema
-       targetNamespace="http://glite.org/wsdl/types/jp"
-       xmlns="http://www.w3.org/2001/XMLSchema"
-       elementFormDefault="unqualified" attributeFormDefault="unqualified">
-       <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
-
-       <simpleType name="AttributeType">
-               <restriction base="xsd:string">
-                       <enumeration value="OWNER"/>
-                       <enumeration value="TIME"/>
-                       <enumeration value="TAG"/>
-               </restriction>
-       </simpleType>
-       <simpleType name="UploadClass">
-               <restriction base="xsd:string">
-                       <enumeration value="INPUT-SANDBOX"/>
-                       <enumeration value="OUTPUT-SANDBOX"/>
-                       <enumeration value="JOB-LOG"/>
-               </restriction>
-       </simpleType>
-       <simpleType name="QueryOp">
-               <restriction base="xsd:string">
-                       <enumeration value="EQUAL"/>
-                       <enumeration value="UNEQUAL"/>
-                       <enumeration value="LESS"/>
-                       <enumeration value="GREATER"/>
-                       <enumeration value="WITHIN"/>
-               </restriction>
-       </simpleType>
-       <complexType name="TagValue">
-               <sequence>
-                       <element name="name" type="xsd:string" minOccurs="1" maxOccurs="1" nillable="true"/>
-                       <element name="sequence" type="xsd:int" minOccurs="0" maxOccurs="1"/>
-                       <element name="timestamp" type="xsd:dateTime" minOccurs="0" maxOccurs="1" nillable="true"/>
-                       <element name="stringValue" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
-                       <element name="blobValue" type="xsd:base64Binary" minOccurs="0" maxOccurs="1" nillable="true"/>
-               </sequence>
-       </complexType>
-       <complexType name="Attribute">
-               <sequence>
-                       <element name="type" type="jp:AttributeType" minOccurs="1" maxOccurs="1"/>
-                       <element name="name" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-               </sequence>
-       </complexType>
-       <complexType name="Attributes">
-               <sequence>
-                       <element name="item" type="jp:Attribute" minOccurs="0" maxOccurs="unbounded"/>
-               </sequence>
-       </complexType>
-       <complexType name="GenericJPFaultType">
-               <sequence>
-                       <element name="source" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-                       <element name="code" type="xsd:int" minOccurs="1" maxOccurs="1"/>
-                       <element name="text" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-                       <element name="description" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                       <element name="reason" type="jp:GenericJPFaultType" minOccurs="0" maxOccurs="1"/>
-               </sequence>
-       </complexType>
-       <complexType name="PrimaryQueryElement">
-               <sequence>
-                       <element name="attr" type="jp:Attribute" minOccurs="1" maxOccurs="1"/>
-                       <element name="op" type="jp:QueryOp" minOccurs="1" maxOccurs="1"/>
-                       <element name="value" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-                       <element name="value2" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-               </sequence>
-       </complexType>
-       <complexType name="PrimaryQuery">
-               <sequence>
-                       <element name="item" type="jp:PrimaryQueryElement" minOccurs="0" maxOccurs="unbounded"/>
-               </sequence>
-       </complexType>
-       <complexType name="IndexQueryRecord">
-               <sequence>
-                       <element name="op" type="jp:QueryOp" minOccurs="1" maxOccurs="1"/>
-                       <element name="value" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-               </sequence>
-       </complexType>
-       <complexType name="IndexQueryElement">
-               <sequence>
-                       <element name="attr" type="jp:Attribute" minOccurs="1" maxOccurs="1"/>
-                       <element name="record" type="jp:IndexQueryRecord" minOccurs="1"  maxOccurs="unbounded"/>
-               </sequence>
-       </complexType>
-       <complexType name="IndexQuery">
-               <sequence>
-                       <element name="item" type="jp:IndexQueryElement" minOccurs="1" maxOccurs="unbounded"/>
-               </sequence>
-       </complexType>
-       <complexType name="JobRecord">
-               <sequence>
-                       <element name="jobid" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-                       <element name="PSContact" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-               </sequence>
-       </complexType>
-       <complexType name="JobRecords">
-               <sequence>
-                       <element name="record" type="jp:JobRecord" minOccurs="0" maxOccurs="unbounded"/>
-               </sequence>
-       </complexType>
-
-       <complexType name="AttrUpdate">
-               <sequence>
-                       <element name="name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-                       <element name="value" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-               </sequence>
-       </complexType>
-       <complexType name="AttrUpdates">
-               <sequence>
-                       <element name="item" type="jp:AttrUpdate" minOccurs="0" maxOccurs="unbounded" nillable="true"/>
-               </sequence>
-       </complexType>
-       <complexType name="JobUpdate">
-               <sequence>
-                       <element name="jobid" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-                       <element name="attributes" type="jp:AttrUpdates" minOccurs="1" maxOccurs="1"/>
-                       <element name="tags" type="jp:AttrUpdates" minOccurs="1" maxOccurs="1"/>
-               </sequence>
-       </complexType>
-       <complexType name="UpdateJobsData">
-               <sequence>
-                       <element name="job" type="jp:JobUpdate" minOccurs="0" maxOccurs="unbounded"/>
-               </sequence>
-       </complexType>
-               
-       <complexType name="FeedIndexResponse">
-               <sequence>
-                       <element name="feedId" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
-                       <element name="expires" type="xsd:dateTime" minOccurs="0" maxOccurs="1" nillable="true"/>
-               </sequence>
-       </complexType>
-       <complexType name="GetJobResponse">
-               <sequence>
-                       <element name="jobLog" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
-                       <element name="inputSandbox" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
-                       <element name="outputSandbox" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
-                       <element name="tags" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
-               </sequence>
-       </complexType>
-       <complexType name="StartUploadResponse">
-               <sequence>
-                       <element name="destination" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
-                       <element name="commitBefore" type="xsd:dateTime" minOccurs="0" maxOccurs="1" nillable="true"/>
-               </sequence>
-       </complexType>
-       <element name="GenericJPFault" type="jp:GenericJPFaultType"/>
-</schema>
-
-</WSDL:types>
-</WSDL:definitions>
diff --git a/org.glite.jp.ws-interface/project/build.properties b/org.glite.jp.ws-interface/project/build.properties
deleted file mode 100755 (executable)
index e69de29..0000000
diff --git a/org.glite.jp.ws-interface/project/configure.properties.xml b/org.glite.jp.ws-interface/project/configure.properties.xml
deleted file mode 100644 (file)
index 4b08208..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-        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), Finland
-        University of Bergen (UiB), Norway
-        Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-        Configuration build properties file for the GLite jp ws-interface component
-
-        Authors: Joachim Flammer <Joachim.Flammer@cern.ch>
-        Version info: $Id$
-        Release: $Name$
-
-        Revision history:
-        $Log$
-        Revision 1.3  2004/07/20 16:08:30  flammer
-        Changed incorrect my_... instead of .._template entries for subsystem and component.
-
-        Revision 1.2  2004/07/16 14:56:55  flammer
-        Corrected input path of build.properties.
-
-        Revision 1.1  2004/07/06 20:43:19  flammer
-        Update of configure & targets.
-
-
-
--->
-<project name="jp ws-interface component configuration properties">
-
-<target name="lbmakefiles">
-       <exec executable="ln" failonerror="true">
-               <arg line="-fs ${component.dir}/Makefile ${module.build.dir}/Makefile"/>
-       </exec>
-       <echo file="${module.build.dir}/Makefile.inc">
-top_srcdir=..
-builddir=build
-stagedir=${stage.abs.dir}
-distdir=${dist.dir}
-globalprefix=${global.prefix}
-jpprefix=${subsystem.prefix}
-package=${module.package.name}
-PREFIX=${install.dir}
-version=${module.version}
-glite_location=${with.glite.location}
-                </echo>
-    </target>
-</project>
diff --git a/org.glite.jp.ws-interface/project/glite-jp-ws-interface.spec b/org.glite.jp.ws-interface/project/glite-jp-ws-interface.spec
deleted file mode 100644 (file)
index dba6d55..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-Summary:Change me !!!
-Name:glite-jp-ws-interface
-Version:0.0.0
-Release:0
-Copyright:Open Source EGEE License
-Vendor:EU EGEE project
-Group:System/Application
-Prefix:/opt/glite
-BuildArch:x86_64
-BuildRoot:%{_builddir}/%{name}-%{version}
-Source:glite-jp-ws-interface-0.0.0_bin.tar.gz
-
-%define debug_package %{nil}
-
-%description
-Change me !!!
-
-%prep
-
-%setup -c
-
-%build
-
-%install
-
-%clean
-%pre
-%post
-%preun
-%postun
-%files
-%defattr(-,root,root)
-%{prefix}/interface/JobProvenancePS.wsdl
-%{prefix}/interface/JobProvenanceTypes.wsdl
-%{prefix}/share/doc/glite-jp-ws-interface-0.0.0/LICENSE
-
-%changelog
-
diff --git a/org.glite.jp.ws-interface/project/properties.xml b/org.glite.jp.ws-interface/project/properties.xml
deleted file mode 100644 (file)
index 4ec8018..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Common build properties file for the GLite jp ws-interface component
-       
-       Authors: Joachim Flammer <Joachim.Flammer@cern.ch>
-       Version info: $Id$
-       Release: $Name$ 
-       
-       Revision history:
-       $Log$
-       Revision 1.4  2004/07/20 16:08:30  flammer
-       Changed incorrect my_... instead of .._template entries for subsystem and component.
-       
-       Revision 1.3  2004/07/16 14:56:55  flammer
-       Corrected input path of build.properties.
-       
-       Revision 1.2  2004/07/16 14:36:49  flammer
-       
-       Corrected build.properties include.
-       
-       Revision 1.1.1.1  2004/06/18 12:40:17  flammer
-       Added general component template.
-       
-       
--->
-
-<project name="jp ws-interface component common properties">
-
-       <!-- Include build properties to allow overwriting 
-            of properties for subsystem                    -->
-       <property file="project/build.properties" />    
-
-       <!-- ======================================================
-              Define corresponding subsystem properties
-            ====================================================== -->
-
-       <!-- Subsystem name -->
-       <property name="subsystem.name" value="${jp.subsystem.name}"/>
-               
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${jp.subsystem.prefix}"/>
-
-       <!-- ======================================================
-              Define component properties
-            ====================================================== -->
-                               
-       <!-- Component name prefix -->
-       <property name="component.prefix" value="ws-interface" />
-                       
-       <!-- ======================================================
-              Define general component properties
-            ====================================================== -->
-       
-       <import file="${component.general.properties.file}" />
-                                               
-       <!-- ======================================================
-             Define extra properties here ...
-            ====================================================== -->
-       
-               
-</project>
diff --git a/org.glite.jp.ws-interface/project/tar_exclude b/org.glite.jp.ws-interface/project/tar_exclude
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.glite.jp.ws-interface/project/version.properties b/org.glite.jp.ws-interface/project/version.properties
deleted file mode 100755 (executable)
index e78612b..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-module.version = 0.0.0
-module.build = 0
-module.age = 0
\ No newline at end of file
diff --git a/org.glite.jp/.cvsignore b/org.glite.jp/.cvsignore
deleted file mode 100644 (file)
index 3a4edf6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.project
diff --git a/org.glite.jp/build.xml b/org.glite.jp/build.xml
deleted file mode 100644 (file)
index 7871c14..0000000
+++ /dev/null
@@ -1,262 +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 Middleware Job Provenance Subsystem
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.2  2004/12/01 18:36:00  zsalvet
-       Add component targets.
-       
-       Revision 1.1  2004/11/22 13:21:49  dimeglio
-       First version of this file
-       
--->
-
-<project name="jp" default="dist">
-
-       <description>
-               Ant build file to build the GLite Job Provenance Subsystem
-       </description>
-               
-       <!-- =========================================
-                Builds the GLite JP subsystem
-            ========================================= -->
-
-       <!-- Import baseline & user properties -->
-       <import file="../org.glite/project/baseline.properties.xml" />
-
-       <!-- Import subsystem build properties, 
-                             subsystem properties & 
-                             subsystem common properties -->
-       <import file="./project/properties.xml" />
-
-       <!-- Import global build properties and global properties -->
-       <import file="${global.properties.file}" />
-                               
-       <!-- =========================================
-                Load dependencies properties files (order is important) 
-            ========================================= -->
-       <property file="${user.dependencies.file}"/>
-       <property file="${subsystem.dependencies.file}"/>
-       <property file="${global.dependencies.file}"/>  
-
-       <!-- =========================================
-                 Load configure options
-             ========================================= -->
-        <import file="${global.configure.options.file}"/>
-                       
-       <!-- =========================================
-                Import global task definitions
-            ========================================= -->
-       <import file="${global.taskdefs.file}" />
-       
-       <!-- =========================================
-            Import global compiler definitions
-            ========================================= -->
-       <import file="${global.compilerdefs.file}" />
-               
-       <!-- =========================================
-                Import targets 
-            ========================================= -->
-       <import file="${global.targets-common.file}"/>
-       
-       <!-- =========================================
-                Load version file 
-            ========================================= -->
-       <property file="${module.version.file}"/>
-                       
-       <!-- ===============================================
-                 Public common targets
-            =============================================== -->
-
-       <target name="localinit" depends="envcheck">
-
-               <echo> Preparing directories ... </echo>
-               
-               <mkdir dir="${stage.bin.dir}" />
-               <mkdir dir="${stage.lib.dir}" />
-               <mkdir dir="${stage.java.dir}" />
-               <mkdir dir="${stage.inc.dir}" />
-               <mkdir dir="${stage.int.dir}" />
-
-               <mkdir dir="${dist.dir}" />
-
-       </target>
-
-       <target name="init" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="init"/>
-               </antcall>
-       </target>
-
-       <target name="checkstyle" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="checkstyle"/>
-               </antcall>
-       </target>
-
-       <target name="compile" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="compile"/>
-               </antcall>
-       </target>
-
-       <target name="compiletest" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="compiletest"/>
-               </antcall>
-       </target>
-
-       <target name="unittest" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="unittest"/>
-               </antcall>
-       </target>
-
-       <target name="unitcoverage" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="unitcoverage"/>
-               </antcall>
-       </target>
-
-       <target name="stage" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="stage"/>
-               </antcall>
-       </target>
-
-       <target name="dist" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="dist"/>
-               </antcall>
-       </target>
-
-       <target name="install" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="install"/>
-               </antcall>
-       </target>
-
-       <target name="doc" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="doc"/>
-               </antcall>
-       </target>
-
-       <target name="all" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="all"/>
-               </antcall>
-       </target>
-
-       <target name="clean" depends="envcheck">
-
-               <property name="offline.repository" value="true" />
-               <antcall target="buildmodules">
-                       <param name="target" value="clean"/>
-               </antcall>
-
-               <delete dir="${module.bin.dir}" />
-               <delete dir="${module.lib.dir}" />
-               <delete dir="${module.autosrc.dir}" />
-               <delete dir="${module.autodoc.dir}" />
-               <delete dir="${module.test.reports.dir}" />
-
-       </target>
-
-       <target name="cleanAll" depends="clean"/>
-
-       <!-- ===============================================
-                Private targets
-            =============================================== -->
-
-       <!-- ===============================================
-                Modules proxy targets
-            =============================================== -->
-
-       <!-- component targets definitions tag = do not remove = -->
-
-       <target name="ws-interface" unless="setenvonly" depends="envset" >
-               <if>
-                       <isset property="small.memory" />
-                       <then>
-                               <exec dir="${jp.subsystem.dir}.ws-interface" executable="${antExec}" failonerror="${failonerror}">
-                                       <arg line="${target} &quot;-Dsmall.memory=true&quot; &quot;-Dbootstrap=${bootstrap}&quot; &quot;-Dfailonerror=${failonerror}&quot; &quot;-Ddo.cvs.tag=${do.cvs.tag}&quot;"/>
-                               </exec>
-                       </then>
-                       <else>
-                               <ant dir="${jp.subsystem.dir}.ws-interface"
-                                       target="${target}"
-                                       inheritall="false" />
-                       </else>
-               </if>
-       </target>
-
-       <target name="common" unless="setenvonly" depends="envset" >
-               <if>
-                       <isset property="small.memory" />
-                       <then>
-                               <exec dir="${jp.subsystem.dir}.common" executable="${antExec}" failonerror="${failonerror}">
-                                       <arg line="${target} &quot;-Dsmall.memory=true&quot; &quot;-Dbootstrap=${bootstrap}&quot; &quot;-Dfailonerror=${failonerror}&quot; &quot;-Ddo.cvs.tag=${do.cvs.tag}&quot;"/>
-                               </exec>
-                       </then>
-                       <else>
-                               <ant dir="${jp.subsystem.dir}.common"
-                                       target="${target}"
-                                       inheritall="false" />
-                       </else>
-               </if>
-       </target>
-
-       <target name="index" unless="setenvonly" depends="envset, common" >
-               <if>
-                       <isset property="small.memory" />
-                       <then>
-                               <exec dir="${jp.subsystem.dir}.index" executable="${antExec}" failonerror="${failonerror}">
-                                       <arg line="${target} &quot;-Dsmall.memory=true&quot; &quot;-Dbootstrap=${bootstrap}&quot; &quot;-Dfailonerror=${failonerror}&quot; &quot;-Ddo.cvs.tag=${do.cvs.tag}&quot;"/>
-                               </exec>
-                       </then>
-                       <else>
-                               <ant dir="${jp.subsystem.dir}.index"
-                                       target="${target}"
-                                       inheritall="false" />
-                       </else>
-               </if>
-       </target>
-
-       <target name="primary" unless="setenvonly" depends="envset, ws-interface, common" >
-               <if>
-                       <isset property="small.memory" />
-                       <then>
-                               <exec dir="${jp.subsystem.dir}.primary" executable="${antExec}" failonerror="${failonerror}">
-                                       <arg line="${target} &quot;-Dsmall.memory=true&quot; &quot;-Dbootstrap=${bootstrap}&quot; &quot;-Dfailonerror=${failonerror}&quot; &quot;-Ddo.cvs.tag=${do.cvs.tag}&quot;"/>
-                               </exec>
-                       </then>
-                       <else>
-                               <ant dir="${jp.subsystem.dir}.primary"
-                                       target="${target}"
-                                       inheritall="false" />
-                       </else>
-               </if>
-       </target>
-
-       <!-- Main proxy -->
-       <target name="buildmodules" depends="envset,
-                                               ws-interface,
-                                               common,
-                                               index,
-                                               primary">
-               <echo append="true" file="${global.project.dir}/cruisecontrol-stub.xml">
-       &lt;project name="${subsystem.name}" type="post-subsystem" packageName="${global.prefix}-${subsystem.prefix}"/&gt;
-               </echo>
-       </target>
-
-</project>
diff --git a/org.glite.jp/project/build.properties b/org.glite.jp/project/build.properties
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.glite.jp/project/dependencies.properties b/org.glite.jp/project/dependencies.properties
deleted file mode 100644 (file)
index ab3b83f..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-###################################################################
-# System dependencies
-###################################################################
-
-org.glite.version              = HEAD
-org.glite.jp.version           = HEAD
-
-# Component dependencies tag = do not remove this line =
-org.glite.jp.ws-interface.version      = HEAD
-org.glite.jp.common.version    = HEAD
-org.glite.jp.index.version     = HEAD
-org.glite.jp.primary.version   = HEAD
diff --git a/org.glite.jp/project/glite.jp.csf.xml b/org.glite.jp/project/glite.jp.csf.xml
deleted file mode 100644 (file)
index fd68f71..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-<?xml version="1.0"?>
-<!--
-       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
-
-       GLite Middleware Job Provenance Configuration Specification File
-       
-       Authors: Alberto Di Meglio <alberto.di.meglio@cern.ch>  
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.2  2004/12/01 18:24:25  zsalvet
-       common, index, and primary components defined
-       
-       Revision 1.1  2004/11/22 13:21:49  dimeglio
-       First version of this file
-       
--->
-
-
-<project name="GLite Middleware JP CSF" default="all">
-
-       <!-- ===============================================
-                 Determine workspace directory 
-            =============================================== -->
-
-       <!-- Relative workspace root directory -->
-       <property name="workspace.dir" value="../.." />
-       
-       <!-- ===============================================
-                Load properties
-            =============================================== -->
-
-       <!-- load baseline and user properties -->
-       <import file="${workspace.dir}/org.glite/project/baseline.properties.xml" />
-
-       <!-- define build properties file location since we are already in project dir -->
-       <property name="subsystem.build.properties.file" value="./build.properties" />
-
-       <!-- Load subsystem-specific property file -->
-       <property file="./properties.xml"/>
-
-       <!-- load global properties -->
-       <import file="${global.properties.file}" />
-
-       <!-- ===============================================
-                Load dependencies 
-            =============================================== -->
-
-       <!-- Load user dependencies file -->
-       <property file="${user.dependencies.file}" />
-               
-       <!-- Load subsystem dependencies file -->
-       <property file="./dependencies.properties" />
-
-       <!-- Load global dependencies file -->
-       <property file="${global.dependencies.file}" />
-
-       <!-- ===============================================
-                Load targets
-                =============================================== -->
-       <import file="${global.targets-envchecks.file}" />
-       <import file="${global.targets-external-dependencies.file}" />  
-
-       <!-- ===============================================
-                Evaluate CVS tags
-                =============================================== -->
-
-       <target name="evaluate.cvs.tags" description="Figure out if we need tagged CVS checkout">
-               
-               <condition property="glite.head">
-                       <and>
-                               <equals arg1="${org.glite.version}" arg2="HEAD" />
-                               <or>
-                                       <istrue value="${update}" />
-                                       <not>
-                                               <available file="${global.dependencies.file}" type="file" />
-                                       </not>
-                               </or>
-                       </and>
-               </condition>
-               
-               <condition property="glite.tag">
-                       <and>
-                               <not>
-                                       <equals arg1="${org.glite.version}" arg2="HEAD" />
-                               </not>
-                               <or>
-                                       <istrue value="${update}" />
-                                       <not>
-                                               <available file="${global.dependencies.file}" type="file" />
-                                       </not>
-                               </or>
-                       </and>
-               </condition>
-               
-               <condition property="glite-jp.head">
-                       <and>
-                               <equals arg1="${org.glite.jp.version}" arg2="HEAD" />
-                               <istrue value="${update}" />
-                       </and>
-               </condition>
-               
-               <condition property="glite-jp.tag">
-                       <and>
-                               <not>
-                                       <equals arg1="${org.glite.jp.version}" arg2="HEAD" />
-                               </not>
-                               <istrue value="${update}" />
-                       </and>
-               </condition>
-
-               <!-- condition property tag = do not remove = -->
-
-               <condition property="common.head">
-                       <equals arg1="${org.glite.jp.common.version}" arg2="HEAD" />
-               </condition>
-
-               <condition property="ws-interface.head">
-                       <equals arg1="${org.glite.jp.ws-interface.version}" arg2="HEAD" />
-               </condition>
-
-               <condition property="index.head">
-                       <equals arg1="${org.glite.jp.index.version}" arg2="HEAD" />
-               </condition>
-
-               <condition property="primary.head">
-                       <equals arg1="${org.glite.jp.primary.version}" arg2="HEAD" />
-               </condition>
-
-       </target>
-
-       <presetdef name="cvs-co">
-               <cvs command="checkout" dest="${workspace.dir}" />
-       </presetdef>
-
-       <!-- =====================================================
-                Self-update if required
-            ===================================================== -->
-
-       <!-- Update main GLite module -->
-       <target name="org.glite" depends="get.glite.head, get.glite.tag"/>
-
-       <target name="get.glite.head" if="glite.head">
-               <cvs-co package="org.glite" />
-       </target>
-
-       <target name="get.glite.tag" if="glite.tag">
-               <cvs-co package="org.glite"
-                       tag="${org.glite.version}" />
-       </target>
-
-       <!-- Update the current module -->
-       <target name="org.glite.jp" depends="get.glite-jp.head, 
-                                                               get.glite-jp.tag"/>
-
-       <target name="get.glite-jp.head" if="glite-jp.head">
-               <cvs-co package="org.glite.jp" />
-               <fail>The org.glite and org.glite.jp modules have been updated, please rerun the configuration file</fail>
-       </target>
-
-       <target name="get.glite-jp.tag" if="glite-jp.tag">
-               <cvs-co package="org.glite.jp"
-                       tag="${org.glite.jp.version}" />
-               <fail>The org.glite and org.glite.jp modules have been updated, please rerun the configuration file</fail>
-       </target>
-
-       <!-- *****************************************************-->
-       <!-- Development tools                                    -->
-       <!-- *****************************************************-->
-       
-       <!-- All development tools -->
-       <target name="devtools" depends="oscheck,
-                                        junitcheck,
-                                        junit,
-                                        chkstyle,
-                                        jalopy,
-                                        ant-contrib,
-                                        cpptasks,
-                     log4j,
-                                        egee-ant-ext"
-               description="Get development tools into repository."/>          
-
-       <!-- =====================================================
-                External libraries
-            ===================================================== -->
-       
-       <!--  All external libraries -->
-       <target name="external" 
-               description="Install external packages" depends="oscheck"/>
-       
-       <!-- =====================================================
-                GLite Middleware jp modules
-            ===================================================== -->
-       
-       <!-- component targets tag = do not remove = -->
-
-       <!-- ws-interface -->
-       <target name="ws-interface" depends="evaluate.cvs.tags, get.ws-interface.head, get.ws-interface.tag"/>
-       <target name="get.ws-interface.head" if="ws-interface.head">
-               <cvs-co package="org.glite.jp.ws-interface" />
-       </target>
-       <target name="get.ws-interface.tag" unless="ws-interface.head">
-               <cvs-co package="org.glite.jp.ws-interface"
-                       tag="${org.glite.jp.ws-interface.version}" />
-       </target>
-
-       <!-- common -->
-       <target name="common" depends="evaluate.cvs.tags, get.common.head, get.common.tag"/>
-       <target name="get.common.head" if="common.head">
-               <cvs-co package="org.glite.jp.common" />
-       </target>
-       <target name="get.common.tag" unless="common.head">
-               <cvs-co package="org.glite.jp.common"
-                       tag="${org.glite.jp.common.version}" />
-       </target>
-
-       <!-- index -->
-       <target name="index" depends="evaluate.cvs.tags, get.index.head, get.index.tag"/>
-       <target name="get.index.head" if="index.head">
-               <cvs-co package="org.glite.jp.index" />
-       </target>
-       <target name="get.index.tag" unless="index.head">
-               <cvs-co package="org.glite.jp.index"
-                       tag="${org.glite.jp.index.version}" />
-       </target>
-       
-       <!-- primary -->
-       <target name="primary" depends="evaluate.cvs.tags, get.primary.head, get.primary.tag"/>
-       <target name="get.primary.head" if="primary.head">
-               <cvs-co package="org.glite.jp.primary" />
-       </target>
-       <target name="get.primary.tag" unless="primary.head">
-               <cvs-co package="org.glite.jp.primary"
-                       tag="${org.glite.jp.primary.version}" />
-       </target>
-
-       <!-- All project modules -->
-       <target name="project" depends="ws-interface,
-                                       common,
-                                       index,
-                                       primary" />
-    
-       <!-- ====================================================
-                Checkout all
-            ==================================================== -->
-               
-       <!-- All libraries -->
-       <target name="all" depends="oscheck,
-                                       evaluate.cvs.tags,
-                                       defaultenvchecks,
-                                       org.glite,
-                                       org.glite.jp,
-                                       devtools,
-                                       external,
-                                       project" />             
-
-       <!-- ====================================================
-                Print dependecies to console
-            ==================================================== -->
-       
-       <target name="dependencies">
-               <concat>
-                       <fileset dir="." includes="dependencies.properties" />
-               </concat>
-       </target>               
-
-</project>
diff --git a/org.glite.jp/project/properties.xml b/org.glite.jp/project/properties.xml
deleted file mode 100755 (executable)
index 276cf76..0000000
+++ /dev/null
@@ -1,47 +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
-
-       Common build properties file for the gLite JP modules
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-                        Alberto Di Meglio <alberto.di.meglio@cern.ch>          
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
--->
-
-<project name="Job Provenance subsystem common properties">
-
-       <!-- Include build properties to allow overwriting 
-            of properties for subsystem                    -->
-       <property name="subsystem.build.properties.file" value="./project/build.properties" />
-       <property file="${subsystem.build.properties.file}" />  
-
-       <!-- ======================================================
-          Define subsystem properties
-                ====================================================== -->
-       
-       <!-- Subsystem name -->
-       <property name="subsystem.name" value="${jp.subsystem.name}"/>
-       
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${jp.subsystem.prefix}"/>
-       
-       <!-- ======================================================
-          Define general subsystem properties
-                ====================================================== -->
-               
-       <!-- Include common subsystem properties -->
-       <import file="${subsystem.general.properties.file}" />
-       
-       <!-- ======================================================
-                Define extra properties here ...
-                ====================================================== -->
-                       
-               
-</project>
diff --git a/org.glite.jp/project/run-workspace b/org.glite.jp/project/run-workspace
deleted file mode 100644 (file)
index a5d1f54..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-
-cd ../..
-
-cvs co org.glite
-cvs co org.glite.jp
-                                                                                                                                                             
-cd org.glite.jp/project
-ant -f glite.jp.csf.xml
-
diff --git a/org.glite.jp/project/taskdefs.xml b/org.glite.jp/project/taskdefs.xml
deleted file mode 100755 (executable)
index c4cc889..0000000
+++ /dev/null
@@ -1,24 +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
-
-       Common Ant task definition file for the gLite Job Provenance modules
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-                        Alberto Di Meglio <alberto.di.meglio@cern.ch>          
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
--->
-
-<project name="Job Provenance subsystem common tasks and types definitions">
-       
-       <!-- ======================================================
-                Subsystem task definitions
-                ====================================================== -->
-       
-</project>
\ No newline at end of file
diff --git a/org.glite.jp/project/version.properties b/org.glite.jp/project/version.properties
deleted file mode 100644 (file)
index 75e32e6..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Dec 10 13:38:38 CET 2004
-module.version=0.1.0
-module.build=3
-module.age=1
diff --git a/org.glite.lb.client-interface/.cvsignore b/org.glite.lb.client-interface/.cvsignore
deleted file mode 100644 (file)
index 1df717b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-.project
-.cdtproject
\ No newline at end of file
diff --git a/org.glite.lb.client-interface/LICENSE b/org.glite.lb.client-interface/LICENSE
deleted file mode 100644 (file)
index 259a91f..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-LICENSE file for EGEE Middleware\r
-================================\r
-\r
-Copyright (c) 2004 on behalf of the EU EGEE Project: \r
-The European Organization for Nuclear Research (CERN), \r
-Istituto Nazionale di Fisica Nucleare (INFN), Italy\r
-Datamat Spa, Italy\r
-Centre National de la Recherche Scientifique (CNRS), France\r
-CS Systeme d'Information (CSSI), France\r
-Royal Institute of Technology, Center for Parallel Computers (KTH-PDC), Sweden\r
-Universiteit van Amsterdam (UvA), Netherlands\r
-University of Helsinki (UH.HIP), Finlan\r
-University of Bergen (UiB), Norway\r
-Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom\r
-\r
-Redistribution and use in source and binary forms, with or without\r
-modification, are permitted provided that the following conditions are\r
-met: \r
-\r
-1. Redistributions of source code must retain the above copyright\r
-notice, this list of conditions and the following disclaimer.\r
-\r
-2. Redistributions in binary form must reproduce the above copyright\r
-notice, this list of conditions and the following disclaimer in the\r
-documentation and/or other materials provided with the distribution.\r
-\r
-3. The end-user documentation included with the redistribution, if\r
-any, must include the following acknowledgment: "This product includes\r
-software developed by The EU EGEE Project (http://cern.ch/eu-egee/)."\r
-Alternatively, this acknowledgment may appear in the software itself, if\r
-and wherever such third-party acknowledgments normally appear.\r
-\r
-4. The names EGEE and the EU EGEE Project must not be\r
-used to endorse or promote products derived from this software without\r
-prior written permission. For written permission, please contact\r
-<email address>.\r
-\r
-5. You are under no obligation whatsoever to provide anyone with any\r
-bug fixes, patches, or upgrades to the features, functionality or\r
-performance of the Software ("Enhancements") that you may develop over\r
-time; however, if you choose to provide your Enhancements to The EU\r
-EGEE Project, or if you choose to otherwise publish or distribute your\r
-Enhancements, in source code form without contemporaneously requiring\r
-end users of The EU EGEE Proejct to enter into a separate written license\r
-agreement for such Enhancements, then you hereby grant The EU EGEE Project\r
-a non-exclusive, royalty-free perpetual license to install, use, copy,\r
-modify, prepare derivative works, incorporate into the EGEE Middleware\r
-or any other computer software, distribute, and sublicense your\r
-Enhancements or derivative works thereof, in binary and source code\r
-form (if any), whether developed by The EU EGEE Project or third parties.\r
-\r
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED\r
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
-DISCLAIMED. IN NO EVENT SHALL PROJECT OR ITS CONTRIBUTORS BE LIABLE\r
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\r
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\r
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\r
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-\r
-This software consists of voluntary contributions made by many\r
-individuals on behalf of the EU EGEE Prject. For more information on The\r
-EU EGEE Project, please see http://cern.ch/eu-egee/. For more information on\r
-EGEE Middleware, please see http://egee-jra1.web.cern.ch/egee-jra1/\r
-\r
-\r
diff --git a/org.glite.lb.client-interface/Makefile b/org.glite.lb.client-interface/Makefile
deleted file mode 100644 (file)
index 39d467d..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-# Default values
-top_srcdir=.
-builddir=build
-top_builddir=${top_srcdir}/${builddir}
-stagedir=.
-distdir=.
-globalprefix=glite
-lbprefix=lb
-package=glite-lb-client-interface
-version=0.0.0
-PREFIX=/opt/glite
-
--include Makefile.inc
-
-SUFFIXES = .T
-
-VPATH=${top_srcdir}/interface
-AT3=perl -I${top_srcdir}/project ${top_srcdir}/project/at3
-
-STAGETO=include/${globalprefix}/${lbprefix}
-STATIC_H=consumer.h context.h dump.h load.h notification.h notifid.h purge.h \
-       Notification.h CountRef.h Job.h LoggingExceptions.h ServerConnection.h \
-       consumer_fake.h producer_fake.h statistics.h
-GEN_H=events.h jobstat.h producer.h Event.h JobStatus.h interface_version.h
-
-
-generate: ${GEN_H}
-
-all compile: generate
-
-check: 
-       @echo No unit test required for interface-only module.
-
-%.h: %.h.T
-       rm -f $@
-       ${AT3} $< >$@ || rm -f $@
-       chmod -w $@ >/dev/null
-
-interface_version.h: ${top_srcdir}/project/version.properties
-       echo "#define GLITE_LB_CLIENT_INTERFACE \"${version}\"" >$@ 
-stage: generate
-       $(MAKE) install PREFIX=${top_srcdir}/${stagedir}
-
-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=${top_srcdir}/tmpbuilddir
-       cd ${top_srcdir}/tmpbuilddir && tar -czf ${top_srcdir}/${distdir}/${package}-${version}_bin.tar.gz *
-       rm -rf ${top_srcdir}/tmpbuilddir
-       
-doc: generate
-       doxygen C.dox
-       doxygen CPP.dox
-
-install:
-       -mkdir -p ${PREFIX}/${STAGETO}
-       -mkdir -p ${PREFIX}/share/doc/${package}-${version}
-       install -m 644 ${GEN_H} ${PREFIX}/${STAGETO}
-       install -m 644 ${top_srcdir}/LICENSE ${PREFIX}/share/doc/${package}-${version}
-       cd ${top_srcdir}/interface && install -m 644 ${STATIC_H} ${PREFIX}/${STAGETO}
-
-clean:
-       rm -f *.h
-       
diff --git a/org.glite.lb.client-interface/build.xml b/org.glite.lb.client-interface/build.xml
deleted file mode 100755 (executable)
index f0f6a1a..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Build file for the GLite LB Client Interface module
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.5  2004/08/05 15:22:34  dimeglio
-       Changed default target from compile to dist
-       
-       Revision 1.4  2004/07/06 17:47:31  flammer
-       Update of classpath definitions, targets & configure file.
-       
-       Revision 1.3  2004/06/22 15:51:36  dimeglio
-       Added handling of *.T, *.pm and at3
-       
-       Revision 1.2  2004/06/21 16:02:16  dimeglio
-       Modified to search support files in module project directory
-       
--->
-
-<project name="client-interface" default="dist">
-       
-       <!-- =========================================
-                Builds the GLite LB Client Interface 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}"/>
-               
-       <!-- ==============================================
-                Local private targets
-            ============================================== -->
-       
-       <target name="localinit"
-               description="Module specific initialization tasks">
-        <!-- Copy support files from the subsystem project to the component project-->
-               <copy toDir="${module.project.dir}">
-                       <fileset dir="${subsystem.project.dir}">
-                               <include name="at3" />
-                               <include name="*.T" />
-                               <include name="*.pm" />
-                       </fileset>
-               </copy> 
-               <antcall target="lbmakefiles" />
-       </target>
-               
-       <target name="localcompile"
-               description="Module specific compile tasks">
-       </target>
-       
-       <target name="localclean"
-               description="Module specific cleaning tasks">
-               <delete>
-                       <fileset dir="${module.project.dir}">
-                               <include name="at3" />
-                               <include name="*.T" />
-                               <include name="*.pm" />
-                       </fileset>
-               </delete>       
-       </target>
-       
-       <!-- =========================================
-            RPM settings
-            ========================================= -->
-
-       <property name="build.package.summary" value="L&amp;B client library header files" />
-       <property name="build.package.description" value="
-Logging &amp; Bookkeeping (L&amp;B) client library C/C++ header files." />
-
-</project>             
diff --git a/org.glite.lb.client-interface/interface/CountRef.h b/org.glite.lb.client-interface/interface/CountRef.h
deleted file mode 100644 (file)
index a8f61cf..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_COUNTREF_HPP__
-#define __EDG_WORKLOAD_LOGGING_CLIENT_COUNTREF_HPP__
-
-#define EWL_BEGIN_NAMESPACE namespace glite { namespace lb {
-#define EWL_END_NAMESPACE } }
-
-EWL_BEGIN_NAMESPACE;
-
-template<typename T>
-class CountRef {
-public:
-       CountRef(void *);
-//     CountRef(void *,void (*)(void *));
-
-       void use(void);
-       void release(void);
-
-       void    *ptr;
-private:
-       int     count;
-//     void    (*destroy)(void *);
-};
-
-template <typename T>
-CountRef<T>::CountRef(void *p)
-{
-       ptr = p;
-       count = 1;
-}
-
-template <typename T>
-void CountRef<T>::release(void)
-{
-       if (--count == 0) {
-               T::destroyFlesh(ptr);
-               delete this;
-       }
-}
-
-template <typename T>
-void CountRef<T>::use(void)
-{
-       count++;
-}
-
-EWL_END_NAMESPACE;
-
-#endif
diff --git a/org.glite.lb.client-interface/interface/Event.h.T b/org.glite.lb.client-interface/interface/Event.h.T
deleted file mode 100644 (file)
index 64b4958..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_EVENT_HPP__
-#define __EDG_WORKLOAD_LOGGING_CLIENT_EVENT_HPP__
-
-
-#include <utility>
-#include <vector>
-#include <string>
-
-#include "glite/wmsutils/jobid/JobId.h"
-#include "glite/lb/CountRef.h"
-
-#ident "$Header$"
-
-/** @file Event.h
- *  @version $Revision$
- */
-
-/*
-@@@AUTO
-*/
-@@@LANG: C++
-
-#include "glite/lb/events.h"
-#include "glite/lb/notifid.h"
-
-EWL_BEGIN_NAMESPACE;
-
-class Event {
-       friend class Job;
-       friend class ServerConnection;
-       friend class CountRef<Event>;
-public:
-       /** Event type codes.
-        * Identify which of the event fields are valid.
-        */
-
-       enum Type {
-               UNDEF = 0,
-@@@{
-       for my $e ($event->getTypesOrdered) {
-               my $u = uc $e;
-               my $c = getTypeComment $event $e;
-               gen "\t\t$u,\t/**< $c */\n";
-       }
-@@@}
-               TYPE_MAX
-       };
-
-       /** Event attribute symbolic identifier. */
-       enum Attr {
-@@@{
-       for (sort {$a cmp $b} getAllFields $event) {
-               my $u = $_;
-# $u =~ s/([a-z])([A-Z])/$1_$2/g;
-               $u = uc $u;
-
-               my $c = "\t/**\n";
-               for my $t (sort $event->getFieldOccurence($_)) {
-                       selectType $event $t;
-                       my $cc = getFieldComment $event $_;
-                       $t = 'common' if $t eq '_common_';
-                       $c .= "\t * $t: $cc\n";
-               }
-               $c .= "\t */\n";
-
-               gen "$c\t\t$u,\n";
-       }
-@@@}
-               ATTR_MAX
-       };
-
-@@@{
-       for my $f (getAllFields $event) {
-               for my $t (getFieldOccurence $event $f) {
-                       my $ff;
-                       my $ut;
-                       my $utf;
-                       if ($t eq '_common_') {
-                               $ff = $f;
-                               $ut = '';
-                               $utf = '';
-                       }
-                       else {
-                               selectType $event $t;
-                               selectField $event $f;
-                               $ff = getField $event;
-                               $ut = uc $t . '_';
-                               $utf = ucfirst $t;
-                       }
-                       if ($ff->{codes}) {
-                               gen qq{
-!      enum ${utf}Code \{
-};
-                               for (@{$ff->{codes}}) {
-                                       gen qq{
-!              $ut$_->{name},  /**< $_->{comment} */
-};
-                               }
-                               gen qq{
-!      \};
-};
-                       }
-               }
-       }
-@@@}
-
-       enum AttrType { INT_T, STRING_T, TIMEVAL_T, PORT_T, LOGSRC_T, JOBID_T, NOTIFID_T };
-
-       Type    type;
-
-       Event(void);
-        Event(edg_wll_Event *);
-       Event(const Event &);
-       ~Event(void);
-
-
-       /** Assign new Event to an existing instance. */
-       Event & operator= (const Event &);
-
-       /** String representation of the event type */
-       const std::string & name(void) const;
-
-       /** Retrieve integer attribute */
-       int     getValInt(Attr) const;
-
-       /** Retrieve string attribute */
-       std::string getValString(Attr) const;
-
-        /** Retrieve time attribute */
-        struct timeval getValTime(Attr) const;
-               
-        /** Retrieve jobid attribute */
-        const glite::wmsutils::jobid::JobId getValJobId(Attr) const;
-
-       /** Attribute name */
-       const std::string & getAttrName(Attr) const;
-
-       /** List of attributes and types valid for this instance */
-       const std::vector<std::pair<Attr,AttrType> >  & getAttrs(void) const;
-
-private:
-       static void     destroyFlesh(void *);
-       CountRef<Event> *flesh;
-};
-
-EWL_END_NAMESPACE;
-
-#endif
diff --git a/org.glite.lb.client-interface/interface/Job.h b/org.glite.lb.client-interface/interface/Job.h
deleted file mode 100644 (file)
index 8f69ed8..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_JOB_HPP__
-#define __EDG_WORKLOAD_LOGGING_CLIENT_JOB_HPP__
-
-#ident "$Header$"
-
-#include "glite/wmsutils/jobid/JobId.h"
-
-#include "glite/lb/Event.h"
-#include "glite/lb/JobStatus.h"
-#include "glite/lb/ServerConnection.h"
-
-
-/**
- * @file Job.h
- * @version $Revision$
- */
-
-EWL_BEGIN_NAMESPACE;
-
-/** L&B job.
- * Implementation of L&B job-specific calls.
- * Connection to the server is maintained transparently.
-*/
-  
-class Job {
-public:
-  Job(void);
-  Job(const glite::wmsutils::jobid::JobId &);
-  ~Job();
-  
-  /** Assign new JobId to an existing instance.
-   * Connection to server is preserved if possible.
-   */
-  
-  Job & operator= (const glite::wmsutils::jobid::JobId &);
-
-/**
- * Status retrieval bitmasks. Used ORed as Job::status() argument,
- * determine which status fields are actually retrieved.
- */
-  static const int STAT_CLASSADS;       /**< various job description fields */
-  static const int STAT_CHILDREN;       /**< list of subjob JobId's */
-  static const int STAT_CHILDSTAT;      /**< apply the flags recursively to subjobs */
-
-  /** Return job status */
-  JobStatus status(int) const;
-  
-  /** Return all events corresponding to this job */
-  void log(std::vector<Event> &) const;
-  const std::vector<Event> log(void) const;
-  
-  /** Return last known address of a listener associated to the job.
-   * \param name name of the listener
-   * \return hostname and port number
-   */
-  const std::pair<std::string,uint16_t> queryListener(const std::string & name) const;
-  
-  /** Manipulate LB parameters, the same as for edg_wll_Context in C */
-  void setParam(edg_wll_ContextParam, int); 
-  void setParam(edg_wll_ContextParam, const std::string); 
-  void setParam(edg_wll_ContextParam, const struct timeval &); 
-
-  int getParamInt(edg_wll_ContextParam) const;
-  std::string getParamString(edg_wll_ContextParam) const;
-  struct timeval getParamTime(edg_wll_ContextParam) const;
-  
-private:
-  ServerConnection     server;
-  glite::wmsutils::jobid::JobId                        jobId;
-};
-
-EWL_END_NAMESPACE;
-
-#endif
diff --git a/org.glite.lb.client-interface/interface/JobStatus.h.T b/org.glite.lb.client-interface/interface/JobStatus.h.T
deleted file mode 100644 (file)
index 8b63de1..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_JOBSTATUS_HPP__
-#define __EDG_WORKLOAD_LOGGING_CLIENT_JOBSTATUS_HPP__
-
-/*
-@@@AUTO
-*/
-
-@@@LANG: C++
-
-#include <sys/time.h>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "glite/wmsutils/jobid/JobId.h"
-
-#include "glite/lb/jobstat.h"
-#include "glite/lb/CountRef.h"
-
-EWL_BEGIN_NAMESPACE;
-
-/**
- * Description of job status.
- * The status is computed from a sequence of logged events
- */
-
-
-class JobStatus {
-       friend class Job;
-       friend class CountRef<JobStatus>;
-public:
-       enum Code {
-               UNDEF = 0,      /**< indicates invalid, i.e. uninitialized instance */
-@@@{
-       for my $stat ($status->getTypesOrdered)
-       {
-               my $u = uc($stat);
-               my $c = getTypeComment $status $stat;
-               gen qq{
-!              $u,     /**< $c */
-};
-       }
-@@@}
-               CODE_MAX
-       };
-
-       enum Attr {
-@@@{
-       selectType $status '_common_';
-       for my $u (sort {$a cmp $b} getAllFields $status) {
-               selectField $status $u;
-               my $f = getField $status;
-               $u =~ s/([a-z])([A-Z])/$1_$2/g;
-               $u = uc $u;
-
-               gen "\t/** $f->{comment} */\n\t\t$u,\n";
-       }
-@@@}
-               ATTR_MAX
-       };
-
-@@@{
-       selectType $status '_common_';
-       for my $n (getAllFields $status) {
-               selectField $status $n;
-               my $f = getField $status;
-               if ($f->{codes}) {
-                        my $n = uc getName $f;
-                       gen qq{
-!      enum \{
-};
-                       for (@{$f->{codes}}) {
-                               gen qq{
-!              $n\_$_->{name}, /**< $_->{comment} */
-};
-                       }
-                       gen qq{
-!      \};
-};
-               }
-       }
-@@@}
-       enum AttrType { INT_T, 
-                       STRING_T, 
-                       TIMEVAL_T, 
-                       BOOL_T,
-                       JOBID_T,
-                       INTLIST_T, 
-                       STRLIST_T, 
-                       TAGLIST_T, 
-                       STSLIST_T 
-       };
-  
-       /** Numeric status code */
-       Code    status;
-  
-       /** String representation of the status code */
-       const std::string & name(void) const;
-  
-       /** Retrieve integer attribute */
-       int     getValInt(Attr) const;
-  
-       /** Retrieve string attribute */
-       std::string getValString(Attr) const;
-  
-       /** Retrieve time attribute */
-       struct timeval  getValTime(Attr) const;
-  
-       /** Retrieve jobid attribute */
-       const glite::wmsutils::jobid::JobId  getValJobId(Attr) const;
-
-       /** Retrieve bool attribute */
-       bool getValBool(Attr) const;
-
-       /** Retrieve int list attribute */
-       const std::vector<int> getValIntList(Attr) const;
-
-       /** Retrieve string list attribute */
-       const std::vector<std::string> getValStringList(Attr) const;
-
-       /** Retrieve tag list attribute */
-       const std::vector<std::pair<std::string,std::string> > getValTagList(Attr) const;
-
-       /** Retrieve job status list attribute */
-       const std::vector<JobStatus> getValJobStatusList(Attr) const;
-
-       /** Attribute name */
-       const std::string& getAttrName(Attr) const;
-  
-       /** List of attributes and types valid for this instance */
-       const std::vector<std::pair<Attr,AttrType> >& getAttrs(void) const;
-  
-       JobStatus(void);
-       JobStatus(const JobStatus &);
-       JobStatus & operator=(const JobStatus &);
-       JobStatus(const edg_wll_JobStat &);
-       JobStatus & operator=(const edg_wll_JobStat&);
-       virtual ~JobStatus();
-
-protected:
-       edg_wll_JobStat *c_ptr(void);
-
-private:
-       static void     destroyFlesh(void *);
-       CountRef<JobStatus> *flesh;
-};
-
-EWL_END_NAMESPACE;
-
-#endif
-
diff --git a/org.glite.lb.client-interface/interface/LoggingExceptions.h b/org.glite.lb.client-interface/interface/LoggingExceptions.h
deleted file mode 100644 (file)
index 1d22a2e..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_LOGGING_EXCEPTIONS_HPP__
-#define __EDG_WORKLOAD_LOGGING_CLIENT_LOGGING_EXCEPTIONS_HPP__
-
-#ident "$Header$"
-
-/** @file LoggingExceptions.h
- *  @version $Revision$
- */
-
-#include "glite/wmsutils/exception/Exception.h"
-
-#include <pthread.h>
-
-EWL_BEGIN_NAMESPACE;
-
-class Exception: public glite::wmsutils::exception::Exception {
-public:
-       
-       /* constructor for mandatory fields */
-       Exception(const std::string& source,
-                 int line_number,
-                 const std::string& method,
-                 int   code,
-                 const std::string& exception) 
-               : glite::wmsutils::exception::Exception(source, 
-                                                             line_number, 
-                                                             method, 
-                                                             code, 
-                                                             "glite::lb::Exception")
-               { error_message = exception; };
-       
-       /* constructor for mandatory fields AND exception chain */
-       Exception(const std::string& source,
-                 int line_number,
-                 const std::string& method,
-                 int   code,
-                 const std::string& exception,
-                 const glite::wmsutils::exception::Exception &exc)
-               : glite::wmsutils::exception::Exception(source, 
-                                                             line_number, 
-                                                             method, 
-                                                             code, 
-                                                             "glite::lb::Exception")
-               { error_message = exception + ": " + exc.what(); };
-};
-
-
-class LoggingException: public Exception {
-public:
-       
-       /* constructor for mandatory fields */
-       LoggingException(const std::string& source,
-                        int line_number,
-                        const std::string& method,
-                        int   code,
-                        const std::string& exception) 
-               : Exception(source, line_number, method, code, exception)
-               {};
-       
-       /* constructor for mandatory fields AND exception chain */
-       LoggingException(const std::string& source,
-                        int line_number,
-                        const std::string& method,
-                        int   code,
-                        const std::string& exception, 
-                        const glite::wmsutils::exception::Exception &exc)
-               : Exception(source, line_number, method, code, exception)
-               {};
-};
-
-
-class OSException: public Exception {
-public:
-       
-       /* constructor for mandatory fields */
-       OSException(const std::string& source,
-                   int line_number,
-                   const std::string& method,
-                   int   code,
-                   const std::string& exception)
-               : Exception(source, 
-                           line_number, 
-                           method, 
-                           code, 
-                           exception + ": " + strerror(code))
-               {};
-       
-       /* constructor for mandatory fields AND exception chain */
-       OSException(const std::string& source,
-                   int line_number,
-                   const std::string& method,
-                   int   code,
-                   const std::string& exception,
-                   const glite::wmsutils::exception::Exception &exc)
-               : Exception(source, 
-                           line_number, 
-                           method, 
-                           code, 
-                           exception + ": " + strerror(code))
-               {};
-};
-
-
-#define EXCEPTION_MANDATORY                           \
-       __FILE__,                                     \
-        __LINE__,                                     \
-        std::string(CLASS_PREFIX) + __FUNCTION__         
-
-#define STACK_ADD                                     
-
-/* note: we can use __LINE__ several times in macro, it is expanded into one row */
-#define throw_exception(context, exception)           \
-{ STACK_ADD;                                          \
-  {                                                   \
-     char *text, *desc;                               \
-     int  code;                                       \
-     std::string exc;                                      \
-                                                      \
-     code = edg_wll_Error((context), &text, &desc);   \
-     exc = exception;                                 \
-     if (text) {                                     \
-       exc += ": ";                                  \
-       exc += text;                                  \
-     }                                               \
-     if (desc) {                                     \
-       exc += ": ";                                  \
-       exc += desc;                                  \
-     }                                               \
-     free(text);                                      \
-     free(desc);                                      \
-     throw LoggingException(EXCEPTION_MANDATORY,      \
-                           code,                     \
-                           exc);                     \
-  }                                                  \
-}
-#define check_result(code, context, desc)             \
-  if((code)) throw_exception((context), desc)
-
-
-
-EWL_END_NAMESPACE;
-
-#endif
diff --git a/org.glite.lb.client-interface/interface/Notification.h b/org.glite.lb.client-interface/interface/Notification.h
deleted file mode 100644 (file)
index b8e8b27..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_NOTIFICATION_HPP__
-#define __EDG_WORKLOAD_LOGGING_CLIENT_NOTIFICATION_HPP__
-
-
-#include "glite/wmsutils/jobid/JobId.h"
-
-#include "glite/lb/consumer.h"
-#include "glite/lb/notification.h"
-#include "glite/lb/JobStatus.h"
-
-
-EWL_BEGIN_NAMESPACE; 
-
-
-/** Manage LB notifications.
- * Simplified API, covers only a subset of C API functinality
- */
-
-class Notification {
-public:
-       /** Create an empty object
-        * to be used for new notifications, i.e. with Register()
-        */
-       Notification();
-
-       /** Create from server,port pair
-        * to be used for new notifications, i.e. with Register()
-        * \param host
-        * \param port
-        */
-       Notification(const std::string,const u_int16_t);
-
-       /** Create from NotifId
-        * to be used for existing notifications, i.e. with Bind()
-        * \param notifId
-        */
-       Notification(const std::string);
-
-       ~Notification();
-
-       std::string getNotifId() const; /**< retrieve NotifId */
-       time_t getValid() const;        /**< retrieve time until when it is valid */
-       int getFd() const;              /**< retrieve local listener filedescriptor */
-
-       /** Add this job to the list.
-        * Local operation only, Register() has to be called
-        * to propagate changes to server 
-        */
-       void addJob(const glite::wmsutils::jobid::JobId &); 
-
-       /** Remove job from the list, local op again. */
-       void removeJob(const glite::wmsutils::jobid::JobId &);
-
-       /** Get jobs on the list */
-       std::string getJobs();
-
-       /** Receive notifications on these states */
-       void setStates(const std::vector<glite::lb::JobStatus::Code> &);
-
-       /** Get states */
-       std::string getStates();
-
-       /** Register (or re-register, i.e. change and extend) 
-        * with the server
-        */
-       void Register();
-
-       /** Bind to the existing notification at the server
-        * i.e. change the receiving local address
-        * \param address_override
-        */
-       void Bind(const std::string);
-
-       /** Receive notification.
-        * Blocks at most the specified timeout (maybe 0 for local polling).
-        * \retval 0 OK
-        * \retval 1 timeout 
-        */
-       int receive(glite::lb::JobStatus &,timeval &);
-
-private:
-       std::vector<glite::wmsutils::jobid::JobId>      jobs;
-       std::vector<glite::lb::JobStatus::Code> states;
-
-       edg_wll_Context ctx;
-       edg_wll_NotifId notifId;
-       time_t          valid;
-};
-
-
-EWL_END_NAMESPACE;
-
-#endif
diff --git a/org.glite.lb.client-interface/interface/ServerConnection.h b/org.glite.lb.client-interface/interface/ServerConnection.h
deleted file mode 100644 (file)
index 333d0bd..0000000
+++ /dev/null
@@ -1,306 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_SERVERCONNECTION_HPP__
-#define __EDG_WORKLOAD_LOGGING_CLIENT_SERVERCONNECTION_HPP__
-
-#ident "$Header$"
-
-/**
- * @file ServerConnection.h
- * @version $Revision$
- */
-
-#include <string.h>
-#include <list>
-
-#include "glite/wmsutils/jobid/JobId.h"
-
-#include "glite/lb/Event.h"
-#include "glite/lb/JobStatus.h"
-#include "glite/lb/consumer.h"
-
-EWL_BEGIN_NAMESPACE;
-
-/** Auxiliary class to hold an atomic query condition. */
-class QueryRecord {
-public:
-       friend class ServerConnection;
-       friend edg_wll_QueryRec *convertQueryVector(const std::vector<QueryRecord> &in);
-
-       /* IMPORTANT: must match lbapi.h */
-       enum Attr {
-               UNDEF=0,        /**< Not-defined value, used to terminate lists etc. */
-               JOBID,          /**< Job Id \see _edg_wll_QueryRec */
-               OWNER,          /**< Job owner \see _edg_wll_QueryRec */
-               STATUS,         /**< Current job status */
-               LOCATION,       /**< Where is the job processed */
-               DESTINATION,    /**< Destination CE */
-               DONECODE,       /**< Minor done status (OK,fail,cancel) */
-               USERTAG,        /**< User tag (not implemented yet) */
-               TIME,           /**< Timestamp \see _edg_wll_QueryRec */
-               LEVEL,          /**< Logging level (see "dglog.h") * \see _edg_wll_QueryRec */
-               HOST,           /**< Where the event was generated */
-               SOURCE,         /**< Source component */
-               INSTANCE,       /**< Instance of the source component */
-               EVENT_TYPE,     /**< Event type \see _edg_wll_QueryRec */
-               CHKPT_TAG,      /**< Checkpoint tag */
-               RESUBMITTED,    /**< Job was resubmitted */
-               PARENT,         /**< Job was resubmitted */
-               EXITCODE,       /**< Unix exit code */
-       };
-
-       enum Op {
-               EQUAL=EDG_WLL_QUERY_OP_EQUAL,
-               LESS=EDG_WLL_QUERY_OP_LESS,
-               GREATER=EDG_WLL_QUERY_OP_GREATER,
-               WITHIN=EDG_WLL_QUERY_OP_WITHIN,
-               UNEQUAL=EDG_WLL_QUERY_OP_UNEQUAL
-       };
-  
-       QueryRecord();
-
-       /* copy and assignment */
-       QueryRecord(const QueryRecord &);
-       QueryRecord& operator=(const QueryRecord &);
-
-       /* constructors for simple attribute queries */
-       QueryRecord(const Attr, const Op, const std::string &);
-       QueryRecord(const Attr, const Op, const int);
-       QueryRecord(const Attr, const Op, const struct timeval &);
-       QueryRecord(const Attr, const Op, const glite::wmsutils::jobid::JobId&);
-       /* this one is for attr==TIME and particular state */
-       QueryRecord(const Attr, const Op, const int, const struct timeval &);
-       
-       /* constructors for WITHIN operator */
-       QueryRecord(const Attr, const Op, const std::string &, const std::string &);
-       QueryRecord(const Attr, const Op, const int, const int);
-       QueryRecord(const Attr, const Op, const struct timeval &, const struct timeval &);
-       QueryRecord(const Attr, const Op, const int, const struct timeval &, const struct timeval &);
-
-       /* convenience for user tags */
-       QueryRecord(const std::string &, const Op, const std::string &);
-       QueryRecord(const std::string &, const Op, const std::string &, const std::string &);
-       
-       ~QueryRecord();
-  
-       static const std::string AttrName(const Attr) ;
-  
-protected:
-
-       /* conversion to C API type */
-       operator edg_wll_QueryRec() const;
-
-private:
-       Attr    attr;
-       Op      oper;
-       std::string tag_name;
-       int state;
-       std::string string_value;
-       glite::wmsutils::jobid::JobId jobid_value;
-        int     int_value;
-        struct timeval timeval_value;
-       std::string string_value2;
-        int     int_value2;
-        struct timeval timeval_value2;
-};
-
-
-/** Supported aggregate operations */
-enum AggOp { AGG_MIN=1, AGG_MAX, AGG_COUNT };
-
-
-/**
- * Connection to the L&B server.
- * Maintain connection to the server.
- * Implement non job-specific API calls
- */
-
-class ServerConnection {
-public:
-       friend class Job;
-
-       ServerConnection(void);
-
-       /* DEPRECATED: do not use
-        * connections are now handled automagically inside the implementation
-        */
-       ServerConnection(const std::string &);
-
-       /** Open connection to a given server */
-       void open(const std::string &);
-
-       /** Close the current connection */
-       void close(void);
-
-       /* END DEPRECATED */
-
-       /* set & get parameter methods */
-
-       /* consumer parameter settings */
-       void setQueryServer(const std::string&, int);
-       void setQueryTimeout(int);
-
-       void setX509Proxy(const std::string&);
-       void setX509Cert(const std::string&, const std::string&);
-
-       std::pair<std::string, int> getQueryServer() const;
-       int getQueryTimeout() const;
-
-       std::string getX509Proxy() const;
-       std::pair<std::string, std::string> getX509Cert() const;
-
-       /* end of set & get */
-
-       virtual ~ServerConnection();
-
-
-       /* consumer API */
-
-       /** Retrieve the set of single indexed attributes.
-        * outer vector elements correspond to indices
-        * inner vector elements correspond to index columns
-        * if .first of the pair is USERTAG, .second is its name
-        * if .first is TIME, .second is state name
-        * otherwise .second is meaningless (empty string anyway)
-        */
-       std::vector<std::vector<std::pair<QueryRecord::Attr,std::string> > >
-               getIndexedAttrs(void);
-
-       /** Retrieve hard and soft result set size limit */
-       std::pair<int,int> getLimits(void) const;
-
-       /** Set the soft result set size limit */
-       void setQueryJobsLimit(int);
-       void setQueryEventsLimit(int);
-  
-       /** Retrieve all events satisfying the query records
-        * @param job_cond, event_cond - vectors of conditions to be satisfied 
-        *  by jobs as a whole or particular events, conditions are ANDed
-        * @param events vector of returned events
-        */
-       void queryEvents(const std::vector<QueryRecord>& job_cond,
-                        const std::vector<QueryRecord>& event_cond,
-                        std::vector<Event>&) const;
-  
-       const std::vector<Event> queryEvents(const std::vector<QueryRecord>& job_cond,
-                                            const std::vector<QueryRecord>& event_cond) const;
-
-       const std::list<Event> queryEventsList(const std::vector<QueryRecord>& job_cond,
-                                              const std::vector<QueryRecord>& event_cond) const;
-
-
-       /** The same as queryEvents but return only an aggregate.
-        * @param job_cond, event_cond - vectors of conditions to be satisfied 
-        *  by jobs as a whole or particular events, conditions are ANDed
-        * @param op aggregate operator to apply
-        * @param attr attribute to apply the operation to
-        */
-       std::string queryEventsAggregate(const std::vector<QueryRecord>& job_cond,
-                                        const std::vector<QueryRecord>& event_cond,
-                                        enum AggOp const op,
-                                        std::string const attr) const;
-  
-
-       /** Retrieve all events satisfying the query records
-        * @param job_cond, event_cond - vectors of vectors of job or event conditions, 
-        * respectively. The inner vectors are logically ANDed, the outer are ORed
-        * (cond1 AND cond2 AND ...) OR (condN AND ...)
-        * @param events vector of returned events
-        */
-       void queryEvents(const std::vector<std::vector<QueryRecord> >& job_cond,
-                        const std::vector<std::vector<QueryRecord> >& event_cond,
-                        std::vector<Event>&) const;
-  
-       const std::vector<Event> 
-       queryEvents(const std::vector<std::vector<QueryRecord> >& job_cond,
-                   const std::vector<std::vector<QueryRecord> >& event_cond) const;
-
-       
-       /** Retrieve jobs satisfying the query records, including their states
-        * @param query vector of Query records that are anded to form the
-        *      query
-        * @param ids vector of returned job id's
-        * @param states vector of returned job states
-        */
-  
-       void queryJobs(const std::vector<QueryRecord>& query,
-                      std::vector<glite::wmsutils::jobid::JobId>& ids) const;
-  
-       const std::vector<glite::wmsutils::jobid::JobId>
-       queryJobs(const std::vector<QueryRecord>& query) const;
-  
-       
-       /** Retrieve jobs satisfying the query records, including their states
-        * @param query vector of Query record vectors that are ORed and ANDed to form the
-        *      query
-        * @param ids vector of returned job id's
-        * @param states vector of returned job states
-        */
-   
-       void queryJobs(const std::vector<std::vector<QueryRecord> >& query,
-                      std::vector<glite::wmsutils::jobid::JobId>& ids) const;
-  
-       const std::vector<glite::wmsutils::jobid::JobId>
-       queryJobs(const std::vector<std::vector<QueryRecord> >& query) const;
-
-       /** Retrieve jobs satisfying the query records, including status
-        * information
-        * @param query vector of Query records that are anded to form the
-        *      query
-        * @param ids vector of returned job id's
-        * @param states vector of returned job states
-        */
-       void queryJobStates(const std::vector<QueryRecord>& query, 
-                           int flags,
-                           std::vector<JobStatus> & states) const;
-       const std::vector<JobStatus>  queryJobStates(const std::vector<QueryRecord>& query, 
-                                                    int flags) const;
-
-       const std::list<JobStatus>  queryJobStatesList(const std::vector<QueryRecord>& query,
-                                                    int flags) const;
-  
-       /** Retrieve jobs satisfying the query records, including status
-        * information
-        * @param query vector of Query records that are anded to form the
-        *      query
-        * @param ids vector of returned job id's
-        * @param states vector of returned job states
-        */
-       void queryJobStates(const std::vector<std::vector<QueryRecord> >& query, 
-                           int flags,
-                           std::vector<JobStatus> & states) const;
-       const std::vector<JobStatus>  
-       queryJobStates(const std::vector<std::vector<QueryRecord> >& query, 
-                      int flags) const;
-  
-       /** States of all user's jobs.
-        * Convenience wrapper around queryJobs.
-        */
-       void userJobStates(std::vector<JobStatus>& stateList) const;
-       const std::vector<JobStatus> userJobStates() const;
-  
-  
-       /** JobId's of all user's jobs.
-        * Convenience wrapper around queryJobs.
-        */
-       void userJobs(std::vector<glite::wmsutils::jobid::JobId> &) const;
-       const std::vector<glite::wmsutils::jobid::JobId> userJobs() const;
-
-       /** Manipulate LB parameters, the same as for edg_wll_Context in C */
-       void setParam(edg_wll_ContextParam, int); 
-       void setParam(edg_wll_ContextParam, const std::string); 
-       void setParam(edg_wll_ContextParam, const struct timeval &); 
-
-       int getParamInt(edg_wll_ContextParam) const;
-       std::string getParamString(edg_wll_ContextParam) const;
-       struct timeval getParamTime(edg_wll_ContextParam) const;
-  
-protected:
-
-       edg_wll_Context getContext(void) const;
-
-private:
-       edg_wll_Context context;
-};
-
-EWL_END_NAMESPACE;
-
-#endif
diff --git a/org.glite.lb.client-interface/interface/consumer.h b/org.glite.lb.client-interface/interface/consumer.h
deleted file mode 100644 (file)
index 5a8cf96..0000000
+++ /dev/null
@@ -1,387 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_CONSUMER_H__
-#define __EDG_WORKLOAD_LOGGING_CLIENT_CONSUMER_H__
-
-/*!
- * \file client/consumer.h  (lbapi.h originaly)
- * \brief L&B consumer API
- *
- * General rules:
- * - functions return 0 on success, nonzero on error, errror details can 
- *   be found via edg_wll_ErrorCode()
- * - OUT are ** types, functions malloc()-ate objects and fill in the pointer 
- *   pointed to by the OUT argument
- * - returned lists of pointers are NULL-terminated malloc()-ed arrays
- * - edg_wll_Query + wrapper terminate arrays with EDG_WLL_EVENT_UNDEF event
- * - OUT is NULL if the list is empty
- */
-
-#ident "$Header$"
-
-#include "glite/wmsutils/jobid/cjobid.h"
-#include "glite/lb/context.h"
-#include "glite/lb/events.h"
-#include "glite/lb/jobstat.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*!
- * Predefined types for query attributes
- */
-typedef enum _edg_wll_QueryAttr{
-       EDG_WLL_QUERY_ATTR_UNDEF=0,     /**< Not-defined value, used to terminate lists etc. */
-       EDG_WLL_QUERY_ATTR_JOBID,       /**< Job Id \see _edg_wll_QueryRec */
-       EDG_WLL_QUERY_ATTR_OWNER,       /**< Job owner \see _edg_wll_QueryRec */
-       EDG_WLL_QUERY_ATTR_STATUS,      /**< Current job status */
-       EDG_WLL_QUERY_ATTR_LOCATION,    /**< Where is the job processed */
-       EDG_WLL_QUERY_ATTR_DESTINATION, /**< Destination CE */
-       EDG_WLL_QUERY_ATTR_DONECODE,    /**< Minor done status (OK,fail,cancel) */
-       EDG_WLL_QUERY_ATTR_USERTAG,     /**< User tag */
-       EDG_WLL_QUERY_ATTR_TIME,        /**< Timestamp \see _edg_wll_QueryRec */
-       EDG_WLL_QUERY_ATTR_LEVEL,       /**< Logging level (see "dglog.h") * \see _edg_wll_QueryRec */
-       EDG_WLL_QUERY_ATTR_HOST,        /**< Where the event was generated */
-       EDG_WLL_QUERY_ATTR_SOURCE,      /**< Source component */
-       EDG_WLL_QUERY_ATTR_INSTANCE,    /**< Instance of the source component */
-       EDG_WLL_QUERY_ATTR_EVENT_TYPE,  /**< Event type \see _edg_wll_QueryRec */
-       EDG_WLL_QUERY_ATTR_CHKPT_TAG,   /**< Checkpoint tag */
-       EDG_WLL_QUERY_ATTR_RESUBMITTED, /**< Job was resubmitted */
-       EDG_WLL_QUERY_ATTR_PARENT,      /**< Job was resubmitted */
-       EDG_WLL_QUERY_ATTR_EXITCODE,    /**< Unix exit code */
-       EDG_WLL_QUERY_ATTR__LAST
-/*     if adding new attribute, add conversion string to common/xml_conversions.c too !! */
-} edg_wll_QueryAttr;
-
-
-/*!
- * Predefined types for query operands
- */
-typedef enum _edg_wll_QueryOp{
-       EDG_WLL_QUERY_OP_EQUAL,         /**< attribute is equal to the operand value \see _edg_wll_QueryRec */
-       EDG_WLL_QUERY_OP_LESS,          /**< attribute is grater than the operand value \see _edg_wll_QueryRec */
-       EDG_WLL_QUERY_OP_GREATER,       /**< attribute is less than the operand value \see _edg_wll_QueryRec */
-       EDG_WLL_QUERY_OP_WITHIN,        /**< attribute is in given interval \see _edg_wll_QueryRec */
-       EDG_WLL_QUERY_OP_UNEQUAL,       /**< attribute is not equal to the operand value \see _edg_wll_QueryRec */
-} edg_wll_QueryOp;
-
-
-/*!
- * Single query condition for edg_wll_Query().
- * Those records are composed to form an SQL \a where clause
- * when processed at the L&B server
- */
-typedef struct _edg_wll_QueryRec {
-       edg_wll_QueryAttr       attr;   /**< attribute to query */
-       edg_wll_QueryOp         op;     /**< query operation */
-
-/**
- * Specification of attribute to query
- */
-       union {
-               char *                  tag;    /**< user tag name */
-               edg_wll_JobStatCode     state;  /**< job status code */ 
-       } attr_id;
-/**
- * Query operand.
- * The appropriate type is uniquely defined by the attr member
- */
-       union edg_wll_QueryVal {
-               int     i;      /**< integer query attribute value */
-               char    *c;     /**< character query attribute value */
-               struct timeval  t;      /**< time query attribute value */
-               edg_wlc_JobId   j;      /**< JobId query attribute value */
-       } value, value2;
-} edg_wll_QueryRec;
-
-/************************************************
- * API FUNCTION DECLARATIONS                   *
- */
-
-
-#ifdef CLIENT_SBIN_PROG
-extern int edg_wll_http_send_recv(
-       edg_wll_Context,
-       char *, const char * const *, char *,
-       char **,char ***,char **
-);
-
-extern int http_check_status(
-       edg_wll_Context,
-       char *,
-       char **
-);
-
-extern int set_server_name_and_port(
-       edg_wll_Context,
-       const edg_wll_QueryRec **
-);
-
-#endif
-
-/**
- * \name Server querying
- *
- *@{
- */
-
-/**
- * General query on events.
- * Return events satysfying all conditions 
- * query records represent conditions in the form 
- * \a attr \a op \a value eg. time > 87654321.
- * \see edg_wll_QueryRec
- *
- * \param context IN: context to work with
- * \param job_conditions IN: query conditions (ANDed) on current job status, null (i.e. ATTR_UNDEF) terminated list. NULL means empty list, i.e. always TRUE
- * \param event_conditions: conditions on events, null terminated list, NULL means empty list, i.e. always TRUE
- * \param events OUT: list of matching events
- */
-int edg_wll_QueryEvents(
-       edg_wll_Context                 context,
-       const edg_wll_QueryRec *        job_conditions,
-       const edg_wll_QueryRec *        event_conditions,
-       edg_wll_Event **                events
-);
-
-int edg_wll_QueryEventsExt(
-       edg_wll_Context                 context,
-       const edg_wll_QueryRec **       job_conditions,
-       const edg_wll_QueryRec **       event_conditions,
-       edg_wll_Event **                events
-);
-
-
-/**
- * Query LBProxy and use plain communication
- */
-int edg_wll_QueryEventsProxy(
-       edg_wll_Context                 context,
-       const edg_wll_QueryRec *        job_conditions,
-       const edg_wll_QueryRec *        event_conditions,
-       edg_wll_Event **                events
-);
-
-int edg_wll_QueryEventsExtProxy(
-       edg_wll_Context                 context,
-       const edg_wll_QueryRec **       job_conditions,
-       const edg_wll_QueryRec **       event_conditions,
-       edg_wll_Event **                events
-);
-
-/** 
- * General query on jobs.
- * Return jobs (and possibly their states) for which an event satisfying the conditions
- * exists.
- * \see edg_wll_QueryEvents
- * \param context IN: context to work with
- * \param conditions IN: query records (ANDed), null (i.e. EDG_WLL_ATTR_UNDEF) terminated list
- * \param flags IN: additional status fields to retrieve (\see edg_wll_JobStatus)
- * \param jobs OUT: list of job ids. May be NULL.
- * \param states OUT: list of corresponding states (returned only if not NULL)
- */
-int edg_wll_QueryJobs(
-       edg_wll_Context                 context,
-       const edg_wll_QueryRec *        conditions,
-       int                             flags,
-       edg_wlc_JobId **                jobs,
-       edg_wll_JobStat **              states
-);
-
-int edg_wll_QueryJobsExt(
-       edg_wll_Context                 context,
-       const edg_wll_QueryRec **       conditions,
-       int                             flags,
-       edg_wlc_JobId **                jobs,
-       edg_wll_JobStat **              states
-);
-
-
-/**
- * Query LBProxy and use plain communication
- */
-int edg_wll_QueryJobsProxy(
-       edg_wll_Context                 context,
-       const edg_wll_QueryRec *        conditions,
-       int                             flags,
-       edg_wlc_JobId **                jobs,
-       edg_wll_JobStat **              states
-);
-
-int edg_wll_QueryJobsExtProxy(
-       edg_wll_Context                 context,
-       const edg_wll_QueryRec **       conditions,
-       int                             flags,
-       edg_wlc_JobId **                jobs,
-       edg_wll_JobStat **              states
-);
-
-
-/**
- * Bitmasks for edg_wll_JobStatus() flags argument.
- * Settings these flags causes the status calls to retrieve additional
- * information.
- */
-#define EDG_WLL_STAT_CLASSADS  1       /**< various job description fields */
-#define EDG_WLL_STAT_CHILDREN  2       /**< list of subjob JobId's */
-#define EDG_WLL_STAT_CHILDSTAT 4       /**< apply the flags recursively to subjobs */
-/* starting from bit 10 private flags begins - do not add 1024 and more! */
-
-/** Return status of a single job.
- * \param context IN: context to operate on
- * \param jobid IN: query this job
- * \param flags IN: specifies optional status fields to retrieve,
- *     \see EDG_WLL_STAT_CLASSADS, EDG_WLL_STAT_CHILDREN, EDG_WLL_STAT_CHILDSTAT
- */
-
-int edg_wll_JobStatus(
-       edg_wll_Context         context,
-       const edg_wlc_JobId             jobid,
-       int                     flags,
-       edg_wll_JobStat         *status
-);
-
-/**
- * Query LBProxy and use plain communication
- */
-int edg_wll_JobStatusProxy(
-       edg_wll_Context         context,
-       const edg_wlc_JobId             jobid,
-       int                     flags,
-       edg_wll_JobStat         *status
-);
-
-/**
- * Return all events related to a single job.
- * Convenience wrapper around edg_wll_Query()
- * \param context IN: context to work with
- * \param jobId IN: job to query
- * \param events OUT: list of events 
- */
-
-int edg_wll_JobLog(
-       edg_wll_Context         context,
-       const edg_wlc_JobId     jobId,
-       edg_wll_Event **        events
-);
-
-
-/**
- * Query LBProxy and use plain communication
- */
-int edg_wll_JobLogProxy(
-       edg_wll_Context         context,
-       const edg_wlc_JobId     jobId,
-       edg_wll_Event **        events
-);
-
-/**
- * All current user's jobs.
- * \param context IN: context to work with
- * \param jobs OUT: list of the user's jobs
- * \param states OUT: list of the jobs' states
- */
-int edg_wll_UserJobs(
-       edg_wll_Context         context,
-       edg_wlc_JobId **        jobs,
-       edg_wll_JobStat **      states
-);
-
-
-/**
- * Query LBProxy and use plain communication
- */
-int edg_wll_UserJobsProxy(
-       edg_wll_Context         context,
-       edg_wlc_JobId **        jobs,
-       edg_wll_JobStat **      states
-);
-
-/**
- * Server supported indexed attributes
- * \see DataGrid-01-TEN-0125
- * \param context IN: context to work with
- * \param attrs OUT: configured indices (each index is an UNDEF-terminated
- *             array of QueryRec's from which only attr (and attr_id 
- *             eventually) are meaningful
- */
-int edg_wll_GetIndexedAttrs(
-       edg_wll_Context         context,
-       edg_wll_QueryRec        ***attrs
-);
-
-/**
- * Retrieve limit on query result size (no. of events or jobs).
- * FIXME: not implemented.
- * \see DataGrid-01-TEN-0125
- * \param context IN: context to work with
- * \param limit OUT: server imposed limit
- */
-int edg_wll_GetServerLimit(
-       edg_wll_Context context,
-       int             *limit
-);
-
-/**
- * UI port for the job
- * \param context IN: context to work with
- * \param jobId IN: job to query
- * \param name IN: name of the UI-port
- * \param host OUT: hostname of port
- * \param port OUT: port number
- */
-int edg_wll_QueryListener(
-       edg_wll_Context context,
-       edg_wlc_JobId           jobId,
-       const char *    name,
-       char **         host,
-       uint16_t *      port
-);
-
-
-/**
- * Query LBProxy and use plain communication
- */
-int edg_wll_QueryListener(
-       edg_wll_Context context,
-       edg_wlc_JobId           jobId,
-       const char *    name,
-       char **         host,
-       uint16_t *      port
-);
-
-/**
- * Ask LB Proxy server for sequence number
- * \param context IN: context to work with
- * \param jobId IN: job to query
- * \param code OUT: sequence code
- */
-
-
-int edg_wll_QuerySequenceCodeProxy(
-       edg_wll_Context context,
-       edg_wlc_JobId   jobId,
-       char **         code
-);
-               
-/*@}*/
-
-/*
- * edg_wll_QueryRec manipulation
- */
-
-/** Free edg_wll_QueryRec internals, not the structure itself */
-void edg_wll_QueryRecFree(edg_wll_QueryRec *);
-
-
-
-/**
- * default and maximal query timeout (in seconds)
- */
-#define EDG_WLL_QUERY_TIMEOUT_DEFAULT   120
-#define EDG_WLL_QUERY_TIMEOUT_MAX       1800
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __EDG_WORKLOAD_LOGGING_CLIENT_CONSUMER_H__ */
diff --git a/org.glite.lb.client-interface/interface/consumer_fake.h b/org.glite.lb.client-interface/interface/consumer_fake.h
deleted file mode 100644 (file)
index c3fc28f..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/* 
- * fake implementation of the consumer API 
- */
-
-#ifndef WORKLOAD_LOGGING_CLIENT_CONSUMER_FAKE_H
-#define WORKLOAD_LOGGING_CLIENT_CONSUMER_FAKE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "glite/lb/context-int.h"
-
-typedef int (edg_wll_QueryEvents_cb_f)(edg_wll_Context context, edg_wll_Event **events);
-typedef int (edg_wll_QueryListener_cb_f)(edg_wll_Context context, char **host, uint16_t *port);
-
-int edg_wll_RegisterTestQueryEvents(edg_wll_QueryEvents_cb_f *cb);
-int edg_wll_RegisterTestQueryListener(edg_wll_QueryListener_cb_f *cb);
-void edg_wll_UnregisterTestQueryEvents();
-void edg_wll_UnregisterTestQueryListener();
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* WORKLOAD_LOGGING_CLIENT_CONSUMER_FAKE_H */
diff --git a/org.glite.lb.client-interface/interface/context.h b/org.glite.lb.client-interface/interface/context.h
deleted file mode 100644 (file)
index 5f176d5..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-#ifndef _EDG_WORKLOAD_LOGGING_CLIENT_CONTEXT_H
-#define _EDG_WORKLOAD_LOGGING_CLIENT_CONTEXT_H
-
-/**
- * \file edg/workload/logging/client/context.h
- * \brief L&B API common context (publicly visible) and related definitions
- */
-
-#include "glite/wmsutils/exception/exception_codes.h"
-#include "glite/wmsutils/jobid/cjobid.h"
-
-#ident "$Header$"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** Opaque context type */
-typedef struct _edg_wll_Context *edg_wll_Context;
-
-/** Constants defining the context parameters */
-typedef enum _edg_wll_ContextParam {
-       EDG_WLL_PARAM_HOST,             /**< hostname to appear as event orgin */
-       EDG_WLL_PARAM_SOURCE,           /**< event source component */
-       EDG_WLL_PARAM_INSTANCE,         /**< instance of the source component */
-       EDG_WLL_PARAM_LEVEL,            /**< logging level */
-       EDG_WLL_PARAM_DESTINATION,      /**< logging destination host */
-       EDG_WLL_PARAM_DESTINATION_PORT, /**< logging destination port */
-       EDG_WLL_PARAM_LOG_TIMEOUT,      /**< logging timeout (asynchronous) */
-       EDG_WLL_PARAM_LOG_SYNC_TIMEOUT, /**< logging timeout (synchronous) */
-       EDG_WLL_PARAM_QUERY_SERVER,     /**< default server name to query */
-       EDG_WLL_PARAM_QUERY_SERVER_PORT,/**< default server port to query */
-       EDG_WLL_PARAM_QUERY_SERVER_OVERRIDE,/**< host:port parameter setting override even values in jobid (useful for debugging & hacking only) */
-       EDG_WLL_PARAM_QUERY_TIMEOUT,    /**< query timeout */
-       EDG_WLL_PARAM_QUERY_JOBS_LIMIT, /**< maximal query jobs result size */
-       EDG_WLL_PARAM_QUERY_EVENTS_LIMIT,/**< maximal query events result size */
-       EDG_WLL_PARAM_QUERY_RESULTS,    /**< maximal query result size */
-       EDG_WLL_PARAM_QUERY_CONNECTIONS,/**< maximal number of open connections in ctx->connPoll */
-       EDG_WLL_PARAM_NOTIF_SERVER,     /**< default notification server name */
-       EDG_WLL_PARAM_NOTIF_SERVER_PORT,/**< default notification server port */
-       EDG_WLL_PARAM_NOTIF_TIMEOUT,    /**< notif timeout */
-       EDG_WLL_PARAM_X509_PROXY,       /**< proxy file to use for authentication */
-       EDG_WLL_PARAM_X509_KEY,         /**< key file to use for authentication */
-       EDG_WLL_PARAM_X509_CERT,        /**< certificate file to use for authentication */
-       EDG_WLL_PARAM_LBPROXY_STORE_SOCK,/**< lbproxy store socket path */
-       EDG_WLL_PARAM_LBPROXY_SERVE_SOCK,/**<  lbproxy serve socket path */
-       EDG_WLL_PARAM_LBPROXY_USER,     /**< user credentials when logging to L&B Proxy */
-       EDG_WLL_PARAM__LAST,            /**< marker, LB internal use only */
-} edg_wll_ContextParam;
-
-/** sets returned query results */
-typedef enum _edg_wll_QueryResults {
-       EDG_WLL_QUERYRES_UNDEF,         /* uninitialized value */
-       EDG_WLL_QUERYRES_NONE,
-       EDG_WLL_QUERYRES_ALL,
-       EDG_WLL_QUERYRES_LIMITED,
-       EDG_WLL_QUERYRES__LAST          /* marker, for internal use only */
-} edg_wll_QueryResults;
-
-/** identification of logging component */
-typedef enum _edg_wll_Source {
-       EDG_WLL_SOURCE_NONE,            /* uninitialized value */
-       EDG_WLL_SOURCE_USER_INTERFACE,
-       EDG_WLL_SOURCE_NETWORK_SERVER,
-       EDG_WLL_SOURCE_WORKLOAD_MANAGER,
-       EDG_WLL_SOURCE_BIG_HELPER,
-       EDG_WLL_SOURCE_JOB_SUBMISSION,
-       EDG_WLL_SOURCE_LOG_MONITOR,
-       EDG_WLL_SOURCE_LRMS,
-       EDG_WLL_SOURCE_APPLICATION,
-       EDG_WLL_SOURCE__LAST            /* marker, for internal use only */
-} edg_wll_Source;
-
-
-/** Allocate an initialize a new context object.
- * \param context OUT returned context
- * \return 0 on success, ENOMEM if malloc() fails
- */
-int edg_wll_InitContext(edg_wll_Context *context);
-
-/** Destroy and free context object.
- * Also performs necessary cleanup (closing connections etc.)
- * \param context IN context to free
- */
-void edg_wll_FreeContext(edg_wll_Context context);
-
-/** Set a context parameter.
- * \param context INOUT context to work with
- * \param param IN parameter to set
- * \param ... IN value to set (if NULL or 0, default is used)
- * \retval 0 success
- * \retval EINVAL param is not a valid parameter, or invalid value
- */
-int edg_wll_SetParam(
-       edg_wll_Context context,
-       edg_wll_ContextParam param,
-       ...
-);
-
-struct timeval;        /* gcc, shut up! */
-
-int edg_wll_SetParamInt(edg_wll_Context,edg_wll_ContextParam,int);
-int edg_wll_SetParamString(edg_wll_Context,edg_wll_ContextParam,const char *);
-int edg_wll_SetParamTime(edg_wll_Context,edg_wll_ContextParam,const struct timeval *);
-
-/** Get current parameter value.
- * \param context INOUT context to work with
- * \param param IN parameter to retrieve
- * \param ... OUT pointer to output variable
- * \retval 0 success
- * \retval EINVAL param is not a valid parameter
- */
-int edg_wll_GetParam(
-       edg_wll_Context context,
-       edg_wll_ContextParam param,
-       ...
-);
-
-
-/**
- * L&B subsystem specific error codes.
- * Besides them L&B functions return standard \a errno codes in their usual
- * meaning.
- */
-
-/* XXX: cleanup required */
-
-typedef enum _edg_wll_ErrorCode {
-/** Base for L&B specific code. Use the constant from common/ */
-       EDG_WLL_ERROR_BASE = GLITE_WMS_LOGGING_ERROR_BASE,
-       EDG_WLL_ERROR_PARSE_BROKEN_ULM, /**< Parsing ULM line into edg_wll_Event structure */
-       EDG_WLL_ERROR_PARSE_EVENT_UNDEF, /**< Undefined event name */
-       EDG_WLL_ERROR_PARSE_MSG_INCOMPLETE, /**< Incomplete message (missing fields) */
-       EDG_WLL_ERROR_PARSE_KEY_DUPLICITY, /**< Duplicate entry in message */
-       EDG_WLL_ERROR_PARSE_KEY_MISUSE, /**< Entry not allowed for this message type */
-       EDG_WLL_ERROR_PARSE_OK_WITH_EXTRA_FIELDS, /**< Additional, not understood fields found in message.
-               The rest is OK therefore this is not a true error. */
-        EDG_WLL_ERROR_XML_PARSE, /**< Error in parsing XML protocol. */
-        EDG_WLL_ERROR_SERVER_RESPONSE, /**< Generic failure on server. See syslog on the server machine for details. */
-        EDG_WLL_ERROR_JOBID_FORMAT, /**< Malformed jobid */
-       EDG_WLL_ERROR_DB_CALL, /**< Failure of underlying database engine.
-               See errDesc returned by edg_wll_ErrorCode(). */
-       EDG_WLL_ERROR_URL_FORMAT, /**< Malformed URL */
-       EDG_WLL_ERROR_MD5_CLASH, /**< MD5 hash same for different strings. Very unlikely :-). */
-       EDG_WLL_ERROR_GSS, /**< Generic GSSAPI error. See errDesc returned by edg_wll_Error(). */
-       EDG_WLL_ERROR_DNS, /**< DNS resolver error. See errDesc returned by edg_wll_Error(). */
-       EDG_WLL_ERROR_NOJOBID,  /**< Attmepted call requires calling edg_wll_SetLoggingJob() first. */
-       EDG_WLL_ERROR_NOINDEX,  /**< Query does not contain any conidion on indexed attribute. */
-       EDG_WLL_IL_PROTO,       /**< Interlogger to lbserver communication protocol error. */
-       EDG_WLL_IL_SYS,         /**< Interlogger internal error. */
-       EDG_WLL_IL_EVENTS_WAITING, /**< Interlogger still has events pending delivery. */
-       EDG_WLL_ERROR_COMPARE_EVENTS, /**< Two compared events differ. */
-} edg_wll_ErrorCode;
-
-/**
- * Retrieve error details on recent API call
- * \param context IN: context to work with
- * \param errText OUT: standard error text
- *      (may be NULL - no text returned)
- * \param errDesc OUT: additional error description
- *      (may be NULL - no text returned)
- * \return Error code of the recent error
- */
-
-int edg_wll_Error(
-       edg_wll_Context context,
-       char            **errText,
-       char            **eddDesc
-);
-
-/** Convert source code to printable string 
- */
-char * edg_wll_SourceToString(edg_wll_Source src);
-
-/** Convert name to source code
- * \return Matching code or EDG_WLL_SOURCE_NONE
- */
-edg_wll_Source edg_wll_StringToSource(const char *name);
-
-/** Convert Query result code to printable string 
- */
-char * edg_wll_QResultToString(edg_wll_QueryResults res);
-
-/** Convert name to Query result code
- * \return Matching code or EDG_WLL_SOURCE_NONE
- */
-edg_wll_QueryResults edg_wll_StringToQResult(const char *name);
-
-/**
- * type of sequence code (used when setting to the context)
- */
-#define EDG_WLL_SEQ_NORMAL      1
-#define EDG_WLL_SEQ_DUPLICATE   11
-
-/**
- * initial sequence code for BigHelper
- */
-
-#define EDG_WLL_SEQ_BIGHELPER_INITIAL "UI=2:NS=0:WM=0:BH=1:JSS=0:LM=0:LRMS=0:APP=0"
-
-/** Retrieve current sequence code from the context */
-char * edg_wll_GetSequenceCode(
-       const edg_wll_Context   context
-);
-
-/**
- * retrieve the current logging JobId from the context
- */
-int edg_wll_GetLoggingJob(
-       const edg_wll_Context   context,
-       edg_wlc_JobId   *jobid_out
-);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif 
diff --git a/org.glite.lb.client-interface/interface/dump.h b/org.glite.lb.client-interface/interface/dump.h
deleted file mode 100644 (file)
index 37f9dd7..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_DUMP_H__
-#define __EDG_WORKLOAD_LOGGING_CLIENT_DUMP_H__
-
-#ident "$Header$"
-
-#define EDG_WLL_DUMP_NOW       -1
-#define EDG_WLL_DUMP_LAST_START        -2
-#define EDG_WLL_DUMP_LAST_END  -3
-/*      if adding new attribute, add conversion string to common/xml_conversions.c too !! */
-
-typedef struct {
-       time_t  from,to;
-} edg_wll_DumpRequest;
-
-typedef struct {
-       char    *server_file;
-       time_t  from,to;
-} edg_wll_DumpResult;
-
-/** Dump events in a given time interval
- */
-
-int edg_wll_DumpEvents(
-       edg_wll_Context,
-       const edg_wll_DumpRequest *,
-       edg_wll_DumpResult *
-);
-
-
-#endif
-
diff --git a/org.glite.lb.client-interface/interface/events.h.T b/org.glite.lb.client-interface/interface/events.h.T
deleted file mode 100644 (file)
index e37be1f..0000000
+++ /dev/null
@@ -1,332 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_EVENTS_H__
-#define __EDG_WORKLOAD_LOGGING_CLIENT_EVENTS_H__
-
-/**
- * \file edg/workload/logging/client/events.h
- * \brief contains definition of event type codes for use both by lbapi.h and dglog.h
- */
-
-#ident "$Header$"
-/*
-@@@AUTO
-*/
-@@@LANG: C
-
-#include <sys/time.h>
-#include <inttypes.h>
-
-#include "glite/wmsutils/jobid/cjobid.h"
-#include "glite/lb/context.h"
-#include "glite/lb/notifid.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/**
- * Predefined type for ULM string 
- */
-typedef char *edg_wll_LogLine;
-
-
-/**
- * \typedef edg_wll_EventCode
- * Predefined event types 
- */
-typedef enum _edg_wll_EventCode {
-/** invalid code, e.g. uninitialized variable */
-        EDG_WLL_EVENT_UNDEF = 0,
-@@@{
-for my $e (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-               $event->getTypes) {
-       my $u = uc $e;
-       my $c = getTypeComment $event $e;
-       gen "\tEDG_WLL_EVENT_$u,\t/**< $c */\n";
-}
-@@@}
-        EDG_WLL_EVENT__LAST,   /**< last currently supported event code */
-} edg_wll_EventCode;
-
-/**
- * \fn edg_wll_EventCode edg_wll_StringToEvent(char *name)
- * \param name         a string event name (e.g. "JobTransfer")
- * \return corresponding numeric code (edg_wll_EventCode)
- * \brief convert a string event name to the corresponding numeric code
- */
-
-extern edg_wll_EventCode edg_wll_StringToEvent(char *);
-
-/**
- * \fn char *edg_wll_EventToString(edg_wll_EventCode event)
- * \param event                an event numeric code (edg_wll_EventCode)
- * \return corresponding string (e.g. "JobTransfer")
- * \brief convert an event numeric code to the corresponding string
- */
-
-extern char *edg_wll_EventToString(edg_wll_EventCode);
-
-
-/**
- * \typedef edg_wll_KeyNameCode
- * Predefined ULM key types
- */
-typedef enum _edg_wll_KeyNameCode {
-       UNDEFINED,              /**< undefined */
-       EDG_WLL_EVNT,           /**< event type */
-@@@{
-selectType $event '_common_';
-for ($event->getFieldsOrdered) {
-       my $f = selectField $event $_;
-       my $fn = getName $f 'ULM';
-       my $fnu = uc $fn;
-       my $c = $f->{comment};
-       if (hasAlias $f 'ULM') {
-               gen "\tULM\_$fnu,\t\t/**< $c */\n";
-       } else {
-               gen "\tEDG_WLL\_COMMON\_$fnu,\t\t/**< $c */\n";
-       }
-}
-for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-               $event->getTypes) {
-       my $tu = uc $t;
-       selectType $event $t;
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fnu = uc $f->{name};
-               my $c = $f->{comment};
-               gen "\tEDG_WLL\_$tu\_$fnu,\t/**< $c */\n";
-       }
-}
-@@@}
-       EDG_WLL_INTERNAL_TYPE,          /**< internal message type */
-} edg_wll_KeyNameCode;
-
-/**
- * \fn edg_wll_KeyNameCode edg_wll_StringToKeyName(char *name)
- * \param name         a string ULM key name (e.g. "DG.JOB.TRANSFER.DEST")
- * \return corresponding numeric code (edg_wll_KeyNameCode)
- * \brief convert a string ULM key name to the corresponding numeric code
- */
-
-extern edg_wll_KeyNameCode edg_wll_StringToKeyName(char *);
-
-/**
- * \fn char *edg_wll_KeyNameToString(edg_wll_KeyNameCode key)
- * \param key          a ULM key name numeric code (edg_wll_KeyNameCode)
- * \return corresponding string (e.g. "DG.JOB.TRANSFER.DEST")
- * \brief convert a ULM key name numeric code to the corresponding string
- */
-
-extern char *edg_wll_KeyNameToString(edg_wll_KeyNameCode);
-
-
-/**
- * Predefined _code_ types and
- * related StringTo_code and _code_ToString function prototypes
- */
-@@@{
-$indent = "\t";
-selectType $event '_common_';
-for ($event->getFieldsOrdered) {
-       my $f = selectField $event $_;
-       if ($f->{codes}) {
-               my $fn = ucfirst($f->{name});
-               my $fnu = uc $fn;
-               my $c = "${fn}"; # new code
-               my $enum = "enum edg_wll\_$c"; # new enum name
-
-# enum
-               gen qq{
-/**
- * \\enum $enum
- * $fn codes 
- */
-$enum \{
-};
-               gen $indent."EDG_WLL_${fnu}_UNDEFINED,\t/**< undefined code */ \n";
-               for (@{$f->{codes}}) {
-                       gen $indent."EDG_WLL_${fnu}_$_->{name},\t/**< $_->{comment} */ \n";
-               }
-               gen "};\n";
-
-# function StringTo:
-               gen qq{
-/**
- * \\fn $enum edg_wll_StringTo${c}(char *name);
- * \\param name                a string representing $fn code (e.g. \"${$f->{codes}}[1]->{name}\")
- * \\return corresponding numeric code ($enum)
- * \\brief converts a string $fn code to corresponding numeric code
- */
-extern $enum edg_wll_StringTo${c}(char *name);
-};
-
-# function ToString:
-               gen qq{
-/**
- * \\fn char *edg_wll\_${c}ToString($enum code);
- * \\param code                a $fn numeric code ($enum)
- * \\return corresponding string (e.g. \"${$f->{codes}}[1]->{name}\")
- * \\brief converts a $fn numeric code to corresponding string
- */
-extern char *edg_wll\_${c}ToString($enum code);
-\n};
-       }
-}
-for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-               $event->getTypes) {
-       my $tu = uc $t . '_';
-       selectType $event $t;
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               if ($f->{codes}) {
-                       my $fn = ucfirst($f->{name});
-                       my $c = "$t${fn}"; # new code
-                       my $enum = "enum edg_wll\_$c"; # new enum name
-
-# enum
-                       gen qq{
-/**
- * \\enum $enum
- * $fn codes of the $t event
- */
-$enum \{
-};
-                       gen $indent."EDG_WLL_${tu}UNDEFINED,\t/**< undefined code */ \n";
-                       for (@{$f->{codes}}) {
-                               gen $indent."EDG_WLL_$tu$_->{name},\t/**< $_->{comment} */ \n";
-                       }
-                       gen "};\n";
-
-# function StringTo:
-                       gen qq{
-/**
- * \\fn $enum edg_wll_StringTo${c}(char *name);
- * \\param name                a string representing $t $fn code (e.g. \"${$f->{codes}}[1]->{name}\")
- * \\return corresponding numeric code ($enum)
- * \\brief converts a string $t $fn code to corresponding numeric code
- */
-extern $enum edg_wll_StringTo${c}(char *name);
-};
-
-# function ToString:
-                       gen qq{
-/**
- * \\fn char *edg_wll\_${c}ToString($enum code);
- * \\param code                a $t $fn numeric code ($enum)
- * \\return corresponding string (e.g. \"${$f->{codes}}[1]->{name}\")
- * \\brief converts a $t $fn numeric code to corresponding string
- */
-extern char *edg_wll\_${c}ToString($enum code);
-\n};
-               }
-       }
-}
-@@@}
-
-
-/**
- * common fields of all event types: 
- */
-
-@@@{
-$indent = "\t";
-gen "#define _EDG_WLL_EVENT_COMMON \\\n";
-gen $indent."edg_wll_EventCode\t\ttype;\\\n";
-selectType $event '_common_';
-for ($event->getFieldsOrdered) {
-       my $f = selectField $event $_;
-       my $fn = $f->{name};
-       my $tn = $f->getType;
-       gen $indent."$tn\t\t$fn;\t\\\n";
-}
-gen "\n";
-@@@}
-
-typedef struct _edg_wll_AnyEvent {
-_EDG_WLL_EVENT_COMMON
-} edg_wll_AnyEvent;
-
-
-/**
- *  Event types specific structures: 
- */
-@@@{
-$indent = "\t";
-for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-               $event->getTypes) {
-       my $tu = uc $t;
-       my $s = "edg_wll_${t}Event";
-# typedef struct
-       gen qq{
-/**
-* \\typedef $s
-* structure definition for $t event 
-*/
-typedef struct \_$s \{
-_EDG_WLL_EVENT_COMMON
-};
-       selectType $event $t;
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = $f->{name};
-               my $fnu = ucfirst $fn;
-               my $c = $f->{comment};
-               my $tn;
-               if ($f->{codes}) {
-                       $tn = "enum edg_wll\_$t${fnu}";
-               } else {
-                       $tn = $f->getType;
-               }
-               gen $indent."$tn\t$fn;\t/**< $c */\n";
-       }
-       gen "\} $s;\n";
-}
-@@@}
-
-#undef _EDG_WLL_EVENT_COMMON
-
-
-/**
- * \union edg_wll_Event
- * \brief All event types union
- */
-typedef union _edg_wll_Event {
-        edg_wll_EventCode           type; /* it is probably never used */
-        edg_wll_AnyEvent            any;
-@@@{
-$indent = "\t";
-for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-               $event->getTypes) {
-       my $tl = lcfirst $t;
-       gen $indent."edg_wll_${t}Event\t${tl};\n";
-}
-@@@}
-} edg_wll_Event;
-
-
-/**
- * Initialise an event structure
- * \return pointer to initialised event structure
- */
-extern edg_wll_Event *edg_wll_InitEvent(edg_wll_EventCode eventcode);
-
-
-/**
- * Free the contents of event structure
- * \param IN event structure to be freed
- * \warning As event structures are likely to be allocated in arrays,
- *      the structure itself is not freed.
- *      Its the responsibility of the caller to call free(event)
- *      if appropriate.
- */
-void edg_wll_FreeEvent(
-       edg_wll_Event * event
-);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __EDG_WORKLOAD_LOGGING_CLIENT_EVENTS_H__ */
diff --git a/org.glite.lb.client-interface/interface/jobstat.h.T b/org.glite.lb.client-interface/interface/jobstat.h.T
deleted file mode 100644 (file)
index 129b61d..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_JOBSTAT_H__
-#define __EDG_WORKLOAD_LOGGING_CLIENT_JOBSTAT_H__
-
-/* 
-@@@AUTO
-*/
-
-/*!
- * \file client/jobstat.h  
- * \brief edg_wll_JobStat definition and related stuff
- */
-
-#ident "$Header$"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Miscelaneous job status numeric codes
- */
-
-@@@{
-       for my $n ($status->getAllFieldsOrdered) {
-# XXX: we've got only _common_ in jobStatus, no clash possible
-               my $f = selectField $status $n;
-               if ($f->{codes}) {
-                       my $n = ucfirst getName $f;
-                       gen qq{
-!enum edg_wll_Stat$n \{
-};
-                       for (@{$f->{codes}}) {
-                               my $uc = uc $_->{name};
-                               gen qq{
-!      EDG_WLL_STAT_$uc,       /**< $_->{comment} */
-};
-                       }
-                       gen qq{
-!\};
-};
-               }
-       }
-@@@}
-
-
-/*!
- *
- * Job status numeric code
- */
-
-typedef enum _edg_wll_JobStatCode {
-/** Indicates invalid edg_wll_JobStat structure */
-       EDG_WLL_JOB_UNDEF = 0,
-@@@{
-       for my $stat ($status->getTypesOrdered) {
-               my $u = uc $stat;
-               my $c = getTypeComment $status $stat;
-               gen qq{
-!      EDG_WLL_JOB_$u, /**< $c */
-};
-       }
-@@@}
-       EDG_WLL_NUMBER_OF_STATCODES /**< Number of meaningful status codes */
-} edg_wll_JobStatCode;
-
-/*!
- *
- * Pair tag = value.
- */
-typedef struct _edg_wll_TagValue {
-        char *  tag;    /**< User-specified information tag */
-        char *  value;  /**< Value assigned to user-specified information tag */
-} edg_wll_TagValue;
-
-
-/*!
- *
- * Description of the job status.
- * Returned by the edg_wll_JobStatus() function
- */
-typedef struct _edg_wll_JobStat {
-       edg_wll_JobStatCode     state;          /**< status code */
-@@@{
-       for my $n (getAllFieldsOrdered $status) {
-               selectField $status $n;
-               my $f = getField $status;
-               my $type = getType $f;
-               my $name = getName $f;
-               my $fucname = ucfirst $name;
-               $type = "enum edg_wll_Stat$fucname" if $f->{codes};
-               my $comment = getComment $f;
-               gen qq{
-!      $type   $name;  /**< $comment */
-};
-       }
-@@@}
-
-} edg_wll_JobStat;
-
-/**
- * \name edg_wll_JobStat manipulation
- */
-
-/*@{*/
-
-/**
- * Initialize empty status structure.
- * Fills in the stucture with NULL's or values with no meaning
- */
-extern int edg_wll_InitStatus(edg_wll_JobStat *);
-
-/**
- * Initialize dest structure and copy source status to this destination
- */
-extern edg_wll_JobStat *edg_wll_CpyStatus(const edg_wll_JobStat *,edg_wll_JobStat *);
-
-/** 
- * Free status structure contents.
- * \warning The structure itself is not freed.
- */
-extern void edg_wll_FreeStatus(edg_wll_JobStat *);
-
-/**
- * Convert string job status to numeric code.
- */
-extern edg_wll_JobStatCode edg_wll_StringToStat(const char *);
-
-/** 
- * Convert numeric job status code to string representation
- */
-extern char *edg_wll_StatToString(edg_wll_JobStatCode);
-
-/*@}*/
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __EDG_WORKLOAD_LOGGING_CLIENT_JOBSTAT_H__ */
diff --git a/org.glite.lb.client-interface/interface/load.h b/org.glite.lb.client-interface/interface/load.h
deleted file mode 100644 (file)
index 5ca8ead..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_LOAD_H__
-#define __EDG_WORKLOAD_LOGGING_CLIENT_LOAD_H__
-
-#ident "$Header$"
-
-typedef struct {
-       char    *server_file;
-} edg_wll_LoadRequest;
-
-typedef struct {
-       char    *server_file;
-       time_t  from,to;
-} edg_wll_LoadResult;
-
-/** Load events from a given file into the database
- * \retval EPERM       operation not permitted
- * \retval ENOENT      file not found
- */
-
-int edg_wll_LoadEvents(
-       edg_wll_Context,
-       const edg_wll_LoadRequest *,
-       edg_wll_LoadResult *
-);
-
-#endif
-
diff --git a/org.glite.lb.client-interface/interface/notification.h b/org.glite.lb.client-interface/interface/notification.h
deleted file mode 100644 (file)
index a16215d..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_NOTIFICATION_H__
-#define __EDG_WORKLOAD_LOGGING_CLIENT_NOTIFICATION_H__
-
-#ident "$Header$"
-
-#include "glite/wmsutils/jobid/cjobid.h"
-#include "glite/lb/notifid.h"
-#include "glite/lb/context.h"
-#include "glite/lb/consumer.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * default and maximal notif timeout (in seconds)
- */
-#define EDG_WLL_NOTIF_TIMEOUT_DEFAULT   120
-#define EDG_WLL_NOTIF_TIMEOUT_MAX       1800
-
-
-/** Register for receiving notifications.
- * Connects to the server specified by EDG_WLL_NOTIF_SERVER context parameter
- * (temporary workaround, should be resolved by registry in future).
- * \param conditions: the same conditions as for \see edg_wll_QueryJobsExt.
- *             currently one or more JOBID's are required.
- *             Only a single occurence of a specific attribute is allowed
- *             among ANDed conditions (due to the ability to modify them
- *             further).
- * \param fd = -1 create or reuse the default listening socket (one per context)
- *          >= 0 non-default listening socket 
- * \param address_override if not NULL, use this address instead of extracting it
- *             from the connection (useful when multiple interfaces are present,
- *             circumventing NAT problems etc.)
- * \param valid until when the registration is valid (NULL means no interest in
- *             the value
- * \retval 0 OK
- * \retval EINVAL restrictions on conditions are not met
- * 
- */
-int edg_wll_NotifNew(
-       edg_wll_Context         context,
-       edg_wll_QueryRec        const * const *conditions,
-       int                     fd,
-       const char              *address_override,
-       edg_wll_NotifId         *id_out,
-       time_t                  *valid
-);
-
-
-/** Change the receiving local address.
- * Report the new address to the server.
- *
- * \param fd 
- * \param address_override 
- * \param valid all same as for \see edg_wll_NotifNew
- */
-
-int edg_wll_NotifBind(
-       edg_wll_Context         context,
-       const edg_wll_NotifId   id,
-       int                     fd,
-       const char              *address_override,
-       time_t                  *valid
-);
-
-typedef enum _edg_wll_NotifChangeOp {
-       EDG_WLL_NOTIF_NOOP = 0,
-       EDG_WLL_NOTIF_REPLACE,
-       EDG_WLL_NOTIF_ADD,
-       EDG_WLL_NOTIF_REMOVE
-/*      if adding new attribute, add conversion string to common/xml_conversions.c too !! */
-} edg_wll_NotifChangeOp;
-
-/** Modify the query conditions for this notification.
- *
- * If op is either EDG_WLL_NOTIF_ADD or EDG_WLL_NOTIF_REMOVE, for the sake
- * of uniqueness the original conditions must have contained only a single
- * OR-ed row of conditions on the attributes infolved in the change.
- * 
- * \param op action to be taken on existing conditions,
- *     \see edg_wll_NotifChangeOp
- */
-int edg_wll_NotifChange(
-       edg_wll_Context         context,
-       const edg_wll_NotifId   id,
-       edg_wll_QueryRec        const * const * conditions,
-       edg_wll_NotifChangeOp   op
-);
-
-/** Refresh the registration, i.e. extend its validity period.
- * \param valid until when the registration is valid (NULL means no interest in
- *             the value
- */
-
-int edg_wll_NotifRefresh(
-       edg_wll_Context         context,
-       const edg_wll_NotifId   id,
-       time_t                  *valid
-);
-
-/** Drop the registration.
- * Server is instructed not to send notifications anymore, pending ones
- * are discarded, listening socket is closed, and allocated memory freed.
- */
-
-int edg_wll_NotifDrop(
-       edg_wll_Context         context,
-       edg_wll_NotifId         *id
-);
-
-/** Receive notification.
- * The first incoming notification is returned.
- * \param fd receive on this socket (-1 means the default for the context)
- * \param timeout wait atmost this time long. (0,0) means polling, NULL waiting
- *     indefinitely
- *     
- * \retval 0 notification received, state_out contains the current job state
- * \retval EAGAIN no notification available, timeout occured
- */
-
-int edg_wll_NotifReceive(
-       edg_wll_Context         context,
-       int                     fd,
-       const struct timeval    *timeout,
-       edg_wll_JobStat         *state_out,
-       edg_wll_NotifId         *id_out
-);
-
-
-/** Default socket descriptor where to select(2) for notifications.
- * Even if nothing is available for reading freom the socket, 
- * there may be some data cached so calling \see edg_wll_NotifReceive
- * may return notifications immediately.
- *
- * \retval >=0 socket descriptor
- * \retval -1 error, details set in context
- */
-
-int edg_wll_NotifGetFd(
-       edg_wll_Context         context
-);
-
-/** Close the default local listening socket.
- * Useful to force following \see edg_wll_NotifBind to open
- * a new one.
- */
-
-int edg_wll_NotifCloseFd(
-       edg_wll_Context         context
-);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/org.glite.lb.client-interface/interface/notifid.h b/org.glite.lb.client-interface/interface/notifid.h
deleted file mode 100644 (file)
index fc52d01..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_COMMON_NOTIFID_H__
-#define __EDG_WORKLOAD_LOGGING_COMMON_NOTIFID_H__
-
-#ident "$Header$"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** Notification handle.
- * Refers to a particular registration for receiving notifications.
- */
-typedef void *edg_wll_NotifId;
-
-/** Parse and unparse the Id. */
-int edg_wll_NotifIdParse(const char *,edg_wll_NotifId *);
-char* edg_wll_NotifIdUnparse(const edg_wll_NotifId);
-
-int edg_wll_NotifIdCreate(const char *,int,edg_wll_NotifId *);
-void edg_wll_NotifIdFree(edg_wll_NotifId);
-
-void edg_wll_NotifIdGetServerParts(const edg_wll_NotifId, char **, unsigned int *);
-char *edg_wll_NotifIdGetUnique(const edg_wll_NotifId);
-int edg_wll_NotifIdSetUnique(edg_wll_NotifId *, const char *);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/org.glite.lb.client-interface/interface/producer.h.T b/org.glite.lb.client-interface/interface/producer.h.T
deleted file mode 100644 (file)
index 188f25c..0000000
+++ /dev/null
@@ -1,454 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_PRODUCER_H__
-#define __EDG_WORKLOAD_LOGGING_CLIENT_PRODUCER_H__
-
-/**
- * \file edg/workload/logging/client/producer.h
- * \brief client API for storing data into L&B service
- */
-
-#ident "$Header$"
-/*
-@@@AUTO
-*/
-@@@LANG: C
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "glite/lb/context.h"
-#include "glite/lb/events.h"
-
-/* Event sources: */
-
-#if 0 /* obsolete */
-#define EDG_WLL_SOURCE_UI           "UserInterface"
-#define EDG_WLL_SOURCE_RB           "ResourceBroker"
-#define EDG_WLL_SOURCE_JSS          "JobSubmissionService"  /* aka Condor-G */
-#define EDG_WLL_SOURCE_JOBMGR       "GlobusJobmanager"
-#define EDG_WLL_SOURCE_LRMS         "LocalResourceManager"
-#define EDG_WLL_SOURCE_APP          "Application"
-
-#define EDG_WLL_SOURCE_NS      "NetworkServer"
-#define EDG_WLL_SOURCE_WM      "WorkloadManager"
-#define EDG_WLL_SOURCE_BH      "BigHelper"
-#define EDG_WLL_SOURCE_LM      "LogMonitor"
-
-#endif
-
-/* Event formats: */
-
-#define EDG_WLL_FORMAT_COMMON  "DATE=%s HOST=\"%|Us\" PROG=edg-wms LVL=%s DG.PRIORITY=%d DG.SOURCE=\"%|Us\" DG.SRC_INSTANCE=\"%|Us\" DG.EVNT=\"%s\" DG.JOBID=\"%s\" DG.SEQCODE=\"%|Us\" "
-#define EDG_WLL_FORMAT_USER    "DG.USER=\"%|Us\" "
-@@@{
-# FIXME:
-# this is all functional, but doesn't fit to all common fields (eg. USER)
-#
-#gen "#define EDG_WLL_FORMAT_COMMON\t\"";
-#selectType $event '_common_';
-#for ($event->getFieldsOrdered) {
-#      my $f = selectField $event $_;
-#      my $fn = getName $f 'ULM';
-#      my $fnu = uc $fn;
-#      if (hasAlias $f 'ULM') {
-#              gen "$fnu=%s ";
-#      } else {
-#              gen "DG\.$fnu=";
-#                      gen $f->toFormatString;
-#                      gen " ";
-#      }
-#}
-#gen "\"\n";
-#
-for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-               $event->getTypes) {
-       my $tu = uc $t;
-       gen "#define EDG_WLL_FORMAT_$tu\t\"";
-       selectType $event $t;
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = $f->{name};
-               my $fnu = uc $fn;
-               gen "DG.$tu.$fnu=\\\"";
-               if ($f->{codes}) {
-                       gen "%s";
-               } else {
-                       gen $f->toFormatString;
-               }
-               gen "\\\" ";
-       }
-       gen "\"\n";
-}
-@@@}
-#define EDG_WLL_FORMAT_NOTIFICATION_COMMON     "DATE=%s HOST=\"%|Us\" PROG=edg-wms LVL=%s DG.SOURCE=\"%|Us\" DG.SRC_INSTANCE=\"%|Us\" DG.TYPE=\"notification\" "
-#define EDG_WLL_FORMAT_SYSCMPSTAT      "DG.SCHED.STATUS=\"%|Us\" "
-#define EDG_WLL_FORMAT_SYSCLSTAT       "DG.SCHED.NODE=\"%|Us\" DG.SCHED.STATUS=\"%|Us\" "
-
-
-/* edg_wll_LogEvent shortcuts */
-@@@{
-for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-               $event->getTypes) {
-       my $tu = uc $t;
-       my $a = "(edg_wll_Context context";
-       my $b = "(context,EDG_WLL_EVENT_$tu,EDG_WLL_FORMAT_$tu";
-       my $doc = qq{
- * \\param context\tcontext to work with,
-};
-       selectType $event $t;
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = $f->getName;
-               my $ft;
-                if ($f->{codes}) {
-#                        $ft = "enum edg_wll\_$t" . ucfirst $fn;
-                        $ft = "char *";
-                } else {
-                        $ft = $f->getType;
-                }
-               $ft = "const ".$ft;
-               my $fc = $f->getComment;
-               $a = $a . ", $ft $fn";
-               $b = $b . ", $fn";
-               $doc = $doc . " * \\param $fn\t$fc\n";
-       }
-       $a = $a . ")";
-       $b = $b . ")";
-       gen qq{
-/**
- * \\fn int edg_wll_Log$t$a; 
- * \\brief simple wrapper around edg_wll_LogEvent for event $t} . $doc . qq{ * \\see edg_wll_LogEvent\(\)
- */
-};
-       gen "\nextern int edg_wll_Log${t}$a;\n";
-       gen "\nextern int edg_wll_Log${t}Proxy$a;\n";
-#      gen qq{
-#int edg_wll_Log$t$a
-#\{
-#      return edg_wll_LogEvent$b;
-#\}\n
-#};
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = $f->getName;
-               my $ft;
-                if ($f->{codes}) {
-#                        $ft = "enum edg_wll\_$t" . ucfirst $fn;
-                        $ft = "char *";
-                } else {
-                        $ft = $f->getType;
-                }
-               my $ftreg = $ft;
-               $ftreg =~ s/\*/\\\*/g;
-               $ftreg = "const ".$ftreg;
-               my $fc = $f->getComment;
-               if ($f->{codes}) {
-                       for (@{$f->{codes}}) {
-                               my $code = uc $_->{name};
-                               my $c = $a;
-                               my $d = $b;
-                               my $e = $doc;
-                               $c =~ s/, $ftreg $fn//g;
-                               $d =~ s/$fn/"$code"/g;
-                               $e =~ s/ \* \\param $fn\t$fc\n//g;
-                               gen qq{
-/**
- * \\fn int edg_wll_Log$t$code$c; 
- * \\brief simple wrapper around edg_wll_LogEvent for event $t, $fn $code} . $e . qq{ * \\see edg_wll_LogEvent\(\)
- */
-};
-                               gen "\nextern int edg_wll_Log$t${code}$c;\n";
-                               gen "\nextern int edg_wll_Log$t${code}Proxy$c;\n";
-#                              gen qq{
-#int edg_wll_Log$t$code$c
-#\{
-#      return edg_wll_LogEvent$d;
-#\}\n
-#};
-                       }
-               }
-       }
-}
-@@@}
-
-
-/**
- * Formats a logging message and sends it asynchronously to local-logger
- * \brief generic asynchronous logging function
- * \param context      INOUT context to work with,
- * \param event                IN type of the event,
- * \param fmt          IN printf()-like format string,
- * \param ...          IN event specific values/data according to fmt,
- * \retval 0           successful completition,
- * \retval EINVAL      bad jobId, unknown event code, or the format string together with the remaining arguments does not form a valid event,
- * \retval ENOSPC      L&B infrastructure failed to accept the event due to lack of disk space etc.,
- * \retval ENOMEM      failed to allocate memory,
- * \retval ECONNREFUSED        cannot connect to the specified local logger,
- * \retval EAGAIN      non blocking return from the call, the event may or may not get logged,
- * \retval EDG_WLL_ERROR_NOJOBID logging call attempted without assigning jobId to the context.
- */
-extern int edg_wll_LogEvent(
-       edg_wll_Context context,
-       edg_wll_EventCode event,
-       char *fmt, ...);
-
-/**
- * Formats a logging message and sends it synchronously to local-logger
- * \brief generic synchronous logging function
- * \param context      INOUT context to work with,
- * \param event                IN type of the event,
- * \param fmt          IN printf()-like format string,
- * \param ...          IN event specific values/data according to fmt,
- * \retval 0           successful completition,
- * \retval EINVAL      bad jobId, unknown event code, or the format string together with the remaining arguments does not form a valid event,
- * \retval ENOSPC      L&B infrastructure failed to accept the event due to lack of disk space etc.,
- * \retval ENOMEM      failed to allocate memory,
- * \retval ECONNREFUSED        cannot connect to the specified local logger,
- * \retval EAGAIN      non blocking return from the call, the event may or may not get logged,
- * \retval EDG_WLL_ERROR_NOJOBID logging call attempted without assigning jobId to the context,
- * \retval EPERM       the user is not authorized to add events to this job,
- * \retval EDG_WLL_ERROR_DB_DUP_KEY exactly the same event has been already stored.
- */
-extern int edg_wll_LogEventSync(
-       edg_wll_Context context,
-       edg_wll_EventCode event,
-       char *fmt, ...);
-
-/**
- * Formats a logging message and sends it synchronously to L&B Proxy
- * \brief generic synchronous logging function
- * \param context       INOUT context to work with,
- * \param event         IN type of the event,
- * \param fmt           IN printf()-like format string,
- * \param ...           IN event specific values/data according to fmt,
- * \retval 0            successful completition,
- * \retval EINVAL       bad jobId, unknown event code, or the format string together with the remaining arguments does not form a valid event,             
- * \retval ENOSPC       L&B infrastructure failed to accept the event due to lack of disk space etc.,
- * \retval ENOMEM       failed to allocate memory,
- * \retval ECONNREFUSED cannot connect to the specified L&B Proxy
- * \retval EAGAIN       non blocking return from the call, the event may or may not get logged,
- * \retval EDG_WLL_ERROR_NOJOBID logging call attempted without assigning jobId to the context.
- */             
-extern int edg_wll_LogEventProxy(
-        edg_wll_Context context, 
-        edg_wll_EventCode event,
-        char *fmt, ...);        
-
-/**
- * Instructs interlogger to to deliver all pending events related to current job
- * \brief flush events from interlogger
- * \note sort of status query more than a command
- * \param context      INOUT context to work with,
- * \param timeout      INOUT wait at most this much time for completition, remaining time on return,
- * \retval 0           successful completition,
- * \retval EDG_WLL_ERROR_INTERLOG_TIMEOUT the inter-logger did not respond within the timeout,
- * \retval EDG_WLL_ERROR_INTERLOG_CONLOST inter-logger lost connection to one or more servers,
- * \retval EDG_WLL_ERROR_INTERLOG_AGAIN   not all pending events were delivered within the timeout.
- */
-extern int edg_wll_LogFlush(
-       edg_wll_Context context,
-       struct timeval *timeout);
-
-
-/**
- * Instructs interlogger to to deliver all pending events
- * \brief flush all events from interlogger
- * \note same as edg_wll_LogFlush() for all jobs known to interlogger
- * \see edg_wll_LogFlush()
- */
-extern int edg_wll_LogFlushAll(
-       edg_wll_Context context,
-       struct timeval *timeout);
-
-/**
- * Set a current job for given context.
- * \note Should be called before any logging call.
- * \param context INOUT context to work with
- * \param job IN further logging calls are related to this job
- * \param code IN sequence code as obtained from previous component
- * \param flags IN flags on code handling (\see API documentation)
- */
-extern int edg_wll_SetLoggingJob(
-       edg_wll_Context context,
-       const edg_wlc_JobId     job,
-       const char *            code,
-       int                     flags
-);
-
-/**
- * Set a current job for given context.
- * \note Should be called before any logging call.
- * \param context INOUT context to work with
- * \param job IN further logging calls are related to this job
- * \param code IN sequence code as obtained from previous component
- * \param user IN user credentials
- * \param flags IN flags on code handling (\see API documentation)
- */
-extern int edg_wll_SetLoggingJobProxy(
-       edg_wll_Context context,
-       const edg_wlc_JobId     job,
-       const char *            code,
-       const char *            user,
-       int                     flags
-);
-
-
-/**
- * Register job with L&B service.
- * Done via logging REGJOB event, may generate subjob id's and create
- * the parent-children associations.
- * Set the job as current for the context and initialize sequence code.
- *
- * Partitionable jobs should set num_subjobs=0 initially,
- * and re-register when number of subjobs becomes known.
- *
- * \param type IN EDG_WLL_JOB_SIMPLE,  EDG_WLL_JOB_DAG, or EDG_WLL_JOB_PARTITIONABLE
- * \param jdl IN user-specified JDL
- * \param ns IN network server contact
- * \param num_subjobs IN number of subjobs to create
- * \param seed IN seed used for subjob id's generator.
- *     Use non-NULL value to be able to regenerate the set of jobid's
- * \param subjobs OUT returned subjob id's
- */
-
-/* backward compatibility */
-#define EDG_WLL_JOB_SIMPLE     EDG_WLL_REGJOB_SIMPLE
-extern int edg_wll_RegisterJob(
-       edg_wll_Context         context,
-       const edg_wlc_JobId     job,
-       enum edg_wll_RegJobJobtype      type,
-       const char *            jdl,
-       const char *            ns,
-       int                     num_subjobs,
-       const char *            seed,
-       edg_wlc_JobId **        subjobs
-);
-
-/** 
- * Synchronous variant of edg_wll_RegisterJob
- */
-
-extern int edg_wll_RegisterJobSync(
-       edg_wll_Context         context,
-       const edg_wlc_JobId     job,
-       enum edg_wll_RegJobJobtype      type,
-       const char *            jdl,
-       const char *            ns,
-       int                     num_subjobs,
-       const char *            seed,
-       edg_wlc_JobId **        subjobs
-);
-
-/**
- * Register job with L&B Proxy service.
- * Done via logging REGJOB event, may generate subjob id's and create
- * the parent-children associations.
- * Set the job as current for the context and initialize sequence code.
- *
- * Partitionable jobs should set num_subjobs=0 initially,
- * and re-register when number of subjobs becomes known.
- *
- * \param type IN EDG_WLL_JOB_SIMPLE,  EDG_WLL_JOB_DAG, or EDG_WLL_JOB_PARTITIONABLE
- * \param user IN user credentials
- * \param jdl IN user-specified JDL
- * \param ns IN network server contact
- * \param num_subjobs IN number of subjobs to create
- * \param seed IN seed used for subjob id's generator.
- *      Use non-NULL value to be able to regenerate the set of jobid's
- * \param subjobs OUT returned subjob id's
- */
-
-extern int edg_wll_RegisterJobProxy(
-       edg_wll_Context         context,
-       const edg_wlc_JobId     job,
-       enum edg_wll_RegJobJobtype      type,
-       const char *            user,
-       const char *            jdl,
-       const char *            ns,
-       int                     num_subjobs,
-       const char *            seed,
-       edg_wlc_JobId **        subjobs
-);
-
-
-/**
- * Register subjobs in a batch.
- * Mainly used to provide JDL's of individual subjobs in a more efficient
- * way than logging them one by one.
- * \param jdls array of JDL's
- * \param subjobs      array of jobid's in the same order
- */
-
-extern int edg_wll_RegisterSubjobs(
-       edg_wll_Context         context,
-       const edg_wlc_JobId     parent,
-       char const * const *    jdls,
-       const char *            ns,
-       edg_wlc_JobId const *   subjobs
-);
-
-
-/**
- * Generate or regenerate set of subjob ID's.
- * Calls the same algorithm used to generate subjob ID's in edg_wll_RegisterJob().
- * Local semantics only, server is not contacted.
- */
-
-extern int edg_wll_GenerateSubjobIds(
-       edg_wll_Context         context,
-       const edg_wlc_JobId     parent,
-       int                     num_subjobs,
-       const char *            seed,
-       edg_wlc_JobId **        subjobs
-);
-
-
-enum edg_wll_Permission {
-       EDG_WLL_PERM_READ  = 1,
-       EDG_WLL_PERM_WRITE = 4,
-       EDG_WLL_PERM_ADMIN = 8,
-};
-
-enum edg_wll_PermissionType {
-       EDG_WLL_PERM_ALLOW,
-       EDG_WLL_PERM_DENY,
-};
-
-enum edg_wll_ACLOperation {
-       EDG_WLL_ACL_ADD,
-       EDG_WLL_ACL_REMOVE,
-};
-
-enum edg_wll_UserIdType {
-       EDG_WLL_USER_SUBJECT,           /* X.509 subject name */
-       EDG_WLL_USER_VOMS_GROUP,        /* VOMS group membership */
-};
-
-/**
- * Change ACL for given job.
- * \param specification of user's credential
- * \param user_id_type type of user_id,
- *    for EDG_WLL_USER_SUBJECT the user_id parameter is expected to be user's subject name
- *    for EDG_WLL_USER_VOMS_GROUP the user_id is expected to be of the form VO:group specifying required group membersip as managed by VOMS
- * \param permission ACL permission to change
- * \param permission_type type of given permission (allow or deny operation) 
- * \param operation operation to perform with ACL (add or remove record)
- */
-extern int edg_wll_ChangeACL(
-       edg_wll_Context         context,
-       const edg_wlc_JobId     job,
-       const char *            user_id,
-       enum edg_wll_UserIdType user_id_type,
-       enum edg_wll_Permission         permission,
-       enum edg_wll_PermissionType     permission_type,
-       enum edg_wll_ACLOperation       operation
-);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __EDG_WORKLOAD_LOGGING_CLIENT_PRODUCER_H__ */
diff --git a/org.glite.lb.client-interface/interface/producer_fake.h b/org.glite.lb.client-interface/interface/producer_fake.h
deleted file mode 100644 (file)
index 1c75700..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/* 
- * fake implementation of the producer API
- */
-
-#ifndef WORKLOAD_LOGGING_CLIENT_PRODUCER_FAKE_H
-#define WORKLOAD_LOGGING_CLIENT_PRODUCER_FAKE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "glite/lb/context.h"
-
-typedef int (edg_wll_Logging_cb_f)(edg_wll_Context context);
-
-int edg_wll_RegisterTestLogging(edg_wll_Logging_cb_f *cb);
-int edg_wll_RegisterTestLoggingProxy(edg_wll_Logging_cb_f *cb);
-void edg_wll_UnregisterTestLogging();
-void edg_wll_UnregisterTestLoggingProxy();
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* WORKLOAD_LOGGING_CLIENT_PRODUCER_FAKE_H */
diff --git a/org.glite.lb.client-interface/interface/purge.h b/org.glite.lb.client-interface/interface/purge.h
deleted file mode 100644 (file)
index 531c903..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_PURGE_H__
-#define __EDG_WORKLOAD_LOGGING_CLIENT_PURGE_H__
-
-#ident "$Header$"
-
-/** Purge or dump request */
-typedef struct _edg_wll_PurgeRequest {
-       char    **jobs;         /**< list of jobid's to work on */ 
-
-/** Purge jobs that are in the given states and "untouched" at least for the
-  * specified interval.
-  * Currently applicable for CLEARED, ABORTED, CANCELLED and OTHER (catchall).
-  * The other array members are for future extensions.
-  * Negative values stand for server defaults.
-  */
-       time_t  timeout[EDG_WLL_NUMBER_OF_STATCODES];
-#define EDG_WLL_PURGE_JOBSTAT_OTHER    EDG_WLL_JOB_UNDEF
-
-
-/**
- * Actions to be taken and information required.
- */
-       int     flags;
-
-/** no dry run */
-#define EDG_WLL_PURGE_REALLY_PURGE     1
-/** return list of jobid matching the purge/dump criteria */
-#define EDG_WLL_PURGE_LIST_JOBS                2
-/** dump to a file on the sever */
-#define EDG_WLL_PURGE_SERVER_DUMP      4
-/** TODO: stream the dump info to the client */
-#define EDG_WLL_PURGE_CLIENT_DUMP      8
-/* ! when addning new constant, add it also to common/xml_conversions.c ! */
-
-       
-/** private request processing data (for the reentrant functions) */
-/* TODO */
-       
-} edg_wll_PurgeRequest;
-
-/** Output data of a purge or dump */
-typedef struct _edg_wll_PurgeResult {
-       char    *server_file;   /**< filename of the dump at the server */
-       char    **jobs;         /**< affected jobs */
-/* TODO: output of the streaming interface */
-} edg_wll_PurgeResult;
-
-
-/** Client side purge/dump 
- * \retval EAGAIN only partial result returned, call repeatedly to get all
- *     output data
- */
-int edg_wll_Purge(
-       edg_wll_Context ctx,
-       edg_wll_PurgeRequest *request,
-       edg_wll_PurgeResult     *result
-);
-
-#endif
diff --git a/org.glite.lb.client-interface/interface/statistics.h b/org.glite.lb.client-interface/interface/statistics.h
deleted file mode 100644 (file)
index aceab86..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_STATISTICS_H__
-#define __EDG_WORKLOAD_LOGGING_CLIENT_STATISTICS_H__
-
-#include "glite/lb/consumer.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** Count the number of jobs which entered the specified state.
- * \param group IN: group of jobs of interest, eg. DESTINATION = something
- *             (XXX: this is the only query supported right now)
- * \param major IN: major code of the state of interest
- * \param minor IN: minor state code, eg. DONE_FAILED
- * \param from,to INOUT: on input - requested interval of interest
- *     on output - when the data were available
- * \param rate OUT: average rate per second in which the jobs enter this state
- * \param res_from, res_to: time resolution of the data (seconds)
- */
-
-int edg_wll_StateRate(
-       edg_wll_Context context,
-       const edg_wll_QueryRec  *group,
-       edg_wll_JobStatCode     major,
-       int                     minor,
-       time_t  *from, 
-       time_t  *to,
-       float   *rate,
-       int     *res_from,
-       int     *res_to
-);
-
-
-/** Compute average time for which jobs stay in the specified state.
- * \see edg_wll_StateRate for description of parameters.
- */
-
-int edg_wll_StateDuration(
-       edg_wll_Context context,
-       const edg_wll_QueryRec  *group,
-       edg_wll_JobStatCode     major,
-       int                     minor,
-       time_t  *from, 
-       time_t  *to,
-       float   *duration,
-       int     *res_from,
-       int     *res_to
-);
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __EDG_WORKLOAD_LOGGING_CLIENT_CONSUMER_H__ */
-
diff --git a/org.glite.lb.client-interface/project/build.properties b/org.glite.lb.client-interface/project/build.properties
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.glite.lb.client-interface/project/configure.properties.xml b/org.glite.lb.client-interface/project/configure.properties.xml
deleted file mode 100644 (file)
index f894934..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Configuration options for the GLite LB Client Interface module
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.1  2004/07/06 17:47:31  flammer
-       Update of classpath definitions, targets & configure file.
-       
-       Revision 1.3  2004/06/23 00:16:08  dimeglio
-       Added globalprefix and lbprefix parameters
-       
-       Revision 1.2  2004/06/22 15:49:56  dimeglio
-       Added configuration options
-       
-       Revision 1.1  2004/06/21 16:00:23  dimeglio
-       First version of this file
-       
--->
-
-       <!-- ======================================================
-         Define extra properties here ...
-         ====================================================== -->
-        
-       <project name="LB Client Interface configuration options">                                                                        
-               <target name="lbmakefiles">
-                       <exec executable="ln" failonerror="true">
-                               <arg line="-fs ${component.dir}/Makefile ${module.build.dir}/Makefile"/>
-                       </exec>
-                       <echo file="${module.build.dir}/Makefile.inc">
-top_srcdir=..
-builddir=build
-stagedir=${stage.dir}
-distdir=${dist.dir}
-package=${module.package.name}
-globalprefix=${global.prefix}
-lbprefix=${subsystem.prefix}
-PREFIX=${install.dir}
-version=${module.version}
-                       </echo>
-                       <echo file="${module.build.dir}/C.dox">
-PROJECT_NAME           = "Glite LB Client: C - Interface"
-PROJECT_NUMBER         = ${module.version}
-OUTPUT_DIRECTORY       = ${component.dir}/doc/C
-OPTIMIZE_OUTPUT_FOR_C  = YES
-INPUT                  = ./events.h \
-                         ./jobstat.h \
-                         ./producer.h \
-                         ../interface/context.h \
-                         ../interface/consumer.h 
-#HAVE_DOT               = YES
-#CALL_GRAPH             = YES
-                       </echo>
-                       <echo file="${module.build.dir}/CPP.dox">
-PROJECT_NAME           = "Glite LB Client: CPP - Interface"
-PROJECT_NUMBER         = ${module.version}
-OUTPUT_DIRECTORY       = ${component.dir}/doc/CPP
-INPUT                  = ../build/Event.h \
-                         ../build/JobStatus.h \
-                         ../interface/Job.h \
-                         ../interface/CountRef.h \
-                         ../interface/LoggingExceptions.h \
-                         ../interface/ServerConnection.h \
-                         ../interface/Notification.h
-#HAVE_DOT               = YES
-#CALL_GRAPH             = YES
-                       </echo>
-           </target>
-       </project>
diff --git a/org.glite.lb.client-interface/project/properties.xml b/org.glite.lb.client-interface/project/properties.xml
deleted file mode 100755 (executable)
index 31d958b..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Common build properties file for the Glite LB Client Interface component
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$ 
-       
-       Revision history:
-       $Log$
-       Revision 1.2  2004/06/21 14:21:07  dimeglio
-       Updated format
-       
--->
-
-<project name="LB Client Interface component common properties">
-
-       <!-- Include build properties to allow overwriting 
-            of properties for subsystem                    -->
-       <property file="project/build.properties" />    
-
-       <!-- ======================================================
-          Define corresponding subsystem properties
-                ====================================================== -->
-
-       <!-- Subsystem name -->
-       <property name="subsystem.name" value="${lb.subsystem.name}"/>
-               
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${lb.subsystem.prefix}"/>
-
-       <!-- ======================================================
-          Define component properties
-                ====================================================== -->
-                               
-       <!-- Component name prefix -->
-       <property name="component.prefix" value="client-interface" />
-                       
-       <!-- ======================================================
-          Define general component properties
-                ====================================================== -->
-       
-       <import file="${component.general.properties.file}" />
-                                               
-       <!-- ======================================================
-                Define extra properties here ...
-                ====================================================== -->
-                
-                                                               
-</project>
diff --git a/org.glite.lb.client-interface/project/tar_exclude b/org.glite.lb.client-interface/project/tar_exclude
deleted file mode 100644 (file)
index e1fcd1a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-tar_exclude
-CVS
-build.xml
-build
-build.properties
-properties.xml
-configure.properties.xml
-.cvsignore
-.project
-.cdtproject
diff --git a/org.glite.lb.client-interface/project/version.properties b/org.glite.lb.client-interface/project/version.properties
deleted file mode 100644 (file)
index ae31ae1..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Dec 10 13:18:21 CET 2004
-module.version=0.3.1
-module.build=113
-module.age=2
diff --git a/org.glite.lb.client/.cvsignore b/org.glite.lb.client/.cvsignore
deleted file mode 100644 (file)
index 1df717b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-.project
-.cdtproject
\ No newline at end of file
diff --git a/org.glite.lb.client/LICENSE b/org.glite.lb.client/LICENSE
deleted file mode 100644 (file)
index 259a91f..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-LICENSE file for EGEE Middleware\r
-================================\r
-\r
-Copyright (c) 2004 on behalf of the EU EGEE Project: \r
-The European Organization for Nuclear Research (CERN), \r
-Istituto Nazionale di Fisica Nucleare (INFN), Italy\r
-Datamat Spa, Italy\r
-Centre National de la Recherche Scientifique (CNRS), France\r
-CS Systeme d'Information (CSSI), France\r
-Royal Institute of Technology, Center for Parallel Computers (KTH-PDC), Sweden\r
-Universiteit van Amsterdam (UvA), Netherlands\r
-University of Helsinki (UH.HIP), Finlan\r
-University of Bergen (UiB), Norway\r
-Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom\r
-\r
-Redistribution and use in source and binary forms, with or without\r
-modification, are permitted provided that the following conditions are\r
-met: \r
-\r
-1. Redistributions of source code must retain the above copyright\r
-notice, this list of conditions and the following disclaimer.\r
-\r
-2. Redistributions in binary form must reproduce the above copyright\r
-notice, this list of conditions and the following disclaimer in the\r
-documentation and/or other materials provided with the distribution.\r
-\r
-3. The end-user documentation included with the redistribution, if\r
-any, must include the following acknowledgment: "This product includes\r
-software developed by The EU EGEE Project (http://cern.ch/eu-egee/)."\r
-Alternatively, this acknowledgment may appear in the software itself, if\r
-and wherever such third-party acknowledgments normally appear.\r
-\r
-4. The names EGEE and the EU EGEE Project must not be\r
-used to endorse or promote products derived from this software without\r
-prior written permission. For written permission, please contact\r
-<email address>.\r
-\r
-5. You are under no obligation whatsoever to provide anyone with any\r
-bug fixes, patches, or upgrades to the features, functionality or\r
-performance of the Software ("Enhancements") that you may develop over\r
-time; however, if you choose to provide your Enhancements to The EU\r
-EGEE Project, or if you choose to otherwise publish or distribute your\r
-Enhancements, in source code form without contemporaneously requiring\r
-end users of The EU EGEE Proejct to enter into a separate written license\r
-agreement for such Enhancements, then you hereby grant The EU EGEE Project\r
-a non-exclusive, royalty-free perpetual license to install, use, copy,\r
-modify, prepare derivative works, incorporate into the EGEE Middleware\r
-or any other computer software, distribute, and sublicense your\r
-Enhancements or derivative works thereof, in binary and source code\r
-form (if any), whether developed by The EU EGEE Project or third parties.\r
-\r
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED\r
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
-DISCLAIMED. IN NO EVENT SHALL PROJECT OR ITS CONTRIBUTORS BE LIABLE\r
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\r
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\r
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\r
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-\r
-This software consists of voluntary contributions made by many\r
-individuals on behalf of the EU EGEE Prject. For more information on The\r
-EU EGEE Project, please see http://cern.ch/eu-egee/. For more information on\r
-EGEE Middleware, please see http://egee-jra1.web.cern.ch/egee-jra1/\r
-\r
-\r
diff --git a/org.glite.lb.client/Makefile b/org.glite.lb.client/Makefile
deleted file mode 100644 (file)
index 3fde357..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-# Default values
-top_srcdir=.
-builddir=build
-top_builddir=${top_srcdir}/${builddir}
-stagedir=.
-distdir=.
-globalprefix=glite
-lbprefix=lb
-package=glite-lb-client
-version=0.0.0
-PREFIX=/opt/glite
-
-glite_location=/opt/glite
-globus_prefix=/opt/globus
-nothrflavour=gcc32
-thrflavour=gcc32pthr
-expat_prefix=/opt/expat
-ares_prefix=/opt/ares
-
-CC:=gcc
-CXX:=g++
-
--include Makefile.inc
-
-
-VPATH=${top_srcdir}/src:${top_srcdir}/test:${top_srcdir}/examples
-AT3=perl -I${top_srcdir}/project ${top_srcdir}/project/at3
-GENSAM=${top_srcdir}/examples/gen_sample_job
-
-SUFFIXES = .T .l
-
-l_SRC = \
-       chkpt.l \
-       cleared.l \
-       done.l \
-       done_dag.l \
-       done_subjob.l \
-       ready.l \
-       ready_dag.l \
-       ready_subjob.l \
-       running.l \
-       running_dag.l \
-       running_subjob.l \
-       scheduled.l \
-       scheduled_dag.l \
-       scheduled_subjob.l \
-       submitted.l \
-       submitted_dag.l \
-       submitted_subjob.l \
-       waiting.l \
-       waiting_dag.l \
-       waiting_subjob.l \
-       failed_dag.l \
-       failed_subjob.l \
-       aborted.l \
-       cancelled.l 
-
-sh_PROGS = $(l_SRC:.l=.sh)
-
-
-DEBUG:=-g -O0 -Wall
-
-GLOBUSINC:= -I${globus_prefix}/include/${nothrflavour}
-GLOBUSTHRINC:= -I${globus_prefix}/include/${thrflavour}
-
-CFLAGS:=${DEBUG} \
-       -I${top_srcdir}/src -I${top_srcdir}/interface \
-       -I${stagedir}/include \
-       -I${glite_location}/include \
-       -I${expat_prefix}/include \
-       -I${ares_prefix}/include \
-       ${COVERAGE_FLAGS} \
-       -D_GNU_SOURCE
-
-
-CXXFLAGS:=${CFLAGS}
-
-GLOBUS_LIBS:=-L${globus_prefix}/lib \
-       -lglobus_common_${nothrflavour} \
-       -lglobus_gssapi_gsi_${nothrflavour} \
-
-GLOBUS_THRLIBS:=-L${globus_prefix}/lib \
-       -lglobus_common_${thrflavour} \
-       -lglobus_gssapi_gsi_${thrflavour}
-
-ifneq (${expat_prefix},/usr)
-       EXPAT_LIBS:=-L${expat_prefix}/lib
-endif
-EXPAT_LIBS := ${EXPAT_LIBS} -lexpat
-
-ARES_LIBS:=-L${ares_prefix}/lib \
-       -lares
-
-EXT_LIB:= ${EXPAT_LIBS} \
-    ${ARES_LIBS}
-
-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}
-CXXCOMPILE:=libtool --mode=compile ${CXX} ${CXXFLAGS}
-LINK:=libtool --mode=link ${CC} ${LDFLAGS} 
-LINKXX:=libtool --mode=link ${CXX} ${LDFLAGS}
-INSTALL:=libtool --mode=install install
-
-LIBOBJS:=connection.o consumer.o notification.o prod_proto.o \
-       producer.o uiwrap.o statistics.o
-FAKELIBOBJS:=consumer_fake.o producer_fake.o
-
-PLUSOBJS:=Event.o Job.o JobStatus.o Notification.o ServerConnection.o
-PUB_HDRS:=CountRef.h Event.h JobJobStatus.h Notification.h ServerConnection.h \
-       LoggingExceptions.h
-
-LIBTHROBJS:=${LIBOBJS:.o=.thr.o}
-LIBLOBJS:=${LIBOBJS:.o=.lo}
-LIBTHRLOBJS:=${LIBOBJS:.o=.thr.lo}
-
-PLUSTHROBJS:=${PLUSOBJS:.o=.thr.o}
-PLUSLOBJS:=${PLUSOBJS:.o=.lo}
-PLUSTHRLOBJS:=${PLUSOBJS:.o=.thr.lo}
-
-FAKELIBTHROBJS:=${FAKELIBOBJS:.o=.thr.o}
-FAKELIBLOBJS:=${FAKELIBOBJS:.o=.lo}
-FAKELIBTHRLOBJS:=${FAKELIBOBJS:.o=.thr.lo}
-
-LIB:=libglite_lb_client_${nothrflavour}.la
-THRLIB:=libglite_lb_client_${thrflavour}.la
-FAKELIB:=libglite_lb_client_fake_${nothrflavour}.la
-FAKETHRLIB:=libglite_lb_client_fake_${thrflavour}.la
-
-PLUSLIB:=libglite_lb_clientpp_${nothrflavour}.la
-THRPLUSLIB:=libglite_lb_clientpp_${thrflavour}.la
-
-TOOLS:=dump load purge
-EXAMPLES:=log_usertag_proxy job_log job_reg feed_shark notify query_ext query_seq_code stats
-FAKE_EXAMPLES:=job_log_fake
-
-version_info=-version-info `echo ${version} | cut -d. -f1,2 | tr . :`
-
-${LIB}: ${LIBOBJS}
-       ${LINK} ${version_info} -o $@ ${LIBLOBJS} -rpath ${glite_location}/lib -lglite_lb_common_${nothrflavour}
-
-${THRLIB}: ${LIBTHROBJS}
-       ${LINK} ${version_info} -o $@ ${LIBTHRLOBJS} -rpath ${glite_location}/lib -lglite_lb_common_${thrflavour}
-
-${FAKELIB}: ${FAKELIBOBJS}
-       ${LINK} ${version_info} -o $@ ${FAKELIBLOBJS} -rpath ${glite_location}/lib -lglite_lb_common_${nothrflavour}
-
-${FAKETHRLIB}: ${FAKELIBTHROBJS}
-       ${LINK} ${version_info} -o $@ ${FAKELIBTHRLOBJS} -rpath ${glite_location}/lib -lglite_lb_common_${thrflavour}
-
-${PLUSLIB}: ${PLUSOBJS}
-       ${LINK} ${version_info} -o $@ ${PLUSLOBJS} -rpath ${glite_location}/lib ${LIB}
-
-${THRPLUSLIB}: ${PLUSTHROBJS}
-       ${LINK} ${version_info} -o $@ ${PLUSTHRLOBJS} -rpath ${glite_location}/lib ${THRLIB}
-
-logevent: logevent.o args.o
-       ${LINK} -o $@ logevent.o args.o ${LIB} ${EXT_LIB} ${GLOBUS_LIBS}
-
-${TOOLS} ${EXAMPLES}: %: %.o
-       ${LINK} -o $@ $< ${LIB} ${EXT_LIB} ${GLOBUS_LIBS}
-
-${FAKE_EXAMPLES}: %: %.o ${FAKELIB}
-       ${LINK} -o $@ $< ${FAKELIB} ${TEST_LIBS} ${EXT_LIB} ${GLOBUS_LIBS}
-
-${TOOLS}: ${LIB}
-
-${FAKE_EXAMPLES:=.o}: %.o: %.cpp
-       ${COMPILE} ${GLOBUSINC} ${TEST_INC} -c $< -o $@
-
-${PLUSOBJS}: %.o: %.cpp
-       ${CXXCOMPILE} ${GLOBUSINC} -c $<
-
-${PLUSTHROBJS}: %.thr.o: %.cpp
-       ${CXXCOMPILE} ${GLOBUSTHRINC} -o $@ -c $<
-
-${LIBOBJS} ${FAKELIBOBJS}: %.o: %.c
-       ${COMPILE} ${GLOBUSINC} -c $<
-
-${LIBTHROBJS} ${FAKELIBTHROBJS}: %.thr.o: %.c
-       ${COMPILE} ${GLOBUSTHRINC} -o $@ -c $<
-
-logevent_fake.o: logevent.c
-       ${COMPILE} ${GLOBUSINC} -c $< -o $@
-
-# catches $TOOLS and logevent compilation
-%.o: %.c 
-       ${CC} ${CFLAGS} ${GLOBUSINC} -c $<
-
-%.c: %.c.T
-       rm -f $@
-       ${AT3} $< >$@ || rm -f $@
-       chmod -w $@ >/dev/null
-
-%.cpp: %.cpp.T
-       rm -f $@
-       ${AT3} $< >$@ || rm -f $@
-       chmod -w $@ >/dev/null
-
-%.sh: %.l gen_begin gen_sample_job
-       rm -f $@
-       $(GENSAM) $< >$@ || rm -f $@
-       chmod -w,+x $@ > /dev/null
-
-default: all
-
-
-compile all: check_version ${LIB} ${THRLIB} ${TOOLS} logevent ${PLUSLIB} ${THRPLUSLIB} examples
-
-examples: ${EXAMPLES} ${sh_PROGS}
-
-fake: ${FAKE_EXAMPLES}
-
-check: compile check.producer
-
-check.producer: producer_test
-       ./producer_test
-
-producer_test: producer_test.o prod_proto_test.o
-       ${LINKXX} -o $@ ${LIB} ${TEST_LIBS} $+ ${EXT_LIB} ${GLOBUS_LIBS}
-
-producer_test.o: %.o: %.cpp
-       ${CXX} -c ${CXXFLAGS} ${TEST_INC} ${GLOBUSINC} $<
-       
-stage: compile ${FAKELIB} ${FAKETHRLIB} 
-       $(MAKE) install PREFIX=${stagedir}
-       ${INSTALL} -m 644 ${FAKELIB} ${FAKETHRLIB} ${stagedir}/lib
-
-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:
-       mkdir -p ${PREFIX}/bin
-       mkdir -p ${PREFIX}/lib
-       mkdir -p ${PREFIX}/share/doc/${package}-${version}
-       ${INSTALL} -m 644 ${LIB} ${THRLIB} ${PLUSLIB} ${THRPLUSLIB} ${PREFIX}/lib
-       ${INSTALL} -m 644 ${top_srcdir}/LICENSE ${PREFIX}/share/doc/${package}-${version}
-       mkdir -p ${PREFIX}/examples
-       for p in ${TOOLS} logevent; do \
-               ${INSTALL} -m 755 "$$p" "${PREFIX}/bin/glite-lb-$$p"; \
-       done
-       for p in ${TOOLS} logevent ${EXAMPLES} ${sh_PROGS}; do \
-               ${INSTALL} -m 755 "$$p" "${PREFIX}/examples/glite-lb-$$p"; \
-       done
-
-clean:
-
-check_version:
-       @perl -ne '/#define GLITE_LB_CLIENT_INTERFACE "(\d+)\.\d+\.\d+"/; \
-               $$iface=$$1; \
-               $$_="${version}"; /(\d+)\.\d+\.\d+/; \
-               if ($$iface != $$1) { \
-                       print "error: Major version of the interface ($$iface) does not match implementation ($$1)\n" ;\
-                       exit 1;  \
-               } \
-               ' ${stagedir}/include/glite/lb/interface_version.h
-
-.PHONY: default all compile examples fake check stage dist distsrc distbin install clean check_version
diff --git a/org.glite.lb.client/build.xml b/org.glite.lb.client/build.xml
deleted file mode 100755 (executable)
index df3de71..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Build file for the GLite LB Client module
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.4  2004/07/28 12:18:12  dimeglio
-       Changed default target from compile to dist
-       
-       Revision 1.3  2004/07/06 17:45:30  flammer
-       Update of classpath definitions, targets & configure file.
-       
-       Revision 1.2  2004/06/23 00:29:33  dimeglio
-       Added standard comments and handling of support files
-       
--->
-
-<project name="client" default="dist">
-       
-       <!-- =========================================
-                Builds the GLite LB Client 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}"/>
-               
-       <!-- ==============================================
-                Local private targets
-            ============================================== -->
-       
-       <target name="localinit"
-               description="Module specific initialization tasks">
-        <!-- Copy support files from the subsystem project to the component project-->
-               <copy toDir="${module.project.dir}">
-                       <fileset dir="${subsystem.project.dir}">
-                               <include name="at3" />
-                               <include name="*.T" />
-                               <include name="*.pm" />
-                       </fileset>
-               </copy> 
-               <antcall target="lbmakefiles" />
-       </target>
-               
-       <target name="localcompile"
-               description="Module specific compile tasks">
-       </target>
-       
-       <target name="localclean"
-               description="Module specific cleaning tasks">
-               <delete>
-                       <fileset dir="${module.project.dir}">
-                               <include name="at3" />
-                               <include name="*.T" />
-                               <include name="*.pm" />
-                       </fileset>
-               </delete>       
-       </target>
-       
-       <!-- =========================================
-            RPM settings
-            ========================================= -->
-
-       <property name="build.package.summary" value="L&amp;B client API and tools" />
-       <property name="build.package.description" value="
-Logging &amp; Bookkeeping (L&amp;B) C and C++ client libraries,&#xA;command
-for logging of L&amp;B events from shell scripts,&#xA;and utilities
-for (remote) bookkeeping server maintenance." />
-
-</project>             
diff --git a/org.glite.lb.client/doc/README-fake b/org.glite.lb.client/doc/README-fake
deleted file mode 100644 (file)
index 5a751ba..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-Fake library
-------------
-
-Fake library is a substitute library designed for usage in unit tests of
-programs which use L&B. The library implements a subset of L&B client API.
-Implemented functions are dummy in the sense that they do not produce any
-sideefect and they do not require any running services.
-
-Main purpose of the library is WMS unit testing, so it should contain all L&B
-function calls used in WMS.
-
-List of implemented functions:
-
-  1) consumer API
-
-     edg_wll_QueryEvents
-     edg_wll_QueryListener
-     edg_wll_JobLog
-     edg_wll_QuerySequenceCode
-
-  2) producer API
-
-     edg_wll_Log*     (functions for logging all event types)
-     edg_wll_LogEvent
-     edg_wll_LogEventSync
-     edg_wll_LogEventProxy
-     edg_wll_LogFlush
-     edg_wll_LogFlushAll
-     edg_wll_SetLoggingJob
-     edg_wll_SetLoggingJobProxy
-     edg_wll_RegisterJobSync
-     edg_wll_RegisterJob
-     edg_wll_RegisterSubjob
-     edg_wll_RegisterSubjobs
-     edg_wll_ChangeACL
-
-
-Function calls always try to return some meaningful data. However, for testing
-purposes a fine control on the returned value is usually required (e.g. to 
-cover both success and failure of the called function). Therefore the library
-enables to set function error codes and/or adjust returned data. This is done
-via callbacks. Callbacks are activated right before function end when all
-pre-set data are available. 
-
-Callbacks must be registered before using the library call. It is possible to
-have only one registered callback for each registration type at once (see
-below). Callback registration is global, it IS NOT thread safe. Otherwise
-the library is thread safe in the same way as standard L&B library -- 
-functions may be called by multiple threads simultaneously provided that
-more threads do not operate on a single L&B context at the same time.
-
-The following code fragments represent an example of unit test of a function
-calling e.g. edg_wll_LogMatch()
-
-#include "glite/lb/producer_fake.h"
-
-int fail_EAGAIN_callback(edg_wll_Context ctx)
-{
-       return edg_wll_SetError(ctx,EAGAIN,"failure reason");
-}
-
-unit_test()
-{
-       /* sucessfull logging, edg_wll_LogMatch() called from
-        * tested_function() returns OK */
-
-       tested_function();
-       /* check results here */
-
-       /* failing with EAGAIN */
-       edg_wll_RegisterTestLogging(fail_EAGAIN_callback);
-       tested_function();
-       /* check results here */
-}
-
-The consumer API (QueryEvents, QueryListener) fake implementations
-prepare some result set which is returned to the caller. The callback
-function may also adjust this set for particular purposes of the unit test.
-
-List of the callbacks and registering functions:
-
-  1) cosumer API
-
-       typedef int (edg_wll_QueryEvents_cb_f)
-               (edg_wll_Context context, edg_wll_Event **events);
-       typedef int (edg_wll_QueryListener_cb_f)
-               (edg_wll_Context context, char **host, uint16_t *port);
-
-       int edg_wll_RegisterTestQueryEvents(edg_wll_QueryEvents_cb_f *cb);
-       int edg_wll_RegisterTestQueryListener(edg_wll_QueryListener_cb_f *cb);
-
-  2) producer API
-
-       typedef int (edg_wll_Logging_cb_f)(edg_wll_Context context);
-
-       int edg_wll_RegisterTestLogging(edg_wll_Logging_cb_f *cb);
-       int edg_wll_RegisterTestLoggingProxy(edg_wll_Logging_cb_f *cb);
-
-
-It possible to unregister registered callbacks using following functions:
-
-       void edg_wll_UnregisterTestQueryEvents();
-       void edg_wll_UnregisterTestQueryListener();
-       void edg_wll_UnregisterTestLogging();
-       void edg_wll_UnregisterTestLoggingProxy();
-
-
-Library name is libglite_lb_client_fake_gcc32dbg[pthr].so. It is built
-in the org.glite.lb.client module, staged (so that it is available
-for WMS unit tests run during the build process) but currenlty 
-neither installed nor included in RPM.
-
-Unit test programs should linked with this library instead of the original
-libglite_lb_client_gcc32dbg[pthr].so. You can find examples of fake library
-usage in org.glite.lb.client. The Makefile target 'fake' builds these examples.
-There is no ant equivalent, hence the following procedure is required:
-
-    cd org.glite.lb.client
-    ant init
-    cd build
-    make fake
-
-
-An example of unit test using the fake library is the file
-examples/job_log_fake.cpp. There is showed how to use callbacks and their
-registration.
diff --git a/org.glite.lb.client/examples/aborted.l b/org.glite.lb.client/examples/aborted.l
deleted file mode 100644 (file)
index 0f639c8..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-:ready:
--s JobController,-e Abort,--reason "just to test"
diff --git a/org.glite.lb.client/examples/cancelled.l b/org.glite.lb.client/examples/cancelled.l
deleted file mode 100644 (file)
index 1e0cc96..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-:running:
--s LogMonitor, -e Done, --status_code=CANCELLED, --reason="reason for the change", --exit_code=0
diff --git a/org.glite.lb.client/examples/chkpt.l b/org.glite.lb.client/examples/chkpt.l
deleted file mode 100644 (file)
index dbd7f23..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-# macro definition for DONE state
-
-:running:
--s LRMS, -e Chkpt, --tag=chkpt1, --classad=""
--s LRMS, -e Chkpt, --tag=chkpt2, --classad=""
--s LogMonitor, -e Done, --status_code=OK, --reason="reason for the change", --exit_code=0 
diff --git a/org.glite.lb.client/examples/cleared.l b/org.glite.lb.client/examples/cleared.l
deleted file mode 100644 (file)
index 8b9f86c..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# macro definition for DONE state
-
-:done:
--s LogMonitor, -e Clear, --reason=USER
diff --git a/org.glite.lb.client/examples/consumer_fake.c b/org.glite.lb.client/examples/consumer_fake.c
deleted file mode 100644 (file)
index 060d55d..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/* 
- * fake implementation of the consumer API 
- */
-
-#include <stddef.h>
-#include <string.h>
-
-#include "glite/lb/consumer.h"
-#include "glite/lb/context-int.h"
-#include "glite/lb/consumer_fake.h"
-
-
-#define NUM_EVENTS 3
-
-
-static edg_wll_QueryEvents_cb_f *QueryEvents_cb = NULL;
-static edg_wll_QueryListener_cb_f *QueryListener_cb = NULL;
-
-
-/* register the query callback */
-int edg_wll_RegisterTestQueryEvents(edg_wll_QueryEvents_cb_f *cb) {
-  if (QueryEvents_cb) return 0;
-
-  QueryEvents_cb = cb;
-  return 1;
-}
-
-
-/* register the listener callback */
-int edg_wll_RegisterTestQueryListener(edg_wll_QueryListener_cb_f *cb) {
-  if (QueryListener_cb) return 0;
-  
-  QueryListener_cb = cb;
-  return 1;
-}
-
-
-/* unregister the query callback */
-void edg_wll_UnregisterTestQueryEvents() {
-  QueryEvents_cb = NULL;
-}
-
-
-/* unregister the listener callback */
-void edg_wll_UnregisterTestQueryListener() {
-  QueryEvents_cb = NULL;
-}
-
-
-/* (belongs to common/src/events.c.T) */
-static void edg_wll_PrepareEvent(edg_wll_EventCode eventcode, edg_wll_Event *event) {
-  edg_wll_Event *tmpevent;
-
-  // hide not clean code here :-)
-  tmpevent = edg_wll_InitEvent(eventcode);
-  memcpy(event, tmpevent, sizeof(edg_wll_Event));
-  free(tmpevent);
-}
-
-
-/* fake implementation of QueryEvents() */
-int edg_wll_QueryEvents(
-  edg_wll_Context         context,
-  const edg_wll_QueryRec  *job_conditions,
-  const edg_wll_QueryRec  *event_conditions,
-  edg_wll_Event          **events
-) {
-  edg_wll_EventCode event_code;
-  int i, j, err;
-  edg_wlc_JobId jobid;
-  
-  edg_wll_ResetError(context);
-
-  // determine type of the returned events, ignore _QUERY_OP_*:
-  //   - asked event type for _QUERY_ATTR_EVENT_TYPE
-  //   - _EVENT_CHKPT for other
-  i = 0;
-  while (event_conditions[i].attr != EDG_WLL_QUERY_ATTR_UNDEF && (event_conditions[i].attr != EDG_WLL_QUERY_ATTR_EVENT_TYPE)) i++;
-  if (event_conditions[i].attr == EDG_WLL_QUERY_ATTR_UNDEF)
-    event_code = EDG_WLL_EVENT_CHKPT;
-  else
-    event_code = event_conditions[i].value.i;
-
-  // create events
-  *events = calloc(NUM_EVENTS + 1, sizeof(edg_wll_Event));
-  for (i = 0; i < NUM_EVENTS; i++) {
-    edg_wll_PrepareEvent(event_code, &(*events)[i]);
-  }
-  (*events)[NUM_EVENTS].type = EDG_WLL_EVENT_UNDEF;
-
-  // adjust events according to the query parameters
-  i = 0;
-  while (job_conditions[i].attr != EDG_WLL_QUERY_ATTR_UNDEF) {
-    if (job_conditions[i].attr == EDG_WLL_QUERY_ATTR_JOBID && job_conditions[i].op == EDG_WLL_QUERY_OP_EQUAL) {
-      jobid = job_conditions[i].value.j;
-      for (j = 0; j < NUM_EVENTS; j++) {
-         if ((err = edg_wlc_JobIdDup(jobid, &(*events)[i].any.jobId)) != 0) goto error;
-      }
-      break;
-    }
-    i++;
-  }
-
-  // adjusting callback
-  if (QueryEvents_cb)
-    QueryEvents_cb(context, events);
-
-  if ((err = edg_wll_Error(context, NULL, NULL)) == 0) return 0;
-
-error:
-  i = 0;
-  while ((*events)[i].type != EDG_WLL_EVENT_UNDEF) {
-    edg_wll_FreeEvent(&(*events)[i]);
-    i++;
-  }
-  free(*events);
-
-  return edg_wll_SetError(context, err, NULL);
-}
-
-
-/* fake implementation of QueryListener() */
-int edg_wll_QueryListener(
-  edg_wll_Context context,
-  edg_wlc_JobId    jobId,
-  const char      *name,
-  char           **host,
-  uint16_t        *port
-) {
-  edg_wll_ResetError(context);
-  
-  if (QueryListener_cb) return QueryListener_cb(context, host, port);
-  else {
-    *host = strdup("localhost");
-    *port = 12345;
-  
-    return edg_wll_Error(context, NULL, NULL);
-  }
-}
-
-
-/* cut'nd pasted from consumer.c */
-int edg_wll_JobLog(
-       edg_wll_Context ctx,
-       edg_wlc_JobId   job,
-       edg_wll_Event **eventsOut)
-{
-       edg_wll_QueryRec        j[2], e[2];
-
-       memset(j,0,sizeof j);
-       memset(e,0,sizeof e);
-
-       j[0].attr = EDG_WLL_QUERY_ATTR_JOBID;
-       j[0].op = EDG_WLL_QUERY_OP_EQUAL;
-       j[0].value.j = job;
-
-       e[0].attr = EDG_WLL_QUERY_ATTR_LEVEL;
-       e[0].op = EDG_WLL_QUERY_OP_LESS;
-       e[0].value.i = ctx->p_level + 1;
-
-       return edg_wll_QueryEvents(ctx,j,e,eventsOut);
-}
diff --git a/org.glite.lb.client/examples/done.l b/org.glite.lb.client/examples/done.l
deleted file mode 100644 (file)
index def8f34..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# macro definition for DONE state
-
-:running:
--s LogMonitor, -e Done, --status_code=OK, --reason="reason for the change", --exit_code=0 
diff --git a/org.glite.lb.client/examples/done_dag.l b/org.glite.lb.client/examples/done_dag.l
deleted file mode 100644 (file)
index 5ac9033..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# macro definition for DONE state
-
-:running_dag:
--s LogMonitor, -e Done, --status_code=OK, --reason="reason for the change", --exit_code=0 
diff --git a/org.glite.lb.client/examples/done_subjob.l b/org.glite.lb.client/examples/done_subjob.l
deleted file mode 100644 (file)
index 883a367..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# macro definition for DONE state
-
-:running_subjob:
--s LogMonitor, -e Done, --status_code=OK, --reason="reason for the change", --exit_code=0 
diff --git a/org.glite.lb.client/examples/failed_dag.l b/org.glite.lb.client/examples/failed_dag.l
deleted file mode 100644 (file)
index 023d5af..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-:running_dag:
-
--s LogMonitor, -e Done, --status_code=Failed, --exit_code=1, --reason=shit
diff --git a/org.glite.lb.client/examples/failed_subjob.l b/org.glite.lb.client/examples/failed_subjob.l
deleted file mode 100644 (file)
index 9e1b6dc..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-:running_subjob:
-
--s LogMonitor, -e Done, --status_code=Failed, --exit_code=1, --reason=shit
diff --git a/org.glite.lb.client/examples/feed_shark.c b/org.glite.lb.client/examples/feed_shark.c
deleted file mode 100644 (file)
index 824e781..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-#include <errno.h>
-#include <sysexits.h>
-
-#include "glite/lb/notification.h"
-
-static void usage(const char *);
-static void printstat(edg_wll_JobStat, int);
-
-int main(int argc,char *argv[])
-{
-       int     o;
-       edg_wll_Context ctx;
-       edg_wll_NotifId notif;
-       time_t  valid = 0;
-       struct timeval  timeout;
-
-       edg_wll_InitContext(&ctx);
-
-/* parse options, reflect them in the LB context */
-       while ((o = getopt(argc,argv,"s:")) >= 0) switch (o) {
-               case 's': {
-                       char    *server = strdup(optarg),
-                               *port_s = strchr(server,':');
-
-                       int     port;
-
-                       if (port_s) {
-                               *port_s = 0;
-                               port = atoi(port_s+1);
-                       }
-                       
-                       edg_wll_SetParam(ctx,EDG_WLL_PARAM_NOTIF_SERVER,server);
-                       if (port_s) edg_wll_SetParam(ctx,EDG_WLL_PARAM_NOTIF_SERVER_PORT,port);
-                       free(server);
-               } break;
-                         
-               case '?': usage(argv[0]); exit(EX_USAGE);
-       }
-
-/* no notification Id supplied -- create a new one */
-       if (argc == optind) {
-               edg_wll_QueryRec        const *empty[] = { NULL };
-               char    *notif_s;
-
-               if (edg_wll_NotifNew(ctx,empty,-1,NULL,&notif,&valid)) {
-                       char    *et,*ed;
-
-                       edg_wll_Error(ctx,&et,&ed);
-                       fprintf(stderr,"edg_wll_NotifNew(): %s (%s)\n",et,ed);
-                       exit(EX_UNAVAILABLE);
-               }
-
-               notif_s = edg_wll_NotifIdUnparse(notif);
-               printf("notification registered:\n\tId: %s\n\tExpires: %s",
-                               notif_s,ctime(&valid));
-               free(notif_s);
-       }
-/* notification Id supplied -- bind to it */
-       else if (argc == optind + 1) {
-               if (edg_wll_NotifIdParse(argv[optind],&notif)) {
-                       fprintf(stderr,"%s: invalid notification Id\n",
-                                       argv[optind]);
-                       exit(EX_DATAERR);
-               }
-
-               if (edg_wll_NotifBind(ctx,notif,-1,NULL,&valid)) {
-                       char    *et,*ed;
-
-                       edg_wll_Error(ctx,&et,&ed);
-                       fprintf(stderr,"edg_wll_NotifBind(): %s (%s)\n",et,ed);
-                       exit(EX_UNAVAILABLE);
-               }
-               printf("bound to %s\n\t Expires: %s",argv[optind],ctime(&valid));
-       }
-       else { usage(argv[0]); exit(EX_USAGE); }
-
-/* main loop */
-       while (1) {
-               edg_wll_JobStat stat;
-               char    *et,*ed;
-
-/* calculate time left for this notification */
-               gettimeofday(&timeout,NULL);
-               timeout.tv_sec = valid - timeout.tv_sec;
-               assert(timeout.tv_sec >= 0);    /* XXX: hope we are no late */
-
-/* half time before notification renewal */
-               timeout.tv_sec /= 2;
-
-               switch (edg_wll_NotifReceive(ctx,-1,&timeout,&stat,NULL)) {
-                       case 0: /* OK, got it */
-                               printstat(stat,0);
-                               edg_wll_FreeStatus(&stat);
-                               break;
-                       case EAGAIN:    /* timeout */
-                               if (edg_wll_NotifRefresh(ctx,notif,&valid)) {
-                                       edg_wll_Error(ctx,&et,&ed);
-                                       fprintf(stderr,"edg_wll_NotifRefresh(): %s (%s)\n",et,ed);
-                                       exit(EX_UNAVAILABLE);
-                               }
-                               printf("Notification refreshed, expires %s",ctime(&valid));
-                               break;
-                       default:
-                               edg_wll_Error(ctx,&et,&ed);
-                               fprintf(stderr,"edg_wll_NotifReceive(): %s (%s)\n",et,ed);
-                               exit(EX_UNAVAILABLE);
-               }
-       }
-}
-
-
-static void usage(const char *me) 
-{
-       fprintf(stderr,"usage: %s [ -s server[:port] ] [notif_id]\n",me);
-}
-
-
-
-static void printstat(edg_wll_JobStat stat, int level)
-{
-    char        *s, *j, ind[10];
-    int         i;
-
-
-    for (i=0; i < level; i++)
-        ind[i]='\t';
-    ind[i]='\0';
-
-    s = edg_wll_StatToString(stat.state);
-/* print whole flat structure */
-    printf("%sstate : %s\n", ind, s);
-    printf("%sjobId : %s\n", ind, j = edg_wlc_JobIdUnparse(stat.jobId));
-    printf("%sowner : %s\n", ind, stat.owner);
-    printf("%sjobtype : %s\n", ind, (stat.jobtype ? "DAG" : "SIMPLE") );
-    printf("%sparent_job : %s\n", ind,
-            j = edg_wlc_JobIdUnparse(stat.parent_job));
-    if (stat.jobtype) {;
-        printf("%sseed : %s\n", ind, stat.seed);
-        printf("%schildren_num : %d\n", ind, stat.children_num);
-        printf("%schildren :\n", ind);
-        if (stat.children)
-                       for  (i=0; stat.children[i]; i++)
-                printf("%s\tchildren : %s\n", ind, stat.children[i]);
-        printf("%schildren_states :\n", ind);
-        if (stat.children_states)
-            for  (i=0; stat.children_states[i].state; i++)
-                printstat(stat.children_states[i], level+1);
-        printf("%schildren_hist :\n",ind);
-        if (stat.children_hist)
-            for (i=1; i<=stat.children_hist[0]; i++)
-                printf("%s%14s  %d\n", ind, edg_wll_StatToString(i-1),stat.children_hist[i]);
-    }
-    printf("%scondorId : %s\n", ind, stat.condorId);
-    printf("%sglobusId : %s\n", ind, stat.globusId);
-    printf("%slocalId : %s\n", ind, stat.localId);
-    printf("%sjdl : %s\n", ind, stat.jdl);
-    printf("%smatched_jdl : %s\n", ind, stat.matched_jdl);
-    printf("%sdestination : %s\n", ind, stat.destination);
-    printf("%snetwork server : %s\n", ind, stat.network_server);
-    printf("%scondor_jdl : %s\n", ind, stat.condor_jdl);
-    printf("%srsl : %s\n", ind, stat.rsl);
-    printf("%sreason : %s\n", ind, stat.reason);
-    printf("%slocation : %s\n", ind, stat.location);
-       printf("%ssubjob_failed : %d\n", ind, stat.subjob_failed);
-    printf("%sdone_code : %d\n", ind, stat.done_code);
-    printf("%sexit_code : %d\n", ind, stat.exit_code);
-    printf("%sresubmitted : %d\n", ind, stat.resubmitted);
-    printf("%scancelling : %d\n", ind, stat.cancelling);
-    printf("%scancelReason : %s\n", ind, stat.cancelReason);
-    printf("%scpuTime : %d\n", ind, stat.cpuTime);
-    printf("%suser_tags :\n",ind);
-    if (stat.user_tags)
-        for (i=0; stat.user_tags[i].tag; i++) printf("%s%14s = \"%s\"\n", ind,
-                              stat.user_tags[i].tag,stat.user_tags[i].value);
-    printf("%sstateEnterTime : %ld.%06ld\n", ind, stat.stateEnterTime.tv_sec,stat.stateEnterTime.tv_usec);
-    printf("%sstateEnterTimes : \n",ind);
-    if (stat.stateEnterTimes)
-                for (i=1; i<=stat.stateEnterTimes[0]; i++)
-            printf("%s%14s  %s", ind, edg_wll_StatToString(i-1), (stat.stateEnterTimes[i] == 0) ?
-            "    - not available -\n" : ctime((time_t *) &stat.stateEnterTimes[i]));
-    printf("%slastUpdateTime : %ld.%06ld\n", ind, stat.lastUpdateTime.tv_sec,stat.lastUpdateTime.tv_usec);
-       printf("%sexpectUpdate : %d\n", ind, stat.expectUpdate);
-    printf("%sexpectFrom : %s\n", ind, stat.expectFrom);
-    printf("%sacl : %s\n", ind, stat.acl);
-    printf("\n");
-
-    free(j);
-    free(s);
-}
diff --git a/org.glite.lb.client/examples/gen_begin b/org.glite.lb.client/examples/gen_begin
deleted file mode 100755 (executable)
index a7565a4..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/sh
-# script for generating sample jobs
-
-if test ! -z "$FAKE"; then
-       SUFFIX="_fake"
-fi
-LOGFD=${LOGFD:-2}
-LOGEV=glite-lb-logevent${SUFFIX}
-JOB_REG=${JOB_REG:-`dirname $0`/glite-lb-job_reg}${SUFFIX}
-EDG_JOBID=
-
-usage()
-{
-       echo "Usage : $0 [-m bkserver_machine_name][-j job_id]" 
-       exit 4
-}
-
-# read parameters
-while test -n "$1"
-do
-       case "$1" in 
-       "-m") shift; BKSERVER_HOST="$1" ;;
-       "-j") shift; EDG_JOBID="$1" ;;
-       "*") usage ;;
-       esac
-       shift
-done
-
-test \( -z "$BKSERVER_HOST" \) -a \( -z "$EDG_JOBID" \) && usage
-
-if [ -z "$EDG_JOBID" ] 
-then
-       # initial sequence code & jobid (normaly returned by job_reg)
-       EDG_JOBID=
-       SCRIPT=`$JOB_REG -m $BKSERVER_HOST -s UserInterface | tail -n 2`
-       eval $SCRIPT
-       test -z "$EDG_JOBID" && exit 4
-       echo EDG_JOBID=$EDG_JOBID
-else
-       test -z "$EDG_WL_SEQUENCE" && EDG_WL_SEQUENCE="UI=000003:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000"
-fi
-
-send_log_ev()
-{
-       echo $LOGEV -j "$EDG_JOBID" -c "$EDG_WL_SEQUENCE" "$@" 1>&$LOGFD
-       EDG_WL_SEQUENCE=`$LOGEV -j $EDG_JOBID -c $EDG_WL_SEQUENCE "$@" 2>/dev/null`
-       test $? -ne 0 -o -z "$EDG_WL_SEQUENCE" && exit 4
-       true
-}
-
diff --git a/org.glite.lb.client/examples/gen_sample_job b/org.glite.lb.client/examples/gen_sample_job
deleted file mode 100755 (executable)
index cc9dfac..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/bin/sh
-
-me=$0
-mydir=`dirname $0`;
-export me mydir
-
-
-set -- `getopt n $*`
-# test whether it is recursive call
-
-NESTED="-v nested=0"
-while [ $1 != '--' ]; do case $1 in
-       -n) NESTED="-v nested=1"; shift ;;
-esac; done
-shift
-
-awk -F, $NESTED \
-'BEGIN {
-       if (nested==0) system("cat $mydir/gen_begin");
-       OFS = ",";
-       nlines = 0;
-}
-/^#/ || /^[    ]*$/ { next; }
-{
-       source = $2;
-
-       event = $1;
-
-       nline++;
-}
-# events processing
-
-/-e Transfer/  { logit();
-                 next;}
-
-/-e Accepted/  { if (checkNOP(7) == 0) logit();
-                 next;}
-
-/-e Refused/   { if (checkNOP(6) == 0) logit(); 
-                 next;}
-
-/-e EnQueued/  { if (checkNOP(6) == 0) logit(); 
-                 next;}
-
-/-e DeQueued/  { if (checkNOP(4) == 0) logit(); 
-                 next;}
-
-/-e HelperCall/        { if (checkNOP(5) == 0) logit(); 
-                 next;}
-
-/-e HelperReturn/      { if (checkNOP(5) == 0) logit(); 
-                 next;}
-
-/-e Running/   { if (checkNOP(3) == 0) logit(); 
-                 next;}
-
-/-e Resubmission/      { if (checkNOP(5) == 0) logit(); 
-                 next;}
-
-/-e Done/              { if (checkNOP(5) == 0) logit(); 
-                 next;}
-
-/-e Cancel/    { if (checkNOP(4) == 0) logit(); 
-                 next;}
-
-/-e Abort/     { if (checkNOP(3) == 0) logit(); 
-                 next;}
-
-/-e Clear/     { if (checkNOP(3) == 0) logit(); 
-                 next;}
-
-/-e Purge/     { if (checkNOP(2) == 0) logit(); 
-                 next;}
-
-/-e Match/     { if (checkNOP(3) == 0) logit(); 
-                 next;}
-
-/-e Pending/   { if (checkNOP(3) == 0) logit(); 
-                 next;}
-
-/-e RegJob/    { if (checkNOP(7) == 0) logit(); 
-                 next;}
-
-/-e Chkpt/     { if (checkNOP(4) == 0) logit(); 
-                 next;}
-
-/-e Listener/  { if (checkNOP(5) == 0) logit(); 
-                 next;}
-
-/-e CurDescr/  { if (checkNOP(3) == 0) logit(); 
-                 next;}
-
-/-e UserTag/   { if (checkNOP(4) == 0) logit(); 
-                 next;}
-
-
-# macro processing - macro name starts and ends with ':'
-# in a file gen_MACRONAME.txt is the macro describtion
-
-/^:.*:$/       {system("$me -n $mydir/"substr($1,2,(length($1) - 2))".l" )}
-
-
-function checkNOP(NOP)
-{
-       if (NF != NOP) { print nline" : "$2": "NOP" args required ("NF" supplied)"  > "/dev/stderr"; return 1 }
-       else return 0;
-}
-
-function logit()
-{
-       split($0,f);
-
-       ff = "";
-       for (i=1; i<=NF; i++) ff = ff " " f[i];
-
-       print "send_log_ev" ff;
-}
-' $1
-
diff --git a/org.glite.lb.client/examples/job_log.c b/org.glite.lb.client/examples/job_log.c
deleted file mode 100644 (file)
index ca1c09e..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-#ident "$Header$"
-
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-
-#include "glite/lb/events_parse.h"
-#include "glite/lb/consumer.h"
-#include "glite/wmsutils/jobid/cjobid.h"
-#ifdef USE_CALLBACKS
-  #include "glite/lb/consumer_fake.h"
-#endif
-
-static void free_events(edg_wll_Event *);
-
-static void help(const char* n)
-{
-    fprintf(stderr,"usage: %s [-r repeat] [-d delay] <jobid>\n", n);
-    exit(1);
-}
-
-#ifdef USE_CALLBACKS
-static int query_events_cb(edg_wll_Context context, edg_wll_Event **events) {
-  int i;
-  edg_wll_Event *event;
-
-  i = 0;
-  while ((event = (*events) + i)->type != EDG_WLL_EVENT_UNDEF) {
-    event->any.timestamp.tv_sec = (double)rand() / RAND_MAX * 1000000000;
-    event->any.timestamp.tv_usec = (double)rand() / RAND_MAX * 1000000;
-    i++;
-  }
-
-  return 0;
-}
-#endif
-
-int main(int argc,char **argv)
-{
-       edg_wll_Context ctx;
-       char            *errt,*errd;
-       edg_wll_Event   *events;
-       edg_wlc_JobId   job;
-       int             i,opt,delay = 1,count = 0;
-
-       if (argc < 2)
-           help(argv[0]);
-
-       while ((opt=getopt(argc,argv,"r:d:")) != -1)
-           switch (opt) {
-           case 'd': delay = atoi(optarg); break;
-           case 'r': count = atoi(optarg); break;
-           default:
-                help(argv[0]);
-           }
-
-       edg_wll_InitContext(&ctx);
-       if (edg_wlc_JobIdParse(argv[optind],&job)) {
-               fprintf(stderr,"%s: can't parse job ID\n",argv[1]);
-               return 1;
-       }
-
-#ifdef USE_CALLBACKS
-       edg_wll_RegisterTestQueryEvents(query_events_cb);
-#endif
-       
-       if ( edg_wll_JobLog(ctx,job,&events) )
-       {
-               if ( edg_wll_Error(ctx, &errt, &errd) != E2BIG )
-                       goto err;
-
-               fprintf(stderr,"%s: %s (%s)\n",argv[0],errt,errd);
-       }
-
-       for ( i = 0; events[i].type != EDG_WLL_EVENT_UNDEF; i++ )
-       {
-               char    *e = edg_wll_UnparseEvent(ctx,events+i);
-               fputs(e,stdout);
-               fputs("\n",stdout);
-               free(e);
-       }
-
-       free_events(events);
-       printf("\nFound %d events\n",i);
-
-       while (count--) {
-               puts("Sleeping ...");
-               sleep(delay);
-               if (edg_wll_JobLog(ctx,job,&events)) {
-                       edg_wll_Error(ctx,&errt,&errd);
-                       fprintf(stderr,"%s: %s (%s)\n",argv[0],errt,errd);
-                       free(errt); free(errd); errt = errd = NULL;
-                       free_events(events);
-               }
-               else puts("OK");
-       }
-
-       edg_wlc_JobIdFree(job);
-       edg_wll_FreeContext(ctx); 
-
-#ifdef USE_CALLBACKS
-       edg_wll_UnregisterTestQueryEvents();
-#endif
-       
-       return 0;
-
-err:
-#ifdef USE_CALLBACKS
-       edg_wll_UnregisterTestQueryEvents();
-#endif
-       switch (edg_wll_Error(ctx,&errt,&errd)) {
-               case 0: break;
-               case ENOENT:
-                       puts("No events found");
-                       break;
-               default:
-                       fprintf(stderr,"%s: %s (%s)\n",argv[0],errt,errd);
-                       return 1;
-       }
-
-       edg_wlc_JobIdFree(job);
-       edg_wll_FreeContext(ctx); 
-
-       return 0;
-}
-
-static void free_events(edg_wll_Event *events)
-{
-       int     i;
-
-       if (events) {
-               for (i=0; events[i].type != EDG_WLL_EVENT_UNDEF; i++) edg_wll_FreeEvent(&(events[i]));
-               edg_wll_FreeEvent(&(events[i])); /* free last line */
-               free(events);   
-               events = NULL;
-       }
-}
diff --git a/org.glite.lb.client/examples/job_reg.c b/org.glite.lb.client/examples/job_reg.c
deleted file mode 100644 (file)
index 2106786..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-
-#include "glite/wmsutils/jobid/cjobid.h"
-#include "glite/lb/producer.h"
-#include "glite/lb/events.h"
-
-extern char *optarg;
-extern int opterr,optind;
-
-static void usage(char *me)
-{
-       fprintf(stderr,"usage: %s [-m bkserver] [-j dg_jobid] [-s source_id] [-n num_subjobs [-S]]\n", me);
-}
-
-int main(int argc, char *argv[])
-{
-       char               *src = NULL,*job = NULL,*server = NULL,*seq;
-       int                             done = 0,num_subjobs = 0,i;
-       int                             reg_subjobs = 0;
-       edg_wll_Context ctx;
-       edg_wlc_JobId   jobid,*subjobs;
-
-
-       edg_wll_InitContext(&ctx);
-       opterr = 0;
-
-       do {
-               switch (getopt(argc,argv,"Sj:s:n:m:")) {
-                       case 's': src = (char *) strdup(optarg); break;
-                       case 'j': job = (char *) strdup(optarg); break;
-                       case 'm': server = strdup(optarg); break;
-                       case 'n': num_subjobs = atoi(optarg); break;
-                       case 'S': if (num_subjobs>0) { reg_subjobs = 1; break; }
-                       case '?': usage(argv[0]); exit(EINVAL);
-                       case -1: done = 1; break;
-               }
-       } while (!done);
-
-       if (!job && !server) {
-               fprintf(stderr,"%s: either -m server or -j jobid has to be specified\n",argv[0]);
-               exit(1);
-       }
-
-       if (!src) {
-               fprintf(stderr,"%s: -s required\n",argv[0]);
-               exit(1);
-       }
-
-       if (!job) {
-               char *p = strchr(server,':');
-               if (p) *p=0;
-               edg_wlc_JobIdCreate(server,p?atoi(p+1):0,&jobid);
-               job = edg_wlc_JobIdUnparse(jobid);
-               printf("new jobid: %s\n",job);
-       }
-       else if ((errno = edg_wlc_JobIdParse(job,&jobid))) {
-               perror(job);
-               exit(1);
-       }
-
-       edg_wll_SetParam(ctx,EDG_WLL_PARAM_SOURCE,edg_wll_StringToSource(src));
-       if (edg_wll_RegisterJobSync(ctx,jobid,
-               num_subjobs?EDG_WLL_REGJOB_DAG:EDG_WLL_REGJOB_SIMPLE,
-               "blabla", "NNNSSSS",
-               num_subjobs,NULL,&subjobs))
-       {
-               char    *et,*ed;
-               edg_wll_Error(ctx,&et,&ed);
-               fprintf(stderr,"edg_wll_RegisterJobSync(%s): %s (%s)\n",job,et,ed);
-               exit(1);
-       }
-
-       seq = edg_wll_GetSequenceCode(ctx);
-       printf("\n%s=\"%s\"\n",num_subjobs?"EDG_WL_DAG_JOBID":"EDG_JOBID",job);
-       printf("EDG_WL_SEQUENCE=\"%s\"\n",seq);
-       free(seq);
-       free(job);
-
-       if (num_subjobs) for (i=0; subjobs[i]; i++) {
-               char    *job_s = edg_wlc_JobIdUnparse(subjobs[i]);
-               printf("EDG_WL_SUB_JOBID[%d]=\"%s\"\n",i,job_s);
-               free(job_s);
-       }
-
-       if (reg_subjobs) {
-               char ** jdls = (char**) malloc(num_subjobs*sizeof(char*));
-
-               for (i=0; subjobs[i]; i++) {
-                       asprintf(jdls+i, "JDL of subjob #%d\n", i+1);
-               }
-
-               if (edg_wll_RegisterSubjobs(ctx, jobid, (const char **) jdls, NULL, subjobs)) {
-                       char    *et,*ed;
-                       edg_wll_Error(ctx,&et,&ed);
-                       fprintf(stderr,"edg_wll_RegisterSubjobs: %s (%s)\n", et, ed);
-                       exit(1);
-               }
-
-               for (i=0; subjobs[i]; i++) free(jdls[i]);
-       }
-
-       edg_wll_FreeContext(ctx);
-
-       return 0;
-}
diff --git a/org.glite.lb.client/examples/log_usertag_proxy.c b/org.glite.lb.client/examples/log_usertag_proxy.c
deleted file mode 100644 (file)
index 7891893..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-#include <getopt.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-
-#include <globus_common.h>
-
-#include "glite/wmsutils/jobid/cjobid.h"
-#include "glite/lb/notifid.h"
-#include "glite/lb/producer.h"
-#include "glite/lb/events.h"
-
-
-static struct option opts[] = {
-       {"help",                0,      NULL,   'h'},
-       {"sock",                1,      NULL,   's'},
-       {"jobid",               1,      NULL,   'j'},
-       {"seq",                 1,      NULL,   'c'},
-       {"name",                1,      NULL,   'n'},
-       {"value",               1,      NULL,   'v'}
-};
-
-static void usage(char *me)
-{
-       fprintf(stderr, "usage: %s [option]\n"
-                       "\t-h, --help      Shows this screen.\n"
-                       "\t-s, --server    LB Proxy socket.\n"
-                       "\t-j, --jobid     ID of requested job.\n"
-                       "\t-c, --seq       Sequence code.\n"
-                       "\t-n, --name      Name of the tag.\n"
-                       "\t-v, --value     Value of the tag.\n"
-                       , me);
-}
-
-
-int main(int argc, char *argv[])
-{
-       edg_wll_Context         ctx;
-       edg_wlc_JobId           jobid = NULL;
-       char                       *server, *code, *jobid_s, *name, *value;
-       int                                     opt, err = 0;
-
-
-       server = code = jobid_s = name = value = NULL;
-       while ( (opt = getopt_long(argc, argv, "hs:j:c:n:v:", opts, NULL)) != EOF)
-               switch (opt) {
-               case 'h': usage(name); return 0;
-               case 's': server = strdup(optarg); break;
-               case 'j': jobid_s = strdup(optarg); break;
-               case 'c': code = strdup(optarg); break;
-               case 'n': name = strdup(optarg); break;
-               case 'v': value = strdup(optarg); break;
-               case '?': usage(name); return 1;
-               }
-
-       if ( !jobid_s ) { fprintf(stderr, "JobId not given\n"); return 1; }
-       if ( !code ) { fprintf(stderr, "Sequence code not given\n"); return 1; }
-       if ( !server ) { fprintf(stderr, "LB proxy socket not given\n"); return 1; }
-       if ( !name ) { fprintf(stderr, "Tag name not given\n"); return 1; }
-       if ( !value ) { fprintf(stderr, "Tag value not given\n"); return 1; }
-
-       if ( (errno = edg_wlc_JobIdParse(jobid_s, &jobid)) ) { perror(jobid_s); return 1; }
-
-       if (globus_module_activate(GLOBUS_COMMON_MODULE) != GLOBUS_SUCCESS) {
-               fprintf(stderr, "Cannot initialize Globus common module\n");
-               exit(1);
-       }
-
-       edg_wll_InitContext(&ctx);
-
-       edg_wll_SetParam(ctx, EDG_WLL_PARAM_SOURCE, EDG_WLL_SOURCE_USER_INTERFACE);
-       edg_wll_SetParam(ctx, EDG_WLL_PARAM_LBPROXY_STORE_SOCK, server);
-
-       if (edg_wll_SetLoggingJob(ctx, jobid, code, EDG_WLL_SEQ_NORMAL)) {
-               char    *et,*ed;
-               edg_wll_Error(ctx,&et,&ed);
-               fprintf(stderr,"SetLoggingJob(%s,%s): %s (%s)\n",jobid_s,code,et,ed);
-               exit(1);
-       }
-
-       err = edg_wll_LogEventProxy(ctx,
-                               EDG_WLL_EVENT_USERTAG, EDG_WLL_FORMAT_USERTAG,
-                               name, value);
-
-       if (err) {
-           char        *et,*ed;
-
-           edg_wll_Error(ctx,&et,&ed);
-           fprintf(stderr,"%s: edg_wll_LogEvent*(): %s (%s)\n",
-                   argv[0],et,ed);
-           free(et); free(ed);
-       }
-
-       code = edg_wll_GetSequenceCode(ctx);
-       puts(code);
-       free(code);
-
-       edg_wll_FreeContext(ctx);
-
-       return err;
-}
diff --git a/org.glite.lb.client/examples/notify.c b/org.glite.lb.client/examples/notify.c
deleted file mode 100644 (file)
index 54670f9..0000000
+++ /dev/null
@@ -1,363 +0,0 @@
-#include <time.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "glite/lb/context.h"
-#include "glite/lb/lb_gss.h"
-#include "glite/lb/notification.h"
-
-
-static char *me;
-
-static char     tbuf[256];
-
-char *TimeToStr(time_t t)
-{
-       struct tm   *tm = gmtime(&t);
-
-       sprintf(tbuf,"'%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);
-
-       return tbuf;
-}
-
-static void usage(char *cmd)
-{
-       if ( !cmd )
-       {
-               printf("usage: %s command [options]\n"
-                       "  where commands are:\n"
-                       "    new         Create new notification reg.\n"
-                       "    bind        Binds an notification reg. to a client.\n"
-                       "    change      Changes notification reg. params.\n"
-                       "    refresh     Enlarge notification reg. validity.\n"
-                       "    receive     Binds to an existing notif. registration and listen to server.\n"
-                       "    test        Creates new notif., waits for events and drops notif. after timeout.\n"
-                       "    drop        Drop the notification reg.\n"
-                       "    help        Prints this message\n",
-                       me);
-       }
-       if ( !cmd || !strcmp(cmd, "new") )
-               printf("\n'new' command usage: %s new jobid\n"
-                       "    jobid       job ID to connect notif. reg. with\n", me);
-       if ( !cmd || !strcmp(cmd, "bind") )
-               printf("\n'bind' command usage: %s bind notifid [fake_addr]\n"
-                       "    notifid     Notification ID\n"
-                       "    fake_addr   Fake the client address\n", me);
-       if ( !cmd || !strcmp(cmd, "change") )
-               printf("\n'change' command usage: %s change notifid jobid\n"
-                       "    notifid     Notification ID.\n"
-                       "    jobid       Job ID to connect notif. reg. with.\n", me);
-       if ( !cmd || !strcmp(cmd, "refresh") )
-               printf("\n'refresh' command usage: %s refresh notifid\n"
-                       "    notifid     Notification ID.\n", me);
-       if ( !cmd || !strcmp(cmd, "receive") )
-               printf("\n'receive' command usage: %s receive notifid [-a fake_addr] [-t timeout]\n"
-                       "    notifid     Notification ID.\n"
-                       "    fake_addr   Fake the client address.\n"
-                       "    timeout     Timeout to receive operation in seconds.\n", me);
-       if ( !cmd || !strcmp(cmd, "test") )
-               printf("\n'new' command usage: %s test jobid\n"
-                       "    jobid       job ID to connect notif. reg. with\n", me);
-       if ( !cmd || !strcmp(cmd, "drop") )
-               printf("\n'drop' command usage: %s drop notifid\n"
-                       "    notifid     Notification to remove.\n", me);
-}
-
-int main(int argc,char **argv)
-{
-       edg_wll_Context         ctx;
-       edg_wll_QueryRec  **conditions = NULL;
-       time_t                          valid;
-       char                       *errt, *errd;
-       struct timeval          tout = {220, 0};
-               
-
-
-       me = argv[0];
-       edg_wll_InitContext(&ctx);
-
-       if ( argc < 2 ) {
-               usage(NULL); goto cleanup;
-       }
-       if ( (argc < 2) || !strcmp(argv[1], "help") ) {
-               usage(NULL); goto cleanup;
-       }
-       else if ( !strcmp(argv[1], "test") ) {
-               edg_wll_NotifId         nid = NULL;
-               edg_wlc_JobId           jid = NULL;
-               edg_wll_JobStat         stat;
-
-               if ( (argc < 3) || edg_wlc_JobIdParse(argv[2], &jid) ) {
-                       printf("Job ID parameter not set propperly!\n");
-                       usage("new");
-                       goto cleanup;
-               }
-
-               memset(&stat, 0, sizeof(stat));
-
-               conditions = (edg_wll_QueryRec **)calloc(2,sizeof(edg_wll_QueryRec *));
-               conditions[0] = (edg_wll_QueryRec *)calloc(2,sizeof(edg_wll_QueryRec));
-       
-               conditions[0][0].attr = EDG_WLL_QUERY_ATTR_JOBID;
-               conditions[0][0].op = EDG_WLL_QUERY_OP_EQUAL;
-               conditions[0][0].value.j = jid;
-
-               
-               if ( edg_wll_NotifNew(ctx,
-                                       (edg_wll_QueryRec const* const*)conditions,
-                                       -1, NULL,
-                                       &nid, &valid)) goto err;
-                       
-               printf("notification ID: %s\nvalid: %s (%ld)\n",
-                               edg_wll_NotifIdUnparse(nid),
-                               TimeToStr(valid),
-                               valid);
-
-               do {
-                       edg_wll_NotifId         recv_nid = NULL;
-
-                       printf("waiting...\n");
-                       if ( edg_wll_NotifReceive(ctx, -1, &tout, &stat, &recv_nid) ) {
-                               edg_wll_NotifIdFree(recv_nid);
-                               printf("timeout\n");
-                               break;
-                       }
-                       
-                       printf("Notification received:\n");
-                       printf("  - notification ID: %s\n", edg_wll_NotifIdUnparse(recv_nid));
-                       printf("  - job ID: %s\n", edg_wlc_JobIdUnparse(stat.jobId));
-                       
-                       if (stat.state != EDG_WLL_JOB_UNDEF) {
-                               printf("  - job status is: %s\n\n", edg_wll_StatToString(stat.state));
-                               edg_wll_FreeStatus(&stat);
-                               stat.state = EDG_WLL_JOB_UNDEF;
-                       }
-                       if (recv_nid) { edg_wll_NotifIdFree(recv_nid); recv_nid = NULL; }
-               } while (1); // till timeout....
-err:           
-               if (nid) {
-                       edg_wll_NotifDrop(ctx, nid);
-                       edg_wll_NotifIdFree(nid);
-                       edg_wll_NotifCloseFd(ctx);
-               }
-               if (stat.state != EDG_WLL_JOB_UNDEF) edg_wll_FreeStatus(&stat);
-               if (jid) edg_wlc_JobIdFree(jid);
-       }
-       else if ( !strcmp(argv[1], "new") )
-       {
-               edg_wlc_JobId           jid;
-               edg_wll_NotifId         id_out;
-
-               if ( (argc < 3) || edg_wlc_JobIdParse(argv[2], &jid) ) {
-                       printf("Job ID parameter not set propperly!\n");
-                       usage("new");
-                       goto cleanup;
-               }
-
-               conditions = (edg_wll_QueryRec **)calloc(2,sizeof(edg_wll_QueryRec *));
-               conditions[0] = (edg_wll_QueryRec *)calloc(2,sizeof(edg_wll_QueryRec));
-       
-               conditions[0][0].attr = EDG_WLL_QUERY_ATTR_JOBID;
-               conditions[0][0].op = EDG_WLL_QUERY_OP_EQUAL;
-               conditions[0][0].value.j = jid;
-
-               if ( !edg_wll_NotifNew(ctx,
-                                       (edg_wll_QueryRec const* const*)conditions,
-                                       -1, NULL, &id_out, &valid))
-                       printf("notification ID: %s\nvalid: %s (%ld)\n",
-                                       edg_wll_NotifIdUnparse(id_out),
-                                       TimeToStr(valid),
-                                       valid);
-               edg_wll_NotifIdFree(id_out);
-               edg_wlc_JobIdFree(jid);
-       }
-       else if ( !strcmp(argv[1], "bind") )
-       {
-               edg_wll_NotifId         nid;
-
-               if ( (argc < 3) || edg_wll_NotifIdParse(argv[2], &nid) )
-               {
-                       printf("Notification ID parameter not set propperly!\n");
-                       usage("bind");
-                       return 1;
-               }
-               if ( !edg_wll_NotifBind(ctx, nid, -1, (argc<4)? NULL: argv[3], &valid) )
-                       printf("valid until: %s (%ld)\n", TimeToStr(valid), valid);
-               edg_wll_NotifIdFree(nid);
-       }
-       else if ( !strcmp(argv[1], "receive") )
-       {
-               edg_wll_JobStat         stat;
-               edg_wll_NotifId         nid = NULL;
-               char                       *addr = NULL;
-               int                                     i;
-
-               if ( (argc < 3) || edg_wll_NotifIdParse(argv[2], &nid) )
-               {
-                       printf("Notification ID parameter not set propperly!\n");
-                       usage("receive");
-                       return 1;
-               }
-
-               for ( i = 3; i < argc; i++ )
-               {
-                       if ( !strcmp(argv[i], "-t") )
-                       {
-                               if ( argc < i+1 )
-                               {
-                                       printf("Timeout value not set\n");
-                                       usage("receive");
-                                       return 1;
-                               }
-                               tout.tv_sec = atoi(argv[++i]);
-                       }
-                       else if ( !strcmp(argv[i], "-a") )
-                       {
-                               if ( argc < i+1 )
-                               {
-                                       printf("Address value not set\n");
-                                       usage("receive");
-                                       return 1;
-                               }
-                               addr = strdup(argv[++i]);
-                       }
-                       else
-                       {
-                               printf("unrecognized option: %s\n", argv[i]);
-                               usage("receive");
-                               return 1;
-                       }
-               }
-
-               memset(&stat,0,sizeof stat);
-
-               if ( edg_wll_NotifBind(ctx, nid, -1, addr, &valid) )
-                       goto receive_err;
-
-               printf("notification is valid until: %s (%ld)\n", TimeToStr(valid), valid);
-
-               do {
-                       edg_wll_NotifId         recv_nid = NULL;
-                       
-                       if ( edg_wll_NotifReceive(ctx, -1, &tout, &stat, &recv_nid) ) {
-                               edg_wll_NotifIdFree(recv_nid);
-                               break;
-                       }
-                       
-                       printf("\nnotification ID: %s\n", edg_wll_NotifIdUnparse(recv_nid));
-                       
-                       if (stat.state != EDG_WLL_JOB_UNDEF) {
-                               printf("Job status is : %s\n", 
-                                               edg_wll_StatToString(stat.state));
-                               edg_wll_FreeStatus(&stat);
-                               stat.state = EDG_WLL_JOB_UNDEF;
-                       }
-                       
-                       if (recv_nid) {
-                               edg_wll_NotifIdFree(recv_nid);
-                               recv_nid = NULL;
-                       }
-               } while (1); // till timeout....
-
-receive_err:           
-               if (addr) free(addr);
-               if (stat.state != EDG_WLL_JOB_UNDEF) edg_wll_FreeStatus(&stat);
-               if (nid) edg_wll_NotifIdFree(nid);
-               edg_wll_NotifCloseFd(ctx);
-       }
-       else if ( !strcmp(argv[1], "change") )
-       {
-               edg_wlc_JobId           jid;
-               edg_wll_NotifId         nid;
-
-               if ( (argc < 3) || edg_wll_NotifIdParse(argv[2], &nid) )
-               {
-                       printf("Notification ID parameter not set propperly!\n");
-                       usage("bind");
-                       return 1;
-               }
-               if ( (argc < 4) || edg_wlc_JobIdParse(argv[3], &jid) )
-               {
-                       printf("Job ID parameter not set propperly!\n");
-                       usage("change");
-                       goto cleanup;
-               }
-
-               conditions = (edg_wll_QueryRec **)calloc(3,sizeof(edg_wll_QueryRec *));
-               conditions[0] = (edg_wll_QueryRec *)calloc(2,sizeof(edg_wll_QueryRec));
-               conditions[1] = (edg_wll_QueryRec *)calloc(3, sizeof(edg_wll_QueryRec));
-       
-               conditions[0][0].attr = EDG_WLL_QUERY_ATTR_JOBID;
-               conditions[0][0].op = EDG_WLL_QUERY_OP_EQUAL;
-               conditions[0][0].value.j = jid;
-
-               conditions[1][0].attr = EDG_WLL_QUERY_ATTR_STATUS;
-               conditions[1][0].op = EDG_WLL_QUERY_OP_EQUAL;
-               conditions[1][0].value.i = EDG_WLL_JOB_DONE;
-
-               conditions[1][1].attr = EDG_WLL_QUERY_ATTR_STATUS;
-               conditions[1][1].op = EDG_WLL_QUERY_OP_EQUAL;
-               conditions[1][1].value.i = EDG_WLL_JOB_RUNNING;
-
-               edg_wll_NotifChange(ctx, nid,
-                                               (edg_wll_QueryRec const * const *) conditions,
-                                               EDG_WLL_NOTIF_REPLACE);
-               edg_wlc_JobIdFree(jid);
-               edg_wll_NotifIdFree(nid);
-       }
-       else if ( !strcmp(argv[1], "refresh") )
-       {
-               edg_wll_NotifId         nid;
-
-               if ( (argc < 3) || edg_wll_NotifIdParse(argv[2], &nid) )
-               {
-                       printf("Notification ID parameter not set propperly!\n");
-                       usage("bind");
-                       return 1;
-               }
-               if ( !edg_wll_NotifRefresh(ctx, nid, &valid) )
-                       printf("valid until: %s (%ld)\n", TimeToStr(valid), valid);
-               edg_wll_NotifIdFree(nid);
-       }
-       else if ( !strcmp(argv[1], "drop") )
-       {
-               edg_wll_NotifId         nid;
-
-               if ( (argc < 3) || edg_wll_NotifIdParse(argv[2], &nid) )
-               {
-                       printf("Notification ID parameter not set propperly!\n");
-                       usage("bind");
-                       return 1;
-               }
-               edg_wll_NotifDrop(ctx, nid);
-               edg_wll_NotifIdFree(nid);
-       }
-       else
-               printf("bad acction\n");
-       
-       
-cleanup:
-       
-       if ( conditions )
-       {
-               /*
-               for ( i = 0; conditions[i][0].attr; i++ )
-                       free(conditions[1]);
-               */
-               free(conditions);
-       }
-       
-       edg_wll_NotifCloseFd(ctx);
-       
-       if (edg_wll_Error(ctx,&errt,&errd))
-               fprintf(stderr, "%s: %s (%s)\n", me, errt, errd);
-
-       edg_wll_FreeContext(ctx);
-
-       
-       return 0;
-}
diff --git a/org.glite.lb.client/examples/producer_fake.c b/org.glite.lb.client/examples/producer_fake.c
deleted file mode 100644 (file)
index 4d2ea58..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/* 
- * fake implementation of the producer API
- */
-
-#include "glite/lb/producer.h"
-#include "glite/lb/context-int.h"
-#include "glite/lb/producer_fake.h"
-
-#define FAKE_VERSION 1
-
-#include "../src/producer.c"
-
-
-static edg_wll_Logging_cb_f *Logging_cb = NULL;
-static edg_wll_Logging_cb_f *LoggingProxy_cb = NULL;
-
-
-/* register the logging callback */
-int edg_wll_RegisterTestLogging(edg_wll_Logging_cb_f *cb) {
-  if (Logging_cb) return 0;
-
-  Logging_cb = cb;
-  return 1;
-}
-
-
-/* register the proxy logging callback */
-int edg_wll_RegisterTestLoggingProxy(edg_wll_Logging_cb_f *cb) {
-  if (LoggingProxy_cb) return 0;
-
-  LoggingProxy_cb = cb;
-  return 1;
-}
-
-
-/* unregister the logging callback */
-void edg_wll_UnregisterTestLogging() {
-  Logging_cb = NULL;
-}
-
-
-/* unregister the proxy logging callback */
-void edg_wll_UnregisterTestLoggingProxy() {
-  LoggingProxy_cb = NULL;
-}
-
-
-/* "fake" implementation of function sending formated UML string */
-int edg_wll_DoLogEvent(edg_wll_Context context, edg_wll_LogLine logLine) {
-  if (Logging_cb)
-    return Logging_cb(context);
-  else
-    return edg_wll_Error(context, NULL, NULL);
-}
-
-
-/* "fake" implementation of function sending formated ULM string */
-int edg_wll_DoLogEventProxy(edg_wll_Context context, edg_wll_LogLine logline) {
-  if (Logging_cb)
-    return Logging_cb(context);
-  else
-    return edg_wll_Error(context, NULL, NULL);
-}
diff --git a/org.glite.lb.client/examples/query_ext.c b/org.glite.lb.client/examples/query_ext.c
deleted file mode 100644 (file)
index 2e9dacf..0000000
+++ /dev/null
@@ -1,877 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <ctype.h>
-#include <time.h>
-
-#include "glite/wmsutils/jobid/cjobid.h"
-#include "glite/lb/consumer.h"
-
-#define BUFF_LEN               1024
-#define MAX_AND_CONDS  20
-
-enum
-{
-       PQRV_ERR,
-       PQRV_EOF,
-       PQRV_EMPTY_LINE,
-};
-
-
-static void            printstat(edg_wll_JobStat);
-static int             cond_parse(edg_wll_QueryRec ***, int);
-static void            dgerr(edg_wll_Context, char *);
-static void            free_QueryRec(edg_wll_QueryRec *qr);
-static void            printconds(edg_wll_QueryRec **);
-static time_t  StrToTime(char *t);
-static char       *TimeToStr(time_t t);
-
-static char       *myname;
-static FILE       *fin;
-static char            buffer[BUFF_LEN+1],
-                               tmps[500];
-static int             query_jobs = 1;
-#define                query_events    (!query_jobs)
-static int             query_lbproxy = 0;
-#define                query_bkserver  (!query_lbproxy)
-static int             verbose = 0;
-
-
-static void usage(void)
-{
-       fprintf(stderr, "Usage: %s [-hvs] [-i file]\n", myname);
-       fprintf(stderr, "    -h                 show this help\n");
-       fprintf(stderr, "    -v                 increase verbosity level\n");
-       fprintf(stderr, "    -s                 results described verbosely (query jobs only)\n");
-       fprintf(stderr, "    -m                 server name\n");
-       fprintf(stderr, "    -i file            input file (default is stdin)\n\n");
-       fprintf(stderr, "    -e                 query events (default is 'query jobs')\n");
-       fprintf(stderr, "    -P                 query the L&B Proxy server\n");
-       fprintf(stderr, "    -p                 L&B Proxy socket path\n");
-       fprintf(stderr, "    -r type            returned results: limited | all | none\n\n");
-       fprintf(stderr, "    -J num             jobs soft limit\n\n");
-       fprintf(stderr, "    -E num             events soft limit (query events only)\n\n");
-}
-
-int main(int argc,char *argv[])
-{
-       edg_wll_Context                 ctx;
-       edg_wll_QueryResults    rslts           = EDG_WLL_QUERYRES_UNDEF;
-       edg_wll_QueryRec          **jc                  = NULL,
-                                                 **ec                  = NULL;
-       edg_wll_JobStat            *statesOut   = NULL;
-       edg_wlc_JobId              *jobsOut             = NULL;
-       edg_wll_Event              *eventsOut   = NULL;
-       char                               *fname               = NULL,
-                                                  *server              = NULL,
-                                                  *proxy_sock  = NULL,
-                                                  *s;
-       int                                             result          = 0,
-                                                       jobsLimit       = 0,
-                                                       stdisp          = 0,
-                                                       eventsLimit     = 0,
-                                                       i, j, ret,
-                                                       errCode;
-
-       myname  = argv[0];
-       ret             = 0;
-       do {
-               switch ( getopt(argc,argv,"hvsePp:i:m:r:J:E:") ) {
-               case 'h': usage();  exit(0);
-               case '?': usage(); exit(EINVAL);
-               case 'v': verbose = 1; break;
-               case 'i': fname = strdup(optarg); break;
-               case 'm': server = strdup(optarg); break;
-               case 's': stdisp = 1; break;
-               case 'e': query_jobs = 0; break;
-               case 'P': query_lbproxy = 1; break;
-               case 'p': proxy_sock = strdup(optarg); break;
-               case 'r':
-                       if ( !strcasecmp(optarg, "limited") ) rslts = EDG_WLL_QUERYRES_LIMITED;
-                       else if ( !strcasecmp(optarg, "none") ) rslts = EDG_WLL_QUERYRES_NONE;
-                       else if ( !strcasecmp(optarg, "all") ) rslts = EDG_WLL_QUERYRES_ALL;
-                       else { usage(); exit(EINVAL); }
-                       break;
-               case 'J': jobsLimit = atoi(optarg); break;
-               case 'E': eventsLimit = atoi(optarg); break;
-               case -1: ret = 1; break;
-               }
-       } while ( !ret );
-
-       if ( edg_wll_InitContext(&ctx) ) {
-               if ( verbose ) fprintf(stderr,"%s: cannot initialize edg_wll_Context\n",myname);
-               exit(1);
-       }
-
-       if ( jobsLimit > 0 ) {
-               edg_wll_SetParam(ctx, EDG_WLL_PARAM_QUERY_JOBS_LIMIT, jobsLimit);
-               if ( verbose ) printf("Soft query limit for jobs: %d\n", jobsLimit);
-       }
-       else if ( verbose ) printf("Soft query limit for jobs not set\n");
-
-       if ( query_events ) {
-               if ( eventsLimit > 0 ) {
-                       edg_wll_SetParam(ctx, EDG_WLL_PARAM_QUERY_EVENTS_LIMIT, eventsLimit);
-                       if ( verbose ) printf("Soft query limit for events: %d\n", eventsLimit);
-               }
-               else if ( verbose ) printf("Soft query limit for events not set\n");
-       }
-
-       if ( rslts != EDG_WLL_QUERYRES_UNDEF )
-               edg_wll_SetParam(ctx, EDG_WLL_PARAM_QUERY_RESULTS, rslts);
-       else
-               edg_wll_GetParam(ctx, EDG_WLL_PARAM_QUERY_RESULTS, &rslts);
-
-       if ( verbose ) printf("When any limit overflows, the returned result set is: %s\n",
-                                                       rslts==EDG_WLL_QUERYRES_LIMITED? "limited":
-                                                       (rslts==EDG_WLL_QUERYRES_ALL? "unlimited": "empty"));
-       
-       if ( server ) {
-               char *p = strchr(server, ':');
-               if ( p ) {
-                       edg_wll_SetParam(ctx, EDG_WLL_PARAM_QUERY_SERVER_PORT, atoi(p+1));
-                       *p = 0;
-               }
-               edg_wll_SetParam(ctx, EDG_WLL_PARAM_QUERY_SERVER, server);
-               free(server);
-       }
-
-       if ( proxy_sock ) {
-               edg_wll_SetParam(ctx, EDG_WLL_PARAM_LBPROXY_SERVE_SOCK, proxy_sock);
-               free(proxy_sock);
-       }
-
-       if ( fname ) {
-               fin = fopen(fname, "r");
-               if ( !fin ) {
-                       if ( verbose ) fprintf(stderr, "Can't open given input file %s. Using stdin.\n", fname);
-                       fin = stdin;
-               }
-               free(fname);
-       } else {
-               if ( verbose ) fprintf(stderr, "No input file given. Using stdin.\n");
-               fin = stdin;
-       }
-
-       jobsOut         = NULL;
-       statesOut       = NULL;
-       eventsOut       = NULL;
-
-
-       do
-       {
-               if ( verbose && (fin == stdin) ) printf("Enter job conditions:\n");
-               
-               ret = cond_parse(&jc, 1);
-               if ( ret == PQRV_ERR ) { result = 1; goto cleanup; }
-               if ( query_events && (ret != PQRV_EOF) ) {
-                       if ( verbose && (fin == stdin) ) printf("Enter event conditions:\n");
-                       ret = cond_parse(&ec, 0);
-                       if ( ret == PQRV_ERR ) { result = 1; goto cleanup; }
-               }
-
-               if ( (ret == PQRV_EOF) && !jc && (query_jobs || (query_events && !ec)) ) break;
-
-               if ( verbose ) {
-                       printf("job conditions list: ");
-                       printconds(jc);
-                       if ( query_events ) { printf("event condition list: "); printconds(ec); }
-               }
-
-               if ( query_jobs ) {
-                       if ( query_bkserver )
-                               errCode = edg_wll_QueryJobsExt(ctx,
-                                                               (const edg_wll_QueryRec **) jc,
-                                                               0, &jobsOut, stdisp? &statesOut: NULL);
-                       else
-                               errCode = edg_wll_QueryJobsExtProxy(ctx,
-                                                               (const edg_wll_QueryRec **) jc,
-                                                               0, &jobsOut, stdisp? &statesOut: NULL);
-               } else {
-                       if ( query_bkserver )
-                               errCode = edg_wll_QueryEventsExt(ctx,
-                                                               (const edg_wll_QueryRec **) jc,
-                                                               (const edg_wll_QueryRec **) ec,
-                                                               &eventsOut);
-                       else
-                               errCode = edg_wll_QueryEventsExtProxy(ctx,
-                                                               (const edg_wll_QueryRec **) jc,
-                                                               (const edg_wll_QueryRec **) ec,
-                                                               &eventsOut);
-               }
-
-               if ( errCode ) {
-                       dgerr(ctx, NULL);
-                       if ( (errCode != EPERM) && (errCode != E2BIG) ) goto cycle_cleanup;
-        } else if ( verbose ) {
-                       if ( query_jobs ) printf("Matched jobs: ");
-                       else printf("Matched events: ");
-               }
-
-               if ( verbose ) {
-                       if ( (query_jobs && jobsOut && jobsOut[0]) ||
-                                (query_events && eventsOut && eventsOut[0].type) )
-                               putchar('\n');
-                       else printf("No one matches\n");
-               }
-
-               if ( query_jobs && jobsOut && !stdisp ) {
-                       for ( i = 0; jobsOut[i]; i++ ) {
-                               s = edg_wlc_JobIdUnparse(jobsOut[i]);
-                               printf("jobId: %s\n", edg_wlc_JobIdUnparse(jobsOut[i]));
-                               free(s);
-                               edg_wlc_JobIdFree(jobsOut[i]);
-                       }
-                       free(jobsOut);
-                       jobsOut = NULL;
-               }
-               if ( query_jobs && statesOut ) {
-                       if ( stdisp ) for ( i = 0; statesOut[i].state; i++ ) printstat(statesOut[i]);
-                       for ( i = 0; statesOut[i].state; i++ ) edg_wll_FreeStatus(&statesOut[i]);
-                       free(statesOut);
-                       statesOut = NULL;
-               }
-               if ( query_events && eventsOut ) {
-                       for ( i = 0; eventsOut[i].type; i++ ) {
-                               s = edg_wlc_JobIdUnparse(eventsOut[i].any.jobId);
-                               printf("event: %-11s (jobid %s)\n", edg_wll_EventToString(eventsOut[i].type), s);
-                               free(s);
-                       }
-                       free(eventsOut);
-                       eventsOut = NULL;
-               }
-
-cycle_cleanup:
-               if ( jc ) {
-                       for ( i = 0; jc[i]; i++ ) {
-                               for ( j = 0; jc[i][j].attr; j++ ) free_QueryRec(&jc[i][j]);
-                               free(jc[i]);
-                       }
-                       free(jc);
-               }
-
-               if ( ec ) {
-                       for ( i = 0; ec[i]; i++ ) {
-                               for ( j = 0; ec[i][j].attr; j++ ) free_QueryRec(&ec[i][j]);
-                               free(ec[i]);
-                       }
-                       free(ec);
-               }
-       } while ( ret != PQRV_EOF );
-
-cleanup:
-       if ( fin != stdin ) fclose(fin);
-       edg_wll_FreeContext(ctx);
-
-       return result;
-}
-
-static void free_QueryRec(edg_wll_QueryRec *qr)
-{
-       switch ( qr->attr )
-       {
-       case EDG_WLL_QUERY_ATTR_JOBID:
-       case EDG_WLL_QUERY_ATTR_PARENT:
-               edg_wlc_JobIdFree(qr->value.j);
-               break;
-
-       case EDG_WLL_QUERY_ATTR_STATUS:
-       case EDG_WLL_QUERY_ATTR_DONECODE:
-       case EDG_WLL_QUERY_ATTR_EXITCODE:
-       case EDG_WLL_QUERY_ATTR_RESUBMITTED:
-               break;
-
-       case EDG_WLL_QUERY_ATTR_OWNER:
-       case EDG_WLL_QUERY_ATTR_LOCATION: 
-       case EDG_WLL_QUERY_ATTR_DESTINATION:
-               free(qr->value.c);
-               break;
-
-       case EDG_WLL_QUERY_ATTR_USERTAG:
-               free(qr->attr_id.tag);
-               free(qr->value.c);
-               break;
-
-       default:
-               break;
-       }
-}
-
-#define isop(c)                ((c == '=') || (c == '<') || (c == '>') || (c == '@'))
-
-static char *get_attr_name(char *src, char *dest, int sz)
-{
-       int             i       = 0,
-                       ct      = 0;
-
-
-       while ( (src[i] != '\0') && isblank(src[i]) ) i++;                      /* skip whitespaces */
-       while ( (src[i] != '\n') && (src[i] != '\0') && !isop(src[i]) && !isblank(src[i]) )
-       {
-               if ( ct < sz ) 
-                       dest[ct++] = src[i];
-               i++;
-       }
-       dest[ct] = '\0';
-
-       return src+i;
-}
-
-static char *get_op(char *src, edg_wll_QueryOp *op)
-{
-       int             i = 0;
-
-
-       while ( (src[i] != '\0') && isblank(src[i]) ) i++;                      /* skip whitespaces */
-
-       if ( src[i] == '=' ) *op = EDG_WLL_QUERY_OP_EQUAL;
-       else if ( src[i] == '@' ) *op = EDG_WLL_QUERY_OP_WITHIN;
-       else if ( src[i] == '>' ) *op = EDG_WLL_QUERY_OP_GREATER;
-       else if ( src[i] == '<' )
-       {
-               if ( (src[i+1] != '\0') && (src[++i] == '>') )
-                       *op = EDG_WLL_QUERY_OP_UNEQUAL;
-               else
-                       *op = EDG_WLL_QUERY_OP_LESS;
-       } 
-       else return NULL;
-
-       return src+i+1;
-}
-
-static char *get_attr_value(char *src, char *dest, int sz)
-{
-       int             i       = 0,
-                       ct      = 0;
-
-
-       while ( (src[i] != '\0') && isblank(src[i]) ) i++;                      /* skip whitespaces */
-       if ( src[i] == '"' )
-       {
-               i++;
-               while ( (src[i] != '\n') && (src[i] != '\0') && (src[i] != '"') )
-               {
-                       if ( ct < sz ) 
-                               dest[ct++] = src[i];
-                       i++;
-               }
-               dest[ct] = '\0';
-               if ( src[i] != '"' )
-                       return NULL;
-
-               return src+i+1;
-       }
-
-       while ( (src[i] != '\n') && (src[i] != '\0') && (src[i] != ';') && !isblank(src[i]) )
-       {
-               if ( ct < sz ) 
-                       dest[ct++] = src[i];
-               i++;
-       }
-       dest[ct] = '\0';
-
-       return src+i;
-}
-
-static char *get_job_condition(char *src, edg_wll_QueryRec *cond)
-{
-       char       *s;
-
-
-       s = get_attr_name(src, tmps, 500);
-
-       if ( tmps[0] == '\0' ) return NULL;
-
-       if ( !strcmp(tmps, "jobid") ) cond->attr = EDG_WLL_QUERY_ATTR_JOBID;
-       else if ( !strcmp(tmps, "owner") ) cond->attr = EDG_WLL_QUERY_ATTR_OWNER;
-       else if ( !strcmp(tmps, "status") ) cond->attr = EDG_WLL_QUERY_ATTR_STATUS;
-       else if ( !strcmp(tmps, "location") ) cond->attr = EDG_WLL_QUERY_ATTR_LOCATION;
-       else if ( !strcmp(tmps, "destination") ) cond->attr = EDG_WLL_QUERY_ATTR_DESTINATION;
-       else if ( !strcmp(tmps, "done_code") ) cond->attr = EDG_WLL_QUERY_ATTR_DONECODE;
-       else if ( !strcmp(tmps, "exit_code") ) cond->attr = EDG_WLL_QUERY_ATTR_EXITCODE;
-       else if ( !strcmp(tmps, "parent_job") ) cond->attr = EDG_WLL_QUERY_ATTR_PARENT;
-       else if ( !strcmp(tmps, "time") ) cond->attr = EDG_WLL_QUERY_ATTR_TIME;
-       else
-       {
-               cond->attr = EDG_WLL_QUERY_ATTR_USERTAG;
-               cond->attr_id.tag = strdup(tmps);
-       }
-
-       if ( !(s = get_op(s, &(cond->op))) ) return NULL;
-
-       if ( !(s = get_attr_value(s, tmps, 500)) ) return NULL;
-
-       switch ( cond->attr )
-       {
-       case EDG_WLL_QUERY_ATTR_JOBID:
-       case EDG_WLL_QUERY_ATTR_PARENT:
-               if ( edg_wlc_JobIdParse(tmps, &cond->value.j) )
-               {
-                       fprintf(stderr,"%s: %s: cannot parse jobId\n", myname, tmps);
-                       return NULL;
-               }
-               break;
-
-       case EDG_WLL_QUERY_ATTR_OWNER:
-               if ( !strcmp("NULL", tmps) )
-                       cond->value.c = NULL;
-               else if ( !(cond->value.c = strdup(tmps)) )
-                       return 0;
-               break;
-
-       case EDG_WLL_QUERY_ATTR_LOCATION:
-       case EDG_WLL_QUERY_ATTR_DESTINATION:
-       case EDG_WLL_QUERY_ATTR_USERTAG:
-               if ( !(cond->value.c = strdup(tmps)) )
-                       return 0;
-               break;
-
-       case EDG_WLL_QUERY_ATTR_STATUS:
-               if ( !strcasecmp(tmps, "Submitted") ) cond->value.i = EDG_WLL_JOB_SUBMITTED;
-               else if ( !strcasecmp(tmps, "Waiting") ) cond->value.i = EDG_WLL_JOB_WAITING;
-               else if ( !strcasecmp(tmps, "Ready") ) cond->value.i = EDG_WLL_JOB_READY;
-               else if ( !strcasecmp(tmps, "Scheduled") ) cond->value.i = EDG_WLL_JOB_SCHEDULED;
-               else if ( !strcasecmp(tmps, "Running") ) cond->value.i = EDG_WLL_JOB_RUNNING;
-               else if ( !strcasecmp(tmps, "Done") ) cond->value.i = EDG_WLL_JOB_DONE;
-               else if ( !strcasecmp(tmps, "Aborted") ) cond->value.i = EDG_WLL_JOB_ABORTED;
-               else if ( !strcasecmp(tmps, "Cancelled") ) cond->value.i = EDG_WLL_JOB_CANCELLED;
-               else if ( !strcasecmp(tmps, "Cleared") ) cond->value.i = EDG_WLL_JOB_CLEARED;
-               else
-               {
-                       fprintf(stderr,"%s: invalid status value (%s)\n", myname, tmps);
-                       return 0;
-               }
-               break;
-
-       case EDG_WLL_QUERY_ATTR_DONECODE:
-       case EDG_WLL_QUERY_ATTR_EXITCODE:
-       case EDG_WLL_QUERY_ATTR_RESUBMITTED:
-               cond->value.i = atoi(tmps);
-               if ( cond->op == EDG_WLL_QUERY_OP_WITHIN )
-               {
-                       if ( !(s = get_attr_value(s, tmps, 500)) ) return NULL;
-                       if ( tmps[0] == '\0' )
-                       {
-                               fprintf(stderr,"%s: second interval boundary not set\n", myname);
-                               return NULL;
-                       }
-                       cond->value2.i = atoi(tmps);
-               }
-               break;
-
-       case EDG_WLL_QUERY_ATTR_TIME:
-               cond->value.t.tv_sec = StrToTime(tmps);
-               if ( cond->op == EDG_WLL_QUERY_OP_WITHIN )
-               {
-                       if ( !(s = get_attr_value(s, tmps, 500)) ) return NULL;
-                       if ( tmps[0] == '\0' )
-                       {
-                               fprintf(stderr,"%s: second interval boundary not set\n", myname);
-                               return NULL;
-                       }
-                       cond->value2.t.tv_sec = StrToTime(tmps);
-               }
-               if ( !(s = get_attr_value(s, tmps, 500)) ) return NULL;
-               if ( tmps[0] == '\0' )
-               {
-                       fprintf(stderr,"%s: time condition must be associated with state condition\n", myname);
-                       return NULL;
-               }
-               if ( !strcasecmp(tmps, "Submitted") ) cond->attr_id.state = EDG_WLL_JOB_SUBMITTED;
-               else if ( !strcasecmp(tmps, "Waiting") ) cond->attr_id.state = EDG_WLL_JOB_WAITING;
-               else if ( !strcasecmp(tmps, "Ready") ) cond->attr_id.state = EDG_WLL_JOB_READY;
-               else if ( !strcasecmp(tmps, "Scheduled") ) cond->attr_id.state = EDG_WLL_JOB_SCHEDULED;
-               else if ( !strcasecmp(tmps, "Running") ) cond->attr_id.state = EDG_WLL_JOB_RUNNING;
-               else if ( !strcasecmp(tmps, "Done") ) cond->attr_id.state = EDG_WLL_JOB_DONE;
-               else if ( !strcasecmp(tmps, "Aborted") ) cond->attr_id.state = EDG_WLL_JOB_ABORTED;
-               else if ( !strcasecmp(tmps, "Cancelled") ) cond->attr_id.state = EDG_WLL_JOB_CANCELLED;
-               else if ( !strcasecmp(tmps, "Cleared") ) cond->attr_id.state = EDG_WLL_JOB_CLEARED;
-               else
-               {
-                       fprintf(stderr,"%s: invalid status value (%s)\n", myname, tmps);
-                       return 0;
-               }
-        break;
-
-       default:
-               break;
-       }
-
-       while ( isblank(*s) || (*s == ';') ) s++;                       /* skip whitespaces */
-
-       return s;
-}
-
-static char *get_event_condition(char *src, edg_wll_QueryRec *cond)
-{
-       char       *s;
-
-
-       s = get_attr_name(src, tmps, 500);
-
-       if ( tmps[0] == '\0' ) return NULL;
-
-       if ( !strcmp(tmps, "time") ) cond->attr = EDG_WLL_QUERY_ATTR_TIME;
-       else if ( !strcmp(tmps, "level") ) cond->attr = EDG_WLL_QUERY_ATTR_LEVEL;
-       else if ( !strcmp(tmps, "host") ) cond->attr = EDG_WLL_QUERY_ATTR_HOST;
-       else if ( !strcmp(tmps, "source") ) cond->attr = EDG_WLL_QUERY_ATTR_SOURCE;
-       else if ( !strcmp(tmps, "instance") ) cond->attr = EDG_WLL_QUERY_ATTR_INSTANCE;
-       else if ( !strcmp(tmps, "event_type") ) cond->attr = EDG_WLL_QUERY_ATTR_EVENT_TYPE;
-       else
-       {
-               cond->attr = EDG_WLL_QUERY_ATTR_USERTAG;
-               cond->attr_id.tag = strdup(tmps);
-       }
-
-       if ( !(s = get_op(s, &(cond->op))) ) return NULL;
-
-       if ( !(s = get_attr_value(s, tmps, 500)) ) return NULL;
-
-       switch ( cond->attr )
-       {
-       case EDG_WLL_QUERY_ATTR_USERTAG:
-       case EDG_WLL_QUERY_ATTR_HOST:
-       case EDG_WLL_QUERY_ATTR_INSTANCE:
-               if ( !(cond->value.c = strdup(tmps)) )
-                       return 0;
-               break;
-
-       case EDG_WLL_QUERY_ATTR_SOURCE:
-               if ( !strcasecmp(tmps, "UserInterface") ) cond->value.i = EDG_WLL_SOURCE_USER_INTERFACE;
-               else if ( !strcasecmp(tmps, "NetworkServer") ) cond->value.i = EDG_WLL_SOURCE_NETWORK_SERVER;
-               else if ( !strcasecmp(tmps, "WorkloadManager") ) cond->value.i = EDG_WLL_SOURCE_WORKLOAD_MANAGER;
-               else if ( !strcasecmp(tmps, "BigHelper") ) cond->value.i = EDG_WLL_SOURCE_BIG_HELPER;
-               else if ( !strcasecmp(tmps, "JobController") ) cond->value.i = EDG_WLL_SOURCE_JOB_SUBMISSION;
-               else if ( !strcasecmp(tmps, "LogMonitor") ) cond->value.i = EDG_WLL_SOURCE_LOG_MONITOR;
-               else if ( !strcasecmp(tmps, "LRMS") ) cond->value.i = EDG_WLL_SOURCE_LRMS;
-               else if ( !strcasecmp(tmps, "Application") ) cond->value.i = EDG_WLL_SOURCE_APPLICATION;
-               else
-               {
-                       fprintf(stderr,"%s: invalid source value (%s)\n", myname, tmps);
-                       return NULL;
-               }
-               break;
-
-       case EDG_WLL_QUERY_ATTR_EVENT_TYPE:
-       case EDG_WLL_QUERY_ATTR_LEVEL:
-               cond->value.i = atoi(tmps);
-               if ( cond->op == EDG_WLL_QUERY_OP_WITHIN )
-               {
-                       if ( !(s = get_attr_value(s, tmps, 500)) ) return NULL;
-                       if ( tmps[0] == '\0' )
-                       {
-                               fprintf(stderr,"%s: second interval boundary not set\n", myname);
-                               return NULL;
-                       }
-                       cond->value2.i = atoi(tmps);
-               }
-               break;
-
-       case EDG_WLL_QUERY_ATTR_TIME:
-               cond->value.t.tv_sec = StrToTime(tmps);
-               if ( cond->op == EDG_WLL_QUERY_OP_WITHIN )
-               {
-                       if ( !(s = get_attr_value(s, tmps, 500)) ) return NULL;
-                       if ( tmps[0] == '\0' )
-                       {
-                               fprintf(stderr,"%s: second interval boundary not set\n", myname);
-                               return NULL;
-                       }
-                       cond->value2.t.tv_sec = StrToTime(tmps);
-               }
-               break;
-
-       default:
-               break;
-       }
-
-       while ( isblank(*s) || (*s == ';') ) s++;                       /* skip whitespaces */
-
-       return s;
-}
-
-static int cond_parse(edg_wll_QueryRec ***pcond, int jobs)
-{
-       edg_wll_QueryRec  **cond = NULL;
-       int                                     n,
-                                               icond,
-                                               ret;
-       char                       *s;
-
-
-       
-       n = 0;
-       if ( !(cond = malloc(sizeof(*cond))) )
-       {
-               perror("cond_parse()");
-               exit(ENOMEM);
-       }
-
-       while ( 1 )
-       {
-               if ( !fgets(buffer, BUFF_LEN, fin) )
-               {
-                       if ( !feof(fin) )
-                       {
-                               fprintf(stderr, "parse_query_cond(): file reading error\n");
-                               exit(EINVAL);
-                       }
-
-                       ret = PQRV_EOF;
-                       goto cleanup;
-               }
-
-               if ( buffer[0] == '\n' )
-               {
-                       ret = PQRV_EMPTY_LINE;
-                       goto cleanup;
-               }
-
-               if ( !(cond[n] = (edg_wll_QueryRec *) malloc(sizeof(edg_wll_QueryRec))) )
-               {
-                       perror("cond_parse()");
-                       exit(ENOMEM);
-               }
-               s = buffer;
-               icond = 0;
-               while ( 1 )
-               {
-                       if ( jobs )
-                               s = get_job_condition(s, &(cond[n][icond]));
-                       else
-                               s = get_event_condition(s, &(cond[n][icond]));
-
-                       if ( !s )
-                       {
-                               free(cond[n]);
-                               cond[n] = NULL;
-                               ret = PQRV_ERR;
-                               goto cleanup;
-                       }
-                       icond++;
-                       if ( !(cond[n] = realloc(cond[n], (icond+1)*sizeof(edg_wll_QueryRec))) )
-                       {
-                               perror("cond_parse()");
-                               exit(ENOMEM);
-                       }
-                       cond[n][icond].attr = EDG_WLL_QUERY_ATTR_UNDEF;
-                       if ( (*s == '\n') || (*s == '\0') )
-                               break;
-               }
-
-               n++;
-               if ( !(cond = realloc(cond, (n+1)*sizeof(*cond))) )
-               {
-                       perror("cond_parse()");
-                       exit(ENOMEM);
-               }
-               cond[n] = NULL;
-       }
-
-cleanup:
-       if ( !n )
-       {
-               free(cond);
-               *pcond = NULL;
-       }
-       else
-               *pcond = cond;
-
-       return ret;
-}
-
-static void printconds(edg_wll_QueryRec **cond)
-{
-       int             i, j;
-       int             any = 0;
-       char   *s;
-
-
-       if ( !cond )
-       {
-               printf("empty\n");
-               return ;
-       }
-
-       for ( i = 0; cond[i]; i++ )
-       {
-               if ( cond[i][0].attr )
-               {
-                       any = 1;
-                       if ( i )
-                               printf(" AND (");
-                       else
-                               printf("(");
-               }
-               for ( j = 0; cond[i][j].attr; j++ )
-               {
-                       if ( j )
-                               printf(" OR ");
-                       switch ( cond[i][j].attr )
-                       {
-                       case EDG_WLL_QUERY_ATTR_JOBID: printf("jobid"); break;
-                       case EDG_WLL_QUERY_ATTR_OWNER: printf("owner"); break;
-                       case EDG_WLL_QUERY_ATTR_STATUS: printf("status"); break;
-                       case EDG_WLL_QUERY_ATTR_LOCATION: printf("location"); break;
-                       case EDG_WLL_QUERY_ATTR_DESTINATION: printf("destination"); break;
-                       case EDG_WLL_QUERY_ATTR_DONECODE: printf("done_code"); break;
-                       case EDG_WLL_QUERY_ATTR_EXITCODE: printf("exit_code"); break;
-                       case EDG_WLL_QUERY_ATTR_PARENT: printf("parent_job"); break;
-                       case EDG_WLL_QUERY_ATTR_RESUBMITTED: printf("resubmitted"); break;
-                       case EDG_WLL_QUERY_ATTR_USERTAG: printf("%s",cond[i][j].attr_id.tag); break;
-                       case EDG_WLL_QUERY_ATTR_TIME: printf("time"); break;
-                       case EDG_WLL_QUERY_ATTR_LEVEL: printf("level"); break;
-                       case EDG_WLL_QUERY_ATTR_HOST: printf("host"); break;
-                       case EDG_WLL_QUERY_ATTR_SOURCE: printf("source"); break;
-                       case EDG_WLL_QUERY_ATTR_INSTANCE: printf("instance"); break;
-                       case EDG_WLL_QUERY_ATTR_EVENT_TYPE: printf("ev_type"); break;
-                       default: break;
-                       }
-                       switch ( cond[i][j].op )
-                       {
-                       case EDG_WLL_QUERY_OP_EQUAL: printf("="); break;
-                       case EDG_WLL_QUERY_OP_UNEQUAL: printf("<>"); break;
-                       case EDG_WLL_QUERY_OP_LESS: printf("<"); break;
-                       case EDG_WLL_QUERY_OP_GREATER: printf(">"); break;
-                       case EDG_WLL_QUERY_OP_WITHIN: printf("@"); break;
-                       }
-                       switch ( cond[i][j].attr )
-                       {
-                       case EDG_WLL_QUERY_ATTR_JOBID:
-                       case EDG_WLL_QUERY_ATTR_PARENT:
-                               s = edg_wlc_JobIdUnparse(cond[i][j].value.j);
-                               printf("%s", s);
-                               free(s);
-                               break;
-                       case EDG_WLL_QUERY_ATTR_OWNER:
-                       case EDG_WLL_QUERY_ATTR_LOCATION: 
-                       case EDG_WLL_QUERY_ATTR_DESTINATION:
-                       case EDG_WLL_QUERY_ATTR_HOST:
-                       case EDG_WLL_QUERY_ATTR_INSTANCE:
-                       case EDG_WLL_QUERY_ATTR_USERTAG:
-                               printf("%s", cond[i][j].value.c);
-                               break;
-                       case EDG_WLL_QUERY_ATTR_STATUS:
-                       case EDG_WLL_QUERY_ATTR_DONECODE:
-                       case EDG_WLL_QUERY_ATTR_EXITCODE:
-                       case EDG_WLL_QUERY_ATTR_RESUBMITTED:
-                       case EDG_WLL_QUERY_ATTR_SOURCE:
-                               if ( cond[i][j].op == EDG_WLL_QUERY_OP_WITHIN )
-                                       printf("[%d,%d]", cond[i][j].value.i, cond[i][j].value2.i);
-                               else
-                                       printf("%d", cond[i][j].value.i);
-                               break;
-                       case EDG_WLL_QUERY_ATTR_TIME:
-                               if ( cond[i][j].op == EDG_WLL_QUERY_OP_WITHIN )
-                               {
-                                       printf("[%s,", TimeToStr(cond[i][j].value.t.tv_sec));
-                                       printf("%s] & state = %d", TimeToStr(cond[i][j].value2.t.tv_sec), cond[i][j].attr_id.state);
-                               }
-                               else
-                                       printf("%s & state = %d", TimeToStr(cond[i][j].value.t.tv_sec), cond[i][j].attr_id.state);
-                               break;
-                       default:
-                               break;
-                       }
-               }
-               if ( j )
-                       printf(")");
-       }
-       if ( any ) printf("\n");
-}
-
-static void printstat(edg_wll_JobStat stat)
-{
-       char            *s, *j;
-
-
-       s = edg_wll_StatToString(stat.state); 
-       printf("STATUS:\t%s\n\n",s);
-/* print whole flat structure */
-       printf("state : %s\n", s);
-       printf("jobId : %s\n", j = edg_wlc_JobIdUnparse(stat.jobId));
-       printf("owner : %s\n", stat.owner);
-       printf("jobtype : %d\n", stat.jobtype);
-       if (stat.jobtype) {;
-               printf("seed : %s\n", stat.seed);
-               printf("children_num : %d\n", stat.children_num);
-// XXX deal with subjobs (children, children_hist, children_states)
-       }
-       printf("condorId : %s\n", stat.condorId);
-       printf("globusId : %s\n", stat.globusId);
-       printf("localId : %s\n", stat.localId);
-       printf("jdl : %s\n", stat.jdl);
-       printf("matched_jdl : %s\n", stat.matched_jdl);
-       printf("destination : %s\n", stat.destination);
-       printf("network server : %s\n", stat.network_server);
-       printf("condor_jdl : %s\n", stat.condor_jdl);
-       printf("rsl : %s\n", stat.rsl);
-       printf("reason : %s\n", stat.reason);
-       printf("location : %s\n", stat.location);
-       printf("ce_node : %s\n", stat.ce_node);
-       printf("subjob_failed : %d\n", stat.subjob_failed);
-       printf("done_code : %d\n", stat.done_code);
-       printf("exit_code : %d\n", stat.exit_code);
-       printf("resubmitted : %d\n", stat.resubmitted);
-       printf("cancelling : %d\n", stat.cancelling);
-       printf("cancelReason : %s\n", stat.cancelReason);
-       printf("cpuTime : %d\n", stat.cpuTime);
-// XXX user_tags user_values
-       printf("stateEnterTime : %ld.%06ld\n", stat.stateEnterTime.tv_sec,stat.stateEnterTime.tv_usec);
-       printf("lastUpdateTime : %ld.%06ld\n", stat.lastUpdateTime.tv_sec,stat.lastUpdateTime.tv_usec);
-       printf("expectUpdate : %d\n", stat.expectUpdate);
-       printf("expectFrom : %s\n", stat.expectFrom);
-       
-       free(j);
-       free(s);
-}
-
-time_t StrToTime(char *t)
-{
-       struct tm       tm;
-
-       memset(&tm,0,sizeof(tm));
-       setenv("TZ","UTC",1);
-       tzset();
-       sscanf(t,"%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);
-}
-
-static char     tbuf[256];
-
-char *TimeToStr(time_t t)
-{
-       struct tm       *tm = gmtime(&t);
-
-       sprintf(tbuf,"'%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);
-
-       return tbuf;
-}
-
-static void dgerr(edg_wll_Context ctx, char *where)
-{
-       char       *errText,
-                          *errDesc;
-
-
-       edg_wll_Error(ctx, &errText, &errDesc);
-       fprintf(stderr, "%s", errText);
-       if ( where )
-               fprintf(stderr, ": %s", where);
-       if ( errDesc )
-               fprintf(stderr, " (%s)\n", errDesc);
-       else
-               putc('\n', stderr);
-       free(errText);
-       free(errDesc);
-}
-
diff --git a/org.glite.lb.client/examples/query_seq_code.c b/org.glite.lb.client/examples/query_seq_code.c
deleted file mode 100644 (file)
index 87e342d..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-#include <getopt.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-
-#include <globus_common.h>
-
-#include "glite/wmsutils/jobid/cjobid.h"
-#include "glite/lb/consumer.h"
-
-
-static struct option opts[] = {
-       {"help",                0,      NULL,   'h'},
-       {"sock",                1,      NULL,   's'},
-       {"jobid",               1,      NULL,   'j'},
-};
-
-static void usage(char *me)
-{
-       fprintf(stderr, "usage: %s [option]\n"
-                       "\t-h, --help      Shows this screen.\n"
-                       "\t-s, --server    LB Proxy socket.\n"
-                       "\t-j, --jobid     ID of requested job.\n"
-                       , me);
-}
-
-
-int main(int argc, char *argv[])
-{
-       edg_wll_Context         ctx;
-       edg_wlc_JobId           jobid = NULL;
-       char                       *server, *jobid_s, *code;
-       int                                     opt, err = 0;
-
-
-       server = code = jobid_s = NULL;
-       while ( (opt = getopt_long(argc, argv, "hs:j:c:n:v:", opts, NULL)) != EOF)
-               switch (opt) {
-               case 'h': usage(argv[0]); return 0;
-               case 's': server = strdup(optarg); break;
-               case 'j': jobid_s = strdup(optarg); break;
-               case '?': usage(argv[0]); return 1;
-               }
-
-       if ( !jobid_s ) { fprintf(stderr, "JobId not given\n"); return 1; }
-       if ( !server ) { fprintf(stderr, "LB proxy socket not given\n"); return 1; }
-
-       if ( (errno = edg_wlc_JobIdParse(jobid_s, &jobid)) ) { perror(jobid_s); return 1; }
-
-       if (globus_module_activate(GLOBUS_COMMON_MODULE) != GLOBUS_SUCCESS) {
-               fprintf(stderr, "Cannot initialize Globus common module\n");
-               exit(1);
-       }
-
-       edg_wll_InitContext(&ctx);
-
-       edg_wll_SetParam(ctx, EDG_WLL_PARAM_SOURCE, EDG_WLL_SOURCE_USER_INTERFACE);
-       edg_wll_SetParam(ctx, EDG_WLL_PARAM_LBPROXY_SERVE_SOCK, server);
-
-/*
-       if (edg_wll_SetLoggingJob(ctx, jobid, code, EDG_WLL_SEQ_NORMAL)) {
-               char    *et,*ed;
-               edg_wll_Error(ctx,&et,&ed);
-               fprintf(stderr,"SetLoggingJob(%s,%s): %s (%s)\n",jobid_s,code,et,ed);
-               exit(1);
-       }
-*/
-       if ( (err = edg_wll_QuerySequenceCodeProxy(ctx, jobid, &code)) ) {
-           char        *et,*ed;
-
-           edg_wll_Error(ctx,&et,&ed);
-           fprintf(stderr,"%s: edg_wll_QuerySequenceCodeProxy(): %s (%s)\n",
-                   argv[0],et,ed);
-           free(et); free(ed);
-       }
-
-       if ( code ) {
-               puts(code);
-               free(code);
-       }
-
-       edg_wll_FreeContext(ctx);
-
-       return err;
-}
diff --git a/org.glite.lb.client/examples/ready.l b/org.glite.lb.client/examples/ready.l
deleted file mode 100644 (file)
index e4d9ac7..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-# macro definition for WAITING state
-
-:waiting:
-# NetworkServer
-
--s NetworkServer,-e EnQueued, --queue="destination queue", --job="job description in receiver language", --result=OK, --reason="detailed description of transfer"
-# -s NetworkServer,-e Transfer,--destination="WorkloadManager",--dest_host="destination hostname",--dest_instance="destination instance",--dest_jobid="job description in receiver language",--result=OK,--reason="detailed description of transfer",--dest_jobid="destination internal jobid"
-
-# WorkloadManager
-
--s WorkloadManager,-e DeQueued, --queue="queue name", --local_jobid="new jobId assigned by the receiving component" 
--s WorkloadManager,-e HelperCall, --helper_name="name of the called component",--helper_params="parameters of the call", --src_role=CALLING
-#-s Helper,-e HelperCall, --helper_name="name of the called component",--helper_params="parameters of the call", --src_role=CALLED
-#-s Helper,-e HelperReturn, --helper_name="name of the called component",--retval="returned data", --src_role=CALLED
--s WorkloadManager,-e Match,--dest_id="Id of the destination CE/queue"
--s WorkloadManager,-e HelperReturn, --helper_name="name of the called component",--retval="returned data", --src_role=CALLING
--s WorkloadManager,-e EnQueued, --queue="destination queue", --job="job description in receiver language", --result=OK, --reason="detailed description of transfer"
-
diff --git a/org.glite.lb.client/examples/ready_dag.l b/org.glite.lb.client/examples/ready_dag.l
deleted file mode 100644 (file)
index aa7deae..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# macro definition for WAITING state
-
-:waiting_dag:
-# NetworkServer
-
--s NetworkServer,-e EnQueued, --queue="destination queue", --job="job description in receiver language", --result=OK, --reason="detailed description of transfer"
-
-# WorkloadManager
-
--s WorkloadManager,-e DeQueued, --queue="queue name", --local_jobid="new jobId assigned by the receiving component" 
-
--s WorkloadManager,-e EnQueued, --queue="destination queue", --job="job description in receiver language", --result=OK, --reason="detailed description of transfer"
-
diff --git a/org.glite.lb.client/examples/ready_subjob.l b/org.glite.lb.client/examples/ready_subjob.l
deleted file mode 100644 (file)
index 3f40632..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# macro definition for WAITING state
-
-:waiting_subjob:
-# WorkloadManager
-
--s WorkloadManager,-e Match,--dest_id="Id of the destination CE/queue"
--s WorkloadManager,-e HelperReturn, --helper_name="name of the called component",--retval="returned data", --src_role=CALLING
-
diff --git a/org.glite.lb.client/examples/running.l b/org.glite.lb.client/examples/running.l
deleted file mode 100644 (file)
index 12d411a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# macro definition for RUNNING state
-
-:scheduled:
--s LogMonitor,-e Running,--node"worker node where the executable is run"
diff --git a/org.glite.lb.client/examples/running_dag.l b/org.glite.lb.client/examples/running_dag.l
deleted file mode 100644 (file)
index 74e1efa..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# macro definition for RUNNING state
-
-:scheduled_dag:
--s LogMonitor,-e Running,--node"DAGMan running on server"
diff --git a/org.glite.lb.client/examples/running_subjob.l b/org.glite.lb.client/examples/running_subjob.l
deleted file mode 100644 (file)
index 2069f33..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# macro definition for RUNNING state
-
-:scheduled_subjob:
--s LogMonitor,-e Running,--node"worker node where the executable is run"
diff --git a/org.glite.lb.client/examples/scheduled.l b/org.glite.lb.client/examples/scheduled.l
deleted file mode 100644 (file)
index 3197309..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# macro definition for SCHEDULED state
-
-:ready:
-# JobSubmition
-
--s JobController,-e DeQueued, --queue="queue name", --local_jobid="new jobId assigned by the receiving component"
--s JobController,-e Transfer,--destination="LRMS",--dest_host="destination hostname",--dest_instance="destination instance",--dest_jobid="job description in receiver language",--result=OK,--reason="detailed description of transfer",--dest_jobid="destination internal jobid"
-
-# LogMonitor
-
--s LogMonitor,-e Accepted, --from="JobController", --from_host="sending component hostname", --from_instance="sending component instance", --local_jobid="new jobId (Condor, Globus ...)"
--s LogMonitor,-e Transfer,--destination="LRMS",--dest_host="destination hostname",--dest_instance="destination instance",--dest_jobid="job description in receiver language",--result=OK,--reason="detailed description of transfer",--dest_jobid="destination internal jobid"
-
diff --git a/org.glite.lb.client/examples/scheduled_dag.l b/org.glite.lb.client/examples/scheduled_dag.l
deleted file mode 100644 (file)
index a90b788..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# macro definition for SCHEDULED state
-
-:ready_dag:
-# JobSubmition
-
--s JobController,-e DeQueued, --queue="queue name", --local_jobid="new jobId assigned by the receiving component"
--s JobController,-e Transfer,--destination="LogMonitor",--dest_host="destination hostname",--dest_instance="destination instance",--dest_jobid="job description in receiver language",--result=START,--reason="detailed description of transfer",--dest_jobid="destination internal jobid"
-
-# LogMonitor
-
--s LogMonitor,-e Accepted, --from="JobController", --from_host="sending component hostname", --from_instance="sending component instance", --local_jobid="new jobId (Condor, Globus ...)"
-
diff --git a/org.glite.lb.client/examples/scheduled_subjob.l b/org.glite.lb.client/examples/scheduled_subjob.l
deleted file mode 100644 (file)
index f1d3021..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-# macro definition for SCHEDULED state
-
-:ready_subjob:
-# LogMonitor
-
--s LogMonitor,-e Transfer,--destination="LRMS",--dest_host="destination hostname",--dest_instance="destination instance",--dest_jobid="job description in receiver language",--result=OK,--reason="detailed description of transfer",--dest_jobid="destination internal jobid"
-
diff --git a/org.glite.lb.client/examples/stats.c b/org.glite.lb.client/examples/stats.c
deleted file mode 100644 (file)
index 2f32cc6..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-#include <stdio.h>
-#include <time.h>
-#include <string.h>
-
-#include "glite/lb/statistics.h"
-
-
-int main(int argc,char **argv)
-{
-       edg_wll_Context ctx;
-       edg_wll_QueryRec        group[2];
-       time_t  now,from,to;
-       char    *cfrom,*cto;
-       int     from_res,to_res;
-       float   val;
-
-
-       edg_wll_InitContext(&ctx);
-
-       if (argc != 2) { 
-               fprintf(stderr,"usage: %s <CE name>\n",argv[0]);
-               return 1;
-       }       
-
-/* the only supported grouping for now */
-       group[0].attr = EDG_WLL_QUERY_ATTR_DESTINATION;
-       group[0].op = EDG_WLL_QUERY_OP_EQUAL;
-       group[0].value.c = argv[1];
-       group[1].attr = EDG_WLL_QUERY_ATTR_UNDEF;
-
-
-       time(&now);
-       to = now;
-       from = now - 60;
-       
-/* not implemented yet
-       if (edg_wll_StateDuration(ctx,group,EDG_WLL_JOB_SCHEDULED,0,
-                               &from,&to,&val,&from_res,&to_res))
-       {
-               char    *et,*ed;
-               edg_wll_Error(ctx,&et,&ed);
-               fprintf(stderr,"edg_wll_StateDuration(): %s, %s\n",et,ed);
-               return 1;
-       }
-
-       cfrom = strdup(ctime(&from));
-       cto = strdup(ctime(&to));
-       cfrom[strlen(cfrom)-1] = 0;
-       cto[strlen(cto)-1] = 0;
-
-       printf("Average queue traversal time at \"%s\": %f s\n"
-              "  Measuered from %s to %s\n"
-              "  With resolution from %d to %d s\n",
-              argv[1],val,cfrom,cto,from_res,to_res);
-
-*/
-
-       to = now;
-       from = now - 60;
-
-       if (edg_wll_StateRate(ctx,group,EDG_WLL_JOB_DONE,EDG_WLL_STAT_FAILED,
-                               &from,&to,&val,&from_res,&to_res))
-       {
-               char    *et,*ed;
-               edg_wll_Error(ctx,&et,&ed);
-               fprintf(stderr,"edg_wll_StateRate(): %s, %s\n",et,ed);
-               return 1;
-       }
-
-       cfrom = strdup(ctime(&from));
-       cto = strdup(ctime(&to));
-       cfrom[strlen(cfrom)-1] = 0;
-       cto[strlen(cto)-1] = 0;
-
-       printf("Average failure rate at \"%s\": %f jobs/s\n"
-              "  Measuered from %s to %s\n"
-              "  With resolution from %d to %d s\n",
-              argv[1],val,cfrom,cto,from_res,to_res);
-
-       return 0;
-}
-
diff --git a/org.glite.lb.client/examples/submitted.l b/org.glite.lb.client/examples/submitted.l
deleted file mode 100644 (file)
index 932ef55..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# macro definition for SUBMITTED state
-
-# only job registration needed for submitted state
-#-p,-s UserInterface,-e Transfer,--destination="NetworkServer",--destination_host="destination hostname",--destination_instance="destination instance",--destination_jobid="job description in receiver language",--result=OK,--reason="detailed description of transfer",--destination_jobid="destination internal jobid"
-
diff --git a/org.glite.lb.client/examples/submitted_dag.l b/org.glite.lb.client/examples/submitted_dag.l
deleted file mode 100644 (file)
index 5bcae2f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# macro definition for SUBMITTED state
-
-# only job registration needed for submitted state
-
diff --git a/org.glite.lb.client/examples/submitted_subjob.l b/org.glite.lb.client/examples/submitted_subjob.l
deleted file mode 100644 (file)
index 5bcae2f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# macro definition for SUBMITTED state
-
-# only job registration needed for submitted state
-
diff --git a/org.glite.lb.client/examples/waiting.l b/org.glite.lb.client/examples/waiting.l
deleted file mode 100644 (file)
index 439a7da..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-# macro definition for WAITING state
-
-:submitted:
-# NetworkServer
-
--s NetworkServer,-e Accepted, --from="UserInterface", --from_host="sending component hostname", --from_instance="sending component instance", --local_jobid="new jobId (Condor, Globus ...)"
diff --git a/org.glite.lb.client/examples/waiting_dag.l b/org.glite.lb.client/examples/waiting_dag.l
deleted file mode 100644 (file)
index 01c1d11..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-# macro definition for WAITING state
-
-:submitted_dag:
-# NetworkServer
-
--s NetworkServer,-e Accepted, --from="UserInterface", --from_host="sending component hostname", --from_instance="sending component instance", --local_jobid="new jobId (Condor, Globus ...)"
diff --git a/org.glite.lb.client/examples/waiting_subjob.l b/org.glite.lb.client/examples/waiting_subjob.l
deleted file mode 100644 (file)
index 41a2acc..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-# macro definition for WAITING state
-
-:submitted_subjob:
-# WorkloadManager
-
--s WorkloadManager,-e HelperCall, --helper_name="name of the called component",--helper_params="parameters of the call", --src_role=CALLING
diff --git a/org.glite.lb.client/project/build.properties b/org.glite.lb.client/project/build.properties
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.glite.lb.client/project/configure.properties.xml b/org.glite.lb.client/project/configure.properties.xml
deleted file mode 100644 (file)
index 17c4c40..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Configuration options for the GLite LB Client module
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.2  2004/07/06 20:47:11  flammer
-       Moved to configure.properties.xml
-       
-       
--->
-
-       <!-- ======================================================
-         Define extra properties here ...
-         ====================================================== -->
-        
-       <project name="LB Client configuration options">                                                                        
-               <target name="lbmakefiles">
-                       <exec executable="ln" failonerror="true">
-                               <arg line="-fs ${component.dir}/Makefile ${module.build.dir}/Makefile"/>
-                       </exec>
-                       <echo file="${module.build.dir}/Makefile.inc">
-top_srcdir=..
-builddir=build
-stagedir=${stage.abs.dir}
-distdir=${dist.dir}
-globalprefix=${global.prefix}
-lbprefix=${subsystem.prefix}
-package=${module.package.name}
-PREFIX=${install.dir}
-version=${module.version}
-glite_location=${with.glite.location}
-globus_prefix=${with.globus.prefix}
-thrflavour=${with.globus.thr.flavor}
-nothrflavour=${with.globus.nothr.flavor}
-expat_prefix=${with.expat.prefix}
-ares_prefix=${with.ares.prefix}
-cppunit_prefix=${with.cppunit.prefix}
-                       </echo>
-           </target>
-       </project>
diff --git a/org.glite.lb.client/project/properties.xml b/org.glite.lb.client/project/properties.xml
deleted file mode 100755 (executable)
index d067cbd..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Common build properties file for the Glite LB Client component
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$ 
-       
-       Revision history:
-       $Log$
-       Revision 1.2  2004/06/23 00:30:55  dimeglio
-       First version of this file
-       
--->
-
-<project name="LB Client component common properties">
-
-       <!-- Include build properties to allow overwriting 
-            of properties for subsystem                    -->
-       <property file="project/build.properties" />    
-
-       <!-- ======================================================
-          Define corresponding subsystem properties
-                ====================================================== -->
-
-       <!-- Subsystem name -->
-       <property name="subsystem.name" value="${lb.subsystem.name}"/>
-               
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${lb.subsystem.prefix}"/>
-
-       <!-- ======================================================
-          Define component properties
-                ====================================================== -->
-                               
-       <!-- Component name prefix -->
-       <property name="component.prefix" value="client" />
-                       
-       <!-- ======================================================
-          Define general component properties
-                ====================================================== -->
-       
-       <import file="${component.general.properties.file}" />
-                                               
-       <!-- ======================================================
-                Define extra properties here ...
-                ====================================================== -->
-                
-                                                               
-</project>
diff --git a/org.glite.lb.client/project/tar_exclude b/org.glite.lb.client/project/tar_exclude
deleted file mode 100644 (file)
index e1fcd1a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-tar_exclude
-CVS
-build.xml
-build
-build.properties
-properties.xml
-configure.properties.xml
-.cvsignore
-.project
-.cdtproject
diff --git a/org.glite.lb.client/project/version.properties b/org.glite.lb.client/project/version.properties
deleted file mode 100644 (file)
index 38685c6..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Dec 10 13:24:00 CET 2004
-module.version=0.5.0
-module.build=112
-module.age=2
diff --git a/org.glite.lb.client/src/Event.cpp.T b/org.glite.lb.client/src/Event.cpp.T
deleted file mode 100644 (file)
index 7e32f62..0000000
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
-@@@AUTO
-*/
-
-#include <utility>
-#include <vector>
-#include <string>
-#include <stdio.h>
-
-#include <errno.h>
-
-#include "glite/wmsutils/jobid/cjobid.h"
-
-#include "glite/lb/Event.h"
-#include "glite/wmsutils/jobid/JobIdExceptions.h"
-#include "glite/lb/LoggingExceptions.h"
-
-#include "glite/lb/consumer.h"
-#include "glite/lb/events.h"
-#include "glite/lb/notifid.h"
-
-EWL_BEGIN_NAMESPACE;
-
-#define CLASS_PREFIX "glite::lb::Event::"
-
-@@@{
-sub typeswitch {
-       my $ftype = shift;
-       my $resc = shift;
-       local $_;
-       my %ctype;
-       $ctype{$_} = 1 while $_ = shift;
-
-       $resc = 'break;' unless $resc;
-
-       gen $indent."switch (attr) {\n";
-       selectType $event $ftype;
-       for (getFields $event) {
-               my $f = selectField $event $_;
-               if($ctype{$f->{type}}) {
-                 my $cstr = $ftype eq '_common_' ? 'any' : lcfirst $ftype;
-                 my $cname = getName $f 'C';
-                 gen "$indent\tcase Event::".uc($f->{name}).": return(cev->$cstr.$cname);\n";
-               } elsif (($f->{type} eq "int") && 
-                        ($ctype{"string"}) && 
-                        $f->{codes}) {
-                 # conversion from int to string (well, enum to string)
-                 my $cstr = $ftype eq '_common_' ? 'any' : lcfirst $ftype;
-                 my $cname = getName $f 'C';
-                 my $fn = $ftype eq '_common_' ? "" : ucfirst $ftype;
-                 my $c =  $fn . ucfirst $f->{name}; 
-                 $cast = ($c eq 'Level') ? "(edg_wll_Level)" : "";
-                 gen "$indent\tcase Event::".uc($f->{name}).": return((const char *)edg_wll_${c}ToString(${cast}cev->$cstr.$cname));\n";
-               } elsif (($f->{type} eq "jobid") &&
-                        ($ctype{"string"})) {
-                  # conversion from jobid to string
-               }
-       }
-       gen "$indent\tdefault: $resc\n" if $resc;
-       gen "$indent\}\n";
-}
-@@@}
-
-Event::Event(void)
-{
-  type = UNDEF;
-  flesh = 0;
-}
-
-
-Event::Event(const Event &in)
-{
-  type = in.type;
-  flesh = in.flesh;
-  if (flesh) flesh->use();
-}
-
-
-Event::Event(edg_wll_Event *in)
-{
-  type = (Type)in->type;
-  flesh = new CountRef<Event>((void*)in);
-}
-
-
-Event::~Event(void)
-{
-  if (flesh) flesh->release();
-}
-
-
-Event & 
-Event::operator= (const Event &in)
-{
-  if (flesh) flesh->release();
-  type = in.type;
-  flesh = in.flesh;
-  if (flesh) flesh->use();
-  
-  return *this;
-}
-
-int Event::getValInt(Attr attr)        const
-{
-       edg_wll_Event const     *cev = (edg_wll_Event *) flesh->ptr;
-
-@@@{
-       $indent = "\t";
-       typeswitch '_common_',undef,'int','port','logsrc';
-@@@}
-
-       switch (cev->type) {
-@@@{
-       $indent = "\t\t";
-       for my $t (getTypes $event) {
-               gen "\t\tcase ".uc($t).":\n";
-               typeswitch $t,'goto badattr;','int','port','logsrc';
-       }
-@@@}
-               default:
-                 STACK_ADD;
-                 throw(Exception(EXCEPTION_MANDATORY, EINVAL,
-                                 "attribute is not of int type"));
-        }
-badattr:
-        STACK_ADD;
-        throw(Exception(EXCEPTION_MANDATORY, ENOENT, "invalid attribute"));
-       return -1; /* gcc, shut up! */
-}
-
-static char const *get_string_val(const edg_wll_Event *cev, Event::Attr attr)
-{
-@@@{
-       $indent = "\t";
-       typeswitch '_common_',undef,'string';
-@@@}
-
-       switch (cev->type) {
-@@@{
-       $indent = "\t\t";
-       for my $t (getTypes $event) {
-               gen "\t\tcase Event::".uc($t).":\n";
-               typeswitch $t,'goto badattr;','string';
-       }
-@@@}
-               default:
-                 STACK_ADD;
-                 throw(Exception(EXCEPTION_MANDATORY, EINVAL, 
-                                 "attribute is not of string type and can not be converted"));
-       }
-badattr:
-       STACK_ADD;
-       throw(Exception(EXCEPTION_MANDATORY, ENOENT, "invalid attribute"));
-       return NULL; /* gcc, shut up! */
-}
-
-
-std::string 
-Event::getValString(Attr attr) const
-{
-  edg_wll_Event const *cev = (edg_wll_Event *) flesh->ptr;
-  std::string  ret;
-  
-  try {
-    char const *s = get_string_val(cev,attr);
-    if (s) ret.assign(s);
-    return ret;
-  } catch (Exception &e) {
-    STACK_ADD;
-    throw;
-  }
-}
-
-
-struct timeval 
-Event::getValTime(Attr attr) const
-{
-  edg_wll_Event const *cev = (edg_wll_Event *) flesh->ptr;
-@@@{
-    $indent = "\t";
-    typeswitch '_common_',undef,'timeval';
-@@@}
-  
-  /* XXX
-   * to make things simpler we don't include this here as there are no
-   * type specific timeval attributes currently
-   *
-   *   switch (cev->type) {
-   */
-
-  STACK_ADD; 
-  throw(Exception(EXCEPTION_MANDATORY, ENOENT, "invalid attribute"));
-}
-
-static
-edg_wlc_JobId 
-get_val_jobid(edg_wll_Event const *cev, Event::Attr attr) 
-{
-@@@{
-        $indent = "\t";
-        typeswitch '_common_', undef,'jobid';
-@@@}
-       switch (cev->type) {
-@@@{
-       $indent = "\t\t";
-       for my $t (getTypes $event) {
-               gen "\t\tcase Event::".uc($t).":\n";
-               typeswitch $t,'goto badattr;','jobid';
-       }
-@@@}
-               default:
-                 STACK_ADD;
-                 throw(Exception(EXCEPTION_MANDATORY, EINVAL, 
-                                 "attribute is not of jobid type"));
-       }
-badattr:
-       STACK_ADD;
-       throw(Exception(EXCEPTION_MANDATORY, ENOENT, "invalid attribute"));
-       return NULL; /* gcc, shut up! */
-}
-
-const 
-glite::wmsutils::jobid::JobId 
-Event::getValJobId(Attr attr) const
-{
-       edg_wll_Event const *cev = (edg_wll_Event *) flesh->ptr;
-       try {
-               edg_wlc_JobId job_id = get_val_jobid(cev,attr);
-               return(glite::wmsutils::jobid::JobId(job_id));
-       } 
-       catch (Exception &e) {
-               STACK_ADD;
-               throw;
-       }
-
-}
-
-
-static std::string const names[Event::TYPE_MAX] = {
-  "undefined",
-@@@{
-  for (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-        $event->getTypes)
-  {
-    gen "\t\"$_\",\n";
-  }
-@@@}
-};
-
-const std::string  & 
-Event::name(void) const
-{
-  if (type<0 || type>TYPE_MAX) {
-    STACK_ADD;
-    throw(Exception(EXCEPTION_MANDATORY, EINVAL, "invalid event type"));
-  }
-  return names[type];
-}
-
-
-static 
-std::string const attr_names[Event::ATTR_MAX] = {
-@@@{
-       for (sort {$a cmp $b} getAllFields $event) {
-               gen "\t\"$_\",\n";
-       }
-@@@}
-};
-
-
-const std::string & 
-Event::getAttrName(Attr attr) const
-{
-  if (attr<0 || attr>=ATTR_MAX) {
-    STACK_ADD;
-    throw(Exception(EXCEPTION_MANDATORY, EINVAL, "invalid attribute"));
-  }
-  return attr_names[attr];
-}
-
-
-typedef std::pair<Event::Attr,Event::AttrType> tpair;
-static std::vector<tpair> attrs[Event::TYPE_MAX];
-
-#define apush(etype,attr,atype) \
-       attrs[etype].push_back(tpair(attr,atype))
-
-static bool attrs_inited = false;
-
-static void init_attrs(void)
-{
-@@@{
-       for my $t (getTypes $event) {
-               my $tu = uc $t;
-               selectType $event '_common_';
-               for (getFields $event) {
-                       my $fu = uc $_;
-                       my $f = selectField $event $_;
-                       my $ftu = uc "$f->{type}_T";
-                       gen "\tapush(Event::$tu,Event::$fu,Event::$ftu);\n";
-               }
-               selectType $event $t;
-               for (getFields $event) {
-                       my $fu = uc $_;
-                       my $f = selectField $event $_;
-                       my $ftu = uc "$f->{type}_T";
-                       gen "\tapush(Event::$tu,Event::$fu,Event::$ftu);\n";
-               }
-       }
-@@@}
-}
-
-std::vector<std::pair<Event::Attr,Event::AttrType> > const & Event::getAttrs(void) const
-{
-  if (type<0 || type>=TYPE_MAX) {
-    STACK_ADD;
-    throw(Exception(EXCEPTION_MANDATORY, EINVAL, "invalid event type"));
-  }
-  
-  /* FIXME: thread safety */
-  if (!attrs_inited) {
-    init_attrs();
-    attrs_inited = true;
-  }
-  
-  return attrs[type];
-}
-
-
-void 
-Event::destroyFlesh(void *in) 
-{
-  edg_wll_FreeEvent((edg_wll_Event *) in);
-  free(in);
-}
-
-EWL_END_NAMESPACE;
diff --git a/org.glite.lb.client/src/Job.cpp b/org.glite.lb.client/src/Job.cpp
deleted file mode 100644 (file)
index 81ddbe4..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-#ident "$Header$"
-
-/**
- * @file Job.cpp
- * @version $Revision$
- */
-
-
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <string>
-
-#include "glite/wmsutils/jobid/JobIdExceptions.h"
-
-#include "glite/lb/Job.h"
-#include "glite/lb/LoggingExceptions.h"
-#include "glite/lb/consumer.h"
-#include "glite/lb/context-int.h"
-
-EWL_BEGIN_NAMESPACE;
-
-#define CLASS_PREFIX "glite::lb::Job::"
-
-const int Job::STAT_CLASSADS = EDG_WLL_STAT_CLASSADS;
-const int Job::STAT_CHILDREN = EDG_WLL_STAT_CHILDREN;
-const int Job::STAT_CHILDSTAT = EDG_WLL_STAT_CHILDSTAT;
-
-Job::Job(void) 
-{
-}
-
-
-Job::Job(const glite::wmsutils::jobid::JobId &in) 
-{
-  try {
-    jobId = in;
-  } catch (Exception &e) {
-    STACK_ADD;
-    throw;
-  }
-}
-
-
-Job::~Job(void) 
-{
-}
-
-
-Job & Job::operator= (const glite::wmsutils::jobid::JobId &in) 
-{
-  try {
-    jobId = in;
-    return *this;
-  } catch (Exception &) {
-    STACK_ADD;
-    throw;
-  }
-}
-
-
-JobStatus 
-Job::status(int flags) const
-{
-  JobStatus      jobStatus;
-
-  try {
-    edg_wll_JobStat    *cstat = jobStatus.c_ptr();
-    int ret = edg_wll_JobStatus(server.getContext(),
-                               jobId, // automagically converted by member operator
-                               flags,
-                               cstat);
-    check_result(ret,
-                server.getContext(),
-                "edg_wll_JobStatus");
-
-/* XXX the enums match due to automatic generation */
-    jobStatus.status = (JobStatus::Code) cstat->state;
-    
-    return(jobStatus);
-
-  } catch (Exception &e) {
-    STACK_ADD;
-    throw;
-  }
-}
-
-
-void 
-Job::log(std::vector<Event> &eventList) const
-{
-  edg_wll_Event *events = NULL,*ev;
-  int             result, qresults_param;
-  char            *errstr = NULL;
-  edg_wll_Context context;
-
-  try {
-    context = server.getContext();
-    result = edg_wll_JobLog(context, jobId, &events);
-    if (result == E2BIG) {
-           edg_wll_Error(context, NULL, &errstr);
-           check_result(edg_wll_GetParam(context,
-                                   EDG_WLL_PARAM_QUERY_RESULTS, &qresults_param),
-                           context,
-                           "edg_wll_GetParam(EDG_WLL_PARAM_QUERY_RESULTS)");
-           if (qresults_param != EDG_WLL_QUERYRES_LIMITED) {
-                   edg_wll_SetError(context, result, errstr);
-                   check_result(result, context,"edg_wll_JobLog");
-               }
-    } else {
-           check_result(result, context,"edg_wll_JobLog");
-    }
-
-    for (int i=0; events[i].type != EDG_WLL_EVENT_UNDEF; i++) {
-       ev = (edg_wll_Event *) malloc(sizeof *ev);
-       memcpy(ev,events+i,sizeof *ev);
-      eventList.push_back(Event(ev)); 
-    }
-
-    free(events);
-
-    if (result) {
-           edg_wll_SetError(context, result, errstr);
-           check_result(result, context,"edg_wll_JobLog");
-    }
-  } catch (Exception &e) {
-    if(errstr) free(errstr);
-
-    STACK_ADD;
-    throw;
-  }
-
-}
-
-
-const std::vector<Event> 
-Job::log(void) const
-{
-  std::vector<Event>   eventList;
-  
-  log(eventList);
-  return(eventList);
-}
-
-
-const std::pair<std::string,u_int16_t> 
-Job::queryListener(std::string const & name) const
-{
-  std::string  host;
-  char *c_host = NULL;
-  uint16_t   port;
-
-  try {
-    int ret = edg_wll_QueryListener(server.getContext(),
-                                      jobId,
-                                      name.c_str(),
-                                      &c_host,
-                                      &port);
-    check_result(ret,
-                server.getContext(),
-                "edg_wll_QueryListener");
-    
-    host = c_host;
-    free(c_host);
-    return(std::pair<std::string,u_int16_t>(host,port));    
-
-  } catch (Exception &e) {
-    if(c_host) free(c_host);
-    STACK_ADD;
-    throw;
-  }
-}
-
-
-void Job::setParam(edg_wll_ContextParam par, int val)
-{
-       server.setParam(par,val);
-}
-
-void Job::setParam(edg_wll_ContextParam par, const std::string val)
-{
-       server.setParam(par,val);
-}
-void Job::setParam(edg_wll_ContextParam par, const struct timeval & val)
-{
-       server.setParam(par,val);
-}
-
-int Job::getParamInt(edg_wll_ContextParam par) const
-{
-       return server.getParamInt(par);
-}
-
-std::string Job::getParamString(edg_wll_ContextParam par) const
-{
-       return server.getParamString(par);
-}
-
-struct timeval Job::getParamTime(edg_wll_ContextParam par) const
-{
-       return server.getParamTime(par);
-}
-
-  
-
-EWL_END_NAMESPACE;
diff --git a/org.glite.lb.client/src/JobStatus.cpp.T b/org.glite.lb.client/src/JobStatus.cpp.T
deleted file mode 100644 (file)
index df9609b..0000000
+++ /dev/null
@@ -1,481 +0,0 @@
-#include <utility>
-#include <vector>
-#include <string>
-#include <errno.h>
-#include <stdlib.h>
-
-#include "glite/wmsutils/jobid/JobId.h"
-
-#include "glite/lb/JobStatus.h"
-#include "glite/lb/LoggingExceptions.h"
-#include "glite/lb/consumer.h"
-
-
-EWL_BEGIN_NAMESPACE;
-
-#define CLASS_PREFIX "glite::lb::JobStatus::"
-
-@@@{
-sub typeswitch {
-        my ($ftype,$ctype,$resc) = @_;
-        local $_;
-
-       $resc = "break;" unless $resc;
-
-        gen $indent."switch (attr) {\n";
-        selectType $status $ftype;
-        for (getFields $status) {
-                my $f = selectField $status $_;
-                if($f->{type} eq $ctype) {
-                 my $fnu = $f->{name};
-                 $fnu =~ s/([a-z])([A-Z])/$1_$2/g;
-                 $fnu = uc $fnu;
-                 my $cname = getName $f 'C';
-                 gen "$indent\tcase JobStatus::$fnu: return cstat->$cname;\n"
-               };
-               # XXX: when there are conversion functions, we may get these as strings as well
-               #elsif (($f->{type} eq "int") && 
-               #        ($ctype eq "string") && 
-               #        $f->{codes}) {
-               #  my $fnu = $f->{name};
-               #  $fnu =~ s/([a-z])([A-Z])/$1_$2/g;
-               #  $fnu = uc $fnu;
-               #  my $cname = getName $f 'C';
-               #  my $fn = $ftype eq '_common_' ? "" : ucfirst $ftype;
-               #  my $c =  $fn . ucfirst $f->{name}; 
-               #  $cast = ($c eq 'Level') ? "(edg_wll_Level)" : "";
-               #  gen "$indent\tcase JobStatus::$fnu: return((const char *)edg_wll_${c}ToString(${cast}cstat->$cname));\n";            }
-        }
-        gen "$indent\tdefault: $resc\n" if $resc;
-        gen "$indent\}\n";
-}
-@@@}
-
-JobStatus::JobStatus(void)
-{
-  status = UNDEF;
-  flesh = 0;
-}
-
-JobStatus::JobStatus(const JobStatus & in)
-{
-  status = in.status;
-  flesh = in.flesh;
-  if (flesh) flesh->use();
-}
-
-JobStatus & 
-JobStatus::operator=(const JobStatus & in)
-{
-  if (flesh) flesh->release();
-  status = in.status;
-  flesh = in.flesh;
-  if (flesh) flesh->use();
-  return *this;
-}
-
-JobStatus::JobStatus(const edg_wll_JobStat & in)
-{
-  status = (Code)in.state;
-  flesh = new CountRef<JobStatus>((void*)&in);
-}
-JobStatus & 
-JobStatus::operator=(const edg_wll_JobStat & in)
-{
-  if(flesh)
-    flesh->release();
-  status = (Code)in.state;
-  flesh = new CountRef<JobStatus>((void*)&in);
-  return(*this);
-}
-
-JobStatus::~JobStatus()
-{
-  if (flesh) flesh->release();
-}
-
-edg_wll_JobStat *
-JobStatus::c_ptr(void)
-{
-  edg_wll_JobStat *s;
-
-  if(flesh)
-    return((edg_wll_JobStat*)flesh->ptr);
-
-  s = new edg_wll_JobStat;
-  // XXX - is it neccessary? new should throw exception itself... 
-  if(!s) throw(Exception(EXCEPTION_MANDATORY,
-                        ENOMEM,
-                        "out of memory allocating c-struct for JobStatus"));
-
-  edg_wll_InitStatus(s);
-  flesh = new CountRef<JobStatus>((void*)s);
-  return(s);
-}
-
-
-static std::string const names[JobStatus::CODE_MAX] = {
-       "undefined",
-@@@{
-       for (sort { $status->{order}->{$a} <=> $status->{order}->{$b} }
-               $status->getTypes)
-       {
-               gen "\t\"$_\",\n";
-       }
-@@@}
-};
-
-const std::string& JobStatus::name(void) const
-{
-  if (status<0 || status>=CODE_MAX) {
-    STACK_ADD;
-    throw(Exception(EXCEPTION_MANDATORY, 
-                   EINVAL,
-                   "status code invalid"));
-  }
-  return names[status];
-}
-
-int JobStatus::getValInt(JobStatus::Attr attr) const
-{
-  edg_wll_JobStat const *cstat = (edg_wll_JobStat *) flesh->ptr;
-@@@{
-    $indent = "\t";
-    typeswitch '_common_','int';
-@@@}
-
- STACK_ADD; 
- throw(Exception(EXCEPTION_MANDATORY,
-                ENOENT,
-                "no such attribute"));
- return -1;    /* make gcc shut up -- never returns */
-}
-
-bool JobStatus::getValBool(JobStatus::Attr attr) const
-{
-  edg_wll_JobStat const *cstat = (edg_wll_JobStat *) flesh->ptr;
-@@@{
-    $indent = "\t";
-    typeswitch '_common_','bool';
-@@@}
-
- STACK_ADD; 
- throw(Exception(EXCEPTION_MANDATORY,
-                ENOENT,
-                "no such attribute"));
- return -1;    /* make gcc shut up -- never returns */
-}
-
-static const char *
-get_string_val(const edg_wll_JobStat *cstat,JobStatus::Attr attr)
-{
-@@@{
-       $indent = "\t";
-       typeswitch '_common_','string';
-@@@}
- STACK_ADD;
- throw(Exception(EXCEPTION_MANDATORY,
-                ENOENT,
-                "no such attribute"));
- return 0;     /* make gcc shut up -- never returns */
-}
-
-std::string 
-JobStatus::getValString(JobStatus::Attr attr) const
-{
-  edg_wll_JobStat const *cstat = (edg_wll_JobStat *) flesh->ptr;
-  std::string  ret;
-  
-  try{
-    const char *s = get_string_val(cstat,attr);
-    if (s) ret.assign(s);
-    return ret;
-  } catch (Exception &e) {
-    STACK_ADD;
-    throw;
-  }
-}
-
-
-struct timeval 
-JobStatus::getValTime(Attr attr) const
-{
-  edg_wll_JobStat const *cstat = (edg_wll_JobStat *) flesh->ptr;
-
-@@@{
-       $indent = "\t";
-       typeswitch '_common_','timeval';
-@@@}
- STACK_ADD;
- throw(Exception(EXCEPTION_MANDATORY,
-                ENOENT,
-                "no such attribute"));
-}
-
-
-const
-edg_wlc_JobId 
-get_val_jobid(edg_wll_JobStat const *cstat, JobStatus::Attr attr)
-{
-@@@{
-       $indent = "\t";
-       typeswitch '_common_','jobid';
-@@@}
- STACK_ADD;
- throw(Exception(EXCEPTION_MANDATORY,
-                ENOENT,
-                "no such attribute"));
- return 0;     /* make gcc shut up -- never returns */
-}
-
-
-const 
-glite::wmsutils::jobid::JobId  
-JobStatus::getValJobId(Attr attr) const
-{
-  edg_wll_JobStat const *cstat = (edg_wll_JobStat *) flesh->ptr;
-
-  try {
-         edg_wlc_JobId job_id = get_val_jobid(cstat, attr);
-         return(glite::wmsutils::jobid::JobId(job_id));
-  }
-  catch(Exception &e) {
-         STACK_ADD;
-         throw;
-  }
-}
-
-const
-int *
-get_val_intlist(edg_wll_JobStat const *cstat, JobStatus::Attr attr)
-{
-@@@{
-       $indent = "\t";
-       typeswitch '_common_','intlist';
-@@@}
-  STACK_ADD;
-  throw(Exception(EXCEPTION_MANDATORY,
-                 ENOENT,
-                 "no such attribute"));
-  return 0;    /* make gcc shut up -- never returns */
-}
-
-
-const 
-std::vector<int>
-JobStatus::getValIntList(Attr attr) const
-{
-       edg_wll_JobStat const *cstat = (edg_wll_JobStat *) flesh->ptr;
-
-       std::vector<int> result;
-       const int *r;
-       
-       try {
-               r = get_val_intlist(cstat, attr);
-               if(r)
-                       for(int i = 1; i <= r[0]; i++)
-                               result.push_back(r[i]);
-       } catch(Exception &e) {
-               STACK_ADD;
-               throw;
-       }
-       return result;
-}
-
-
-char ** const
-get_val_stringlist(edg_wll_JobStat const *cstat, JobStatus::Attr attr)
-{
-@@@{
-       $indent = "\t";
-       typeswitch '_common_','strlist';
-@@@}
-  STACK_ADD;
-  throw(Exception(EXCEPTION_MANDATORY,
-                 ENOENT,
-                 "no such attribute"));
-  return 0;    /* make gcc shut up -- never returns */
-}
-
-
-const
-std::vector<std::string>
-JobStatus::getValStringList(Attr attr) const
-{
-       edg_wll_JobStat const *cstat = (edg_wll_JobStat *) flesh->ptr;
-
-       std::vector<std::string> result;
-       char **r , **p;
-
-       try {
-               r = (char**)get_val_stringlist(cstat, attr);
-               if(r)
-                       for(p = r; *p; p++)
-                               result.push_back(std::string(*p));
-       } catch(Exception &e) {
-               STACK_ADD;
-               throw;
-       }
-       return result;
-}
-
-
-edg_wll_TagValue * const
-get_val_taglist(edg_wll_JobStat const *cstat, JobStatus::Attr attr)
-{
-@@@{
-       $indent = "\t";
-       typeswitch '_common_','taglist';
-@@@}
-  STACK_ADD;
-  throw(Exception(EXCEPTION_MANDATORY,
-                 ENOENT,
-                 "no such attribute"));
-  return 0;    /* make gcc shut up -- never returns */
-}
-
-
-const
-std::vector<std::pair<std::string,std::string> >
-JobStatus::getValTagList(Attr attr) const
-{
-       edg_wll_JobStat const *cstat = (edg_wll_JobStat *) flesh->ptr;
-
-       std::vector<std::pair<std::string,std::string> > result;
-       edg_wll_TagValue *r , *p;
-
-       try {
-               r = get_val_taglist(cstat, attr);
-               if(r)
-                       for(p = r; p->tag ; p++)
-                               result.push_back(std::pair<std::string,std::string>
-                                                       (std::string(p->tag),std::string(p->value)));
-       } catch(Exception &e) {
-               STACK_ADD;
-               throw;
-       }
-       return result;
-}
-
-
-const
-edg_wll_JobStat *
-get_val_stslist(edg_wll_JobStat const *cstat, JobStatus::Attr attr)
-{
-@@@{
-       $indent = "\t";
-       typeswitch '_common_','stslist';
-@@@}
-  STACK_ADD;
-  throw(Exception(EXCEPTION_MANDATORY,
-                 ENOENT,
-                 "no such attribute"));
-  return 0;    /* make gcc shut up -- never returns */
-}
-
-
-const
-std::vector<JobStatus>
-JobStatus::getValJobStatusList(Attr attr) const
-{
-       edg_wll_JobStat const *cstat = (edg_wll_JobStat *) flesh->ptr;
-
-       std::vector<JobStatus> result;
-       const edg_wll_JobStat *r, *p;
-
-       try {
-               r = get_val_stslist(cstat, attr);
-               if(r)
-                       for(p=r; p->state != EDG_WLL_JOB_UNDEF; p++) {
-                               edg_wll_JobStat *jsep = new edg_wll_JobStat;
-                               if (!edg_wll_CpyStatus(p,jsep)) {
-                                       STACK_ADD;
-                                       throw(Exception(EXCEPTION_MANDATORY,
-                                       ENOMEM,
-                                       "cannot copy edg_wll_JobStat"));
-                               }
-                               result.push_back(JobStatus(*jsep));
-                       }
-       } catch(Exception &e) {
-               STACK_ADD;
-               throw;
-       }
-       return(result);
-}
-
-
-static std::string const attr_names[JobStatus::ATTR_MAX] = {
-@@@{
-       for (sort {$a cmp $b} getAllFields $status) {
-               gen "\t\"$_\",\n";
-       }
-@@@}
-};
-
-const std::string & 
-JobStatus::getAttrName(JobStatus::Attr attr) const
-{
-  if (attr<0 || attr>=ATTR_MAX) {
-    STACK_ADD;
-    throw(Exception(EXCEPTION_MANDATORY,
-                   ENOENT,
-                   "no such attribute"));
-  }
-
-  return attr_names[attr];
-}
-
-
-typedef std::pair<JobStatus::Attr,JobStatus::AttrType> tpair;
-static std::vector<tpair> attrs;
-
-static bool attrs_inited = false;
-
-static void init_attrs(void)
-{
-/* XXX: currently only common attributes in JobStatus */
-@@@{
-       selectType $status '_common_';
-       for (getFields $status) {
-               my $fu = $_;
-               my $f = selectField $status $_;
-                my $ftu = uc "$f->{type}_T";
-               $fu =~ s/([a-z])([A-Z])/$1_$2/g;
-               $fu = uc $fu;
-
-               gen "\tattrs.push_back(tpair(JobStatus::$fu,JobStatus::$ftu));\n";
-       }
-@@@}
-}
-
-
-const std::vector<tpair>& 
-JobStatus::getAttrs(void) const
-{
-  if (status<0 || status>=CODE_MAX) {
-    STACK_ADD;
-    throw(Exception(EXCEPTION_MANDATORY,
-                   EINVAL,
-                   "status code invalid"));
-  }
-
-/* FIXME: thread safety */
-  if (!attrs_inited) {
-    init_attrs();
-    attrs_inited = true;
-  }
-  return attrs;
-}
-
-void 
-JobStatus::destroyFlesh(void *p)
-{
-  edg_wll_JobStat *stat = (edg_wll_JobStat *) p;
-  if (stat) {
-    edg_wll_FreeStatus(stat);
-    free(stat);
-  }
-}
-
-EWL_END_NAMESPACE;
diff --git a/org.glite.lb.client/src/Notification.cpp b/org.glite.lb.client/src/Notification.cpp
deleted file mode 100644 (file)
index 0441626..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-#ident "$Header$"
-
-/**
- * @file Notification.cpp
- * @version $Revision$
- */
-
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <string>
-#include <vector>
-
-#include "glite/lb/Notification.h"
-#include "glite/lb/JobStatus.h"
-#include "glite/lb/LoggingExceptions.h"
-#include "glite/lb/ServerConnection.h"
-
-#include "glite/lb/notifid.h"
-#include "glite/lb/notification.h"
-
-EWL_BEGIN_NAMESPACE;
-
-#define CLASS_PREFIX "glite::lb::Notification::"
-
-/* external prototypes */
-extern edg_wll_QueryRec **
-convertQueryVectorExt(const std::vector<std::vector<glite::lb::QueryRecord> > &);
-
-extern void
-freeQueryRecVector(edg_wll_QueryRec *);
-
-/* Constructors */
-Notification::Notification(void) 
-{
-   try {
-       int ret = edg_wll_InitContext(&this->ctx);
-       check_result(ret,this->ctx,"edg_wll_InitContext");
-       this->notifId = NULL;
-       this->valid = 0;
-   } catch (Exception &e) {
-       STACK_ADD;
-       throw;
-   }
-}
-
-Notification::Notification(const std::string notifid_str)
-{
-   try {
-       char *host;
-       unsigned int port;
-       int ret = edg_wll_InitContext(&this->ctx);
-       check_result(ret,this->ctx,"edg_wll_InitContext");
-       ret = edg_wll_NotifIdParse(notifid_str.c_str(),&this->notifId);
-       check_result(ret,this->ctx,"edg_wll_NotifIdParse");
-       edg_wll_NotifIdGetServerParts(this->notifId,&host,&port);
-       edg_wll_SetParam(this->ctx, EDG_WLL_PARAM_NOTIF_SERVER, host);
-       edg_wll_SetParam(this->ctx, EDG_WLL_PARAM_NOTIF_SERVER_PORT, port);
-       free(host);
-       this->valid = 0;
-   } catch (Exception &e) {
-       STACK_ADD;
-       throw;
-   }
-}
-
-Notification::Notification(const std::string host,const u_int16_t port)
-{
-   try {
-       int ret = edg_wll_InitContext(&ctx);
-       check_result(ret,ctx,"edg_wll_InitContext");
-       edg_wll_SetParam(ctx, EDG_WLL_PARAM_NOTIF_SERVER, host.c_str());
-       edg_wll_SetParam(ctx, EDG_WLL_PARAM_NOTIF_SERVER_PORT, port);
-       this->notifId = NULL;
-       this->valid = 0;
-       check_result(ret,ctx,"edg_wll_NotifIdCreate");
-   } catch (Exception &e) {
-       STACK_ADD;
-       throw;
-   }
-}
-
-/* Destructor */
-Notification::~Notification(void) 
-{ 
-   try {
-       edg_wll_FreeContext(this->ctx);
-       edg_wll_NotifIdFree(this->notifId);
-   } catch (Exception &e) {
-       STACK_ADD;
-       throw;
-   }
-}
-
-/* Methods */
-std::string
-Notification::getNotifId(void) const
-{
-   try {
-       std::string notifid_str;
-       if (this->notifId != NULL) {
-               notifid_str = edg_wll_NotifIdUnparse(this->notifId);
-               return(notifid_str);
-       } else {
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "notifId not known at the moment");
-       }
-   } catch (Exception &e) {
-       STACK_ADD;
-       throw;
-   }
-}
-
-time_t
-Notification::getValid(void) const
-{
-   return(this->valid);
-}
-
-int
-Notification::getFd(void) const
-{
-   try {
-       int ret = edg_wll_NotifGetFd(this->ctx);
-       check_result(ret,this->ctx,"edg_wll_NotifGetFd");
-       return(ret);
-   } catch (Exception &e) {
-       STACK_ADD;
-       throw;
-   }
-}
-
-void
-Notification::addJob(const glite::wmsutils::jobid::JobId &jobId)
-{
-   std::vector<glite::wmsutils::jobid::JobId>::iterator it;
-
-   try {
-       if (this->notifId != NULL) {
-       STACK_ADD;
-       throw Exception(EXCEPTION_MANDATORY, EINVAL, "adding jobs allowed only before registering");
-       }
-       for( it = jobs.begin(); it != jobs.end(); it++ ) {
-               if ( (*it).toString() == jobId.toString() ) {
-                       STACK_ADD;
-                       throw Exception(EXCEPTION_MANDATORY, EINVAL, "job already exists");
-               }
-       }
-       jobs.push_back(jobId);
-
-   } catch (Exception &e) {
-       STACK_ADD;
-       throw;
-   }
-}
-
-void
-Notification::removeJob(const glite::wmsutils::jobid::JobId &jobId)
-{
-   std::vector<glite::wmsutils::jobid::JobId>::iterator it;
-   int removed = 0;
-
-   try {
-       if (this->notifId != NULL) {
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "removing jobs allowed only before registering");
-       }
-       for( it = jobs.begin(); it != jobs.end(); it++ ) {
-               if ( (*it).toString() == jobId.toString() ) {
-                       jobs.erase(it);
-                       removed += 1;
-//                     break;
-               }
-       }
-   } catch (Exception &e) {
-       STACK_ADD;
-       throw;
-   }
-
-   if (removed == 0) {
-       STACK_ADD;
-       throw Exception(EXCEPTION_MANDATORY, EINVAL, "no job to remove");
-   }
-}
-
-/* XXX: obsolete, used only for debugging purposes */
-
-std::string 
-Notification::getJobs(void)
-{
-   std::vector<glite::wmsutils::jobid::JobId>::iterator it;
-   std::string ret="";
-
-   try {
-       for( it = jobs.begin(); it != jobs.end(); it++ ) {
-               ret += (*it).toString();
-               ret += "\n";
-       }
-       return ret;
-
-   } catch (Exception &e) {
-       STACK_ADD;
-       throw;
-   }
-}
-
-void
-Notification::setStates(const std::vector<glite::lb::JobStatus::Code> &jobStates)
-{
-       if (this->notifId != NULL) {
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "removing jobs allowed only before registering");
-       }
-       states = jobStates;     
-}
-
-std::string 
-Notification::getStates(void)
-{
-   std::vector<glite::lb::JobStatus::Code>::iterator it;
-   JobStatus js;
-   std::string ret="";
-
-   try {
-       for( it = states.begin(); it != states.end(); it++ ) {
-               js.status = (*it);
-               ret += js.name();
-               ret += "\n";
-       }
-       return ret;
-
-   } catch (Exception &e) {
-       STACK_ADD;
-       throw;
-   }
-}
-
-void
-Notification::Register(void)
-{
-   int ret = 0;
-   std::vector<glite::wmsutils::jobid::JobId>::iterator it;
-   std::vector<glite::lb::JobStatus::Code>::iterator its;
-   std::vector<std::vector<glite::lb::QueryRecord> > queryExt;
-   edg_wll_QueryRec **conditions = NULL;
-   unsigned i;
-
-   try {
-       if (this->notifId != NULL) {
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "registering job allowed only once");
-       }
-       /* fill in the query: */
-       std::vector<glite::lb::QueryRecord> query;
-       for( it = jobs.begin(); it != jobs.end(); it++ ) {
-               QueryRecord r0(QueryRecord::JOBID,QueryRecord::EQUAL,*it);
-               query.push_back(r0);
-       }
-       queryExt.push_back(query);
-       query.clear();
-
-       for( its = states.begin(); its != states.end(); its++ ) {
-               QueryRecord r(QueryRecord::STATUS,QueryRecord::EQUAL,*its);
-               query.push_back(r);
-       }
-       queryExt.push_back(query);
-
-       /* convert query to conditions */
-       conditions = convertQueryVectorExt(queryExt);
-       /* register */
-       ret = edg_wll_NotifNew(ctx,conditions,-1,NULL,&notifId,&valid);
-       check_result(ret,ctx,"edg_wll_NotifNew");
-       /* clean */
-       if (conditions) {
-               for( i = 0; conditions[i]; i++ ) {
-// FIXME: not working :o(
-//                     freeQueryRecVector(conditions[i]);
-                       delete[] conditions[i];
-               }
-               delete[] conditions;
-       }
-   } catch (Exception &e) {
-       /* clean */
-       if (conditions) {
-               for( i = 0; conditions[i]; i++ ) {
-// FIXME: not working :o(
-//                     freeQueryRecVector(conditions[i]);
-                       delete[] conditions[i];
-               }
-               delete[] conditions;
-       }
-       STACK_ADD;
-       throw;
-   }
-}
-
-void
-Notification::Bind(const std::string address_override)
-{
-       try {
-               if (this->notifId == NULL) {
-                       STACK_ADD;
-                       throw Exception(EXCEPTION_MANDATORY, EINVAL, "binding allowed only for given notifId");
-               }
-               int ret = edg_wll_NotifBind(this->ctx,this->notifId,-1,address_override.c_str(),&this->valid);
-               check_result(ret,this->ctx,"edg_wll_NotifBind");
-       }
-       catch (Exception &e) {
-               STACK_ADD;
-               throw;
-       }
-}
-
-
-               
-
-int Notification::receive(glite::lb::JobStatus &jobStatus,timeval &timeout)
-{
-   try {
-       int ret = 0;
-       edg_wll_JobStat *status = (edg_wll_JobStat *) calloc(1,sizeof(edg_wll_JobStat));
-       if (status == NULL) {
-                       STACK_ADD;
-                       throw OSException(EXCEPTION_MANDATORY, ENOMEM, "allocating jobStatus");
-       }
-       ret = edg_wll_NotifReceive(ctx,-1,&timeout,status,&notifId);
-       if ( ret == ETIMEDOUT )
-               return 1;
-       check_result(ret,ctx,"edg_wll_NotifReceive");
-       jobStatus = JobStatus(*status);
-       return 0;
-   }
-   catch (Exception &e) {
-       STACK_ADD;
-       throw;
-   }
-}
-
-EWL_END_NAMESPACE;
diff --git a/org.glite.lb.client/src/ServerConnection.cpp b/org.glite.lb.client/src/ServerConnection.cpp
deleted file mode 100644 (file)
index 319bd0f..0000000
+++ /dev/null
@@ -1,1302 +0,0 @@
-//#ident "$Header$"
-
-/**
- * @file ServerConnection.cpp
- * @version $Revision$
- */
-#include <string>
-#include <utility>
-#include <vector>
-
-#include <time.h>
-#include <errno.h>
-#include <stdio.h>
-
-#include <expat.h>
-
-#include "glite/wmsutils/jobid/JobId.h"
-#include "glite/wmsutils/jobid/JobIdExceptions.h"
-#include "glite/lb/context-int.h"
-#include "glite/lb/xml_conversions.h"
-
-#include "glite/lb/ServerConnection.h"
-#include "glite/lb/LoggingExceptions.h"
-
-EWL_BEGIN_NAMESPACE;
-
-/**
- * definitions of QueryRecord class
- */
-#define CLASS_PREFIX "glite::lb::QueryRecord::"
-
-
-QueryRecord::QueryRecord(const Attr a, 
-                        const Op o, 
-                        const std::string & v)
-       : attr(a), oper(o),  state(EDG_WLL_JOB_UNDEF), string_value(v)
-{
-       switch(a) {
-       case OWNER:
-       case LOCATION:
-       case DESTINATION:
-       case HOST:
-       case INSTANCE:
-               break;
-
-       default:
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "invalid value for attribute: " + v);
-       }
-}
-
-
-QueryRecord::QueryRecord(const Attr a, 
-                        const Op o, 
-                        const int v)
-  : attr(a), oper(o), state(EDG_WLL_JOB_UNDEF), int_value(v)
-{
-       switch(a) {
-       case DONECODE:
-       case STATUS:
-       case SOURCE:
-       case EVENT_TYPE:
-       case LEVEL:
-       case EXITCODE:
-               break;
-
-       default:
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "attribute is not of integer type");
-       }
-}
-
-
-QueryRecord::QueryRecord(const Attr a, 
-                        const Op o, 
-                        const struct timeval& v)
-  : attr(a), oper(o), state(EDG_WLL_JOB_UNDEF), timeval_value(v)
-{
-       switch(a) {
-       case TIME:
-               break;
-
-       default:
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "attribute is not of timeval type");
-       }
-}
-
-
-QueryRecord::QueryRecord(const Attr a, 
-                        const Op o, 
-                        const glite::wmsutils::jobid::JobId& v)
-       : attr(a), oper(o), state(EDG_WLL_JOB_UNDEF), jobid_value(v)
-{
-       switch(a) {
-       case JOBID:
-       case PARENT:
-               break;
-
-       default:
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "attribute is not of JobId type");
-       }
-}
-
-
-QueryRecord::QueryRecord(const Attr a,
-                        const Op o,
-                        const int s,
-                        const struct timeval &v)
-       : attr(a), oper(o), state(s), timeval_value(v)
-{
-       switch(a) {
-       case TIME:
-               break;
-
-       default:
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "attribute is not of timeval type");
-       }
-}
-
-
-QueryRecord::QueryRecord(const Attr a,
-                        const Op o,
-                        const std::string &v1,
-                        const std::string &v2)
-       : attr(a), oper(o), state(EDG_WLL_JOB_UNDEF), string_value(v1), string_value2(v2)
-{
-       switch(a) {
-       case OWNER:
-       case LOCATION:
-       case DESTINATION:
-       case HOST:
-       case INSTANCE:
-               break;
-
-       default:
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "invalid value for attribute type");
-       }
-       if(o != WITHIN) {
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "only operator WITHIN allowed with two values");
-       }
-}
-
-
-QueryRecord::QueryRecord(const Attr a,
-                        const Op o,
-                        const int v1,
-                        const int v2)
-       : attr(a), oper(o), state(EDG_WLL_JOB_UNDEF), int_value(v1), int_value2(v2)
-{
-       switch(a) {
-       case DONECODE:
-       case STATUS:
-       case SOURCE:
-       case EVENT_TYPE:
-       case LEVEL:
-       case EXITCODE:
-               break;
-
-       default:
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "attribute is not of integer type");
-       }
-       if(o != WITHIN) {
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "only operator WITHIN allowed with two values");
-       }
-}
-
-
-QueryRecord::QueryRecord(const Attr a,
-                        const Op o,
-                        const struct timeval &v1,
-                        const struct timeval &v2)
-       : attr(a), oper(o), state(EDG_WLL_JOB_UNDEF), timeval_value(v1), timeval_value2(v2)
-{
-       switch(a) {
-       case TIME:
-               break;
-
-       default:
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "attribute is not of timeval type");
-       }
-       if(o != WITHIN) {
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "only operator WITHIN allowed with two values");
-       }
-}
-
-
-QueryRecord::QueryRecord(const Attr a,
-                        const Op o,
-                        const int s,
-                        const struct timeval &v1,
-                        const struct timeval &v2)
-       : attr(a), oper(o), state(s), timeval_value(v1), timeval_value2(v2)
-{
-       switch(a) {
-       case TIME:
-               break;
-
-       default:
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "attribute is not of timeval type");
-       }
-       if(o != WITHIN) {
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "only operator WITHIN allowed with two values");
-       }
-}
-
-
-QueryRecord::QueryRecord(const std::string &tag,
-                        const Op o,
-                        const std::string &val)
-       : attr(USERTAG), oper(o), tag_name(tag), state(EDG_WLL_JOB_UNDEF), string_value(val)
-{
-}
-
-
-QueryRecord::QueryRecord(const std::string &tag,
-                        const Op o,
-                        const std::string &v1,
-                        const std::string &v2)
-       : attr(USERTAG), oper(o), tag_name(tag), state(EDG_WLL_JOB_UNDEF), 
-         string_value(v1), string_value2(v2)
-         
-{
-       if(o != WITHIN) {
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "only operator WITHIN allowed with two values");
-       }
-}
-
-
-QueryRecord::QueryRecord(const QueryRecord &src)
-{
-       attr = src.attr;
-       oper = src.oper;
-
-       switch (attr) {
-
-       case USERTAG:
-               tag_name = src.tag_name;
-
-       case OWNER:
-       case LOCATION:
-       case DESTINATION:
-       case HOST:
-       case INSTANCE:
-               string_value = src.string_value;
-               if(src.oper == WITHIN)
-                       string_value2 = src.string_value2;
-               break;
-
-       case DONECODE:
-       case STATUS:
-       case SOURCE:
-       case EVENT_TYPE:
-       case LEVEL:
-       case EXITCODE:
-               int_value = src.int_value;
-               if(src.oper == WITHIN)
-                       int_value2 = src.int_value2;
-               break;
-
-       case TIME:
-               timeval_value = src.timeval_value;
-               if(src.oper == WITHIN)
-                       timeval_value2 = src.timeval_value2;
-               state = src.state;
-               break;
-
-       case JOBID:
-                       jobid_value = src.jobid_value;
-               break;
-
-       default:
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "query attribute not defined");
-       }
-}
-
-
-QueryRecord::QueryRecord() : attr(UNDEF), oper(EQUAL)
-{
-}
-
-
-QueryRecord::~QueryRecord()
-{
-}
-
-
-QueryRecord&
-QueryRecord::operator=(const QueryRecord &src)
-{
-        if(this == &src)
-          return(*this);
-
-       attr = src.attr;
-       oper = src.oper;
-
-       switch (attr) {
-
-       case USERTAG:
-               tag_name = src.tag_name;
-
-       case OWNER:
-       case LOCATION:
-       case DESTINATION:
-       case HOST:
-       case INSTANCE:
-               string_value = src.string_value;
-               if(oper == WITHIN)
-                       string_value2 = src.string_value2;
-               break;
-
-       case DONECODE:
-       case STATUS:
-       case SOURCE:
-       case EVENT_TYPE:
-       case LEVEL:
-       case EXITCODE:
-               int_value = src.int_value;
-               if(oper == WITHIN)
-                       int_value2 = src.int_value2;
-               break;
-
-       case TIME:
-               timeval_value = src.timeval_value;
-               state = src.state;
-               if(oper == WITHIN)
-                       timeval_value2 = src.timeval_value2;
-               break;
-
-       case JOBID:
-                       jobid_value = src.jobid_value;
-               break;
-
-       default:
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "query attribute not defined");
-       }
-
-       return *this;
-}
-
-
-QueryRecord::operator edg_wll_QueryRec() const
-{
-       edg_wll_QueryRec out;
-
-       out.attr = edg_wll_QueryAttr(attr);
-       out.op   = edg_wll_QueryOp(oper);
-
-       switch (attr) {
-
-       case USERTAG:
-               out.attr_id.tag = strdup(tag_name.c_str());
-
-       case OWNER:
-       case LOCATION:
-       case DESTINATION:
-       case HOST:
-       case INSTANCE:
-               out.value.c = strdup(string_value.c_str());
-               if(oper == WITHIN)
-                       out.value2.c = strdup(string_value2.c_str());
-               break;
-
-
-       case DONECODE:
-       case STATUS:
-       case SOURCE:
-       case EVENT_TYPE:
-       case LEVEL:
-       case EXITCODE:
-               out.value.i = int_value;
-               if(oper == WITHIN)
-                       out.value2.i = int_value2;
-               break;
-
-       case TIME:
-               out.value.t = timeval_value;
-               out.attr_id.state = (edg_wll_JobStatCode)state;
-               if(oper == WITHIN)
-                       out.value2.t = timeval_value2;
-               break;
-
-       case JOBID:
-               out.value.j = jobid_value;
-               break;
-
-       case UNDEF:
-               break;
-
-       default:
-               STACK_ADD;
-               throw Exception(EXCEPTION_MANDATORY, EINVAL, "query attribute not defined");
-       }
-
-       return(out);
-}
-
-const std::string QueryRecord::AttrName(const QueryRecord::Attr attr)
-{
-       char    *an = edg_wll_query_attrToString(edg_wll_QueryAttr(attr));
-       std::string     ret(an);
-       free(an);
-       return ret;
-}
-
-
-/** 
- * definitions of ServerConnection class 
- */
-#undef CLASS_PREFIX
-#define CLASS_PREFIX "glite::lb::ServerConnection::"
-
-ServerConnection::ServerConnection()
-{
-       int ret;
-       edg_wll_Context tmp_context;
-
-       if((ret=edg_wll_InitContext(&tmp_context)) < 0) {
-               STACK_ADD;
-               throw OSException(EXCEPTION_MANDATORY, ret, "initializing context");
-       }
-  
-       context = tmp_context;
-}
-
-
-ServerConnection::~ServerConnection()
-{
-       /* no exceptions should be thrown from destructors */
-       edg_wll_FreeContext(context);
-}
-
-
-/********************/
-/* BEGIN DEPRECATED */
-
-ServerConnection::ServerConnection(const std::string &in)
-{
-       STACK_ADD;
-       throw Exception(EXCEPTION_MANDATORY, 0, "method deprecated");
-}
-
-
-void 
-ServerConnection::open(const std::string & in) 
-{
-       STACK_ADD;
-       throw Exception(EXCEPTION_MANDATORY, 0, "method deprecated");
-}
-
-
-void 
-ServerConnection::close(void) 
-{
-       STACK_ADD;
-       throw Exception(EXCEPTION_MANDATORY, 0, "method deprecated");
-}
-
-/* END DEPRECATED */
-/******************/
-
-
-void 
-ServerConnection::setQueryServer(const std::string& server, int port)
-{
-       check_result(edg_wll_SetParamString(context, 
-                                           EDG_WLL_PARAM_QUERY_SERVER,
-                                           server.c_str()),
-                    context,
-                    "setting query server address");
-       check_result(edg_wll_SetParamInt(context,
-                                        EDG_WLL_PARAM_QUERY_SERVER_PORT,
-                                        port),
-                    context,
-                    "setting query server port");
-}
-
-
-void 
-ServerConnection::setQueryTimeout(int timeout)
-{
-       check_result(edg_wll_SetParamInt(context,
-                                        EDG_WLL_PARAM_QUERY_TIMEOUT,
-                                        timeout),
-                    context,
-                    "setting query timeout");
-}
-
-
-void ServerConnection::setX509Proxy(const std::string& proxy)
-{
-       check_result(edg_wll_SetParamString(context,
-                                           EDG_WLL_PARAM_X509_PROXY,
-                                           proxy.c_str()),
-                    context,
-                    "setting X509 proxy");
-}
-
-
-void ServerConnection::setX509Cert(const std::string& cert, const std::string& key)
-{
-       check_result(edg_wll_SetParamString(context,
-                                           EDG_WLL_PARAM_X509_CERT,
-                                           cert.c_str()),
-                    context,
-                    "setting X509 certificate");
-       check_result(edg_wll_SetParamString(context,
-                                           EDG_WLL_PARAM_X509_KEY,
-                                           key.c_str()),
-                    context,
-                    "setting X509 key");
-}
-
-
-void 
-ServerConnection::setQueryEventsLimit(int max) {
-       check_result(edg_wll_SetParamInt(context,
-                                        EDG_WLL_PARAM_QUERY_EVENTS_LIMIT,
-                                        max),
-                    context,
-                    "setting query events limit");
-}
-
-void 
-ServerConnection::setQueryJobsLimit(int max) {
-       check_result(edg_wll_SetParamInt(context,
-                                        EDG_WLL_PARAM_QUERY_JOBS_LIMIT,
-                                        max),
-                    context,
-                    "setting query jobs limit");
-}
-
-
-std::pair<std::string, int>
-ServerConnection::getQueryServer() const
-{
-       /* FIXME: not implemented in C API */
-       STACK_ADD;
-       throw Exception(EXCEPTION_MANDATORY, 0, "method not implemented");
-}
-
-
-int
-ServerConnection::getQueryTimeout() const
-{
-       /* FIXME: not implemented in C API */
-       STACK_ADD;
-       throw Exception(EXCEPTION_MANDATORY, 0, "method not implemented");
-}
-
-
-std::string
-ServerConnection::getX509Proxy() const
-{
-       /* FIXME: not implemented in C API */
-       STACK_ADD;
-       throw Exception(EXCEPTION_MANDATORY, 0, "method not implemented");
-}
-
-
-std::pair<std::string, std::string>
-ServerConnection::getX509Cert() const
-{
-       /* FIXME: not implemented in C API */
-       STACK_ADD;
-       throw Exception(EXCEPTION_MANDATORY, 0, "method not implemented");
-}
-
-// static
-void freeQueryRecVector(edg_wll_QueryRec *v)
-{
-       for(; v->attr != EDG_WLL_QUERY_ATTR_UNDEF; v++)
-               edg_wll_QueryRecFree(v);
-}
-
-std::vector<std::vector<std::pair<QueryRecord::Attr,std::string> > >
-ServerConnection::getIndexedAttrs(void) {
-       edg_wll_QueryRec        **recs;
-       int     i,j;
-       std::vector<std::vector<std::pair<QueryRecord::Attr,std::string> > >    out;
-
-       check_result(edg_wll_GetIndexedAttrs(context,&recs),context,
-               "edg_wll_GetIndexedAttrs()");
-       
-       if (!recs) return out;
-
-       for (i=0; recs[i]; i++) {
-               std::vector<std::pair<QueryRecord::Attr,std::string> >  idx;
-               for (j=0; recs[i][j].attr; j++) {
-                       char    *s = strdup("");
-                       if (recs[i][j].attr == EDG_WLL_QUERY_ATTR_USERTAG)
-                               s = strdup(recs[i][j].attr_id.tag);
-                       else if (recs[i][j].attr == EDG_WLL_QUERY_ATTR_TIME)
-                               s = edg_wll_StatToString(recs[i][j].attr_id.state);
-                       idx.push_back(
-                               std::pair<QueryRecord::Attr,std::string>(
-                                       QueryRecord::Attr(recs[i][j].attr),s)
-                       );
-                       free(s);
-               }
-               freeQueryRecVector(recs[i]);
-               out.push_back(idx);
-       }
-       free(recs);
-       return out;
-}
-
-
-
-
-edg_wll_QueryRec *
-convertQueryVector(const std::vector<QueryRecord> &in)
-{
-       unsigned i;
-       edg_wll_QueryRec *out = new edg_wll_QueryRec[in.size() + 1];
-       QueryRecord empty;
-
-       if(out == NULL) {
-               STACK_ADD;
-               throw OSException(EXCEPTION_MANDATORY, ENOMEM, "allocating vector for conversion");
-       }
-
-       try {
-               for(i = 0; i < in.size(); i++) {
-                       out[i] = in[i];
-               }
-               out[i] = empty;
-       } catch (Exception &e) {
-               STACK_ADD;
-               throw;
-       }
-       return(out);
-}
-
-
-edg_wll_QueryRec **
-convertQueryVectorExt(const std::vector<std::vector<QueryRecord> > &in)
-{
-       unsigned i;
-       edg_wll_QueryRec **out = new (edg_wll_QueryRec*)[in.size() + 1];
-
-       if(out == NULL) {
-               STACK_ADD;
-               throw OSException(EXCEPTION_MANDATORY, ENOMEM, "allocating vector for conversion");
-       }
-
-       try {
-               for(i = 0; i < in.size(); i++) {
-                       out[i] = convertQueryVector(in[i]);
-               }
-               out[i] = NULL;
-       } catch (Exception &e) {
-               STACK_ADD;
-               throw;
-       }
-       return(out);
-}
-
-void 
-ServerConnection::queryEvents(const std::vector<QueryRecord>& job_cond,
-                             const std::vector<QueryRecord>& event_cond,
-                             std::vector<Event> & eventList) const
-{
-       edg_wll_QueryRec    *job_rec = NULL, *event_rec = NULL;
-       edg_wll_Event       *events = NULL;
-       unsigned        i;
-       int             result, qresults_param;
-       char            *errstr = NULL;
-       
-       /* convert input */
-       try {
-               job_rec = convertQueryVector(job_cond);
-               event_rec = convertQueryVector(event_cond);
-
-               /* do the query */
-
-               result = edg_wll_QueryEvents(context, job_rec, event_rec, &events);
-               if (result == E2BIG) {
-                       edg_wll_Error(context, NULL, &errstr);
-                       check_result(edg_wll_GetParam(context,
-                                               EDG_WLL_PARAM_QUERY_RESULTS, &qresults_param),
-                                       context,
-                                       "edg_wll_GetParam(EDG_WLL_PARAM_QUERY_RESULTS)");
-                       if (qresults_param != EDG_WLL_QUERYRES_LIMITED) {
-                               edg_wll_SetError(context, result, errstr);
-                               check_result(result, context,"edg_wll_QueryEvents");
-                       }
-               } else {
-                       check_result(result, context,"edg_wll_QueryEvents");
-               }
-               
-               /* convert output */
-               for (i=0; events[i].type != EDG_WLL_EVENT_UNDEF; i++) {
-                       edg_wll_Event   *ev = (edg_wll_Event *) malloc(sizeof *ev);
-                       memcpy(ev,events+i,sizeof *ev);
-                       Event   e(ev);
-      
-                       eventList.push_back(e);
-               }
-
-               if (result) {
-                       edg_wll_SetError(context, result, errstr);
-                       check_result(result, context,"edg_wll_QueryEvents");
-               }
-    
-               free(events);
-               delete[] job_rec;
-               delete[] event_rec;
-
-       } catch(Exception &e) {
-               if(job_rec) delete[] job_rec;
-               if(event_rec) delete[] event_rec;
-               if(events) free(events);
-               if(errstr) free(errstr);
-
-               STACK_ADD;
-               throw;
-       }
-}
-
-
-const std::vector<Event>  
-ServerConnection::queryEvents(const std::vector<QueryRecord>& job_cond,
-                             const std::vector<QueryRecord>& event_cond) const
-{
-       std::vector<Event>      eventList;
-
-       queryEvents(job_cond, event_cond,eventList);
-       return eventList;
-}
-
-const std::list<Event>
-ServerConnection::queryEventsList(const std::vector<QueryRecord>& job_cond,
-                       const std::vector<QueryRecord>& event_cond) const
-{
-       std::vector<Event> events;
-
-       queryEvents(job_cond, event_cond, events);
-       return std::list<Event>(events.begin(),events.end());
-}
-
-std::string 
-ServerConnection::queryEventsAggregate(const std::vector<QueryRecord>& job_cond,
-                                      const std::vector<QueryRecord>& event_cond,
-                                      enum AggOp const op,
-                                      std::string const attr) const
-{
-       STACK_ADD;
-       throw Exception(EXCEPTION_MANDATORY, 0, "method not implemented");
-       return ""; // gcc warning;
-}
-
-
-void 
-ServerConnection::queryEvents(const std::vector<std::vector<QueryRecord> >& job_cond,
-                             const std::vector<std::vector<QueryRecord> >& event_cond,
-                             std::vector<Event>& eventList) const
-{
-       edg_wll_QueryRec    **job_rec = NULL, **event_rec = NULL;
-       edg_wll_Event       *events = NULL;
-       unsigned        i;
-       
-       /* convert input */
-       try {
-               job_rec = convertQueryVectorExt(job_cond);
-               event_rec = convertQueryVectorExt(event_cond);
-
-               /* do the query */
-
-               check_result(edg_wll_QueryEventsExt(context, 
-                                                   (const edg_wll_QueryRec**)job_rec,
-                                                   (const edg_wll_QueryRec**)event_rec, 
-                                                   &events),
-                            context,
-                            "edg_wll_QueryEvents");
-    
-               /* convert output */
-               for (i=0; events[i].type != EDG_WLL_EVENT_UNDEF; i++) {
-                       edg_wll_Event   *ev = (edg_wll_Event *) malloc(sizeof *ev);
-                       memcpy(ev,events+i,sizeof *ev);
-                       Event   e(ev);
-      
-                       eventList.push_back(e);
-               }
-    
-               free(events);
-
-               for(i = 0 ; job_rec[i]; i++) delete[] job_rec[i];
-               for(i = 0 ; event_rec[i]; i++) delete[] event_rec[i];
-               delete[] job_rec;
-               delete[] event_rec;
-
-       } catch(Exception &e) {
-
-               if(job_rec) {
-                       for(i = 0 ; job_rec[i]; i++) delete[] job_rec[i];
-                       delete[] job_rec;
-               }
-               if(event_rec) { 
-                       for(i = 0 ; event_rec[i]; i++) delete[] event_rec[i];
-                       delete[] event_rec;
-               }
-               if(events) free(events);
-
-               STACK_ADD;
-               throw;
-       }
-}
-
-  
-const std::vector<Event> 
-ServerConnection::queryEvents(const std::vector<std::vector<QueryRecord> >& job_cond,
-                             const std::vector<std::vector<QueryRecord> >& event_cond) const
-{
-       std::vector<Event>      eventList;
-
-       queryEvents(job_cond, event_cond,eventList);
-       return eventList;
-}
-
-
-void ServerConnection::queryJobs(const std::vector<QueryRecord>& query,
-                                std::vector<glite::wmsutils::jobid::JobId> & ids) const
-{
-       edg_wll_QueryRec *cond = NULL;
-       edg_wlc_JobId *jobs, *j;
-       int     result, qresults_param;
-       char    *errstr = NULL;
-
-       try {
-               cond = convertQueryVector(query);
-    
-               result = edg_wll_QueryJobs(context, cond, 0, &jobs, NULL);
-               if (result == E2BIG) {
-                       edg_wll_Error(context, NULL, &errstr);
-                       check_result(edg_wll_GetParam(context,
-                                               EDG_WLL_PARAM_QUERY_RESULTS, &qresults_param),
-                                       context,
-                                       "edg_wll_GetParam(EDG_WLL_PARAM_QUERY_RESULTS)");
-                       if (qresults_param != EDG_WLL_QUERYRES_LIMITED) {
-                               edg_wll_SetError(context, result, errstr);
-                               check_result(result, context,"edg_wll_QueryJobs");
-                       }
-               } else {
-                       check_result(result, context,"edg_wll_QueryJobs");
-               }
-
-               for(j = jobs; *j; j++) 
-                       ids.push_back(glite::wmsutils::jobid::JobId(*j));
-
-               if (result) {
-                       edg_wll_SetError(context, result, errstr);
-                       check_result(result, context,"edg_wll_QueryJobs");
-               }
-
-               free(jobs);
-               freeQueryRecVector(cond);
-               delete[] cond;
-
-       } catch (Exception &e) {
-               if(cond) {
-                       freeQueryRecVector(cond);
-                       delete[] cond;
-               }
-               if (errstr) free(errstr);
-
-               STACK_ADD;
-               throw;
-       }
-}
-
-
-const std::vector<glite::wmsutils::jobid::JobId>
-ServerConnection::queryJobs(const std::vector<QueryRecord>& query) const
-{
-       std::vector<glite::wmsutils::jobid::JobId> jobList;
-  
-       queryJobs(query, jobList);
-       return jobList;
-}
-
-
-void 
-ServerConnection::queryJobs(const std::vector<std::vector<QueryRecord> >& query,
-                           std::vector<glite::wmsutils::jobid::JobId>& ids) const
-{
-       edg_wll_QueryRec **cond = NULL;
-       edg_wlc_JobId *jobs, *j;
-       int     result, qresults_param;
-        char    *errstr = NULL;
-
-       try {
-               cond = convertQueryVectorExt(query);
-    
-               result = edg_wll_QueryJobsExt(context, (const edg_wll_QueryRec**)cond, 
-                                              0, &jobs, NULL);
-               if (result == E2BIG) {
-                       edg_wll_Error(context, NULL, &errstr);
-                       check_result(edg_wll_GetParam(context,
-                                               EDG_WLL_PARAM_QUERY_RESULTS, &qresults_param),
-                                       context,
-                                       "edg_wll_GetParam(EDG_WLL_PARAM_QUERY_RESULTS)");
-                       if (qresults_param != EDG_WLL_QUERYRES_LIMITED) {
-                               edg_wll_SetError(context, result, errstr);
-                               check_result(result, context,"edg_wll_QueryJobsExt");
-                       }
-               } else {
-                       check_result(result, context,"edg_wll_QueryJobsExt");
-               }
-
-               for(j = jobs; *j; j++) 
-                       ids.push_back(glite::wmsutils::jobid::JobId(*j));
-
-               if (result) {
-                       edg_wll_SetError(context, result, errstr);
-                       check_result(result, context,"edg_wll_QueryJobsExt");
-               }
-
-               free(jobs);
-               {
-                       unsigned i;
-
-                       for(i = 0; cond[i]; i++) {
-                               freeQueryRecVector(cond[i]);
-                               delete[] cond[i];
-                       }
-                       delete[] cond;
-               }
-
-       } catch (Exception &e) {
-               unsigned i;
-               if(cond) {
-                       for(i = 0; cond[i]; i++) {
-                               freeQueryRecVector(cond[i]);
-                               delete[] cond[i];
-                       }
-                       delete[] cond;
-               }
-               if (errstr) free(errstr);
-
-               STACK_ADD;
-               throw;
-       }
-}
-
-  
-const 
-std::vector<glite::wmsutils::jobid::JobId>
-ServerConnection::queryJobs(const std::vector<std::vector<QueryRecord> >& query) const
-{
-       std::vector<glite::wmsutils::jobid::JobId> jobList;
-  
-       queryJobs(query, jobList);
-       return jobList;
-}
-
-
-void
-ServerConnection::queryJobStates(const std::vector<QueryRecord>& query,
-                                int flags,
-                                std::vector<JobStatus> & states) const
-{
-       edg_wll_QueryRec *cond = NULL;
-       edg_wll_JobStat *jobs, *j;
-       int     result, qresults_param;
-       char    *errstr = NULL;
-
-       try {
-               cond = convertQueryVector(query);
-    
-               result = edg_wll_QueryJobs(context, cond, flags, NULL, &jobs);
-               if (result == E2BIG) {
-                       edg_wll_Error(context, NULL, &errstr);
-                       check_result(edg_wll_GetParam(context,
-                                               EDG_WLL_PARAM_QUERY_RESULTS, &qresults_param),
-                                       context,
-                                       "edg_wll_GetParam(EDG_WLL_PARAM_QUERY_RESULTS)");
-                       if (qresults_param != EDG_WLL_QUERYRES_LIMITED) {
-                               edg_wll_SetError(context, result, errstr);
-                               check_result(result, context,"edg_wll_QueryJobs");
-                       }
-               } else {
-                       check_result(result, context,"edg_wll_QueryJobs");
-               }
-
-               for(j = jobs; j->state != EDG_WLL_JOB_UNDEF; j++) {
-                       edg_wll_JobStat *jsep = new edg_wll_JobStat;
-                       if (jsep != NULL) {
-                               memcpy(jsep, j, sizeof(*j));
-                               states.push_back(JobStatus(*jsep));
-                       }
-               }
-
-               if (result) {
-                       edg_wll_SetError(context, result, errstr);
-                       check_result(result, context,"edg_wll_QueryJobs");
-               }
-
-               delete jobs;
-
-               freeQueryRecVector(cond);
-               delete[] cond;
-
-       } catch (Exception &e) {
-               if(cond) { 
-                       freeQueryRecVector(cond);
-                       delete[] cond;
-               }
-               if (errstr) free(errstr);
-
-               STACK_ADD;
-               throw;
-       }
-}
-
-
-const std::vector<JobStatus>
-ServerConnection::queryJobStates(const std::vector<QueryRecord>& query,
-                                int flags) const
-{
-       std::vector<JobStatus> states;
-
-       queryJobStates(query, flags, states);
-       return(states);
-}
-
-const std::list<JobStatus>
-ServerConnection::queryJobStatesList(const std::vector<QueryRecord>& query,
-                                int flags) const
-{
-       std::vector<JobStatus> states;
-
-       queryJobStates(query, flags, states);
-       return std::list<JobStatus>(states.begin(),states.end());
-}
-
-
-void
-ServerConnection::queryJobStates(const std::vector<std::vector<QueryRecord> >& query,
-                                int flags,
-                                std::vector<JobStatus> & states) const
-{
-       edg_wll_QueryRec **cond = NULL;
-       edg_wll_JobStat *jobs, *j;
-       int     result, qresults_param;
-       char    *errstr = NULL;
-
-       try {
-               cond = convertQueryVectorExt(query);
-    
-               result = edg_wll_QueryJobsExt(context, (const edg_wll_QueryRec**)cond, 
-                                              flags, NULL, &jobs);
-               if (result == E2BIG) {
-                       edg_wll_Error(context, NULL, &errstr);
-                       check_result(edg_wll_GetParam(context,
-                                               EDG_WLL_PARAM_QUERY_RESULTS, &qresults_param),
-                                       context,
-                                       "edg_wll_GetParam(EDG_WLL_PARAM_QUERY_RESULTS)");
-                       if (qresults_param != EDG_WLL_QUERYRES_LIMITED) {
-                               edg_wll_SetError(context, result, errstr);
-                               check_result(result, context,"edg_wll_QueryJobsExt");
-                       }
-               } else {
-                       check_result(result, context,"edg_wll_QueryJobsExt");
-               }
-
-               for(j = jobs; j->state != EDG_WLL_JOB_UNDEF; j++) {
-                       edg_wll_JobStat *jsep = new edg_wll_JobStat;
-                       if (jsep != NULL) {
-                               memcpy(jsep, j, sizeof(*j));
-                               states.push_back(JobStatus(*jsep));
-                       }
-               }
-
-               if (result) {
-                       edg_wll_SetError(context, result, errstr);
-                       check_result(result, context,"edg_wll_QueryJobsExt");
-               }
-
-               delete jobs;
-
-               {
-                       unsigned i;
-
-                       for(i = 0; cond[i]; i++) { 
-                               freeQueryRecVector(cond[i]);
-                               delete[] cond[i];
-                       }
-                       delete[] cond;
-               }
-
-
-       } catch (Exception &e) {
-               unsigned i;
-               if(cond) { 
-                       for(i = 0; cond[i]; i++) {
-                               freeQueryRecVector(cond[i]);
-                               delete[] cond[i];
-                       }
-                       delete[] cond;
-               }
-               if (errstr) free(errstr);
-
-               STACK_ADD;
-               throw;
-       }
-}
-
-
-const std::vector<JobStatus>
-ServerConnection::queryJobStates(const std::vector<std::vector<QueryRecord> >& query,
-                                int flags) const
-{
-       std::vector<JobStatus> states;
-
-       queryJobStates(query, flags, states);
-       return(states);
-}
-
-
-void ServerConnection::userJobs(std::vector<glite::wmsutils::jobid::JobId> & ids) const
-{
-       edg_wlc_JobId *jobs, *j;
-       int     result, qresults_param;
-       char    *errstr = NULL;
-
-       try {
-               result = edg_wll_UserJobs(context, &jobs, NULL);
-               if (result == E2BIG) {
-                       edg_wll_Error(context, NULL, &errstr);
-                       check_result(edg_wll_GetParam(context,
-                                               EDG_WLL_PARAM_QUERY_RESULTS, &qresults_param),
-                                       context,
-                                       "edg_wll_GetParam(EDG_WLL_PARAM_QUERY_RESULTS)");
-                       if (qresults_param != EDG_WLL_QUERYRES_LIMITED) {
-                               edg_wll_SetError(context, result, errstr);
-                               check_result(result, context,"edg_wll_UserJobs");
-                       }
-               } else {
-                       check_result(result, context,"edg_wll_UserJobs");
-               }
-
-               for(j = jobs; *j; j++) 
-                       ids.push_back(glite::wmsutils::jobid::JobId(*j));
-
-               if (result) {
-                       edg_wll_SetError(context, result, errstr);
-                       check_result(result, context,"edg_wll_QueryJobsExt");
-               }
-
-               free(jobs);
-
-       } catch (Exception &e) {
-               if (errstr) free(errstr);
-
-               STACK_ADD;
-               throw;
-       }
-}
-
-
-const std::vector<glite::wmsutils::jobid::JobId>
-ServerConnection::userJobs() const
-{
-       std::vector<glite::wmsutils::jobid::JobId> jobList;
-  
-       userJobs(jobList);
-       return jobList;
-}
-
-
-void
-ServerConnection::userJobStates(std::vector<JobStatus> & states) const
-{
-       edg_wll_JobStat *jobs, *j;
-       int     result, qresults_param;
-       char    *errstr = NULL;
-
-       try {
-               result = edg_wll_UserJobs(context, NULL, &jobs);
-               if (result == E2BIG) {
-                       edg_wll_Error(context, NULL, &errstr);
-                       check_result(edg_wll_GetParam(context,
-                                               EDG_WLL_PARAM_QUERY_RESULTS, &qresults_param),
-                                       context,
-                                       "edg_wll_GetParam(EDG_WLL_PARAM_QUERY_RESULTS)");
-                       if (qresults_param != EDG_WLL_QUERYRES_LIMITED) {
-                               edg_wll_SetError(context, result, errstr);
-                               check_result(result, context,"edg_wll_UserJobs");
-                       }
-               } else {
-                       check_result(result, context,"edg_wll_UserJobs");
-               }
-
-               for(j = jobs; j->state != EDG_WLL_JOB_UNDEF; j++) {
-                       edg_wll_JobStat *jsep = new edg_wll_JobStat;
-                       if (jsep != NULL) {
-                               memcpy(jsep, j, sizeof(*j));
-                               states.push_back(JobStatus(*jsep));
-                       }
-               }
-
-               if (result) {
-                       edg_wll_SetError(context, result, errstr);
-                       check_result(result, context,"edg_wll_QueryJobsExt");
-               }
-
-               delete jobs;
-
-       } catch (Exception &e) {
-               if (errstr) free(errstr);
-
-               STACK_ADD;
-               throw;
-       }
-}
-
-
-const std::vector<JobStatus>
-ServerConnection::userJobStates() const
-{
-       std::vector<JobStatus> states;
-
-       userJobStates(states);
-       return(states);
-}
-
-
-edg_wll_Context
-ServerConnection::getContext(void) const
-{
-       return(context);
-}
-
-
-void ServerConnection::setParam(edg_wll_ContextParam par, int val)
-{
-       check_result(edg_wll_SetParamInt(context,par,val),
-               context,
-               "edg_wll_SetParamInt()");
-}
-
-void ServerConnection::setParam(edg_wll_ContextParam par, const std::string val)
-{
-       check_result(edg_wll_SetParamString(context,par,val.c_str()),
-               context,
-               "edg_wll_SetParamString()");
-}
-
-void ServerConnection::setParam(edg_wll_ContextParam par, const struct timeval & val)
-{
-       check_result(edg_wll_SetParamTime(context,par,&val),
-               context,
-               "edg_wll_SetParamTime()");
-}
-
-int ServerConnection::getParamInt(edg_wll_ContextParam par) const
-{
-       int     ret;
-       check_result(edg_wll_GetParam(context,par,&ret),
-               context,
-               "edg_wll_GetParam()");
-       return  ret;
-}
-
-std::string ServerConnection::getParamString(edg_wll_ContextParam par) const
-{
-       char    *ret;
-       std::string     out;
-
-       check_result(edg_wll_GetParam(context,par,&ret),
-               context,
-                "edg_wll_GetParam()");
-
-       out = ret;
-       free(ret);
-       return out;
-}
-
-struct timeval ServerConnection::getParamTime(edg_wll_ContextParam par) const
-{
-       struct timeval  ret;
-       check_result(edg_wll_GetParam(context,par,&ret),
-               context,
-               "edg_wll_GetParam()");
-       return ret;
-}
-
-EWL_END_NAMESPACE;
diff --git a/org.glite.lb.client/src/args.c.T b/org.glite.lb.client/src/args.c.T
deleted file mode 100644 (file)
index 20defdf..0000000
+++ /dev/null
@@ -1,533 +0,0 @@
-/*
-@@@AUTO
-*/
-
-@@@LANG: C
-
-#include "args.h"
-#include "glite/lb/events.h"
-
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/utsname.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-
-typedef struct {
-    int argc;
-    char** argv;
-    const char* help;
-    int idx;
-    edg_wll_Args list[1000];
-    int last;
-} opt_ctx_t;
-
-/* lists of accepted tags */
-@@@{
-                gen "static const char * const eventJobCommon\[] = {";
-                selectType $event '_common_';
-                for (getFieldsOrdered $event) {
-                        my $f = selectField $event $_;
-                        my $fn = $f->{name};
-                        gen "\"$fn\",  ";
-                }
-                gen "NULL };\n";
-@@@}
-@@@{
-        for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-                        $event->getTypes) {
-                gen "static const char * const event$t\[] = {";
-                selectType $event $t;
-                for (getFieldsOrdered $event) {
-                        my $f = selectField $event $_;
-                        my $fn = $f->{name};
-                        gen "\"$fn\",  "
-                }
-                gen "NULL };\n";
-        }
-@@@}
-
-static const char * const * const eventTags[] = {
-        eventJobCommon,
-@@@{
-        for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-                        $event->getTypes) {
-                gen "\tevent$t,\n";
-        }
-        gen "\tNULL\n};\n";
-@@@}
-
-static int read_bool(const edg_wll_Args* o, char* arg, char* par)
-{
-    int b = 1;
-    int rs = 0;
-
-    if (par)
-    {
-       if (!strcasecmp(par, "off") || !strcmp(par, "0")
-           || !strcasecmp(par, "false"))
-       {
-           b = 0;
-           rs = 1;
-       }
-       else if (!strcasecmp(par, "on") || !strcmp(par, "1")
-                || !strcasecmp(par, "true"))
-       {
-           rs = 1;
-       }
-    }
-
-    if (o->value)
-       *(int*)o->value = b;
-    return rs;
-}
-
-static void read_double(const edg_wll_Args* o, char* arg, char* par)
-{
-    double d;
-    if (!par)
-    {
-       printf("Option: %s  - missing double/float value\n", arg);
-       exit(1);
-    }
-    d = atof(par);
-    if (o->min != o->max)
-    {
-       if (d < o->min && d > o->max)
-       {
-           printf("Option: %s  - value: %f  out of range <%d, %d>",
-                  arg, d, o->min, o->max);
-           exit(1);
-       }
-    }
-    if (o->value)
-       *(double*)o->value = d;
-}
-
-static void read_string(const edg_wll_Args* o, char* arg, char* par)
-{
-    if (!par)
-    {
-       printf("Option: %s  - missing string value\n", arg);
-       exit(1);
-    }
-    if (o->value)
-    {
-       if (strstr(arg, "-file"))
-       {
-            struct stat buf;
-           int fd = open(par, O_RDONLY);
-           if (fd >= 0)
-           {
-                char* b;
-               fstat(fd, &buf);
-               b = (char*) malloc(buf.st_size);
-               if (b)
-               {
-                    int p = 0;
-                   printf("Opened & reading %s  %lld\n",
-                               par, (long long)buf.st_size);
-                   while (p < buf.st_size)
-                   {
-                       int r = read(fd, b + p, buf.st_size);
-                       if (r < 0)
-                           break;
-                       p += r;
-                   }
-
-                   *(char**)o->value = b;
-               }
-                close(fd);
-           }
-            else
-               fprintf(stderr, "can't open file: \"%s\"  (%s)\n", par, strerror(errno));
-
-       }
-       else
-           *(char**)o->value = strdup(par);
-    }
-}
-
-static void read_int(const edg_wll_Args* o, char* arg, char* par)
-{
-    int v = 0;
-    if (!par)
-    {
-       printf("Option: %s  - missing integer value\n", arg);
-       exit(1);
-    }
-    sscanf(par, "%i", &v);
-    if (o->min != o->max)
-    {
-       if (v < o->min && v > o->max)
-       {
-           printf("Option: %s  - value: %d  out of range <%d, %d>",
-                  arg, v, o->min, o->max);
-           exit(1);
-       }
-    }
-    if (o->value)
-       *(int*)o->value = v;
-}
-
-static void read_uint16(const edg_wll_Args* o, char* arg, char* par)
-{
-    int v = 0;
-    if (!par)
-    {
-       printf("Option: %s  - missing integer value\n", arg);
-       exit(1);
-    }
-    sscanf(par, "%i", &v);
-    if (o->min != o->max)
-    {
-       if (v < o->min && v > o->max)
-       {
-           printf("Option: %s  - value: %d  out of range <%d, %d>",
-                  arg, v, o->min, o->max);
-           exit(1);
-       }
-    }
-    if (o->value)
-       *(u_int16_t*)o->value = v;
-}
-
-static void read_event(const edg_wll_Args* o, char* arg, char* par)
-{
-    edg_wll_EventCode ec = edg_wll_StringToEvent(par);
-    if (ec == EDG_WLL_EVENT_UNDEF)
-    {
-       if (strcmp(par, "help") == 0)
-       {
-           // list type
-           int i;
-           printf("Available events:   extra options\n");
-           for (i = EDG_WLL_EVENT_UNDEF + 1; i < EDG_WLL_EVENT__LAST; i++)
-           {
-               char* e = edg_wll_EventToString(i);
-               if (e)
-               {
-                    int j = 0;
-                   printf("  %s:  ", e);
-                   while (eventTags[i][j])
-                       printf("%s ", eventTags[i][j++]);
-                    fputc('\n', stdout);
-
-                   free(e);
-               }
-           }
-       }
-        else
-           fprintf(stderr,"ERROR %s  unknown event: %s\n", arg, par);
-       exit(1);
-    }
-    if (o->value)
-       *(edg_wll_EventCode*)o->value = ec;
-
-}
-
-static void read_source(const edg_wll_Args* o, char* arg, char* par)
-{
-    edg_wll_Source s = edg_wll_StringToSource(par);
-    if (s == EDG_WLL_SOURCE_NONE)
-    {
-       if (strcmp(par, "help") == 0)
-       {
-           // list type
-           int i;
-           printf("Valid sources:\n");
-           for (i = EDG_WLL_SOURCE_NONE + 1; i < EDG_WLL_SOURCE__LAST; i++)
-           {
-               char* e = edg_wll_SourceToString(i);
-               if (e)
-               {
-                   printf("  %s\n", e);
-                           free(e);
-               }
-           }
-       }
-       else
-           fprintf(stderr,"ERROR %s  unknown source: %s\n", arg, par);
-       exit(1);
-    }
-    if (o->value)
-       *(edg_wll_Source*)o->value = s;
-}
-
-static void show_help(const edg_wll_Args* o, int prefix)
-{
-    unsigned max = 0;
-    char** l = malloc(sizeof(char*) * 1000);
-    int li = 0;
-    unsigned i = 0;
-
-    for (i = 0; o[i].type != EDG_WLL_ARGS_NONE; i++)
-    {
-       char b[80];
-        unsigned len;
-       if (o[i].type == EDG_WLL_ARGS_HELP)
-           sprintf(b, "  -h  --help");
-       else
-           sprintf(b, "  %c%s  %s%s",
-                   (o[i].oshort && prefix) ? '-' : ' ',
-                   o[i].oshort ? o[i].oshort : " ",
-                   (o[i].olong && prefix) ? "--" : "",
-                   o[i].olong ? o[i].olong : ""
-                   //opt[i].options ? opt[i].options : "",
-                   //o[i].help ? o[i].help : ""
-                  );
-       l[li] = strdup(b);
-        li++;
-       len = strlen(b);
-       if (max < len)
-           max = len;
-    }
-    for (i = 0; o[i].type != EDG_WLL_ARGS_NONE; i++)
-    {
-       if (!o[i].oshort && !o[i].olong
-           && o[i].type != EDG_WLL_ARGS_HELP
-           && o[i].type != EDG_WLL_ARGS_OPTIONS)
-            continue;
-
-       if (o[i].type != EDG_WLL_ARGS_OPTIONS)
-       {
-            unsigned s;
-           fputs(l[i], stdout);
-           for (s = strlen(l[i]); s <= max; s++)
-               fputc(' ', stdout);
-           if (o[i].type == EDG_WLL_ARGS_HELP)
-               fputs("this help message", stdout);
-       }
-
-       if (o[i].value)
-       {
-           switch (o[i].type)
-           {
-           case EDG_WLL_ARGS_INT:
-               if (o[i].help)
-                   printf(o[i].help, *(int*)o[i].value,
-                          o[i].min, o[i].max);
-               break;
-           case EDG_WLL_ARGS_STRING:
-           case EDG_WLL_ARGS_SELECTSTRING:
-                if (o[i].help)
-                   printf(o[i].help, *(const char**)o[i].value);
-               break;
-           case EDG_WLL_ARGS_OPTIONS:
-               show_help((const edg_wll_Args*)o[i].value, prefix);
-               continue;
-           default:
-                if (o[i].help)
-                   fputs(o[i].help, stdout);
-               break;
-           }
-       }
-       else if (o[i].help)
-           fputs(o[i].help, stdout);
-
-       fputs("\n", stdout);
-    }
-    while (--li>=0) free(l[li]);
-    free(l);
-}
-#if 0
-static void parse_suboptions(const Option* o, const char* oname, char* pars, const char* r)
-{
-    avm::vector<char*> arr;
-    split(arr, pars);
-
-    if (!arr.size() || strcmp(arr[0], "help") == 0)
-    {
-       printf("Available options for '%s' (optA=x:optB=...)\n", oname);
-       show_help(o, false);
-       exit(0);
-    }
-    for (unsigned i = 0; i < arr.size(); i++)
-    {
-       char* par = strchr(arr[i], '=');
-       if (par)
-       {
-           *par = 0;
-           par++;
-       }
-
-       for (unsigned j = 0; o[j].type != Args::Option::NONE; j++)
-       {
-           if ((o[j].oshort && strcmp(o[j].oshort, arr[i]) == 0)
-               || (o[j].olong && strcmp(o[j].olong, arr[i]) == 0))
-           {
-               switch(o[j].type)
-               {
-               case Args::Option::BOOL:
-                   read_bool(&o[j], arr[i], par, r);
-                   break;
-               case Args::Option::DOUBLE:
-                   read_double(&o[j], arr[i], par, r);
-                   break;
-               case Args::Option::INT:
-                   read_int(&o[j], arr[i], par, r);
-                   break;
-               default:
-                   ;
-               }
-           }
-       }
-    }
-}
-#endif
-
-static int findOpt(opt_ctx_t* ctx, int olong)
-{
-    char* arg = ctx->argv[ctx->idx] + olong + 1;
-    char* par = strchr(arg, '=');
-    const edg_wll_Args* o = NULL;
-    const edg_wll_Args* ol[200];
-    int olb = 0;
-    int ole = 0;
-
-    char* argnofile = strdup(arg);
-    char* nofile = strstr(argnofile, "-file"); // should be the ending
-    if (nofile && (nofile - argnofile) > 2)
-       nofile[0] = 0;
-
-    olong++;
-    if (par)
-    {
-        *par = 0;
-       par++;
-    }
-    else if ((ctx->idx + 1) < ctx->argc)
-    {
-       par = ctx->argv[++ctx->idx];
-    }
-
-    ol[ole++] = ctx->list;
-    while (ole > olb)
-    {
-       o = ol[olb++];
-       for (; o->type != EDG_WLL_ARGS_NONE; o++)
-       {
-           //printf("OPTION %d   '%s'  %d   '%s' '%s'\n", o->type, arg, olong, o->oshort, o->olong);
-           if (o->type == EDG_WLL_ARGS_HELP
-               && (strcasecmp(arg, "h") == 0
-                   || strcmp(arg, "?") == 0
-                   || strcasecmp(arg, "help") == 0))
-               break;
-           if (o->type == EDG_WLL_ARGS_OPTIONS)
-           {
-                ol[ole++] = o->value;
-                continue;
-           }
-
-           if (olong < 2)
-           {
-               if (o->oshort &&
-                   (strcmp(arg, o->oshort) == 0
-                    || strcmp(argnofile, o->oshort) == 0))
-                   break;
-           }
-           else if (o->olong && (strcmp(arg, o->olong) == 0
-                                 || strcmp(argnofile, o->olong) == 0))
-               break;
-       }
-       if (o->type != EDG_WLL_ARGS_NONE)
-           break;
-    }
-
-    switch (o->type)
-    {
-    case EDG_WLL_ARGS_NONE:
-       return -1;
-    case EDG_WLL_ARGS_BOOL:
-       if (!read_bool(o, arg, par))
-           ctx->idx--; // no argument given
-       break;
-    case EDG_WLL_ARGS_DOUBLE:
-       read_double(o, arg, par);
-       break;
-    case EDG_WLL_ARGS_STRING:
-        read_string(o, arg, par);
-        break;
-    case EDG_WLL_ARGS_INT:
-       read_int(o, arg, par);
-       break;
-    case EDG_WLL_ARGS_UINT16:
-       read_uint16(o, arg, par);
-       break;
-    case EDG_WLL_ARGS_EVENT:
-       read_event(o, arg, par);
-       break;
-    case EDG_WLL_ARGS_SOURCE:
-       read_source(o, arg, par);
-       break;
-    case EDG_WLL_ARGS_HELP:
-       printf("\nUsage: %s %s\n\n", ctx->argv[0], ctx->help);
-       show_help(ctx->list, 1);
-       exit(0);
-    //case EDG_WLL_ARGS_SUBOPTIONS:
-       //parse_suboptions((const edg_wll_Args*)o->value, arg, par, regname);
-    default:
-       printf("FIXME: unhandle option type %d\n", o->type);
-        break;
-    }
-
-    if (argnofile)
-        free(argnofile);
-
-    return 0;
-}
-
-static void addOptions(opt_ctx_t* ctx, const edg_wll_Args* options)
-{
-    const edg_wll_Args* o = options;
-
-    while (o->type != EDG_WLL_ARGS_NONE)
-    {
-       ctx->list[ctx->last++] = *o;
-        o++;
-    }
-}
-
-void edg_wll_ParseArgs(int* argc, char** argv, const edg_wll_Args* options,
-                      const char* help)
-{
-    int sidx = 1;
-    opt_ctx_t ctx;
-
-    ctx.argc = *argc;
-    ctx.argv = argv;
-    ctx.help = help;
-    ctx.last = 0;
-
-    addOptions(&ctx, options);
-
-    for (ctx.idx = 1; ctx.idx < ctx.argc; ctx.idx++)
-    {
-       if (argv[ctx.idx][0] == '-')
-       {
-           int olong = (argv[ctx.idx][1] == '-');
-           if (olong && argv[ctx.idx][2] == 0)
-               break; // end of options
-           //printf("ARG %d  %s\n", ctx.idx, argv[ctx.idx]);
-           if (findOpt(&ctx, olong) == 0)
-               continue;
-       }
-       else if (sidx != ctx.idx)
-       {
-           fprintf(stderr,"SIDX  %d  %d\n", sidx, ctx.idx);
-           argv[sidx] = argv[ctx.idx];
-       }
-       sidx++;
-    }
-
-    while (ctx.idx < *argc && sidx != ctx.idx)
-    {
-       argv[sidx++] = argv[ctx.idx++];
-    }
-
-    *argc = sidx;
-}
diff --git a/org.glite.lb.client/src/args.h b/org.glite.lb.client/src/args.h
deleted file mode 100644 (file)
index 6daaf4e..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_ARGS_H__
-
-typedef enum {
-    EDG_WLL_ARGS_NONE = 0,
-    EDG_WLL_ARGS_BOOL,
-    EDG_WLL_ARGS_INT,
-    EDG_WLL_ARGS_UINT16,
-    EDG_WLL_ARGS_DOUBLE,
-    EDG_WLL_ARGS_STRING,
-    EDG_WLL_ARGS_HELP,
-    EDG_WLL_ARGS_JOBID,
-    EDG_WLL_ARGS_NOTIFID,
-    EDG_WLL_ARGS_SOURCE,
-    EDG_WLL_ARGS_EVENT,
-    EDG_WLL_ARGS_OPTIONS,
-    EDG_WLL_ARGS_SUBOPTIONS,
-    EDG_WLL_ARGS_SELECTSTRING,
-} edg_wll_ArgsCode;
-
-typedef struct {
-    edg_wll_ArgsCode type;
-    const char* oshort;
-    const char* olong;
-    const char* help;
-    void* value;
-    int min;
-    int max;
-} edg_wll_Args;
-
-void edg_wll_ParseArgs(int* argc, char** argv, const edg_wll_Args* parray,
-                       const char* help);
-
-#endif /* __EDG_WORKLOAD_LOGGING_CLIENT_ARGS_H__ */
diff --git a/org.glite.lb.client/src/connection.c b/org.glite.lb.client/src/connection.c
deleted file mode 100644 (file)
index 173ef47..0000000
+++ /dev/null
@@ -1,352 +0,0 @@
-#ident "$Header$"
-
-#include <errno.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <netinet/in.h>
-#include <netdb.h>
-
-#include "glite/lb/consumer.h"
-#include "glite/lb/context-int.h"
-#include "glite/lb/lb_gss.h"
-#include "glite/lb/mini_http.h"
-
-
-
-static void CloseConnection(edg_wll_Context ctx, int conn_index)
-{
-       /* close connection ad free its structures */
-       OM_uint32 min_stat;
-
-       edg_wll_gss_close(&ctx->connPool[conn_index].gss, &ctx->p_tmp_timeout);
-       if (ctx->connPool[conn_index].gsiCred) 
-               gss_release_cred(&min_stat, &ctx->connPool[conn_index].gsiCred);
-       free(ctx->connPool[conn_index].peerName);
-       free(ctx->connPool[conn_index].buf);
-       
-       memset(ctx->connPool + conn_index, 0, sizeof(edg_wll_ConnPool));
-       
-       /* if deleted conn was not the last one -> there is a 'hole' and then   */
-       /* 'shake' together connections in pool, no holes are allowed           */
-       if (conn_index < ctx->connOpened - 1) { 
-               ctx->connPool[conn_index] = ctx->connPool[ctx->connOpened - 1];
-               memset(ctx->connPool + ctx->connOpened  - 1 , 0, sizeof(edg_wll_ConnPool));
-       }
-       ctx->connOpened--;
-}
-
-
-
-static int ConnectionIndex(edg_wll_Context ctx, const char *name, int port)
-{
-       int i;
-
-        for (i=0; i<ctx->connOpened;i++) 
-               if (!strcmp(name, ctx->connPool[i].peerName) &&
-                   (port == ctx->connPool[i].peerPort)) return i;
-                                               
-       return -1;
-}
-
-
-
-static int AddConnection(edg_wll_Context ctx, char *name, int port)
-{
-       int index = ctx->connOpened;
-       
-       free(ctx->connPool[index].peerName);    // should be empty; just to be sure
-       ctx->connPool[index].peerName = strdup(ctx->srvName);
-       ctx->connPool[index].peerPort = ctx->srvPort;
-       ctx->connOpened++;
-
-       return index;
-}
-
-
-
-static void ReleaseConnection(edg_wll_Context ctx, char *name, int port)
-{
-       int i, index = 0;
-       long min;
-
-
-       if (ctx->connOpened == 0) return;       /* nothing to release */
-       
-       if (name) {
-               if ((index = ConnectionIndex(ctx, name, port)) >= 0)
-                       CloseConnection(ctx, index);
-       }
-       else {                                  /* free the oldest connection*/
-               min = ctx->connPool[0].lastUsed.tv_sec;
-               for (i=0; i<ctx->connOpened; i++) {
-                       if (ctx->connPool[i].lastUsed.tv_sec < min) {
-                               min = ctx->connPool[i].lastUsed.tv_sec;
-                               index = i;
-                       }
-               }
-               CloseConnection(ctx, index);
-       }
-}
-                       
-
-
-int edg_wll_close(edg_wll_Context ctx)
-{
-       edg_wll_ResetError(ctx);
-
-       CloseConnection(ctx, ctx->connToUse);
-               
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-
-
-int edg_wll_close_proxy(edg_wll_Context ctx)
-{
-       edg_wll_plain_close(&ctx->connProxy->conn);
-
-       return edg_wll_Error(ctx, NULL, NULL);
-}
-
-
-
-int edg_wll_open(edg_wll_Context ctx)
-{
-       int index;
-       edg_wll_GssStatus gss_stat;
-       
-
-       edg_wll_ResetError(ctx);
-
-       if ( (index = ConnectionIndex(ctx, ctx->srvName, ctx->srvPort)) == -1 ) {
-               /* no such open connection in pool */
-               if (ctx->connOpened == ctx->poolSize)
-                       ReleaseConnection(ctx, NULL, 0);
-               
-               index = AddConnection(ctx, ctx->srvName, ctx->srvPort);
-               
-       }
-       /* else - there is cached open connection, reuse it */
-       
-       ctx->connToUse = index;
-       
-       /* XXX support anonymous connections, perhaps add a flag to the connPool
-        * struct specifying whether or not this connection shall be authenticated
-        * to prevent from repeated calls to edg_wll_gss_acquire_cred_gsi() */
-       if (!ctx->connPool[index].gsiCred && 
-           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->connPool[index].gsiCred, NULL, &gss_stat)) {
-           edg_wll_SetErrorGss(ctx, "failed to load GSI credentials", &gss_stat);
-           goto err;
-       }
-
-       if (ctx->connPool[index].gss.context == GSS_C_NO_CONTEXT) {     
-               switch (edg_wll_gss_connect(ctx->connPool[index].gsiCred,
-                               ctx->connPool[index].peerName, ctx->connPool[index].peerPort,
-                               &ctx->p_tmp_timeout,&ctx->connPool[index].gss,
-                               &gss_stat)) {
-               
-                       case EDG_WLL_GSS_OK: 
-                               goto ok;
-                       case EDG_WLL_GSS_ERROR_ERRNO:
-                               edg_wll_SetError(ctx,errno,"edg_wll_gss_connect()");
-                               break;
-                       case EDG_WLL_GSS_ERROR_GSS:
-                               edg_wll_SetErrorGss(ctx, "failed to authenticate to server", &gss_stat);
-                               break;
-                       case EDG_WLL_GSS_ERROR_HERRNO:
-                               { const char *msg1;
-                                 char *msg2;
-                                 msg1 = hstrerror(errno);
-                                 asprintf(&msg2, "edg_wll_gss_connect(): %s", msg1);
-                                 edg_wll_SetError(ctx,EDG_WLL_ERROR_DNS, msg2);
-                                 free(msg2);
-                               }
-                               break;
-                       case EDG_WLL_GSS_ERROR_EOF:
-                               edg_wll_SetError(ctx,ECONNREFUSED,"edg_wll_gss_connect():"
-                                              " server closed the connection, probably due to overload");
-                               break;
-                       case EDG_WLL_GSS_ERROR_TIMEOUT:
-                               edg_wll_SetError(ctx,ETIMEDOUT,"edg_wll_gss_connect()");
-                               break;
-               }
-       }
-       else goto ok;
-
-err:
-       /* some error occured; close created connection
-        * and free all fields in connPool[index] */
-       CloseConnection(ctx, index);
-ok:    
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-
-
-int edg_wll_open_proxy(edg_wll_Context ctx)
-{
-       struct sockaddr_un      saddr;
-       int                     flags;
-       
-
-       ctx->connProxy->conn.sock = socket(PF_UNIX, SOCK_STREAM, 0);
-       if (ctx->connProxy->conn.sock < 0) {
-               edg_wll_SetError(ctx, errno, "socket() error");
-               goto err;
-       }
-
-       memset(&saddr, 0, sizeof(saddr));
-       saddr.sun_family = AF_UNIX;
-       if (!ctx->p_lbproxy_serve_sock) {
-               edg_wll_SetError(ctx, EINVAL, "Proxy socket path not set!");
-               goto err;
-       }
-       
-       if (strlen(ctx->p_lbproxy_serve_sock) > 108) {  // UNIX_PATH_MAX (def. in linux/un.h)
-                                                       // but not defined in sys/un.h
-                edg_wll_SetError(ctx, EINVAL, "proxy_filename too long!");
-                goto err;
-       }
-       strcpy(saddr.sun_path, ctx->p_lbproxy_serve_sock);
-
-       if ((flags = fcntl(ctx->connProxy->conn.sock, F_GETFL, 0)) < 0 || 
-                       fcntl(ctx->connProxy->conn.sock, F_SETFL, flags | O_NONBLOCK) < 0) {
-               edg_wll_SetError(ctx, errno, "fcntl()");
-               goto err;
-       }
-
-       if (connect(ctx->connProxy->conn.sock, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) {
-               edg_wll_SetError(ctx, errno, "connect()");
-               goto err;
-       }
-
-       return edg_wll_Error(ctx,NULL,NULL);    
-       
-err:
-       /* some error occured; close created connection */
-
-       edg_wll_close_proxy(ctx);
-               
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-       
-
-
-/* transform HTTP error code to ours */
-int http_check_status(
-       edg_wll_Context ctx,
-       char *response)
-
-{
-       int     code,len;
-
-       edg_wll_ResetError(ctx);
-       sscanf(response,"HTTP/%*f %n%d",&len,&code);
-       switch (code) {
-               case HTTP_OK: 
-                       break;
-               /* soft errors - some useful data may be returned too */
-               case HTTP_UNAUTH: /* EPERM */
-               case HTTP_NOTFOUND: /* ENOENT */
-               case HTTP_NOTIMPL: /* ENOSYS */
-               case HTTP_UNAVAIL: /* EAGAIN */
-               case HTTP_INVALID: /* EINVAL */
-                       break;
-               case EDG_WLL_GSS_ERROR_HERRNO:
-                        { const char *msg1;
-                          char *msg2;
-                          msg1 = hstrerror(errno);
-                          asprintf(&msg2, "edg_wll_gss_connect(): %s", msg1);
-                          edg_wll_SetError(ctx,EDG_WLL_ERROR_DNS, msg2);
-                          free(msg2);
-                        }
-                       break;
-               case HTTP_NOTALLOWED:
-                       edg_wll_SetError(ctx, ENXIO, "Method Not Allowed");
-                       break;
-               case HTTP_UNSUPPORTED:
-                       edg_wll_SetError(ctx, ENOTSUP, "Protocol versions incompatible");
-                       break;                                                          
-               case HTTP_INTERNAL:
-                       /* fall through */
-               default: 
-                       edg_wll_SetError(ctx,EDG_WLL_ERROR_SERVER_RESPONSE,response+len);
-       }
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-
-
-int edg_wll_http_send_recv(
-       edg_wll_Context ctx,
-       char *request,
-       const char * const *req_head,
-       char *req_body,
-       char **response,
-       char ***resp_head,
-       char **resp_body)
-{
-       if (edg_wll_open(ctx)) return edg_wll_Error(ctx,NULL,NULL);
-       
-       switch (edg_wll_http_send(ctx,request,req_head,req_body)) {
-               case ENOTCONN:
-                       edg_wll_close(ctx);
-                       if (edg_wll_open(ctx)
-                               || edg_wll_http_send(ctx,request,req_head,req_body))
-                                       return edg_wll_Error(ctx,NULL,NULL);
-                       /* fallthrough */
-               case 0: break;
-               default: return edg_wll_Error(ctx,NULL,NULL);
-       }
-
-       if (edg_wll_http_recv(ctx,response,resp_head,resp_body) == ENOTCONN) {
-               edg_wll_close(ctx);
-               (void) (edg_wll_open(ctx)
-                       || edg_wll_http_send(ctx,request,req_head,req_body)
-                       || edg_wll_http_recv(ctx,response,resp_head,resp_body));
-       }
-       
-       gettimeofday(&ctx->connPool[ctx->connToUse].lastUsed, NULL);
-       
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-
-
-int edg_wll_http_send_recv_proxy(
-       edg_wll_Context ctx,
-       char *request,
-       const char * const *req_head,
-       char *req_body,
-       char **response,
-       char ***resp_head,
-       char **resp_body)
-{
-       if (edg_wll_open_proxy(ctx)) return edg_wll_Error(ctx,NULL,NULL);
-       
-       switch (edg_wll_http_send_proxy(ctx,request,req_head,req_body)) {
-               case ENOTCONN:
-                       edg_wll_close_proxy(ctx);
-                       if (edg_wll_open_proxy(ctx)
-                               || edg_wll_http_send_proxy(ctx,request,req_head,req_body))
-                                       return edg_wll_Error(ctx,NULL,NULL);
-                       /* fallthrough */
-               case 0: break;
-               default: return edg_wll_Error(ctx,NULL,NULL);
-       }
-
-       if (edg_wll_http_recv_proxy(ctx,response,resp_head,resp_body) == ENOTCONN) {
-               edg_wll_close_proxy(ctx);
-               (void) (edg_wll_open_proxy(ctx)
-                       || edg_wll_http_send_proxy(ctx,request,req_head,req_body)
-                       || edg_wll_http_recv_proxy(ctx,response,resp_head,resp_body));
-       }
-       
-       return edg_wll_Error(ctx,NULL,NULL);
-}
diff --git a/org.glite.lb.client/src/connection.h b/org.glite.lb.client/src/connection.h
deleted file mode 100644 (file)
index 7de349d..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_CONNECTION_H__
-#define __EDG_WORKLOAD_LOGGING_CLIENT_CONNECTION_H__
-
-#ident "$Header"
-
-int edg_wll_close(edg_wll_Context ctx);
-int edg_wll_open(edg_wll_Context ctx);
-int edg_wll_http_send_recv(edg_wll_Context, char *, const char * const *, char *, char **, char ***, char **);
-
-int edg_wll_close_proxy(edg_wll_Context ctx);
-int edg_wll_open_proxy(edg_wll_Context ctx);
-int edg_wll_http_send_recv_proxy(edg_wll_Context, char *, const char * const *, char *, char **, char ***, char **);
-
-int http_check_status(edg_wll_Context, char *);
-
-
-#endif /* __EDG_WORKLOAD_LOGGING_CLIENT_CONNECTION_H__ */
diff --git a/org.glite.lb.client/src/consumer.c b/org.glite.lb.client/src/consumer.c
deleted file mode 100644 (file)
index 14059ad..0000000
+++ /dev/null
@@ -1,583 +0,0 @@
-#ident "$Header$"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <unistd.h>
-#include <assert.h>
-
-#include <expat.h>
-
-#include "globus_config.h"
-
-#include "glite/lb/consumer.h"
-#include "glite/lb/context-int.h"
-#include "glite/lb/mini_http.h"
-#include "glite/lb/xml_parse.h"
-#include "glite/lb/xml_conversions.h"
-
-#include "connection.h"
-
-static const char* const request_headers[] = {
-       "Cache-Control: no-cache",
-       "Accept: application/x-dglb",
-       "User-Agent: edg_wll_Api/" PROTO_VERSION "/" COMP_PROTO,
-       "Content-Type: application/x-dglb",
-       NULL
-};
-
-int set_server_name_and_port(edg_wll_Context, const edg_wll_QueryRec **);
-
-int edg_wll_QueryEventsExt(
-               edg_wll_Context ctx,
-               const edg_wll_QueryRec **job_conditions,
-               const edg_wll_QueryRec **event_conditions,
-               edg_wll_Event **eventsOut)
-{
-       char    *response       = NULL,
-               *message        = NULL,
-               *send_mess      = NULL;
-
-       edg_wll_ResetError(ctx);
-
-       if ( edg_wll_QueryEventsRequestToXML(ctx, job_conditions, event_conditions, &send_mess) != 0 )
-       {
-               edg_wll_SetError(ctx , (edg_wll_ErrorCode) EINVAL, "Invalid query record.");
-               goto err;
-       }
-
-       ctx->p_tmp_timeout = ctx->p_query_timeout;
-       
-       if (ctx->isProxy) {
-               ctx->isProxy = 0;
-               if (edg_wll_http_send_recv_proxy(ctx, "POST /queryEvents HTTP/1.1",
-                               request_headers,send_mess, &response,NULL,&message))
-                       goto err;
-       }
-       else {
-               if (set_server_name_and_port(ctx,job_conditions))
-                       goto err; // XXX is it fatal??
-
-               if (edg_wll_http_send_recv(ctx, "POST /queryEvents HTTP/1.1",
-                               request_headers,send_mess, &response,NULL,&message))
-                       goto err;
-       }
-
-       if (http_check_status(ctx,response))
-               goto err;
-
-       edg_wll_ParseQueryEvents(ctx,message,eventsOut);
-
-err:
-       free(response);
-       free(message);
-       free(send_mess);
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-int edg_wll_QueryEvents(
-               edg_wll_Context ctx,
-               const edg_wll_QueryRec *job_conditions,
-               const edg_wll_QueryRec *event_conditions,
-               edg_wll_Event **eventsOut)
-{
-       edg_wll_QueryRec        **jconds = NULL,
-                               **econds = NULL;
-       int                     i,
-                               njconds, neconds,
-                               ret;
-
-       if ( job_conditions )
-       {
-               for ( njconds = 0; job_conditions[njconds].attr != EDG_WLL_QUERY_ATTR_UNDEF ; njconds++ )
-                       ;
-               jconds = (edg_wll_QueryRec **) calloc(njconds+1, sizeof(edg_wll_QueryRec *));
-               for ( i = 0; i < njconds; i++ )
-               {
-                       jconds[i] = (edg_wll_QueryRec *) calloc(2, sizeof(edg_wll_QueryRec));
-                       jconds[i][0] = job_conditions[i];
-               }
-       }
-
-       if ( event_conditions )
-       {
-               for ( neconds = 0; event_conditions[neconds].attr != EDG_WLL_QUERY_ATTR_UNDEF ; neconds++ )
-                       ;
-               econds = (edg_wll_QueryRec **) calloc(neconds+1, sizeof(edg_wll_QueryRec *));
-               for ( i = 0; i < neconds; i++ )
-               {
-                       econds[i] = (edg_wll_QueryRec *) calloc(2, sizeof(edg_wll_QueryRec));
-                       econds[i][0] = event_conditions[i];
-               }
-       }
-
-       if ( econds && jconds )
-               ret = edg_wll_QueryEventsExt(ctx, (const edg_wll_QueryRec **) jconds, 
-                                   (const edg_wll_QueryRec **) econds, eventsOut);
-       if ( econds && !jconds )
-               ret = edg_wll_QueryEventsExt(ctx, NULL, (const edg_wll_QueryRec **) econds, eventsOut);
-       if ( !econds && jconds )
-               ret = edg_wll_QueryEventsExt(ctx, (const edg_wll_QueryRec **) jconds, NULL, eventsOut);
-       if ( !econds && !jconds )
-               ret = edg_wll_QueryEventsExt(ctx, NULL, NULL, eventsOut);
-
-       if ( jconds )
-       {
-               for ( i = 0; i < njconds ; i++ )
-                       free(jconds[i]);
-               free(jconds);
-       }
-       if ( econds )
-       {
-               for ( i = 0; i < neconds ; i++ )
-                       free(econds[i]);
-               free(econds);
-       }
-
-       return ret;
-}
-
-
-int edg_wll_QueryJobsExt(
-               edg_wll_Context         ctx,
-               const edg_wll_QueryRec **        conditions,
-               int                     flags,
-               edg_wlc_JobId **        jobsOut,
-               edg_wll_JobStat **      statesOut)
-{
-       char                    *response = NULL, *message = NULL, *send_mess = NULL;
-       
-       edg_wll_ResetError(ctx);
-
-       if (!jobsOut)   flags |= EDG_WLL_STAT_NO_JOBS;
-       if (!statesOut) {flags = 0; flags |= EDG_WLL_STAT_NO_STATES;}
-       if (edg_wll_QueryJobsRequestToXML(ctx, conditions, flags, &send_mess) != 0) {
-               edg_wll_SetError(ctx , (edg_wll_ErrorCode) EINVAL, "Invalid query record.");
-               goto err;
-       }
-
-       ctx->p_tmp_timeout = ctx->p_query_timeout;
-
-       if (ctx->isProxy){
-               ctx->isProxy = 0;
-               if (edg_wll_http_send_recv_proxy(ctx, "POST /queryJobs HTTP/1.1",
-                               request_headers,send_mess,&response,NULL,&message))
-                       goto err;
-       }
-       else {                          
-               if (set_server_name_and_port(ctx, conditions))
-                       goto err;
-
-               if (edg_wll_http_send_recv(ctx, "POST /queryJobs HTTP/1.1",
-                                       request_headers,send_mess,&response,NULL,&message)) 
-                       goto err;
-       }
-         
-       if (http_check_status(ctx,response))
-               goto err;
-
-       edg_wll_ParseQueryJobs(ctx,message,jobsOut,statesOut);
-
-err:
-       free(response);
-       free(message);
-       free(send_mess);
-
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-int edg_wll_QueryJobs(
-               edg_wll_Context         ctx,
-               const edg_wll_QueryRec *        conditions,
-               int                     flags,
-               edg_wlc_JobId **        jobsOut,
-               edg_wll_JobStat **      statesOut)
-{
-       edg_wll_QueryRec        **conds;
-       int                     i, nconds, ret;
-
-       if ( !conditions )
-               return edg_wll_QueryJobsExt(ctx, NULL, flags, jobsOut, statesOut);
-
-       for ( nconds = 0; conditions[nconds].attr != EDG_WLL_QUERY_ATTR_UNDEF ; nconds++ )
-               ;
-       conds = (edg_wll_QueryRec **) malloc((nconds+1) * sizeof(edg_wll_QueryRec *));
-       conds[nconds] = NULL;
-       for ( i = 0; i < nconds ; i++ )
-       {
-               conds[i] = (edg_wll_QueryRec *) malloc(2 * sizeof(edg_wll_QueryRec));
-               conds[i][0] = conditions[i];
-               conds[i][1].attr = EDG_WLL_QUERY_ATTR_UNDEF;
-       }
-
-       ret = edg_wll_QueryJobsExt(ctx, (const edg_wll_QueryRec **) conds, flags, jobsOut, statesOut);
-
-       for ( i = 0; i < nconds ; i++ )
-               free(conds[i]);
-       free(conds);
-               
-
-       return ret;
-}
-
-
-
-int edg_wll_GetIndexedAttrs(
-        edg_wll_Context         ctx,
-        edg_wll_QueryRec       ***attrs)
-{      
-       char                    *response = NULL, *send_mess = NULL, *message = NULL;
-       
-       edg_wll_ResetError(ctx);
-
-       edg_wll_IndexedAttrsRequestToXML(ctx, &send_mess);
-       
-       if (set_server_name_and_port(ctx, NULL))
-               goto err;
-
-       ctx->p_tmp_timeout = ctx->p_query_timeout;
-
-       if (edg_wll_http_send_recv(ctx, "POST /indexedAttrs HTTP/1.1",request_headers, send_mess,
-                       &response,NULL,&message)) 
-               goto err;
-         
-       if (http_check_status(ctx,response))
-               goto err;
-
-       edg_wll_ParseIndexedAttrs(ctx,message,attrs);
-
-err:
-       free(response);
-       free(message);
-
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-
-/* 
- * wrappers around edg_wll_Query()
- */
-
-int edg_wll_UserJobs(
-               edg_wll_Context ctx,
-               edg_wlc_JobId **jobsOut,
-               edg_wll_JobStat **statesOut)
-{
-       edg_wll_QueryRec        j[2];
-       
-       memset(j,0,sizeof j);
-       
-       j[0].attr = EDG_WLL_QUERY_ATTR_OWNER;
-       j[0].op = EDG_WLL_QUERY_OP_EQUAL;
-       j[0].value.c = ctx->peerName;
-       
-       return edg_wll_QueryJobs(ctx,j,0,jobsOut,statesOut);
-}
-
-int edg_wll_JobLog(
-       edg_wll_Context ctx,
-       edg_wlc_JobId   job,
-       edg_wll_Event **eventsOut)
-{
-       edg_wll_QueryRec        j[2], e[2];
-
-       memset(j,0,sizeof j);
-       memset(e,0,sizeof e);
-
-       j[0].attr = EDG_WLL_QUERY_ATTR_JOBID;
-       j[0].op = EDG_WLL_QUERY_OP_EQUAL;
-       j[0].value.j = job;
-
-       e[0].attr = EDG_WLL_QUERY_ATTR_LEVEL;
-       e[0].op = EDG_WLL_QUERY_OP_LESS;
-       e[0].value.i = ctx->p_level + 1;
-
-       return edg_wll_QueryEvents(ctx,j,e,eventsOut);
-}
-
-int edg_wll_JobStatus(
-                edg_wll_Context ctx,
-                edg_wlc_JobId job,
-                int flags,
-                edg_wll_JobStat *stat)
-{
-       edg_wll_QueryRec        j[2];
-       edg_wll_JobStat         *statesOut = NULL;
-       int                     ret;
-
-       memset(j,0,sizeof j);
-
-       j[0].attr = EDG_WLL_QUERY_ATTR_JOBID;
-       j[0].op = EDG_WLL_QUERY_OP_EQUAL;
-       j[0].value.j = job;
-       j[1].attr = EDG_WLL_QUERY_ATTR_UNDEF;
-
-       ret = edg_wll_QueryJobs(ctx,j,flags,NULL,&statesOut);
-
-       if (ret) return ret;
-
-       if (statesOut) {
-               if (statesOut[0].state == EDG_WLL_JOB_UNDEF) {
-                       memcpy(stat, statesOut, sizeof(edg_wll_JobStat));
-                       free(statesOut);        
-                       ret = edg_wll_SetError(ctx , (edg_wll_ErrorCode) ENOENT, "Query returned no result.");
-               }
-               else {
-                       /* check wheter there is only one field in status reply */
-                       assert(statesOut[1].state == EDG_WLL_JOB_UNDEF);
-                       /* copy only 1st status */
-                       memcpy(stat, statesOut, sizeof(edg_wll_JobStat));
-                       /* release only array of states, keep all links unfreed for the previous copy */
-                       free(statesOut);
-               }
-       }
-
-       return ret;
-}
-
-
-       
-int edg_wll_QueryListener(edg_wll_Context ctx, edg_wlc_JobId job, const char *name, char** host, uint16_t *port) {
-
-       int             i;
-       edg_wll_Event           *events = NULL;
-       int             errCode = 0;
-        edg_wll_QueryRec    jr[2],er[2];
-       int             found = 0;
-
-       memset(jr,0,sizeof jr);
-       memset(er,0,sizeof er);
-        jr[0].attr = EDG_WLL_QUERY_ATTR_JOBID;
-        jr[0].op = EDG_WLL_QUERY_OP_EQUAL;
-        jr[0].value.j = job;
-
-        er[0].attr = EDG_WLL_QUERY_ATTR_EVENT_TYPE;
-        er[0].op = EDG_WLL_QUERY_OP_EQUAL;
-        er[0].value.i = EDG_WLL_EVENT_LISTENER;
-
-        if (edg_wll_QueryEvents(ctx, jr, er, &events)) {
-               return edg_wll_Error(ctx, NULL, NULL);
-       }               
-       
-       for (i=0; events[i].type != EDG_WLL_EVENT_UNDEF; i++) {
-               if (!strcmp(name, events[i].listener.svc_name)) {
-                       found = 1;
-                       if (host != NULL)
-                               *host = strdup(events[i].listener.svc_host);
-                       if (port != NULL)
-                               *port = events[i].listener.svc_port;
-               }
-               edg_wll_FreeEvent(&events[i]);
-       }
-       free(events);
-       
-       if (!found)
-               errCode = ENOENT;
-
-       return edg_wll_SetError(ctx, errCode, NULL);
-}
-
-
-int set_server_name_and_port(edg_wll_Context ctx, const edg_wll_QueryRec **job_conditions)
-{
-       int                             i = 0, j,
-                                       found = 0,
-                                       error = 0;
-       int                             srvPort = 0,
-                                       srvPortTmp;
-       char               *srvName = NULL,
-                                  *srvNameTmp;
-
-
-       if ( job_conditions ) for ( j = 0; job_conditions[j]; j++ )
-               for ( i = 0; (job_conditions[j][i].attr != EDG_WLL_QUERY_ATTR_UNDEF); i++ )
-                       if ( job_conditions[j][i].attr == EDG_WLL_QUERY_ATTR_JOBID)
-                       {
-                               edg_wlc_JobIdGetServerParts(job_conditions[j][i].value.j,&srvNameTmp,&srvPortTmp);
-                               if ( found )
-                               {
-                                       if ( strcmp(srvName, srvNameTmp) || (srvPort != srvPortTmp) )
-                                       {
-                                               free(srvNameTmp); free(srvName);
-                                               return edg_wll_SetError(ctx, EINVAL, "Two different servers specifieed in one query");
-                                       }
-                                       free(srvNameTmp);
-                               }
-                               else
-                               {
-                                       srvName = srvNameTmp;
-                                       srvPort = srvPortTmp;
-                                       found = 1;
-                               }
-                       }       
-
-       if ( found && !ctx->p_query_server_override)
-       { 
-               if (!ctx->srvName)
-               {
-                       ctx->srvName = strdup(srvName);
-                       ctx->srvPort = srvPort;
-                       free(srvName);
-               }
-               else if (strcmp(srvName, ctx->srvName) || (srvPort != ctx->srvPort))
-               {
-                       free(ctx->srvName);
-                       ctx->srvName = strdup(srvName);
-                       ctx->srvPort = srvPort;
-                       free(srvName);
-               }
-       }
-       else if ( !ctx->srvName || !ctx->srvPort )
-       {
-               if (!ctx->p_query_server) 
-                       return(edg_wll_SetError(ctx, (edg_wll_ErrorCode) EINVAL, "Hostname of server to query is not set"));
-               else ctx->srvName = strdup(ctx->p_query_server);
-               if (!ctx->p_query_server_port)
-                       return(edg_wll_SetError(ctx, (edg_wll_ErrorCode) EINVAL, "Port of server to query is not set"));
-               else ctx->srvPort = ctx->p_query_server_port;
-       }
-               
-       return(error);
-}
-
-int edg_wll_QuerySequenceCodeProxy(edg_wll_Context ctx, edg_wlc_JobId jobId, char **code) 
-{
-       int             error = 0;
-       char   *response = NULL,
-                  *message     = NULL,
-                  *send_mess = NULL;
-       
-       
-       ctx->isProxy = 1;
-       edg_wll_ResetError(ctx);
-
-       if ( edg_wll_QuerySequenceCodeToXML(ctx, jobId, &send_mess) != 0 )
-       {
-               edg_wll_SetError(ctx , (edg_wll_ErrorCode) EINVAL, "Invalid query record.");
-               goto err;
-       }
-
-       ctx->p_tmp_timeout = ctx->p_query_timeout; 
-       
-       error = edg_wll_http_send_recv_proxy(ctx, "POST /querySequenceCode HTTP/1.1",
-                       request_headers, send_mess, &response, NULL, &message);
-       if ( error != 0 )
-               goto err;
-
-       if (http_check_status(ctx,response))
-               goto err;
-
-       edg_wll_ParseQuerySequenceCodeResult(ctx,message,code);
-
-err:
-       free(response);
-       free(message);
-       free(send_mess);
-
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-
-/******************************************************************
- * Proxy wrappers
- */
-
-
-int edg_wll_QueryEventsExtProxy(
-               edg_wll_Context ctx,
-               const edg_wll_QueryRec **job_conditions,
-               const edg_wll_QueryRec **event_conditions,
-               edg_wll_Event **eventsOut)
-{
-       ctx->isProxy = 1;
-
-       return edg_wll_QueryEventsExt(ctx, job_conditions, event_conditions, eventsOut);
-}
-
-
-
-int edg_wll_QueryEventsProxy(
-               edg_wll_Context ctx,
-               const edg_wll_QueryRec *job_conditions,
-               const edg_wll_QueryRec *event_conditions,
-               edg_wll_Event **eventsOut)
-{
-       ctx->isProxy = 1;
-       
-       return edg_wll_QueryEvents(ctx, job_conditions, event_conditions, eventsOut);
-}
-
-
-
-int edg_wll_QueryJobsExtProxy(
-               edg_wll_Context         ctx,
-               const edg_wll_QueryRec **        conditions,
-               int                     flags,
-               edg_wlc_JobId **        jobsOut,
-               edg_wll_JobStat **      statesOut)
-{      
-       ctx->isProxy = 1;
-       
-       return edg_wll_QueryJobsExt(ctx, conditions, flags, jobsOut, statesOut);
-}
-
-
-
-int edg_wll_QueryJobsProxy(
-               edg_wll_Context         ctx,
-               const edg_wll_QueryRec *        conditions,
-               int                     flags,
-               edg_wlc_JobId **        jobsOut,
-               edg_wll_JobStat **      statesOut)
-{
-       ctx->isProxy = 1;
-       
-       return edg_wll_QueryJobs(ctx, conditions, flags, jobsOut, statesOut);
-}
-
-
-int edg_wll_UserJobsProxy(
-               edg_wll_Context ctx,
-               edg_wlc_JobId **jobsOut,
-               edg_wll_JobStat **statesOut)
-{
-       ctx->isProxy = 1;
-       
-       return edg_wll_UserJobs(ctx, jobsOut, statesOut);
-}
-
-int edg_wll_JobLogProxy(
-       edg_wll_Context ctx,
-       edg_wlc_JobId   job,
-       edg_wll_Event **eventsOut)
-{
-       ctx->isProxy = 1;
-
-       return edg_wll_JobLog(ctx, job, eventsOut);
-}
-
-int edg_wll_JobStatusProxy(
-                edg_wll_Context ctx,
-                edg_wlc_JobId job,
-                int flags,
-                edg_wll_JobStat *stat)
-{
-       ctx->isProxy = 1;
-               
-       return edg_wll_JobStatus(ctx, job, flags, stat);
-}
-
-
-       
-int edg_wll_QueryListenerProxy(
-               edg_wll_Context ctx,
-               edg_wlc_JobId job,
-               const char *name,
-               char** host,
-               uint16_t *port) 
-{
-       ctx->isProxy = 1;
-
-       return edg_wll_QueryListener(ctx, job, name, host, port);
-}
diff --git a/org.glite.lb.client/src/dump.c b/org.glite.lb.client/src/dump.c
deleted file mode 100644 (file)
index f172192..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-#ident "$Header$"
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <string.h>
-#include <time.h>
-#include <errno.h>
-
-#include <globus_common.h>
-
-#define CLIENT_SBIN_PROG
-
-#include "glite/lb/consumer.h"
-#include "glite/lb/context-int.h"
-#include "glite/lb/dump.h"
-#include "glite/lb/ulm_parse.h"
-#include "glite/lb/xml_parse.h"
-#include "glite/lb/mini_http.h"
-
-
-#define dprintf(x) { if (debug) printf x; }
-
-static const char rcsid[] = "@(#)$Id$";
-
-static int debug=0;
-
-static void printerr(edg_wll_Context ctx);
-
-static struct option opts[] = {
-       { "from",               required_argument, NULL, 'f'},
-       { "to",                 required_argument, NULL, 't'},
-       { "help",               no_argument, NULL, 'h' },
-       { "version",            no_argument, NULL, 'v' },
-       { "debug",              no_argument, NULL, 'd' },
-       { "server",             required_argument, NULL, 'm' },
-       { NULL,                 no_argument, NULL,  0 }
-};
-
-static void usage(char *me)
-{
-       fprintf(stderr,"usage: %s [option]\n"
-               "       -f, --from YYYYMMDDHHmmss   beginning of the time interval for events to be dumped\n"
-               "       -t, --to YYYYMMDDHHmmss     end of the time interval for events to be dumped\n"
-               "       -h, --help                  display this help\n"
-               "       -v, --version               display version\n"
-               "       -d, --debug                 diagnostic output\n"
-               "       -m, --server                L&B server machine name\n",
-               me);
-}
-
-int main(int argc,char *argv[])
-{
-       edg_wll_DumpRequest *request;
-       edg_wll_DumpResult *result;
-       char *server = NULL;
-       char date[ULM_DATE_STRING_LENGTH+1];
-
-       char *me;
-       int opt;
-       edg_wll_Context ctx;
-
-       /* initialize request to server defaults */
-       request = (edg_wll_DumpRequest *) calloc(1,sizeof(edg_wll_DumpRequest));
-       request->from = EDG_WLL_DUMP_LAST_END;
-       request->to = EDG_WLL_DUMP_NOW;
-
-       /* initialize result */
-       result = (edg_wll_DumpResult *) calloc(1,sizeof(edg_wll_DumpResult));
-
-       me = strrchr(argv[0],'/');
-       if (me) me++; else me=argv[0];
-
-       /* get arguments */
-       while ((opt = getopt_long(argc,argv,"f:t:m:dvh",opts,NULL)) != EOF) {
-
-               switch (opt) {
-
-               case 'f': request->from = (time_t) edg_wll_ULMDateToDouble(optarg); break;
-               case 't': request->to = (time_t) edg_wll_ULMDateToDouble(optarg); break;
-               case 'm': server = optarg; break;
-               case 'd': debug = 1; break;
-               case 'v': fprintf(stdout,"%s:\t%s\n",me,rcsid); exit(0);
-               case 'h':
-               case '?': usage(me); return 1;
-               }
-       }
-
-       /* Initialize Globus common module */
-       dprintf(("Initializing Globus common module..."));
-       if (globus_module_activate(GLOBUS_COMMON_MODULE) != GLOBUS_SUCCESS) {
-               dprintf(("no.\n"));
-               fprintf(stderr,"Unable to initialize Globus common module\n");
-       } else {
-               dprintf(("yes.\n"));
-       }
-
-       /* check request */
-       if (debug) {
-               printf("Dump request:\n");
-               if (request->from < 0) {
-                       printf("- from: %ld.\n",request->from);
-               } else {
-                       if (edg_wll_ULMTimevalToDate(request->from,0,date) != 0) {
-                               fprintf(stderr,"Error parsing 'from' argument.\n");
-                               goto main_end;
-                       }
-                       printf("- from: %ld (i.e. %s).\n",request->from,date);
-               }
-               if (request->to < 0) {
-                       printf("- to: %ld.\n",request->to);
-               } else {
-                       if (edg_wll_ULMTimevalToDate(request->to,0,date) != 0) {
-                               fprintf(stderr,"Error parsing 'to' argument.\n");
-                               goto main_end;
-                       }
-                       printf("- to: %ld (i.e. %s).\n",request->to,date);
-               }
-       }
-
-       /* initialize context */
-       edg_wll_InitContext(&ctx);
-       if ( server )
-       {
-               char *p = strchr(server, ':');
-               if ( p )
-               {
-                       edg_wll_SetParam(ctx, EDG_WLL_PARAM_QUERY_SERVER_PORT, atoi(p+1));
-                       *p = 0;
-               }
-               edg_wll_SetParam(ctx, EDG_WLL_PARAM_QUERY_SERVER, server);
-       }
-
-       /* that is the DumpEvents */
-       dprintf(("Running the edg_wll_DumpEvents...\n"));
-       if (edg_wll_DumpEvents(ctx, request, result) != 0) {
-               fprintf(stderr,"Error running the edg_wll_DumpEvents().\n");
-               printerr(ctx);
-               switch ( edg_wll_Error(ctx, NULL, NULL) )
-               {
-               case ENOENT:
-               case EPERM:
-               case EINVAL:
-                       break;
-               default:
-                       goto main_end;
-               }
-       }
-
-       /* examine the result */
-       dprintf(("Examining the result of edg_wll_DumpEvents...\n"));
-       printf("Dump result:\n");
-       if (result->server_file) {
-               printf("- The jobs were dumped to the file '%s' at the server.\n",result->server_file);
-       } else {
-               printf("- The jobs were not dumped.\n");
-       }
-       if (edg_wll_ULMTimevalToDate(result->from,0,date) != 0) {
-               fprintf(stderr,"Error parsing 'from' argument.\n");
-               goto main_end;
-       }
-       printf("- from: %ld (i.e. %s).\n",result->from,date);
-       if (edg_wll_ULMTimevalToDate(result->to,0,date) != 0) {
-               fprintf(stderr,"Error parsing 'to' argument.\n");
-               goto main_end;
-       }
-       printf("- to: %ld (i.e. %s).\n",result->to,date);
-
-main_end:
-       dprintf(("End.\n"));
-       if (request) free(request);
-       if (result) free(result);
-       edg_wll_FreeContext(ctx);
-       return 0;
-}
-
-
-static void printerr(edg_wll_Context ctx) 
-{
-       char    *errt,*errd;
-
-       edg_wll_Error(ctx,&errt,&errd);
-       fprintf(stderr,"%s (%s)\n",errt,errd);
-}
-
-
-static const char* const request_headers[] = {
-       "Cache-Control: no-cache",
-       "Accept: application/x-dglb",
-       "User-Agent: edg_wll_Api/" PROTO_VERSION "/" COMP_PROTO,
-       "Content-Type: application/x-dglb",
-       NULL
-};
-
-int edg_wll_DumpEvents(
-               edg_wll_Context ctx,
-               const edg_wll_DumpRequest *request,
-               edg_wll_DumpResult *result)
-{
-       int     error;
-       char    *send_mess,
-               *response = NULL,
-               *recv_mess = NULL;
-
-       edg_wll_DumpRequestToXML(ctx, request, &send_mess);
-
-       ctx->p_tmp_timeout = ctx->p_query_timeout;
-       if (ctx->p_tmp_timeout.tv_sec < 600) ctx->p_tmp_timeout.tv_sec = 600;
-
-       if (set_server_name_and_port(ctx, NULL))
-               goto edg_wll_dumpevents_end;
-
-       error = edg_wll_http_send_recv(ctx,
-                       "POST /dumpRequest HTTP/1.1", request_headers, send_mess,
-                       &response, NULL, &recv_mess);
-       if ( error != 0 )
-               goto edg_wll_dumpevents_end;
-
-       if (http_check_status(ctx, response, &recv_mess))
-               goto edg_wll_dumpevents_end;
-
-       edg_wll_ParseDumpResult(ctx, recv_mess, result);
-
-edg_wll_dumpevents_end:
-       if (response) free(response);
-       if (recv_mess) free(recv_mess);
-       if (send_mess) free(send_mess);
-       return edg_wll_Error(ctx,NULL,NULL);
-}
diff --git a/org.glite.lb.client/src/load.c b/org.glite.lb.client/src/load.c
deleted file mode 100644 (file)
index ce18d03..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-#ident "$Header$"
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <string.h>
-#include <time.h>
-#include <errno.h>
-
-#include <globus_common.h>
-
-#define CLIENT_SBIN_PROG
-
-#include "glite/lb/consumer.h"
-#include "glite/lb/context-int.h"
-#include "glite/lb/load.h"
-#include "glite/lb/ulm_parse.h"
-#include "glite/lb/xml_parse.h"
-#include "glite/lb/mini_http.h"
-
-#define dprintf(x) { if (debug) printf x; }
-
-static const char rcsid[] = "@(#)$Id$";
-
-static int debug=0;
-
-static void printerr(edg_wll_Context ctx);
-
-static struct option opts[] = {
-       { "file",               required_argument, NULL, 'f'},
-       { "help",               no_argument, NULL, 'h' },
-       { "version",            no_argument, NULL, 'v' },
-       { "debug",              no_argument, NULL, 'd' },
-       { "server",             required_argument, NULL, 'm' },
-       { NULL,                 no_argument, NULL,  0 }
-};
-
-static void usage(char *me)
-{
-       fprintf(stderr,"usage: %s [option]\n"
-               "       -m, --server                L&B server machine name\n"
-               "       -f, --file filename         file with dumped data to be loaded\n"
-               "       -h, --help                  display this help\n"
-               "       -v, --version               display version\n"
-               "       -d, --debug                 diagnostic output\n",
-               me);
-}
-
-int main(int argc,char *argv[])
-{
-       edg_wll_LoadRequest *request;
-       edg_wll_LoadResult *result;
-       char *server = NULL;
-       char date[ULM_DATE_STRING_LENGTH+1];
-
-       char *me;
-       int opt;
-       edg_wll_Context ctx;
-
-       /* initialize request to server defaults */
-       request = (edg_wll_LoadRequest *) calloc(1,sizeof(edg_wll_LoadRequest));
-       request->server_file = NULL;
-
-       /* initialize result */
-       result = (edg_wll_LoadResult *) calloc(1,sizeof(edg_wll_LoadResult));
-
-       me = strrchr(argv[0],'/');
-       if (me) me++; else me=argv[0];
-
-       /* get arguments */
-       while ((opt = getopt_long(argc,argv,"f:t:m:dvh",opts,NULL)) != EOF) {
-
-               switch (opt) {
-
-               case 'f': request->server_file = optarg; break;
-               case 'm': server = optarg; break;
-               case 'd': debug = 1; break;
-               case 'v': fprintf(stdout,"%s:\t%s\n",me,rcsid); exit(0);
-               case 'h':
-               case '?': usage(me); return 1;
-               }
-       }
-
-       /* Initialize Globus common module */
-       dprintf(("Initializing Globus common module..."));
-       if (globus_module_activate(GLOBUS_COMMON_MODULE) != GLOBUS_SUCCESS) {
-               dprintf(("no.\n"));
-               fprintf(stderr,"Unable to initialize Globus common module\n");
-       } else {
-               dprintf(("yes.\n"));
-       }
-
-       /* initialize context */
-       edg_wll_InitContext(&ctx);
-       if ( server )
-       {
-               char *p = strchr(server, ':');
-               if ( p )
-               {
-                       edg_wll_SetParam(ctx, EDG_WLL_PARAM_QUERY_SERVER_PORT, atoi(p+1));
-                       *p = 0;
-               }
-               edg_wll_SetParam(ctx, EDG_WLL_PARAM_QUERY_SERVER, server);
-       }
-
-       /* check request */
-       if (debug) {
-               printf("Load request:\n");
-               if (request->server_file) {
-                       printf("- server_file: %s.\n",request->server_file);
-               } else {
-                       printf("- server_file: not specified.\n");
-               }
-       }
-
-       /* that is the LoadEvents */
-       dprintf(("Running the edg_wll_LoadEvents...\n"));
-       if (edg_wll_LoadEvents(ctx, request, result) != 0) {
-               fprintf(stderr,"Error running the edg_wll_LoadEvents().\n");
-               printerr(ctx);
-               if ( !result->server_file )
-                       goto main_end;
-       }
-
-       /* examine the result */
-       dprintf(("Examining the result of edg_wll_LoadEvents...\n"));
-       printf("Load result:\n");
-       if (result->server_file)
-               printf("- Unloaded events were stored into the server file '%s'.\n", result->server_file);
-       if (edg_wll_ULMTimevalToDate(result->from,0,date) != 0) {
-               fprintf(stderr,"Error parsing 'from' argument.\n");
-               goto main_end;
-       }
-       printf("- from: %ld (i.e. %s).\n",result->from,date);
-       if (edg_wll_ULMTimevalToDate(result->to,0,date) != 0) {
-               fprintf(stderr,"Error parsing 'to' argument.\n");
-               goto main_end;
-       }
-       printf("- to: %ld (i.e. %s).\n",result->to,date);
-
-main_end:
-       dprintf(("End.\n"));
-       if (request) free(request);
-       if (result)
-       {
-               if (result->server_file)
-                       free(result->server_file);
-               free(result);
-       }
-       edg_wll_FreeContext(ctx);
-       return 0;
-}
-
-
-static void printerr(edg_wll_Context ctx) 
-{
-       char    *errt,*errd;
-
-       edg_wll_Error(ctx,&errt,&errd);
-       fprintf(stderr,"%s (%s)\n",errt,errd);
-}
-
-
-static const char* const request_headers[] = {
-       "Cache-Control: no-cache",
-       "Accept: application/x-dglb",
-       "User-Agent: edg_wll_Api/" PROTO_VERSION "/" COMP_PROTO,
-       "Content-Type: application/x-dglb",
-       NULL
-};
-
-int edg_wll_LoadEvents(
-               edg_wll_Context ctx,
-               const edg_wll_LoadRequest *request,
-               edg_wll_LoadResult *result)
-{
-       int     error;
-       char    *send_mess,
-               *response = NULL,
-               *recv_mess = NULL;
-
-       edg_wll_LoadRequestToXML(ctx, request, &send_mess);
-
-       ctx->p_tmp_timeout = ctx->p_query_timeout;
-       if (ctx->p_tmp_timeout.tv_sec < 600) ctx->p_tmp_timeout.tv_sec = 600;
-
-       if (set_server_name_and_port(ctx, NULL))
-               goto edg_wll_loadevents_end;
-
-       error = edg_wll_http_send_recv(ctx,
-                       "POST /loadRequest HTTP/1.1", request_headers, send_mess,
-                       &response, NULL, &recv_mess);
-       if ( error != 0 )
-               goto edg_wll_loadevents_end;
-
-       if (http_check_status(ctx, response, &recv_mess))
-               goto edg_wll_loadevents_end;
-
-       edg_wll_ParseLoadResult(ctx, recv_mess, result);
-
-edg_wll_loadevents_end:
-       if (response) free(response);
-       if (recv_mess) free(recv_mess);
-       if (send_mess) free(send_mess);
-       return edg_wll_Error(ctx,NULL,NULL);
-}
diff --git a/org.glite.lb.client/src/logevent.c.T b/org.glite.lb.client/src/logevent.c.T
deleted file mode 100644 (file)
index 65133fa..0000000
+++ /dev/null
@@ -1,287 +0,0 @@
-#ident "$Header$"
-
-@@@LANG: C
-/*
-@@@AUTO
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-#include <math.h> // log
-#include <ctype.h> // isspace
-
-#include <globus_common.h>
-
-#include "glite/wmsutils/jobid/cjobid.h"
-#include "glite/lb/notifid.h"
-#include "glite/lb/producer.h"
-#include "glite/lb/events.h"
-
-#include "args.h"
-
-    //"    %s -p -l 100000 -j https://localhost/First_JobIV?localhost:7771 -s UserInterface -e jobAbort DG.JOB.ABORT.REASON=\"oops\"\n\n",
-
-// undefine to disable support for -l option
-#define ENABLE_REASON_LENGTH
-
-int main(int argc, char *argv[])
-{
-       char    /* *fmt,*fname = NULL,*/ *fmt_arg=NULL;
-        char   *server = NULL, *code = NULL;
-       char    *ff = NULL, *jobid_s = NULL;
-       char    *src_instance = NULL;
-       int     err = 0/*,i,done = 0,fmtlen*/;
-       int     pri = 0;
-       char    *lbproxy = NULL;
-        int    deb = 0;
-#ifdef ENABLE_REASON_LENGTH
-       int     elength = 0;
-#endif
-       edg_wll_Context ctx;
-        edg_wll_Source src;
-       edg_wll_EventCode event = EDG_WLL_EVENT_UNDEF;
-       edg_wlc_JobId jobid = 0;
-        int (*logev)(edg_wll_Context context,
-                    edg_wll_EventCode event,
-                    char *fmt, ...);
-
-       /* all possible variables */
-@@@{
-    my %vars = ();
-    for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-              $event->getTypes) {
-       selectType $event $t;
-       for ($event->getFieldsOrdered) {
-           my $f = selectField $event $_;
-           my $fn = $f->getName;
-           my $type = {
-               "type" => $f->getType,
-               "defval" => $f->getDefaultNullValue
-           };
-
-           $type = { type=>'char *',defval=>'NULL' } if $f->{codes};
-
-           $vars{$fn} = $type;
-       }
-    }
-    foreach $name ( sort keys %vars ) {
-       gen qq{\t$vars{$name}->{"type"} $name = $vars{$name}->{"defval"};\n};
-    }
-@@@}
-
-       /* all possible arguments */
-       edg_wll_Args parray[] = {
-           { EDG_WLL_ARGS_EVENT, "e", "event", "select event type (see -e help)", &event },
-           { EDG_WLL_ARGS_BOOL, "p", "priority", "send as priority event", &pri },
-           { EDG_WLL_ARGS_STRING, "x", "lbproxy", "send directly to L&B Proxy (not locallogger) with given credentials", &lbproxy },
-           { EDG_WLL_ARGS_STRING, "m", "machine", 0, &server },
-           { EDG_WLL_ARGS_SOURCE, "s", "source", "event source (see -s help)", &src },
-           { EDG_WLL_ARGS_STRING, "i", "source-instance", "event source instance", &src_instance },
-           { EDG_WLL_ARGS_STRING, "j", "jobid", "JobId", &jobid_s },
-           { EDG_WLL_ARGS_STRING, "c", "sequence", "event sequence code", &code },
-           { EDG_WLL_ARGS_BOOL, "d", "debug mode", "enable debug mode", &deb },
-#ifdef ENABLE_REASON_LENGTH
-           { EDG_WLL_ARGS_INT, "l", "reason-length", "extend 'reason' string to length (debug only)", &elength, 0, 1000000000 },
-#endif
-@@@{
-    my %typetab = (
-       "char *", "EDG_WLL_ARGS_STRING",
-       "int", "EDG_WLL_ARGS_INT",
-       "edg_wlc_JobId", "EDG_WLL_ARGS_JOBID",
-       "edg_wll_NotifId", "EDG_WLL_ARGS_NOTIFID",
-       "edg_wll_Source", "EDG_WLL_ARGS_SOURCE",
-       "uint16_t", "EDG_WLL_ARGS_UINT16"
-                 );
-    my %vars = ();
-    for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-              $event->getTypes) {
-       selectType $event $t;
-       for ($event->getFieldsOrdered) {
-           my $f = selectField $event $_;
-            my $ft = $f->{codes} ? 'char *' : $f->getType;
-           my $fn = $f->getName;
-           my $fc = $f->getComment;
-           $namehelp = { "type" => $ft, "help" => $fc };
-#         gen qq{ $fn $ft $fc \n};
-          $vars{$fn} = $namehelp;
-       }
-    }
-    foreach $name ( sort keys %vars ) {
-#      gen qq{ $vars{$name} $name \n };
-       gen qq{\t    \{ $typetab{$vars{$name}->{"type"}}, 0, "$name", "$vars{$name}->{"help"}", &$name \},\n};
-    }
-
-@@@}
-           { EDG_WLL_ARGS_HELP },
-           { EDG_WLL_ARGS_NONE },
-       };
-       edg_wll_ParseArgs(&argc, argv, parray,
-                         "Usage: %s [-d] [-p] [-x] [-l eventlen] [-j dg_jobid]"
-                         "[-s source_id] -e event [key=value ...]");
-
-/* XXX: Obsolete?
-       if (globus_module_activate(GLOBUS_COMMON_MODULE) != GLOBUS_SUCCESS) {
-               fprintf(stderr, "Cannot initialize Globus common module\n");
-               exit(1);
-       }
-*/
-
-       edg_wll_InitContext(&ctx);
-
-       /* log the event - priority/normal/proxy */
-       logev = (pri) ? edg_wll_LogEventSync : edg_wll_LogEvent;
-       logev = (lbproxy) ? edg_wll_LogEventProxy : logev;
-
-        /* if no job given - generate some */
-       if (jobid_s == 0) {
-               const char* s;
-               if (!server) {
-                   s = "localhost";
-                   err = 1; // result fail if used normaly
-               } else
-                   s = server;
-               edg_wlc_JobIdCreate(s, 0, &jobid);
-               jobid_s = edg_wlc_JobIdUnparse(jobid);
-               fprintf(stderr, "JobId not given: created %s (server: %s)\n",jobid_s, s);
-       }
-       else if ((errno = edg_wlc_JobIdParse(jobid_s,&jobid))) {
-               perror(jobid_s);
-               exit(1);
-       }
-
-       if (event == EDG_WLL_EVENT_UNDEF) {
-               fprintf(stderr,"%s: unknown or unspecified event\n",argv[0]);
-               exit(1);
-       }
-       edg_wll_SetParam(ctx, EDG_WLL_PARAM_SOURCE, src);
-       if (src_instance) edg_wll_SetParam(ctx, EDG_WLL_PARAM_INSTANCE, src_instance);
-       edg_wll_SetParam(ctx, EDG_WLL_PARAM_LEVEL,
-                        (deb) ? EDG_WLL_LEVEL_DEBUG : EDG_WLL_LEVEL_SYSTEM);
-
-       if (lbproxy) {
-               edg_wll_SetParam(ctx, EDG_WLL_PARAM_LBPROXY_STORE_SOCK, "/tmp/lb_proxy_store.sock");
-               edg_wll_SetParam(ctx, EDG_WLL_PARAM_LBPROXY_SERVE_SOCK, "/tmp/lb_proxy_serve.sock");
-               if (edg_wll_SetLoggingJobProxy(ctx,jobid,code,lbproxy,EDG_WLL_SEQ_NORMAL)) {
-                       char    *et,*ed;
-                       edg_wll_Error(ctx,&et,&ed);
-                       fprintf(stderr,"SetLoggingJobProxy(%s,%s,%s): %s (%s)\n",jobid_s,code,lbproxy,et,ed);
-                       exit(1);
-               }
-       } else {
-               if (edg_wll_SetLoggingJob(ctx,jobid,code,EDG_WLL_SEQ_NORMAL)) {
-                       char    *et,*ed;
-                       edg_wll_Error(ctx,&et,&ed);
-                       fprintf(stderr,"SetLoggingJob(%s,%s): %s (%s)\n",jobid_s,code,et,ed);
-                       exit(1);
-               }
-       }
-
-#ifdef ENABLE_REASON_LENGTH
-       if (elength > 200000000) {
-               fprintf(stderr,"%s: usupported reason message length: %d\n", argv[0], elength);
-       } else if (elength > 0) {
-               int d;
-               int i = 0;
-               reason = realloc(reason, elength + 1);
-                reason[elength] = 0;
-               while (i < (elength)) {
-                        if ((i % 20) == 0 && (i + 14) < elength)
-                               i += sprintf(reason + i, "%d", i);
-                       reason[i++] = '.';
-               }
-               // amount of decimal digits + "end="
-                d = (int)ceil(log(i)/log(10)) + 5;
-               if (i > d)
-                       sprintf(reason + i - (int)(d), "end=%d",i);
-               reason[i] = 0;
-       }
-#endif
-#if 0
-       if (fname) {
-               FILE *f = fopen(fname,"r");
-               long s;
-                size_t r;
-
-               fmt = "%s FILE.CONTENT=\"%|Us\" ";
-
-               if (!f) { perror(fname); return 1; }
-               fseek(f,0L,SEEK_END);
-               s = ftell(f); rewind(f);
-               ff = (char *) malloc(s+1); if (!ff) { perror(NULL); return 0; }
-               r = fread(ff,1,s,f);
-               printf("%s: read %d\n",fname,r);
-               ff[s] = 0;
-               fclose(f);
-       }
-       else
-               fmt = "%s ";
-#endif
-
-       //err = edg_wll_LogEvent(ctx, event, fmt, fmt_arg, ff);
-
-       switch (event)
-       {
-@@@{
-$indent = "\t";
-    for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-              $event->getTypes) {
-
-        my $tu = uc $t;
-       gen $indent."case EDG_WLL_EVENT_$tu :\n";
-
-       selectType $event $t;
-       my $argl = "";
-       for ($event->getFieldsOrdered) {
-           my $f = selectField $event $_;
-           my $fn = $f->getName;
-           my $ft;
-
-#          gen {  $fn  $f->{codes} };
-           if ($f->{codes}) {
-#                        $ft = "enum edg_wll\_$t" . ucfirst $fn;
-               $ft = "char *";
-           } else {
-               $ft = $f->getType;
-           }
-
-           $fn = $f->getType()."ToString($fn)" if $ULMasString{$f->{type}};
-
-           $argl = $argl . ", ";
-           $argl = $argl . $fn;
-       }
-gen qq{\t    //edg_wll_Log$t();
-\t    err |= logev(ctx, EDG_WLL_EVENT_$tu, EDG_WLL_FORMAT_${tu}$argl);
-\t    break;
-};
-    }
-@@@}
-       default:
-           fprintf(stderr, "unknown event\n");
-       }
-
-       edg_wlc_JobIdFree(jobid);
-       if (jobid_s) free(jobid_s); // add all strings
-
-       if (err) {
-           char        *et,*ed;
-
-           edg_wll_Error(ctx,&et,&ed);
-           fprintf(stderr,"%s: edg_wll_LogEvent*(): %s (%s)\n",
-                   argv[0],et,ed);
-           free(et); free(ed);
-       }
-
-       code = edg_wll_GetSequenceCode(ctx);
-       puts(code);
-       free(code);
-
-       edg_wll_FreeContext(ctx);
-
-       if (ff) free(ff);
-       if (fmt_arg) free(fmt_arg);
-
-       return err;
-}
diff --git a/org.glite.lb.client/src/notification.c b/org.glite.lb.client/src/notification.c
deleted file mode 100644 (file)
index 4cd2a61..0000000
+++ /dev/null
@@ -1,937 +0,0 @@
-#ident "$Header$"
-
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-
-
-#include "glite/lb/notification.h"
-#include "glite/lb/events.h"
-#include "glite/lb/log_proto.h"
-#include "glite/lb/mini_http.h"
-#include "glite/lb/context-int.h"
-#include "glite/lb/xml_parse.h"
-#include "glite/lb/events_parse.h"
-#include "glite/lb/il_string.h"
-#include "glite/lb/escape.h"
-#include "glite/lb/lb_gss.h"
-
-#include "connection.h"
-
-#define CON_QUEUE               10     /* listen() queue limit */
-
-/* XXX: moving all request_headers to one file would be nice
- */
-static const char* const request_headers[] = {
-       "Cache-Control: no-cache",
-       "Accept: application/x-dglb",
-       "User-Agent: edg_wll_Api/" PROTO_VERSION "/" COMP_PROTO,
-       "Content-Type: application/x-dglb",
-       NULL
-};
-
-
-
-
-/* Decrement timeout
- */
-static int decrement_timeout(struct timeval *timeout, struct timeval before, struct timeval after)
-{
-       if (!timeout) 
-               return(0);      // wait indefinitely
-       
-        (*timeout).tv_sec = (*timeout).tv_sec - (after.tv_sec - before.tv_sec);
-        (*timeout).tv_usec = (*timeout).tv_usec - (after.tv_usec - before.tv_usec);
-        while ( (*timeout).tv_usec < 0) {
-                (*timeout).tv_sec--;
-                (*timeout).tv_usec += 1000000;
-        }
-        if ( ((*timeout).tv_sec < 0) || (((*timeout).tv_sec == 0) && ((*timeout).tv_usec == 0)) ) return(1);
-        else return(0);
-}
-
-
-
-/* Split address to name & port
- */
-static void get_name_and_port(const char *address, char **name, int *port)
-{
-       char *n = NULL, *p;
-       
-       n = strdup(address);
-       p = strchr(n, ':');
-       if (p)
-       {
-               *port = atoi(p+1);
-               *p = 0;
-       }
-       *name = strdup(n);
-       free(n);
-}      
-
-
-static int my_bind(edg_wll_Context ctx, const char *name, int port, int *fd)
-{
-       struct  sockaddr_in     a;
-       socklen_t               alen = sizeof(a);
-       int                     sock;
-               
-       sock = socket(PF_INET,SOCK_STREAM,0);
-       if (sock<0) 
-               return  edg_wll_SetError(ctx, errno, "socket() failed");
-
-       a.sin_family = AF_INET;
-       a.sin_port = htons(port);
-       a.sin_addr.s_addr = name? inet_addr(name): htonl(INADDR_ANY);
-
-//     setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
-       if (bind(sock,(struct sockaddr *)&a,alen))
-               return  edg_wll_SetError(ctx, errno, "bind() failed");
-
-       
-       if (listen(sock,CON_QUEUE)) 
-               return edg_wll_SetError(ctx, errno, "listen() failed");
-       
-       *fd = sock;
-       
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-       
-
-
-static int set_server_name_and_port(edg_wll_Context ctx) 
-{
-
-       if (!ctx->p_notif_server)
-               return(edg_wll_SetError(ctx, (edg_wll_ErrorCode) EINVAL, 
-                               "Hostname of server to notif is not set"));
-       else {
-               free(ctx->srvName);
-               ctx->srvName = strdup(ctx->p_notif_server);
-       }
-       if (!ctx->p_notif_server_port)
-               return(edg_wll_SetError(ctx, (edg_wll_ErrorCode) EINVAL, 
-                               "Port of server to notif is not set"));
-       else ctx->srvPort = ctx->p_notif_server_port;
-
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-
-
-static int get_client_address(
-               edg_wll_Context ctx, 
-               int fd,
-               const char *address_override,
-               char **address) 
-       
-{
-       struct  sockaddr_in     a;
-       socklen_t               alen = sizeof(a);
-       struct hostent          *he;
-       char                    *name = NULL;
-       int                     port = 0;
-       
-       
-       if (address_override) {
-               struct in_addr in;
-               
-               get_name_and_port(address_override, &name, &port);
-               
-               if ( (he = gethostbyname((const char *) name)) == NULL) {
-                       edg_wll_SetError(ctx, errno, "gethostbyname() failed");
-                       goto err;
-               }
-               
-               free(name);
-               
-               memmove(&in.s_addr, he->h_addr_list[0], sizeof(in.s_addr));
-               name = strdup(inet_ntoa(in));
-       
-               if ( (he = gethostbyname((const char *) name)) == NULL) {
-                       edg_wll_SetError(ctx, errno, "gethostbyname() failed");
-                       goto err;
-               }
-       
-               /* Test whether open sockket represents the same address as address_override
-                * if not, close ctx->notifSock and bind to new socket corresponding to 
-                * address_override
-                */
-               if (ctx->notifSock >= 0) {
-                       if (getsockname(ctx->notifSock, (struct sockaddr *) &a, &alen)) 
-                               return edg_wll_SetError(ctx, errno, "getsockname() failed");
-                       
-                       if ( (strcmp(inet_ntoa(a.sin_addr), name)) || (ntohs(a.sin_port) != port) ) {
-                               
-                               if (close(ctx->notifSock)) {
-                                       edg_wll_SetError(ctx, errno, "close() failed");
-                                       goto err;
-                               }
-                               ctx->notifSock = -1;
-                               
-                               if (my_bind(ctx, name, port, &(ctx->notifSock))) 
-                                       goto err;
-                       }
-               }
-               else {  // create new socket 
-                       if (my_bind(ctx, name, port, &(ctx->notifSock))) 
-                               goto err;
-               }
-               
-               *address = strdup(address_override);
-       }
-       else {  // address_override == NULL
-               
-               if (fd == -1) {
-                       if (ctx->notifSock == -1)       
-                               // create new socket
-                               if (my_bind(ctx, NULL, 0, &(ctx->notifSock)))
-                                               goto err;
-                       // else: resue socket
-               }
-               else    
-                       // used supplied socket
-                       ctx->notifSock = fd;
-       
-               if (getsockname(ctx->notifSock,(struct sockaddr *)  &a, &alen)) 
-                       return edg_wll_SetError(ctx, errno, "getsockname() failed");
-
-               if (a.sin_addr.s_addr == INADDR_ANY)
-                       asprintf(address,"0.0.0.0:%d", ntohs(a.sin_port));
-               else
-                       asprintf(address,"%s:%d", inet_ntoa(a.sin_addr), ntohs(a.sin_port));
-       }
-
-err:
-       free(name);
-       
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-
-
-int edg_wll_NotifNew(
-        edg_wll_Context         ctx,
-        edg_wll_QueryRec        const * const *conditions,
-        int                     fd,
-        const char              *address_override,
-        edg_wll_NotifId         *id_out,
-        time_t                  *valid) 
-{
-       edg_wll_NotifId         notifId = NULL;
-       char                    *address = NULL, *send_mess = NULL,
-                               *recv_mess = NULL, *response = NULL;
-       int                     ret;    
-       
-
-       edg_wll_ResetError(ctx);
-
-       if ( (ret = set_server_name_and_port(ctx)) ) 
-               goto err;
-               
-       if ( (ret = edg_wll_NotifIdCreate(ctx->srvName,ctx->srvPort,&notifId)) )
-               goto err;
-
-       if ( (ret = get_client_address(ctx, fd, address_override, &address)) )
-               goto err;
-       
-       if ( (ret = edg_wll_NotifRequestToXML(ctx, "New", notifId, address, 
-                       EDG_WLL_NOTIF_NOOP, conditions, &send_mess)) )
-               goto err;
-
-       ctx->p_tmp_timeout = ctx->p_notif_timeout;
-       
-       if ( (ret = edg_wll_http_send_recv(ctx, "POST /notifRequest HTTP/1.1",
-                       request_headers,send_mess,
-                       &response,NULL,&recv_mess)) )
-               goto err;
-       
-       if ( (ret = http_check_status(ctx,response)) )
-               goto err;
-
-       ret = edg_wll_ParseNotifResult(ctx, recv_mess, valid);
-
-
-err:
-       if (ret != 0) {
-               if (notifId) edg_wll_NotifIdFree(notifId);
-               *id_out = NULL;
-               *valid = -1;
-       }
-       else
-               *id_out = notifId;
-               
-       free(address);
-       free(recv_mess);
-       free(send_mess);
-       free(response);
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-
-
-int edg_wll_NotifBind(
-        edg_wll_Context         ctx,
-        const edg_wll_NotifId   id,
-        int                     fd,
-        const char              *address_override,
-        time_t                  *valid)
-{
-       char    *address = NULL, *send_mess = NULL,
-                       *recv_mess = NULL, *response = NULL;
-       
-       
-       edg_wll_ResetError(ctx);
-
-       
-       // if a local listening socket active, close it
-       if (ctx->notifSock >= 0) {
-               if (close(ctx->notifSock)) 
-                       return edg_wll_SetError(ctx, errno, "close() failed");
-               else
-                       ctx->notifSock = -1;
-       }
-
-       if (set_server_name_and_port(ctx)) 
-               goto err;
-               
-       if (get_client_address(ctx, fd, address_override, &address))
-               goto err;
-
-       if (edg_wll_NotifRequestToXML(ctx, "Bind", id, address, 
-                       EDG_WLL_NOTIF_NOOP, NULL, &send_mess)) 
-               goto err;
-
-       ctx->p_tmp_timeout = ctx->p_notif_timeout;
-       
-       if (edg_wll_http_send_recv(ctx, "POST /notifRequest HTTP/1.1",
-                       request_headers,send_mess,
-                       &response,NULL,&recv_mess)) 
-               goto err;
-       
-       if (http_check_status(ctx,response))
-               goto err;
-
-       edg_wll_ParseNotifResult(ctx, recv_mess, valid);
-
-err:
-       free(address);
-       free(recv_mess);
-       free(send_mess);
-       free(response);
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-
-
-int edg_wll_NotifChange(
-        edg_wll_Context         ctx,
-        const edg_wll_NotifId   id,
-        edg_wll_QueryRec        const * const * conditions,
-        edg_wll_NotifChangeOp   op)
-{
-       char    *send_mess = NULL, *recv_mess = NULL, *response = NULL;
-       time_t  not_used;
-       
-       
-       edg_wll_ResetError(ctx);
-
-       
-       if (set_server_name_and_port(ctx)) 
-               goto err;
-               
-       if (edg_wll_NotifRequestToXML(ctx, "Change", id, NULL, 
-                       op, conditions, &send_mess)) 
-               goto err;
-
-       ctx->p_tmp_timeout = ctx->p_notif_timeout;
-       
-       if (edg_wll_http_send_recv(ctx, "POST /notifRequest HTTP/1.1",
-                       request_headers,send_mess,
-                       &response,NULL,&recv_mess)) 
-               goto err;
-       
-       if (http_check_status(ctx,response))
-               goto err;
-
-       edg_wll_ParseNotifResult(ctx, recv_mess, &not_used);
-
-err:
-       free(recv_mess);
-       free(send_mess);
-       free(response);
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-
-
-int edg_wll_NotifRefresh(
-        edg_wll_Context         ctx,
-        const edg_wll_NotifId   id,
-        time_t                  *valid)
-{
-       char    *send_mess = NULL, *recv_mess = NULL, *response = NULL;
-       
-       
-       edg_wll_ResetError(ctx);
-
-       
-       if (set_server_name_and_port(ctx)) 
-               goto err;
-               
-       if (edg_wll_NotifRequestToXML(ctx, "Refresh", id, NULL, 
-                       EDG_WLL_NOTIF_NOOP, NULL, &send_mess)) 
-               goto err;
-
-       ctx->p_tmp_timeout = ctx->p_notif_timeout;
-       
-       if (edg_wll_http_send_recv(ctx, "POST /notifRequest HTTP/1.1",
-                       request_headers,send_mess,
-                       &response,NULL,&recv_mess)) 
-               goto err;
-       
-       if (http_check_status(ctx,response))
-               goto err;
-
-       edg_wll_ParseNotifResult(ctx, recv_mess, valid);
-
-err:
-       free(recv_mess);
-       free(send_mess);
-       free(response);
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-
-
-int edg_wll_NotifDrop(
-        edg_wll_Context         ctx,
-        edg_wll_NotifId         *id)
-{
-       char    *send_mess = NULL, *recv_mess = NULL, *response = NULL;
-       time_t  not_used;
-       
-       
-       edg_wll_ResetError(ctx);
-
-       
-       if (set_server_name_and_port(ctx)) 
-               goto err;
-               
-       if (edg_wll_NotifRequestToXML(ctx, "Drop", id, NULL, 
-                       EDG_WLL_NOTIF_NOOP, NULL, &send_mess)) 
-               goto err;
-
-       ctx->p_tmp_timeout = ctx->p_notif_timeout;
-       
-       if (edg_wll_http_send_recv(ctx, "POST /notifRequest HTTP/1.1",
-                       request_headers,send_mess,
-                       &response,NULL,&recv_mess)) 
-               goto err;
-       
-       if (http_check_status(ctx,response))
-               goto err;
-
-       edg_wll_ParseNotifResult(ctx, recv_mess, &not_used);
-
-err:
-       free(recv_mess);
-       free(send_mess);
-       free(response);
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-
-
-static int recv_notif(edg_wll_Context ctx)
-{
-       int     ret, len;
-       char    fbuf[17];
-       size_t  total;
-       edg_wll_GssStatus  gss_code;
-
-       
-       if (ctx->connPoolNotif[0].buf) {
-               free(ctx->connPoolNotif[0].buf);
-               ctx->connPoolNotif[0].buf = NULL;
-       }
-       ctx->connPoolNotif[0].bufUse = 0;
-       ctx->connPoolNotif[0].bufSize = 0;
-
-       ret = edg_wll_gss_read_full(&ctx->connPoolNotif[0].gss,
-                                   fbuf,17, &ctx->p_tmp_timeout,&total, &gss_code);
-       if (ret < 0) 
-               switch (ret) {
-                       case EDG_WLL_GSS_ERROR_TIMEOUT: 
-                               return edg_wll_SetError(ctx,ETIMEDOUT,"read message header");
-                       case EDG_WLL_GSS_ERROR_EOF: 
-                               return edg_wll_SetError(ctx,ENOTCONN,NULL);
-                       case EDG_WLL_GSS_ERROR_GSS:
-                               return edg_wll_SetErrorGss(ctx, "read message header", &gss_code);
-                       default: 
-                               return edg_wll_SetError(ctx,EDG_WLL_ERROR_GSS,"read message header"); /* XXX */
-       }
-
-       if ((len = atoi(fbuf)) <= 0) {
-               return edg_wll_SetError(ctx,EINVAL,"message length");
-       }
-
-       ctx->connPoolNotif[0].bufSize = len+1;
-
-       ctx->connPoolNotif[0].buf = (char *) malloc(
-               ctx->connPoolNotif[0].bufSize);
-       
-       if (!ctx->connPoolNotif[0].buf) {
-               return edg_wll_SetError(ctx, ENOMEM, "recv_notif()");
-       }
-       
-
-       ret = edg_wll_gss_read_full(&ctx->connPoolNotif[0].gss,
-                                   ctx->connPoolNotif[0].buf, len,
-                                   &ctx->p_tmp_timeout,&total, &gss_code);
-       if (ret < 0) {
-               free(ctx->connPoolNotif[0].buf);
-               ctx->connPoolNotif[0].bufUse = 0;
-               ctx->connPoolNotif[0].bufSize = 0;
-               return edg_wll_SetError(ctx,
-                       ret == EDG_WLL_GSS_ERROR_TIMEOUT ?
-                               ETIMEDOUT : EDG_WLL_ERROR_GSS,
-                       "read message");
-       }
-
-
-       ctx->connPoolNotif[0].buf[len] = 0;
-       ctx->connPoolNotif[0].bufUse = len+1;
-
-       
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-
-
-static int send_reply(const edg_wll_Context ctx)
-{
-       int     ret, len, err_code, err_code_min = 0, max_len = 256;
-       char    *p, *err_msg = NULL, buf[max_len];
-       size_t  total;
-       edg_wll_GssStatus  gss_code;
-
-       
-       err_code = edg_wll_Error(ctx,NULL,&err_msg);
-
-       if (!err_msg) err_msg=strdup("OK");
-       
-       len = 17 + len_int(err_code) + len_int(err_code_min) +len_string(err_msg);
-       if(len > max_len) {
-               edg_wll_SetError(ctx,E2BIG,"create_reply()");
-               goto err;
-       }
-
-       snprintf(buf, max_len, "%16d\n", len - 17);
-       p = buf + 17;
-       p = put_int(p, err_code);
-       p = put_int(p, err_code_min);
-       p = put_string(p, err_msg);
-
-       ret = edg_wll_gss_write_full(&ctx->connPoolNotif[0].gss,
-                                    buf,len,&ctx->p_tmp_timeout,&total, &gss_code);
-       if (ret < 0) {
-               edg_wll_SetError(ctx,
-                               ret == EDG_WLL_GSS_ERROR_TIMEOUT ? 
-                                       ETIMEDOUT : EDG_WLL_ERROR_GSS,
-                                       "write reply");
-               goto err;
-       }
-       
-err:
-       free(err_msg);
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-
-
-
-int edg_wll_NotifReceive(
-        edg_wll_Context         ctx,
-        int                     fd,
-        const struct timeval    *timeout,
-        edg_wll_JobStat         *state_out,
-        edg_wll_NotifId         *id_out)
-
-/* pullup from INFN, support multiple messages from interlogger */
-#if 0
-{
-       fd_set                  fds;    
-       struct sockaddr_in      a;
-       int                     recv_sock, alen;
-       edg_wll_Event           *event = NULL;
-       struct timeval          start_time,check_time,tv;
-       char                    *p = NULL, *ucs = NULL,
-                                       *event_char = NULL, *jobstat_char = NULL;
-       int                     ret;
-       edg_wll_GssStatus       gss_code;
-       
-       
-       edg_wll_ResetError(ctx);
-
-       /* start timer */
-       gettimeofday(&start_time,0);
-       
-       if (fd == -1) {
-               if (ctx->notifSock == -1) {
-                       edg_wll_SetError(ctx, EINVAL, "No client socket opened.");
-                       goto err;
-               }
-               else {
-                       fd = ctx->notifSock;
-               }
-       }
-
-       FD_ZERO(&fds);
-       FD_SET(fd,&fds);
-       
-       tv.tv_sec = timeout->tv_sec;
-       tv.tv_usec = timeout->tv_usec;
-       
-       switch(select(fd+1, &fds, NULL, NULL, &tv)) {
-               case -1:
-                       edg_wll_SetError(ctx, errno, "select() failed");
-                       goto err;
-               case 0:
-                       edg_wll_SetError(ctx, ETIMEDOUT, "select() timeouted");
-                       goto err;
-               default:
-                       break;
-       }
-
-/* check time */
-       gettimeofday(&check_time,0);
-       if (decrement_timeout(&tv, start_time, check_time)) {
-               edg_wll_SetError(ctx, ETIMEDOUT, "edg_wll_NotifReceive()");
-               goto err;
-       }
-       
-       start_time = check_time;
-       
-       alen=sizeof(a);
-       recv_sock = accept(fd,&a,&alen);
-       if (recv_sock <0) {
-               edg_wll_SetError(ctx, errno, "accept() failed");
-               goto err;
-       }
-
-       ret = edg_wll_gss_accept(ctx->connPool[ctx->connToUse].gsiCred, recv_sock,
-                                &tv, &ctx->connPool[ctx->connToUse].gss, &gss_code);
-
-       if (ret) {
-               edg_wll_SetError(ctx, errno, "GSS authentication failed.");
-               goto err;       
-       }
-       
-/* check time */
-       gettimeofday(&check_time,0);
-       if (decrement_timeout(&tv, start_time, check_time)) {
-               edg_wll_SetError(ctx, ETIMEDOUT, "edg_wll_NotifReceive()");
-               goto err;
-       }
-       
-       start_time = check_time;
-       
-
-       ctx->p_tmp_timeout = tv;
-               
-       if (recv_notif(ctx)) {
-               /* error set in recv_notif() */
-               goto err;
-       }       
-
-       if (send_reply(ctx)) {
-               /* error set in send_reply() */
-               goto err;
-       }       
-       
-       p = ctx->connPool[ctx->connToUse].buf;
-       p = get_string(p, &ucs);
-       if (p == NULL) return edg_wll_SetError(ctx,EDG_WLL_IL_PROTO,"reading UCS");
-       free(ucs);
-
-       p = get_string(p, &event_char);
-       if (p == NULL) {
-               free(ucs);
-               return edg_wll_SetError(ctx,EDG_WLL_IL_PROTO,"reading event string");;
-       }
-       
-       /****************************************************************/
-       /* end of  notif-interlogger message exchange                   */
-       /****************************************************************/
-       
-       /* check time */
-       gettimeofday(&check_time,0);
-       if (decrement_timeout(&tv, start_time, check_time)) {
-               edg_wll_SetError(ctx, ETIMEDOUT, "edg_wll_NotifReceive()");
-               goto err;
-       }
-       start_time = check_time;
-               
-       event = edg_wll_InitEvent(EDG_WLL_EVENT_NOTIFICATION);
-       if (edg_wll_ParseNotifEvent(ctx, event_char, &event)) {
-               goto err;
-       }
-
-       jobstat_char = edg_wll_UnescapeXML((const char *) event->notification.jobstat);
-       if (jobstat_char == NULL) {
-               edg_wll_SetError(ctx, EINVAL, "edg_wll_UnescapeXML()");
-               goto err;
-       }
-               
-       /* fill in return values
-        */
-       if ( edg_wll_ParseJobStat(ctx, jobstat_char, 
-                               strlen(jobstat_char), state_out)) {
-               goto err;
-       }
-       
-       if ( id_out ) {
-               *id_out = event->notification.notifId;
-               event->notification.notifId = NULL;
-       }
-       
-       
-err:
-       if (event) { 
-               edg_wll_FreeEvent(event);
-               // XXX - konzultovat s honikem; podle meho by to free 
-               // mel delat uz edg_wll_FreeEvent
-               //free(event);
-       }
-
-       free(ctx->connPool[ctx->connToUse].buf);
-       ctx->connPool[ctx->connToUse].buf = NULL;
-       ctx->connPool[ctx->connToUse].bufUse = 0;
-       ctx->connPool[ctx->connToUse].bufSize = 0;
-       
-       free(event_char);
-       free(jobstat_char);
-
-       // XXX
-       // konzultovat s Danem
-       /* Dan: ??? */
-       edg_wll_gss_close(&ctx->connPool[ctx->connToUse].gss, NULL);
-       
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-#endif
-/* NotifReceive */
-{
-       fd_set                  fds;    
-       struct sockaddr_in      a;
-       int                     recv_sock, alen;
-       edg_wll_Event           *event = NULL;
-       struct timeval          start_time,check_time,tv;
-       char                    *p = NULL, *ucs = NULL,
-                                       *event_char = NULL, *jobstat_char = NULL;
-       edg_wll_GssStatus       gss_code;
-       
-       
-       edg_wll_ResetError(ctx);
-
-       /* start timer */
-       gettimeofday(&start_time,0);
-       
-       if (fd == -1) {
-               if (ctx->notifSock == -1) {
-                       edg_wll_SetError(ctx, EINVAL, "No client socket opened.");
-                       goto err;
-               }
-               else {
-                       fd = ctx->notifSock;
-               }
-       }
-       
-       FD_ZERO(&fds);
-       FD_SET(fd,&fds);
-       tv.tv_sec = timeout->tv_sec;
-       tv.tv_usec = timeout->tv_usec;
-       
-       
-select:
-       /* XXX - index 0 is used because of absence of connection management    */
-               /*       to use it, support in client/connection.c needed               */
-       /*       it is better to separate it from ctx->connPool, which is used  */
-       /*       for outgouing messages to server                               */
-       /*       In future it should be in context, so one could use:           */
-       /*       ctx->connPoolNotif[ctx->connPoolNotifToUse]                    */
-       /*       notif_send() & notif_receive() should then migrate to          */
-       /*       client/connection.c and use connPool management f-cions        */
-       
-       if (ctx->connPoolNotif[0].gss.context == GSS_C_NO_CONTEXT) 
-       {       
-               int     ret;
-               switch(select(fd+1, &fds, NULL, NULL, &tv)) {
-                       case -1:
-                               edg_wll_SetError(ctx, errno, "select() failed");
-                               goto err;
-                       case 0:
-                               edg_wll_SetError(ctx, ETIMEDOUT, "select() timeouted");
-                               goto err;
-                       default:
-                               break;
-               }
-
-               /* check time */
-               gettimeofday(&check_time,0);
-               if (decrement_timeout(&tv, start_time, check_time)) {
-                       edg_wll_SetError(ctx, ETIMEDOUT, "edg_wll_NotifReceive()");
-                       goto err;
-               }
-               start_time = check_time;
-               
-               alen=sizeof(a);
-               recv_sock = accept(fd,(struct sockaddr *)&a,&alen);
-               if (recv_sock <0) {
-                       edg_wll_SetError(ctx, errno, "accept() failed");
-                       goto err;
-               }
-
-               ret = edg_wll_gss_accept(ctx->connPoolNotif[0].gsiCred, recv_sock,
-                               &tv, &ctx->connPoolNotif[0].gss,&gss_code);
-               if (ret) {
-                       edg_wll_SetError(ctx, errno, "GSS authentication failed.");
-                       goto err;       
-               }
-               
-               /* check time */
-               gettimeofday(&check_time,0);
-               if (decrement_timeout(&tv, start_time, check_time)) {
-                       edg_wll_SetError(ctx, ETIMEDOUT, "edg_wll_NotifReceive()");
-                       goto err;
-               }
-               start_time = check_time;
-       }       
-
-       
-       ctx->p_tmp_timeout = tv;
-               
-       /****************************************************************/
-       /* Communication with notif-interlogger                         */
-       /****************************************************************/
-       
-       if (recv_notif(ctx)) {
-               if (ctx->errCode == ENOTCONN) {
-                       /* other side (interlogger-notif) probably closed connection */
-                       edg_wll_ResetError(ctx);
-                       
-                       edg_wll_gss_close(&ctx->connPoolNotif[0].gss,NULL);
-                       // buffer is freed in recv_notif()
-               
-                       goto select;
-               }                               
-               else {
-                       goto err;       /* error set in recv_notif() */
-               }
-       }       
-
-       if (send_reply(ctx)) {
-               goto err;               /* error set in send_reply() */
-       }
-       
-       p = ctx->connPoolNotif[0].buf;
-       p = get_string(p, &ucs);
-       if (p == NULL) return edg_wll_SetError(ctx,EDG_WLL_IL_PROTO,"reading UCS");
-       free(ucs);
-
-       p = get_string(p, &event_char);
-       if (p == NULL) {
-               free(ucs);
-               return edg_wll_SetError(ctx,EDG_WLL_IL_PROTO,"reading event string");;
-       }
-       
-       /****************************************************************/
-       /* end of  notif-interlogger message exchange                   */
-       /****************************************************************/
-       
-       /* check time */
-       gettimeofday(&check_time,0);
-       if (decrement_timeout(&tv, start_time, check_time)) {
-               edg_wll_SetError(ctx, ETIMEDOUT, "edg_wll_NotifReceive()");
-               goto err;
-       }
-       start_time = check_time;
-               
-       event = edg_wll_InitEvent(EDG_WLL_EVENT_NOTIFICATION);
-       if (edg_wll_ParseNotifEvent(ctx, event_char, &event)) {
-               goto err;
-       }
-
-       jobstat_char = edg_wll_UnescapeXML((const char *) event->notification.jobstat);
-       if (jobstat_char == NULL) {
-               edg_wll_SetError(ctx, EINVAL, "edg_wll_UnescapeXML()");
-               goto err;
-       }
-               
-       /* fill in return values
-        */
-       if ( edg_wll_ParseJobStat(ctx, jobstat_char, 
-                               strlen(jobstat_char), state_out)) {
-               goto err;
-       }
-       
-       if (id_out) { 
-               *id_out = event->notification.notifId;
-               event->notification.notifId = NULL;
-       }
-       
-err:
-       if (event) { 
-               edg_wll_FreeEvent(event);
-               // XXX - konzultovat s honikem; podle meho by to free 
-               // mel delat uz edg_wll_FreeEvent
-               //free(event);
-       }
-
-       free(ctx->connPoolNotif[0].buf);
-       ctx->connPoolNotif[0].buf = NULL;
-       ctx->connPoolNotif[0].bufUse = 0;
-       ctx->connPoolNotif[0].bufSize = 0;
-       
-       free(event_char);
-       free(jobstat_char);
-
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-
-int edg_wll_NotifGetFd(
-        edg_wll_Context         ctx)
-{
-       if (ctx->notifSock == -1) {
-               edg_wll_SetError(ctx, EBADF, "Client socket is not opened.");
-               return -1;
-       }
-       
-       return ctx->notifSock;
-}
-
-
-int edg_wll_NotifCloseFd(
-        edg_wll_Context         ctx)
-{
-       int err;
-       
-       if (ctx->notifSock >= 0) {
-               if (ctx->connPoolNotif[0].gss.context != GSS_C_NO_CONTEXT) {
-                       edg_wll_gss_close(&ctx->connPoolNotif[0].gss, NULL);
-               }
-               err = close(ctx->notifSock);
-               ctx->notifSock = -1;
-               
-               if (err) 
-                       return edg_wll_SetError(ctx, errno, "close() failed");
-       }
-
-       return edg_wll_Error(ctx,NULL,NULL);
-}
diff --git a/org.glite.lb.client/src/prod_proto.c b/org.glite.lb.client/src/prod_proto.c
deleted file mode 100644 (file)
index 49a3257..0000000
+++ /dev/null
@@ -1,303 +0,0 @@
-#ident "$Header$"
-
-#include "prod_proto.h"
-#include "glite/lb/producer.h"
-#include "glite/lb/escape.h"
-#include "glite/lb/lb_gss.h"
-#include "glite/lb/lb_plain_io.h"
-#include "glite/lb/il_string.h"
-
-#include <signal.h>
-#include <string.h>
-#include <sys/types.h>
-
-/*
- *----------------------------------------------------------------------
- *
- * edg_wll_log_proto_client - client part of the logging protocol
- *   used when sending messages to local logger
- *
- * Returns: 0 if done properly or errno
- *
- * Calls:
- *
- * Algorithm:
- *
- *----------------------------------------------------------------------
- */
-int edg_wll_log_proto_client(edg_wll_Context context, edg_wll_GssConnection *con, edg_wll_LogLine logline/*, int priority,*/)
-{
-       char    header[EDG_WLL_LOG_SOCKET_HEADER_LENGTH+1];
-       int     err;
-       int     answer;
-       u_int8_t answer_end[4];
-       size_t  count;
-       int     size;
-       u_int8_t size_end[4];
-       edg_wll_GssStatus gss_code;
-
-       errno = err = answer = count = 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(context);
-
-       /* send header */
-#ifdef EDG_WLL_LOG_STUB
-       fprintf(stderr,"Sending socket header...\n");
-#endif
-       sprintf(header,"%s",EDG_WLL_LOG_SOCKET_HEADER);
-       header[EDG_WLL_LOG_SOCKET_HEADER_LENGTH]='\0';
-       if ((err = edg_wll_gss_write_full(con, header, EDG_WLL_LOG_SOCKET_HEADER_LENGTH, &context->p_tmp_timeout, &count, &gss_code)) < 0) {
-               answer = edg_wll_log_proto_client_failure(context,err,&gss_code,"send header");
-               goto edg_wll_log_proto_client_end;
-       }
-
-/* XXX: obsolete
-#ifdef EDG_WLL_LOG_STUB
-       fprintf(stderr,"Sending message priority...\n");
-#endif
-       count = 0;
-        if ((err = edg_wll_gss_write_full(con, &priority, sizeof(priority), &context->p_tmp_timeout, &count, &gss_code)) < 0) {
-                answer = edg_wll_log_proto_client_failure(context,err,&gss_code,"send message priority");
-                goto edg_wll_log_proto_client_end;
-        }
-*/
-
-#ifdef EDG_WLL_LOG_STUB
-       fprintf(stderr,"Sending message size...\n");
-#endif
-       count = 0;
-       if ((err = edg_wll_gss_write_full(con, size_end, 4, &context->p_tmp_timeout, &count, &gss_code)) < 0) {
-                answer = edg_wll_log_proto_client_failure(context,err,&gss_code,"send message size");
-                goto edg_wll_log_proto_client_end;
-        }
-
-       /* send message */
-#ifdef EDG_WLL_LOG_STUB
-       fprintf(stderr,"Sending message to socket...\n");
-#endif
-       count = 0;
-       if (( err = edg_wll_gss_write_full(con, logline, size, &context->p_tmp_timeout, &count, &gss_code)) < 0) {
-               answer = edg_wll_log_proto_client_failure(context,err,&gss_code,"send message");
-               goto edg_wll_log_proto_client_end;
-       }
-
-       /* get answer */
-#ifdef EDG_WLL_LOG_STUB
-       fprintf(stderr,"Reading answer from server...\n");
-#endif
-       count = 0;
-       if ((err = edg_wll_gss_read_full(con, answer_end, 4, &context->p_tmp_timeout, &count, &gss_code)) < 0 ) {
-               answer = edg_wll_log_proto_client_failure(context,err,&gss_code,"get answer");
-/* FIXME: update the answer (in context?) to EAGAIN or not?
-               answer = EAGAIN;
-*/
-       } else {
-               answer = answer_end[3]; answer <<=8;
-               answer |= answer_end[2]; answer <<=8;
-               answer |= answer_end[1]; answer <<=8;
-               answer |= answer_end[0];
-#ifdef EDG_WLL_LOG_STUB
-               fprintf(stderr,"Read answer \"%d\"\n",answer);
-#endif
-               edg_wll_SetError(context,answer,"answer read from locallogger");
-       }
-
-edg_wll_log_proto_client_end:
-
-       return edg_wll_Error(context,NULL,NULL);
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * edg_wll_log_proto_client_failure - handle protocol failures on the client side
- *
- * Returns: errno
- *
- *----------------------------------------------------------------------
- */
-int edg_wll_log_proto_client_failure(edg_wll_Context context, int code, edg_wll_GssStatus *gss_code, const char *text)
-{
-       const char      *func="edg_wll_log_proto_client()";
-        static char     err[256];
-        int             ret = 0;
-       char            *gss_err;
-
-       edg_wll_ResetError(context);
-
-       if(code>0)
-                return(0);
-
-       switch(code) {
-                case EDG_WLL_GSS_ERROR_EOF: 
-                       snprintf(err, sizeof(err), "%s: Error %s, EOF occured;", func, text);   
-                       ret = edg_wll_SetError(context,ENOTCONN,err);
-                       break;
-                case EDG_WLL_GSS_ERROR_TIMEOUT: 
-                       snprintf(err, sizeof(err), "%s: Error %s, timeout expired;", func, text);       
-                       ret = edg_wll_SetError(context,ENOTCONN,err);
-                       break;
-               case EDG_WLL_GSS_ERROR_ERRNO: // XXX: perror("edg_wll_ssl_read()"); break;
-                       snprintf(err, sizeof(err), "%s: Error %s, system error occured;", func, text);  
-                       ret = edg_wll_SetError(context,ENOTCONN,err);
-                       break;
-                case EDG_WLL_GSS_ERROR_GSS:
-                       snprintf(err, sizeof(err), "%s: Error %s, GSS error occured", func, text);
-                       edg_wll_gss_get_error(gss_code, err, &gss_err);
-                       ret = edg_wll_SetError(context,ENOTCONN,gss_err);
-                       free(gss_err);
-                        break;
-               default:
-                       break;
-       }
-       return ret;
-}
-
-/*
- * Read reply from server.
- *  Returns: -1       - error reading message, 
- *           code > 0 - error code from server
- */
-static
-int
-get_reply(edg_wll_Context context, edg_wll_PlainConnection *conn, char **buf, int *code_min)
-{
-       char buffer[17];
-       char *msg, *p;
-       int len, code;
-
-       code = 0;
-       /* get message header */
-       len = edg_wll_plain_read_full(conn, buffer, 17, &context->p_tmp_timeout);
-       if(len < 0) {
-               edg_wll_SetError(context,LB_PROTO,"get_reply(): error reading message header");
-               goto get_reply_end;
-       }
-
-       buffer[16] = 0;
-
-       sscanf(buffer, "%d", &len);
-       if(len > MAXLEN) {
-               edg_wll_SetError(context,LB_PROTO,"get_reply(): error reading message body length");
-               goto get_reply_end;
-       }
-
-       /* allocate room for message body */
-       if((msg = malloc(len)) == NULL) {
-               edg_wll_SetError(context,ENOMEM,"get_reply(): no room for message body");
-               goto get_reply_end;
-       }
-
-       /* read all the data */
-       len = edg_wll_plain_read_full(conn, msg, len, &context->p_tmp_timeout);
-       if(len < 0) {
-               edg_wll_SetError(context,LB_PROTO,"get_reply(): error reading message body");
-               goto get_reply_end;
-       }
-
-       p = msg;
-       p = get_int(p, &code);
-       if(p == NULL) {
-               edg_wll_SetError(context,LB_PROTO,"get_reply(): error reading result code");
-               free(msg);
-               goto get_reply_end;
-       }
-       p = get_int(p, code_min);
-       if(p == NULL) {
-               edg_wll_SetError(context,LB_PROTO,"get_reply(): error reading result code minor");
-               free(msg);
-               goto get_reply_end;
-       }
-       p = get_string(p, buf);
-       if(p == NULL) {
-               if(*buf) {
-                       free(*buf);
-                       *buf = NULL;
-               }
-               edg_wll_SetError(context,LB_PROTO,"get_reply(): error reading result string");
-               free(msg);
-               goto get_reply_end;
-       }
-
-get_reply_end:
-       if(msg) free(msg);
-       return edg_wll_Error(context,NULL,NULL);
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * edg_wll_log_proto_client_proxy - client part of the logging protocol
- *   used when sending messages to L&B Proxy
- *
- * Returns: 0 if done properly or errno
- *
- * Calls:
- *
- * Algorithm:
- *
- *----------------------------------------------------------------------
- */
-int edg_wll_log_proto_client_proxy(edg_wll_Context context, edg_wll_PlainConnection *conn, edg_wll_LogLine logline)
-{
-       char *p;  int  len;
-       char *ucs = "honik6";
-       char *buffer,*answer = NULL;
-       int     err;
-       int     code;
-       int     count;
-
-       errno = err = code = count = 0;
-       edg_wll_ResetError(context);
-
-       /* allocate enough room to hold the message */
-       len = 17 + len_string(ucs) + len_string(logline);
-       if((buffer = malloc(len)) == NULL) {
-               edg_wll_SetError(context,ENOMEM,"get_reply(): no room for message body");
-               goto edg_wll_log_proto_client_proxy_end;
-       }
-       p = buffer;
-
-       /* write header */
-       sprintf(p, "%16d\n", len - 17);
-       p += 17;
-
-       /* write rest of the message */
-       p = put_string(p, ucs);
-       p = put_string(p, logline);
-
-       /* send message */
-#ifdef EDG_WLL_LOG_STUB
-       fprintf(stderr,"Sending message to socket...\n");
-#endif
-       if (( count = edg_wll_plain_write_full(conn, buffer, len, &context->p_tmp_timeout)) < 0) {
-               edg_wll_SetError(context,LB_PROTO,"edg_wll_log_proto_client_proxy(): error sending message to socket");
-               goto edg_wll_log_proto_client_proxy_end;
-       }
-
-       /* get answer */
-#ifdef EDG_WLL_LOG_STUB
-       fprintf(stderr,"Reading answer from server...\n");
-#endif
-       count = 0;
-       if ((err = get_reply(context, conn, &answer, &code)) < 0 ) {
-               edg_wll_SetError(context,LB_PROTO,"edg_wll_log_proto_client_proxy(): error reading answer from L&B proxy server");
-       } else {
-#ifdef EDG_WLL_LOG_STUB
-               fprintf(stderr,"Read answer \"%d: %s\"\n",code,answer);
-#endif
-               edg_wll_SetError(context,code,"answer read from L&B proxy server");
-       }
-
-edg_wll_log_proto_client_proxy_end:
-
-       if (buffer) free(buffer);
-       if (answer) free(answer);
-       return edg_wll_Error(context,NULL,NULL);
-}
-
diff --git a/org.glite.lb.client/src/prod_proto.h b/org.glite.lb.client/src/prod_proto.h
deleted file mode 100644 (file)
index 2945cf1..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_PROD_PROTO_H__
-#define __EDG_WORKLOAD_LOGGING_CLIENT_PROD_PROTO_H__
-
-#ident "$Header$"
-
-/**
- * \file edg/workload/logging/client/prod_proto.h
- * \brief client (producer) part of the logging protocol
- * \note private
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#include "glite/lb/log_proto.h"
-#include "glite/lb/context-int.h"
-#include "glite/lb/lb_gss.h"
-
-int edg_wll_log_proto_client(edg_wll_Context context, edg_wll_GssConnection *con, edg_wll_LogLine logline/*, int priority,*/);
-int edg_wll_log_proto_client_failure(edg_wll_Context context, int code, edg_wll_GssStatus *gss_code, const char *text);
-int edg_wll_log_proto_client_proxy(edg_wll_Context context, edg_wll_PlainConnection *conn, edg_wll_LogLine logline);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __EDG_WORKLOAD_LOGGING_CLIENT_PROD_PROTO_H__ */
diff --git a/org.glite.lb.client/src/producer.c b/org.glite.lb.client/src/producer.c
deleted file mode 100644 (file)
index b459910..0000000
+++ /dev/null
@@ -1,940 +0,0 @@
-/**
- * \file producer.c
- * \author Jan Pospisil
- */
-
-#ident "$Header$"
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <unistd.h>
-#include <netinet/in.h>
-#include <syslog.h>
-#include <string.h>
-#include <netdb.h>
-
-#include "glite/wmsutils/jobid/strmd5.h"
-#include "glite/lb/consumer.h"
-#include "glite/lb/producer.h"
-#include "glite/lb/context-int.h"
-#include "glite/lb/ulm_parse.h"
-#include "glite/lb/trio.h"
-#include "glite/lb/lb_gss.h"
-#include "glite/lb/lb_plain_io.h"
-#include "glite/lb/escape.h"
-
-#include "prod_proto.h"
-
-static const char* socket_path="/tmp/lb_proxy_store.sock";
-
-#ifdef FAKE_VERSION
-int edg_wll_DoLogEvent(edg_wll_Context context, edg_wll_LogLine logline);
-int edg_wll_DoLogEventProxy(edg_wll_Context context, edg_wll_LogLine logline);
-#else
-/**
- *----------------------------------------------------------------------
- * Connects to local-logger and sends already formatted ULM string
- * \brief helper logging function
- * \param context      INOUT context to work with,
- * \param priority     IN priority flag (0 for async, 1 for sync)
- * \param logline      IN formated ULM string
- *----------------------------------------------------------------------
- */
-static int edg_wll_DoLogEvent(
-       edg_wll_Context context,
-/*     int priority,  */
-       edg_wll_LogLine logline)
-{
-       int     ret,answer;
-       char    *my_subject_name = NULL;
-       edg_wll_GssStatus       gss_stat;
-       edg_wll_GssConnection   con;
-       gss_cred_id_t   cred = GSS_C_NO_CREDENTIAL;
-       OM_uint32       min_stat;
-
-       edg_wll_ResetError(context);
-       ret = answer = 0;
-       memset(&con, 0, sizeof(con));
-
-   /* open an authenticated connection to the local-logger: */
-
-#ifdef EDG_WLL_LOG_STUB
-       fprintf(stderr,"Logging to host %s, port %d\n",
-                       context->p_destination, context->p_dest_port);
-#endif
-       ret = edg_wll_gss_acquire_cred_gsi(
-             context->p_proxy_filename ? context->p_proxy_filename : context->p_cert_filename,
-             context->p_proxy_filename ? context->p_proxy_filename : context->p_key_filename,
-             &cred, &my_subject_name, &gss_stat);
-       /* Give up if unable to prescribed credentials, otherwise go on anonymously */
-       if (ret && context->p_proxy_filename) {
-               edg_wll_SetErrorGss(context, "failed to load GSI credentials", &gss_stat);
-               goto edg_wll_DoLogEvent_end;
-       }
-                                          
-       if (my_subject_name != NULL) {
-#ifdef EDG_WLL_LOG_STUB
-               fprintf(stderr,"Using certificate: %s\n",my_subject_name);
-#endif
-               free(my_subject_name);
-       }
-       if ((answer = edg_wll_gss_connect(cred,
-                       context->p_destination, context->p_dest_port, 
-                       &context->p_tmp_timeout, &con, &gss_stat)) < 0) {
-               switch(answer) {
-                case EDG_WLL_GSS_ERROR_EOF:
-                       edg_wll_SetError(context,ENOTCONN,"edg_wll_gss_connect()");
-                       break;
-                case EDG_WLL_GSS_ERROR_TIMEOUT:
-                       edg_wll_SetError(context,ETIMEDOUT,"edg_wll_gss_connect()");
-                       break;
-                case EDG_WLL_GSS_ERROR_ERRNO:
-                       edg_wll_SetError(context,errno,"edg_wll_gss_connect()");
-                       break;
-                case EDG_WLL_GSS_ERROR_GSS: 
-                       edg_wll_SetErrorGss(context, "failed to authenticate to server",&gss_stat);
-                       break;
-               case EDG_WLL_GSS_ERROR_HERRNO:
-                       { 
-                               const char *msg1;
-                               char *msg2;
-                               msg1 = hstrerror(errno);
-                               asprintf(&msg2, "edg_wll_gss_connect(): %s", msg1);
-                               edg_wll_SetError(context,EDG_WLL_ERROR_DNS, msg2);
-                               free(msg2);
-                       }
-                        break;
-               default:
-                       edg_wll_SetError(context,ECONNREFUSED,"edg_wll_gss_connect(): unknown");
-                       break;
-               }
-               goto edg_wll_DoLogEvent_end;
-       }
-
-   /* and send the message to the local-logger: */
-
-       answer = edg_wll_log_proto_client(context,&con,logline/*,priority*/);
-
-       switch(answer) {
-               case 0:
-               case EINVAL:
-               case ENOSPC:
-               case ENOMEM:
-               case EDG_WLL_ERROR_GSS:
-               case EDG_WLL_ERROR_DNS:
-               case ENOTCONN:
-               case ECONNREFUSED:
-               case ETIMEDOUT:
-               case EAGAIN:
-                       break;
-               case EDG_WLL_ERROR_PARSE_EVENT_UNDEF:
-               case EDG_WLL_ERROR_PARSE_MSG_INCOMPLETE:
-               case EDG_WLL_ERROR_PARSE_KEY_DUPLICITY:
-               case EDG_WLL_ERROR_PARSE_KEY_MISUSE:
-//             case EDG_WLL_ERROR_PARSE_OK_WITH_EXTRA_FIELDS:
-                       edg_wll_UpdateError(context,EINVAL,"edg_wll_DoLogEvent(): Error code mapped to EINVAL");
-                       break;
-               case EDG_WLL_IL_PROTO:
-               case EDG_WLL_IL_SYS:
-               case EDG_WLL_IL_EVENTS_WAITING:
-                       edg_wll_UpdateError(context,EAGAIN,"edg_wll_DoLogEvent(): Error code mapped to EAGAIN");
-                       break;
-
-               default:
-                       edg_wll_UpdateError(context,EAGAIN,"edg_wll_DoLogEvent(): Error code mapped to EAGAIN");
-               break;
-       }
-
-edg_wll_DoLogEvent_end:
-       if (con.context != GSS_C_NO_CONTEXT)
-               edg_wll_gss_close(&con,&context->p_tmp_timeout);
-       if (cred != GSS_C_NO_CREDENTIAL)
-               gss_release_cred(&min_stat, &cred);
-
-       return edg_wll_Error(context, NULL, NULL);
-}
-
-/**
- *----------------------------------------------------------------------
- * Connects to L&B Proxy and sends already formatted ULM string
- * \brief helper logging function
- * \param context      INOUT context to work with,
- * \param logline      IN formated ULM string
- *----------------------------------------------------------------------
- */
-static int edg_wll_DoLogEventProxy(
-       edg_wll_Context context,
-       edg_wll_LogLine logline)
-{
-       int     answer;
-       struct sockaddr_un saddr;
-       int     flags;
-       edg_wll_PlainConnection conn;
-
-       edg_wll_ResetError(context);
-       answer = 0;
-
-   /* open a connection to the L&B Proxy: */
-
-#ifdef EDG_WLL_LOG_STUB
-       fprintf(stderr,"Logging to L&B Proxy at socket %s\n",
-               context->p_lbproxy_store_sock? context->p_lbproxy_store_sock: socket_path);
-#endif
-       memset(&conn, 0, sizeof(conn));
-       conn.sock = socket(PF_UNIX, SOCK_STREAM, 0);
-       if (conn.sock < 0) {
-               edg_wll_SetError(context,answer = errno,"socket() error");
-               goto edg_wll_DoLogEventProxy_end;
-       }
-       memset(&saddr, 0, sizeof(saddr));
-       saddr.sun_family = AF_UNIX;
-       strcpy(saddr.sun_path, context->p_lbproxy_store_sock?
-                               context->p_lbproxy_store_sock: socket_path);
-       if ((flags = fcntl(conn.sock, F_GETFL, 0)) < 0 || fcntl(conn.sock, F_SETFL, flags | O_NONBLOCK) < 0) {
-               edg_wll_SetError(context,answer = errno,"fcntl()");
-               close(conn.sock);
-               goto edg_wll_DoLogEventProxy_end;
-       }
-       if (connect(conn.sock, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) {
-               if(errno != EISCONN) {
-                       edg_wll_SetError(context,answer = errno,"connect()");
-                       close(conn.sock);
-                       goto edg_wll_DoLogEventProxy_end;
-               }
-       }
-
-
-   /* and send the message to the L&B Proxy: */
-
-       answer = edg_wll_log_proto_client_proxy(context,&conn,logline);
-       
-       edg_wll_plain_close(&conn);
-
-edg_wll_DoLogEventProxy_end:
-
-       switch(answer) {
-               case 0:
-               case EINVAL:
-               case ENOSPC:
-               case ENOMEM:
-               case EDG_WLL_ERROR_GSS:
-               case EDG_WLL_ERROR_DNS:
-               case ENOTCONN:
-               case ECONNREFUSED:
-               case ETIMEDOUT:
-               case EAGAIN:
-                       break;
-               case EDG_WLL_ERROR_PARSE_EVENT_UNDEF:
-               case EDG_WLL_ERROR_PARSE_MSG_INCOMPLETE:
-               case EDG_WLL_ERROR_PARSE_KEY_DUPLICITY:
-               case EDG_WLL_ERROR_PARSE_KEY_MISUSE:
-//             case EDG_WLL_ERROR_PARSE_OK_WITH_EXTRA_FIELDS:
-                       edg_wll_UpdateError(context,EINVAL,"edg_wll_DoLogEventProxy(): Error code mapped to EINVAL");
-                       break;
-
-               default:
-                       edg_wll_UpdateError(context,EAGAIN,"edg_wll_DoLogEventProxy(): Error code mapped to EAGAIN");
-               break;
-       }
-
-       return edg_wll_Error(context, NULL, NULL);
-}
-#endif /* FAKE_VERSION */
-
-
-/**
- *----------------------------------------------------------------------
- * Formats a logging message and sends it to local-logger
- * \brief master logging event function
- * \param context      INOUT context to work with,
- * \param priority     IN priority flag (0 for async, 1 for sync)
- * \param event                IN type of the event,
- * \param fmt          IN printf()-like format string,
- * \param ...          IN event specific values/data according to fmt.
- *----------------------------------------------------------------------
- */
-static int edg_wll_LogEventMaster(
-       edg_wll_Context context,
-       int priority,
-       edg_wll_EventCode event,
-       char *fmt, ...)
-{
-       va_list fmt_args;
-       int     ret,answer;
-       char    *fix,*var;
-       char    *source,*eventName,*lvl, *fullid,*seq;
-        struct timeval start_time;
-       char    date[ULM_DATE_STRING_LENGTH+1];
-       edg_wll_LogLine out;
-       size_t  size;
-       int     i;
-
-       i = errno  =  size = 0;
-       seq = fix = var = out = source = eventName = lvl = fullid = NULL;
-
-       edg_wll_ResetError(context);
-
-   /* default return value is "Try Again" */
-       answer = ret = EAGAIN; 
-
-   /* format the message: */
-       va_start(fmt_args,fmt);
-
-       gettimeofday(&start_time,0);
-       if (edg_wll_ULMTimevalToDate(start_time.tv_sec,start_time.tv_usec,date) != 0) {
-               edg_wll_SetError(context,ret = EINVAL,"edg_wll_LogEventMaster(): edg_wll_ULMTimevalToDate() error"); 
-               goto edg_wll_logeventmaster_end; 
-       }
-       source = edg_wll_SourceToString(context->p_source);
-       lvl = edg_wll_LevelToString(context->p_level);
-       eventName = edg_wll_EventToString(event);
-       if (!eventName) { 
-               edg_wll_SetError(context,ret = EINVAL,"edg_wll_LogEventMaster(): event name not specified"); 
-               goto edg_wll_logeventmaster_end; 
-       }
-       if (!(fullid = edg_wlc_JobIdUnparse(context->p_jobid))) { 
-               edg_wll_SetError(context,ret = EINVAL,"edg_wll_LogEventMaster(): edg_wlc_JobIdUnparse() error"); 
-               goto edg_wll_logeventmaster_end;
-       }
-       seq = edg_wll_GetSequenceCode(context);
-       if (edg_wll_IncSequenceCode(context)) {
-               ret = EINVAL;
-               goto edg_wll_logeventmaster_end;
-       }
-       if (trio_asprintf(&fix,EDG_WLL_FORMAT_COMMON,
-                       date,context->p_host,lvl,priority,
-                       source,context->p_instance ? context->p_instance : "",
-                       eventName,fullid,seq) == -1) {
-               edg_wll_SetError(context,ret = ENOMEM,"edg_wll_LogEventMaster(): trio_asprintf() error"); 
-               goto edg_wll_logeventmaster_end; 
-       }
-       if (trio_vasprintf(&var,fmt,fmt_args) == -1) { 
-               edg_wll_SetError(context,ret = ENOMEM,"edg_wll_LogEventMaster(): trio_vasprintf() error"); 
-               goto edg_wll_logeventmaster_end; 
-       }
-       if (asprintf(&out,"%s%s\n",fix,var) == -1) { 
-               edg_wll_SetError(context,ret = ENOMEM,"edg_wll_LogEventMaster(): asprintf() error"); 
-               goto edg_wll_logeventmaster_end; 
-       }
-       size = strlen(out);
-
-       if (priority && (size > EDG_WLL_LOG_SYNC_MAXMSGSIZE)) {
-               edg_wll_SetError(context,ret = ENOSPC,"edg_wll_LogEventMaster(): Message size too large for synchronous transfer");
-               goto edg_wll_logeventmaster_end;
-       }
-
-#ifdef EDG_WLL_LOG_STUB
-//     fprintf(stderr,"edg_wll_LogEvent (%d chars): %s",size,out);
-#endif
-       
-       context->p_tmp_timeout.tv_sec = 0;
-       context->p_tmp_timeout.tv_usec = 0;
-       if (priority) {
-               context->p_tmp_timeout = context->p_sync_timeout;
-       }
-       else {
-               context->p_tmp_timeout = context->p_log_timeout;
-       }
-
-   /* and send the message to the local-logger: */
-       ret = edg_wll_DoLogEvent(context, /* priority,*/ out);
-
-edg_wll_logeventmaster_end:
-       va_end(fmt_args);
-       if (seq) free(seq); 
-       if (fix) free(fix); 
-       if (var) free(var); 
-       if (out) free(out);
-       if (source) free(source);
-       if (lvl) free(lvl);
-       if (eventName) free(eventName);
-       if (fullid) free(fullid);
-
-       if (ret) edg_wll_UpdateError(context,0,"Logging library ERROR: ");
-
-       return edg_wll_Error(context,NULL,NULL);
-}
-
-/**
- *----------------------------------------------------------------------
- * Formats a logging message and sends it to L&B Proxy
- * \brief master proxy logging event function
- * \param context      INOUT context to work with,
- * \param event                IN type of the event,
- * \param fmt          IN printf()-like format string,
- * \param ...          IN event specific values/data according to fmt.
- *----------------------------------------------------------------------
- */
-static int edg_wll_LogEventMasterProxy(
-       edg_wll_Context context,
-       edg_wll_EventCode event,
-       char *fmt, ...)
-{
-       va_list fmt_args;
-       int     ret,answer;
-       char    *fix,*var,*dguser;
-       char    *source,*eventName,*lvl, *fullid,*seq,*name_esc;
-        struct timeval start_time;
-       char    date[ULM_DATE_STRING_LENGTH+1];
-       edg_wll_LogLine out;
-       size_t  size;
-       int     i;
-
-       i = errno  =  size = 0;
-       seq = fix = var = dguser = out = source = eventName = lvl = fullid = NULL;
-
-       edg_wll_ResetError(context);
-
-   /* default return value is "Try Again" */
-       answer = ret = EAGAIN; 
-
-   /* format the message: */
-       va_start(fmt_args,fmt);
-
-       gettimeofday(&start_time,0);
-       if (edg_wll_ULMTimevalToDate(start_time.tv_sec,start_time.tv_usec,date) != 0) {
-               edg_wll_SetError(context,ret = EINVAL,"edg_wll_LogEventMasterProxy(): edg_wll_ULMTimevalToDate() error"); 
-               goto edg_wll_logeventmasterproxy_end; 
-       }
-       source = edg_wll_SourceToString(context->p_source);
-       lvl = edg_wll_LevelToString(context->p_level);
-       eventName = edg_wll_EventToString(event);
-       if (!eventName) { 
-               edg_wll_SetError(context,ret = EINVAL,"edg_wll_LogEventMasterProxy(): event name not specified"); 
-               goto edg_wll_logeventmasterproxy_end; 
-       }
-       if (!(fullid = edg_wlc_JobIdUnparse(context->p_jobid))) { 
-               edg_wll_SetError(context,ret = EINVAL,"edg_wll_LogEventMasterProxy(): edg_wlc_JobIdUnparse() error"); 
-               goto edg_wll_logeventmasterproxy_end;
-       }
-       seq = edg_wll_GetSequenceCode(context);
-       if (edg_wll_IncSequenceCode(context)) {
-               ret = EINVAL;
-               goto edg_wll_logeventmasterproxy_end;
-       }
-       if (trio_asprintf(&fix,EDG_WLL_FORMAT_COMMON,
-                       date,context->p_host,lvl,1,
-                       source,context->p_instance ? context->p_instance : "",
-                       eventName,fullid,seq) == -1) {
-               edg_wll_SetError(context,ret = ENOMEM,"edg_wll_LogEventMasterProxy(): trio_asprintf() error"); 
-               goto edg_wll_logeventmasterproxy_end; 
-       }
-       if (trio_vasprintf(&var,fmt,fmt_args) == -1) { 
-               edg_wll_SetError(context,ret = ENOMEM,"edg_wll_LogEventMasterProxy(): trio_vasprintf() error"); 
-               goto edg_wll_logeventmasterproxy_end; 
-       }
-        /* format the DG.USER string */
-/* XXX: put user credentials here probably from context */
-        name_esc = edg_wll_LogEscape(context->p_user_lbproxy);
-        if (asprintf(&dguser,"DG.USER=\"%s\" ",name_esc) == -1) {
-               edg_wll_SetError(context,ret = ENOMEM,"edg_wll_LogEventMasterProxy(): asprintf() error"); 
-               goto edg_wll_logeventmasterproxy_end; 
-        }
-       if (asprintf(&out,"%s%s%s\n",dguser,fix,var) == -1) { 
-               edg_wll_SetError(context,ret = ENOMEM,"edg_wll_LogEventMasterProxy(): asprintf() error"); 
-               goto edg_wll_logeventmasterproxy_end; 
-       }
-       size = strlen(out);
-
-       if (size > EDG_WLL_LOG_SYNC_MAXMSGSIZE) {
-               edg_wll_SetError(context,ret = ENOSPC,"edg_wll_LogEventMasterProxy(): Message size too large for synchronous transfer");
-               goto edg_wll_logeventmasterproxy_end;
-       }
-
-#ifdef EDG_WLL_LOG_STUB
-//     fprintf(stderr,"edg_wll_LogEvent (%d chars): %s",size,out);
-#endif
-       
-       context->p_tmp_timeout = context->p_sync_timeout;
-
-   /* and send the message to the L&B Proxy: */
-       ret = edg_wll_DoLogEventProxy(context, out);
-
-edg_wll_logeventmasterproxy_end:
-       va_end(fmt_args);
-       if (seq) free(seq); 
-       if (fix) free(fix); 
-       if (var) free(var); 
-       if (dguser) free(dguser); 
-       if (out) free(out);
-       if (source) free(source);
-       if (lvl) free(lvl);
-       if (eventName) free(eventName);
-       if (fullid) free(fullid);
-       if (name_esc) free(name_esc); 
-
-       if (ret) edg_wll_UpdateError(context,0,"Logging library ERROR: ");
-
-       return edg_wll_Error(context,NULL,NULL);
-}
-
-/**
- *----------------------------------------------------------------------
- * Formats a logging message and sends it asynchronously to local-logger
- * \brief generic asynchronous logging function
- *----------------------------------------------------------------------
- */
-int edg_wll_LogEvent(
-        edg_wll_Context context,
-        edg_wll_EventCode event,
-        char *fmt, ...)
-{
-       int     ret=0;
-       char    *list=NULL;
-       va_list fmt_args;
-
-       edg_wll_ResetError(context);
-
-       va_start(fmt_args,fmt);
-       if (trio_vasprintf(&list,fmt,fmt_args) == -1) { 
-               edg_wll_SetError(context,ret = ENOMEM,"edg_wll_LogEvent(): trio_vasprintf() error"); 
-               goto edg_wll_logevent_end; 
-       }
-
-       ret=edg_wll_LogEventMaster(context,0,event,"%s",list);
-
-edg_wll_logevent_end:
-       va_end(fmt_args);
-        if (list) free(list);
-
-       if (ret) edg_wll_UpdateError(context,0,"edg_wll_LogEvent(): ");
-
-       return edg_wll_Error(context,NULL,NULL);
-}
-
-/**
- *----------------------------------------------------------------------
- * Formats a logging message and sends it synchronously to local-logger
- * \brief generic synchronous logging function
- * \note simple wrapper around edg_wll_LogEventMaster()
- *----------------------------------------------------------------------
- */
-int edg_wll_LogEventSync(
-        edg_wll_Context context,
-        edg_wll_EventCode event,
-        char *fmt, ...)
-{
-       int     ret=0;
-       char    *list=NULL;
-       va_list fmt_args;
-
-       edg_wll_ResetError(context);
-
-       va_start(fmt_args,fmt);
-       if (trio_vasprintf(&list,fmt,fmt_args) == -1) { 
-               edg_wll_SetError(context,ret = ENOMEM,"edg_wll_LogEventSync(): trio_vasprintf() error"); 
-               goto edg_wll_logeventsync_end; 
-       }
-
-       ret=edg_wll_LogEventMaster(context,1,event,"%s",list);
-
-edg_wll_logeventsync_end:
-       va_end(fmt_args);
-        if (list) free(list);
-
-       if (ret) edg_wll_UpdateError(context,0,"edg_wll_LogEventSync(): ");
-
-       return edg_wll_Error(context,NULL,NULL);
-}
-
-/**
- *----------------------------------------------------------------------
- * Formats a logging message and sends it synchronously to L&B Proxy
- * \brief generic synchronous logging function
- *----------------------------------------------------------------------
- */
-int edg_wll_LogEventProxy(
-        edg_wll_Context context,
-        edg_wll_EventCode event,
-        char *fmt, ...)
-{
-        int     ret=0;
-        char    *list=NULL;
-        va_list fmt_args;
-
-        edg_wll_ResetError(context);
-
-        va_start(fmt_args,fmt);
-        if (trio_vasprintf(&list,fmt,fmt_args) == -1) {
-                edg_wll_SetError(context,ret = ENOMEM,"edg_wll_LogEventProxy(): trio_vasprintf() error");
-                goto edg_wll_logevent_end;
-        }
-
-        ret=edg_wll_LogEventMasterProxy(context,event,"%s",list);
-
-edg_wll_logevent_end:
-        va_end(fmt_args);
-        if (list) free(list);
-
-        if (ret) edg_wll_UpdateError(context,0,"edg_wll_LogEventProxy(): ");
-
-        return edg_wll_Error(context,NULL,NULL);
-}
-
-
-/**
- *-----------------------------------------------------------------------
- * Instructs interlogger to to deliver all pending events related to current job
- * \brief flush events from interlogger
- * \note simple wrapper around edg_wll_LogEventMaster()
- *-----------------------------------------------------------------------
- */
-int edg_wll_LogFlush(
-        edg_wll_Context context,
-        struct timeval *timeout)
-{
-       int     ret = 0;
-       edg_wll_LogLine out = NULL;
-       char    *fullid;
-       char    date[ULM_DATE_STRING_LENGTH+1];
-        struct timeval start_time;
-
-       fullid = NULL;
-
-       edg_wll_ResetError(context);
-
-       gettimeofday(&start_time, 0);
-       if (edg_wll_ULMTimevalToDate(start_time.tv_sec, start_time.tv_usec, date) != 0) {
-               edg_wll_SetError(context,ret = EINVAL,"edg_wll_ULMTimevalToDate()"); 
-               goto edg_wll_logflush_end; 
-       }
-       if (!(fullid = edg_wlc_JobIdUnparse(context->p_jobid))) { 
-               ret = edg_wll_SetError(context,EINVAL,"edg_wlc_JobIdUnparse()");
-               goto edg_wll_logflush_end;
-       }
-
-       if (trio_asprintf(&out, "DATE=%s HOST=\"%|Us\" PROG=internal LVL=system DG.PRIORITY=1 DG.TYPE=\"command\" DG.COMMAND=\"flush\" DG.TIMEOUT=\"%d\" DG.JOBID=\"%s\"\n", 
-                   date, context->p_host, (timeout ? timeout->tv_sec : context->p_sync_timeout.tv_sec), fullid) == -1) {
-               edg_wll_SetError(context,ret = EINVAL,"trio_asprintf");
-               goto edg_wll_logflush_end;
-       }
-
-       if (timeout)
-               context->p_tmp_timeout = *timeout;
-       else
-               context->p_tmp_timeout = context->p_sync_timeout;
-
-       ret = edg_wll_DoLogEvent(context, /* 1,*/ out);
-
-edg_wll_logflush_end:
-       if(out) free(out);
-       if(fullid) free(fullid);
-       
-       if (ret) edg_wll_UpdateError(context,0,"edg_wll_LogFlush(): ");
-       
-       return edg_wll_Error(context,NULL,NULL);
-}
-
-/**
- *-----------------------------------------------------------------------
- * Instructs interlogger to to deliver all pending events
- * \brief flush all events from interlogger
- *-----------------------------------------------------------------------
- */
-int edg_wll_LogFlushAll(
-        edg_wll_Context context,
-        struct timeval *timeout)
-{
-       int     ret = 0;
-       edg_wll_LogLine out = NULL;
-       char    date[ULM_DATE_STRING_LENGTH+1];
-        struct timeval start_time;
-
-       edg_wll_ResetError(context);
-
-       gettimeofday(&start_time, 0);
-       if (edg_wll_ULMTimevalToDate(start_time.tv_sec, start_time.tv_usec, date) != 0) {
-               edg_wll_SetError(context,ret = EINVAL,"edg_wll_ULMTimevalToDate()"); 
-               goto edg_wll_logflushall_end; 
-       }
-
-       if (trio_asprintf(&out, "DATE=%s HOST=\"%|Us\" PROG=internal LVL=system DG.PRIORITY=1 DG.TYPE=\"command\" DG.COMMAND=\"flush\" DG.TIMEOUT=\"%d\"\n", 
-                   date, context->p_host, (timeout ? timeout->tv_sec : context->p_sync_timeout.tv_sec)) == -1) {
-               edg_wll_SetError(context,ret = ENOMEM,"trio_asprintf");
-               goto edg_wll_logflushall_end;
-       }
-
-       if (timeout)
-               context->p_tmp_timeout = *timeout;
-       else
-               context->p_tmp_timeout = context->p_sync_timeout;
-
-       ret = edg_wll_DoLogEvent(context, /* 1,*/ out);
-
-edg_wll_logflushall_end:
-       if(out) free(out);
-       
-       if (ret) edg_wll_UpdateError(context,0,"edg_wll_LogFlushAll(): ");
-       
-       return edg_wll_Error(context,NULL,NULL);
-}
-
-/**
- *-----------------------------------------------------------------------
- * Set a current job for given context.
- * \note Should be called before any logging call.
- *-----------------------------------------------------------------------
- */
-int edg_wll_SetLoggingJob(
-       edg_wll_Context context,
-       const edg_wlc_JobId job,
-       const char *code,
-       int flags)
-{
-       int     err;
-
-       edg_wll_ResetError(context);
-
-       if (!job) return edg_wll_SetError(context,EINVAL,"jobid is null");
-
-       edg_wlc_JobIdFree(context->p_jobid);
-       if ((err = edg_wlc_JobIdDup(job,&context->p_jobid)))
-               edg_wll_SetError(context,err,"edg_wll_SetLoggingJob(): edg_wlc_JobIdDup() error");
-
-       else {
-               if (!edg_wll_SetSequenceCode(context,code,flags))
-                       edg_wll_IncSequenceCode(context);
-       }
-
-       return edg_wll_Error(context,NULL,NULL);
-}
-
-/**
- *-----------------------------------------------------------------------
- * Set a current job for given context.
- * \note Should be called before any logging call.
- *-----------------------------------------------------------------------
- */
-int edg_wll_SetLoggingJobProxy(
-        edg_wll_Context context,
-        const edg_wlc_JobId job,
-        const char *code,
-       const char *user,
-        int flags)
-{
-        int     err;
-       char    *code_loc = NULL;
-
-        edg_wll_ResetError(context);
-
-        if (!job) return edg_wll_SetError(context,EINVAL,"jobid is null");
-
-        edg_wlc_JobIdFree(context->p_jobid);
-        if ((err = edg_wlc_JobIdDup(job,&context->p_jobid))) {
-                edg_wll_SetError(context,err,"edg_wll_SetLoggingJob(): edg_wlc_JobIdDup() error");
-               goto edg_wll_setloggingjobproxy_end;
-       }
-
-       /* add user credentials to context */
-       edg_wll_SetParamString(context, EDG_WLL_PARAM_LBPROXY_USER, user);
-
-       /* query LBProxyServer for sequence code if not user-suplied */
-/* FIXME: doesn't work yet
-       if (!code) {
-               edg_wll_QuerySequenceCodeProxy(context, job, &code_loc);
-               goto edg_wll_setloggingjobproxy_end;    
-       } else {
-               code_loc = strdup(code);
-       }
-       
-       if (!edg_wll_SetSequenceCode(context,code_loc,flags)) */ {
-               edg_wll_IncSequenceCode(context);
-       }
-       
-edg_wll_setloggingjobproxy_end:
-       if (code_loc) free(code_loc);
-        return edg_wll_Error(context,NULL,NULL);
-}
-
-/**
- *-----------------------------------------------------------------------
- * Register job with L&B service.
- *-----------------------------------------------------------------------
- */
-static int edg_wll_RegisterJobMaster(
-        edg_wll_Context         context,
-       int                     pri,
-        const edg_wlc_JobId     job,
-        enum edg_wll_RegJobJobtype     type,
-        const char *            jdl,
-        const char *            ns,
-       edg_wlc_JobId           parent,
-        int                     num_subjobs,
-        const char *            seed,
-        edg_wlc_JobId **        subjobs)
-{
-       char    *type_s = NULL,*intseed = NULL, *seq = NULL;
-       char    *parent_s = NULL;
-       int     err = 0;
-
-       edg_wll_ResetError(context);
-
-       intseed = seed ? strdup(seed) : 
-               str2md5base64(seq = edg_wll_GetSequenceCode(context));
-
-       free(seq);
-
-       type_s = edg_wll_RegJobJobtypeToString(type);
-       if (!type_s) return edg_wll_SetError(context,EINVAL,"edg_wll_RegisterJobMaster(): no jobtype specified");
-
-       if ((type == EDG_WLL_REGJOB_DAG || type == EDG_WLL_REGJOB_PARTITIONED)
-               && num_subjobs > 0) 
-                       err = edg_wll_GenerateSubjobIds(context,job,
-                                       num_subjobs,intseed,subjobs);
-
-       parent_s = parent ? edg_wlc_JobIdUnparse(parent) : strdup("");
-
-       if (err == 0 &&
-               edg_wll_SetLoggingJob(context,job,NULL,EDG_WLL_SEQ_NORMAL) == 0)
-                       edg_wll_LogEventMaster(context,pri,
-                               EDG_WLL_EVENT_REGJOB,EDG_WLL_FORMAT_REGJOB,
-                               (char *)jdl,ns,parent_s,type_s,num_subjobs,intseed);
-
-       free(type_s); free(intseed); free(parent_s);
-       return edg_wll_Error(context,NULL,NULL);
-}
-
-/**
- *-----------------------------------------------------------------------
- * Register job with L&B Proxy service.
- *-----------------------------------------------------------------------
- */
-static int edg_wll_RegisterJobMasterProxy(
-        edg_wll_Context         context,
-        const edg_wlc_JobId     job,
-        enum edg_wll_RegJobJobtype     type,
-       const char *            user,
-        const char *            jdl,
-        const char *            ns,
-       edg_wlc_JobId           parent,
-        int                     num_subjobs,
-        const char *            seed,
-        edg_wlc_JobId **        subjobs)
-{
-       char    *type_s = NULL,*intseed = NULL, *seq = NULL;
-       char    *parent_s = NULL;
-       int     err = 0;
-
-       edg_wll_ResetError(context);
-
-       intseed = seed ? strdup(seed) : 
-               str2md5base64(seq = edg_wll_GetSequenceCode(context));
-
-       free(seq);
-
-       type_s = edg_wll_RegJobJobtypeToString(type);
-       if (!type_s) return edg_wll_SetError(context,EINVAL,"edg_wll_RegisterJobMaster(): no jobtype specified");
-
-       if ((type == EDG_WLL_REGJOB_DAG || type == EDG_WLL_REGJOB_PARTITIONED)
-               && num_subjobs > 0) 
-                       err = edg_wll_GenerateSubjobIds(context,job,
-                                       num_subjobs,intseed,subjobs);
-
-       parent_s = parent ? edg_wlc_JobIdUnparse(parent) : strdup("");
-
-       if (err == 0 &&
-               edg_wll_SetLoggingJobProxy(context,job,NULL,user,EDG_WLL_SEQ_NORMAL) == 0)
-                       edg_wll_LogEventMasterProxy(context,
-                               EDG_WLL_EVENT_REGJOB,EDG_WLL_FORMAT_REGJOB,
-                               (char *)jdl,ns,parent_s,type_s,num_subjobs,intseed);
-
-       free(type_s); free(intseed); free(parent_s);
-       return edg_wll_Error(context,NULL,NULL);
-}
-
-int edg_wll_RegisterJobSync(
-        edg_wll_Context         context,
-        const edg_wlc_JobId     job,
-        enum edg_wll_RegJobJobtype     type,
-        const char *            jdl,
-        const char *            ns,
-        int                     num_subjobs,
-        const char *            seed,
-        edg_wlc_JobId **        subjobs)
-{
-       return edg_wll_RegisterJobMaster(context,1,job,type,jdl,ns, NULL, num_subjobs,seed,subjobs);
-}
-
-int edg_wll_RegisterJob(
-        edg_wll_Context         context,
-        const edg_wlc_JobId     job,
-        enum edg_wll_RegJobJobtype     type,
-        const char *            jdl,
-        const char *            ns,
-        int                     num_subjobs,
-        const char *            seed,
-        edg_wlc_JobId **        subjobs)
-{
-       return edg_wll_RegisterJobMaster(context,0,job,type,jdl,ns, NULL, num_subjobs,seed,subjobs);
-}
-
-int edg_wll_RegisterSubjob(
-        edg_wll_Context         context,
-        const edg_wlc_JobId     job,
-        enum edg_wll_RegJobJobtype     type,
-        const char *            jdl,
-        const char *            ns,
-       edg_wlc_JobId           parent,
-        int                     num_subjobs,
-        const char *            seed,
-        edg_wlc_JobId **        subjobs)
-{
-       return edg_wll_RegisterJobMaster(context,0,job,type,jdl,ns, parent, num_subjobs,seed,subjobs);
-}
-
-int edg_wll_RegisterSubjobs(edg_wll_Context ctx,const edg_wlc_JobId parent,
-               char const * const * jdls, const char * ns, edg_wlc_JobId const * subjobs)
-{
-       char const * const      *pjdl;
-       edg_wlc_JobId const     *psubjob;
-       edg_wlc_JobId           oldctxjob;
-       char *                  oldctxseq;
-
-       if (edg_wll_GetLoggingJob(ctx, &oldctxjob)) return edg_wll_Error(ctx, NULL, NULL);
-       oldctxseq = edg_wll_GetSequenceCode(ctx);
-
-       pjdl = jdls;
-       psubjob = subjobs;
-       
-       while (*pjdl != NULL) {
-               if (edg_wll_RegisterSubjob(ctx, *psubjob, EDG_WLL_REGJOB_SIMPLE, *pjdl,
-                                               ns, parent, 0, NULL, NULL) != 0) break;
-               pjdl++; psubjob++;
-       }
-
-       edg_wll_SetLoggingJob(ctx, oldctxjob, oldctxseq, EDG_WLL_SEQ_NORMAL);
-
-       return edg_wll_Error(ctx, NULL, NULL);
-}
-
-int edg_wll_RegisterJobProxy(
-        edg_wll_Context         context,
-        const edg_wlc_JobId     job,
-        enum edg_wll_RegJobJobtype     type,
-       const char *            user,
-        const char *            jdl,
-        const char *            ns,
-        int                     num_subjobs,
-        const char *            seed,
-        edg_wlc_JobId **        subjobs)
-{
-       return edg_wll_RegisterJobMasterProxy(context,job,type,user,jdl,ns, NULL, num_subjobs,seed,subjobs);
-}
-
-int edg_wll_ChangeACL(
-               edg_wll_Context                         ctx,
-               const edg_wlc_JobId                     jobid,
-               const char                                 *user_id,
-               enum edg_wll_UserIdType         user_id_type,
-               enum edg_wll_Permission         permission,
-               enum edg_wll_PermissionType     permission_type,
-               enum edg_wll_ACLOperation       operation)
-{
-       if ( edg_wll_SetLoggingJob(ctx, jobid, NULL, EDG_WLL_SEQ_NORMAL) == 0 )
-               edg_wll_LogEventMaster(ctx, 1, EDG_WLL_EVENT_CHANGEACL, EDG_WLL_FORMAT_CHANGEACL,
-                               user_id, user_id_type, permission, permission_type, operation);
-
-
-       return edg_wll_Error(ctx,NULL,NULL);
-}
diff --git a/org.glite.lb.client/src/purge.c b/org.glite.lb.client/src/purge.c
deleted file mode 100644 (file)
index 3c0f934..0000000
+++ /dev/null
@@ -1,389 +0,0 @@
-#ident "$Header$"
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <string.h>
-#include <time.h>
-#include <errno.h>
-
-#include <globus_common.h>
-
-#define CLIENT_SBIN_PROG
-
-#include "glite/lb/consumer.h"
-#include "glite/lb/context-int.h"
-#include "glite/lb/purge.h"
-#include "glite/lb/xml_parse.h"
-#include "glite/lb/mini_http.h"
-
-
-#define dprintf(x) { if (debug) printf x; }
-
-#define free_jobs(jobs) {                                      \
-       if (jobs) {                                             \
-               int i;                                          \
-               for ( i = 0; jobs[i]; i++ )                     \
-                       free(jobs[i]);                          \
-               free(jobs);                                     \
-       }                                                       \
-}
-
-static const char rcsid[] = "@(#)$Id$";
-
-static int debug=0;
-static char *file;
-
-static int read_jobIds(const char *file, char ***jobs_out);
-static int get_timeout(const char *arg, int *timeout);
-static void printerr(edg_wll_Context ctx);
-
-static struct option opts[] = {
-       { "aborted",            required_argument, NULL, 'a'},
-       { "cleared",            required_argument, NULL, 'c'},
-       { "cancelled",          required_argument, NULL, 'n'},
-       { "other",              required_argument, NULL, 'o'},
-       { "dry-run",            no_argument, NULL, 'r'},
-       { "jobs",               required_argument, NULL, 'j'},
-       { "return-list",        no_argument, NULL, 'l'},
-       { "server-dump",        no_argument, NULL, 's'},
-       { "client-dump",        no_argument, NULL, 'i'},
-       { "help",               no_argument, NULL, 'h' },
-       { "version",            no_argument, NULL, 'v' },
-       { "debug",              no_argument, NULL, 'd' },
-       { "server",             required_argument, NULL, 'm' },
-       { NULL,                 no_argument, NULL,  0 }
-};
-
-static void usage(char *me)
-{
-       fprintf(stderr,"usage: %s [option]\n"
-               "       -a, --aborted NNN[smhd]     purge ABORTED jobs older than NNN secs/mins/hours/days\n"
-               "       -c, --cleared NNN[smhd]     purge CLEARED jobs older than given time\n"
-               "       -n, --cancelled NNN[smhd]   purge CANCELLED jobs older than given time\n"
-               "       -o, --other NNN[smhd]       purge OTHER jobs older than given time\n"
-               "       -r, --dry-run               do not really purge\n"
-               "       -j, --jobs <filename>       input file with jobIds of jobs to purge\n"
-               "       -l, --return-list           return list of jobid matching the purge/dump criteria\n"
-               "       -s, --server-dump           dump jobs into any server file\n"
-               "       -i, --client-dump           receive stream of dumped jobs\n"
-               "       -h, --help                  display this help\n"
-               "       -v, --version               display version\n"
-               "       -d, --debug                 diagnostic output\n"
-               "       -m, --server                L&B server machine name\n",
-               me);
-}
-
-int main(int argc,char *argv[])
-{
-       edg_wll_PurgeRequest *request;
-       edg_wll_PurgeResult *result;
-       int     i, timeout;
-       char *server = NULL;
-
-       char *me;
-       int opt;
-       edg_wll_Context ctx;
-
-       /* initialize request to server defaults */
-       request = (edg_wll_PurgeRequest *) calloc(1,sizeof(edg_wll_PurgeRequest));
-       request->jobs = NULL;
-       for (i=0; i < EDG_WLL_NUMBER_OF_STATCODES; i++) {
-               request->timeout[i]=-1;
-       }
-       request->flags = EDG_WLL_PURGE_REALLY_PURGE;
-
-       /* initialize result */
-       result = (edg_wll_PurgeResult *) calloc(1,sizeof(edg_wll_PurgeResult));
-
-       me = strrchr(argv[0],'/');
-       if (me) me++; else me=argv[0];
-
-       /* get arguments */
-       while ((opt = getopt_long(argc,argv,"a:c:n:o:j:m:rlsidhv",opts,NULL)) != EOF) {
-               timeout=-1;
-
-               switch (opt) {
-
-               case 'a': 
-                       if ((get_timeout(optarg,&timeout) != 0 )) {
-                               printf("Wrong usage of timeout argument.\n");
-                               usage(me);
-                               return 1;
-                       }
-                       if (timeout >= 0) {
-                               request->timeout[EDG_WLL_JOB_ABORTED]=timeout; 
-                       }
-                       break;
-
-               case 'c':
-                       if (get_timeout(optarg,&timeout) != 0 ) {
-                               printf("Wrong usage of timeout argument.\n");
-                               usage(me);
-                               return 1;
-                       }
-                       if (timeout >= 0) {
-                               request->timeout[EDG_WLL_JOB_CLEARED]=timeout; 
-                       }
-                       break;
-
-               case 'n': 
-                       if (get_timeout(optarg,&timeout) != 0 ) {
-                               printf("Wrong usage of timeout argument.\n");
-                               usage(me);
-                               return 1;
-                       }
-                       if (timeout >= 0) {
-                               request->timeout[EDG_WLL_JOB_CANCELLED]=timeout; 
-                       }
-                       break;
-               case 'o': 
-                       if (get_timeout(optarg,&timeout) != 0 ) {
-                               printf("Wrong usage of timeout argument.\n");
-                               usage(me);
-                               return 1;
-                       }
-                       if (timeout >= 0) request->timeout[EDG_WLL_PURGE_JOBSTAT_OTHER]= timeout;
-                       break;
-
-               case 'm': server = optarg; break;
-               case 'j': file = optarg; break;
-               case 'r': request->flags &= (~EDG_WLL_PURGE_REALLY_PURGE); break;
-               case 'l': request->flags |= EDG_WLL_PURGE_LIST_JOBS; break;
-               case 's': request->flags |= EDG_WLL_PURGE_SERVER_DUMP; break;
-               case 'i': request->flags |= EDG_WLL_PURGE_CLIENT_DUMP; break;
-               case 'd': debug = 1; break;
-               case 'v': fprintf(stdout,"%s:\t%s\n",me,rcsid); exit(0);
-               case 'h':
-               case '?': usage(me); return 1;
-               }
-       }
-
-       /* Initialize Globus common module */
-       dprintf(("Initializing Globus common module..."));
-       if (globus_module_activate(GLOBUS_COMMON_MODULE) != GLOBUS_SUCCESS) {
-               dprintf(("no.\n"));
-               fprintf(stderr,"Unable to initialize Globus common module\n");
-       } else {
-               dprintf(("yes.\n"));
-       }
-
-       /* initialize context */
-       edg_wll_InitContext(&ctx);
-
-       /* read the jobIds from file, if wanted */
-       if (file) {
-               char **jobs=NULL;
-               dprintf(("Reading jobIds form file \'%s\'...",file));
-               if (read_jobIds(file,&jobs) != 0) {
-                       dprintf(("no.\n"));
-                       fprintf(stderr,"Unable to read jobIds from file \'%s\'\n",file);
-                       goto main_end;
-               } else {
-                       dprintf(("yes.\n"));
-               }
-               request->jobs = jobs;
-       }
-
-       /* check request */
-       if (debug) {
-               printf("Purge request:\n");
-               printf("- flags: %d\n",request->flags);
-               printf("- %d timeouts:\n",EDG_WLL_NUMBER_OF_STATCODES);
-               for (i=0; i < EDG_WLL_NUMBER_OF_STATCODES; i++) {
-                       char *stat=edg_wll_StatToString(i);
-                       printf("\t%s: %ld\n",stat,request->timeout[i]);
-                       if (stat) free(stat);
-               }
-               printf("- list of jobs:\n");
-               if (!request->jobs) {
-                       printf("Not specified.\n");
-               } else {
-                       for ( i = 0; request->jobs[i]; i++ )
-                               printf("%s\n", request->jobs[i]);
-               }
-       }
-
-       if ( server )
-       {
-               char *p = strchr(server, ':');
-               if ( p )
-               {
-                       edg_wll_SetParam(ctx, EDG_WLL_PARAM_QUERY_SERVER_PORT, atoi(p+1));
-                       *p = 0;
-               }
-               edg_wll_SetParam(ctx, EDG_WLL_PARAM_QUERY_SERVER, server);
-       }
-
-       /* that is the Purge */
-       dprintf(("Running the edg_wll_Purge...\n"));
-       if (edg_wll_Purge(ctx, request, result) != 0) {
-               fprintf(stderr,"Error running the edg_wll_Purge().\n");
-               printerr(ctx);
-               switch ( edg_wll_Error(ctx, NULL, NULL) )
-               {
-               case ENOENT:
-               case EPERM:
-               case EINVAL:
-                       break;
-               default:
-                       goto main_end;
-               }
-       }
-
-       /* examine the result */
-       dprintf(("Examining the result of edg_wll_Purge...\n"));
-       if (result->server_file) {
-               printf("Server dump: %s\n",result->server_file);
-       } else {
-               printf("The jobs were not dumped.\n");
-       }
-       if (request->flags & EDG_WLL_PURGE_LIST_JOBS) {
-               printf("The following jobs %s purged:\n",
-                       request->flags & EDG_WLL_PURGE_REALLY_PURGE ? "were" : "would be");
-               if (!result->jobs) printf("None.\n");
-               else {
-                       int i;
-                       for ( i = 0; result->jobs[i]; i++ )
-                               printf("%s\n",result->jobs[i]);
-               }
-       }
-
-main_end:
-       dprintf(("End.\n"));
-       if (request)
-       {
-               free_jobs(request->jobs);
-               free(request);
-       }
-       if (result) free(result);
-       edg_wll_FreeContext(ctx);
-       return 0;
-}
-
-
-static void printerr(edg_wll_Context ctx) 
-{
-       char    *errt,*errd;
-
-       edg_wll_Error(ctx,&errt,&errd);
-       fprintf(stderr,"%s (%s)\n",errt,errd);
-}
-
-
-static int read_jobIds(const char *file, char ***jobs_out)
-{
-        FILE    *jobIds = fopen(file,"r");
-        char    buf[256];
-               char    **jobs;
-        int     cnt = 0;
-
-       jobs = NULL;
-
-
-        if (!jobIds) {
-                perror(file);
-                return 1;
-        }
-
-        while ( 1 ) {
-                char    *nl;
-                if ( !fgets(buf,sizeof buf,jobIds) )
-               {
-                       if (feof(jobIds))
-                               break;
-
-                       free_jobs(jobs);
-                       fprintf(stderr, "Error reading file\n");
-                       return 1;
-               }
-                nl = strchr(buf,'\n');
-                if (nl) *nl = 0;
-               /* TODO: check if it is really jobId, e.g. by edg_wlc_JobIdParse() */
-
-               if ( !(jobs = realloc(jobs, (cnt+2)*sizeof(*jobs))) )
-               {
-                       perror("cond_parse()");
-                       return(1);
-               }
-                jobs[cnt++] = strdup(buf);
-        }
-       jobs[cnt] = NULL;
-
-        fclose(jobIds);
-       *jobs_out = jobs;
-
-        return 0;
-}
-
-static int get_timeout(const char *arg, int *timeout) 
-{
-       int t = -1;
-       char tunit = '\0';
-
-       if (sscanf(arg,"%d%c",&t,&tunit) > 0) {
-               if (tunit) {
-                       switch (tunit) {
-                               case 'd': t *= 86400; break; // 24*60*60
-                               case 'h': t *= 3600; break; // 60*60
-                               case 'm': t *= 60; break;
-                               case 's': break;
-                               default: fprintf(stderr,"Allowed time units are s,m,h,d\n");
-                                       return -1;
-                       }
-               }
-       }
-       if (t < 0) return -1;
-       *timeout = t;
-       return 0;
-}
-
-static const char* const request_headers[] = {
-       "Cache-Control: no-cache",
-       "Accept: application/x-dglb",
-       "User-Agent: edg_wll_Api/" PROTO_VERSION "/" COMP_PROTO,
-       "Content-Type: application/x-dglb",
-       NULL
-};
-
-int edg_wll_Purge(
-               edg_wll_Context ctx,
-               edg_wll_PurgeRequest *request,
-               edg_wll_PurgeResult *result)
-{
-       char    *send_mess,
-               *response = NULL,
-               *recv_mess = NULL;
-
-       edg_wll_ResetError(ctx);
-
-       if (request->flags & EDG_WLL_PURGE_CLIENT_DUMP)
-               return edg_wll_SetError(ctx,ENOSYS,"client dump");
-
-       if (edg_wll_PurgeRequestToXML(ctx, request, &send_mess))
-               goto edg_wll_purge_end;
-
-       ctx->p_tmp_timeout = ctx->p_query_timeout;
-       if (ctx->p_tmp_timeout.tv_sec < 600) ctx->p_tmp_timeout.tv_sec = 600;
-
-       if (set_server_name_and_port(ctx, NULL)) 
-               goto edg_wll_purge_end;
-
-       if (edg_wll_http_send_recv(ctx,
-               "POST /purgeRequest HTTP/1.1", request_headers, send_mess,
-               &response, NULL, &recv_mess)) 
-               goto edg_wll_purge_end;
-
-       if (http_check_status(ctx, response, &recv_mess))
-               goto edg_wll_purge_end;
-
-       if (edg_wll_ParsePurgeResult(ctx, recv_mess, result))
-               goto edg_wll_purge_end;
-
-edg_wll_purge_end:
-       if (response) free(response);
-       if (recv_mess) free(recv_mess);
-       if (send_mess) free(send_mess);
-       return edg_wll_Error(ctx,NULL,NULL);
-}
diff --git a/org.glite.lb.client/src/statistics.c b/org.glite.lb.client/src/statistics.c
deleted file mode 100644 (file)
index 9e59484..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-#ident "$Header$"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <errno.h>
-
-#include "glite/lb/statistics.h"
-#include "glite/lb/context.h"
-#include "glite/lb/context-int.h"
-#include "glite/lb/xml_parse.h"
-#include "glite/lb/mini_http.h"
-
-#include "connection.h"
-
-
-
-static const char* const request_headers[] = {
-       "Cache-Control: no-cache",
-       "Accept: application/x-dglb",
-       "User-Agent: edg_wll_Api/" PROTO_VERSION "/" COMP_PROTO,
-       "Content-Type: application/x-dglb",
-       NULL
-};
-
-static int set_server_name_and_port(edg_wll_Context, const edg_wll_QueryRec **);
-
-
-
-/** Count the number of jobs which entered the specified state.
- */
-
-int edg_wll_StateRate(
-       edg_wll_Context ctx,
-       const edg_wll_QueryRec  *group,
-       edg_wll_JobStatCode     major,
-       int                     minor,
-       time_t  *from, 
-       time_t  *to,
-       float   *rate,
-       int     *res_from,
-       int     *res_to)
-
-{      
-       char    *response = NULL, *send_mess = NULL, *message = NULL;
-       float   not_returned;
-       
-       
-       edg_wll_ResetError(ctx);
-
-       edg_wll_StatsRequestToXML(ctx, "Rate", group, major, minor, from, to, &send_mess);
-       
-       if (set_server_name_and_port(ctx, NULL))
-               goto err;
-
-       ctx->p_tmp_timeout = ctx->p_query_timeout;
-
-       if (edg_wll_http_send_recv(ctx, "POST /statsRequest HTTP/1.1",request_headers, send_mess,
-                       &response,NULL,&message)) 
-               goto err;
-         
-       if (http_check_status(ctx,response))
-               goto err;
-
-       edg_wll_ParseStatsResult(ctx,message, from, to, rate, 
-                       &not_returned, res_from, res_to);
-
-err:
-       free(response);
-       free(message);
-
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-
-
-/** Compute average time for which jobs stay in the specified state.
- */
-
-int edg_wll_StateDuration(
-       edg_wll_Context ctx,
-       const edg_wll_QueryRec  *group,
-       edg_wll_JobStatCode     major,
-       int                     minor,
-       time_t  *from, 
-       time_t  *to,
-       float   *duration,
-       int     *res_from,
-       int     *res_to)
-{
-       char    *response = NULL, *send_mess = NULL, *message = NULL;
-       float   not_returned;
-       
-       
-       edg_wll_ResetError(ctx);
-
-       edg_wll_StatsRequestToXML(ctx, "Duration", group, major, minor, from, to, &send_mess);
-       
-       if (set_server_name_and_port(ctx, NULL))
-               goto err;
-
-       ctx->p_tmp_timeout = ctx->p_query_timeout;
-
-       if (edg_wll_http_send_recv(ctx, "POST /statsRequest HTTP/1.1",request_headers, send_mess,
-                       &response,NULL,&message)) 
-               goto err;
-         
-       if (http_check_status(ctx,response))
-               goto err;
-
-       edg_wll_ParseStatsResult(ctx,message, from, to, &not_returned, 
-                       duration, res_from, res_to);
-
-err:
-       free(response);
-       free(message);
-
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-
-
-static int set_server_name_and_port(edg_wll_Context ctx, const edg_wll_QueryRec **job_conditions)
-{
-       int                             i = 0, j,
-                                       found = 0,
-                                       error = 0;
-       int                             srvPort = 0,
-                                       srvPortTmp;
-       char               *srvName = NULL,
-                                  *srvNameTmp;
-
-
-       if ( job_conditions ) for ( j = 0; job_conditions[j]; j++ )
-               for ( i = 0; (job_conditions[j][i].attr != EDG_WLL_QUERY_ATTR_UNDEF); i++ )
-                       if ( job_conditions[j][i].attr == EDG_WLL_QUERY_ATTR_JOBID)
-                       {
-                               edg_wlc_JobIdGetServerParts(job_conditions[j][i].value.j,&srvNameTmp,&srvPortTmp);
-                               if ( found )
-                               {
-                                       if ( strcmp(srvName, srvNameTmp) || (srvPort != srvPortTmp) )
-                                       {
-                                               free(srvNameTmp); free(srvName);
-                                               return edg_wll_SetError(ctx, EINVAL, "Two different servers specifieed in one query");
-                                       }
-                                       free(srvNameTmp);
-                               }
-                               else
-                               {
-                                       srvName = srvNameTmp;
-                                       srvPort = srvPortTmp;
-                                       found = 1;
-                               }
-                       }       
-
-       if ( found && !ctx->p_query_server_override)
-       { 
-               if (!ctx->srvName)
-               {
-                       ctx->srvName = strdup(srvName);
-                       ctx->srvPort = srvPort;
-                       free(srvName);
-               }
-               else if (strcmp(srvName, ctx->srvName) || (srvPort != ctx->srvPort))
-               {
-                       free(ctx->srvName);
-                       ctx->srvName = strdup(srvName);
-                       ctx->srvPort = srvPort;
-                       free(srvName);
-               }
-       }
-       else if ( !ctx->srvName || !ctx->srvPort )
-       {
-               if (!ctx->p_query_server) 
-                       return(edg_wll_SetError(ctx, (edg_wll_ErrorCode) EINVAL, "Hostname of server to query is not set"));
-               else ctx->srvName = strdup(ctx->p_query_server);
-               if (!ctx->p_query_server_port)
-                       return(edg_wll_SetError(ctx, (edg_wll_ErrorCode) EINVAL, "Port of server to query is not set"));
-               else ctx->srvPort = ctx->p_query_server_port;
-       }
-               
-       return(error);
-}
-
-
diff --git a/org.glite.lb.client/src/uiwrap.c.T b/org.glite.lb.client/src/uiwrap.c.T
deleted file mode 100644 (file)
index 8ad66e0..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-#ident "$Header$"
-/*
-@@@AUTO
-*/
-@@@LANG: C
-
-#include "glite/wmsutils/jobid/cjobid.h"
-#include "glite/lb/producer.h"
-
-@@@{
-for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-               $event->getTypes) {
-       my $tu = uc $t;
-       my $a = "(edg_wll_Context context";
-       my $b = "(context,EDG_WLL_EVENT_$tu,EDG_WLL_FORMAT_$tu";
-       my $decl = "";
-       my $free = "";
-       my $doc = qq{
- * \\param context\tcontext to work with,
-};
-       selectType $event $t;
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = $f->getName;
-               my $ft;
-               my $bfn = $fn;
-                if ($f->{codes}) {
-#                        $ft = "enum edg_wll\_$t" . ucfirst $fn;
-                        $ft = "char *";
-                } else {
-                        $ft = $f->getType;
-                }
-               if ($ULMasString{$f->{type}}) {
-                       $decl .= "\tchar *s_$fn = ".$f->getType()."ToString($fn);\n";
-                       $free .= "\tfree(s_$fn);\n";
-                       $bfn = "s_$fn";
-               }
-               $ft = "const ".$ft;
-               my $fc = $f->getComment;
-               $a = $a . ", $ft $fn";
-               $b = $b . ", $bfn";
-               $doc = $doc . " * \\param $fn\t$fc\n";
-       }
-       $a = $a . ")";
-       $b = $b . ")";
-
-       gen qq{
-/*!
- * \\fn int edg_wll_Log$t$a; 
- * \\brief simple wrapper around edg_wll_LogEvent for event $t} . $doc . qq{ * \\see edg_wll_LogEvent\(\)
- */
-};
-#      gen "\nextern int edg_wll_Log$t$a;\n\n";
-       gen qq{
-int edg_wll_Log$t$a
-\{
-$decl
-       return edg_wll_LogEvent$b;
-\}\n
-};
-       gen qq{
-int edg_wll_Log${t}Proxy$a
-\{
-$decl
-       return edg_wll_LogEventProxy$b;
-\}\n
-};
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = $f->getName;
-               my $ft;
-                if ($f->{codes}) {
-#                        $ft = "enum edg_wll\_$t" . ucfirst $fn;
-                        $ft = "char *";
-                } else {
-                        $ft = $f->getType;
-                }
-               my $ftreg = $ft;
-               $ftreg =~ s/\*/\\\*/g;
-               $ftreg = "const ".$ftreg;
-               my $fc = $f->getComment;
-               if ($f->{codes}) {
-                       for (@{$f->{codes}}) {
-                               my $code = uc $_->{name};
-                               my $c = $a;
-                               my $d = $b;
-                               my $e = $doc;
-                               $c =~ s/, $ftreg $fn//g;
-                               $d =~ s/$fn/"$code"/g;
-                               $e =~ s/ \* \\param $fn\t$fc\n//g;
-                               gen qq{
-/*!
- * \\fn int edg_wll_Log$t$code$c; 
- * \\brief simple wrapper around edg_wll_LogEvent for event $t, $fn $code} . $e . qq{ * \\see edg_wll_LogEvent\(\)
- */
-};
-#                              gen "\nextern int edg_wll_Log$t$code$c;\n\n";
-                               gen qq{
-int edg_wll_Log$t$code$c
-\{
-$decl
-       return edg_wll_LogEvent$d;
-\}\n
-};
-                               gen qq{
-int edg_wll_Log$t${code}Proxy$c
-\{
-$decl
-       return edg_wll_LogEventProxy$d;
-\}\n
-};
-                       }
-               }
-       }
-}
-@@@}
diff --git a/org.glite.lb.client/test/prod_proto_test.c b/org.glite.lb.client/test/prod_proto_test.c
deleted file mode 100644 (file)
index ef4ddc8..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-#define edg_wll_gss_read_full(a,b,c,d,e,f)  test_edg_wll_gss_read_full(a,b,c,d,e,f)
-#define edg_wll_gss_write_full(a,b,c,d,e,f) test_edg_wll_gss_write_full(a,b,c,d,e,f)
-
-#include "prod_proto.h"
-#include "glite/lb/producer.h"
-#include "glite/lb/escape.h"
-
-/* virtual read will return all zeroes (answer from logger always without error) */
-int
-test_edg_wll_gss_read_full(edg_wll_GssConnection *con,
-                          void *buf,
-                          size_t bufsize,
-                          struct timeval *timeout,
-                          size_t *total,
-                          edg_wll_GssStatus *code) 
-{
-  code->major_status = 0;
-  code->minor_status = 0;
-  if (bufsize > 0) memset(buf, 0, bufsize);
-  return bufsize;
-}
-
-int
-test_edg_wll_gss_write_full(edg_wll_GssConnection *con,
-                           const void *buf,
-                           size_t bufsize,
-                           struct timeval *timeout,
-                           size_t *total,
-                           edg_wll_GssStatus *code) 
-{
-  *total = write(*(int *)con, buf, bufsize);
-  code->major_status = 0;
-  code->minor_status = *total < 0 ? *total : 0;
-  return *total < 0 ? *total : 0;
-}
-
-#include "prod_proto.c"
diff --git a/org.glite.lb.client/test/producer_test.cpp b/org.glite.lb.client/test/producer_test.cpp
deleted file mode 100644 (file)
index c2199c5..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-#include <iostream>
-
-#include <cppunit/extensions/HelperMacros.h>
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <sys/time.h>
-#include <unistd.h>
-#include <errno.h>
-#include <assert.h>
-#include <string.h>
-
-#include "glite/lb/context-int.h"
-
-extern "C" {
-int edg_wll_log_proto_client(edg_wll_Context, int *,char *);
-}
-
-class ProducerTest: public  CppUnit::TestFixture
-{
-       CPPUNIT_TEST_SUITE(ProducerTest);
-       CPPUNIT_TEST(testProtoClient);
-       CPPUNIT_TEST_SUITE_END();
-
-public:
-
-  void setUp() {
-    pipe(pd);
-  }
-
-  void tearDown() {
-    close(pd[0]);
-    close(pd[1]);
-  }
-
-  void testProtoClient() {
-    edg_wll_Context context;
-    int err;
-    char *tst_msg = "DATE=20040831150159.702224 HOST=\"some.host\" PROG=edg-wms LVL=USAGE DG.PRIORITY=0 DG.SOURCE=\"UserInterface\" DG.SRC_INSTANCE=\"\" DG.EVNT=\"RegJob\" DG.JOBID=\"https://some.host:1234/x67qr549qc\" DG.SEQCODE=\"UI=2:NS=0:WM=0:BH=1:JSS=0:LM=0:LRMS=0:APP=0\" DG.REGJOB.JDL=\"\" DG.REGJOB.NS=\"ns address\" DG.REGJOB.PARENT=\"\" DG.REGJOB.JOBTYPE=\"SIMPLE\" DG.REGJOB.NSUBJOBS=\"0\" DG.REGJOB.SEED=\"\"";
-
-    err = edg_wll_InitContext(&context);
-    CPPUNIT_ASSERT(err == 0);
-    err = edg_wll_log_proto_client(context, &pd[1], tst_msg);
-    CPPUNIT_ASSERT(err == 0);
-    log_proto_server(pd[0], tst_msg);
-    edg_wll_FreeContext(context);
-  }
-
-private:
-  int  pd[2];
-  int sock;
-
-  void log_proto_server(int con, char *logline) {
-    int i;
-    char b[4];
-    char *buf;
-    ssize_t size, retsize;
-
-    // read DGLOG
-    retsize = read(con, b, 5);
-    CPPUNIT_ASSERT(retsize == 5);
-    CPPUNIT_ASSERT(b[0] = 'D' && b[1] == 'G' && b[2] == 'L' && b[3] == 'O' && b[4] == 'G');
-
-    // read size (including '\0', little endian)
-    for (i = 0; i < 4; i++)
-      CPPUNIT_ASSERT(read(con, b + i, 1) == 1);
-    size = 0;
-    for (i = 0; i < 4; i++)
-      size = (size << 8) + b[3-i];
-
-    // read the message
-    buf = (char *)malloc(size);
-    retsize = read(con, buf, size);
-    CPPUNIT_ASSERT(size == retsize);
-
-    CPPUNIT_ASSERT(strcmp(buf, logline) == 0);
-    free(buf);
-  }
-};
-
-
-CPPUNIT_TEST_SUITE_REGISTRATION( ProducerTest );
-
-int 
-main (int ac,const char *av[])
-{
-       CppUnit::Test *suite = CppUnit::TestFactoryRegistry::getRegistry().makeTest();
-       CppUnit::TextUi::TestRunner runner;
-       
-       runner.addTest(suite);
-       return runner.run() ? 0 : 1;
-}
diff --git a/org.glite.lb.common/.cvsignore b/org.glite.lb.common/.cvsignore
deleted file mode 100644 (file)
index 1df717b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-.project
-.cdtproject
\ No newline at end of file
diff --git a/org.glite.lb.common/LICENSE b/org.glite.lb.common/LICENSE
deleted file mode 100644 (file)
index 259a91f..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-LICENSE file for EGEE Middleware\r
-================================\r
-\r
-Copyright (c) 2004 on behalf of the EU EGEE Project: \r
-The European Organization for Nuclear Research (CERN), \r
-Istituto Nazionale di Fisica Nucleare (INFN), Italy\r
-Datamat Spa, Italy\r
-Centre National de la Recherche Scientifique (CNRS), France\r
-CS Systeme d'Information (CSSI), France\r
-Royal Institute of Technology, Center for Parallel Computers (KTH-PDC), Sweden\r
-Universiteit van Amsterdam (UvA), Netherlands\r
-University of Helsinki (UH.HIP), Finlan\r
-University of Bergen (UiB), Norway\r
-Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom\r
-\r
-Redistribution and use in source and binary forms, with or without\r
-modification, are permitted provided that the following conditions are\r
-met: \r
-\r
-1. Redistributions of source code must retain the above copyright\r
-notice, this list of conditions and the following disclaimer.\r
-\r
-2. Redistributions in binary form must reproduce the above copyright\r
-notice, this list of conditions and the following disclaimer in the\r
-documentation and/or other materials provided with the distribution.\r
-\r
-3. The end-user documentation included with the redistribution, if\r
-any, must include the following acknowledgment: "This product includes\r
-software developed by The EU EGEE Project (http://cern.ch/eu-egee/)."\r
-Alternatively, this acknowledgment may appear in the software itself, if\r
-and wherever such third-party acknowledgments normally appear.\r
-\r
-4. The names EGEE and the EU EGEE Project must not be\r
-used to endorse or promote products derived from this software without\r
-prior written permission. For written permission, please contact\r
-<email address>.\r
-\r
-5. You are under no obligation whatsoever to provide anyone with any\r
-bug fixes, patches, or upgrades to the features, functionality or\r
-performance of the Software ("Enhancements") that you may develop over\r
-time; however, if you choose to provide your Enhancements to The EU\r
-EGEE Project, or if you choose to otherwise publish or distribute your\r
-Enhancements, in source code form without contemporaneously requiring\r
-end users of The EU EGEE Proejct to enter into a separate written license\r
-agreement for such Enhancements, then you hereby grant The EU EGEE Project\r
-a non-exclusive, royalty-free perpetual license to install, use, copy,\r
-modify, prepare derivative works, incorporate into the EGEE Middleware\r
-or any other computer software, distribute, and sublicense your\r
-Enhancements or derivative works thereof, in binary and source code\r
-form (if any), whether developed by The EU EGEE Project or third parties.\r
-\r
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED\r
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
-DISCLAIMED. IN NO EVENT SHALL PROJECT OR ITS CONTRIBUTORS BE LIABLE\r
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\r
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\r
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\r
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-\r
-This software consists of voluntary contributions made by many\r
-individuals on behalf of the EU EGEE Prject. For more information on The\r
-EU EGEE Project, please see http://cern.ch/eu-egee/. For more information on\r
-EGEE Middleware, please see http://egee-jra1.web.cern.ch/egee-jra1/\r
-\r
-\r
diff --git a/org.glite.lb.common/Makefile b/org.glite.lb.common/Makefile
deleted file mode 100644 (file)
index d4424be..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-# Default values
-top_srcdir=.
-builddir=build
-top_builddir=${top_srcdir}/${builddir}
-stagedir=.
-distdir=.
-globalprefix=glite
-lbprefix=lb
-package=glite-lb-common
-version=0.0.0
-PREFIX=/opt/glite
-
-glite_location=/opt/glite
-globus_prefix=/opt/globus
-nothrflavour=gcc32
-thrflavour=gcc32pthr
-expat_prefix=/opt/expat
-ares_prefix=/opt/ares
-
--include Makefile.inc
--include ../Makefile.inc
-
-VPATH=${top_srcdir}/src:${top_srcdir}/test
-AT3=perl -I${top_srcdir}/project ${top_srcdir}/project/at3
-
-
-SUFFIXES = .T
-
-CC=gcc
-
-DEBUG:=-g -O0 -Wall
-GLOBUSINC:= -I${globus_prefix}/include/${nothrflavour}
-GLOBUSTHRINC:= -I${globus_prefix}/include/${thrflavour}
-
-CFLAGS:=${DEBUG} -I${top_srcdir}/src -I${top_srcdir}/interface \
-       -I${stagedir}/include \
-       -I${glite_location}/include \
-       -I${expat_prefix}/include \
-       -I${ares_prefix}/include \
-       ${COVERAGE_FLAGS} \
-       -D_GNU_SOURCE \
-       -DDATAGRID_EXTENSION
-
-# We must follow major version changes of org.glite.lb.client-interface due to
-# binary compatibility. However, we may live a life of our own, changing our
-# major version more frequently. This variable specifies how many steps ahead
-# we are.
-
-VERSION_AHEAD=1
-
-GLOBUS_LIBS:=-L${globus_prefix}/lib \
-        -lglobus_common_${nothrflavour} \
-        -lglobus_gssapi_gsi_${nothrflavour} \
-
-GLITE_LIBS:=-L${glite_location}/lib
-
-ifneq (${expat_prefix},/usr)
-       EXPAT_LIBS:=-L${expat_prefix}/lib
-endif
-EXPAT_LIBS:=${EXPAT_LIBS} -lexpat
-
-ARES_LIBS:=-L${ares_prefix}/lib -lares
-LDFLAGS:=-L${stagedir}/lib \
-    ${COVERAGE_FLAGS}
-
-EXT_LIBS:= ${EXPAT_LIBS} ${ARES_LIBS} ${GLOBUS_LIBS}
-
-# breaks linking when not installed in /opt, /home/dimeglio etc.
-#    ${GLITE_LIBS} \
-#    ${GLOBUS_LIBS} \
-#    ${EXPAT_LIBS} \
-#    ${ARES_LIBS} \
-
-TEST_LIBS:=-L${cppunit}/lib -lcppunit
-TEST_INC:=-I${cppunit}/include
-
-COMPILE:=libtool --mode=compile ${CC} ${CFLAGS}
-LINK:=libtool --mode=link ${CC} -rpath ${stagedir}/lib ${LDFLAGS} 
-LINKXX:=libtool --mode=link  ${CXX} -rpath ${stagedir}/lib ${LDFLAGS} 
-INSTALL:=libtool --mode=install install
-
-OBJS:=lb_gss.o lb_plain_io.o escape.o events.o mini_http.o query_rec.o \
-       status.o xml_conversions.o xml_parse.o ulm_parse.o param.o \
-       events_parse.o il_string.o il_int.o notifid.o \
-       il_log.o il_msg.o context.o trio.o strio.o
-LOBJS:=${OBJS:.o=.lo}
-
-THROBJS:=${OBJS:.o=.thr.o}
-THRLOBJS:=${OBJS:.o=.thr.lo}
-
-HDRS:=context-int.h  lb_gss.h lb_plain_io.h mini_http.h authz.h xml_parse.h \
-       xml_conversions.h log_proto.h events_parse.h il_string.h escape.h \
-       ulm_parse.h trio.h
-
-STATICLIB:=libglite_lb_common_${nothrflavour}.a
-THRSTATICLIB:=libglite_lb_common_${thrflavour}.a
-LTLIB:=libglite_lb_common_${nothrflavour}.la
-THRLTLIB:=libglite_lb_common_${thrflavour}.la
-
-default: all
-
-all compile: check_version ${STATICLIB} ${LTLIB} ${THRSTATICLIB} ${THRLTLIB}
-
-version_info=-version-info `echo ${version} | cut -d. -f1,2 | tr . :`
-
-${STATICLIB}: ${OBJS}
-       ar crv $@ ${OBJS}
-       ranlib $@
-
-${THRSTATICLIB}: ${THROBJS}
-       ar crv $@ ${THROBJS}
-       ranlib $@
-
-${LTLIB}: ${OBJS}
-       ${LINK} ${version_info} -o $@ ${LOBJS} \
-               -lglite_wmsutils_cjobid \
-               -lm
-
-${THRLTLIB}: ${THROBJS}
-       ${LINK} ${version_info} -o $@ ${THRLOBJS} \
-               -lglite_wmsutils_cjobid \
-               -lm
-
-stage: compile
-       $(MAKE) install PREFIX=${stagedir} DOSTAGE=yes
-
-check: compile check.parse check.gss check.il
-
-check.parse: test_parse
-       echo "XXX: nyk -> fixed build interrupt :)"
-       # ./test_parse
-
-test_parse: parse.cpp
-       ${CXX} -c ${CFLAGS} ${TEST_INC} $<
-       ${LINKXX} -o test_parse parse.o ${LTLIB} ${TEST_LIBS} ${EXT_LIBS}
-
-check.gss: test_gss
-       # ./test_gss
-       echo test_gss not run automatically util we have got some credentials
-
-check.il: il_test
-       ./il_test
-
-test_gss: test_gss.o
-       ${LINKXX} -o $@ test_gss.o ${LTLIB} ${TEST_LIBS} ${EXT_LIBS}
-
-il_test: il_test.o il_int_test.o il_string_test.o
-       ${LINKXX} -o $@ $+ ${LTLIB} ${TEST_LIBS} ${EXT_LIBS}
-
-test_coverage:
-       -mkdir coverage
-       cd coverage && $(MAKE) -f ../Makefile top_srcdir=../../ COVERAGE_FLAGS="-fprofile-arcs -ftest-coverage" check
-       cd coverage && for i in ${OBJS}; do gcov -o .libs/ $$i ; done
-
-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:
-       mkdir -p ${PREFIX}/lib
-       mkdir -p ${PREFIX}/share/doc/${package}-${version}
-       ${INSTALL} -m 644 ${LTLIB} ${THRLTLIB} ${PREFIX}/lib
-       ${INSTALL} -m 644 ${top_srcdir}/LICENSE ${PREFIX}/share/doc/${package}-${version}
-       if [ x${DOSTAGE} = xyes ]; then \
-               mkdir -p ${PREFIX}/include/${globalprefix}/${lbprefix} ; \
-               (cd ${top_srcdir}/interface && install -m 644 ${HDRS} ${PREFIX}/include/${globalprefix}/${lbprefix}) ; \
-               install -m 644 ${STATICLIB} ${THRSTATICLIB} ${PREFIX}/lib; \
-       fi
-
-clean:
-
-
-%.o: %.c
-       ${COMPILE} ${GLOBUSINC} -c $<
-
-test_gss.o: %.o: %.cpp
-       ${CXX} -c ${CFLAGS} ${GLOBUSINC} ${TEST_INC} $<
-
-il_int_test.o il_string_test.o il_test.o: %.o: %.cpp
-       ${CXX} -c ${CFLAGS} ${TEST_INC} $<
-
-%.thr.o: %.c
-       ${COMPILE} ${GLOBUSTHRINC} -o $@ -c $<
-
-%.h: %.h.T
-       rm -f $@
-       ${AT3} $< >$@ || rm -f $@
-       chmod -w $@ >/dev/null
-
-%.c: %.c.T
-       rm -f $@
-       ${AT3} $< >$@ || rm -f $@
-       chmod -w $@ >/dev/null
-
-%.cpp: %.cpp.T
-       rm -f $@
-       ${AT3} $< >$@ || rm -f $@
-       chmod -w $@ >/dev/null
-
-check_version:
-       @perl -ne '/#define GLITE_LB_CLIENT_INTERFACE "(\d+)\.\d+\.\d+"/; \
-               $$iface=$$1; \
-               $$_="${version}"; /(\d+)\.\d+\.\d+/; \
-               if ($$iface + ${VERSION_AHEAD} != $$1) { \
-                       print "error: Major version of the interface ($$iface+${VERSION_AHEAD}) does not match implementation ($$1)\n" ;\
-                       exit 1;  \
-               } \
-               ' ${stagedir}/include/glite/lb/interface_version.h
diff --git a/org.glite.lb.common/build.xml b/org.glite.lb.common/build.xml
deleted file mode 100755 (executable)
index d2997c8..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Build file for the GLite LB Common module
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.5  2004/07/28 12:27:00  dimeglio
-       Changed default target from compile to dist
-       
-       Revision 1.4  2004/07/06 17:51:37  flammer
-       Update of classpath definitions, targets & configure file.
-       
-       Revision 1.3  2004/06/22 22:49:46  dimeglio
-       Removed debug comments
-       
-       Revision 1.2  2004/06/22 22:06:52  dimeglio
-       Added standard comments
-       
--->
-
-<project name="common" default="dist">
-       
-       <!-- =========================================
-                Builds the GLite LB Common 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}"/>
-               
-       <!-- ==============================================
-                Local private targets
-            ============================================== -->
-       
-       <target name="localinit"
-               description="Module specific initialization tasks">
-
-               <!-- Copy support files from the subsystem project to the component project-->
-               <copy toDir="${module.project.dir}">
-                       <fileset dir="${subsystem.project.dir}">
-                               <include name="at3" />
-                               <include name="*.T" />
-                               <include name="*.pm" />
-                       </fileset>
-               </copy> 
-               <antcall target="lbmakefiles" />
-       </target>
-               
-       <target name="localcompile"
-               description="Module specific compile tasks">
-       </target>
-       
-       <target name="localclean"
-               description="Module specific cleaning tasks">
-               <delete>
-                       <fileset dir="${module.project.dir}">
-                               <include name="at3" />
-                               <include name="*.T" />
-                               <include name="*.pm" />
-                       </fileset>
-               </delete>       
-       </target>
-       
-       <!-- =========================================
-            RPM settings
-            ========================================= -->
-
-       <property name="build.package.summary" value="L&amp;B common subroutines library" />
-       <property name="build.package.description" value="
-Library of common routines used by Logging &amp; Bookkeeping daemons,&#xA;client
-libraries, programs, and utilities." />
-
-</project>             
diff --git a/org.glite.lb.common/interface/authz.h b/org.glite.lb.common/interface/authz.h
deleted file mode 100644 (file)
index ccb02ad..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef _LB_AUTHZ_H
-#define _LB_AUTHZ_H
-
-#ident "$Header$"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct _edg_wll_VomsGroup {
-       char *vo;
-       char *name;
-} edg_wll_VomsGroup;
-
-typedef struct _edg_wll_VomsGroups {
-       size_t len;
-       edg_wll_VomsGroup *val;
-} edg_wll_VomsGroups;
-
-#ifdef __cplusplus 
-}
-#endif
-
-#endif
diff --git a/org.glite.lb.common/interface/context-int.h b/org.glite.lb.common/interface/context-int.h
deleted file mode 100644 (file)
index c9f6acf..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_COMMON_CONTEXT_H__
-#define __EDG_WORKLOAD_LOGGING_COMMON_CONTEXT_H__
-
-#ident "$Header$"
-
-#include "glite/lb/consumer.h"
-#include "lb_gss.h"
-#include "lb_plain_io.h"
-#include "authz.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-       
-typedef struct _edg_wll_SeqCode {
-       unsigned int    c[EDG_WLL_SOURCE__LAST];
-} edg_wll_SeqCode;
-
-
-
-/* non-gsi one-element analogy of connPool for L&B Proxy server */
-typedef struct _edg_wll_ConnProxy {
-       edg_wll_PlainConnection conn;
-       char   *buf;
-       size_t  bufSize;
-       size_t  bufUse;
-} edg_wll_ConnProxy;
-
-
-
-typedef struct _edg_wll_ConnPool {
-/* address and port where we are connected to */
-       char            *peerName;
-       unsigned int    peerPort;
-       
-/* http(s) stream */
-       gss_cred_id_t   gsiCred;
-       edg_wll_GssConnection   gss;
-       char            *buf;
-       int             bufUse,bufSize;
-
-/* timestamp of usage of this entry in ctx.connPool */
-       struct timeval  lastUsed;
-} edg_wll_ConnPool;
-
-
-
-struct _edg_wll_Context {
-/* Error handling */
-       int             errCode;        /* recent error code */
-       char            *errDesc;       /* additional error description */
-
-/* server part */
-
-       void            *mysql;
-       edg_wll_ConnPool        *connPool;
-       edg_wll_ConnPool        *connPoolNotif;         /* hold _one_ connection from notif-interlogger */
-       edg_wll_ConnProxy       *connProxy;             /* holds one plain connection */
-
-       int             semaphores,semset;
-       edg_wll_QueryRec        **job_index;
-       void            *job_index_cols;
-       
-       time_t          peerProxyValidity;
-       char            *peerName;
-       edg_wll_VomsGroups      vomsGroups;
-       int             allowAnonymous;
-       int             noAuth;         /* if set, you can obtain info about events     */
-                                       /* and jobs not belonging to you                */
-       int             noIndex;        /* don't enforce indices */
-       int             rgma_export;
-       int             strict_locking; /* lock jobs for storing event too */
-
-       int             is_V21;         /* true if old (V21) request arrived */
-       int             isProxy;        /* LBProxy */
-       
-/* server limits */
-       int             softLimit;
-       int             hardJobsLimit;
-       int             hardEventsLimit;
-
-       time_t          notifDuration;
-
-/* purge and dump files storage */
-       char            *dumpStorage;
-       char            *purgeStorage;
-
-/* flag for function store_event
- * if set then event are loaded from dump file
- */
-       int             event_load;
-
-/* address and port we are listening at */
-       char            *srvName;
-       unsigned int    srvPort;
-       
-/* pool of connections from client */
-       int             poolSize;
-       int             connOpened;     /* number of opened connections  */
-       int             connToUse;      /* index of connection that will *
-                                        *  be used by low-level f-cions */
-       // XXX similar variables will be needed for connPoolNotif
-
-       
-/* other client stuff */
-       int             notifSock;              /* default client socket        *
-                                                * for receiving notifications  */   
-       
-/* user settable parameters */
-       char            *p_host;
-       edg_wll_Source  p_source;
-       char            *p_instance;
-       enum edg_wll_Level      p_level;
-       char            *p_destination;
-       int             p_dest_port;
-       char            *p_lbproxy_store_sock;
-       char            *p_lbproxy_serve_sock;
-       char            *p_user_lbproxy;
-       struct timeval  p_log_timeout,p_sync_timeout,p_query_timeout, p_notif_timeout, p_tmp_timeout;
-       char            *p_query_server;
-       int             p_query_server_port;
-       int             p_query_server_override;
-       int             p_query_events_limit;
-       int             p_query_jobs_limit;
-       edg_wll_QueryResults    p_query_results;
-       char            *p_notif_server;
-       int             p_notif_server_port;
-       char            *p_proxy_filename;
-       char            *p_cert_filename;
-       char            *p_key_filename;
-       time_t          purge_timeout[EDG_WLL_NUMBER_OF_STATCODES];
-/* producer part */
-       edg_wlc_JobId   p_jobid;
-       edg_wll_SeqCode p_seqcode;
-       int             count_statistics;
-};
-
-/* to be used internally: set, update and and clear the error information in 
- * context, the desc string (if provided) is strdup()-ed
- *
- * all return the error code for convenience (usage in return statement) */
-
-
-extern int edg_wll_SetError(
-       edg_wll_Context,        /* context */
-       int,                    /* error code */
-       const char *            /* error description */
-);
-
-extern int edg_wll_SetErrorGss(
-       edg_wll_Context,
-       const char *,
-       edg_wll_GssStatus *
-);
-
-/** update errDesc and errCode */
-extern int edg_wll_UpdateError(
-       edg_wll_Context,        /* context */
-       int,                    /* error code */
-       const char *            /* error description */
-);
-
-/** set errCode to 0, free errDesc */
-extern int edg_wll_ResetError(edg_wll_Context);
-
-/** retrieve standard error text wrt. code
- * !! does not allocate memory */
-extern const char *edg_wll_GetErrorText(int);
-
-extern int edg_wll_ContextReopen(edg_wll_Context);
-
-extern int edg_wll_SetSequenceCode(edg_wll_Context, const char *, int);
-extern int edg_wll_IncSequenceCode(edg_wll_Context ctx);
-
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* __EDG_WORKLOAD_LOGGING_COMMON_CONTEXT_H__ */
diff --git a/org.glite.lb.common/interface/escape.h b/org.glite.lb.common/interface/escape.h
deleted file mode 100644 (file)
index 4cf54c0..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_COMMON_ESCAPE_H__
-#define __EDG_WORKLOAD_LOGGING_COMMON_ESCAPE_H__
-/*!
- * \file Client/escape.h
- * \brief Prototypes for Client/escape.c
- */
-
-#ident "$Header$"
-
-
-/*!
- * \fn char *edg_wll_LogEscape(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 *edg_wll_LogEscape(const char *);
-
-
-/*!
- * \fn char *edg_wll_LogUnescape(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 *edg_wll_LogUnescape(const char *);
-
-
-/*!
- * \fn char *edg_wll_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 *edg_wll_EscapeXML(const char *);
-
-
-/*!
- * \fn char *edg_wll_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 *edg_wll_UnescapeXML(const char *);
-
-
-/*!
- * \fn char *edg_wll_EscapeSQL(const char *str)
- * \param str          a string to escape
- * \return             new (allocated) escaped string
- * \briefin given string (SQL) escape all unwanted characters
- */
-
-char *edg_wll_EscapeSQL(const char *);
-
-#endif /* __EDG_WORKLOAD_LOGGING_COMMON_ESCAPE_H__ */
diff --git a/org.glite.lb.common/interface/events_parse.h b/org.glite.lb.common/interface/events_parse.h
deleted file mode 100644 (file)
index 155d7ac..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_COMMON_EVENTS_PARSE_H__
-#define __EDG_WORKLOAD_LOGGING_COMMON_EVENTS_PARSE_H__
-
-#ident "$Header$"
-
-#include "glite/lb/events.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/**
- * Parse a ULM line into a edg_wll_Event structure
- * \param context IN: context to work with
- * \param logline IN: ULM string to parse
- * \param event OUT: parsed event
- *     (may be NULL - syntax checking with no output)
- */
-extern edg_wll_ErrorCode edg_wll_ParseEvent(
-       edg_wll_Context context,
-       edg_wll_LogLine logline,
-       edg_wll_Event ** event
-);
-
-/** 
- * Generate ULM line from edg_wll_Event structure
- * \param context IN: context to work with
- * \param event IN: event to unparse
- */
-extern edg_wll_LogLine edg_wll_UnparseEvent(
-       edg_wll_Context context,
-       edg_wll_Event * event
-);
-
-/**
- * Check event for completness.
- * Auxiliary function, checks whether all required fields of
- * the event type are present.
- * \param context IN: context to work with
- * \param event IN: event to check
- */
-extern edg_wll_ErrorCode edg_wll_CheckEvent(
-       edg_wll_Context context,
-       edg_wll_Event * event
-);
-
-/**
- * Compare two event structures
- * Auxiliary function, compares all fields of two event structure 
- * \param context IN: context to work with
- * \param e1 IN: first event to compare
- * \param e2 IN: second event to compare
- */
-extern edg_wll_ErrorCode edg_wll_CompareEvents(
-        edg_wll_Context context,
-        const edg_wll_Event *e1,
-        const edg_wll_Event *e2
-);
-
-
-/**
- * Parse "only" jobId from ULM message
- * \param logline IN: ULM string to parse
- * \return jobId string
- */
-extern char *edg_wll_GetJobId(edg_wll_LogLine logline);
-
-/**
- * Parse a special Notification ULM line into a edg_wll_Event structure
- * \param context IN: context to work with
- * \param logline IN: ULM string to parse
- * \param event OUT: parsed event
- *     (may be NULL - syntax checking with no output)
- */
-extern edg_wll_ErrorCode edg_wll_ParseNotifEvent(
-       edg_wll_Context context,
-       edg_wll_LogLine logline,
-       edg_wll_Event ** event
-);
-
-/** 
- * Generate a special Notification ULM line from edg_wll_Event structure
- * \param context IN: context to work with
- * \param event IN: event to unparse
- */
-extern edg_wll_LogLine edg_wll_UnparseNotifEvent(
-       edg_wll_Context context,
-       edg_wll_Event * event
-);
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* __EDG_WORKLOAD_LOGGING_COMMON_EVENTS_PARSE_H__ */
diff --git a/org.glite.lb.common/interface/il_string.h b/org.glite.lb.common/interface/il_string.h
deleted file mode 100644 (file)
index db480f7..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef NET_STRING_H
-#define NET_STRING_H
-
-#ident "$Header$"
-
-#define MAXLEN 1024
-
-char *put_int(char *p, int d);
-char *_put_int(char *p, int d);
-char *put_string(char *p, char *s);
-
-char *get_int(char *p, int *d);
-char *_get_int(char *p, int *d);
-char *get_string(char *p, char **s);
-
-int len_string(char *s);
-int len_int(int d);
-
-enum {
-  LB_OK    = 0,
-  LB_NOMEM = 200,
-  LB_PROTO = 400,
-  LB_AUTH  = 500,
-  LB_PERM  = 600,
-  LB_DBERR = 700,
-  LB_SYS   = 800,
-  LB_TIME  = 900
-};
-
-#endif
diff --git a/org.glite.lb.common/interface/lb_gss.h b/org.glite.lb.common/interface/lb_gss.h
deleted file mode 100644 (file)
index 047b718..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_COMMON_LB_GSS_H__
-#define __EDG_WORKLOAD_LOGGING_COMMON_LB_GSS_H__
-
-#ident "$Header$"
-
-#include <gssapi.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-enum {
-  EDG_WLL_GSS_OK               =  0,  /* no GSS errors */
-  EDG_WLL_GSS_ERROR_GSS                = -1,  /* GSS specific error, call edg_wll_get_gss_error() for details */
-  EDG_WLL_GSS_ERROR_TIMEOUT    = -2,  /* Timeout */
-  EDG_WLL_GSS_ERROR_EOF                = -3,  /* EOF occured */
-  EDG_WLL_GSS_ERROR_ERRNO      = -4,  /* System error. See errno */
-  EDG_WLL_GSS_ERROR_HERRNO     = -5   /* Resolver error. See h_errno */
-};
-
-typedef struct _edg_wll_GssConnection {
-  gss_ctx_id_t context;
-  int sock;
-  char buffer[BUFSIZ];
-  size_t bufsize;
-} edg_wll_GssConnection;
-
-typedef struct _edg_wll_GssStatus {
-  OM_uint32 major_status;
-  OM_uint32 minor_status;
-} edg_wll_GssStatus;
-
-/* XXX Support anonymous connections. Are we able/required to support
- * anonymous servers as well. */
-
-int
-edg_wll_gss_acquire_cred_gsi(char *cert_file,
-                            char *key_file,
-                            gss_cred_id_t *cred,
-                            char **name,
-                            edg_wll_GssStatus* gss_code);
-
-int 
-edg_wll_gss_connect(gss_cred_id_t cred,
-                   char const *hostname,
-                   int port,
-                   struct timeval *timeout,
-                   edg_wll_GssConnection *connection,
-                   edg_wll_GssStatus* gss_code);
-
-int
-edg_wll_gss_accept(gss_cred_id_t cred,
-                  int sock,
-                  struct timeval *timeout,
-                  edg_wll_GssConnection *connection,
-                  edg_wll_GssStatus* gss_code);
-
-int
-edg_wll_gss_read(edg_wll_GssConnection *connection,
-                void *buf,
-                size_t bufsize,
-                struct timeval *timeout,
-                edg_wll_GssStatus* gss_code);
-
-int
-edg_wll_gss_write(edg_wll_GssConnection *connection,
-                 const void *buf,
-                 size_t bufsize,
-                 struct timeval *timeout,
-                 edg_wll_GssStatus* gss_code);
-
-int
-edg_wll_gss_read_full(edg_wll_GssConnection *connection,
-                     void *buf,
-                     size_t bufsize,
-                     struct timeval *timeout,
-                     size_t *total,
-                     edg_wll_GssStatus* gss_code);
-
-int
-edg_wll_gss_write_full(edg_wll_GssConnection *connection,
-                      const void *buf,
-                      size_t bufsize,
-                      struct timeval *timeout,
-                      size_t *total,
-                      edg_wll_GssStatus* gss_code);
-
-int
-edg_wll_gss_watch_creds(const char * proxy_file,
-                       time_t * proxy_mtime);
-
-int
-edg_wll_gss_get_error(edg_wll_GssStatus* gss_code,
-                     const char *prefix,
-                     char **errmsg);
-
-int
-edg_wll_gss_close(edg_wll_GssConnection *connection,
-                 struct timeval *timeout);
-
-int 
-edg_wll_gss_reject(int sock);
-
-int
-edg_wll_gss_oid_equal(const gss_OID a,
-                     const gss_OID b);
-
-/*
-int
-edg_wll_gss_get_name(gss_cred_id_t cred, char **name);
-*/
-
-#ifdef __cplusplus
-} 
-#endif
-       
-#endif /* __EDG_WORKLOAD_LOGGING_COMMON_LB_GSS_H__ */
diff --git a/org.glite.lb.common/interface/lb_plain_io.h b/org.glite.lb.common/interface/lb_plain_io.h
deleted file mode 100644 (file)
index d423bbc..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_COMMON_LB_PLAIN_IO_H__
-#define __EDG_WORKLOAD_LOGGING_COMMON_LB_PLAIN_IO_H__
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct _edg_wll_PlainConnection {
-       int sock;
-       char *buf;
-       size_t bufSize;
-       size_t bufUse;
-} edg_wll_PlainConnection;
-
-       
-int edg_wll_plain_accept(
-       int sock,
-       edg_wll_PlainConnection *conn);
-
-int edg_wll_plain_close(
-       edg_wll_PlainConnection *conn);
-
-int edg_wll_plain_read(
-       edg_wll_PlainConnection *conn,
-       void *outbuf,
-       size_t outbufsz,
-       struct timeval *timeout);
-
-int edg_wll_plain_read_full(
-       edg_wll_PlainConnection *conn,
-       void *outbuf,
-       size_t outbufsz,
-       struct timeval *timeout);
-
-int edg_wll_plain_write_full(
-       edg_wll_PlainConnection *conn,
-       const void *buf,
-       size_t bufsz,
-       struct timeval *timeout);
-
-#ifdef __cplusplus
-} 
-#endif
-       
-#endif /* __EDG_WORKLOAD_LOGGING_COMMON_LB_PLAIN_IO_H__ */
diff --git a/org.glite.lb.common/interface/log_proto.h b/org.glite.lb.common/interface/log_proto.h
deleted file mode 100644 (file)
index a2a59a8..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_COMMON_LOG_PROTO_H__
-#define __EDG_WORKLOAD_LOGGING_COMMON_LOG_PROTO_H__
-
-#ident "$Header$"
-
-/**
- * \file edg/workload/logging/common/log_proto.h
- * \brief common part of the logging protocol
- * \note private
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/**
- * default (noauth) user name
- */
-/** default user */
-#define EDG_WLL_LOG_USER_DEFAULT                "anonymous"
-
-
-/**
- * default prefix for names of log files 
- */
-/** default prefix */
-#define EDG_WLL_LOG_PREFIX_DEFAULT              "/tmp/dglogd.log"
-
-
-/** 
- * default local-logger Socket header 
- */
-/** header text */
-#define EDG_WLL_LOG_SOCKET_HEADER               "DGLOG"
-/** header length */
-#define EDG_WLL_LOG_SOCKET_HEADER_LENGTH        5
-
-
-/**
- * default local-logger destination 
- */
-/** host */
-#define EDG_WLL_LOG_HOST_DEFAULT               "localhost"
-/** port */
-#define EDG_WLL_LOG_PORT_DEFAULT               9002
-
-
-/**
- * default and maximal logging timeout (in seconds)
- */
-#define EDG_WLL_LOG_TIMEOUT_DEFAULT            120
-#define EDG_WLL_LOG_TIMEOUT_MAX                        1800
-#define EDG_WLL_LOG_SYNC_TIMEOUT_DEFAULT       120
-#define EDG_WLL_LOG_SYNC_TIMEOUT_MAX           1800
-
-
-/**
- * maximal message size for sync logging
- */
-/** max message size in bytes */
-// unlimited for tests!
-#define EDG_WLL_LOG_SYNC_MAXMSGSIZE            102400000
-
-       
-/**
- * default maximal number of simultaneously open connections from one client
- */
-#define EDG_WLL_LOG_CONNECTIONS_DEFAULT                4
-
-       
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __EDG_WORKLOAD_LOGGING_COMMON_LOG_PROTO_H__ */
diff --git a/org.glite.lb.common/interface/mini_http.h b/org.glite.lb.common/interface/mini_http.h
deleted file mode 100644 (file)
index 2b846f3..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_COMMON_MINI_HTTP_H__
-#define __EDG_WORKLOAD_LOGGING_COMMON_MINI_HTTP_H__
-
-#ident "$Header$"
-
-#include "glite/lb/consumer.h"
-
-/* XXX: not a good place for the folowing #def's but we ain't got better currently */
-/** protocol version */
-#define PROTO_VERSION           "3.0"
-#define PROTO_VERSION_V21      "2.1"
-/** backward protocol compatibility     */
-/* version separated by comma           */
-/* e.g. "1.0,1.2,1.3"                   */
-#define COMP_PROTO              "3.0"
-#define COMP_PROTO_V21         "2.0,2.1"
-
-
-/* subset of HTTP codes we return */
-#define HTTP_OK                        200
-#define HTTP_BADREQ            400
-#define HTTP_UNAUTH            401
-#define HTTP_NOTFOUND          404
-#define HTTP_NOTALLOWED                405
-#define HTTP_UNSUPPORTED       415 
-#define HTTP_INTERNAL          500
-#define HTTP_NOTIMPL           501
-#define HTTP_UNAVAIL           503
-#define HTTP_INVALID           579
-
-extern edg_wll_ErrorCode edg_wll_http_recv(
-       edg_wll_Context,        /* INOUT: context */
-       char **,        /* OUT: first line */
-       char ***,       /* OUT: null terminated array of headers */
-       char **         /* OUT: message body */
-);
-
-extern edg_wll_ErrorCode edg_wll_http_send(
-       edg_wll_Context,        /* INOUT: context */
-       const char *,           /* IN: first line */
-       char const * const *,   /* IN: headers */
-       const char *            /* IN: message body */
-);
-
-extern edg_wll_ErrorCode edg_wll_http_recv_proxy(
-       edg_wll_Context,        /* INOUT: context */
-       char **,        /* OUT: first line */
-       char ***,       /* OUT: null terminated array of headers */
-       char **         /* OUT: message body */
-);
-
-extern edg_wll_ErrorCode edg_wll_http_send_proxy(
-       edg_wll_Context,        /* INOUT: context */
-       const char *,           /* IN: first line */
-       char const * const *,   /* IN: headers */
-       const char *            /* IN: message body */
-);
-
-#endif /* __EDG_WORKLOAD_LOGGING_COMMON_MINI_HTTP_H__ */
diff --git a/org.glite.lb.common/interface/trio.h b/org.glite.lb.common/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.lb.common/interface/ulm_parse.h b/org.glite.lb.common/interface/ulm_parse.h
deleted file mode 100644 (file)
index ee7d85c..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_COMMON_ULM_PARSE_H__
-#define __EDG_WORKLOAD_LOGGING_COMMON_ULM_PARSE_H__
-
-#ident "$Header$"
-
-#include <sys/time.h>          /* for ULCconvertDate */
-#include <time.h>
-
-/*========= DATA =====================================================*/
-
-#define ULM_DATE_STRING_LENGTH 21
-#define ULM_FIELDS_MAX         100 /* max number of fields */
-#define ULM_PARSE_OK           0
-#define ULM_PARSE_ERROR                -1
-
-#define ULM_EQ '='
-#define ULM_QM '"'
-#define ULM_BS '\\'
-#define ULM_SP ' '
-#define ULM_TB '\t'
-#define ULM_LF '\n'
-
-typedef char *LogLine;
-
-typedef struct _edg_wll_ULMFields {
-  LogLine raw;
-  int    *names;
-  int    *vals;
-  int     num;
-} edg_wll_ULMFields , *p_edg_wll_ULMFields;
-
-/*========= FUNCTIONS ================================================*/
-
-#define EDG_WLL_ULM_CLEAR_FIELDS(x) { if (x) { if (x->vals) free(x->vals); if (x->names) free(x->names); x->num=0; } }
-
-extern p_edg_wll_ULMFields edg_wll_ULMNewParseTable( LogLine );
-extern void    edg_wll_ULMFreeParseTable(p_edg_wll_ULMFields );
-
-extern int     edg_wll_ULMProcessParseTable( p_edg_wll_ULMFields );
-extern char *  edg_wll_ULMGetNameAt( p_edg_wll_ULMFields, int );
-extern char *  edg_wll_ULMGetValueAt ( p_edg_wll_ULMFields, int );
-
-extern double  edg_wll_ULMDateToDouble( const char *s );
-void           edg_wll_ULMDateToTimeval( const char *s, struct timeval *tv );
-extern int     edg_wll_ULMTimevalToDate( long sec, long usec, char *dstr );
-
-#endif /* __EDG_WORKLOAD_LOGGING_COMMON_ULM_PARSE_H__ */
diff --git a/org.glite.lb.common/interface/xml_conversions.h b/org.glite.lb.common/interface/xml_conversions.h
deleted file mode 100644 (file)
index a5361b3..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_COMMON_XML_CONVERSIONS_H__
-#define __EDG_WORKLOAD_LOGGING_COMMON_XML_CONVERSIONS_H__
-
-#ident "$Header$"
-
-#include "glite/lb/events.h"
-#include "glite/lb/consumer.h"
-#include "glite/lb/purge.h"
-#include "glite/lb/dump.h"
-#include "glite/lb/load.h"
-#include "glite/lb/notification.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define EDG_WLL_STAT_NO_JOBS    1024   /* private flags for edg_wll_QueryJobs */
-#define EDG_WLL_STAT_NO_STATES  2048
-
-enum edg_wll_QueryType {
-       EDG_WLL_QUERY_TYPE_UNDEF,
-       EDG_WLL_QUERY_TYPE_JOB_CONDITION,
-       EDG_WLL_QUERY_TYPE_EVENT_CONDITION,
-};     
-
-typedef struct _edg_wll_XML_ctx {
-       edg_wll_Context ctx;                    
-        XML_Parser      p;
-       char            *message_body;          /* copy of pointer to data to be parsed */              
-        edg_wll_EventCode   eventCode;          /* code of processed event */
-        int             position;               /* row index in the result list */
-                                                /* always should mean 'where to write' */
-       int             position2;              /* used only for event_conditions */
-       int             max_index;              /* used in IntList */
-       int             row;                    /* row index in QueryRec job_conditions */
-       int             row2;                   /* row index in QueryRec event_conditions */
-        int             level;                  /* level of XML tags nesting */
-        char            element[50];            /* name of actual XML tag */
-        char            *char_buf;              /* for storing 'between tags' data */
-        int             char_buf_len;
-       char            *XML_tag;               /* for handling *ListOut's tag comparisons */
-       char            *XML_tag2;
-       edg_wll_QueryRec        **job_conditions;       /* temporal results */
-       edg_wll_QueryRec        **event_conditions;
-       enum edg_wll_QueryType  type;   
-       edg_wll_QueryRec        **conditions;
-       int                     flags;
-        edg_wlc_JobId          *jobsOutGlobal;   
-        edg_wll_Event          *eventsOutGlobal;
-        edg_wll_JobStat        *jobStatGlobal;
-        edg_wll_JobStat        jobStatSingleGlobal;
-       char                    **strListGlobal;
-       int                     *intListGlobal;
-       int                     (*tagToIndex)();
-       char                    *(*indexToTag)();
-       edg_wll_TagValue        *tagListGlobal;
-       edg_wll_JobStat         *stsListGlobal;
-       edg_wll_PurgeRequest    purgeRequestGlobal;
-       edg_wll_PurgeResult     purgeResultGlobal;
-       edg_wll_DumpRequest     dumpRequestGlobal;
-       edg_wll_DumpResult      dumpResultGlobal;
-       edg_wll_LoadRequest     loadRequestGlobal;
-       edg_wll_LoadResult      loadResultGlobal;
-       edg_wll_QueryRec        **attrsGlobal;
-       char                    *notifFunction;
-       char                    *notifClientAddress;
-       edg_wll_NotifId         notifId;
-       edg_wll_NotifChangeOp   notifChangeOp;
-       time_t                  notifValidity;
-       char                    *statsFunction;
-       edg_wll_QueryRec        **statsConditions;
-       edg_wll_JobStatCode     statsMajor;
-       int                     statsMinor;
-       time_t                  statsFrom, statsTo;
-       float                   statsRate, statsDuration;
-       int                     statsResFrom, statsResTo;
-       edg_wlc_JobId           jobId;
-       char                    *source;
-       char                    *seqCode;
-       int                     errCode;
-       int                     bound;          /* marks 2nd value of within operator */
-       char                    *errDesc;
-       long                    stat_begin;     /* begin of jobStat tag */
-       long                    jobQueryRec_begin;      /* begin of orJobConditions  tag */
-        char            *errtxt;                /* variable for cummulating error messages   */
-       char            *warntxt;               /* variable for cummulating warning messages */
-} edg_wll_XML_ctx;
-
-void edg_wll_initXMLCtx(edg_wll_XML_ctx *c);
-void edg_wll_freeXMLCtx(edg_wll_XML_ctx *c);
-void edg_wll_freeBuf(edg_wll_XML_ctx *c);
-
-
-#define edg_wll_add_bool_to_XMLBody edg_wll_add_int_to_XMLBody
-#define edg_wll_add_port_to_XMLBody edg_wll_add_uint16_t_to_XMLBody
-#define edg_wll_from_string_to_bool edg_wll_from_string_to_uint16_t
-#define edg_wll_from_string_to_port edg_wll_from_string_to_int
-
-void edg_wll_add_string_to_XMLBody(char **body, const char *toAdd, const char *tag, const char *null);
-void edg_wll_add_tagged_string_to_XMLBody(char **body, const char *toAdd, const char *tag, const char *name, const char *tag2, const char *null);
-void edg_wll_add_int_to_XMLBody(char **body, const int toAdd, const char *tag, const int null);
-void edg_wll_add_float_to_XMLBody(char **body, const float toAdd, const char *tag, const float null);
-void edg_wll_add_timeval_to_XMLBody(char **body, struct timeval toAdd, const char *tag, const struct timeval null);
-void edg_wll_add_jobid_to_XMLBody(char **body, edg_wlc_JobId toAdd, const char *tag, const void *null);
-void edg_wll_add_notifid_to_XMLBody(char **body, edg_wll_NotifId toAdd, const char *tag, const void *null);
-void edg_wll_add_edg_wll_JobStatCode_to_XMLBody(char **body, edg_wll_JobStatCode toAdd, const char *tag, const edg_wll_JobStatCode null);
-void edg_wll_add_edg_wll_EventCode_to_XMLBody(char **body, edg_wll_EventCode toAdd, const char *tag, const edg_wll_EventCode null);
-void edg_wll_add_time_t_to_XMLBody(char **body, const time_t toAdd, const char *tag, const time_t null);
-void edg_wll_add_tagged_time_t_to_XMLBody(char **body, const time_t toAdd, const char *tag, const char *name, const char *tag2, const time_t null);
-void edg_wll_add_uint16_t_to_XMLBody(char **body, const uint16_t toAdd, const char *tag, const uint16_t null);
-void edg_wll_add_logsrc_to_XMLBody(char **body, const edg_wll_Source toAdd, const char *tag, const edg_wll_Source null);
-void edg_wll_add_intlist_to_XMLBody(char **body, const int *toAdd, const char *tag, char *(*indexToTag)(), const char *indent, const int from, const int to);
-void edg_wll_add_strlist_to_XMLBody(char **body, char * const *toAdd, const char *tag, const char *subTag, const char *indent, const  char *null);
-void edg_wll_add_taglist_to_XMLBody(char **body,  const edg_wll_TagValue *toAdd, const char *tag,  const char *subTag, const char *indent, const char *subTag2, const  char *null);
-void edg_wll_add_time_t_list_to_XMLBody(char **body, const time_t *toAdd, const char *tag, char *(*indexToTag)(), const char *indent, const int from, const int to);
-char *edg_wll_from_string_to_string(edg_wll_XML_ctx *XMLCtx);
-edg_wlc_JobId edg_wll_from_string_to_jobid(edg_wll_XML_ctx *XMLCtx);
-edg_wll_NotifId edg_wll_from_string_to_notifid(edg_wll_XML_ctx *XMLCtx);
-edg_wll_JobStatCode edg_wll_from_string_to_edg_wll_JobStatCode(edg_wll_XML_ctx *XMLCtx);
-int edg_wll_from_string_to_int(edg_wll_XML_ctx *XMLCtx);
-float edg_wll_from_string_to_float(edg_wll_XML_ctx *XMLCtx);
-long edg_wll_from_string_to_long(edg_wll_XML_ctx *XMLCtx);
-uint16_t edg_wll_from_string_to_uint16_t(edg_wll_XML_ctx *XMLCtx);
-struct timeval edg_wll_from_string_to_timeval(edg_wll_XML_ctx *XMLCtx);
-time_t edg_wll_from_string_to_time_t(edg_wll_XML_ctx *XMLCtx);
-edg_wll_Source edg_wll_from_string_to_logsrc(edg_wll_XML_ctx *XMLCtx);
-
-char *edg_wll_stat_flags_to_string(int flags);
-int edg_wll_string_to_stat_flags(char *cflags);
-char *edg_wll_purge_flags_to_string(int flags);
-int edg_wll_string_to_purge_flags(char *cflags);
-int edg_wll_StringToDumpConst(const char *name);
-char *edg_wll_DumpConstToString(int dumpConst);
-int edg_wll_StringTodone_code(const char *name);
-char *edg_wll_done_codeToString(int done_codeConst);
-edg_wll_QueryAttr edg_wll_StringToquery_attr(const char *name);
-char *edg_wll_query_attrToString(edg_wll_QueryAttr query_attrConst);
-edg_wll_NotifChangeOp edg_wll_StringToNotifChangeOp(const char *name);
-char *edg_wll_NotifChangeOpToString(edg_wll_NotifChangeOp notifChangeOpConst);
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-#endif /* __EDG_WORKLOAD_LOGGING_COMMON_XML_CONVERSIONS_H__ */
diff --git a/org.glite.lb.common/interface/xml_parse.h b/org.glite.lb.common/interface/xml_parse.h
deleted file mode 100644 (file)
index a08d788..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_COMMON_XML_PARSE_H__
-#define __EDG_WORKLOAD_LOGGING_COMMON_XML_PARSE_H__
-
-#ident "$Header$"
-
-#include "glite/lb/purge.h"
-#include "glite/lb/dump.h"
-#include "glite/lb/load.h"
-#include "glite/lb/producer.h"
-#include "glite/lb/notification.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-       
-
-/* function for parsing XML responses from server */
-
-extern edg_wll_ErrorCode edg_wll_ParseQueryEvents(edg_wll_Context, char *, edg_wll_Event **);
-
-extern edg_wll_ErrorCode edg_wll_ParseQueryJobs(edg_wll_Context, char *, edg_wlc_JobId **, edg_wll_JobStat **);
-
-extern edg_wll_ErrorCode edg_wll_ParseUserJobs(edg_wll_Context, char *, edg_wlc_JobId **); 
-
-extern edg_wll_ErrorCode edg_wll_ParseJobStat(edg_wll_Context ctx, char *messageBody, long len, edg_wll_JobStat *stat);
-
-extern edg_wll_ErrorCode edg_wll_ParseStrList(edg_wll_Context ctx, char *messageBody, long len, char *tag, char *tag2,  char ***strListOut);
-
-extern edg_wll_ErrorCode edg_wll_ParseIntList(edg_wll_Context ctx, char *messageBody, long len, char *tag, int (*tagToIndex)(),  int **intListOut);
-
-extern edg_wll_ErrorCode edg_wll_ParseTagList(edg_wll_Context ctx, char *messageBody, long len, char *tag, char *tag2,  edg_wll_TagValue **tagListOut);
-
-extern edg_wll_ErrorCode edg_wll_ParseStsList(edg_wll_Context ctx, char *messageBody, long len, char *tag, char *tag2,  edg_wll_JobStat **stsListOut);
-
-extern edg_wll_ErrorCode edg_wll_ParsePurgeResult(edg_wll_Context ctx, char *messageBody, edg_wll_PurgeResult *result);
-
-extern edg_wll_ErrorCode edg_wll_ParseDumpResult(edg_wll_Context ctx, char *messageBody, edg_wll_DumpResult *result);
-
-extern edg_wll_ErrorCode edg_wll_ParseLoadResult(edg_wll_Context ctx, char *messageBody, edg_wll_LoadResult *result);
-
-extern edg_wll_ErrorCode edg_wll_ParseIndexedAttrs(edg_wll_Context ctx, char *messageBody, edg_wll_QueryRec ***attrs);
-
-extern edg_wll_ErrorCode edg_wll_ParseNotifResult(edg_wll_Context ctx, char *messageBody, time_t *validity);
-
-extern edg_wll_ErrorCode edg_wll_ParseQuerySequenceCodeResult(edg_wll_Context ctx, char *messageBody, char **seqCode);
-
-extern int edg_wll_QueryEventsRequestToXML(edg_wll_Context ctx, const edg_wll_QueryRec **job_conditions, const edg_wll_QueryRec **event_conditions, char **send_mess);
-
-extern int edg_wll_JobQueryRecToXML(edg_wll_Context ctx, edg_wll_QueryRec const * const *conditions, char **send_mess);
-
-extern int edg_wll_QueryJobsRequestToXML(edg_wll_Context ctx, const edg_wll_QueryRec **conditions, int flags, char **send_mess);
-
-extern int edg_wll_PurgeRequestToXML(edg_wll_Context ctx, const edg_wll_PurgeRequest *request, char **message);
-
-extern int edg_wll_DumpRequestToXML(edg_wll_Context ctx, const edg_wll_DumpRequest *request, char **message);
-
-extern int edg_wll_LoadRequestToXML(edg_wll_Context ctx, const edg_wll_LoadRequest *request, char **message);
-
-extern int edg_wll_IndexedAttrsRequestToXML(edg_wll_Context ctx, char **message);
-
-extern int edg_wll_NotifRequestToXML( edg_wll_Context ctx, const char *function, const edg_wll_NotifId notifId, const char *address, edg_wll_NotifChangeOp op, edg_wll_QueryRec const * const *conditions, char **message);
-
-extern int edg_wll_QuerySequenceCodeToXML(edg_wll_Context ctx, edg_wlc_JobId jobId, char **message);
-       
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __EDG_WORKLOAD_LOGGING_COMMON_XML_PARSE_H__ */
diff --git a/org.glite.lb.common/project/build.properties b/org.glite.lb.common/project/build.properties
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.glite.lb.common/project/configure.properties.xml b/org.glite.lb.common/project/configure.properties.xml
deleted file mode 100644 (file)
index 911dfcf..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Configuration options for the GLite LB Common module
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.2  2004/07/06 20:50:10  flammer
-       Moved to configure.properties.xml
-       
-       
--->
-
-       <!-- ======================================================
-         Define extra properties here ...
-         ====================================================== -->
-        
-       <project name="LB Common configuration options">                                                                        
-               <target name="lbmakefiles">
-                       <exec executable="ln" failonerror="true">
-                               <arg line="-fs ${component.dir}/Makefile ${module.build.dir}/Makefile"/>
-                       </exec>
-                       <echo file="${module.build.dir}/Makefile.inc">
-top_srcdir=..
-builddir=build
-stagedir=${stage.abs.dir}
-distdir=${dist.dir}
-globalprefix=${global.prefix}
-lbprefix=${subsystem.prefix}
-package=${module.package.name}
-PREFIX=${install.dir}
-version=${module.version}
-glite_location=${with.glite.location}
-globus_prefix=${with.globus.prefix}
-expat_prefix=${with.expat.prefix}
-ares_prefix=${with.ares.prefix}
-thrflavour=${with.globus.thr.flavor}
-nothrflavour=${with.globus.nothr.flavor}
-cppunit=${with.cppunit.prefix}
-                       </echo>
-           </target>
-       </project>
diff --git a/org.glite.lb.common/project/properties.xml b/org.glite.lb.common/project/properties.xml
deleted file mode 100755 (executable)
index 7b04062..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Common build properties file for the Glite LB Common component
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$ 
-       
-       Revision history:
-       $Log$
-       Revision 1.2  2004/06/22 22:05:23  dimeglio
-       Added configuration options
-       
--->
-
-<project name="LB Common component common properties">
-
-       <!-- Include build properties to allow overwriting 
-            of properties for subsystem                    -->
-       <property file="project/build.properties" />    
-
-       <!-- ======================================================
-          Define corresponding subsystem properties
-                ====================================================== -->
-
-       <!-- Subsystem name -->
-       <property name="subsystem.name" value="${lb.subsystem.name}"/>
-               
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${lb.subsystem.prefix}"/>
-
-       <!-- ======================================================
-          Define component properties
-                ====================================================== -->
-                               
-       <!-- Component name prefix -->
-       <property name="component.prefix" value="common" />
-                       
-       <!-- ======================================================
-          Define general component properties
-                ====================================================== -->
-       
-       <import file="${component.general.properties.file}" />
-                                               
-       <!-- ======================================================
-                Define extra properties here ...
-                ====================================================== -->
-                
-                                                               
-</project>
diff --git a/org.glite.lb.common/project/tar_exclude b/org.glite.lb.common/project/tar_exclude
deleted file mode 100644 (file)
index e1fcd1a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-tar_exclude
-CVS
-build.xml
-build
-build.properties
-properties.xml
-configure.properties.xml
-.cvsignore
-.project
-.cdtproject
diff --git a/org.glite.lb.common/project/version.properties b/org.glite.lb.common/project/version.properties
deleted file mode 100644 (file)
index aa6fcbe..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Dec 10 13:22:02 CET 2004
-module.version=1.0.0
-module.build=111
-module.age=2
diff --git a/org.glite.lb.common/src/context.c b/org.glite.lb.common/src/context.c
deleted file mode 100644 (file)
index 33cb50c..0000000
+++ /dev/null
@@ -1,444 +0,0 @@
-#ident "$Header$"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-
-#include <globus_config.h>
-
-#include "glite/wmsutils/jobid/strmd5.h"
-#include "glite/wmsutils/jobid/cjobid.h"
-#include "context-int.h"
-#include "glite/lb/producer.h"
-
-static void free_voms_groups(edg_wll_VomsGroups *);
-
-int edg_wll_InitContext(edg_wll_Context *ctx)
-{
-       int i;
-       edg_wll_Context out     = (edg_wll_Context) malloc(sizeof(*out));
-
-       if (!out) return ENOMEM;
-       memset(out,0,sizeof(*out));
-       assert(out->errDesc == NULL);
-
-       out->allowAnonymous = 1;
-       out->notifSock  = -1;
-
-       /* XXX */
-       for (i=0; i<EDG_WLL_PARAM__LAST; i++) edg_wll_SetParam(out,i,NULL);
-
-       out->connPool = (edg_wll_ConnPool *) calloc(out->poolSize, sizeof(edg_wll_ConnPool));
-       out->connPoolNotif = (edg_wll_ConnPool *) calloc(1, sizeof(edg_wll_ConnPool));
-       out->connProxy = (edg_wll_ConnPool *) calloc(1, sizeof(edg_wll_ConnProxy));
-       out->connProxy->conn.sock = -1;
-
-       *ctx = out;
-       return 0;
-}
-
-void edg_wll_FreeContext(edg_wll_Context ctx)
-{
-       struct timeval close_timeout = {0, 50000};
-       OM_uint32 min_stat;
-
-       if (!ctx) return;
-
-       if (ctx->errDesc) free(ctx->errDesc);
-       if (ctx->connPool) {
-               int i;
-               
-               for (i=0; i<ctx->poolSize; i++) {
-                       if (ctx->connPool[i].peerName) free(ctx->connPool[i].peerName);
-                       edg_wll_gss_close(&ctx->connPool[i].gss,&close_timeout);
-                       if (ctx->connPool[i].gsiCred)
-                               gss_release_cred(&min_stat, &ctx->connPool[i].gsiCred);
-                       if (ctx->connPool[i].buf) free(ctx->connPool[i].buf);
-               }       
-               free(ctx->connPool);
-       }
-       if (ctx->connPoolNotif) {
-               if (ctx->connPoolNotif[0].peerName) free(ctx->connPoolNotif[0].peerName);
-               edg_wll_gss_close(&ctx->connPoolNotif[0].gss,&close_timeout);
-               if (ctx->connPoolNotif[0].gsiCred)
-                       gss_release_cred(&min_stat, &ctx->connPoolNotif[0].gsiCred);
-               if (ctx->connPoolNotif[0].buf) free(ctx->connPoolNotif[0].buf);
-               free(ctx->connPoolNotif);
-       }
-       if ( ctx->connProxy ) {
-               if ( ctx->connProxy->buf ) free(ctx->connProxy->buf);
-               edg_wll_plain_close(&ctx->connProxy->conn);
-               free(ctx->connProxy);
-       }
-       if (ctx->notifSock >=0) close(ctx->notifSock);
-       if (ctx->srvName) free(ctx->srvName);
-       if (ctx->peerName) free(ctx->peerName);
-       if (ctx->vomsGroups.len) free_voms_groups(&ctx->vomsGroups);
-       if (ctx->dumpStorage) free(ctx->dumpStorage);
-       if (ctx->purgeStorage) free(ctx->purgeStorage);
-
-        if (ctx->p_jobid) edg_wlc_JobIdFree(ctx->p_jobid);
-        if (ctx->p_host) free(ctx->p_host);
-        if (ctx->p_instance) free(ctx->p_instance);
-        if (ctx->p_destination) free(ctx->p_destination);
-        if (ctx->p_user_lbproxy) free(ctx->p_user_lbproxy);
-        if (ctx->p_query_server) free(ctx->p_query_server);
-        if (ctx->p_notif_server) free(ctx->p_notif_server);
-        if (ctx->p_proxy_filename) free(ctx->p_proxy_filename);
-        if (ctx->p_cert_filename) free(ctx->p_cert_filename);
-        if (ctx->p_key_filename) free(ctx->p_key_filename);
-
-       /* do not free (references only)
-        * ctx->job_index
-        * ctx->job_index_cols
-        * ctx->mysql */
-
-       free(ctx);
-}
-
-static const char* const errTexts[] = {
-       /* standard error strings should appear here */
-       "Broken ULM",
-       "Undefined event",
-       "Message incomplete",
-       "Duplicate ULM key",
-       "Misuse of ULM key",
-       "Warning: extra ULM fields",
-       "XML Parse error",
-       "Server response error",
-       "Bad JobId format",
-       "Database call failed",
-       "Bad URL format",
-       "MD5 key clash",
-       "GSSAPI Error",
-       "DNS resolver error",
-       "No JobId specified in context",
-       "No indexed condition in query",
-       "Interlogger protocol error",
-       "Interlogger internal error",
-       "Interlogger has events pending",
-       "Compared events differ",
-};
-
-const char *edg_wll_GetErrorText(int code) {
-       return code ? 
-               (code <= EDG_WLL_ERROR_BASE ?
-                       strerror(code) :
-                       errTexts[code - EDG_WLL_ERROR_BASE - 1]
-               ) :
-               NULL;
-}
-
-int edg_wll_Error(edg_wll_Context ctx, char **errText, char **errDesc)
-{
-       char    *text = NULL,*desc = NULL;
-       const char* et = edg_wll_GetErrorText(ctx->errCode);
-
-       if (et) {
-               text = strdup(et);
-               if (ctx->errDesc) desc = (char *) strdup(ctx->errDesc);
-       }
-
-       if (errText) *errText = text; else free(text);
-       if (errDesc) *errDesc = desc; else free(desc);
-       return ctx->errCode;
-}
-
-int edg_wll_ResetError(edg_wll_Context ctx)
-{
-       if (ctx->errDesc) free(ctx->errDesc);
-       ctx->errDesc = NULL;
-       ctx->errCode =  0;
-
-       return ctx->errCode;
-}
-
-int edg_wll_SetError(edg_wll_Context ctx,int code,const char *desc)
-{
-       edg_wll_ResetError(ctx);
-       if (code) {
-               ctx->errCode = code;
-               if (desc) ctx->errDesc = (char *) strdup(desc);
-       }
-
-       return ctx->errCode;
-}
-
-
-int edg_wll_UpdateError(edg_wll_Context ctx,int code,const char *desc)
-{
-        char   *new_desc=NULL;
-       char    *old_desc=NULL;
-        const char* err_text = edg_wll_GetErrorText(ctx->errCode);
-
-       /* first fill in the old_desc */
-        if (ctx->errCode) {
-                if (ctx->errDesc) {
-                        if ((err_text)) // && (code) && (code <> ctx->errCode))
-                                asprintf(&old_desc,"%s;; %s",err_text,ctx->errDesc);
-                        else
-                                old_desc = (char *) strdup(ctx->errDesc);
-                } else {
-                        old_desc = (char *) strdup(err_text);
-                }
-       } else {
-                if (ctx->errDesc) old_desc = (char *) strdup(ctx->errDesc);
-        }
-       if (ctx->errDesc) free(ctx->errDesc);
-
-       /* update errDesc */
-        if (old_desc) {
-                if (desc) {
-                        asprintf(&new_desc,"%s;; %s",desc,old_desc);
-                        ctx->errDesc = (char *) strdup(new_desc);
-                } else {
-                        ctx->errDesc = (char *) strdup(old_desc);
-               }
-        } else {
-                if (desc) ctx->errDesc = (char *) strdup(desc);
-        }
-
-       /* update errCode */
-        if (code) {
-                ctx->errCode = code;
-        }
-
-        if (new_desc) free(new_desc);
-        if (old_desc) free(old_desc);
-
-        return ctx->errCode;
-}
-
-static const char* const srcNames[] = {
-       "Undefined",
-       "UserInterface",
-       "NetworkServer",
-       "WorkloadManager",
-       "BigHelper",
-       "JobController",
-       "LogMonitor",
-       "LRMS",
-       "Application",
-};
-
-edg_wll_Source edg_wll_StringToSource(const char *name)
-{
-       int     i;
-       
-        for (i=1; i<sizeof(srcNames)/sizeof(srcNames[0]); i++)
-                if (strcasecmp(srcNames[i],name) == 0) return (edg_wll_Source) i;
-        return EDG_WLL_SOURCE_NONE;
-}
-
-char * edg_wll_SourceToString(edg_wll_Source src)
-{
-        if (src < EDG_WLL_SOURCE_NONE || src >= EDG_WLL_SOURCE__LAST) return NULL;
-        return strdup(srcNames[src]);
-}
-
-static const char* const queryResultNames[] = {
-       "Undefined",
-       "None",
-       "All",
-       "Limited"
-};
-
-edg_wll_QueryResults edg_wll_StringToQResult(const char *name)
-{
-       int     i;
-
-       for (i=1; i<sizeof(queryResultNames)/sizeof(queryResultNames[0]); i++)
-               if (strcasecmp(queryResultNames[i],name) == 0)
-                       return (edg_wll_QueryResults) i;
-
-       return EDG_WLL_QUERYRES_UNDEF;
-}
-
-char * edg_wll_QResultToString(edg_wll_QueryResults res)
-{
-       if (res < EDG_WLL_QUERYRES_NONE || res >= EDG_WLL_QUERYRES__LAST)
-               return NULL;
-
-       return strdup(queryResultNames[res]);
-}
-
-
-char *edg_wll_GetSequenceCode(const edg_wll_Context ctx)
-{
-       unsigned int *c;
-       char *ret = NULL;
-
-       c = &ctx->p_seqcode.c[0];
-       asprintf(&ret, "UI=%06d:NS=%010d:WM=%06d:BH=%010d:JSS=%06d"
-                               ":LM=%06d:LRMS=%06d:APP=%06d",
-                       c[EDG_WLL_SOURCE_USER_INTERFACE],
-                       c[EDG_WLL_SOURCE_NETWORK_SERVER],
-                       c[EDG_WLL_SOURCE_WORKLOAD_MANAGER],
-                       c[EDG_WLL_SOURCE_BIG_HELPER],
-                       c[EDG_WLL_SOURCE_JOB_SUBMISSION],
-                       c[EDG_WLL_SOURCE_LOG_MONITOR],
-                       c[EDG_WLL_SOURCE_LRMS],
-                       c[EDG_WLL_SOURCE_APPLICATION]);
-       return ret;
-}
-
-int edg_wll_SetSequenceCode(edg_wll_Context ctx,
-                       const char * seqcode_str, int seq_type)
-{
-       int res;
-       unsigned int *c;
-       int duplicate = 0;
-
-       edg_wll_ResetError(ctx);
-
-       if (seq_type == EDG_WLL_SEQ_DUPLICATE) {
-               duplicate = 1;
-       } else if (seq_type != EDG_WLL_SEQ_NORMAL)
-               return edg_wll_SetError(ctx, EINVAL,
-                       "edg_wll_SetSequenceCode(): unrecognized value of seq_type parameter");
-       
-       if (!seqcode_str) {
-               memset(&ctx->p_seqcode,0,sizeof ctx->p_seqcode);
-               return 0;
-       }
-
-       c = &ctx->p_seqcode.c[0];
-       res =  sscanf(seqcode_str, "UI=%d:NS=%d:WM=%d:BH=%d:JSS=%d:LM=%d:LRMS=%d:APP=%d",
-                       &c[EDG_WLL_SOURCE_USER_INTERFACE],
-                       &c[EDG_WLL_SOURCE_NETWORK_SERVER],
-                       &c[EDG_WLL_SOURCE_WORKLOAD_MANAGER],
-                       &c[EDG_WLL_SOURCE_BIG_HELPER],
-                       &c[EDG_WLL_SOURCE_JOB_SUBMISSION],
-                       &c[EDG_WLL_SOURCE_LOG_MONITOR],
-                       &c[EDG_WLL_SOURCE_LRMS],
-                       &c[EDG_WLL_SOURCE_APPLICATION]);
-
-       assert(EDG_WLL_SOURCE__LAST == 9);
-       if (res != EDG_WLL_SOURCE__LAST-1)
-               return edg_wll_SetError(ctx, EINVAL, "edg_wll_SetSequenceCode(): syntax error in sequence code");
-
-       if (duplicate) {
-               if (ctx->p_source <= EDG_WLL_SOURCE_NONE || ctx->p_source >= EDG_WLL_SOURCE__LAST)
-                       return edg_wll_SetError(ctx,EINVAL,"edg_wll_SetSequenceCode(): context param: source missing");
-               c[ctx->p_source] = time(NULL);
-       }
-
-       return edg_wll_Error(ctx, NULL, NULL);
-}
-
-int edg_wll_IncSequenceCode(edg_wll_Context ctx)
-{
-       edg_wll_ResetError(ctx);
-       
-       if (ctx->p_source <= EDG_WLL_SOURCE_NONE || ctx->p_source >= EDG_WLL_SOURCE__LAST)
-               return edg_wll_SetError(ctx,EINVAL,"edg_wll_IncSequenceCode(): context param: source missing");
-
-       ctx->p_seqcode.c[ctx->p_source]++;
-
-       return edg_wll_Error(ctx, NULL, NULL);
-}
-
-int edg_wll_GetLoggingJob(const edg_wll_Context ctx,edg_wlc_JobId *out)
-{
-       return edg_wlc_JobIdDup(ctx->p_jobid,out);
-}
-
-int edg_wll_GenerateSubjobIds(
-       edg_wll_Context ctx,
-       const edg_wlc_JobId     parent,
-       int                     num_subjobs,
-       const char *            seed,
-       edg_wlc_JobId **        subjobs)
-{
-       int subjob, ret;
-       char *p_unique, *p_bkserver, *intseed;
-       char *unhashed, *hashed;
-       unsigned int p_port;
-       edg_wlc_JobId *retjobs;
-
-
-       if (num_subjobs < 1)
-               return edg_wll_SetError(ctx, EINVAL,
-                               "edg_wll_GenerateSubjobIds(): num_subjobs < 1");
-       if (seed == NULL)
-               intseed = edg_wll_GetSequenceCode(ctx);
-       else
-               intseed = strdup(seed);
-
-       p_unique = edg_wlc_JobIdGetUnique(parent);
-       edg_wlc_JobIdGetServerParts(parent, &p_bkserver, &p_port);
-
-       retjobs = calloc(num_subjobs+1, sizeof(edg_wlc_JobId));
-
-       if (p_unique == NULL ||
-               intseed == NULL ||
-               p_bkserver == NULL ||
-               retjobs == NULL)
-               return edg_wll_SetError(ctx, ENOMEM, NULL);
-
-       for (subjob = 0; subjob < num_subjobs; subjob++) {
-
-               asprintf(&unhashed, "%s,%s,%d", p_unique, intseed, subjob);
-               if (unhashed == NULL) {
-                       edg_wll_SetError(ctx, ENOMEM, "edg_wll_GenerateSubjobIds(): asprintf() error");
-                       goto handle_error;
-               }
-
-               hashed = str2md5base64(unhashed);
-               free(unhashed);
-               if (hashed == NULL) {
-                       edg_wll_SetError(ctx, ENOMEM, "edg_wll_GenerateSubjobIds(): str2md5base64() error");
-                       goto handle_error;
-               }
-
-               ret = edg_wlc_JobIdRecreate(p_bkserver, p_port, hashed, &retjobs[subjob]);
-               free(hashed);
-               if (ret != 0) {
-                       edg_wll_SetError(ctx, ret, "edg_wll_GenerateSubjobIds(): edg_wlc_JobIdRecreate() error");
-                       goto handle_error;
-               }
-       }
-       
-       free(intseed);
-       free(p_unique);
-       free(p_bkserver);
-
-       *subjobs = retjobs;
-       return 0;
-
-    handle_error:
-       free(intseed);
-       free(p_unique);
-       free(p_bkserver);
-       for ( subjob-- ;subjob >= 0; subjob--)
-               edg_wlc_JobIdFree(retjobs[subjob]);
-       return edg_wll_Error(ctx, NULL, NULL);
-}
-
-static void
-free_voms_groups(edg_wll_VomsGroups *groups)
-{
-   size_t len;
-
-   if (groups == NULL)
-      return;
-
-   for (len = 0; len < groups->len; len++) {
-      if (groups->val[len].vo)
-        free(groups->val[len].vo);
-      if (groups->val[len].name)
-        free(groups->val[len].name);
-   }
-}
-
-int edg_wll_SetErrorGss(edg_wll_Context ctx, const char *desc, edg_wll_GssStatus *gss_code)
-{
-   char *err_msg;
-
-   edg_wll_gss_get_error(gss_code, desc, &err_msg);
-   edg_wll_SetError(ctx,EDG_WLL_ERROR_GSS, err_msg);
-   free(err_msg);
-   return ctx->errCode;
-}
diff --git a/org.glite.lb.common/src/escape.c b/org.glite.lb.common/src/escape.c
deleted file mode 100644 (file)
index 8ace584..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-#ident "$Header$"
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <ctype.h>
-
-#include "ulm_parse.h"
-#include "escape.h"
-
-/*
- *----------------------------------------------------------------------
- * 
- * \fn char *edg_wll_LogEscape(const char *str)
- * \param str          a string to escape
- * \return             new (allocated) escaped string
- * \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 *edg_wll_LogEscape(const char *str)
-{
-unsigned int i,j;
-size_t size;
-char *ret;
-
-if (str == NULL) return NULL;
-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 *edg_wll_LogUnescape(const char *str)
- * \param str          a string to unescape
- * \return             new (allocated) unescaped string
- * \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 *edg_wll_LogUnescape(const char *str)
-{
-unsigned int i,j;
-size_t size;
-char *ret;
-
-if (str == NULL) return NULL;
-
-size  = strlen(str);
-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 *edg_wll_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 *edg_wll_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 *edg_wll_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.lb.common/src/events.c.T b/org.glite.lb.common/src/events.c.T
deleted file mode 100644 (file)
index 3d0861a..0000000
+++ /dev/null
@@ -1,350 +0,0 @@
-#ident "$Header$"
-/*
-@@@AUTO
-*/
-@@@LANG: C
-
-#include <string.h>
-#include <stdlib.h>
-#include <time.h>
-#include <errno.h>
-
-#include "glite/wmsutils/jobid/cjobid.h"
-#include "glite/lb/producer.h"
-#include "ulm_parse.h"
-
-static const struct timeval null_timeval = {0,0};
-
-/**
- * Predefined event types names
- */
-static const char *eventNames[] = {
-       "Undefined",
-@@@{
-for my $e (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-               $event->getTypes) {
-       gen "\t\"$e\",\n";
-}
-@@@}
-       "SysCmpStat",
-       "SysClStat",
-};
-
-/**
- * \fn edg_wll_EventCode edg_wll_StringToEvent(char *name)
- * \param name          a string event name (e.g. "JobTransfer")
- * \return corresponding numeric code (edg_wll_EventCode)
- * \brief convert a string event name to the corresponding numeric code  
- * Calls: strcasecmp
- * Algorithm: array lookup
- */
-edg_wll_EventCode edg_wll_StringToEvent(char *name)
-{
-       unsigned int    i;
-
-       for (i=1; i<sizeof(eventNames)/sizeof(eventNames[0]); i++)
-               if (strcasecmp(eventNames[i],name) == 0) return (edg_wll_EventCode) i;
-       return EDG_WLL_EVENT_UNDEF;
-}
-
-/**
- * \fn char *edg_wll_EventToString(edg_wll_EventCode event)
- * \param event         an event numeric code (edg_wll_EventCode)
- * \return corresponding string (e.g. "JobTransfer")
- * \brief convert an event numeric code to the corresponding string
- * Calls: strdup
- */
-char *edg_wll_EventToString(edg_wll_EventCode event)
-{
-       if ((int)event < 0 || event >= sizeof(eventNames)/sizeof(eventNames[0])) return NULL;
-       return strdup(eventNames[event]);
-}
-
-
-/**
- * Predefined ULM key types names
- */
-static const char *keyNames[] = {
-       "Undefined",
-       "DG.EVNT",
-@@@{
-selectType $event '_common_';
-for ($event->getFieldsOrdered) {
-       my $f = selectField $event $_;
-       my $fn = getName $f 'ULM';
-       my $fnu = uc $fn;
-       my $c = $f->{comment};
-       if (hasAlias $f 'ULM') {
-               gen "\t\"$fnu\",\n";
-       } else {
-               gen "\t\"DG.$fnu\",\n";
-       }
-}
-for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-               $event->getTypes) {
-       my $tu = uc $t;
-       selectType $event $t;
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fnu = uc $f->{name};
-               gen "\t\"DG.$tu.$fnu\",\n";
-       }
-}
-@@@}
-       "DG.TYPE",
-};
-
-/*
- * \fn edg_wll_KeyNameCode edg_wll_StringToKeyName(char *name)
- * \param name         a string ULM key name (e.g. "DG.JOB.TRANSFER.DEST")
- * \return corresponding numeric code (edg_wll_KeyNameCode)
- * \brief convert a string ULM key name to the corresponding numeric code
- * Calls: strcasecmp
- * Algorithm: array lookup
- */
-edg_wll_KeyNameCode edg_wll_StringToKeyName(char *name)
-{
-       unsigned int    i;
-
-       for (i=1; i<sizeof(keyNames)/sizeof(keyNames[0]); i++)
-               if (strcasecmp(keyNames[i],name) == 0) return (edg_wll_KeyNameCode) i;
-       return UNDEFINED;
-}
-
-/*
- * \fn char *edg_wll_KeyNameToString(edg_wll_KeyNameCode key)
- * \param key          a ULM key name numeric code (edg_wll_KeyNameCode)
- * \return corresponding string (e.g. "DG.JOB.TRANSFER.DEST")
- * \brief convert a ULM key name numeric code to the corresponding string
- * Calls: strdup
- */
-char *edg_wll_KeyNameToString(edg_wll_KeyNameCode key)
-{
-       if ((int)key < 0 || key >= sizeof(keyNames)/sizeof(keyNames[0])) return NULL;
-       return strdup(keyNames[key]);
-}
-
-
-/**
- * Predefined _code_ types names and
- * related StringTo_code and _code_ToString function implementations
- */
-@@@{
-$indent = "\t";
-selectType $event '_common_';
-for ($event->getFieldsOrdered) {
-       my $f = selectField $event $_;
-       if ($f->{codes}) {
-               my $fn = ucfirst($f->{name});
-               my $fnu = uc $fn;
-               my $c = "${fn}";                # code
-               my $enum = "enum edg_wll\_$c";  # enum name
-               my $char = "edg_wll\_${fn}Names"; # char name
-# static const char:
-               gen qq{
-/**
- * Predefined code names for $c
- */
-static const char \*${char}\[\] = \{
-};
-               gen $indent."\"UNDEFINED\",\n";
-               for (@{$f->{codes}}) {
-                       gen $indent."\"$_->{name}\",\n";
-               }
-               gen "}; \n";
-
-# function StringTo:
-               gen qq{
-/**
- * \\fn $enum edg_wll_StringTo${c}(char *name)
- * Calls: strcasecmp
- * Algorithm: array lookup
- */
-$enum edg_wll_StringTo${c}(char *name) 
-\{
-       unsigned int    i;
-
-       for (i=1; i<sizeof($char)/sizeof(${char}\[0\]); i++) 
-               if (strcasecmp(${char}\[i\],name) == 0) return ($enum) i;
-       return ($enum) EDG_WLL_${fnu}_UNDEFINED;
-\}
-\n};
-
-# function ToString:
-               gen qq{
-/**
- * \\fn *edg_wll\_${c}ToString($enum code)
- * Calls: strdup
- */
-char *edg_wll\_${c}ToString($enum code) 
-\{
-       if ((int)code < 0 || code >= sizeof($char)/sizeof(${char}\[0\])) return NULL;
-       return strdup(${char}\[code\]);
-
-\}
-\n\n};
-       }
-}
-for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-               $event->getTypes) {
-       my $tu = uc $t . '_';
-       selectType $event $t;
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               if ($f->{codes}) {
-                       my $fn = ucfirst($f->{name});
-                       my $c = "$t${fn}";              # code
-                       my $enum = "enum edg_wll\_$c";  # enum name
-                       my $char = "edg_wll\_$t${fn}Names"; # char name
-# static const char:
-                       gen qq{
-/**
- * Predefined code names for $c
- */
-static const char \*${char}\[\] = \{
-};
-                       gen $indent."\"UNDEFINED\",\n";
-                       for (@{$f->{codes}}) {
-                               gen $indent."\"$_->{name}\",\n";
-                       }
-                       gen "}; \n";
-
-# function StringTo:
-                       gen qq{
-/**
- * \\fn $enum edg_wll_StringTo${c}(char *name)
- * Calls: strcasecmp
- * Algorithm: array lookup
- */
-$enum edg_wll_StringTo${c}(char *name) 
-\{
-       unsigned int    i;
-
-       for (i=1; i<sizeof($char)/sizeof(${char}\[0\]); i++) 
-               if (strcasecmp(${char}\[i\],name) == 0) return ($enum) i;
-       return ($enum) EDG_WLL_${tu}UNDEFINED;
-\}
-\n};
-
-# function ToString:
-                       gen qq{
-/**
- * \\fn *edg_wll\_${c}ToString($enum code)
- * Calls: strdup
- */
-char *edg_wll\_${c}ToString($enum code) 
-\{
-       if ((int)code < 0 || code >= sizeof($char)/sizeof(${char}\[0\])) return NULL;
-       return strdup(${char}\[code\]);
-
-\}
-\n\n};
-               }
-       }
-}
-@@@}
-
-/**
- * Initialise an event structure
- * \return pointer to initialised event structure
- */
-edg_wll_Event *edg_wll_InitEvent(
-               edg_wll_EventCode eventcode     /* eventcode IN */
-) 
-{
-edg_wll_Event *event;
-
-/* allocate memory for 'event' (edg_wll_Event); use calloc to also clean it */
-/* FIXME: what if calloc fails? should be checked somehow -> nomem etc. */
-       event = (edg_wll_Event *) calloc(1,sizeof(edg_wll_Event));
-       event->type = eventcode;
-/* initialize common fields */
-@@@{
-$indent = "\t";
-selectType $event '_common_';
-for ($event->getFieldsOrdered) {
-       my $f = selectField $event $_;
-       my $fn = $f->getName;
-       my $fd = $f->getDefaultNullValue;
-       gen $indent."event->any.$fn = $fd;\n"
-}
-@@@}
-/* initialize dependent fields */
-switch (eventcode) {
-@@@{
-$indent = "   ";
-for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-               $event->getTypes) {
-       my $tu = uc $t;
-       my $tl = lcfirst $t;
-       gen $indent."case EDG_WLL_EVENT_$tu : \n";
-       selectType $event $t;
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = $f->getName;
-               my $fd = $f->getDefaultNullValue;
-               gen $indent."\tevent->$tl.$fn = $fd;\n"
-       }
-       gen $indent.$indent."break;\n";
-}
-@@@}
-   case EDG_WLL_EVENT_UNDEF :
-   default :
-      break;
-}
-return event;
-}
-
-/**
- * edg_wll_FreeEvent 
- * \brief free memory allocated for edg_wll_Event internal fields
- * Calls: free
- */
-void edg_wll_FreeEvent(
-          edg_wll_Event *event       /* event IN */
-)
-{
-edg_wll_EventCode eventcode=event->type;
-
-/* free the common fields */
-        if (event->any.jobId) edg_wlc_JobIdFree(event->any.jobId);
-@@@{
-$indent = "\t";
-selectType $event '_common_';
-for ($event->getFieldsOrdered) {
-       my $f = selectField $event $_;
-       my $fn = $f->{name};
-       my $ft = $f->{type};
-       if ($ft eq 'string') {
-               gen $indent."if (event->any.$fn) free(event->any.$fn);\n"
-       }
-}
-@@@}
-
-/* free the rest */
-switch (eventcode) {
-@@@{
-$indent = "   ";
-for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-               $event->getTypes) {
-       my $tu = uc $t;
-       my $tl = lcfirst $t;
-       gen $indent."case EDG_WLL_EVENT_$tu :\n";
-       selectType $event $t;
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = $f->{name};
-               my $ft = $f->{type};
-               if ($ft eq 'string') {
-                       gen $indent."\tif (event->$tl.$fn) free(event->$tl.$fn);\n"
-               }
-       }
-       gen $indent.$indent."break;\n"
-}
-@@@}
-   case EDG_WLL_EVENT_UNDEF :
-   default:
-      break;
-}
-
-}
diff --git a/org.glite.lb.common/src/events_parse.c.T b/org.glite.lb.common/src/events_parse.c.T
deleted file mode 100644 (file)
index 36f2d83..0000000
+++ /dev/null
@@ -1,782 +0,0 @@
-#ident "$Header$"
-/*
-@@@AUTO
-*/
-@@@LANG: C
-
-#include <string.h>
-#include <stdlib.h>
-#include <time.h>
-#include <errno.h>
-
-#include "glite/lb/events.h"
-#include "glite/lb/producer.h"
-#include "events_parse.h"
-#include "ulm_parse.h"
-#include "context-int.h"
-#include "escape.h"
-#include "glite/wmsutils/jobid/cjobid.h"
-
-#include "trio.h"
-
-static const struct timeval null_timeval = {0,0};
-
-/* -- Internal function prototype -- */
-char *my_edg_wll_ULMGetValueAt( p_edg_wll_ULMFields, int );
-
-/**
- * edg_wll_ParseEvent - parse ULM message to internal structures
- * Calls: calloc, free, sprintf, strdup
- *        edg_wll_ULMNewParseTable, edg_wll_ULMFreeParseTable, edg_wll_ULMProcessParseTable,
- *        edg_wll_ULMGetNameAt, my_edg_wll_ULMGetValueAt, edg_wll_ULMDateToTimeval (edg_wll_ULMDateToDouble),
- *        edg_wll_StringToEvent, edg_wll_StringToKeyName, edg_wll_StringToLevel, edg_wlc_jobid_tParse,
- *        edg_wll_EventToString, edg_wll_KeyNameToString, edg_wll_SetError (or edg_wll_ResetError)
- * Algorithm: break ULM string into fields and then according the event type
- *            fill in the proper structures
- */
-
-#define DUPLICITY { \
-       char *k =  edg_wll_KeyNameToString(keycode); \
-       sprintf(err_desc,"Key %s already exists.", k); \
-       free(k); \
-       ret=edg_wll_SetError(context,EDG_WLL_ERROR_PARSE_KEY_DUPLICITY,err_desc); \
-       goto end; }
-
-#define MISUSE { \
-       char *e = edg_wll_EventToString(eventcode); \
-       char *k =  edg_wll_KeyNameToString(keycode); \
-       sprintf(err_desc,"Key %s schouldn't be used for event type %s.", k,e); \
-       free(e); \
-       free(k); \
-       ret=edg_wll_SetError(context,EDG_WLL_ERROR_PARSE_KEY_MISUSE,err_desc); \
-       goto end; }
-
-edg_wll_ErrorCode edg_wll_ParseEvent(
-        edg_wll_Context context,   /* context IN */
-        edg_wll_LogLine logline,     /* logline IN: ULM string to parse */
-        edg_wll_Event **event      /* event OUT: parsed event 
-                           (may be NULL - syntax checking with no output */
-)
-{
-int                    i;
-int                    extra=0;        /* number of extra unknown key=value pairs */
-char                   err_desc[128];  /* error description for use in edg_wll_SetError */
-char                   *value=NULL;
-p_edg_wll_ULMFields    table = edg_wll_ULMNewParseTable(logline);
-edg_wll_KeyNameCode    keycode=UNDEFINED;
-edg_wll_EventCode      eventcode=EDG_WLL_EVENT_UNDEF;
-edg_wll_ErrorCode      ret;
-edg_wll_Event          *this=NULL;
-
-/* break ULM string into fields */
-if ( edg_wll_ULMProcessParseTable(table) != 0 ) { 
-       ret=edg_wll_SetError(context,EDG_WLL_ERROR_PARSE_BROKEN_ULM,"ULM parse error"); 
-       goto end; 
-}
-
-/* determine the event type */
-for (i=0; i<table->num; i++) {
-   keycode=edg_wll_StringToKeyName(edg_wll_ULMGetNameAt(table,i));
-   if ( keycode == EDG_WLL_EVNT ) { 
-       value=my_edg_wll_ULMGetValueAt(table,i); 
-       eventcode=edg_wll_StringToEvent(value); 
-       free(value);
-       value=NULL;
-       break; 
-   }
-}
-if ( eventcode == EDG_WLL_EVENT_UNDEF ) {
-       ret=edg_wll_SetError(context,EDG_WLL_ERROR_PARSE_EVENT_UNDEF,"Unknown or missing event type"); 
-       goto end; 
-}
-/* allocate memory for 'this' (edg_wll_Event) */
-// XXX:  this = (edg_wll_Event *) calloc(1,sizeof(edg_wll_Event)); 
-this = edg_wll_InitEvent(eventcode);
-
-/* go through all fields and fill in the edg_wll_Event union
- * in each step check for key duplicity and key name misuse 
- */
-for (i=0; i<table->num; i++) {
-   keycode=edg_wll_StringToKeyName(edg_wll_ULMGetNameAt(table,i));
-   value=my_edg_wll_ULMGetValueAt(table,i); 
-   switch (keycode) {
-   case EDG_WLL_EVNT : 
-       if (this->any.type != edg_wll_StringToEvent(value)) DUPLICITY
-      break;
-@@@{
-$indent = "   ";
-selectType $event '_common_';
-for ($event->getFieldsOrdered) {
-       my $f = selectField $event $_;
-       my $fn = getName $f;
-       my $fnu = uc getName $f 'ULM';
-       if (hasAlias $f 'ULM') {
-               gen $indent."case ULM\_$fnu :\n";
-       } else {
-               gen $indent."case EDG_WLL\_COMMON\_$fnu :\n";
-       }
-       gen "\tif (";
-               gen $f->isnotNULL("this->any.$fn");
-               gen ") DUPLICITY \n";
-       gen "\t";
-       if ($f->{codes}) {
-               my $c = ucfirst(${fn});
-               gen "this->any.$fn = edg_wll_StringTo${c}(value);";
-       } else {
-               gen $f->fromString('value',"this->any.$fn");
-       }
-       gen "\n".$indent.$indent."break;\n";
-}
-for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-               $event->getTypes) {
-       my $tu = uc $t;
-       my $tl = lcfirst $t;
-       my $misuse = "if (eventcode != EDG_WLL_EVENT_$tu ) MISUSE";
-       selectType $event $t;
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = $f->{name};
-               my $fnu = uc $fn;
-               gen $indent."case EDG_WLL\_$tu\_$fnu :\n";
-               gen "\tif ("; 
-                       gen $f->isnotNULL("this->$tl.$fn");
-                       gen ") DUPLICITY\n";
-               gen "\t$misuse\n";
-               if ($f->{codes}) {
-                       my $c = "$t".ucfirst(${fn});
-                       gen "\tthis->$tl.$fn = edg_wll_StringTo${c}(value);";
-               } else {
-                       gen "\t";
-                       gen $f->fromString('value',"this->$tl.$fn");
-               }
-               gen "\n".$indent.$indent."break;\n";
-       }
-}
-@@@}
-
-   case UNDEFINED :
-   case EDG_WLL_INTERNAL_TYPE :
-      break;
-
-   default : 
-       extra++;
-      break;
-   }
-   free(value);
-   value=NULL;
-}
-
-/* now check if all required fields are present */
-ret=edg_wll_CheckEvent(context,this);
-if (ret) { goto end; }
-
-/* parse is OK, only extra fields could occur */
-if (extra) {
-       sprintf(err_desc,"There are %d extra fields in the logline.",extra);
-       ret=edg_wll_SetError(context,EDG_WLL_ERROR_PARSE_OK_WITH_EXTRA_FIELDS,err_desc); }
-else { ret=edg_wll_ResetError(context); }
-
-end:
-   /* finally (if wanted) "return" pointer to the filled edg_wll_Event union
-      NOTE: a pointer (to half-filled structure) is returned even if an error occured ! */
-   if (event != NULL) {
-       *event = this; }
-       /* This also means, that the memory must be freed by edg_wll_FreeEvent() somewhere else */
-   else {
-       edg_wll_FreeEvent(this);
-       free(this);
-   }
-
-   edg_wll_ULMFreeParseTable(table);
-   return ret;
-}
-
-/**
- * edg_wll_UnparseEvent - unparse ULM message from internal structures
- * Calls: malloc, free, strlen, strcmp, asprintf, trio_asprintf
- *        edg_wll_ULMTimevalToDate,
- *        edg_wll_EventToString, edg_wll_KeyNameToString, edg_wll_LevelToString, 
- *        edg_wlc_jobid_tUnparse, 
- * Algorithm: format values from internal structures into a ULM string
- */
-#define NOMEM { if (logline) free(logline); logline = NULL; edg_wll_SetError(context,ENOMEM,NULL); goto clean; }
-
-edg_wll_LogLine edg_wll_UnparseEvent(       /* logline OUT */
-          edg_wll_Context context,    /* context IN */
-          edg_wll_Event *event        /* event IN */
-)
-{
-edg_wll_LogLine                logline;
-edg_wll_EventCode      eventcode=event->type;
-char                   *date, *common, *user, *var, *e, *l, *j, *s;
-edg_wll_Event          nonulls;
-
-logline = date = common = user = var = NULL;
-
-/* FIXME: after EDG_WLL_FORMAT_COMMON automatic generation automate this code as well */
-/* format the common fields */
-date=(char *) malloc(1+ULM_DATE_STRING_LENGTH*sizeof(char));
-edg_wll_ULMTimevalToDate(event->any.timestamp.tv_sec, event->any.timestamp.tv_usec, date);
-
-memcpy(&nonulls,event,sizeof nonulls);
-@@@{
-       selectType $event '_common_';
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = $f->{name};
-               gen "if (!nonulls.any.$fn) nonulls.any.$fn = \"\";\n"
-                       if $f->{type} eq 'string';
-       }
-@@@}
-
-e = edg_wll_EventToString(eventcode);
-l = edg_wll_LevelToString(event->any.level);
-j = edg_wlc_JobIdUnparse(event->any.jobId);
-s = edg_wll_SourceToString(event->any.source);
-if (trio_asprintf(&common,EDG_WLL_FORMAT_COMMON, \
-       date, event->any.host, l, event->any.priority, s, nonulls.any.src_instance, \
-       e, j, nonulls.any.seqcode) == -1) { 
-       if (e) free(e);
-       if (l) free(l);
-       if (j) free(j);
-       if (s) free(s);
-       NOMEM 
-}
-if (e) free(e);
-if (l) free(l);
-if (j) free(j);
-if (s) free(s);
-
-if (trio_asprintf(&user,EDG_WLL_FORMAT_USER, event->any.user) == -1) NOMEM
-
-/* format the rest of the logline */
-switch (eventcode) {
-@@@{
-$indent = "   ";
-for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-               $event->getTypes) {
-       my $tu = uc $t;
-       my $tl = lcfirst $t;
-       my $free = "";
-       gen $indent."case EDG_WLL_EVENT_$tu :\n";
-       gen "\t\{";
-       selectType $event $t;
-# if there are some _code_, convert them from string:
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = $f->{name};
-               my $fnu = ucfirst $fn;
-               if ($f->{codes}) {
-                       gen "\tchar \*$fn\_code = edg_wll\_$t${fnu}ToString(event->$tl.$fn);\n"; 
-                       $free = $free . "free($fn\_code); ";
-               }
-               if ($f->{type} eq 'jobid') {
-                       gen "\tchar \*$fn\_str = edg_wlc_JobIdUnparse(event->$tl.$fn);\n";
-                       $free .= "free($fn\_str); ";
-               }
-               if ($f->{type} eq 'notifid') {
-                       gen "\tchar \*$fn\_str = edg_wll_NotifIdUnparse(event->$tl.$fn);\n";
-                       $free .= "free($fn\_str); ";
-               }
-               if ($ULMasString{$f->{type}}) {
-                       gen "\tchar \*$fn\_str = ".$f->getType()."ToString(event->$tl.$fn);\n";
-                       $free .= "free($fn\_str); ";
-               }
-       }
-       
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = $f->{name};
-
-               gen "\t\tif (!nonulls.$tl.$fn) nonulls.$tl.$fn = \"\";\n"
-                       if $f->{type} eq 'string';
-       }
-       gen "\tif (trio_asprintf(&var,EDG_WLL_FORMAT_$tu";
-# now format remaining parapteres for trio_asprintf:
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = $f->{name};
-               if ($f->{codes}) {
-                       gen ",$fn\_code";
-               }
-               elsif ($f->{type} eq 'jobid' || $f->{type} eq 'notifid' || $ULMasString{$f->{type}}) {
-                       gen ",$fn\_str?$fn\_str:\"\"";
-               } else {
-                       gen ",nonulls.$tl.$fn";
-               }
-       }
-       gen ") == -1 ) \{\n";
-               gen "\t".$indent.$free."NOMEM \}\n";
-       if ($free) { gen "\t$free\n"; }
-       gen "\t\}\n";
-       gen $indent.$indent."break;\n";
-}
-@@@}
-  case EDG_WLL_EVENT_UNDEF :
-  default :
-     break;
-}
-
-/* put it all together (inc. the ending LF) */
-if (trio_asprintf(&logline,"%s%s%s\n",common,user,var) == -1) NOMEM
-
-clean:
-       if (date) free(date);
-       if (common) free(common);
-       if (user) free(user);
-       if (var) free(var);
-       return logline;
-}
-
-
-/**
- * edg_wll_CheckEvent - check internal structures if all required fields are present
- * Calls: free, sprintf, strcmp
- *        edg_wll_KeyNameToString, edg_wll_SetError (or edg_wll_ResetError)
- * Algorithm:
- */
-#define MISSING(m_key) { \
-       char *k =  edg_wll_KeyNameToString(m_key); \
-        sprintf(err_desc,"Message incomplete, missing key %s.", k); \
-       free(k); \
-        ret=edg_wll_SetError(context,EDG_WLL_ERROR_PARSE_MSG_INCOMPLETE,err_desc); \
-        goto end; }
-
-edg_wll_ErrorCode edg_wll_CheckEvent(
-       edg_wll_Context context,        /* context IN */
-       edg_wll_Event *event    /* event IN */
-)
-{
-char err_desc[128];            /* error description for use in edg_wll_SetError */
-edg_wll_EventCode eventcode=EDG_WLL_EVENT_UNDEF;
-edg_wll_ErrorCode ret;
-
-eventcode=event->type;
-if ( eventcode == EDG_WLL_EVENT_UNDEF ) {
-       ret=edg_wll_SetError(context,EDG_WLL_ERROR_PARSE_EVENT_UNDEF,"Unknown or missing event type"); 
-       goto end; 
-}
-
-/*
-FIXME:
-?      if (!event->any.user) MISSING(EDG_WLL_USER) - cannot use in edg_wll_LogEvent(), where is no DG.USER
-*/
-
-@@@{
-       $indent = "   ";
-       selectType $event '_common_';
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = $f->{name};
-               next if $f->{optional};
-               if (!$f->{codes}) {
-                       if (!$f->hasAlias('ULM')) {
-                               my $fu = uc $fn;
-                               gen "\tif (". $f->isNULL("event->any.$fn") .") MISSING(EDG_WLL\_COMMON\_$fu)\n";
-                       } else {
-                               my $fa = $f->getName('ULM');
-                               my $fu = uc $fa;
-                               gen "\tif (". $f->isNULL("event->any.$fn") .") MISSING(ULM\_$fu)\n";
-                       }
-               }
-       }
-@@@}
-
-switch (eventcode) {
-@@@{
-$indent = "   ";
-for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-               $event->getTypes) {
-       my $tu = uc $t;
-       my $tl = lcfirst $t;
-       gen $indent."case EDG_WLL_EVENT_$tu :\n";
-       selectType $event $t;
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               next if $f->{optional};
-               if (!$f->{codes}) {
-                       my $fn = $f->{name};
-                       my $fu = uc $fn;
-                       my $ft = $f->{type};
-                       gen "\tif (". $f->isNULL("event->$tl.$fn") .") MISSING(EDG_WLL\_$tu\_$fu)\n";
-               }
-       }
-       gen $indent.$indent."break;\n";
-}
-@@@}
-
-   case EDG_WLL_EVENT_UNDEF :
-   default:
-       ret=edg_wll_SetError(context,EDG_WLL_ERROR_PARSE_EVENT_UNDEF,"Unknown or missing event type"); 
-        goto end;
-      break;
-};
-ret=edg_wll_ResetError(context);
-
-end:
-       return ret;
-}
-
-/**
- * edg_wll_CompareEvents - compare two event structures
- * Calls: 
- * Algorithm:
- */
-edg_wll_ErrorCode edg_wll_CompareEvents(
-       edg_wll_Context context,        /* context IN */
-       const edg_wll_Event *e1,        /* event 1 IN */ 
-       const edg_wll_Event *e2         /* event 2 IN */
-)
-{
-       if (e1->any.type != e2->any.type) return edg_wll_SetError(context,EDG_WLL_ERROR_COMPARE_EVENTS,"Different event types");
-@@@{
-       selectType $event '_common_';
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = getName $f;
-               my $ft = $f->{type};
-
-               my $a = "e1->any.$fn";
-               my $b = "e2->any.$fn";
-
-               gen "\tif (!(".eval($main::compare{C}->{$ft}).")) return edg_wll_SetError(context,EDG_WLL_ERROR_COMPARE_EVENTS,\"Different $fn\");\n";
-       }
-       
-       gen "\tswitch(e1->any.type) {\n";
-       for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-               $event->getTypes)
-       {
-               my $tu = uc $t;
-               my $tl = lcfirst $t;
-
-               selectType $event $t;
-               gen "\t\tcase EDG_WLL_EVENT\_$tu :\n";
-               for ($event->getFieldsOrdered) {
-                       my $f = selectField $event $_;
-                       my $fn = $f->{name};
-                       my $ft = $f->{type};
-
-                       my $a = "e1->$tl.$fn";
-                       my $b = "e2->$tl.$fn";
-
-                       gen "\t\t\tif (!(".eval($main::compare{C}->{$ft}).")) return edg_wll_SetError(context,EDG_WLL_ERROR_COMPARE_EVENTS,\"Different $fn\");\n";
-               }
-               gen "\t\tbreak;\n";
-       }
-@@@}
-               default: return edg_wll_SetError(context,EDG_WLL_ERROR_COMPARE_EVENTS,"Unknown difference");
-       } /* switch */
-       return edg_wll_ResetError(context);
-}
-
-
-/**
- * my_edg_wll_ULMGetValueAt - get value at index, but also
- *                - remove surrounding quotes if any
- *                - and unescape the string
- *                - the new string will be allocated (by edg_wll_LogUnescape)
- * Calls: edg_wll_ULMGetValueAt, edg_wll_LogUnescape, calloc and strncpy or strdup
- */
-char *my_edg_wll_ULMGetValueAt( p_edg_wll_ULMFields table, int index )
-{
-char *str = edg_wll_ULMGetValueAt( table, index);
-size_t len = strlen(str);
-char *ret,*first,*last,*tmp;
-
-first = last = str;
-last += len - 1;
-
-/* remove surrounding quotes */
-if ((*first == ULM_QM) && (*last == ULM_QM)) {
-       /* be careful with doppel_ULM_QM */
-       if (len > 2) {
-               tmp = (char *) calloc (1,(len-1)*sizeof(char));
-               strncpy(tmp,first+1,len-2);
-               tmp[len-2] = '\0';
-       }
-       else {
-               tmp = strdup("");
-       }
-}
-else tmp = strdup(str);
-
-if (len > 2) {
-       ret = edg_wll_LogUnescape(tmp);
-       if (tmp) free(tmp);
-}
-else ret = tmp;
-
-return ret;
-}
-
-
-/**
- * edg_wll_GetJobId - parse jobId from ULM message
- * Returns: edg_wlc_jobid_t string or NULL
- * Calls: edg_wll_ULMNewParseTable, edg_wll_ULMFreeParseTable, edg_wll_ULMProcessParseTable,
- *        edg_wll_ULMGetNameAt, my_edg_wll_ULMGetValueAt, edg_wlc_jobid_tParse, strdup
- * Algorithm: break ULM string into fields and then look for jobId
- */
-char *edg_wll_GetJobId(edg_wll_LogLine logline)
-{
-p_edg_wll_ULMFields table = edg_wll_ULMNewParseTable(logline);
-int i;
-char *ret=NULL,*fullid=NULL;
-edg_wll_KeyNameCode keycode=UNDEFINED;
-edg_wlc_JobId jobId = NULL;
-
-/* break ULM string into fields */
-if ( edg_wll_ULMProcessParseTable(table) != 0 ) goto clean;
-
-/* look for jobId */
-for (i=0; i<table->num; i++) {
-       keycode=edg_wll_StringToKeyName(edg_wll_ULMGetNameAt(table,i));
-       if ( keycode == EDG_WLL_COMMON_JOBID ) { fullid=my_edg_wll_ULMGetValueAt(table,i); break; }
-}
-if ( fullid == NULL ) goto clean;
-
-if (edg_wlc_JobIdParse(fullid, &jobId)) goto clean;
-
-ret = strdup(fullid);
-
-clean:
-   if (fullid) free(fullid);
-   if (jobId) edg_wlc_JobIdFree(jobId);
-   edg_wll_ULMFreeParseTable(table);
-   return ret;
-}
-
-/**
- * Parse a special Notification ULM line into a edg_wll_Event structure
- * \param context IN: context to work with
- * \param logline IN: ULM string to parse
- * \param event OUT: parsed event
- *     (may be NULL - syntax checking with no output)
- */
-edg_wll_ErrorCode edg_wll_ParseNotifEvent(
-       edg_wll_Context context,
-       edg_wll_LogLine logline,
-       edg_wll_Event ** event
-)
-{
-int                    i;
-int                    extra=0;        /* number of extra unknown key=value pairs */
-char                   err_desc[128];  /* error description for use in edg_wll_SetError */
-char *value=NULL;
-p_edg_wll_ULMFields    table = edg_wll_ULMNewParseTable(logline);
-edg_wll_KeyNameCode    keycode=UNDEFINED;
-const edg_wll_EventCode        eventcode=EDG_WLL_EVENT_NOTIFICATION;
-edg_wll_ErrorCode      ret;
-edg_wll_Event          *this=NULL;
-
-/* break ULM string into fields */
-if ( edg_wll_ULMProcessParseTable(table) != 0 ) {
-       ret=edg_wll_SetError(context,EDG_WLL_ERROR_PARSE_BROKEN_ULM,"ULM parse error");
-       goto end;
-}
-
-/* allocate memory for 'this' (edg_wll_Event) */
-this = edg_wll_InitEvent(eventcode);
-
-/* go through all fields and fill in the edg_wll_Event union
- * in each step check for key duplicity and key name misuse 
- */
-for (i=0; i<table->num; i++) {
-   keycode=edg_wll_StringToKeyName(edg_wll_ULMGetNameAt(table,i));
-   value=my_edg_wll_ULMGetValueAt(table,i); 
-   switch (keycode) {
-   case EDG_WLL_EVNT : 
-       if (this->any.type != edg_wll_StringToEvent(value)) DUPLICITY
-      break;
-   case ULM_DATE :
-       if (!((this->any.timestamp).tv_sec == (null_timeval).tv_sec && (this->any.timestamp).tv_usec == (null_timeval).tv_usec)) DUPLICITY 
-       edg_wll_ULMDateToTimeval(value,&this->any.timestamp);
-      break;
-   case ULM_ARR_DATE :
-       if (!((this->any.arrived).tv_sec == (null_timeval).tv_sec && (this->any.arrived).tv_usec == (null_timeval).tv_usec)) DUPLICITY 
-       edg_wll_ULMDateToTimeval(value,&this->any.arrived);
-      break;
-   case ULM_HOST :
-       if (!(((this->any.host) == NULL && (NULL) == NULL) || ((this->any.host)&&(NULL)&& !strcmp(this->any.host,NULL)))) DUPLICITY 
-       this->any.host = strdup(value);
-      break;
-   case ULM_LVL :
-       if (!((this->any.level == 0))) DUPLICITY 
-       this->any.level = edg_wll_StringToLevel(value);
-      break;
-   case EDG_WLL_COMMON_SOURCE :
-       if (!((this->any.source) == (EDG_WLL_SOURCE_NONE))) DUPLICITY 
-       this->any.source = edg_wll_StringToSource(value);
-      break;
-   case EDG_WLL_COMMON_SRC_INSTANCE :
-       if (!(((this->any.src_instance) == NULL && (NULL) == NULL) || ((this->any.src_instance)&&(NULL)&& !strcmp(this->any.src_instance,NULL)))) DUPLICITY 
-       this->any.src_instance = strdup(value);
-      break;
-@@@{
-       $indent = "   ";
-       my $t = 'Notification';
-       my $tu = uc $t;
-       my $tl = lcfirst $t;
-       my $misuse = "if (eventcode != EDG_WLL_EVENT_$tu ) MISUSE";
-       selectType $event $t;
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = $f->{name};
-               my $fnu = uc $fn;
-               gen $indent."case EDG_WLL\_$tu\_$fnu :\n";
-               gen "\tif ("; 
-                       gen $f->isnotNULL("this->$tl.$fn");
-                       gen ") DUPLICITY\n";
-               gen "\t$misuse\n";
-               if ($f->{codes}) {
-                       my $c = "$t".ucfirst(${fn});
-                       gen "\tthis->$tl.$fn = edg_wll_StringTo${c}(value);";
-               } else {
-                       gen "\t";
-                       gen $f->fromString('value',"this->$tl.$fn");
-               }
-               gen "\n".$indent.$indent."break;\n";
-       }
-@@@}
-
-   case UNDEFINED :
-   case EDG_WLL_INTERNAL_TYPE :
-      break;
-
-   default : 
-       extra++;
-      break;
-   }
-   free(value);
-   value=NULL;
-}
-
-/* parse is OK, only extra fields could occur */
-if (extra) {
-        sprintf(err_desc,"There are %d extra fields in the logline.",extra);
-        ret=edg_wll_SetError(context,EDG_WLL_ERROR_PARSE_OK_WITH_EXTRA_FIELDS,err_desc); }
-else {  ret=edg_wll_ResetError(context); }
-
-end:
-   /* finally (if wanted) "return" pointer to the filled edg_wll_Event union
-      NOTE: a pointer (to half-filled structure) is returned even if an error occured ! */
-   if (event != NULL) {
-       *event = this; }
-       /* This also means, that the memory must be freed by edg_wll_FreeEvent() somewhere else */
-   else {
-       edg_wll_FreeEvent(this);
-       free(this);
-   }
-
-   edg_wll_ULMFreeParseTable(table);
-   return ret;
-}
-
-/** 
- * Generate a special Notification ULM line from edg_wll_Event structure
- * \param context IN: context to work with
- * \param event IN: event to unparse
- */
-edg_wll_LogLine edg_wll_UnparseNotifEvent(
-       edg_wll_Context context,
-       edg_wll_Event * event
-)
-{
-edg_wll_LogLine logline;
-char           *date, *common, *var, *l, *s;
-edg_wll_Event   nonulls;
-
-logline = date = common = var = l = s = NULL;
-
-/* format the common fields */
-date=(char *) malloc(1+ULM_DATE_STRING_LENGTH*sizeof(char));
-edg_wll_ULMTimevalToDate(event->any.timestamp.tv_sec, event->any.timestamp.tv_usec, date);
-
-memcpy(&nonulls,event,sizeof nonulls);
-if (!nonulls.any.host) nonulls.any.host = "";
-if (!nonulls.any.src_instance) nonulls.any.src_instance = "";
-
-l = edg_wll_LevelToString(event->any.level);
-s = edg_wll_SourceToString(event->any.source);
-if (trio_asprintf(&common,EDG_WLL_FORMAT_NOTIFICATION_COMMON, \
-        date, event->any.host, l, s, nonulls.any.src_instance) == -1) {
-               if (l) free(l);
-               if (s) free(s);
-               NOMEM 
-       }
-if (l) free(l);
-if (s) free(s);
-
-// n = edg_wlc_NotifIdUnparse(event->notification.notifId);
-
-/* format the rest of the logline */
-@@@{
-$indent = "   ";
-       my $t = 'Notification';
-       my $tu = uc $t;
-       my $tl = lcfirst $t;
-       my $free = "";
-##     gen $indent."case EDG_WLL_EVENT_$tu :\n";
-       gen "\t\{";
-       selectType $event $t;
-# if there are some _code_, convert them from string:
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = $f->{name};
-               my $fnu = ucfirst $fn;
-               if ($f->{codes}) {
-                       gen "\tchar \*$fn\_code = edg_wll\_$t${fnu}ToString(event->$tl.$fn);\n"; 
-                       $free = $free . "free($fn\_code); ";
-               }
-               if ($f->{type} eq 'jobid') {
-                       gen "\tchar \*$fn\_str = edg_wlc_JobIdUnparse(event->$tl.$fn);\n";
-                       $free .= "free($fn\_str); ";
-               }
-               if ($f->{type} eq 'notifid') {
-                       gen "\tchar \*$fn\_str = edg_wll_NotifIdUnparse(event->$tl.$fn);\n";
-                       $free .= "free($fn\_str); ";
-               }
-               if ($ULMasString{$f->{type}}) {
-                       gen "\tchar \*$fn\_str = ".$f->getType()."ToString(event->$tl.$fn);\n";
-                       $free .= "free($fn\_str); ";
-               }
-       }
-       
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = $f->{name};
-
-               gen "\t\tif (!nonulls.$tl.$fn) nonulls.$tl.$fn = \"\";\n"
-                       if $f->{type} eq 'string';
-       }
-       gen "\tif (trio_asprintf(&var,EDG_WLL_FORMAT_$tu";
-# now format remaining parapteres for trio_asprintf:
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = $f->{name};
-               if ($f->{codes}) {
-                       gen ",$fn\_code";
-               }
-               elsif ($f->{type} eq 'jobid' || $f->{type} eq 'notifid' || $ULMasString{$f->{type}}) {
-                       gen ",$fn\_str?$fn\_str:\"\"";
-               } else {
-                       gen ",nonulls.$tl.$fn";
-               }
-       }
-       gen ") == -1 ) \{\n";
-               gen "\t".$indent.$free."NOMEM \}\n";
-       if ($free) { gen "\t$free\n"; }
-       gen "\t\}\n";
-##     gen $indent.$indent."break;\n";
-@@@}
-
-/* put it all together (inc. the ending LF) */
-if (trio_asprintf(&logline,"%s%s\n",common,var) == -1) NOMEM
-
-clean:
-        if (date) free(date);
-        if (common) free(common);
-        if (var) free(var);
-        return logline;
-}
-
diff --git a/org.glite.lb.common/src/il_int.c b/org.glite.lb.common/src/il_int.c
deleted file mode 100644 (file)
index 7d4bdf5..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-#ident "$Header$"
-
-#include <string.h>
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "il_string.h"
-
-char *
-_put_int(char *p, int d)
-{
-  char buf[32];
-  int len;
-  
-  assert( p != NULL );
-
-  snprintf(buf, sizeof(buf), "%d", d);
-  len = strlen(buf);
-  strncpy(p, buf, len);
-  return(p + len);
-}
-
-
-char *
-put_int(char *p, int d)
-{
-  assert( p != NULL );
-
-  p = _put_int(p, d);
-  *p++ = '\n';
-  return(p);
-}
-
-
-char *
-_get_int(char *p, int *d)
-{
-   char *end;
-
-  assert( p != NULL );
-  assert( d != NULL );
-
-  *d = strtol(p, &end, 10);
-  return(end);
-}
-  
-
-char *
-get_int(char *p, int *d)
-{
-  assert( p != NULL );
-  assert( d != NULL );
-
-  p = _get_int(p, d);
-  if(*p != '\n') 
-    return(NULL);
-  else
-    return(p + 1);
-}
-
-
-int 
-len_int(int d)
-{
-  char buffer[256];
-
-  return(put_int(buffer, d) - buffer);
-}
diff --git a/org.glite.lb.common/src/il_log.c b/org.glite.lb.common/src/il_log.c
deleted file mode 100644 (file)
index 11170c5..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#ident "$Header$"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <syslog.h>
-
-int log_level;
-
-int
-il_log(int level, char *fmt, ...)
-{
-       char *err_text;
-       va_list fmt_args;
-
-       va_start(fmt_args, fmt);
-       vasprintf(&err_text, fmt, fmt_args);
-       va_end(fmt_args);
-       
-       if(level <= log_level) 
-               fprintf(stderr, err_text);
-       
-       if(level <= LOG_ERR) {
-               openlog("edg-wl-interlogd", LOG_PID | LOG_CONS, LOG_DAEMON);
-               syslog(level, "%s", err_text);
-               closelog();
-       }
-
-       if(err_text) free(err_text);
-
-       return(0);
-}
diff --git a/org.glite.lb.common/src/il_msg.c b/org.glite.lb.common/src/il_msg.c
deleted file mode 100644 (file)
index 30997f6..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-#ident "$Header$"
-
-#include "il_string.h"
-
-#include <malloc.h>
-#include <stdio.h>
-#include <unistd.h>
-
-int 
-receive_msg(int sd, char **ucs, char **event)
-{
-  char buffer[17];
-  char *p, *q, *msg;
-  int len;
-
-  len = read(sd, buffer, 17);
-
-  if(buffer[16] != '\n') {
-    printf("Error in header!\n");
-    goto err;
-  }
-
-  sscanf(buffer, "%d", &len);
-  if(len > MAXLEN) {
-    printf("Message too long!\n");
-    goto err;
-  }
-  p = msg = malloc(len+1);
-  if(p == NULL) {
-    printf("Error allocating %d bytes\n", len+1);
-    goto err;
-  }
-
-  read(sd, p, len);
-  p[len] = 0;
-
-  if((q = get_string(p, ucs)) == NULL) {
-    printf("Protocol error at %s\n", p);
-    goto err;
-  }
-  p = q;
-  if((q = get_string(p, event)) == NULL) {
-    printf("Protocol error at %s\n", p);
-    goto err;
-  }
-
-  free(msg);
-  return(0);
-
- err: 
-  
-  return(-1);
-}
diff --git a/org.glite.lb.common/src/il_string.c b/org.glite.lb.common/src/il_string.c
deleted file mode 100644 (file)
index 2c4034d..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-#ident "$Header$"
-
-#include <string.h>
-#include <stdlib.h>
-#include <assert.h>
-
-#include "il_string.h"
-
-char *
-put_string(char *p, char *s)
-{
-  int len = strlen(s);
-  
-  assert( p != NULL );
-
-  p = _put_int(p, len);
-  *p++ = ' ';
-  strncpy(p, s, len);
-  p += len;
-  *p++ = '\n';
-  return(p);
-}
-
-
-int
-len_string(char *s)
-{
-  int len, slen;
-
-  assert( s != NULL );
-
-  slen = strlen(s);
-  len = len_int(slen);
-
-  return(len + slen + 1);
-}
-
-
-char *
-get_string(char *p, char **s)
-{
-  int len;
-
-  assert( p != NULL );
-
-  *s = NULL;
-
-  p = _get_int(p, &len);
-  if(*p != ' ')
-    return(NULL);
-  else
-    {
-      *s = malloc(len + 1);
-      if(*s == NULL)
-       return(NULL);
-      strncpy(*s, ++p, len);
-      (*s)[len] = '\0';
-      p += len;
-      return( *p++ == '\n' ? p : NULL );
-    }
-}
diff --git a/org.glite.lb.common/src/lb_gss.c b/org.glite.lb.common/src/lb_gss.c
deleted file mode 100644 (file)
index a9de75f..0000000
+++ /dev/null
@@ -1,981 +0,0 @@
-#ident "$Header$"
-
-#include <string.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <time.h>
-#include <stdlib.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <netdb.h>
-#include <netinet/in.h>
-#include <ares.h>
-#include <errno.h>
-
-#include "lb_gss.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;\
-       }\
-}
-
-struct asyn_result {
-       struct hostent *ent;
-       int             err;
-};
-
-static int decrement_timeout(struct timeval *timeout, struct timeval before, struct timeval after)
-{
-        (*timeout).tv_sec = (*timeout).tv_sec - (after.tv_sec - before.tv_sec);
-        (*timeout).tv_usec = (*timeout).tv_usec - (after.tv_usec - before.tv_usec);
-        while ( (*timeout).tv_usec < 0) {
-                (*timeout).tv_sec--;
-                (*timeout).tv_usec += 1000000;
-        }
-        if ( ((*timeout).tv_sec < 0) || (((*timeout).tv_sec == 0) && ((*timeout).tv_usec == 0)) ) return(1);
-        else return(0);
-}
-
-/* ares callback handler for ares_gethostbyname()       */
-static void callback_handler(void *arg, int status, struct hostent *h) {
-       struct asyn_result *arp = (struct asyn_result *) arg;
-
-       switch (status) {
-          case ARES_SUCCESS:
-               if (h && h->h_addr_list[0]) {
-                       arp->ent->h_addr_list =
-                               (char **) malloc(2 * sizeof(char *));
-                       if (arp->ent->h_addr_list == NULL) {
-                               arp->err = NETDB_INTERNAL;
-                               break;
-                       }
-                       arp->ent->h_addr_list[0] =
-                               malloc(sizeof(struct in_addr));
-                       if (arp->ent->h_addr_list[0] == NULL) {
-                               free(arp->ent->h_addr_list);
-                               arp->err = NETDB_INTERNAL;
-                               break;
-                       }
-                       memcpy(arp->ent->h_addr_list[0], h->h_addr_list[0],
-                               sizeof(struct in_addr));
-                       arp->ent->h_addr_list[1] = NULL;
-                       arp->err = NETDB_SUCCESS;
-               } else {
-                       arp->err = NO_DATA;
-               }
-               break;
-           case ARES_EBADNAME:
-           case ARES_ENOTFOUND:
-               arp->err = HOST_NOT_FOUND;
-               break;
-           case ARES_ENOTIMP:
-               arp->err = NO_RECOVERY;
-               break;
-           case ARES_ENOMEM:
-           case ARES_EDESTRUCTION:
-           default:
-               arp->err = NETDB_INTERNAL;
-               break;
-       }
-}
-
-static void free_hostent(struct hostent *h){
-        int i;
-
-        if (h) {
-                if (h->h_name) free(h->h_name);
-               if (h->h_aliases) {
-                       for (i=0; h->h_aliases[i]; i++) free(h->h_aliases[i]);
-                       free(h->h_aliases);
-               }
-                if (h->h_addr_list) {
-                        for (i=0; h->h_addr_list[i]; i++) free(h->h_addr_list[i]);
-                        free(h->h_addr_list);
-                }
-                free(h);
-        }
-}
-
-static int asyn_gethostbyname(char **addrOut, char const *name, struct timeval *timeout) {
-       struct asyn_result ar;
-       ares_channel channel;
-       int nfds;
-       fd_set readers, writers;
-       struct timeval tv, *tvp;
-       struct timeval start_time,check_time;
-
-/* start timer */
-       gettimeofday(&start_time,0);
-
-/* ares init */
-       if ( ares_init(&channel) != ARES_SUCCESS ) return(NETDB_INTERNAL);
-       ar.ent = (struct hostent *) calloc (sizeof(*ar.ent),1);
-
-/* query DNS server asynchronously */
-       ares_gethostbyname(channel, name, AF_INET, callback_handler,
-                          (void *) &ar);
-
-/* wait for result */
-       while (1) {
-               FD_ZERO(&readers);
-               FD_ZERO(&writers);
-               nfds = ares_fds(channel, &readers, &writers);
-               if (nfds == 0)
-                       break;
-
-               gettimeofday(&check_time,0);
-               if (decrement_timeout(timeout, start_time, check_time)) {
-                       ares_destroy(channel);
-                       free_hostent(ar.ent);
-                       return(TRY_AGAIN);
-               }
-               start_time = check_time;
-
-               tvp = ares_timeout(channel, timeout, &tv);
-
-               switch ( select(nfds, &readers, &writers, NULL, tvp) ) {
-                       case -1: if (errno != EINTR) {
-                                       ares_destroy(channel);
-                                       free_hostent(ar.ent);
-                                       return NETDB_INTERNAL;
-                                } else
-                                       continue;
-                       case 0: 
-                               FD_ZERO(&readers);
-                               FD_ZERO(&writers);
-                               /* fallthrough */
-                       default: ares_process(channel, &readers, &writers);
-               }
-       }
-
-       ares_destroy(channel);
-
-       if (ar.err == NETDB_SUCCESS) {
-               *addrOut = malloc(sizeof(struct in_addr));
-               memcpy(*addrOut,ar.ent->h_addr_list[0], sizeof(struct in_addr));
-               free_hostent(ar.ent);
-       }
-       return(ar.err);
-}
-
-static int
-do_connect(int *s, char const *hostname, int port, struct timeval *timeout)
-{
-   int sock;
-   struct timeval before,after,to;
-   struct sockaddr_in a;
-   int sock_err;
-   socklen_t err_len;
-   char *addr;
-   int h_errno;
-
-   sock = socket(AF_INET, SOCK_STREAM, 0);
-   if (sock < 0) return EDG_WLL_GSS_ERROR_ERRNO;
-
-   if (timeout) {
-            int        flags = fcntl(sock, F_GETFL, 0);
-            if (fcntl(sock, F_SETFL, flags | O_NONBLOCK) < 0)
-                    return EDG_WLL_GSS_ERROR_ERRNO;
-            gettimeofday(&before,NULL);
-   }
-   
-   if (timeout) {
-      switch (h_errno = asyn_gethostbyname(&addr, hostname, timeout)) {
-               case NETDB_SUCCESS:
-                       memset(&a,0,sizeof a);
-                       a.sin_family = AF_INET;
-                       memcpy(&a.sin_addr.s_addr,addr,sizeof a.sin_addr.s_addr);
-                       a.sin_port = htons(port);
-                       free(addr);
-                       break;
-               case TRY_AGAIN:
-                       close(sock);
-                       return EDG_WLL_GSS_ERROR_TIMEOUT;
-               case NETDB_INTERNAL: 
-                       /* fall through */
-               default:
-                       close(sock);
-                       /* h_errno may be thread safe with Linux pthread libs,
-                        * but such an assumption is not portable
-                        */
-                       errno = h_errno;
-                       return EDG_WLL_GSS_ERROR_HERRNO;
-      }
-   } else {
-      struct hostent *hp;
-
-      hp = gethostbyname(hostname);
-      if (hp == NULL) {
-        close(sock);
-        errno = h_errno;
-        return EDG_WLL_GSS_ERROR_HERRNO;
-      }
-
-      memset(&a,0,sizeof a);
-      a.sin_family = AF_INET;
-      memcpy(&a.sin_addr.s_addr, hp->h_addr_list[0], sizeof(a.sin_addr.s_addr));
-      a.sin_port = htons(port);
-   }
-
-   if (connect(sock,(struct sockaddr *) &a,sizeof a) < 0) {
-            if (timeout && errno == EINPROGRESS) {
-                    fd_set     fds;
-                    FD_ZERO(&fds);
-                    FD_SET(sock,&fds);
-                    memcpy(&to,timeout,sizeof to);
-                    gettimeofday(&before,NULL);
-                    switch (select(sock+1,NULL,&fds,NULL,&to)) {
-                            case -1: close(sock);
-                                     return EDG_WLL_GSS_ERROR_ERRNO;
-                            case 0: close(sock);
-                                    return EDG_WLL_GSS_ERROR_TIMEOUT;
-                    }
-                    gettimeofday(&after,NULL);
-                    tv_sub(after,before);
-                    tv_sub(*timeout,after);
-
-                    err_len = sizeof sock_err;
-                    if (getsockopt(sock,SOL_SOCKET,SO_ERROR,&sock_err,&err_len)) {
-                            close(sock);
-                            return EDG_WLL_GSS_ERROR_ERRNO;
-                    }
-                    if (sock_err) {
-                            close(sock);
-                            errno = sock_err;
-                            return EDG_WLL_GSS_ERROR_ERRNO;
-                    }
-            }
-            else {
-                    close(sock);
-                    return EDG_WLL_GSS_ERROR_ERRNO;
-            }
-   }
-
-   *s = sock;
-   return 0;
-}
-
-static int
-send_token(int sock, void *token, size_t token_length, struct timeval *to)
-{
-   size_t num_written = 0;
-   ssize_t count;
-   fd_set fds;
-   struct timeval timeout,before,after;
-   int ret;
-
-   if (to) {
-       memcpy(&timeout,to,sizeof(timeout));
-       gettimeofday(&before,NULL);
-   }
-
-
-   ret = 0;
-   while(num_written < token_length) {
-      FD_ZERO(&fds);
-      FD_SET(sock,&fds);
-      switch (select(sock+1, NULL, &fds, NULL, to ? &timeout : NULL)) {
-        case 0: ret = EDG_WLL_GSS_ERROR_TIMEOUT;
-                goto end;
-                break;
-        case -1: ret = EDG_WLL_GSS_ERROR_ERRNO;
-                 goto end;
-                 break;
-      }
-
-      count = write(sock, ((char *)token) + num_written,
-                   token_length - num_written);
-      if(count < 0) {
-        if(errno == EINTR)
-           continue;
-        else {
-           ret = EDG_WLL_GSS_ERROR_ERRNO;
-           goto end;
-        }
-      }
-      num_written += count;
-   }
-
-end:
-   if (to) {
-      gettimeofday(&after,NULL);
-      tv_sub(after,before);
-      tv_sub(*to,after);
-      if (to->tv_sec < 0) {
-        to->tv_sec = 0;
-        to->tv_usec = 0;
-      }
-   }
-
-   return ret;
-}
-
-static int
-recv_token(int sock, void **token, size_t *token_length, struct timeval *to)
-{
-   ssize_t count;
-   char buf[4098];
-   char *t = NULL;
-   char *tmp;
-   size_t tl = 0;
-   fd_set fds;
-   struct timeval timeout,before,after;
-   int ret;
-
-   if (to) {
-      memcpy(&timeout,to,sizeof(timeout));
-      gettimeofday(&before,NULL);
-   }
-
-   ret = 0;
-   do {
-      FD_ZERO(&fds);
-      FD_SET(sock,&fds);
-      switch (select(sock+1, &fds, NULL, NULL, to ? &timeout : NULL)) {
-        case 0: 
-           ret = EDG_WLL_GSS_ERROR_TIMEOUT;
-           goto end;
-           break;
-        case -1:
-           ret = EDG_WLL_GSS_ERROR_ERRNO;
-           goto end;
-           break;
-      }
-      
-      count = read(sock, buf, sizeof(buf));
-      if (count < 0) {
-        if (errno == EINTR)
-           continue;
-        else {
-           ret = EDG_WLL_GSS_ERROR_ERRNO;
-           goto end;
-        }
-      }
-      if (count == 0 && tl == 0 && errno == 0)
-        return EDG_WLL_GSS_ERROR_EOF; 
-      tmp=realloc(t, tl + count);
-      if (tmp == NULL) {
-        errno = ENOMEM;
-        return EDG_WLL_GSS_ERROR_ERRNO;
-      }
-      t = tmp;
-      memcpy(t + tl, buf, count);
-      tl += count;
-   } while (count == sizeof(buf));
-
-end:
-   if (to) {
-      gettimeofday(&after,NULL);
-      tv_sub(after,before);
-      tv_sub(*to,after);
-      if (to->tv_sec < 0) {
-        to->tv_sec = 0;
-        to->tv_usec = 0;
-      }
-   }
-
-   if (ret == 0) {
-      *token = t;
-      *token_length = tl;
-   } else
-      free(t);
-
-   return ret;
-}
-
-static int
-create_proxy(char *cert_file, char *key_file, char **proxy_file)
-{
-   char buf[4096];
-   int in, out;
-   char *name = NULL;
-   int ret, len;
-
-   *proxy_file = NULL;
-
-   asprintf(&name, "%s/%d.lb.XXXXXX", P_tmpdir, getpid());
-
-   out = mkstemp(name);
-   if (out < 0)
-      return EDG_WLL_GSS_ERROR_ERRNO;
-
-   in = open(cert_file, O_RDONLY);
-   if (in < 0) {
-      ret = EDG_WLL_GSS_ERROR_ERRNO;
-      goto end;
-   }
-   while ((ret = read(in, buf, sizeof(buf))) > 0) {
-      len = write(out, buf, ret);
-      if (len != ret) {
-        ret = -1;
-        break;
-      }
-   }
-   close(in);
-   if (ret < 0) {
-      ret = EDG_WLL_GSS_ERROR_ERRNO;
-      goto end;
-   }
-
-   in = open(key_file, O_RDONLY);
-   if (in < 0) {
-      ret = EDG_WLL_GSS_ERROR_ERRNO;
-      goto end;
-   }
-   while ((ret = read(in, buf, sizeof(buf))) > 0) {
-      len = write(out, buf, ret);
-      if (len != ret) {
-        ret = -1;
-        break;
-      }
-   }
-   close(in);
-   if (ret < 0) {
-      ret = EDG_WLL_GSS_ERROR_ERRNO;
-      goto end;
-   }
-
-   ret = 0;
-   *proxy_file = name;
-
-end:
-   close(out);
-   if (ret) {
-      unlink(name);
-      free(name);
-   }
-
-   return ret;
-}
-
-static int
-destroy_proxy(char *proxy_file)
-{
-   /* XXX we should erase the contents safely (i.e. overwrite with 0's) */
-   unlink(proxy_file);
-   return 0;
-}
-
-int
-edg_wll_gss_acquire_cred_gsi(char *cert_file, char *key_file, gss_cred_id_t *cred,
-                            char **name, edg_wll_GssStatus* gss_code)
-{
-   OM_uint32 major_status = 0, minor_status, minor_status2;
-   gss_cred_id_t gss_cred = GSS_C_NO_CREDENTIAL;
-   gss_buffer_desc buffer = GSS_C_EMPTY_BUFFER;
-   gss_name_t gss_name = GSS_C_NO_NAME;
-   OM_uint32 lifetime;
-   char *proxy_file = NULL;
-   int ret;
-
-   if ((cert_file == NULL && key_file != NULL) ||
-       (cert_file != NULL && key_file == NULL))
-      return EINVAL;
-
-   if (cert_file == NULL) {
-      major_status = gss_acquire_cred(&minor_status, GSS_C_NO_NAME, 0,
-                                     GSS_C_NO_OID_SET, GSS_C_BOTH,
-                                     &gss_cred, NULL, NULL);
-      if (GSS_ERROR(major_status)) {
-        ret = EDG_WLL_GSS_ERROR_GSS;
-        goto end;
-      }
-   } else {
-      proxy_file = cert_file;
-      if (strcmp(cert_file, key_file) != 0 &&
-         (ret = create_proxy(cert_file, key_file, &proxy_file))) {
-        proxy_file = NULL;
-        goto end;
-      }
-      
-      asprintf((char**)&buffer.value, "X509_USER_PROXY=%s", proxy_file);
-      if (buffer.value == NULL) {
-        errno = ENOMEM;
-        ret = EDG_WLL_GSS_ERROR_ERRNO;
-        goto end;
-      }
-      buffer.length = strlen(proxy_file);
-
-      major_status = gss_import_cred(&minor_status, &gss_cred, GSS_C_NO_OID, 1,
-                                    &buffer, 0, NULL);
-      free(buffer.value);
-      if (GSS_ERROR(major_status)) {
-        ret = EDG_WLL_GSS_ERROR_GSS;
-        goto end;
-      }
-   }
-
-   /* gss_import_cred() doesn't check validity of credential loaded, so let's
-    * verify it now */
-    major_status = gss_inquire_cred(&minor_status, gss_cred, &gss_name,
-                                   &lifetime, NULL, NULL);
-    if (GSS_ERROR(major_status)) {
-       ret = EDG_WLL_GSS_ERROR_GSS;
-       goto end;
-    }
-
-    /* Must cast to time_t since OM_uint32 is unsinged and hence we couldn't
-     * detect negative values. */
-    if ((time_t) lifetime <= 0) {
-       major_status = GSS_S_CREDENTIALS_EXPIRED;
-       minor_status = 0; /* XXX */
-       ret = EDG_WLL_GSS_ERROR_GSS;
-       goto end;
-    }
-
-    if (name) {
-       major_status = gss_display_name(&minor_status, gss_name, &buffer, NULL);
-       if (GSS_ERROR(major_status)) {
-         ret = EDG_WLL_GSS_ERROR_GSS;
-         goto end;
-       }
-       *name = buffer.value;
-       memset(&buffer, 0, sizeof(buffer));
-    }
-    
-   *cred = gss_cred;
-   gss_cred = GSS_C_NO_CREDENTIAL;
-   ret = 0;
-
-end:
-   if (cert_file && key_file && proxy_file && strcmp(cert_file, key_file) != 0) {
-      destroy_proxy(proxy_file);
-      free(proxy_file);
-   }
-
-   if (gss_name != GSS_C_NO_NAME)
-      gss_release_name(&minor_status2, &gss_name);
-
-   if (gss_cred != GSS_C_NO_CREDENTIAL)
-      gss_release_cred(&minor_status2, &gss_cred);
-
-   if (GSS_ERROR(major_status)) {
-      if (gss_code) {
-        gss_code->major_status = major_status;
-        gss_code->minor_status = minor_status;
-      }
-      ret = EDG_WLL_GSS_ERROR_GSS;
-   }
-
-   return ret;
-}
-
-int 
-edg_wll_gss_connect(gss_cred_id_t cred, char const *hostname, int port,
-                   struct timeval *timeout, edg_wll_GssConnection *connection,
-                   edg_wll_GssStatus* gss_code)
-{
-   int sock, ret;
-   OM_uint32 maj_stat, min_stat, min_stat2, req_flags;
-   int context_established = 0;
-   gss_buffer_desc input_token = GSS_C_EMPTY_BUFFER;
-   gss_buffer_desc output_token = GSS_C_EMPTY_BUFFER;
-   gss_name_t server = GSS_C_NO_NAME;
-   gss_ctx_id_t context = GSS_C_NO_CONTEXT;
-   char *servername = NULL;
-
-   maj_stat = min_stat = min_stat2 = req_flags = 0;
-
-   /* GSI specific */
-   req_flags = GSS_C_GLOBUS_SSL_COMPATIBLE;
-
-   ret = do_connect(&sock, hostname, port, timeout);
-   if (ret)
-      return ret;
-
-   /* XXX find appropriate fqdn */
-   asprintf (&servername, "host@%s", hostname);
-   if (servername == NULL) {
-      errno = ENOMEM;
-      ret = EDG_WLL_GSS_ERROR_ERRNO;
-      goto end;
-   }
-   input_token.value = servername;
-   input_token.length = strlen(servername) + 1;
-
-   maj_stat = gss_import_name(&min_stat, &input_token,
-                             GSS_C_NT_HOSTBASED_SERVICE, &server);
-   if (GSS_ERROR(maj_stat)) {
-      ret = EDG_WLL_GSS_ERROR_GSS;
-      goto end;
-   }
-
-   free(servername);
-   memset(&input_token, 0, sizeof(input_token));
-
-   /* XXX if cred == GSS_C_NO_CREDENTIAL set the ANONYMOUS flag */
-
-   /* XXX prepsat na do {} while (maj_stat == CONT) a osetrit chyby*/
-   while (!context_established) {
-      /* XXX verify ret_flags match what was requested */
-      maj_stat = gss_init_sec_context(&min_stat, cred, &context,
-                                     GSS_C_NO_NAME, GSS_C_NO_OID,
-                                     req_flags | GSS_C_MUTUAL_FLAG,
-                                     0, GSS_C_NO_CHANNEL_BINDINGS,
-                                     &input_token, NULL, &output_token,
-                                     NULL, NULL);
-      if (input_token.length > 0) {
-        free(input_token.value);
-        input_token.length = 0;
-      }
-
-      if (output_token.length != 0) {
-        ret = send_token(sock, output_token.value, output_token.length, timeout);
-        gss_release_buffer(&min_stat2, &output_token);
-        if (ret)
-           goto end;
-      }
-
-      if (GSS_ERROR(maj_stat)) {
-        if (context != GSS_C_NO_CONTEXT) {
-           /* XXX send closing token to the friend */
-           gss_delete_sec_context(&min_stat2, &context, GSS_C_NO_BUFFER);
-           context = GSS_C_NO_CONTEXT;
-        }
-        ret = EDG_WLL_GSS_ERROR_GSS;
-        goto end;
-      }
-
-      if(maj_stat & GSS_S_CONTINUE_NEEDED) {
-        ret = recv_token(sock, &input_token.value, &input_token.length, timeout);
-        if (ret)
-           goto end;
-      } else
-        context_established = 1;
-   }
-
-   /* XXX check ret_flags matches to what was requested */
-
-   memset(connection, 0, sizeof(*connection));
-   connection->sock = sock;
-   connection->context = context;
-   servername = NULL;
-   ret = 0;
-
-end:
-   if (ret == EDG_WLL_GSS_ERROR_GSS && gss_code) {
-      gss_code->major_status = maj_stat;
-      gss_code->minor_status = min_stat;
-   }
-   if (server != GSS_C_NO_NAME)
-      gss_release_name(&min_stat2, &server);
-   if (servername == NULL)
-      free(servername);
-   if (ret)
-      close(sock);
-
-   return ret;
-}
-
-int
-edg_wll_gss_accept(gss_cred_id_t cred, int sock, struct timeval *timeout,
-                  edg_wll_GssConnection *connection, edg_wll_GssStatus* gss_code)
-{
-   OM_uint32 maj_stat, min_stat, min_stat2;
-   OM_uint32 ret_flags = 0;
-   gss_buffer_desc input_token = GSS_C_EMPTY_BUFFER;
-   gss_buffer_desc output_token = GSS_C_EMPTY_BUFFER;
-   gss_name_t client_name = GSS_C_NO_NAME;
-   gss_ctx_id_t context = GSS_C_NO_CONTEXT;
-   int ret;
-
-   maj_stat = min_stat = min_stat2 = 0;
-
-   /* GSI specific */
-   ret_flags = GSS_C_GLOBUS_SSL_COMPATIBLE;
-
-   do {
-      ret = recv_token(sock, &input_token.value, &input_token.length, timeout);
-      if (ret)
-        goto end;
-
-      maj_stat = gss_accept_sec_context(&min_stat, &context,
-                                       cred, &input_token,
-                                       GSS_C_NO_CHANNEL_BINDINGS,
-                                       &client_name, NULL, &output_token,
-                                       &ret_flags, NULL, NULL);
-      if (input_token.length > 0) {
-        free(input_token.value);
-        input_token.length = 0;
-      }
-
-      if (output_token.length) {
-        ret = send_token(sock, output_token.value, output_token.length, timeout);
-        gss_release_buffer(&min_stat2, &output_token);
-        if (ret)
-           goto end;
-      }
-   } while(maj_stat & GSS_S_CONTINUE_NEEDED);
-
-   if (GSS_ERROR(maj_stat)) {
-      if (context != GSS_C_NO_CONTEXT) {
-        /* XXX send closing token to the friend */
-        gss_delete_sec_context(&min_stat2, &context, GSS_C_NO_BUFFER);
-        context = GSS_C_NO_CONTEXT;
-      }
-      ret = EDG_WLL_GSS_ERROR_GSS;
-      goto end;
-   }
-
-   maj_stat = gss_display_name(&min_stat, client_name, &output_token, NULL);
-   if (GSS_ERROR(maj_stat)) {
-      /* XXX close context ??? */
-      ret = EDG_WLL_GSS_ERROR_GSS;
-      goto end;
-   }
-
-   memset(connection, 0, sizeof(*connection));
-   connection->sock = sock;
-   connection->context = context;
-   memset(&output_token, 0, sizeof(output_token.value));
-   ret = 0;
-
-end:
-   if (ret == EDG_WLL_GSS_ERROR_GSS && gss_code) {
-      gss_code->major_status = maj_stat;
-      gss_code->minor_status = min_stat;
-   }
-   if (client_name != GSS_C_NO_NAME)
-      gss_release_name(&min_stat2, &client_name);
-
-   return ret;
-}
-
-int
-edg_wll_gss_write(edg_wll_GssConnection *connection, const void *buf, size_t bufsize,
-                 struct timeval *timeout, edg_wll_GssStatus* gss_code)
-{
-   OM_uint32  maj_stat, min_stat;
-   gss_buffer_desc  input_token;
-   gss_buffer_desc  output_token;
-   int  ret;
-
-   input_token.value = (void*)buf;
-   input_token.length = bufsize;
-
-   maj_stat = gss_wrap (&min_stat, connection->context, 0, GSS_C_QOP_DEFAULT,
-                       &input_token, NULL, &output_token);
-   if (GSS_ERROR(maj_stat)) {
-      if (gss_code) {
-        gss_code->minor_status = min_stat;
-        gss_code->major_status = maj_stat;
-      }
-
-      return EDG_WLL_GSS_ERROR_GSS;
-   }
-
-   ret = send_token(connection->sock, output_token.value, output_token.length,
-                   timeout);
-   gss_release_buffer(&min_stat, &output_token);
-
-   return ret;
-}
-
-
-int
-edg_wll_gss_read(edg_wll_GssConnection *connection, void *buf, size_t bufsize,
-                struct timeval *timeout, edg_wll_GssStatus* gss_code)
-{
-   OM_uint32 maj_stat, min_stat;
-   gss_buffer_desc input_token;
-   gss_buffer_desc output_token;
-   int ret, i;
-
-   if (connection->bufsize > 0) {
-      size_t len;
-      
-      len = (connection->bufsize < bufsize) ? connection->bufsize : bufsize;
-      memcpy(buf, connection->buffer, len);
-      connection->bufsize -= len;
-      if (connection->bufsize > 0) {
-        for (i = 0; i < sizeof(connection->buffer) - len; i++)
-           connection->buffer[i] = connection->buffer[i+len];
-      }
-
-      return len;
-   }
-
-   do {
-      ret = recv_token(connection->sock, &input_token.value, &input_token.length,
-                      timeout);
-      if (ret)
-        /* XXX cleanup */
-        return ret;
-
-      maj_stat = gss_unwrap(&min_stat, connection->context, &input_token,
-                           &output_token, NULL, NULL);
-      if (GSS_ERROR(maj_stat)) {
-        /* XXX cleanup */
-        return EDG_WLL_GSS_ERROR_GSS;
-      }
-   } while (maj_stat == 0 && output_token.length == 0 && output_token.value == NULL);
-
-   if (output_token.length > bufsize) {
-      if (output_token.length - bufsize > sizeof(connection->buffer))
-        return EINVAL;
-      connection->bufsize = output_token.length - bufsize;
-      memcpy(connection->buffer, output_token.value + bufsize, connection->bufsize);
-      output_token.length = bufsize;
-   }
-   memcpy(buf, output_token.value, output_token.length);
-
-   return output_token.length;
-}
-
-int
-edg_wll_gss_read_full(edg_wll_GssConnection *connection, void *buf, 
-                             size_t bufsize, struct timeval *timeout, size_t *total,
-                     edg_wll_GssStatus* gss_code)
-{
-   int     len,i;
-   *total = 0;
-
-   if (connection->bufsize > 0) {
-      size_t len;
-
-
-      len = (connection->bufsize < bufsize) ? connection->bufsize : bufsize;
-      memcpy(buf, connection->buffer, len);
-      connection->bufsize -= len;
-      if (connection->bufsize > 0) {
-         for (i = 0; i < sizeof(connection->buffer) - len; i++)
-            connection->buffer[i] = connection->buffer[i+len];
-      }
-      *total = len;
-   }
-
-   while (*total < bufsize) {
-      len = edg_wll_gss_read(connection, buf+*total, bufsize-*total,
-                            timeout, gss_code);
-      if (len < 0) return len;
-      *total += len;
-   }
-
-   return 0;
-}
-
-int
-edg_wll_gss_write_full(edg_wll_GssConnection *connection, const void *buf,
-                       size_t bufsize, struct timeval *timeout, size_t *total,
-                      edg_wll_GssStatus* gss_code)
-{
-   return edg_wll_gss_write(connection, buf, bufsize, timeout, gss_code);
-}
-
-/* XXX: I'm afraid the contents of stuct stat is somewhat OS dependent */
-int
-edg_wll_gss_watch_creds(const char *proxy_file, time_t *proxy_mtime)
-{
-       struct stat     pstat;
-       int     reload = 0;
-
-       if (!proxy_file) return 0;
-       if (stat(proxy_file,&pstat)) return -1;
-
-       if (!*proxy_mtime) *proxy_mtime = pstat.st_mtime;
-
-       if (*proxy_mtime != pstat.st_mtime) {
-               *proxy_mtime = pstat.st_mtime;
-               reload = 1;
-       }
-
-       return reload;
-}
-
-int
-edg_wll_gss_close(edg_wll_GssConnection *con, struct timeval *timeout)
-{
-   OM_uint32 min_stat;
-
-   /* XXX if timeout is NULL use value of 120 secs */
-
-   if (con->context != GSS_C_NO_CONTEXT) {
-      gss_delete_sec_context(&min_stat, &con->context, GSS_C_NO_BUFFER);
-      /* XXX send the buffer (if any) to the peer. GSSAPI specs doesn't
-       * recommend sending it, though */
-
-      /* XXX can socket be open even if context == GSS_C_NO_CONTEXT) ? */
-      /* XXX ensure that edg_wll_GssConnection is created with sock set to -1 */
-      if (con->sock >= 0)
-        close(con->sock);
-   }
-   memset(con, 0, sizeof(*con));
-   con->context = GSS_C_NO_CONTEXT;
-   con->sock = -1;
-   return 0;
-}
-
-int
-edg_wll_gss_get_error(edg_wll_GssStatus *gss_err, const char *prefix, char **msg)
-{
-   OM_uint32 maj_stat, min_stat;
-   OM_uint32 msg_ctx = 0;
-   gss_buffer_desc maj_status_string = GSS_C_EMPTY_BUFFER;
-   gss_buffer_desc min_status_string = GSS_C_EMPTY_BUFFER;
-   char *str = NULL;
-   char *line, *tmp;
-
-   str = strdup(prefix);
-   do {
-      maj_stat = gss_display_status(&min_stat, gss_err->major_status,
-                                   GSS_C_GSS_CODE, GSS_C_NO_OID,
-                                   &msg_ctx, &maj_status_string);
-      if (GSS_ERROR(maj_stat))
-        break;
-
-      maj_stat = gss_display_status(&min_stat, gss_err->minor_status,
-                                   GSS_C_MECH_CODE, GSS_C_NULL_OID,
-                                   &msg_ctx, &min_status_string);
-      if (GSS_ERROR(maj_stat)) {
-        gss_release_buffer(&min_stat, &maj_status_string);
-        break;
-      }
-
-      asprintf(&line, ": %s (%s)", (char *)maj_status_string.value,
-              (char *)min_status_string.value);
-      gss_release_buffer(&min_stat, &maj_status_string);
-      gss_release_buffer(&min_stat, &min_status_string);
-
-      tmp = realloc(str, strlen(str) + strlen(line) + 1);
-      if (tmp == NULL) {
-         /* abort() ? */
-        free(line);
-        free(str);
-        str = "WARNING: Not enough memory to produce error message";
-        break;
-      }
-      str = tmp;
-      strcat(str, line);
-      free(line);
-   } while (!GSS_ERROR(maj_stat) && msg_ctx != 0);
-
-   *msg = str;
-   return 0;
-}
-
-int
-edg_wll_gss_oid_equal(const gss_OID a, const gss_OID b)
-{
-   if (a == b)
-      return 1;
-   else {
-      if (a == GSS_C_NO_OID || b == GSS_C_NO_OID || a->length != b->length)
-        return 0;
-      else
-        return (memcmp(a->elements, b->elements, a->length) == 0);
-   }
-}
-
-int 
-edg_wll_gss_reject(int sock)
-{
-   /* XXX is it possible to cut & paste edg_wll_ssl_reject() ? */
-   return 0;
-}
diff --git a/org.glite.lb.common/src/lb_plain_io.c b/org.glite.lb.common/src/lb_plain_io.c
deleted file mode 100644 (file)
index f197c9b..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-#include <string.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <time.h>
-#include <stdlib.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <netdb.h>
-#include <netinet/in.h>
-#include <errno.h>
-
-#include "lb_plain_io.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;\
-       }\
-}
-
-#define bufshift(conn, shift) { \
-       memmove((conn)->buf, (conn)->buf+(shift), (conn)->bufUse-(shift)); \
-       (conn)->bufUse -= (shift); \
-}
-
-int edg_wll_plain_connect(
-       char const                                 *hostname,
-       int                                                     port,
-       struct timeval                     *to,
-       edg_wll_PlainConnection    *conn)
-{
-       return 0;
-}
-
-int edg_wll_plain_accept(
-       int                                                     sock,
-       edg_wll_PlainConnection    *conn)
-{
-       /* Do not free the buffer here - just reuse the memmory
-        */
-       conn->bufUse = 0;
-       conn->sock = sock;
-       return 0;
-}
-
-int edg_wll_plain_close(edg_wll_PlainConnection *conn)
-{
-       errno = 0;
-       if ( conn->buf ) free(conn->buf);
-       if ( conn->sock > -1 ) close(conn->sock);
-       memset(conn, 0, sizeof(*conn));
-       conn->sock = -1;
-
-       return errno? -1: 0;
-}
-
-int edg_wll_plain_read(
-       edg_wll_PlainConnection    *conn,
-       void                               *outbuf,
-       size_t                                  outbufsz,
-       struct timeval             *to)
-{
-       int                             ct, toread = 0;
-       fd_set                  fds;
-       struct timeval  timeout, before, after;
-
-
-       if ( conn->bufSize == 0 ) {
-               if ( !(conn->buf = malloc(BUFSIZ)) ) return -1;
-               conn->bufSize = BUFSIZ;
-               conn->bufUse = 0;
-       }
-
-       if ( to ) {
-               memcpy(&timeout, to, sizeof(timeout));
-               gettimeofday(&before, NULL);
-       }
-
-       errno = 0;
-
-       if ( conn->bufUse > 0 ) goto cleanup;
-
-       toread = 0;
-       do {
-               FD_ZERO(&fds);
-               FD_SET(conn->sock, &fds);
-               switch (select(conn->sock+1, &fds, NULL, NULL, to ? &timeout : NULL)) {
-               case 0: errno = ETIMEDOUT; goto cleanup; break;
-               case -1: goto cleanup; break;
-               }
-
-               if ( conn->bufUse == conn->bufSize ) {
-                       char *tmp = realloc(conn->buf, conn->bufSize+BUFSIZ);
-                       if ( !tmp ) return -1;
-                       conn->buf = tmp;
-                       conn->bufSize += BUFSIZ;
-               }
-               toread = conn->bufSize - conn->bufUse;
-               if ( (ct = read(conn->sock, conn->buf+conn->bufUse, toread)) < 0 ) {
-                       if ( errno == EINTR ) continue;
-                       goto cleanup;
-               }
-
-               if ( ct == 0 && conn->bufUse == 0 && errno == 0 ) {
-                       errno = ENOTCONN;
-                       goto cleanup;
-               }
-
-               conn->bufUse += ct;
-       } while ( ct == toread );
-
-
-cleanup:
-       if ( to ) {
-               gettimeofday(&after, NULL);
-               tv_sub(after, before);
-               tv_sub(*to, after);
-               if ( to->tv_sec < 0 ) to->tv_sec = to->tv_usec = 0;
-       }
-
-       if ( errno ) return -1;
-
-       if ( conn->bufUse > 0 ) {
-               size_t len = (conn->bufUse < outbufsz) ? conn->bufUse : outbufsz;
-               memcpy(outbuf, conn->buf, len);
-               outbufsz = len;
-               bufshift(conn, len);
-               return len;
-       }
-
-       return 0;
-}
-
-
-int edg_wll_plain_read_full(
-       edg_wll_PlainConnection    *conn,
-       void                                       *outbuf,
-       size_t                                          outbufsz,
-       struct timeval                     *to)
-{
-       size_t          total = 0;
-
-
-       if ( conn->bufUse > 0 ) {
-               size_t len = (conn->bufUse < outbufsz) ? conn->bufUse : outbufsz;
-               memcpy(outbuf, conn->buf, len);
-               outbufsz = len;
-               bufshift(conn, len);
-               total += len;
-       }
-
-       while ( total < outbufsz ) {
-               int ct = edg_wll_plain_read(conn, outbuf+total, outbufsz-total, to);
-               if ( ct < 0) return ct;
-               total += ct;
-       }
-
-       return total;
-}
-
-int edg_wll_plain_write_full(
-       edg_wll_PlainConnection    *conn,
-       const void                                 *buf,
-       size_t                                          bufsz,
-       struct timeval                     *to)
-{
-       size_t                  written = 0;
-       int                             ct = -1;
-       fd_set                  fds;
-       struct timeval  timeout, before, after;
-
-
-       if ( to ) {
-               memcpy(&timeout, to, sizeof(timeout));
-               gettimeofday(&before, NULL);
-       }
-
-       errno = 0;
-       while ( written < bufsz ) {
-               FD_ZERO(&fds);
-               FD_SET(conn->sock, &fds);
-
-               switch ( select(conn->sock+1, NULL, &fds, NULL, to? &timeout: NULL) ) {
-                       case 0: errno = ETIMEDOUT; goto end; break;
-                       case -1: goto end; break;
-               }
-               if ( (ct=write(conn->sock, ((char*)buf)+written, bufsz-written)) < 0 ) {
-                       if ( errno == EINTR ) { errno = 0; continue; }
-                       else goto end;
-               }
-               written += ct;
-       }
-
-end:
-       if ( to ) {
-               gettimeofday(&after, NULL);
-               tv_sub(after, before);
-               tv_sub(*to, after);
-               if (to->tv_sec < 0) to->tv_sec = to->tv_usec = 0;
-       }
-
-       return (errno)? -1: written;
-}
diff --git a/org.glite.lb.common/src/mini_http.c b/org.glite.lb.common/src/mini_http.c
deleted file mode 100644 (file)
index 7e86628..0000000
+++ /dev/null
@@ -1,373 +0,0 @@
-#ident "$Header$"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <signal.h>
-#include <assert.h>
-#include <fcntl.h>
-#include <syslog.h>
-
-#include "globus_config.h"
-
-#include "mini_http.h"
-#include "lb_gss.h"
-#include "lb_plain_io.h"
-#include "context-int.h"
-
-#define min(x,y)       ((x) < (y) ? (x) : (y))
-#define CONTENT_LENGTH "Content-Length:"
-
-edg_wll_ErrorCode edg_wll_http_recv(edg_wll_Context ctx,char **firstOut,char ***hdrOut,char **bodyOut)
-{
-       char    **hdr = NULL,*first = NULL,*body = NULL;
-       enum    { FIRST, HEAD, BODY, DONE }     pstat = FIRST;
-       int     len, nhdr = 0,rdmore = 0,clen = 0,blen = 0;
-       int     sock;
-       edg_wll_GssStatus gss_code;
-
-#define bshift(shift) {\
-       memmove(ctx->connPool[ctx->connToUse].buf,ctx->connPool[ctx->connToUse].buf+(shift),ctx->connPool[ctx->connToUse].bufUse-(shift));\
-       ctx->connPool[ctx->connToUse].bufUse -= (shift);\
-}
-       edg_wll_ResetError(ctx);
-
-       if (ctx->connPool[ctx->connToUse].gss.context != GSS_C_NO_CONTEXT)
-               sock = ctx->connPool[ctx->connToUse].gss.sock;
-       else {
-               edg_wll_SetError(ctx,ENOTCONN,NULL);
-               goto error;
-       }
-
-       if (!ctx->connPool[ctx->connToUse].buf) ctx->connPool[ctx->connToUse].buf = malloc(ctx->connPool[ctx->connToUse].bufSize = BUFSIZ);
-
-       do {
-               len = edg_wll_gss_read(&ctx->connPool[ctx->connToUse].gss,
-                       ctx->connPool[ctx->connToUse].buf+ctx->connPool[ctx->connToUse].bufUse,ctx->connPool[ctx->connToUse].bufSize-ctx->connPool[ctx->connToUse].bufUse,&ctx->p_tmp_timeout, &gss_code);
-
-               switch (len) {
-                       case EDG_WLL_GSS_OK:
-                               break;
-                       case EDG_WLL_GSS_ERROR_GSS:
-                               edg_wll_SetErrorGss(ctx, "receving HTTP request", &gss_code);
-                               goto error;
-                       case EDG_WLL_GSS_ERROR_ERRNO:
-                               edg_wll_SetError(ctx,errno,"edg_wll_gss_read()");
-                               goto error;
-                       case EDG_WLL_GSS_ERROR_TIMEOUT:
-                               edg_wll_SetError(ctx,ETIMEDOUT,NULL);
-                               goto error; 
-                       case EDG_WLL_GSS_ERROR_EOF:
-                               edg_wll_SetError(ctx,ENOTCONN,NULL);
-                               goto error; 
-                       /* default: fallthrough */
-               }
-
-
-               ctx->connPool[ctx->connToUse].bufUse += len;
-               rdmore = 0;
-
-               while (!rdmore && pstat != DONE) switch (pstat) {
-                       char    *cr; 
-
-                       case FIRST:
-                               if ((cr = memchr(ctx->connPool[ctx->connToUse].buf,'\r',ctx->connPool[ctx->connToUse].bufUse)) &&
-                                       ctx->connPool[ctx->connToUse].bufUse >= cr-ctx->connPool[ctx->connToUse].buf+2 && cr[1] == '\n')
-                               {
-                                       *cr = 0;
-                                       first = strdup(ctx->connPool[ctx->connToUse].buf);
-                                       bshift(cr-ctx->connPool[ctx->connToUse].buf+2);
-                                       pstat = HEAD;
-                               } else rdmore = 1;
-                               break;
-                       case HEAD:
-                               if ((cr = memchr(ctx->connPool[ctx->connToUse].buf,'\r',ctx->connPool[ctx->connToUse].bufUse)) &&
-                                       ctx->connPool[ctx->connToUse].bufUse >= cr-ctx->connPool[ctx->connToUse].buf+2 && cr[1] == '\n')
-                               {
-                                       if (cr == ctx->connPool[ctx->connToUse].buf) {
-                                               bshift(2);
-                                               pstat = clen ? BODY : DONE;
-                                               if (clen) body = malloc(clen+1);
-                                               break;
-                                       }
-
-                                       *cr = 0;
-                                       hdr = realloc(hdr,(nhdr+2) * sizeof(*hdr));
-                                       hdr[nhdr] = strdup(ctx->connPool[ctx->connToUse].buf);
-                                       hdr[++nhdr] = NULL;
-
-                                       if (!strncasecmp(ctx->connPool[ctx->connToUse].buf,CONTENT_LENGTH,sizeof(CONTENT_LENGTH)-1))
-                                               clen = atoi(ctx->connPool[ctx->connToUse].buf+sizeof(CONTENT_LENGTH)-1);
-       
-                                       bshift(cr-ctx->connPool[ctx->connToUse].buf+2);
-                               } else rdmore = 1;
-                               break;
-                       case BODY:
-                               if (ctx->connPool[ctx->connToUse].bufUse) {
-                                       int     m = min(ctx->connPool[ctx->connToUse].bufUse,clen-blen);
-                                       memcpy(body+blen,ctx->connPool[ctx->connToUse].buf,m);
-                                       blen += m;
-                                       bshift(m);
-                               }
-                               rdmore = 1;
-                               if (blen == clen) {
-                                       pstat = DONE;
-                                       body[blen] = 0;
-                               }
-                               break;
-                       default:
-                               break;
-               }
-       } while (pstat != DONE);
-
-error:
-       if (edg_wll_Error(ctx,NULL,NULL)) {
-               if (hdr) {
-                       char    **h;
-                       for (h = hdr; *h; h++) free(*h);
-                       free(hdr);
-               }
-               free(first);
-               free(body);
-       } else {
-               if (firstOut) *firstOut = first; else free(first);
-               if (hdrOut) *hdrOut = hdr; 
-               else if (hdr) {
-                       char    **h;
-                       for (h = hdr; *h; h++) free(*h);
-                       free(hdr);
-               }
-               if (bodyOut) *bodyOut = body; else free(body);
-       }
-
-       return edg_wll_Error(ctx,NULL,NULL);
-
-#undef bshift
-}
-
-edg_wll_ErrorCode edg_wll_http_recv_proxy(edg_wll_Context ctx,char **firstOut,char ***hdrOut,char **bodyOut)
-{
-       char    **hdr = NULL,*first = NULL,*body = NULL;
-       enum    { FIRST, HEAD, BODY, DONE }     pstat = FIRST;
-       int             len, nhdr = 0,rdmore = 0,clen = 0,blen = 0;
-
-#define bshift(shift) {\
-       memmove(ctx->connProxy->buf,\
-                       ctx->connProxy->buf+(shift),\
-                       ctx->connProxy->bufUse-(shift));\
-       ctx->connProxy->bufUse -= (shift);\
-}
-       edg_wll_ResetError(ctx);
-
-       if ( !ctx->connProxy->buf ) {
-               ctx->connProxy->bufSize = BUFSIZ;
-               ctx->connProxy->bufUse = 0;
-               ctx->connProxy->buf = malloc(BUFSIZ);
-       }
-
-       do {
-               len = edg_wll_plain_read(&ctx->connProxy->conn,
-                               ctx->connProxy->buf+ctx->connProxy->bufUse,
-                               ctx->connProxy->bufSize-ctx->connProxy->bufUse,
-                               &ctx->p_tmp_timeout);
-               if ( len < 0 ) {
-                       edg_wll_SetError(ctx, errno, "edg_wll_plain_read()");
-                       goto error;
-               }
-
-               ctx->connProxy->bufUse += len;
-               rdmore = 0;
-
-               while (!rdmore && pstat != DONE) switch (pstat) {
-                       char    *cr; 
-
-                       case FIRST:
-                               if ((cr = memchr(ctx->connProxy->buf,'\r',ctx->connProxy->bufUse)) &&
-                                       ctx->connProxy->bufUse >= cr-ctx->connProxy->buf+2 && cr[1] == '\n')
-                               {
-                                       *cr = 0;
-                                       first = strdup(ctx->connProxy->buf);
-                                       bshift(cr-ctx->connProxy->buf+2);
-                                       pstat = HEAD;
-                               } else rdmore = 1;
-                               break;
-                       case HEAD:
-                               if ((cr = memchr(ctx->connProxy->buf,'\r',ctx->connProxy->bufUse)) &&
-                                       ctx->connProxy->bufUse >= cr-ctx->connProxy->buf+2 && cr[1] == '\n')
-                               {
-                                       if (cr == ctx->connProxy->buf) {
-                                               bshift(2);
-                                               pstat = clen ? BODY : DONE;
-                                               if (clen) body = malloc(clen+1);
-                                               break;
-                                       }
-
-                                       *cr = 0;
-                                       hdr = realloc(hdr,(nhdr+2) * sizeof(*hdr));
-                                       hdr[nhdr] = strdup(ctx->connProxy->buf);
-                                       hdr[++nhdr] = NULL;
-
-                                       if (!strncasecmp(ctx->connProxy->buf,CONTENT_LENGTH,sizeof(CONTENT_LENGTH)-1))
-                                               clen = atoi(ctx->connProxy->buf+sizeof(CONTENT_LENGTH)-1);
-       
-                                       bshift(cr-ctx->connProxy->buf+2);
-                               } else rdmore = 1;
-                               break;
-                       case BODY:
-                               if (ctx->connProxy->bufUse) {
-                                       int     m = min(ctx->connProxy->bufUse,clen-blen);
-                                       memcpy(body+blen,ctx->connProxy->buf,m);
-                                       blen += m;
-                                       bshift(m);
-                               }
-                               rdmore = 1;
-                               if (blen == clen) {
-                                       pstat = DONE;
-                                       body[blen] = 0;
-                               }
-                               break;
-                       default:
-                               break;
-               }
-       } while (pstat != DONE);
-
-error:
-       if (edg_wll_Error(ctx,NULL,NULL)) {
-               if (hdr) {
-                       char    **h;
-                       for (h = hdr; *h; h++) free(*h);
-                       free(hdr);
-               }
-               free(first);
-               free(body);
-       } else {
-               if (firstOut) *firstOut = first; else free(first);
-               if (hdrOut) *hdrOut = hdr; 
-               else if (hdr) {
-                       char    **h;
-                       for (h = hdr; *h; h++) free(*h);
-                       free(hdr);
-               }
-               if (bodyOut) *bodyOut = body; else free(body);
-       }
-
-       return edg_wll_Error(ctx,NULL,NULL);
-
-#undef bshift
-}
-
-static int real_write(edg_wll_Context ctx, edg_wll_GssConnection *con,const char *data,int len)
-{
-       size_t  total = 0;
-       struct sigaction        sa,osa;
-       edg_wll_GssStatus       gss_code;
-       int     ret;
-
-       memset(&sa,0,sizeof(sa)); assert(sa.sa_handler == NULL);
-       sa.sa_handler = SIG_IGN;
-       sigaction(SIGPIPE,&sa,&osa);
-
-       ret = edg_wll_gss_write_full(con, (void*)data, len, &ctx->p_tmp_timeout,
-                                    &total, &gss_code);
-       sigaction(SIGPIPE,&osa,NULL);
-
-       switch(ret) {
-          case EDG_WLL_GSS_OK:
-             return 0;
-          case EDG_WLL_GSS_ERROR_EOF:
-             errno = ENOTCONN;
-             return -1;
-          case EDG_WLL_GSS_ERROR_TIMEOUT:
-             errno = ETIMEDOUT;
-             return -1;
-          case EDG_WLL_GSS_ERROR_ERRNO:
-             if (errno == EPIPE) errno = ENOTCONN;
-             return -1;
-          case EDG_WLL_GSS_ERROR_GSS:
-             errno = EDG_WLL_ERROR_GSS;
-             return -1;
-          default:
-             /* XXX DK: */
-             errno = ENOTCONN;
-             return -1;
-       }
-}
-
-edg_wll_ErrorCode edg_wll_http_send(edg_wll_Context ctx,const char *first,const char * const *head,const char *body)
-{
-       const char* const *h;
-       int     len = 0, blen;
-
-       edg_wll_ResetError(ctx);
-
-       if (ctx->connPool[ctx->connToUse].gss.context == GSS_C_NO_CONTEXT)
-          return edg_wll_SetError(ctx,ENOTCONN,NULL);
-
-       if (real_write(ctx,&ctx->connPool[ctx->connToUse].gss,first,strlen(first)) < 0 ||
-               real_write(ctx,&ctx->connPool[ctx->connToUse].gss,"\r\n",2) < 0) 
-               return edg_wll_SetError(ctx,errno,"edg_wll_http_send()");
-
-       if (head) for (h=head; *h; h++) 
-               if (real_write(ctx,&ctx->connPool[ctx->connToUse].gss,*h,strlen(*h)) < 0 ||
-                       real_write(ctx,&ctx->connPool[ctx->connToUse].gss,"\r\n",2) < 0) 
-                       return edg_wll_SetError(ctx,errno,"edg_wll_http_send()");
-
-       if (body) {
-               char    buf[100];
-
-               len = strlen(body);
-               blen = sprintf(buf,CONTENT_LENGTH " %d\r\n",len);
-               if (real_write(ctx,&ctx->connPool[ctx->connToUse].gss,buf,blen) < 0) 
-                       return edg_wll_SetError(ctx,errno,"edg_wll_http_send()");
-       }
-
-       if (real_write(ctx,&ctx->connPool[ctx->connToUse].gss,"\r\n",2) < 0) 
-               return edg_wll_SetError(ctx,errno,"edg_wll_http_send()");
-       if (body && real_write(ctx,&ctx->connPool[ctx->connToUse].gss,body,len) < 0)  
-               return edg_wll_SetError(ctx,errno,"edg_wll_http_send()");
-
-       return edg_wll_Error(ctx,NULL,NULL);
-}
-
-edg_wll_ErrorCode edg_wll_http_send_proxy(edg_wll_Context ctx, const char *first, const char * const *head, const char *body)
-{
-       const char* const *h;
-       int     len = 0, blen;
-
-
-       edg_wll_ResetError(ctx);
-
-       if (   edg_wll_plain_write_full(&ctx->connProxy->conn,
-                                                       first, strlen(first), &ctx->p_tmp_timeout) < 0
-               || edg_wll_plain_write_full(&ctx->connProxy->conn,
-                                                       "\r\n", 2, &ctx->p_tmp_timeout) < 0 ) 
-               return edg_wll_SetError(ctx, errno, "edg_wll_http_send()");
-
-       if ( head ) for ( h = head; *h; h++ )
-               if (   edg_wll_plain_write_full(&ctx->connProxy->conn,
-                                                       *h, strlen(*h), &ctx->p_tmp_timeout) < 0
-                       || edg_wll_plain_write_full(&ctx->connProxy->conn,
-                                                       "\r\n", 2, &ctx->p_tmp_timeout) < 0 )
-                       return edg_wll_SetError(ctx, errno, "edg_wll_http_send()");
-
-       if ( body ) {
-               char    buf[100];
-
-               len = strlen(body);
-               blen = sprintf(buf, CONTENT_LENGTH " %d\r\n",len);
-               if (edg_wll_plain_write_full(&ctx->connProxy->conn,
-                                                       buf, blen, &ctx->p_tmp_timeout) < 0) 
-                       return edg_wll_SetError(ctx, errno, "edg_wll_http_send()");
-       }
-
-       if ( edg_wll_plain_write_full(&ctx->connProxy->conn,
-                                                       "\r\n", 2, &ctx->p_tmp_timeout) < 0) 
-               return edg_wll_SetError(ctx, errno, "edg_wll_http_send()");
-       if ( body && edg_wll_plain_write_full(&ctx->connProxy->conn,
-                                                       body, len, &ctx->p_tmp_timeout) < 0)  
-               return edg_wll_SetError(ctx, errno, "edg_wll_http_send()");
-
-       return edg_wll_Error(ctx,NULL,NULL);
-}
diff --git a/org.glite.lb.common/src/notifid.c b/org.glite.lb.common/src/notifid.c
deleted file mode 100644 (file)
index 8a1d5fe..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "glite/wmsutils/jobid/cjobid.h"
-#include "glite/lb/notifid.h"
-
-int edg_wll_NotifIdParse(const char *s,edg_wll_NotifId *n)
-{
-       edg_wlc_JobId   j;
-       int             ret = edg_wlc_JobIdParse(s,&j);
-
-       if (!ret) *n = (edg_wll_NotifId) j; 
-       return ret;
-}
-
-char* edg_wll_NotifIdUnparse(const edg_wll_NotifId n)
-{
-       return edg_wlc_JobIdUnparse((edg_wlc_JobId) n);
-}
-
-int edg_wll_NotifIdCreate(const char *server,int port,edg_wll_NotifId *n)
-{
-       edg_wlc_JobId   j,j2;
-       int     ret = edg_wlc_JobIdCreate(server,port,&j);
-       char    *u,*u2;
-
-       if (!ret) {
-               u = edg_wlc_JobIdGetUnique(j);
-               asprintf(&u2,"NOTIF:%s",u);
-               free(u);
-               ret = edg_wlc_JobIdRecreate(server,port,u2,&j2);
-               free(u2);
-               edg_wlc_JobIdFree(j);
-               if (!ret) *n = (edg_wll_NotifId) j2;
-       }
-
-       return ret;
-}
-
-int edg_wll_NotifIdSetUnique(edg_wll_NotifId *n, const char *un)
-{
-       char               *aux, *srv;
-       int                             ret;
-       unsigned int    port;
-
-
-       asprintf(&aux, "NOTIF:%s", un);
-       if ( !aux )
-               return -1;
-
-       edg_wll_NotifIdGetServerParts(*((edg_wlc_JobId *)n), &srv, &port);
-       ret = edg_wlc_JobIdRecreate(srv, port, aux, (edg_wlc_JobId *)n);
-       free(aux);
-       free(srv);
-
-       return ret;
-}
-
-void edg_wll_NotifIdFree(edg_wll_NotifId n)
-{
-       edg_wlc_JobIdFree((edg_wlc_JobId) n);
-}
-
-void edg_wll_NotifIdGetServerParts(const edg_wll_NotifId notifId, char **srvName, unsigned int *srvPort)
-{
-       edg_wlc_JobIdGetServerParts((edg_wlc_JobId) notifId, srvName, srvPort);
-}
-
-char* edg_wll_NotifIdGetUnique(const edg_wll_NotifId notifid)
-{
-       char       *id = edg_wlc_JobIdGetUnique((edg_wlc_JobId)notifid);
-
-       if ( id )
-       {
-               char *s = strchr(id, ':');
-
-               if ( s )
-               {
-               char *ret = strdup(s+1);
-                       free(id);
-                       return ret;
-               }
-       }
-
-       free(id);
-       return NULL;
-}
diff --git a/org.glite.lb.common/src/param.c b/org.glite.lb.common/src/param.c
deleted file mode 100644 (file)
index f4a6df0..0000000
+++ /dev/null
@@ -1,458 +0,0 @@
-#include <string.h>
-#include <stdarg.h>
-#include <unistd.h>
-#include <sys/time.h>
-#include <errno.h>
-
-#include <globus_common.h>
-
-#include "glite/wmsutils/jobid/cjobid.h"
-#include "glite/lb/producer.h"
-#include "glite/lb/notification.h"
-#include "context-int.h"
-#include "log_proto.h"
-
-
-/* XXX: must match edg_wll_ContextParam */
-static const char *myenv[] = {
-       "GLOBUS_HOSTNAME",
-       NULL,
-       NULL,
-       NULL,
-       "EDG_WL_LOG_DESTINATION",
-       "EDG_WL_LOG_DESTINATION",
-       "EDG_WL_LOG_TIMEOUT",
-       "EDG_WL_LOG_SYNC_TIMEOUT",
-       "EDG_WL_QUERY_SERVER",
-       "EDG_WL_QUERY_SERVER",
-       "EDG_WL_QUERY_SERVER_OVERRIDE",
-       "EDG_WL_QUERY_TIMEOUT",
-       "EDG_WL_QUERY_JOBS_LIMIT",
-       "EDG_WL_QUERY_EVENTS_LIMIT",
-       "EDG_WL_QUERY_RESULTS",
-       "EDG_WL_QUERY_CONNECTIONS",
-       "EDG_WL_NOTIF_SERVER",
-       "EDG_WL_NOTIF_SERVER",
-       "EDG_WL_NOTIF_TIMEOUT",
-/* don't care about X509_USER_*, GSI looks at them anyway */
-       NULL,
-       NULL,
-       NULL,
-       "EDG_WL_LBPROXY_STORE_SOCK",
-       "EDG_WL_LBPROXY_SERVE_SOCK",
-       "EDG_WL_LBPROXY_USER",
-};
-
-/* XXX: does not parse URL, just hostname[:port] */
-
-static int extract_port(edg_wll_ContextParam param,int dflt)
-{
-       char    *p = NULL,*s = NULL;
-       if (myenv[param]) {
-               s = getenv(myenv[param]);
-               if (s) p = strchr(s,':');
-       }
-       return  p ? atoi(p+1) : dflt;
-}
-
-static int extract_num(edg_wll_ContextParam param,int dflt)
-{
-       if (myenv[param]) {
-               char *s = getenv(myenv[param]);
-               if (s) return(atoi(s));
-       }
-       return dflt;
-}
-
-static char *extract_host(edg_wll_ContextParam param,const char *dflt)
-{
-       char    *p,*s = NULL;
-
-       if (myenv[param]) s = getenv(myenv[param]);
-       if (!s && !dflt) return NULL;
-       s = strdup(s?s:dflt),
-       p = strchr(s,':');
-       if (p) *p = 0;
-       return s;
-}
-
-static void extract_time(edg_wll_ContextParam param,double dflt,struct timeval *t)
-{
-       char    *s = NULL;
-       double  d;
-
-       if (myenv[param]) s = getenv(myenv[param]);
-       d = s ? atof(s) : dflt;
-       t->tv_sec = (long) d;
-       t->tv_usec = (long) ((d-t->tv_sec)*1e6);
-}
-
-static char *extract_split(edg_wll_ContextParam param,char by,int index)
-{
-       int     i;
-       char    *s,*e;
-
-       if (!myenv[param]) return NULL;
-       if (!(s = getenv(myenv[param]))) return NULL;
-       for (i=0; i<index && (s=strchr(s,by));i++) s++;
-       return i==index ? ( (e = strchr(s,by)) ? strndup(s,e-s) : strdup(s))
-                       : NULL;
-}
-
-
-int edg_wll_SetParamString(edg_wll_Context ctx,edg_wll_ContextParam param,const char *val)
-{
-       char    hn[200];
-
-       switch (param) {
-               case EDG_WLL_PARAM_HOST:             
-                       globus_libc_gethostname(hn,sizeof hn);
-                       free(ctx->p_host);
-                       ctx->p_host = val ? strdup(val) : extract_host(param,hn);
-                       break;
-               case EDG_WLL_PARAM_INSTANCE:         
-                       free(ctx->p_instance);
-                       ctx->p_instance = val ? strdup(val) : extract_split(param,'/',1);
-                       break;
-               case EDG_WLL_PARAM_DESTINATION:      
-                       free(ctx->p_destination);
-                       ctx->p_destination = val ? strdup(val) : extract_host(param,EDG_WLL_LOG_HOST_DEFAULT);
-                       break;
-               case EDG_WLL_PARAM_QUERY_SERVER:     
-                       free(ctx->p_query_server);
-                       ctx->p_query_server = val ? strdup(val) : extract_host(param,NULL);
-                       break;
-               case EDG_WLL_PARAM_NOTIF_SERVER:     
-                       free(ctx->p_notif_server);
-                       ctx->p_notif_server = val ? strdup(val) : extract_host(param,NULL);
-                       break;
-               case EDG_WLL_PARAM_X509_PROXY:       
-                       free(ctx->p_proxy_filename);
-                       ctx->p_proxy_filename = val ? strdup(val) : NULL;
-                       break;
-               case EDG_WLL_PARAM_X509_KEY:         
-                       free(ctx->p_key_filename);
-                       ctx->p_key_filename = val ? strdup(val) : NULL;
-                       break;
-               case EDG_WLL_PARAM_X509_CERT:        
-                       free(ctx->p_cert_filename);
-                       ctx->p_cert_filename = val ? strdup(val) : NULL;
-                       break;
-               case EDG_WLL_PARAM_QUERY_SERVER_OVERRIDE:
-                       if (!val) val = getenv(myenv[param]);
-                       if (!val) val = "no";
-                       ctx->p_query_server_override = !strcasecmp(val,"yes");
-                       break;
-               case EDG_WLL_PARAM_LBPROXY_STORE_SOCK:      
-                       free(ctx->p_lbproxy_store_sock);
-                       ctx->p_lbproxy_store_sock = val ? strdup(val): NULL;
-                       break;
-               case EDG_WLL_PARAM_LBPROXY_SERVE_SOCK:      
-                       free(ctx->p_lbproxy_serve_sock);
-                       ctx->p_lbproxy_serve_sock = val ? strdup(val): NULL;
-                       break;
-               case EDG_WLL_PARAM_LBPROXY_USER:
-                       free(ctx->p_user_lbproxy);
-                       ctx->p_user_lbproxy = val ? strdup(val) : NULL;
-                       break;
-               default:
-                       return edg_wll_SetError(ctx,EINVAL,"unknown parameter");
-       }
-       return edg_wll_ResetError(ctx);
-}
-
-int edg_wll_SetParamInt(edg_wll_Context ctx,edg_wll_ContextParam param,int val)
-{
-       switch (param) {
-               case EDG_WLL_PARAM_LEVEL:
-                       ctx->p_level = val ? val : EDG_WLL_LEVEL_SYSTEM;
-                       break;
-               case EDG_WLL_PARAM_DESTINATION_PORT:
-                       ctx->p_dest_port = val ? val : extract_port(param,EDG_WLL_LOG_PORT_DEFAULT);
-                       break;
-               case EDG_WLL_PARAM_QUERY_SERVER_PORT:
-                       ctx->p_query_server_port = val ? val :
-                               extract_port(param,GLITE_WMSC_JOBID_DEFAULT_PORT);;
-                       break;
-               case EDG_WLL_PARAM_NOTIF_SERVER_PORT:
-                       ctx->p_notif_server_port = val ? val :
-                               extract_port(param,0);;
-                       // XXX: when default port is known, put it here
-                       break;
-               case EDG_WLL_PARAM_QUERY_JOBS_LIMIT:
-                       ctx->p_query_jobs_limit = val ? val :
-                               extract_num(param,0);
-                       break;
-               case EDG_WLL_PARAM_QUERY_EVENTS_LIMIT:
-                       ctx->p_query_events_limit = val ? val :
-                               extract_num(param,0);
-                       break;
-               case EDG_WLL_PARAM_QUERY_RESULTS:
-                       if (val) {
-                               if (val <= EDG_WLL_QUERYRES_UNDEF || val >= EDG_WLL_QUERYRES__LAST)
-                                       return edg_wll_SetError(ctx,EINVAL,"Query result parameter value out of range");
-
-                               ctx->p_query_results = val;
-                       }
-                       else {
-                               char    *s = extract_split(param,'/',0);
-                               if (s) {
-                                       val = edg_wll_StringToQResult(s);
-                                       if (!val) return edg_wll_SetError(ctx,EINVAL,"can't parse query result parameter name");
-                                       ctx->p_query_results = val;
-                                       free(s);
-                               }
-                               return edg_wll_SetError(ctx,EINVAL,"can't parse query result parameter name");
-                       }
-                       break;
-               case EDG_WLL_PARAM_QUERY_CONNECTIONS:
-                       {
-                               char *s = getenv(myenv[param]);
-                               
-                               if (!val && s) val = atoi(s);
-                               ctx->poolSize = val ? val : EDG_WLL_LOG_CONNECTIONS_DEFAULT;
-                       }
-                       break;
-               case EDG_WLL_PARAM_SOURCE:           
-                       if (val) {
-                               if (val <= EDG_WLL_SOURCE_NONE || val >= EDG_WLL_SOURCE__LAST)
-                                       return edg_wll_SetError(ctx,EINVAL,"Source out of range");
-
-                               ctx->p_source = val;
-                       }
-                       else {
-                               char    *s = extract_split(param,'/',0);
-                               if (s) {
-                                       val = edg_wll_StringToSource(s);
-                                       if (!val) return edg_wll_SetError(ctx,EINVAL,"can't parse source name");
-                                       ctx->p_source = val;
-                                       free(s);
-                               }
-                               return edg_wll_SetError(ctx,EINVAL,"can't parse source name");
-                       }
-                       break;
-               default:
-                       return edg_wll_SetError(ctx,EINVAL,"unknown parameter");
-       }
-       return edg_wll_ResetError(ctx);
-}
-
-int edg_wll_SetParamTime(edg_wll_Context ctx,edg_wll_ContextParam param,const struct timeval *val)
-{
-       switch (param) {
-               case EDG_WLL_PARAM_LOG_TIMEOUT:      
-/* XXX: check also if val is not grater than EDG_WLL_LOG_TIMEOUT_MAX */
-                       if (val) memcpy(&ctx->p_log_timeout,val,sizeof *val);
-                       else extract_time(param,EDG_WLL_LOG_TIMEOUT_DEFAULT,&ctx->p_log_timeout);
-                       break;
-               case EDG_WLL_PARAM_LOG_SYNC_TIMEOUT: 
-/* XXX: check also if val is not grater than EDG_WLL_LOG_SYNC_TIMEOUT_MAX */
-                       if (val) memcpy(&ctx->p_sync_timeout,val,sizeof *val);
-                       else extract_time(param,EDG_WLL_LOG_SYNC_TIMEOUT_DEFAULT,&ctx->p_sync_timeout);
-                       break;
-               case EDG_WLL_PARAM_QUERY_TIMEOUT:    
-/* XXX: check also if val is not grater than EDG_WLL_QUERY_TIMEOUT_MAX */
-                       if (val) memcpy(&ctx->p_query_timeout,val,sizeof *val);
-                       else extract_time(param,EDG_WLL_QUERY_TIMEOUT_DEFAULT,&ctx->p_query_timeout);
-                       break;
-               case EDG_WLL_PARAM_NOTIF_TIMEOUT:    
-/* XXX: check also if val is not grater than EDG_WLL_NOTIF_TIMEOUT_MAX */
-                       if (val) memcpy(&ctx->p_notif_timeout,val,sizeof *val);
-                       else extract_time(param,EDG_WLL_NOTIF_TIMEOUT_DEFAULT,&ctx->p_notif_timeout);
-                       break;
-               default:
-                       return edg_wll_SetError(ctx,EINVAL,"unknown parameter");
-       }
-       return edg_wll_ResetError(ctx);
-}
-
-int edg_wll_SetParam(edg_wll_Context ctx,edg_wll_ContextParam param,...)
-{
-       va_list ap;
-
-       va_start(ap,param);
-       switch (param) {
-               case EDG_WLL_PARAM_LEVEL:            
-               case EDG_WLL_PARAM_DESTINATION_PORT: 
-               case EDG_WLL_PARAM_QUERY_SERVER_PORT:
-               case EDG_WLL_PARAM_NOTIF_SERVER_PORT:
-               case EDG_WLL_PARAM_QUERY_JOBS_LIMIT:      
-               case EDG_WLL_PARAM_QUERY_EVENTS_LIMIT:      
-               case EDG_WLL_PARAM_QUERY_RESULTS:
-               case EDG_WLL_PARAM_QUERY_CONNECTIONS:
-               case EDG_WLL_PARAM_SOURCE:           
-                       return edg_wll_SetParamInt(ctx,param,va_arg(ap,int));
-               case EDG_WLL_PARAM_HOST:             
-               case EDG_WLL_PARAM_INSTANCE:         
-               case EDG_WLL_PARAM_DESTINATION:      
-               case EDG_WLL_PARAM_QUERY_SERVER:     
-               case EDG_WLL_PARAM_NOTIF_SERVER:     
-               case EDG_WLL_PARAM_QUERY_SERVER_OVERRIDE:
-               case EDG_WLL_PARAM_X509_PROXY:       
-               case EDG_WLL_PARAM_X509_KEY:         
-               case EDG_WLL_PARAM_X509_CERT:        
-               case EDG_WLL_PARAM_LBPROXY_STORE_SOCK:
-               case EDG_WLL_PARAM_LBPROXY_SERVE_SOCK:
-               case EDG_WLL_PARAM_LBPROXY_USER:
-                       return edg_wll_SetParamString(ctx,param,va_arg(ap,char *));
-               case EDG_WLL_PARAM_LOG_TIMEOUT:      
-               case EDG_WLL_PARAM_LOG_SYNC_TIMEOUT: 
-               case EDG_WLL_PARAM_QUERY_TIMEOUT:    
-               case EDG_WLL_PARAM_NOTIF_TIMEOUT:    
-                       return edg_wll_SetParamTime(ctx,param,va_arg(ap,struct timeval *));
-               default: 
-                       return edg_wll_SetError(ctx,EINVAL,"unknown parameter");
-       }
-}
-
-int edg_wll_GetParam(edg_wll_Context ctx,edg_wll_ContextParam param,...)
-{
-       va_list ap;
-       int     *p_int;
-       char    **p_string;
-       struct timeval  *p_tv;
-
-       edg_wll_ResetError(ctx);
-
-       va_start(ap,param);
-       switch (param) {
-               case EDG_WLL_PARAM_LEVEL:            
-                       p_int = va_arg(ap, int *);
-                       *p_int = ctx->p_level;
-                       break;
-               case EDG_WLL_PARAM_DESTINATION_PORT: 
-                       p_int = va_arg(ap, int *);
-                       *p_int = ctx->p_dest_port;
-                       break;
-               case EDG_WLL_PARAM_QUERY_SERVER_PORT:
-                       p_int = va_arg(ap, int *);
-                       *p_int = ctx->p_query_server_port;
-                       break;
-               case EDG_WLL_PARAM_NOTIF_SERVER_PORT:
-                       p_int = va_arg(ap, int *);
-                       *p_int = ctx->p_notif_server_port;
-                       break;
-               case EDG_WLL_PARAM_QUERY_JOBS_LIMIT:      
-                       p_int = va_arg(ap, int *);
-                       *p_int = ctx->p_query_jobs_limit;
-                       break;
-               case EDG_WLL_PARAM_QUERY_EVENTS_LIMIT:      
-                       p_int = va_arg(ap, int *);
-                       *p_int = ctx->p_query_events_limit;
-                       break;
-               case EDG_WLL_PARAM_QUERY_RESULTS:
-                       p_int = va_arg(ap, int *);
-                       *p_int = ctx->p_query_results;
-                       break;
-               case EDG_WLL_PARAM_QUERY_CONNECTIONS:
-                       p_int = va_arg(ap, int *);
-                       *p_int = ctx->poolSize;
-                       break;
-               case EDG_WLL_PARAM_SOURCE:           
-                       p_int = va_arg(ap, int *);
-                       *p_int = ctx->p_source;
-                       break;
-
-#define estrdup(x) ((x) ? strdup(x) : x)
-
-               case EDG_WLL_PARAM_HOST:             
-                       p_string = va_arg(ap, char **);
-                       *p_string = estrdup(ctx->p_host);
-                       break;
-               case EDG_WLL_PARAM_INSTANCE:         
-                       p_string = va_arg(ap, char **);
-                       *p_string = estrdup(ctx->p_instance);
-                       break;
-               case EDG_WLL_PARAM_DESTINATION:      
-                       p_string = va_arg(ap, char **);
-                       *p_string = estrdup(ctx->p_destination);
-                       break;
-               case EDG_WLL_PARAM_QUERY_SERVER:     
-                       p_string = va_arg(ap, char **);
-                       *p_string = estrdup(ctx->p_query_server);
-                       break;
-               case EDG_WLL_PARAM_NOTIF_SERVER:     
-                       p_string = va_arg(ap, char **);
-                       *p_string = estrdup(ctx->p_notif_server);
-                       break;
-               case EDG_WLL_PARAM_QUERY_SERVER_OVERRIDE:
-                       p_string = va_arg(ap, char **);
-                       *p_string = strdup(ctx->p_query_server_override ? "yes" : "no");
-                       break;
-               case EDG_WLL_PARAM_X509_PROXY:       
-                       p_string = va_arg(ap, char **);
-                       *p_string = estrdup(ctx->p_proxy_filename);
-                       break;
-               case EDG_WLL_PARAM_X509_KEY:         
-                       p_string = va_arg(ap, char **);
-                       *p_string = estrdup(ctx->p_key_filename);
-                       break;
-               case EDG_WLL_PARAM_X509_CERT:        
-                       p_string = va_arg(ap, char **);
-                       *p_string = estrdup(ctx->p_cert_filename);
-                       break;
-               case EDG_WLL_PARAM_LBPROXY_STORE_SOCK:      
-                       p_string = va_arg(ap, char **);
-                       *p_string = estrdup(ctx->p_lbproxy_store_sock);
-                       break;
-               case EDG_WLL_PARAM_LBPROXY_SERVE_SOCK:      
-                       p_string = va_arg(ap, char **);
-                       *p_string = estrdup(ctx->p_lbproxy_serve_sock);
-                       break;
-               case EDG_WLL_PARAM_LBPROXY_USER:
-                       p_string = va_arg(ap, char **);
-                       *p_string = estrdup(ctx->p_user_lbproxy);
-                       break;
-               case EDG_WLL_PARAM_LOG_TIMEOUT:      
-                       p_tv = va_arg(ap,struct timeval *);
-                       *p_tv = ctx->p_log_timeout;
-                       break;
-               case EDG_WLL_PARAM_LOG_SYNC_TIMEOUT: 
-                       p_tv = va_arg(ap,struct timeval *);
-                       *p_tv = ctx->p_sync_timeout;
-                       break;
-               case EDG_WLL_PARAM_QUERY_TIMEOUT:    
-                       p_tv = va_arg(ap,struct timeval *);
-                       *p_tv = ctx->p_query_timeout;
-                       break;
-               case EDG_WLL_PARAM_NOTIF_TIMEOUT:    
-                       p_tv = va_arg(ap,struct timeval *);
-                       *p_tv = ctx->p_notif_timeout;
-                       break;
-
-               default: 
-                       return edg_wll_SetError(ctx, EINVAL, "unknown parameter");
-                       break;
-       }
-       va_end(ap);
-       return edg_wll_Error(ctx, NULL, NULL);
-}
-
-#if 0
-/* only for reference */
-edg_wll_ErrorCode edg_wll_SetLoggingParams(edg_wll_Context ctx, 
-                               const char      *jobid,
-                               const char      *service,
-                               const char      *hostname,
-                               const char      *instance,
-                               enum edg_wll_Level      level,
-                               const char      *proxy_filename,
-                               const char      *cert_filename,
-                               const char      *key_filename)
-{
-       edg_wll_ResetError(ctx);
-
-       if (jobid != NULL) ctx->p_jobid = strdup(jobid);
-       if (service != NULL) ctx->p_service = strdup(service);
-       if (hostname != NULL) ctx->p_hostname = strdup(hostname);
-       if (instance != NULL) ctx->p_instance = strdup(instance);
-
-        ctx->p_level = level;
-
-       if (proxy_filename != NULL) ctx->p_proxy_filename = strdup(proxy_filename);
-       if (cert_filename != NULL) ctx->p_cert_filename = strdup(cert_filename);
-       if (key_filename != NULL) ctx->p_key_filename = strdup(key_filename);
-
-       return edg_wll_Error(ctx, NULL, NULL);
-}
-#endif
diff --git a/org.glite.lb.common/src/query_rec.c b/org.glite.lb.common/src/query_rec.c
deleted file mode 100644 (file)
index 6abeb4f..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#ident "$Header$"
-
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <stdio.h>
-#include <assert.h>
-
-#include "glite/wmsutils/jobid/cjobid.h"
-#include "glite/lb/consumer.h"
-
-/*
- * edg_wll_QueryRec manipulation routines
- */
-
-void edg_wll_QueryRecFree(edg_wll_QueryRec *prec)
-{
-       if (prec == NULL) {
-               fprintf(stderr, "Error: edg_wll_QueryRecFree called with NULL parameter\n");
-               return;
-       }
-       switch (prec->attr) {
-               case EDG_WLL_QUERY_ATTR_USERTAG:
-                       free(prec->attr_id.tag);
-               case EDG_WLL_QUERY_ATTR_OWNER: 
-               case EDG_WLL_QUERY_ATTR_LOCATION:
-               case EDG_WLL_QUERY_ATTR_DESTINATION:
-               case EDG_WLL_QUERY_ATTR_HOST:
-               case EDG_WLL_QUERY_ATTR_INSTANCE:
-                       if ( prec->value.c ) free(prec->value.c);
-                       break;
-               case EDG_WLL_QUERY_ATTR_JOBID:
-               case EDG_WLL_QUERY_ATTR_PARENT:
-                       edg_wlc_JobIdFree(prec->value.j);
-                       break;
-               case EDG_WLL_QUERY_ATTR_STATUS:
-               case EDG_WLL_QUERY_ATTR_DONECODE:
-               case EDG_WLL_QUERY_ATTR_LEVEL:
-               case EDG_WLL_QUERY_ATTR_SOURCE:
-               case EDG_WLL_QUERY_ATTR_EVENT_TYPE:
-               case EDG_WLL_QUERY_ATTR_RESUBMITTED:
-               case EDG_WLL_QUERY_ATTR_TIME:
-                       /* do nothing */
-                       break;
-               default:
-                       fprintf(stderr,"Error(edg_wll_QueryRecFree): unknown edg_wll_QueryRec.attr=%d\n", prec->attr);
-                       break;
-       }
-}
-
diff --git a/org.glite.lb.common/src/status.c.T b/org.glite.lb.common/src/status.c.T
deleted file mode 100644 (file)
index 301c96b..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-#ident "$Header$"
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "glite/lb/consumer.h"
-
-static const struct timeval null_timeval = {0,0};
-
-
-void edg_wll_FreeStatus(edg_wll_JobStat *stat)
-{ 
-  if (stat) {
-       int     i;
-    
-@@@{
-        selectType $status '_common_';
-        for (getFieldsOrdered $status) {
-                my $f = selectField $status $_;
-                my $ft = $f->{type};
-                if ($ft eq 'jobid') {
-                        gen "\tedg_wlc_JobIdFree(stat->$_);\n";
-                }
-                if ($ft eq 'string') {
-                        gen "\tif (stat->$_ != NULL )    \tfree(stat->$_);\n";
-                }
-                if ($ft eq 'intlist') {
-                        gen "\tif (stat->$_ != NULL )    \tfree(stat->$_);\n";
-                }
-                if ($ft eq 'strlist') {
-                        gen "\tif (stat->$_ != NULL ) {\n";
-                       gen "\t\tfor (i=0; stat->$_\[i]; i++)\n";
-                       gen "\t\t\tfree(stat->$_\[i]);\n";
-                       gen "\t\tfree(stat->$_);\n";
-                       gen "\t}\n";
-                }
-                if ($ft eq 'taglist') {
-                        gen "\tif (stat->$_ != NULL ) {\n";
-                       gen "\t\tfor (i=0; stat->$_\[i].tag; i++) {\n";
-                       gen "\t\t\tfree(stat->$_\[i].tag);\n";
-                       gen "\t\t\tfree(stat->$_\[i].value);\n";
-                       gen "\t\t}\n";
-                       gen "\t\tfree(stat->$_);\n";
-                       gen "\t}\n";
-                }
-                if ($ft eq 'stslist') {
-                        gen "\tif (stat->$_ != NULL ) {\n";
-                       gen "\t\tfor (i=0; stat->$_\[i].state; i++)\n";
-                       gen "\t\t\tedg_wll_FreeStatus(&stat->$_\[i]);\n";
-                       gen "\t\tfree(stat->$_);\n";
-                       gen "\t}\n";
-                }
-
-        }
-@@@}
-    
-  }
-}
-
-edg_wll_JobStat *edg_wll_CpyStatus(const edg_wll_JobStat *src, edg_wll_JobStat *dest)
-{
-       int     i;
-
-
-       if ( !src || !dest )
-               return NULL;
-
-       edg_wll_InitStatus(dest);
-       dest->state = src->state;
-@@@{
-               selectType $status '_common_';
-               for (getFieldsOrdered $status) {
-                       my $f = selectField $status $_;
-                       my $ft = $f->{type};
-                       if ($ft eq 'jobid') {
-                               gen "\tif ( edg_wlc_JobIdDup(src->$_, &(dest->$_)) ) goto err;\n";
-                       }
-                       if ($ft eq 'string') {
-                               gen "\tif ( src->$_ != NULL )\n";
-                               gen "\t\tif ( !(dest->$_ = strdup(src->$_)) ) goto err;\n";
-                       }
-                       if ($ft eq 'intlist') {
-                               gen "\tif ( src->$_ != NULL )\n\t{\n";
-                               gen "\t\ti = 1 + src->$_\[0];\n";
-                               gen "\t\tif ( !(dest->$_ = malloc(sizeof(*src->$_)*i)) ) goto err;\n";
-                               gen "\t\tmemcpy(dest->$_,src->$_,sizeof(*src->$_)*i);\n\t}\n";
-                       }
-                       if ($ft eq 'strlist') {
-                               gen "\tif ( src->$_ != NULL )\n\t{\n";
-                               gen "\t\tfor ( i = 0; src->$_\[i]; i++ ) ;\n";
-                               gen "\t\tif ( !(dest->$_ = malloc(sizeof(*src->$_)*(i+1))) ) goto err;\n";
-                               gen "\t\tfor ( i = 0; src->$_\[i]; i++ )\n";
-                               gen "\t\t\tif ( !(dest->$_\[i] = strdup(src->$_\[i])) ) goto err;\n";
-                               gen "\t\tdest->$_\[i] = NULL;\n\t}\n";
-                       }
-                       if ($ft eq 'stslist') {
-                               gen "\tif ( src->$_ != NULL )\n\t{\n";
-                               gen "\t\tfor ( i = 0; src->$_\[i].state; i++ ) ;\n";
-                               gen "\t\tif ( !(dest->$_ = malloc(sizeof(*src->$_)*(i+1))) ) goto err;\n";
-                               gen "\t\tfor ( i = 0; src->$_\[i].state; i++ )\n";
-                               gen "\t\t\tif ( !edg_wll_CpyStatus(&src->$_\[i], &dest->$_\[i]) ) goto err;\n";
-                               gen "\t\tdest->$_\[i].state = EDG_WLL_JOB_UNDEF;\n\t}\n";
-                       }
-                       if (($ft eq 'bool') or ($ft eq 'timeval') or ($ft eq 'logsrc')
-                               or ($ft eq 'port') or ($ft eq 'level') or ($ft eq 'int')) {
-                               gen "\tdest->$_ = src->$_;\n";
-                       }
-                       if ($ft eq 'taglist') {
-                               gen qq{
-!      if (src->$_ != NULL) \{
-!              for (i=0; src->$_\[i].tag; i++);
-!              dest->$_ = malloc(sizeof(*src->$_)*(i+1));
-!              for (i=0; src->$_\[i].tag; i++) \{
-!                      dest->$_\[i].tag = strdup(src->$_\[i].tag);
-!                      dest->$_\[i].value = strdup(src->$_\[i].value);
-!              \}
-!              dest->$_\[i].tag = NULL;
-!        \}
-                               };
-                       }
-               }
-@@@}
-    
-  return dest;
-
-err:
-  edg_wll_FreeStatus(dest);
-  return NULL;
-}
-
-
-int edg_wll_InitStatus(edg_wll_JobStat *stat)
-{
-       if (!stat) return -1;
-       
-       stat->state = EDG_WLL_JOB_UNDEF;
-
-@@@{
-        selectType $status '_common_';
-        for (getFieldsOrdered $status) {
-                my $f = selectField $status $_;
-                gen "\tstat->$_ = $f->{null};\n"
-        }
-@@@}
-
-       return 0;
-}
-
-static const char * const statNames[] = {
-       "Undefined",
-@@@{
-        for (getTypesOrdered $status) {
-                gen "\t\"$_\",\n";
-        }
-@@@}
-};
-
-edg_wll_JobStatCode edg_wll_StringToStat(const char *name)
-
-{
-        unsigned int     i;
-
-        for (i=0; i<sizeof(statNames)/sizeof(statNames[0]); i++)
-                if (strcasecmp(statNames[i],name) == 0) return (edg_wll_JobStatCode) i;
-        return (edg_wll_JobStatCode) -1; 
-}
-
-char *edg_wll_StatToString(edg_wll_JobStatCode statCode)
-{
-        if ((int)statCode < 0 || statCode >= sizeof(statNames)/sizeof(statNames[0])) return (char *) NULL; 
-        return strdup(statNames[statCode]);
-}
diff --git a/org.glite.lb.common/src/strio.c b/org.glite.lb.common/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.lb.common/src/strio.h b/org.glite.lb.common/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.lb.common/src/trio.c b/org.glite.lb.common/src/trio.c
deleted file mode 100644 (file)
index d46736e..0000000
+++ /dev/null
@@ -1,5708 +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 "glite/lb/events.h"
-#include "escape.h"
-//#include "edg/workload/thirdparty/trio/events.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 = edg_wll_LogEscape(parameters[i].data.string);
-                               break;
-                       case ESCAPE_XML:
-                               s = edg_wll_EscapeXML(parameters[i].data.string);
-                               break;
-                       case ESCAPE_SQL:
-                               s = edg_wll_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.lb.common/src/triop.h b/org.glite.lb.common/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.lb.common/src/ulm_parse.c b/org.glite.lb.common/src/ulm_parse.c
deleted file mode 100644 (file)
index 2525a3e..0000000
+++ /dev/null
@@ -1,410 +0,0 @@
-#ident "$Header$"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-
-/*========= DATA =====================================================*/
-
-#include "ulm_parse.h"
-
-/*========= FUNCTIONS ================================================*/
-
-/* -- Internal function prototype -- */
-void edg_wll_ULMSplitDate( const char *s,
-                      unsigned int *year,
-                      unsigned int *mon,
-                      unsigned int *day,
-                      unsigned int *hour,
-                      unsigned int *min,
-                      unsigned int *sec,
-                      unsigned long *usec );
-int edg_wll_ULMisalphaext( int c);
-
-/*
- *----------------------------------------------------------------------
- *
- * edg_wll_ULMNewParseTable -- Allocate memory for new parse table
- *
- * Calls: malloc, strdup
- *
- * Algorithm:
- *
- *----------------------------------------------------------------------
- */
-p_edg_wll_ULMFields edg_wll_ULMNewParseTable(LogLine logline)
-{
-  p_edg_wll_ULMFields this = (p_edg_wll_ULMFields) calloc(1,sizeof(edg_wll_ULMFields));
-  LogLine ln = logline;
-
-  /* Strip leading spaces */
-  for ( ; *ln && isblank(*ln); ln++ );
-
-  this->names = NULL;
-  this->vals = NULL;
-  this->num = 0;
-  this->raw = strdup(ln);
-
-  return this;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * edg_wll_ULMFreeParseTable -- Free memory allocated for parse table
- *
- * Calls: free
- *
- * Algorithm:
- *
- *----------------------------------------------------------------------
- */
-void edg_wll_ULMFreeParseTable(p_edg_wll_ULMFields this)
-{   
-   EDG_WLL_ULM_CLEAR_FIELDS(this);
-   if (this->raw) free(this->raw);
-   if (this) free(this);
-}
-
-
-/*
- *----------------------------------------------------------------------
- *
- * edg_wll_ULMProcessParseTable -- Break UML message into fields.
- *
- * Calls: strchr, strrchr
- *
- * Algorithm: 
- *     LogLine is of the ULM form as described in draft-abela-ulm-05.
- *     - the ULM_EQ symbol separates name,value pairs 
- *     - quote marks must be taken into account 
- *     1. count ULM_EQ and ULM_SP symbols,
- *     2. allocate the integer arrays 'names' and 'vals' which hold 
- *        the indices of subsequent name and value strings,
- *     3. the original raw data will be peppered with \0's so that raw[index] 
- *        will give the proper string if index is in names[] or vals[]
- * 
- *      The actual algorithm to get these indices is a simple array lookup.
- *
- *     The following illegal formats are caught:
- *             1. no name=value pairs
- *             2. space or tab next to delimiter
- *             3. logline starts or ends with delimiter
- *             4. no spaces between successive delimiters
- *             5. illegal character after ending ULM_QM
- *
- *----------------------------------------------------------------------
- */
-int edg_wll_ULMProcessParseTable(p_edg_wll_ULMFields this)
-{
-  char *func = "edg_wll_ULMProcessParseTable";
-  char *eq;
-  int  i,j;
-  int  eqCnt,qmCnt,spCnt;
-  int  iArrayEQ[ULM_FIELDS_MAX];
-  int  iArraySP[ULM_FIELDS_MAX];
-  size_t size;
-
-  if ( (this == NULL) || (this->raw == NULL) || (*this->raw == '\0')) {
-    fprintf(stderr,"%s: PARSE ERROR: Nothing to parse.\n",func);
-    return ULM_PARSE_ERROR;                                     
-  }
-
-  /* Init data */
-  EDG_WLL_ULM_CLEAR_FIELDS(this);
-
-  for (i=0; i<ULM_FIELDS_MAX; i++) { 
-    iArrayEQ[i] = 0;
-    iArraySP[i] = 0;
-  }
-
-  i = j = 0;
-  qmCnt = eqCnt = spCnt = 0;
-
-  size = strlen(this->raw);
-
-  /* Count number of ULM_EQ and ULM_SP 
-   * and replace all ULM_LF by nul characters */
-  for (i=0; i< (int)size; i++) {
-    switch (this->raw[i]) {
-      case ULM_SP :
-      case ULM_TB :
-         if (qmCnt == 0) { iArraySP[spCnt] = i; spCnt++; }
-         break;
-      case ULM_EQ :
-        if (i==0) {
-               fprintf(stderr,"%s: PARSE ERROR: '%c' at the beginning of log line.\n", func, ULM_EQ);
-               return ULM_PARSE_ERROR;
-        }
-         if (qmCnt == 0) { 
-           if (isblank(this->raw[i-1]) || (!edg_wll_ULMisalphaext(this->raw[i-1]))) {
-             fprintf(stderr,"%s: PARSE ERROR: Disallowed character ('%c') or space before delimiter '%c'.\n",
-                     func,this->raw[i-1],ULM_EQ);
-             return ULM_PARSE_ERROR;
-           }
-           if (isblank(this->raw[i+1]) || ((!edg_wll_ULMisalphaext(this->raw[i-1])) && (this->raw[i+1] != ULM_QM ))) {
-             fprintf(stderr,"%s: PARSE ERROR: Disallowed character ('%c') or space after delimiter '%c'.\n",
-                     func,this->raw[i+1],ULM_EQ);
-             return ULM_PARSE_ERROR;
-           }
-           iArrayEQ[eqCnt] = i; 
-           eqCnt++; 
-         }
-         break;
-      case ULM_LF :
-         if (qmCnt == 0) { this->raw[i] = '\0'; }
-        break;
-      case ULM_QM :
-         if (this->raw[i-1] != ULM_BS) {
-           if (qmCnt == 0) qmCnt++;
-           else qmCnt--;
-         }              
-         if ((qmCnt == 0) && (!isspace(this->raw[i+1]) && (this->raw[i+1] != '\0'))) {
-             fprintf(stderr,"%s: PARSE ERROR: Disallowed character ('%c') after ending '%c'at i=%d size=%lu char=%d.\n",
-                     func,this->raw[i+1],ULM_QM,i,(unsigned long)size,this->raw[i+1]);
-             for (j=0; j<=i; j++) fputc(this->raw[j],stderr);
-             fputc(ULM_LF,stderr);
-             return ULM_PARSE_ERROR;
-         }
-         break;
-      default :
-         break;
-    } /* switch */
-  } /* for */
-
-  if (eqCnt == 0) {
-    fprintf(stderr,"%s: PARSE ERROR: No '%c' in line \"%s\"\n",func,ULM_EQ,this->raw);
-    return ULM_PARSE_ERROR;                    
-  }
-
-  if (this->raw[0] == ULM_EQ) {
-    fprintf(stderr,"%s: PARSE ERROR: Need at least 1 letter for the first field name.\n",func);
-    return ULM_PARSE_ERROR;                    
-  }
-
-  if (qmCnt != 0) {
-    fprintf(stderr,"%s: PARSE ERROR: Last quoted value did not finish.\n",func);
-    return ULM_PARSE_ERROR;                    
-  }
-
-  /* Allocate names, vals arrays */
-  this->names = (int *) malloc(eqCnt*sizeof(int));
-  this->vals =  (int *) malloc(eqCnt*sizeof(int));
-
-  this->names[0] = (int)(0);
-  this->vals[0]  = (int)(iArrayEQ[0] + 1);
-
-  /* 
-   * Main loop 
-   */
-  for (i=1; i<eqCnt; i++) {
-    eq = &this->raw[iArrayEQ[i]]; 
-    j = 1;
-    while (edg_wll_ULMisalphaext(*(eq-j))) {
-      j++;
-    }
-    if (isblank(*(eq-j))) {
-       this->names[i] = (int)(iArrayEQ[i] - j + 1);
-       this->vals[i]  = (int)(iArrayEQ[i] + 1);
-    }
-    else {
-       fprintf(stderr,"%s: PARSE ERROR: Disallowed character '%c' for field name \
-(e.g. no space between successive delimiters).\n",func,*(eq-j));
-       return ULM_PARSE_ERROR; 
-    }
-  } /* for */
-
-  /* Replace delimiters and intervening whitespace by nul characters */
-  for (i=0; i<eqCnt; i++) this->raw[iArrayEQ[i]] = '\0';   
-  for (i=0; i<spCnt; i++) this->raw[iArraySP[i]] = '\0';
-
-  this->num = eqCnt;
-
-  /* Debug dump of parsed fields */
-//  for( i=0; i<eqCnt; i++ ) fprintf(stdout,"field[%d]: %s=%s\n",i,this->raw+this->names[i],this->raw+this->vals[i]);
-
-  return ULM_PARSE_OK;
-}
-
-/*
- *---------------------------------------------------------------------------
- * edg_wll_ULMisalphaext - test if the character is an ALPHAEXT as described in 
- *              draft-abela-ulm-05
- *---------------------------------------------------------------------------
- */
-int edg_wll_ULMisalphaext( int c) {
-
-  return (isalnum(c) || (c == '.') || (c == '-') || c == '_');
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * edg_wll_ULMGetNameAt -- Get name at index.
- *
- * Calls: 
- *
- * Algorithm: array lookup
- *
- *----------------------------------------------------------------------
- */
-char *edg_wll_ULMGetNameAt( p_edg_wll_ULMFields this, int index )
-{
-  if ( index < 0 || index > this->num )
-    return NULL;
-  return (char *)&(this->raw[this->names[index]]);
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * edg_wll_ULMGetValueAt -- Get value at index
- *
- * Calls: 
- *
- * Algorithm: array lookup
- *
- *----------------------------------------------------------------------
- */
-char *edg_wll_ULMGetValueAt( p_edg_wll_ULMFields this, int index ) 
-{
-  if ( index < 0 || index > this->num )
-    return NULL;
-  return (char *)&(this->raw[this->vals[index]]);
-}
-
-/*
- *---------------------------------------------------------------------------
- * edg_wll_ULMDateToDouble -- Calculate date in sec. since 1/1/1970 from string.
- *                Algorithm borrowed from linux kernel source code,
- *                i.e. Linus Torvalds, who in turn credits it to Gauss.
- *
- * PRE: Input is properly formatted, non-null, need _not_ be null-terminated.
- * IN : String in format YYYYMMDDHHmmss.uuuuuu
- *        YYYY  = 4 digit year
- *        MM    = 2 digit month (1..12)
- *        DD    = 2 digit day of month (1..31)
- *        HH    = 2 digit hour of day ( 0..23 )
- *        mm    = 2 digit minute of hour ( 0..59 )
- *        ss    = 2 digit second of minute ( 0..59 )
- *        uuuuuu= 1..6 digit microsecond of second ( 0..999999 )
- * OUT: Number of seconds, and fraction accurate to at most microseconds,
- *      elapsed since 1/1/1970 (GMT).
- *
- * edg_wll_ULMDateToTimeval -- the same, except it returns timeval
- *---------------------------------------------------------------------------
- */
-double edg_wll_ULMDateToDouble( const char *s )
-{
-  unsigned int year, mon, day, hour, min, sec=0;
-  unsigned long usec=0L;
-
-  edg_wll_ULMSplitDate( s, &year, &mon, &day, &hour, &min, &sec, &usec );
-
-  if (0 >= (int) (mon -= 2)) {    /* 1..12 -> 11,12,1..10 */
-    mon += 12;      /* Puts Feb last since it has leap day */
-    year -= 1;
-  }
-  return (double)
-    ( ( ( (
-           (unsigned long)(year/4 - year/100 + year/400 + 367*mon/12 + day) +
-           year*365 - 719499
-           )*24 + hour /* now have hours */
-          )*60 + min /* now have minutes */
-        )*60 + sec /* seconds */
-      ) + (double)( usec / 1E6 ); /* microseconds */
-}
-
-void edg_wll_ULMDateToTimeval( const char *s, struct timeval *tv )
-{
-  unsigned int year, mon, day, hour, min, sec=0;
-  unsigned long usec=0L;
-
-  edg_wll_ULMSplitDate( s, &year, &mon, &day, &hour, &min, &sec, &usec );
-
-  if (0 >= (int) (mon -= 2)) {    /* 1..12 -> 11,12,1..10 */
-    mon += 12;      /* Puts Feb last since it has leap day */
-    year -= 1;
-  }
-  tv->tv_sec = (long)
-    ( ( ( (
-           (unsigned long)(year/4 - year/100 + year/400 + 367*mon/12 + day) +
-           year*365 - 719499
-           )*24 + hour /* now have hours */
-          )*60 + min /* now have minutes */
-        )*60 + sec /* seconds */
-      );
-  tv->tv_usec = usec; /* microseconds */
-}
-
-/*
- *---------------------------------------------------------------------------
- * edg_wll_ULMSplitDate -- Efficiently break date into parsed component parts.
- *---------------------------------------------------------------------------
- */
-#define DIG(x) ((int)((x)-'0'))
-void edg_wll_ULMSplitDate( const char *s,
-                      unsigned int *year,
-                      unsigned int *mon,
-                      unsigned int *day,
-                      unsigned int *hour,
-                      unsigned int *min,
-                      unsigned int *sec,
-                      unsigned long *usec )
-{
-   *year = DIG(s[0]) * 1000 + DIG(s[1]) * 100 + DIG(s[2]) * 10 + DIG(s[3]);
-   *mon  = DIG(s[4]) * 10 + DIG(s[5]);
-   *day  = DIG(s[6]) * 10 + DIG(s[7]);
-   *hour = DIG(s[8]) * 10 + DIG(s[9]);
-   *min  = DIG(s[10]) * 10 + DIG(s[11]);
-   *sec  = DIG(s[12]) * 10 + DIG(s[13]);
-   if ( s[14] == '.' ) *usec = atol(s+15);
-}
-#undef DIG
-
-/*
- *---------------------------------------------------------------------------
- * edg_wll_ULMTimevalToDate -- Take a seconds, microseconds argument and convert it
- *                   to a date string that edg_wll_ULMDateToDouble could parse.
- *
- * CALL: gmtime, strftime
- *
- * PRE : seconds, usec >= 0 , usec < 1000000 (checked)
- *       date string has DATE_STRING_LENGTH+1 bytes allocated (not checked)
- * IN  : seconds, useconds
- * OUT : date string 'dstr'.
- * RTRN: 0=OK, other=FAILURE
- * POST: This is the inverse of edg_wll_ULMDateToDouble, i.e.
- *         edg_wll_ULMDateToDouble( edg_wll_ULMTimevalToDate( sec, usec ) ) = sec.usec
- *---------------------------------------------------------------------------
- */
-int edg_wll_ULMTimevalToDate( long sec, long usec, char *dstr )
-{
-  char *func = "edg_wll_ULMTimevalToDate";
-  struct tm *tp;
-  int        len;
-
-  if ( sec < 0 || usec < 0 || usec > 999999 )
-    return 1;
-
-  tp = gmtime( (const time_t *) &sec );
-  if ( tp == NULL )
-    return 1;
-
-  len = strftime( dstr,
-                  ULM_DATE_STRING_LENGTH+1-7,
-                  "%Y%m%d%H%M%S",
-                  tp );
-  if ( len != ULM_DATE_STRING_LENGTH-7 ) {
-    fprintf(stderr,"%s: bad strftime() return value: %d\n",func, len);
-    return 1;
-  }
-
-  sprintf( dstr + ULM_DATE_STRING_LENGTH-7, ".%06ld", usec );
-
-  return 0;
-}
-
diff --git a/org.glite.lb.common/src/xml_conversions.c b/org.glite.lb.common/src/xml_conversions.c
deleted file mode 100644 (file)
index d914cce..0000000
+++ /dev/null
@@ -1,882 +0,0 @@
-#ident "$Header$"
-
-#include <string.h>
-#include <stdlib.h>
-#include <expat.h>
-
-#include "trio.h"
-
-#include "xml_conversions.h"
-
-
-
-static const struct timeval null_timeval = {0,0};
-
-
-/************************************************************************/
-/* Context manipulation functions                                      */      
-
-
-void edg_wll_initXMLCtx(edg_wll_XML_ctx *c) {
-       c->ctx = NULL;
-        c->p = NULL;
-       c->message_body = NULL;
-        c->eventCode = EDG_WLL_EVENT_UNDEF;
-        c->position = 0;
-        c->position2 = 0;
-       c->max_index = -1;
-       c->row = 0;
-       c->row2 = 0;
-        c->level = 0;
-        memset(&(c->element), 0, sizeof(c->element));
-        c->char_buf = NULL;
-        c->char_buf_len = 0;
-        c->XML_tag = NULL;
-        c->XML_tag2 = NULL;
-       c->job_conditions = NULL;
-       c->event_conditions = NULL;
-       c->type = EDG_WLL_QUERY_TYPE_UNDEF;
-       c->conditions = NULL;
-       c->flags = 0;
-        c->jobsOutGlobal = NULL;
-        c->eventsOutGlobal = NULL;
-        c->jobStatGlobal = NULL;
-       memset(&(c->jobStatSingleGlobal),0,sizeof(c->jobStatSingleGlobal));
-       c->strListGlobal = NULL;
-       c->intListGlobal = NULL;
-       c->indexToTag    = NULL;
-       c->tagToIndex    = NULL;
-       c->tagListGlobal = NULL;
-       c->stsListGlobal = NULL;
-       memset(&(c->purgeRequestGlobal),0,sizeof(c->purgeRequestGlobal));
-       memset(&(c->purgeResultGlobal),0,sizeof(c->purgeResultGlobal));
-       memset(&(c->dumpRequestGlobal),0,sizeof(c->dumpRequestGlobal));
-       memset(&(c->dumpResultGlobal),0,sizeof(c->dumpResultGlobal));
-       memset(&(c->loadRequestGlobal),0,sizeof(c->loadRequestGlobal));
-       memset(&(c->loadResultGlobal),0,sizeof(c->loadResultGlobal));
-       c->notifFunction = NULL;
-       c->notifClientAddress = NULL;
-       c->notifId = NULL;
-       c->notifChangeOp = EDG_WLL_NOTIF_NOOP;
-       c->notifValidity = -1;
-       c->jobId = NULL;
-       c->source = NULL;
-       c->seqCode = NULL;
-       c->attrsGlobal  = NULL;
-       c->errCode = 0;
-       c->bound = 0;
-       c->statsFunction = NULL;
-       c->statsConditions = NULL;
-       c->statsMajor = EDG_WLL_JOB_UNDEF;
-       c->statsMinor = 0;
-       c->statsRate = 0;
-       c->statsDuration = 0;
-       c->statsFrom = 0;
-       c->statsTo = 0;
-       c->statsResFrom = 0;
-       c->statsResTo = 0;
-       c->errDesc = NULL;
-       c->stat_begin = 0;
-       c->jobQueryRec_begin = 0;
-        c->errtxt = NULL;
-       c->warntxt = NULL;
-}
-
-
-void edg_wll_freeXMLCtx(edg_wll_XML_ctx *c) {
-        if (c->char_buf) free(c->char_buf);
-        if (c->errtxt) free(c->errtxt);
-        if (c->warntxt) free(c->warntxt);
-       if (c->XML_tag) free(c->XML_tag);
-       if (c->XML_tag2) free(c->XML_tag2);
-}
-
-
-void edg_wll_freeBuf(edg_wll_XML_ctx *c) {
-        free(c->char_buf);
-        c->char_buf = NULL;
-        c->char_buf_len = 0;
-}
-
-
-
-/************************************************************************/
-/* type to XML conversion functions                                    */
-
-
-/* edg_wll_add_string_to_XMLBody(&body, eventsOut[i].jobMatch.destination, "destination", NULL) */
-
-void edg_wll_add_string_to_XMLBody(char **body, const char *toAdd, const char *tag, const char *null)
-{
-       if ( toAdd != null ) {
-               char *newBody;
-               
-               trio_asprintf(&newBody,"%s\t\t\t<%s>%|Xs</%s>\r\n", *body, tag, toAdd, tag);
-
-               free(*body);
-               *body = newBody;
-       }
-}
-
-void edg_wll_add_tagged_string_to_XMLBody(char **body, const char *toAdd, const char *tag, 
-                                         const char *name, const char *tag2, const char *null)
-{
-       if ( toAdd != null ) {
-               char *newBody;
-               
-               trio_asprintf(&newBody,"%s\t\t\t<%s %s=\"%|Xs\">%|Xs</%s>\r\n", 
-                       *body, tag, tag2, name, toAdd, tag);
-
-               free(*body);
-               *body = newBody;
-       }
-}
-
-/* edg_wll_add_int_to_XMLBody(&body, eventsOut[i].jobMatch.code, "code", 0) */
-
-void edg_wll_add_int_to_XMLBody(char **body, const int toAdd, const char *tag, const int null)
-{
-       if (toAdd != null) {
-                char *newBody;
-
-                trio_asprintf(&newBody,"%s\t\t\t<%s>%|Xd</%s>\r\n", *body, tag, toAdd, tag);
-
-                free(*body);
-                *body = newBody;
-       }
-}
-
-
-/* edg_wll_add_float_to_XMLBody(&body, rate, "rate", 0) */
-
-void edg_wll_add_float_to_XMLBody(char **body, const float toAdd, const char *tag, const float null)
-{
-       if (toAdd != null) {
-                char *newBody;
-
-                trio_asprintf(&newBody,"%s\t\t\t<%s>%|Xf</%s>\r\n", *body, tag, toAdd, tag);
-
-                free(*body);
-                *body = newBody;
-       }
-}
-
-
-
-/* edg_wll_add_timeval_to_XMLBody(&body, eventsOut[i].any.tv, "timestamp", -1) */
-
-void edg_wll_add_timeval_to_XMLBody(char **body, struct timeval toAdd, const char *tag, const struct timeval null)
-{
-
-       if (toAdd.tv_sec != null.tv_sec || toAdd.tv_usec != null.tv_usec) {
-                char *newBody;
-
-                trio_asprintf(&newBody,"%s\t\t\t<%s>%ld.%06ld</%s>\r\n", 
-               *body, tag, toAdd.tv_sec, toAdd.tv_usec, tag);
-
-                free(*body);
-                *body = newBody;
-       }
-}
-
-
-/* edg_wll_add_jobid_to_XMLBody(&body, eventsOut[i].any.jobId, "jobId", NULL) */
-
-void edg_wll_add_jobid_to_XMLBody(char **body, edg_wlc_JobId toAdd, const char *tag, const void *null)
-{
-       if (toAdd != (edg_wlc_JobId) null) {
-                char *newBody, *pom;
-
-                trio_asprintf(&newBody,"%s\t\t\t<%s>%|Xs</%s>\r\n",
-                *body, tag, pom = edg_wlc_JobIdUnparse(toAdd), tag);
-
-                free(*body);
-               free(pom);
-                *body = newBody;
-       }
-}
-
-
-void edg_wll_add_notifid_to_XMLBody(char **body, edg_wll_NotifId toAdd, const char *tag, const void *null)
-{
-       if (toAdd != (edg_wll_NotifId) null) {
-                char *newBody, *pom;
-
-                trio_asprintf(&newBody,"%s\t\t\t<%s>%|Xs</%s>\r\n",
-                *body, tag, pom = edg_wll_NotifIdUnparse(toAdd), tag);
-
-                free(*body);
-               free(pom);
-                *body = newBody;
-       }
-}
-
-
-/* edg_wll_add_edg_wll_JobStatCode_to_XMLBody(&body, eventsOut[i].any.jobId, "jobId", EDG_WLL_JOB_UNDEF) */
-
-void edg_wll_add_edg_wll_JobStatCode_to_XMLBody(char **body, edg_wll_JobStatCode toAdd, const char *tag, const edg_wll_JobStatCode null)
-{
-       if (toAdd != null) {
-                char *newBody, *pom;
-
-                trio_asprintf(&newBody,"%s\t\t\t<%s>%|Xs</%s>\r\n",
-                       *body, tag, pom = edg_wll_StatToString(toAdd), tag);
-
-                free(*body);
-               free(pom);
-                *body = newBody;
-       }
-}
-
-void edg_wll_add_edg_wll_EventCode_to_XMLBody(char **body, edg_wll_EventCode toAdd, const char *tag, const edg_wll_EventCode null)
-{
-       char *newBody, *pom;
-       
-       if (toAdd != null) {
-               trio_asprintf(&newBody,"%s\t\t\t<%s>%|Xs</%s>\r\n",
-                       *body, tag, pom = edg_wll_EventToString(toAdd), tag);   
-
-               free(*body);
-               free(pom);
-               *body = newBody;
-       }
-}
-
-
-void edg_wll_add_time_t_to_XMLBody(char **body, const time_t toAdd, const char *tag, const time_t null)
-{
-       if (toAdd != null) {
-                char *newBody;
-
-                trio_asprintf(&newBody,"%s\t\t\t<%s>%|Xld</%s>\r\n", *body, tag, toAdd, tag);
-
-                free(*body);
-                *body = newBody;
-       }
-}
-
-
-void edg_wll_add_tagged_time_t_to_XMLBody(char **body, const time_t toAdd, const char *tag,
-                                          const char *name, const char *tag2, const time_t null)
-{
-        if ( toAdd != null ) {
-                char *newBody;
-
-                trio_asprintf(&newBody,"%s\t\t\t<%s %s=\"%|Xs\">%|Xld</%s>\r\n",
-                        *body, tag, tag2, name, toAdd, tag);
-
-                free(*body);
-                *body = newBody;
-        }
-}
-
-
-void edg_wll_add_uint16_t_to_XMLBody(char **body, const uint16_t toAdd, const char *tag, const uint16_t null)
-{
-       if (toAdd != null) {
-                char *newBody;
-
-                trio_asprintf(&newBody,"%s\t\t\t<%s>%|Xu</%s>\r\n", *body, tag, toAdd, tag);
-
-                free(*body);
-                *body = newBody;
-       }
-}
-
-
-void edg_wll_add_logsrc_to_XMLBody(char **body, const edg_wll_Source toAdd, const char *tag, const edg_wll_Source null)
-{
-        if (toAdd != null) {
-               char *newBody, *pom;
-
-               trio_asprintf(&newBody,"%s\t\t\t<%s>%|Xs</%s>\r\n",
-                        *body, tag, pom = edg_wll_SourceToString(toAdd), tag);
-               
-               free(*body);
-               free(pom);
-               *body = newBody;
-       }
-}
-
-void edg_wll_add_strlist_to_XMLBody(char **body, char * const *toAdd, const char *tag,  const char *subTag, const char *indent,  const  char *null)
-{
-        char *pomA, *pomB, *newBody;
-        char **list = NULL;
-        int i = 0, len, tot_len = 0;
-        int *len_list = NULL;
-
-       
-       if (!toAdd) return;
-               
-        while (toAdd[i] != null) {
-                len = trio_asprintf(&pomA,"%s\t<%s>%|Xs</%s>\r\n",
-                        indent,subTag,toAdd[i],subTag);
-
-                i++;
-                tot_len += len;
-
-                list      = (char **) realloc(list, i * sizeof(*list));
-                list[i-1] = pomA;
-                pomA = NULL;
-                len_list      = (int *) realloc(len_list, i * sizeof(*len_list));
-                len_list[i-1] = len;
-        }
-
-        /* list termination */
-        list = (char **) realloc(list, (i+1) * sizeof(*list));
-        list[i] = NULL;
-
-        /* glueing all list fields together & freeing the list */
-        pomA = (char *) malloc(tot_len  * sizeof(char) + 1);
-       pomB = pomA;
-
-        i = 0;
-        while (list[i]) {
-                memcpy(pomB, list[i], len_list[i] );
-                pomB += len_list[i];
-
-                /* freeing the list */
-                free(list[i]);
-
-                i++;
-        }
-       *pomB = '\0';
-        free(list);
-        free(len_list);
-
-       asprintf(&newBody,"%s%s<%s>\r\n%s%s</%s>\r\n", *body, indent, tag, pomA, indent, tag);
-       free(*body);
-       free(pomA);
-       *body = newBody;        
-}
-
-void edg_wll_add_intlist_to_XMLBody(char **body, const int *toAdd, const char *tag, char *(*indexToTag)(), const char *indent, const int from, const int to)
-{
-        char *pomA, *pomB, *newBody;
-        char **list = NULL;
-        int i, len, tot_len = 0;
-        int *len_list = NULL;
-
-       
-       i = from;
-        while (i <= to) {
-                len = trio_asprintf(&pomA,"%s\t<%s>%|Xd</%s>\r\n",
-                        indent, indexToTag(i-1),toAdd[i],indexToTag(i-1));
-
-               i++;
-                tot_len += len;
-
-                list      = (char **) realloc(list, i * sizeof(*list));
-                list[i-1] = pomA;
-                pomA = NULL;
-                len_list      = (int *) realloc(len_list, i * sizeof(*len_list));
-                len_list[i-1] = len;
-        }
-
-        /* list termination */
-        list = (char **) realloc(list, (i+1) * sizeof(*list));
-        list[i] = NULL;
-
-        /* glueing all list fields together & freeing the list */
-        pomA = (char *) malloc(tot_len  * sizeof(char) + 1);
-       pomB = pomA;
-
-        i = from;
-        while (list[i]) {
-                memcpy(pomB, list[i], len_list[i] );
-                pomB += len_list[i];
-
-                /* freeing the list */
-                free(list[i]);
-
-                i++;
-        }
-       *pomB = '\0';
-        free(list);
-        free(len_list);
-
-       asprintf(&newBody,"%s%s<%s>\r\n%s%s</%s>\r\n", *body, indent, tag, pomA, indent, tag);
-        free(*body);
-        free(pomA);
-        *body = newBody;
-}
-
-
-void edg_wll_add_taglist_to_XMLBody(char **body,  const edg_wll_TagValue *toAdd, const char *tag,  const char *subTag, const char *subTag2, const char *indent, const  char *null)
-{
-        char *pomA, *pomB, *newBody;
-        char **list = NULL;
-        int i = 0, len, tot_len = 0;
-        int *len_list = NULL;
-
-
-        while (toAdd && (toAdd[i].tag != null) ) {
-                len = trio_asprintf(&pomA,"%s\t<%s %s=\"%|Xs\">%|Xs</%s>\r\n",
-                        indent,subTag,subTag2,toAdd[i].tag,toAdd[i].value,subTag);
-
-                i++;
-                tot_len += len;
-
-                list      = (char **) realloc(list, i * sizeof(*list));
-                list[i-1] = pomA;
-                pomA = NULL;
-                len_list      = (int *) realloc(len_list, i * sizeof(*len_list));
-                len_list[i-1] = len;
-        }
-
-        /* list termination */
-        list = (char **) realloc(list, (i+1) * sizeof(*list));
-        list[i] = NULL;
-
-        /* glueing all list fields together & freeing the list */
-        pomA = (char *) malloc(tot_len  * sizeof(char) + 1);
-       pomB = pomA;
-
-        i = 0;
-        while (list[i]) {
-                memcpy(pomB, list[i], len_list[i] );
-                pomB += len_list[i];
-
-                /* freeing the list */
-                free(list[i]);
-
-                i++;
-        }
-       *pomB = '\0';
-        free(list);
-        free(len_list);
-
-       asprintf(&newBody,"%s%s<%s>\r\n%s%s</%s>\r\n", *body, indent, tag, pomA, indent, tag);
-       free(*body);
-       free(pomA);
-       *body = newBody;        
-}
-
-
-void edg_wll_add_time_t_list_to_XMLBody(char **body, const time_t *toAdd, const char *tag, char *(*indexToTag)(), const char *indent, const int from, const int to)
-{
-        char *pomA, *pomB, *newBody;
-        char **list = NULL;
-        int i, len, tot_len = 0;
-        int *len_list = NULL;
-
-       
-       i = from;
-        while (i < to) {
-                len = trio_asprintf(&pomA,"%s\t<%s>%|Xld</%s>\r\n",
-                        indent, indexToTag(i),toAdd[i],indexToTag(i));
-
-               i++;
-                tot_len += len;
-
-                list      = (char **) realloc(list, i * sizeof(*list));
-                list[i-1] = pomA;
-                pomA = NULL;
-                len_list      = (int *) realloc(len_list, i * sizeof(*len_list));
-                len_list[i-1] = len;
-        }
-
-        /* list termination */
-        list = (char **) realloc(list, (i+1) * sizeof(*list));
-        list[i] = NULL;
-
-        /* glueing all list fields together & freeing the list */
-        pomA = (char *) malloc(tot_len  * sizeof(char) + 1);
-       pomB = pomA;
-
-        i = 0;
-        while (list[i]) {
-                memcpy(pomB, list[i], len_list[i] );
-                pomB += len_list[i];
-
-                /* freeing the list */
-                free(list[i]);
-
-                i++;
-        }
-       *pomB = '\0';
-        free(list);
-        free(len_list);
-
-       asprintf(&newBody,"%s%s<%s>\r\n%s%s</%s>\r\n", *body, indent, tag, pomA, indent, tag);
-        free(*body);
-        free(pomA);
-        *body = newBody;
-}
-
-
-// void edg_wll_add_stslist_to_XMLBody(char **body, const edg_wll_JobStat *toAdd, const char *tag, const char *UNUSED_subTag, const int null)
-// in lbserver/lb_xml_parse.c.T
-
-/************************************************************************/
-/* string to type conversion functions                                 */
-
-
-/* XMLCtx->eventsOutGlobal[XMLCtx->position].any.prog = edg_wll_from_string_to_string(XMLCtx); */
-char *edg_wll_from_string_to_string(edg_wll_XML_ctx *XMLCtx)
-{
-       return(XMLCtx->char_buf);
-} 
-
-
-/* XMLCtx->eventsOutGlobal[XMLCtx->position].any.jobId = edg_wll_from_string_to_dgJobId(XMLCtx); */
-edg_wlc_JobId edg_wll_from_string_to_jobid(edg_wll_XML_ctx *XMLCtx)
-{
-       edg_wlc_JobId out;
-
-       edg_wlc_JobIdParse(XMLCtx->char_buf, &out);
-       edg_wll_freeBuf(XMLCtx); 
-
-       return(out);
-}
-
-
-
-edg_wll_NotifId edg_wll_from_string_to_notifid(edg_wll_XML_ctx *XMLCtx)
-{
-       edg_wll_NotifId out;
-
-       edg_wll_NotifIdParse(XMLCtx->char_buf, &out);
-       edg_wll_freeBuf(XMLCtx); 
-
-       return(out);
-}
-
-
-
-edg_wll_JobStatCode edg_wll_from_string_to_edg_wll_JobStatCode(edg_wll_XML_ctx *XMLCtx)
-{
-       edg_wll_JobStatCode out;
-       
-       out = edg_wll_StringToStat(XMLCtx->char_buf);
-       edg_wll_freeBuf(XMLCtx); 
-
-       return(out);
-}
-
-
-
-
-/* XMLCtx->eventsOutGlobal[XMLCtx->position].jobClear.clearReason = 
-       edg_wll_from_string_to_int(XMLCtx);                             */
-int edg_wll_from_string_to_int(edg_wll_XML_ctx *XMLCtx)
-{
-        int out;
-
-        out = atoi(XMLCtx->char_buf);
-        edg_wll_freeBuf(XMLCtx);
-
-        return(out);
-}
-
-
-
-/* XMLCtx->eventsOutGlobal[XMLCtx->position].jobClear.clearReason = 
-       edg_wll_from_string_to_int(XMLCtx);                             */
-float edg_wll_from_string_to_float(edg_wll_XML_ctx *XMLCtx)
-{
-        float out;
-
-        out = strtof(XMLCtx->char_buf, (char **) NULL);
-        edg_wll_freeBuf(XMLCtx);
-
-        return(out);
-}
-
-
-
-long edg_wll_from_string_to_long(edg_wll_XML_ctx *XMLCtx)
-{
-        long out;
-
-        out = atol(XMLCtx->char_buf);
-        edg_wll_freeBuf(XMLCtx);
-
-        return(out);
-}
-
-
-uint16_t edg_wll_from_string_to_uint16_t(edg_wll_XML_ctx *XMLCtx)
-{
-        return( (uint16_t) edg_wll_from_string_to_int(XMLCtx) );
-}
-
-
-struct timeval edg_wll_from_string_to_timeval(edg_wll_XML_ctx *XMLCtx)
-{
-       struct timeval out;
-       char *needle, *nil;
-
-       out.tv_sec  = strtol(XMLCtx->char_buf, &needle, 10);
-       out.tv_usec = strtol(needle+1, &nil, 10);
-       edg_wll_freeBuf(XMLCtx);
-
-       return(out);
-}
-
-
-time_t edg_wll_from_string_to_time_t(edg_wll_XML_ctx *XMLCtx)
-{
-        return( (time_t) edg_wll_from_string_to_long(XMLCtx) );
-}
-
-
-edg_wll_Source edg_wll_from_string_to_logsrc(edg_wll_XML_ctx *XMLCtx)
-{
-       edg_wll_Source  out = edg_wll_StringToSource(XMLCtx->char_buf);
-       
-       edg_wll_freeBuf(XMLCtx);
-       return(out);
-}
-
-
-
-/************************************************************************/
-/* various conversion functions                                        */
-
-
-char *edg_wll_stat_flags_to_string(int flags)
-{
-        char *cflags = NULL, *temp_cflags = NULL;
-
-
-        if (flags & EDG_WLL_STAT_CLASSADS) asprintf(&cflags,"%s","classadd");
-        if (flags & EDG_WLL_STAT_CHILDREN) {
-                if (cflags) {
-                        asprintf(&temp_cflags,"%s+%s",cflags,"children");
-                        free(cflags);
-                        cflags=temp_cflags;
-                }
-                else asprintf(&cflags,"%s","children");
-        }
-        if (flags & EDG_WLL_STAT_CHILDSTAT) {
-                if (cflags) {
-                        asprintf(&temp_cflags,"%s+%s",cflags,"childstat");
-                        free(cflags);
-                        cflags=temp_cflags;
-                }
-                else asprintf(&cflags,"%s","childstat");
-        }
-        if (flags & EDG_WLL_STAT_NO_JOBS) {
-                if (cflags) {
-                        asprintf(&temp_cflags,"%s+%s",cflags,"no_jobs");
-                        free(cflags);
-                        cflags=temp_cflags;
-                }
-                else asprintf(&cflags,"%s","no_jobs");
-        }
-        if (flags & EDG_WLL_STAT_NO_STATES) {
-                if (cflags) {
-                        asprintf(&temp_cflags,"%s+%s",cflags,"no_states");
-                        free(cflags);
-                        cflags=temp_cflags;
-                }
-                else asprintf(&cflags,"%s","no_states");
-        }
-
-        if (!cflags) cflags = strdup("");
-
-        return(cflags);
-}
-
-
-int edg_wll_string_to_stat_flags(char *cflags)
-{
-       int flags = 0;
-       char *sflag, *last;
-
-       if (cflags == NULL) return 0;
-
-       sflag = strtok_r(cflags, "+", &last);
-       while (sflag != NULL) {
-               if (!strcmp(sflag,"classadd")) flags = flags | EDG_WLL_STAT_CLASSADS;
-               if (!strcmp(sflag,"children")) flags = flags | EDG_WLL_STAT_CHILDREN;
-               if (!strcmp(sflag,"childstat")) flags = flags | EDG_WLL_STAT_CHILDSTAT;
-               if (!strcmp(sflag,"no_jobs")) flags = flags | EDG_WLL_STAT_NO_JOBS;
-               if (!strcmp(sflag,"no_states")) flags = flags | EDG_WLL_STAT_NO_STATES;
-               sflag = strtok_r(NULL, "+", &last);
-       } 
-
-       return(flags);
-}
-
-
-char *edg_wll_purge_flags_to_string(int flags)
-{
-        char *cflags = NULL, *temp_cflags = NULL;
-
-
-        if (flags & EDG_WLL_PURGE_REALLY_PURGE) asprintf(&cflags,"%s","really_purge");
-        if (flags & EDG_WLL_PURGE_LIST_JOBS) {
-                if (cflags) {
-                        asprintf(&temp_cflags,"%s+%s",cflags,"list_jobs");
-                        free(cflags);
-                        cflags=temp_cflags;
-                }
-                else asprintf(&cflags,"%s","list_jobs");
-        }
-        if (flags & EDG_WLL_PURGE_SERVER_DUMP) {
-                if (cflags) {
-                        asprintf(&temp_cflags,"%s+%s",cflags,"server_dump");
-                        free(cflags);
-                        cflags=temp_cflags;
-                }
-                else asprintf(&cflags,"%s","server_dump");
-        }
-        if (flags & EDG_WLL_PURGE_CLIENT_DUMP) {
-                if (cflags) {
-                        asprintf(&temp_cflags,"%s+%s",cflags,"client_dump");
-                        free(cflags);
-                        cflags=temp_cflags;
-                }
-                else asprintf(&cflags,"%s","client_dump");
-        }
-
-        if (!cflags) cflags = strdup("");
-
-        return(cflags);
-}
-
-
-int edg_wll_string_to_purge_flags(char *cflags)
-{
-       int flags = 0;
-       char *sflag, *last;
-
-       if (cflags == NULL) return 0;
-
-       sflag = strtok_r(cflags, "+", &last);
-       while (sflag != NULL) {
-               if (!strcmp(sflag,"really_purge")) flags = flags | EDG_WLL_PURGE_REALLY_PURGE;
-               if (!strcmp(sflag,"list_jobs")) flags = flags | EDG_WLL_PURGE_LIST_JOBS;
-               if (!strcmp(sflag,"server_dump")) flags = flags | EDG_WLL_PURGE_SERVER_DUMP;
-               if (!strcmp(sflag,"client_dump")) flags = flags | EDG_WLL_PURGE_CLIENT_DUMP;
-               sflag = strtok_r(NULL, "+", &last);
-       } 
-
-       return(flags);
-}
-
-
-/* Functions for conversion of DUMP constants */
-
-static const char * const dumpConsts[] = {
-       "EDG_WLL_DUMP_NOW",
-       "EDG_WLL_DUMP_LAST_START",
-       "EDG_WLL_DUMP_LAST_END",
-};
-
-int edg_wll_StringToDumpConst(const char *name)
-
-{
-        int     i;
-
-        for (i=0; i<sizeof(dumpConsts)/sizeof(dumpConsts[0]); i++)
-                if (strcasecmp(dumpConsts[i],name) == 0) return -(i+1);
-        return 1;
-}
-
-char *edg_wll_DumpConstToString(int dumpConst)
-{
-        if (dumpConst >= 0 || -(dumpConst) > sizeof(dumpConsts)/sizeof(dumpConsts[0])) return (char *) NULL;
-        return strdup(dumpConsts[-(dumpConst+1)]);
-}
-
-
-
-/* Functions for conversion of DONE CODE */ 
-
-static const char * const done_codeConsts[] = {
-       "DONE_CODE_OK",
-       "DONE_CODE_FAILED",
-       "DONE_CODE_CANCELLED",
-};
-
-int edg_wll_StringTodone_code(const char *name)
-
-{
-        int     i;
-
-        for (i=0; i<sizeof(done_codeConsts)/sizeof(done_codeConsts[0]); i++)
-                if (strcasecmp(done_codeConsts[i],name) == 0) return i;
-        return 1;
-}
-
-char *edg_wll_done_codeToString(int done_codeConst)
-{
-        if (done_codeConst < 0 || (done_codeConst) > sizeof(done_codeConsts)/sizeof(done_codeConsts[0])) return (char *) NULL;
-        return strdup(done_codeConsts[done_codeConst]);
-}
-
-
-
-/* Functions for conversion of QUERY ATTRIBUTES */ 
-
-static const char * const query_attrConsts[] = {
-        "EDG_WLL_QUERY_ATTR_UNDEF",
-        "EDG_WLL_QUERY_ATTR_JOBID",
-        "EDG_WLL_QUERY_ATTR_OWNER",
-        "EDG_WLL_QUERY_ATTR_STATUS",
-        "EDG_WLL_QUERY_ATTR_LOCATION",
-        "EDG_WLL_QUERY_ATTR_DESTINATION",
-        "EDG_WLL_QUERY_ATTR_DONECODE",
-        "EDG_WLL_QUERY_ATTR_USERTAG",
-        "EDG_WLL_QUERY_ATTR_TIME",
-        "EDG_WLL_QUERY_ATTR_LEVEL",
-        "EDG_WLL_QUERY_ATTR_HOST",
-        "EDG_WLL_QUERY_ATTR_SOURCE",
-        "EDG_WLL_QUERY_ATTR_INSTANCE",
-        "EDG_WLL_QUERY_ATTR_EVENT_TYPE",
-        "EDG_WLL_QUERY_ATTR_CHKPT_TAG",
-        "EDG_WLL_QUERY_ATTR_RESUBMITTED",
-        "EDG_WLL_QUERY_ATTR_PARENT",
-        "EDG_WLL_QUERY_ATTR_EXITCODE",
-        "EDG_WLL_QUERY_ATTR__LAST",
-};
-
-edg_wll_QueryAttr edg_wll_StringToquery_attr(const char *name)
-
-{
-        int     i;
-
-        for (i=0; i<sizeof(query_attrConsts)/sizeof(query_attrConsts[0]); i++)
-                if (strcasecmp(query_attrConsts[i],name) == 0) return (edg_wll_QueryAttr) i;
-        return EDG_WLL_QUERY_ATTR_UNDEF;
-}
-
-char *edg_wll_query_attrToString(edg_wll_QueryAttr query_attrConst)
-{
-        if (query_attrConst < 0 || (query_attrConst) > sizeof(query_attrConsts)/sizeof(query_attrConsts[0])) return (char *) NULL;
-        return strdup(query_attrConsts[(int) query_attrConst]);
-}
-
-
-
-/* Functions for conversion of NOTIFICATION CHANGE OPERATORS */ 
-
-static const char * const notifChangeOpConsts[] = {
-       "EDG_WLL_NOTIF_NOOP",
-       "EDG_WLL_NOTIF_REPLACE",
-       "EDG_WLL_NOTIF_ADD",
-       "EDG_WLL_NOTIF_REMOVE",
-};
-
-
-
-edg_wll_NotifChangeOp edg_wll_StringToNotifChangeOp(const char *name)
-{
-        int     i;
-
-        for (i=0; i<sizeof(notifChangeOpConsts)/sizeof(notifChangeOpConsts[0]); i++)
-                if (strcasecmp(notifChangeOpConsts[i],name) == 0) return (edg_wll_NotifChangeOp) i;
-        return EDG_WLL_NOTIF_NOOP;
-}
-
-
-
-char *edg_wll_NotifChangeOpToString(edg_wll_NotifChangeOp notifChangeOpConst)
-{
-        if (notifChangeOpConst < 0 || (notifChangeOpConst) > sizeof(notifChangeOpConsts)/sizeof(notifChangeOpConsts[0])) return (char *) NULL;
-        return strdup(notifChangeOpConsts[(int) notifChangeOpConst]);
-}
-
diff --git a/org.glite.lb.common/src/xml_parse.c.T b/org.glite.lb.common/src/xml_parse.c.T
deleted file mode 100644 (file)
index 4b2e2bd..0000000
+++ /dev/null
@@ -1,2926 +0,0 @@
-#ident "$Header$"
-
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h>
-#include <assert.h>
-
-#include <expat.h>     // Expat header file
-
-#include "globus_config.h"
-
-#include "trio.h"
-#include "glite/lb/producer.h"
-#include "glite/wmsutils/jobid/cjobid.h"
-
-#include "escape.h"
-#include "context-int.h"
-#include "xml_parse.h"
-#include "xml_conversions.h"    
-
-
-#ifdef __GNUC__ 
-#define UNUSED_VAR __attribute__((unused))
-#else
-#define UNUSED_VAR 
-#endif
-
-#define QUERY_EVENTS_REQUEST_BEGIN             "<edg_wll_QueryEventsRequest"
-#define QUERY_EVENTS_REQUEST_END               "\t</and>\r\n</edg_wll_QueryEventsRequest>"
-#define QUERY_EVENTS_OREC_BEGIN                        "\t\t<orEventConditions>\r\n"
-#define QUERY_EVENTS_OREC_END                  "\t\t</orEventConditions>\r\n"
-#define QUERY_EVENTS_ORJC_BEGIN                        "\t\t<orJobConditions>\r\n"
-#define QUERY_EVENTS_ORJC_END                  "\t\t</orJobConditions>\r\n"
-#define QUERY_JOBS_REQUEST_BEGIN               "<edg_wll_QueryJobsRequest"
-#define QUERY_JOBS_REQUEST_END                 "\t</and>\r\n</edg_wll_QueryJobsRequest>"
-#define QUERY_JOBS_OR_BEGIN                    "\t\t<orJobConditions>\r\n"
-#define QUERY_JOBS_OR_END                      "\t\t</orJobConditions>\r\n"
-#define PURGE_REQUEST_BEGIN                    "<edg_wll_PurgeRequest>\r\n"
-#define PURGE_REQUEST_END                      "</edg_wll_PurgeRequest>\r\n"
-#define DUMP_REQUEST_BEGIN                     "<edg_wll_DumpRequest>\r\n"
-#define DUMP_REQUEST_END                       "</edg_wll_DumpRequest>\r\n"
-#define LOAD_REQUEST_BEGIN                     "<edg_wll_LoadRequest>\r\n"
-#define LOAD_REQUEST_END                       "</edg_wll_LoadRequest>\r\n"
-#define INDEXED_ATTRS_REQUEST_BEGIN            "<edg_wll_IndexedAttrsRequest>\r\n"
-#define INDEXED_ATTRS_REQUEST_END              "</edg_wll_IndexedAttrsRequest>\r\n"
-#define NOTIF_REQUEST_BEGIN                    "<edg_wll_NotifRequest"
-#define NOTIF_REQUEST_END                      "</edg_wll_NotifRequest>\r\n"
-#define STATS_REQUEST_BEGIN           "<edg_wll_StatsRequest"
-#define STATS_REQUEST_END             "</edg_wll_StatsRequest>\r\n"
-#define QUERY_SEQUENCE_CODE_REQUEST_BEGIN      "<edg_wll_QuerySequenceCodeRequest>\r\n"
-#define QUERY_SEQUENCE_CODE_REQUEST_END                "</edg_wll_QuerySequenceCodeRequest>\r\n"
-
-
-/* lists of accepted tags */
-static const char * const jobStatTags[] = {
-@@@{
-       selectType $status '_common_';
-        for (getFieldsOrdered $status) {
-                gen "\t\"$_\",\n";
-        }
-@@@}
-        NULL
-};
-
-
-@@@{
-                gen "static const char * const eventJobCommon\[] = {";
-                selectType $event '_common_';
-                for (getFieldsOrdered $event) {
-                        my $f = selectField $event $_;
-                        my $fn = $f->{name};
-                        gen "\"$fn\",  ";
-                }
-                gen "NULL };\n";
-@@@}
-@@@{
-        for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-                        $event->getTypes) {
-                gen "static const char * const event$t\[] = {";
-                selectType $event $t;
-                for (getFieldsOrdered $event) {
-                        my $f = selectField $event $_;
-                        my $fn = $f->{name};
-                        gen "\"$fn\",  "
-                }
-                gen "NULL };\n";
-        }
-@@@}
-
-
-
-static const char * const * const eventTags[] = {
-        eventJobCommon,
-@@@{
-        for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-                        $event->getTypes) {
-                gen "\tevent$t,\n";
-        }
-        gen "\tNULL\n};\n";
-@@@}
-
-
-
-/* used when error unrecoverable*/
-#define unexpError() {\
-        char    *e;\
-\
-        if (XMLCtx->errtxt) {\
-                asprintf(&e,"%s\nunexpected <%s> at line %d",XMLCtx->errtxt,\
-                        XMLCtx->element,XML_GetCurrentLineNumber(XMLCtx->p));\
-                free(XMLCtx->errtxt);\
-        } else asprintf(&e,"unexpected <%s> at line %d",\
-                XMLCtx->element,XML_GetCurrentLineNumber(XMLCtx->p));\
-        XMLCtx->errtxt = e;\
-}
-
-
-
-static void emptyCall(void){
-}
-
-/* used when error recoverable */
-// XXX quadratic complexity - problematic when lots of errors in long outputs (10.000's)
-#define unexpWarning() {\
-        char    *e;\
-\
-emptyCall(); \
-        if (XMLCtx->warntxt) {\
-                asprintf(&e,"%s\nunexpected <%s> at line %d",XMLCtx->warntxt,\
-                        XMLCtx->element,XML_GetCurrentLineNumber(XMLCtx->p));\
-                free(XMLCtx->warntxt);\
-        } else asprintf(&e,"unexpected <%s> at line %d",\
-                XMLCtx->element,XML_GetCurrentLineNumber(XMLCtx->p));\
-        XMLCtx->warntxt = e;\
-}
-
-
-
-
-static void startQueryJobs(void *data, const char *el, const char **attr)
-{
-       edg_wll_XML_ctx *XMLCtx = data;
-
-        
-       if (XMLCtx->char_buf) edg_wll_freeBuf(XMLCtx);
-
-        strcpy(XMLCtx->element, el);
-
-       switch (XMLCtx->level) {
-                case 0 : if (strcmp("edg_wll_QueryJobsResult", el)) { unexpError() break;}
-                        if (attr[0] && attr[1] && attr[2] && attr[3]) {
-                               if (strcmp(attr[0],"code")) { unexpError() break;}
-                                else XMLCtx->errCode = atoi(attr[1]);
-
-                                if (strcmp(attr[2],"desc")) { unexpError() break;}
-                                else XMLCtx->errDesc = strdup(attr[3]);
-                         }
-                        break;  
-
-               case 1 : if (strcmp("edg_wll_Job", el)) unexpError()
-                        break;
-
-               case 2 : if (!strcmp("jobId", el)) {
-                               /* allocates space only for pointers to structures edg_wlc_jobid_t */
-                               /* space for structures allocate characterUserJobs         */
-                               XMLCtx->jobsOutGlobal = realloc(XMLCtx->jobsOutGlobal,
-                                                        (XMLCtx->position+1)*sizeof(*XMLCtx->jobsOutGlobal));
-                               if (!XMLCtx->jobsOutGlobal) { edg_wll_SetError(XMLCtx->ctx, ENOMEM, NULL); unexpError() return; }
-                               XMLCtx->jobsOutGlobal[XMLCtx->position] = NULL;
-                        }
-                        else if (!strcmp("jobStat", el)) {
-                               XMLCtx->stat_begin = XML_GetCurrentByteIndex(XMLCtx->p);
-                               XMLCtx->jobStatGlobal = (edg_wll_JobStat *) realloc(XMLCtx->jobStatGlobal,
-                                                               (XMLCtx->position2+1)*sizeof(*XMLCtx->jobStatGlobal));
-
-                        }
-                        else unexpWarning()
-                        break;
-
-               // XXX ?? this may be usefull with status
-               case 3 : /* fall through */
-               case 4 : /* do not check xml tags, try to be faul-tolerant              */
-                        /* if tag not found during unparsing, xmlMalformed flag is set */
-                        break;
-
-               default: if (!XMLCtx->stat_begin) unexpWarning()
-                        break;
-       }
-
-       XMLCtx->level++;
-}
-
-
-
-static void startQueryEvents(void *data, const char *el, const char **attr)
-{
-       edg_wll_XML_ctx *XMLCtx = data;
-
-        
-       if (XMLCtx->char_buf) edg_wll_freeBuf(XMLCtx);
-
-        strcpy(XMLCtx->element, el);
-
-       switch (XMLCtx->level) {
-                case 0 : if (strcmp("edg_wll_QueryEventsResult", el)) { unexpError() break;}
-                         if (attr[0] && attr[1] && attr[2] && attr[3]) {
-                                if (strcmp(attr[0],"code")) { unexpError() break;}
-                                else XMLCtx->errCode = atoi(attr[1]);
-
-                                if (strcmp(attr[2],"desc")) { unexpError() break;}
-                                else XMLCtx->errDesc = strdup(attr[3]);
-                         }
-
-                        break;  
-
-               case 1 : if (strcmp("edg_wll_Event", el)) unexpError()
-                         else {
-                               XMLCtx->position++;
-                               
-                               if (!attr[0] || !attr[1]) { unexpError() break;}
-                               if (strcmp(attr[0],"name")) { unexpError() break;}
-                                if ( (XMLCtx->eventCode = edg_wll_StringToEvent((char *) attr[1])) 
-                                       == EDG_WLL_EVENT_UNDEF ) { unexpError() break;}
-                                XMLCtx->eventsOutGlobal = realloc(XMLCtx->eventsOutGlobal,
-                                                         (XMLCtx->position+1)*sizeof(*XMLCtx->eventsOutGlobal));
-                                       if (!XMLCtx->eventsOutGlobal) { edg_wll_SetError(XMLCtx->ctx, ENOMEM, NULL); unexpError() return; }
-                                       memset(&(XMLCtx->eventsOutGlobal)[XMLCtx->position],0,sizeof(*XMLCtx->eventsOutGlobal));
-                                XMLCtx->eventsOutGlobal[XMLCtx->position].any.type  = XMLCtx->eventCode;
-                               }
-                        break;
-
-               case 2 : /* do not check xml tags, try to be faul-tolerant              */
-                        /* if tag not found during unparsing, xmlMalformed flag is set */
-                        break;
-
-               default: unexpWarning()
-                        break;
-       }
-
-       XMLCtx->level++;
-}
-
-
-
-
-static void startUserJobs(void *data, const char *el, const char **attr UNUSED_VAR)
-{
-       edg_wll_XML_ctx *XMLCtx = data;
-
-
-       if (XMLCtx->char_buf) edg_wll_freeBuf(XMLCtx);
-
-        strcpy(XMLCtx->element, el);
-
-       switch (XMLCtx->level) {
-                case 0 : if (strcmp("edg_wll_UserJobs", el)) { unexpError() break;}
-                         if (attr[0] && attr[1] && attr[2] && attr[3]) {
-                                if (strcmp(attr[0],"code")) { unexpError() break;}
-                                else XMLCtx->errCode = atoi(attr[1]);
-
-                                if (strcmp(attr[2],"desc")) { unexpError() break;}
-                               else XMLCtx->errDesc = strdup(attr[3]);
-                         }
-                        break;  
-
-               case 1 : if (strcmp("jobId", el)) unexpError()
-                        else {
-                               /* allocates space only for pointers to structures edg_wlc_jobid_t */
-                               /* space for structures allocate endUserJobs                       */
-                               XMLCtx->jobsOutGlobal = realloc(XMLCtx->jobsOutGlobal,
-                                                        (XMLCtx->position+1)*sizeof(XMLCtx->jobsOutGlobal));
-                               if (!XMLCtx->jobsOutGlobal) { edg_wll_SetError(XMLCtx->ctx, ENOMEM, NULL); unexpError() return; }
-                               XMLCtx->jobsOutGlobal[XMLCtx->position] = NULL;
-                        }
-                        break;
-
-
-               default: unexpWarning()
-                        break;
-       }
-
-       XMLCtx->level++;
-}
-
-
-
-static void startJobStatus(void *data, const char *el, const char **attr)
-{
-       edg_wll_XML_ctx *XMLCtx = data;
-       edg_wll_JobStatCode     statusCode;             /* code of status in process */
-
-
-       if (XMLCtx->char_buf) edg_wll_freeBuf(XMLCtx);
-
-        strcpy(XMLCtx->element, el);
-
-       switch (XMLCtx->level) {
-                case 0 : if (strcmp("jobStat", el)) { unexpError() break;}
-                        if (!attr[0] || !attr[1]) { unexpError() break;}
-                        if (strcmp(attr[0],"name")) { unexpError() break;}
-
-                        if ( (statusCode = edg_wll_StringToStat(attr[1])) 
-                               == (edg_wll_JobStatCode)-1 ) 
-                               /* status unknown, but try to get as much as possible */
-                               unexpWarning()
-                        else {
-                               if (edg_wll_InitStatus(&XMLCtx->jobStatSingleGlobal)) 
-                                       { edg_wll_SetError(XMLCtx->ctx, ENOMEM, NULL); unexpError() return; }
-                               XMLCtx->jobStatSingleGlobal.state = statusCode;
-                        }
-
-                         if (attr[2] && attr[3] && attr[4] && attr[5]) {
-                                if (strcmp(attr[2],"code")) { unexpError() break;}
-                                else XMLCtx->errCode = atoi(attr[3]);
-
-                                if (strcmp(attr[4],"desc")) { unexpError() break;}
-                                else XMLCtx->errDesc = strdup(attr[5]);
-                         }
-                         break;
-
-               case 1 : if (!strcmp("user_tags", el) || !strcmp("user_values", el) 
-                               || !strcmp("children_hist", el) ||  !strcmp("stateEnterTimes", el)
-                               || !strcmp("children_states", el) || !strcmp("children", el)) {
-                               XMLCtx->stat_begin = XML_GetCurrentByteIndex(XMLCtx->p);
-                        }
-                        break;
-
-               case 2 : /* fall through */
-               case 3 : /* fall through */
-               case 4 : /* do not check xml tags, try to be faul-tolerant              */
-                        /* if tag not found during unparsing, xmlMalformed flag is set */
-                        break;
-
-
-               default: unexpWarning() 
-                        break;
-       }
-
-       XMLCtx->level++;
-}
-
-
-static void startStrList(void *data, const char *el, const char **attr)
-{
-       edg_wll_XML_ctx *XMLCtx = data;
-
-
-       if (XMLCtx->char_buf) edg_wll_freeBuf(XMLCtx);
-
-        strcpy(XMLCtx->element, el);
-
-       switch (XMLCtx->level) {
-                case 0 : if (strcmp(XMLCtx->XML_tag, el)) unexpError()
-                        break;  
-
-               case 1 : if (!strcmp(XMLCtx->XML_tag2, el)) {
-                               XMLCtx->strListGlobal = realloc(XMLCtx->strListGlobal,
-                                                        (XMLCtx->position+1)*sizeof(*XMLCtx->strListGlobal));
-                                if (!XMLCtx->strListGlobal) { edg_wll_SetError(XMLCtx->ctx, ENOMEM, NULL); unexpError() return; }
-                                XMLCtx->strListGlobal[XMLCtx->position] = NULL;
-
-                        }
-                        break;
-
-               default: unexpWarning() 
-                        break;
-       }
-
-       XMLCtx->level++;
-}
-
-
-
-static void startIntList(void *data, const char *el, const char **attr)
-{
-       edg_wll_XML_ctx *XMLCtx = data;
-       int index = 0;
-
-
-       if (XMLCtx->char_buf) edg_wll_freeBuf(XMLCtx);
-
-        strcpy(XMLCtx->element, el);
-
-       switch (XMLCtx->level) {
-                case 0 : if (strcmp(XMLCtx->XML_tag, el)) unexpError()
-                        break;  
-
-               case 1 : if ( (index = XMLCtx->tagToIndex(el)) >= 0 ) {
-                               if (index > XMLCtx->max_index) {
-                                       XMLCtx->max_index = index;
-                                       /* leave zeros' possition for array length */
-                                       XMLCtx->intListGlobal = realloc(XMLCtx->intListGlobal,
-                                                        (XMLCtx->max_index+2)*sizeof(*XMLCtx->intListGlobal));
-                                      if (!XMLCtx->intListGlobal) {edg_wll_SetError(XMLCtx->ctx, ENOMEM, NULL); unexpError() return; }
-                                       XMLCtx->intListGlobal[XMLCtx->max_index+1] = 0;
-                               }
-
-                        }
-                        break;
-
-               default: unexpWarning() 
-                        break;
-       }
-
-       XMLCtx->level++;
-}
-
-
-static void startTagList(void *data, const char *el, const char **attr)
-{
-       edg_wll_XML_ctx *XMLCtx = data;
-
-
-       if (XMLCtx->char_buf) edg_wll_freeBuf(XMLCtx);
-
-        strcpy(XMLCtx->element, el);
-
-       switch (XMLCtx->level) {
-                case 0 : if (strcmp(XMLCtx->XML_tag, el)) unexpError()
-                        break;  
-
-               case 1 : if (!attr[0] || !attr[1]) { unexpError() break;}
-                        if (strcmp(attr[0],"name")) { unexpError() break;}
-
-                        if (!strcmp(XMLCtx->XML_tag2, el)) {
-                               XMLCtx->tagListGlobal = realloc(XMLCtx->tagListGlobal,
-                                                        (XMLCtx->position+1)*sizeof(*XMLCtx->tagListGlobal));
-                                if (!XMLCtx->tagListGlobal) { edg_wll_SetError(XMLCtx->ctx, ENOMEM, NULL); unexpError() return; }
-                               XMLCtx->tagListGlobal[XMLCtx->position].tag = strdup(attr[1]);
-                               XMLCtx->stat_begin = XML_GetCurrentByteIndex(XMLCtx->p);
-                        }
-                        break;
-
-               default: unexpWarning() 
-                        break;
-       }
-
-       XMLCtx->level++;
-}
-
-
-static void startStsList(void *data, const char *el, const char **attr)
-{
-       edg_wll_XML_ctx *XMLCtx = data;
-
-
-       if (XMLCtx->char_buf) edg_wll_freeBuf(XMLCtx);
-
-        strcpy(XMLCtx->element, el);
-
-       switch (XMLCtx->level) {
-                case 0 : if (strcmp(XMLCtx->XML_tag, el)) unexpError()
-                        break;  
-
-               case 1 : if (!strcmp(XMLCtx->XML_tag2, el)) {
-                               XMLCtx->stsListGlobal = realloc(XMLCtx->stsListGlobal,
-                                                        (XMLCtx->position+1)*sizeof(*XMLCtx->stsListGlobal));
-                                if (!XMLCtx->stsListGlobal) { edg_wll_SetError(XMLCtx->ctx, ENOMEM, NULL); unexpError() return; }
-                                // edg_wll_InitStatus(&XMLCtx->stsListGlobal[XMLCtx->position]);
-                               // initialized in startJobStatus();
-
-                               XMLCtx->stat_begin = XML_GetCurrentByteIndex(XMLCtx->p);
-                        }
-                        break;
-
-               case 2 : /* fall through */
-               case 3 : /* fall through */
-               case 4 : /* fall through */
-               case 5 : /* do not check xml tags ut to depth 5 */
-                        /* will be checked later               */
-                        break;
-
-               default: unexpWarning() 
-                        break;
-       }
-
-       XMLCtx->level++;
-}
-
-
-
-static void startPurgeResult(void *data, const char *el, const char **attr)
-{
-       edg_wll_XML_ctx *XMLCtx = data;
-       int     i;
-
-       
-       strcpy(XMLCtx->element, el);
-
-       switch (XMLCtx->level) {
-               case 0: if (strcasecmp(el,"edg_wll_PurgeResult")) { unexpError() break;}
-                       for ( i = 0; attr[i] && attr[i+1]; i += 2 ) {
-                               if (!strcmp(attr[i],"code"))
-                                       XMLCtx->errCode = atoi(attr[i+1]);
-                               else if (!strcmp(attr[i],"desc"))
-                                       XMLCtx->errDesc = strdup(attr[i+1]);
-                               else { unexpError() }
-                       }
-                       break;
-               case 1: if (strcasecmp(el,"jobs") && strcasecmp(el,"server_file")) unexpWarning()
-                       break;
-               case 2: if (!strcasecmp(el,"jobId")) {
-                               XMLCtx->purgeResultGlobal.jobs = realloc(XMLCtx->purgeResultGlobal.jobs,
-                                               (XMLCtx->position+2) * sizeof(XMLCtx->purgeResultGlobal.jobs));
-
-                                if (!XMLCtx->purgeResultGlobal.jobs) { 
-                                       edg_wll_SetError(XMLCtx->ctx, ENOMEM, NULL); 
-                                       unexpError() return;
-                               }
-                                XMLCtx->purgeResultGlobal.jobs[XMLCtx->position+1] = NULL;
-                       }
-                       else 
-                               unexpWarning()
-                       break;
-               default: unexpWarning() 
-                        break;
-       }
-       XMLCtx->level++;
-}
-
-
-
-static void startDumpResult(void *data, const char *el, const char **attr)
-{
-       edg_wll_XML_ctx *XMLCtx = data;
-       int     i;
-
-       
-       strcpy(XMLCtx->element, el);
-
-       switch (XMLCtx->level) {
-               case 0: if (strcasecmp(el,"edg_wll_DumpResult")) { unexpError() break;}
-                       for ( i = 0; attr[i] && attr[i+1]; i += 2 ) {
-                               if (!strcmp(attr[i],"code"))
-                                       XMLCtx->errCode = atoi(attr[i+1]);
-                               else if (!strcmp(attr[i],"desc"))
-                                       XMLCtx->errDesc = strdup(attr[i+1]);
-                               else { unexpError() }
-                       }
-                       break;
-               case 1: if (strcasecmp(el,"from") && strcasecmp(el,"to") 
-                               && strcasecmp(el,"server_file")) unexpWarning()
-                       break;
-               default: unexpWarning() 
-                        break;
-       }
-       XMLCtx->level++;
-}
-
-
-
-static void startLoadResult(void *data, const char *el, const char **attr)
-{
-        edg_wll_XML_ctx *XMLCtx = data;
-        int     i;
-
-        
-        strcpy(XMLCtx->element, el);
-        
-        switch (XMLCtx->level) {
-                case 0: if (strcasecmp(el,"edg_wll_LoadResult")) { unexpError() break;}
-                        for ( i = 0; attr[i] && attr[i+1]; i += 2 ) {
-                                if (!strcmp(attr[i],"code"))
-                                        XMLCtx->errCode = atoi(attr[i+1]);
-                                else if (!strcmp(attr[i],"desc"))
-                                        XMLCtx->errDesc = strdup(attr[i+1]);
-                                else { unexpError() }
-                        }       
-                        break;          
-                case 1: if (strcasecmp(el,"from") && strcasecmp(el,"to")
-                                && strcasecmp(el,"server_file")) unexpWarning()
-                        break;  
-                default: unexpWarning()
-                         break;
-        }       
-        XMLCtx->level++;
-}
-
-
-
-static void startIndexedAttrs(void *data, const char *el, const char **attr)
-{
-        edg_wll_XML_ctx *XMLCtx = data;
-        int     i;
-
-        
-        strcpy(XMLCtx->element, el);
-        
-        switch (XMLCtx->level) {
-                case 0: if (strcasecmp(el,"edg_wll_GetIndexedAttributesResult")) { unexpError() break;}
-                        for ( i = 0; attr[i] && attr[i+1]; i += 2 ) {
-                                if (!strcmp(attr[i],"code"))
-                                        XMLCtx->errCode = atoi(attr[i+1]);
-                                else if (!strcmp(attr[i],"desc"))
-                                        XMLCtx->errDesc = strdup(attr[i+1]);
-                                else { unexpError() }
-                        }       
-                        break;          
-                case 1: if (!strcasecmp(el,"index")) {
-                               XMLCtx->attrsGlobal = realloc(XMLCtx->attrsGlobal,
-                                                        (XMLCtx->position+2)*sizeof(*XMLCtx->attrsGlobal));
-                               if (!XMLCtx->attrsGlobal) { 
-                                       edg_wll_SetError(XMLCtx->ctx, ENOMEM, NULL); 
-                                       unexpError() 
-                                       return;
-                               }
-                               XMLCtx->attrsGlobal[XMLCtx->position] = NULL;
-                               XMLCtx->attrsGlobal[XMLCtx->position+1] = NULL;
-                       }
-                       else
-                                unexpWarning()
-                        break;  
-                case 2: if (!strcasecmp(el,"QueryRec")) {
-                               XMLCtx->attrsGlobal[XMLCtx->position] = 
-                                       realloc(XMLCtx->attrsGlobal[XMLCtx->position],
-                                               (XMLCtx->position2+2)*sizeof(**XMLCtx->attrsGlobal));
-                               if (!XMLCtx->attrsGlobal[XMLCtx->position]) { 
-                                       edg_wll_SetError(XMLCtx->ctx, ENOMEM, NULL);
-                                       unexpError()
-                                       return;
-                               }
-                               memset(&(XMLCtx->attrsGlobal[XMLCtx->position][XMLCtx->position2]), 0, 
-                                       2*sizeof(**XMLCtx->attrsGlobal));
-                       }
-                       else
-                                unexpWarning()
-                        break;  
-               case 3: if (strcasecmp(el,"attribute") && strcasecmp(el,"state") &&
-                               strcasecmp(el,"name")) unexpWarning()
-                       break;  
-                default: unexpWarning()
-                         break;
-        }       
-        XMLCtx->level++;
-}
-
-
-
-static void startNotifResult(void *data, const char *el, const char **attr)
-{
-        edg_wll_XML_ctx *XMLCtx = data;
-        int     i;
-
-        
-        strcpy(XMLCtx->element, el);
-        
-        switch (XMLCtx->level) {
-                case 0: if (strcasecmp(el,"edg_wll_NotifResult")) { unexpError() break;}
-                        for ( i = 0; attr[i] && attr[i+1]; i += 2 ) {
-                                if (!strcmp(attr[i],"code"))
-                                        XMLCtx->errCode = atoi(attr[i+1]);
-                                else if (!strcmp(attr[i],"desc"))
-                                        XMLCtx->errDesc = strdup(attr[i+1]);
-                                else { unexpError() }
-                        }       
-                        break;          
-                case 1: if (strcasecmp(el,"validity")) unexpWarning()
-                        break;  
-                default: unexpWarning()
-                         break;
-        }       
-        XMLCtx->level++;
-}               
-
-
-
-static void startQuerySequenceCodeResult(void *data, const char *el, const char **attr)
-{
-        edg_wll_XML_ctx *XMLCtx = data;
-        int     i;
-
-        
-        strcpy(XMLCtx->element, el);
-        
-        switch (XMLCtx->level) {
-                case 0: if (strcasecmp(el,"edg_wll_QuerySequenceCodeResult")) { unexpError() break;}
-                        for ( i = 0; attr[i] && attr[i+1]; i += 2 ) {
-                                if (!strcmp(attr[i],"code"))
-                                        XMLCtx->errCode = atoi(attr[i+1]);
-                                else if (!strcmp(attr[i],"desc"))
-                                        XMLCtx->errDesc = strdup(attr[i+1]);
-                                else { unexpError() }
-                        }       
-                        break;          
-                case 1: if (strcasecmp(el,"sequence_code")) unexpWarning()
-                        break;  
-                default: unexpWarning()
-                         break;
-        }       
-        XMLCtx->level++;
-}
-
-
-
-static void startStatsResult(void *data, const char *el, const char **attr)
-{
-        edg_wll_XML_ctx *XMLCtx = data;
-        int     i;
-
-        
-        strcpy(XMLCtx->element, el);
-        
-        switch (XMLCtx->level) {
-                case 0: if (strcasecmp(el,"edg_wll_StatsResult")) { unexpError() break;}
-                        for ( i = 0; attr[i] && attr[i+1]; i += 2 ) {
-                                if (!strcmp(attr[i],"code"))
-                                        XMLCtx->errCode = atoi(attr[i+1]);
-                                else if (!strcmp(attr[i],"desc"))
-                                        XMLCtx->errDesc = strdup(attr[i+1]);
-                                else { unexpError() }
-                        }       
-                        break;          
-                case 1: if (strcasecmp(el,"from") && strcasecmp(el,"to") &&
-                               strcasecmp(el,"rate") && strcasecmp(el,"duration") &&
-                               strcasecmp(el,"res_from") && strcasecmp(el,"res_to")) 
-                                       unexpWarning()
-                        break;  
-                default: unexpWarning()
-                         break;
-        }       
-        XMLCtx->level++;
-}               
-
-
-
-static void char_handler(void *data, const char *s, int len)
-{
-       edg_wll_XML_ctx *XMLCtx = data;
-        int i, found = -1, temp_len1;
-        char *temp_s, *temp_s1;
-
-
-        /* if date are only spaces, t\, \r, \n ... don't bother with them */
-        for (i=0; i<len; i++)
-                        if (!isspace(s[i])) { found = i; break; }
-        if (found == -1) return;
-
-        temp_s = malloc((len+1) * sizeof(char));
-
-        /* otherwise use them */
-        memcpy(temp_s,s,len);
-        temp_s[len] = 0;
-        temp_s1 = edg_wll_UnescapeXML((const char *) temp_s);
-        temp_len1 = strlen(temp_s1);
-
-        if (XMLCtx->char_buf_len) 
-               XMLCtx->char_buf = realloc(XMLCtx->char_buf,XMLCtx->char_buf_len+temp_len1 + 1);
-        else  
-               XMLCtx->char_buf = (char *) malloc(temp_len1 + 1);
-
-       memcpy(XMLCtx->char_buf+XMLCtx->char_buf_len,temp_s1,temp_len1 + 1);
-               XMLCtx->char_buf_len += temp_len1;
-        free(temp_s1);
-        free(temp_s);
-}
-
-
-
-static void endQueryJobs(void *data, const char *el)
-{
-       edg_wll_XML_ctx *XMLCtx = data;
-
-
-       switch (XMLCtx->level) {
-               case 3 :
-                       if (!strcmp(XMLCtx->element,"jobId")) {
-                               XMLCtx->jobsOutGlobal[XMLCtx->position] =
-                                       edg_wll_from_string_to_jobid(XMLCtx);
-                               XMLCtx->position++;
-                       }
-                       else if (!strcmp(el,"jobStat")) {
-                               long len = (XML_GetCurrentByteIndex(XMLCtx->p) + XML_GetCurrentByteCount(XMLCtx->p))
-                                                -  XMLCtx->stat_begin;
-
-                               edg_wll_ParseJobStat(XMLCtx->ctx, XMLCtx->message_body + XMLCtx->stat_begin, len, 
-                                                       &XMLCtx->jobStatGlobal[XMLCtx->position2]);
-                               XMLCtx->position2++;
-                               XMLCtx->stat_begin = 0;
-                       }
-                       else {
-                               /* tag was not found -> either missing in previous code or unknown      */
-                               unexpWarning()
-                               edg_wll_freeBuf(XMLCtx);
-                       }
-                       break;
-               default:
-                       if (XMLCtx->char_buf) {
-//                             unexpWarning()
-                               edg_wll_freeBuf(XMLCtx);
-                       }
-                       break;
-       }
-
-        XMLCtx->char_buf = NULL;
-        XMLCtx->char_buf_len = 0;
-       memset(&(XMLCtx->element), 0, sizeof(XMLCtx->element));
-        XMLCtx->level--;
-}
-
-
-static void endQueryEvents(void *data, const char *el UNUSED_VAR)
-{
-       edg_wll_XML_ctx *XMLCtx = data;
-       
-
-       switch (XMLCtx->level) {
-         case 3: 
-@@@{
-        my $i = 1;
-       my $bi = "\t   ";
-        for my $t (sort {$a cmp $b} getAllFields $event) {
-                if ($i == 1)
-                        { gen "$bi if (!strcmp(XMLCtx->element,\"$t\"))\n"; }
-                else
-                        { gen "$bi else if (!strcmp(XMLCtx->element,\"$t\"))\n"; }
-                $i++;
-                my @fo = sort $event->getFieldOccurence($t);
-                if ($#fo == 0) {
-                        selectType $event $fo[0];
-                        my $f = selectField $event $t;
-                        my $ft = $f->{type};
-                       $fo[0] = $fo[0] eq '_common_' ? 'any' : lcfirst $fo[0];
-                        gen "$bi   XMLCtx->eventsOutGlobal[XMLCtx->position].$fo[0].$t =\n";
-                        gen "$bi \tedg_wll_from_string_to_$ft(XMLCtx);\n";
-                }
-                else {
-                        gen "\t      switch (XMLCtx->eventsOutGlobal[XMLCtx->position].any.type) {\n";
-                       for (@fo) {
-                               selectType $event $_;
-                               my $f = selectField $event $t;
-                               my $ft = $f->{type};
-                               $t = 'any' if $_ eq '_common_';
-                               my $u = uc $_;
-                               $_ = lcfirst $_;
-                               gen "$bi     case EDG_WLL_EVENT_$u :\n";
-                               gen "$bi \t  XMLCtx->eventsOutGlobal[XMLCtx->position].$_.$t =\n";
-                               gen "$bi \t    edg_wll_from_string_to_$ft(XMLCtx);\n";
-                               gen "$bi \t  break;\n";
-
-                       }
-                       gen "$bi       default : { unexpWarning() edg_wll_freeBuf(XMLCtx); } \n";
-                       gen "$bi     }\n";
-                }
-        }
-@@@}
-
-           else {
-               /* tag was not found -> either missing in previous code or unknown      */
-               unexpWarning()
-               edg_wll_freeBuf(XMLCtx);
-           }
-           break;
-         default:
-           if (XMLCtx->char_buf) {
-               unexpWarning()
-               edg_wll_freeBuf(XMLCtx);
-           }
-           break; 
-       }
-
-        XMLCtx->char_buf = NULL;
-        XMLCtx->char_buf_len = 0;
-       memset(&(XMLCtx->element), 0, sizeof(XMLCtx->element));
-        XMLCtx->level--;
-
-}
-
-
-
-// XXX: endUserJobs should be unusable soon, delete it
-static void endUserJobs(void *data, const char *el UNUSED_VAR)
-{
-       edg_wll_XML_ctx *XMLCtx = data;
-       int i;
-
-
-       switch (XMLCtx->level) {
-               case 2 :
-                       if (!strcmp(XMLCtx->element,"jobId")) {
-                               XMLCtx->jobsOutGlobal[XMLCtx->position] =
-                                       edg_wll_from_string_to_jobid(XMLCtx);
-                               XMLCtx->position++;
-                       }
-                       else {
-                               /* tag was not found -> either missing in previous code or unknown      */
-                               unexpWarning()
-                               edg_wll_freeBuf(XMLCtx);
-                       }
-                       break;
-               default:
-                       /* only level 2 tags should contain  text fields    */
-                       for (i=0; i < XMLCtx->char_buf_len; i++) 
-                               if (!isspace(XMLCtx->char_buf[i])) unexpWarning()
-                       edg_wll_freeBuf(XMLCtx);
-                       break;
-       }
-
-       memset(&(XMLCtx->element), 0, sizeof(XMLCtx->element));
-       // if ( !strcmp(XMLCtx->element,"jobId") ) XMLCtx->position++;
-       // uncomment this if you want to remove XMLCtx->position++; 5 lines above
-       // it should be useful in case of automatic generation
-        XMLCtx->level--;
-}
-
-
-
-static void endJobStat(void *data, const char *el)
-{
-       edg_wll_XML_ctx *XMLCtx = data;
-
-       
-       switch (XMLCtx->level) {
-         case 2 :
-
-@@@{
-        my $i = 1;
-       my $bi = "\t   ";
-       selectType $status '_common_';
-        for my $t (getFieldsOrdered $status) {
-               my $f = selectField $status $t;
-               my $ft = $f->{type};
-               next if defined($f->{special}) && $f->{special} eq 'XMLstructured';
-                if ($i == 1)
-                        { gen "$bi if (!strcmp(XMLCtx->element,\"$t\"))\n"; }
-                else
-                        { gen "$bi else if (!strcmp(XMLCtx->element,\"$t\"))\n"; }
-                $i++;
-               gen "$bi   XMLCtx->jobStatSingleGlobal.$t =\n";
-               gen "$bi     edg_wll_from_string_to_$ft(XMLCtx);\n";
-        }
-@@@}
-           else if (!strcmp(el,"children_hist")) {
-               long len = (XML_GetCurrentByteIndex(XMLCtx->p) + XML_GetCurrentByteCount(XMLCtx->p))
-                               -  XMLCtx->stat_begin;
-
-               edg_wll_ParseIntList(XMLCtx->ctx, XMLCtx->message_body + XMLCtx->stat_begin, len,
-                       "children_hist",(int (*)()) edg_wll_StringToStat, &XMLCtx->jobStatSingleGlobal.children_hist);
-               XMLCtx->stat_begin = 0;
-           }
-                   else if (!strcmp(el,"children")) {
-               long len = (XML_GetCurrentByteIndex(XMLCtx->p) + XML_GetCurrentByteCount(XMLCtx->p))
-                               -  XMLCtx->stat_begin;
-
-               edg_wll_ParseStrList(XMLCtx->ctx, XMLCtx->message_body + XMLCtx->stat_begin, len,
-                       "children", "jobId", &XMLCtx->jobStatSingleGlobal.children);
-               XMLCtx->stat_begin = 0;
-            }
-           else if (!strcmp(el,"children_states")) {
-               long len = (XML_GetCurrentByteIndex(XMLCtx->p) + XML_GetCurrentByteCount(XMLCtx->p))
-                               -  XMLCtx->stat_begin;
-
-               edg_wll_ParseStsList(XMLCtx->ctx, XMLCtx->message_body + XMLCtx->stat_begin, len,
-                       "children_states", "jobStat", &XMLCtx->jobStatSingleGlobal.children_states);
-               XMLCtx->stat_begin = 0;
-            }
-           else if (!strcmp(el,"user_tags")) {
-               long len = (XML_GetCurrentByteIndex(XMLCtx->p) + XML_GetCurrentByteCount(XMLCtx->p))
-                               -  XMLCtx->stat_begin;
-
-               edg_wll_ParseTagList(XMLCtx->ctx, XMLCtx->message_body + XMLCtx->stat_begin, len,
-                       "user_tags", "tag", &XMLCtx->jobStatSingleGlobal.user_tags);
-               XMLCtx->stat_begin = 0;
-            }
-           else if (!strcmp(el,"stateEnterTimes")) {
-               long len = (XML_GetCurrentByteIndex(XMLCtx->p) + XML_GetCurrentByteCount(XMLCtx->p))
-                               -  XMLCtx->stat_begin;
-
-               edg_wll_ParseIntList(XMLCtx->ctx, XMLCtx->message_body + XMLCtx->stat_begin, len,
-                       "stateEnterTimes",(int (*)()) edg_wll_StringToStat, &XMLCtx->jobStatSingleGlobal.stateEnterTimes);
-               XMLCtx->stat_begin = 0;
-            }
-           else {
-             /* tag was not found -> either missing in previous code or unknown        */
-             unexpWarning()
-             edg_wll_freeBuf(XMLCtx);
-           }
-           break;
-         default:
-           if (XMLCtx->char_buf) {
-//             unexpWarning()
-               edg_wll_freeBuf(XMLCtx);
-           }
-           break;
-       }
-
-       XMLCtx->char_buf = NULL;
-       XMLCtx->char_buf_len = 0;
-       memset(&(XMLCtx->element), 0, sizeof(XMLCtx->element));
-       XMLCtx->level--;
-}
-
-
-
-static void endStrList(void *data, const char *el UNUSED_VAR)
-{
-       edg_wll_XML_ctx *XMLCtx = data;
-
-       
-       switch (XMLCtx->level) {
-         case 2 :
-           if (!strcmp(XMLCtx->element,XMLCtx->XML_tag2)) {
-             XMLCtx->strListGlobal[XMLCtx->position] =
-               edg_wll_from_string_to_string(XMLCtx);
-             XMLCtx->position++;
-           }
-           else {
-             /* tag was not found -> either missing in previous code or unknown        */
-             unexpWarning()
-             edg_wll_freeBuf(XMLCtx);
-           }
-           break;
-         default:
-           if (XMLCtx->char_buf) {
-//             unexpWarning()
-               edg_wll_freeBuf(XMLCtx);
-           }
-           break;
-       }
-
-       XMLCtx->char_buf = NULL;
-       XMLCtx->char_buf_len = 0;
-       memset(&(XMLCtx->element), 0, sizeof(XMLCtx->element));
-       XMLCtx->level--;
-}
-
-
-
-static void endIntList(void *data, const char *el UNUSED_VAR)
-{
-       edg_wll_XML_ctx *XMLCtx = data;
-       int index;
-
-       
-       switch (XMLCtx->level) {
-         case 2 :
-           if ((index = XMLCtx->tagToIndex(XMLCtx->element)) >= 0 ) {
-             XMLCtx->intListGlobal[index+1] =
-               edg_wll_from_string_to_int(XMLCtx);
-           }
-           else {
-             /* tag was not found -> either missing in previous code or unknown        */
-             unexpWarning()
-             edg_wll_freeBuf(XMLCtx);
-           }
-           break;
-         default:
-           if (XMLCtx->char_buf) {
-//             unexpWarning()
-               edg_wll_freeBuf(XMLCtx);
-           }
-           break;
-       }
-
-       XMLCtx->char_buf = NULL;
-       XMLCtx->char_buf_len = 0;
-       memset(&(XMLCtx->element), 0, sizeof(XMLCtx->element));
-       XMLCtx->level--;
-}
-
-
-static void endTagList(void *data, const char *el UNUSED_VAR)
-{
-       edg_wll_XML_ctx *XMLCtx = data;
-
-       
-       switch (XMLCtx->level) {
-         case 2 :
-           if (!strcmp(XMLCtx->element,XMLCtx->XML_tag2)) {
-             XMLCtx->tagListGlobal[XMLCtx->position].value =
-               edg_wll_from_string_to_string(XMLCtx);
-             XMLCtx->position++;
-           }
-           else {
-             /* tag was not found -> either missing in previous code or unknown        */
-             unexpWarning()
-             edg_wll_freeBuf(XMLCtx);
-           }
-           break;
-         default:
-           if (XMLCtx->char_buf) {
-//             unexpWarning()
-               edg_wll_freeBuf(XMLCtx);
-           }
-           break;
-       }
-
-       XMLCtx->char_buf = NULL;
-       XMLCtx->char_buf_len = 0;
-       memset(&(XMLCtx->element), 0, sizeof(XMLCtx->element));
-       XMLCtx->level--;
-}
-
-
-static void endStsList(void *data, const char *el)
-{
-       edg_wll_XML_ctx *XMLCtx = data;
-
-       
-       switch (XMLCtx->level) {
-         case 2 :
-           if (!strcmp(el,XMLCtx->XML_tag2)) {
-               long len = (XML_GetCurrentByteIndex(XMLCtx->p) + XML_GetCurrentByteCount(XMLCtx->p))
-                                -  XMLCtx->stat_begin;
-
-               edg_wll_ParseJobStat(XMLCtx->ctx, XMLCtx->message_body + XMLCtx->stat_begin, len, 
-                               &XMLCtx->stsListGlobal[XMLCtx->position]);
-               XMLCtx->stat_begin = 0;
-               XMLCtx->position++;
-           }
-           else {
-             /* tag was not found -> either missing in previous code or unknown        */
-             unexpWarning()
-             edg_wll_freeBuf(XMLCtx);
-           }
-           break;
-         default:
-           if (XMLCtx->char_buf) {
-//             unexpWarning()
-               edg_wll_freeBuf(XMLCtx);
-           }
-           break;
-       }
-
-       XMLCtx->char_buf = NULL;
-       XMLCtx->char_buf_len = 0;
-       memset(&(XMLCtx->element), 0, sizeof(XMLCtx->element));
-       XMLCtx->level--;
-}
-
-
-
-
-static void endPurgeResult(void *data, const char *el UNUSED_VAR)
-{
-        edg_wll_XML_ctx *XMLCtx = data;
-        char *e;
-
-        if (XMLCtx->level == 2) {
-                if (!strcmp(XMLCtx->element,"server_file")) 
-                       XMLCtx->purgeResultGlobal.server_file = edg_wll_from_string_to_string(XMLCtx);
-       }
-       else if (XMLCtx->level == 3) {
-               if (!strcmp(XMLCtx->element,"jobId")) {
-                       if ( (XMLCtx->purgeResultGlobal.jobs[XMLCtx->position++] = 
-                               edg_wll_from_string_to_string(XMLCtx)) == NULL )
-                       {
-                               if (XMLCtx->errtxt) {
-                                       asprintf(&e,"%s\n%s: invalid JobId at line %d",
-                                               XMLCtx->errtxt, XMLCtx->char_buf,
-                                               XML_GetCurrentLineNumber(XMLCtx->p));
-                                       free(XMLCtx->errtxt);
-                               } else asprintf(&e,"%s: invalid JobId at line %d",
-                                       XMLCtx->char_buf,XML_GetCurrentLineNumber(XMLCtx->p));
-                               XMLCtx->errtxt = e;
-                       }
-               }
-       }
-
-       XMLCtx->char_buf = NULL;
-        XMLCtx->char_buf_len = 0;
-       XMLCtx->level--;
-}
-
-
-
-static void endDumpResult(void *data, const char *el UNUSED_VAR)
-{
-        edg_wll_XML_ctx *XMLCtx = data;
-
-        if (XMLCtx->level == 2) {
-                if (!strcmp(XMLCtx->element,"server_file")) 
-                       XMLCtx->dumpResultGlobal.server_file = edg_wll_from_string_to_string(XMLCtx);
-               else if (!strcmp(XMLCtx->element,"from")) {
-                       if (isdigit(XMLCtx->char_buf[0]))
-                       XMLCtx->dumpResultGlobal.from = edg_wll_from_string_to_time_t(XMLCtx);
-                       else
-                               XMLCtx->dumpResultGlobal.from = edg_wll_StringToDumpConst(XMLCtx->char_buf);
-               }
-               else if (!strcmp(XMLCtx->element,"to")) {
-                       if (isdigit(XMLCtx->char_buf[0]))
-                       XMLCtx->dumpResultGlobal.to = edg_wll_from_string_to_time_t(XMLCtx);
-                       else
-                               XMLCtx->dumpResultGlobal.to = edg_wll_StringToDumpConst(XMLCtx->char_buf);
-               }
-       }
-
-       XMLCtx->char_buf = NULL;
-        XMLCtx->char_buf_len = 0;
-       XMLCtx->level--;
-}
-
-
-
-static void endLoadResult(void *data, const char *el UNUSED_VAR)
-{
-        edg_wll_XML_ctx *XMLCtx = data;
-
-        if (XMLCtx->level == 2) {
-                if (!strcmp(XMLCtx->element,"server_file"))
-                        XMLCtx->loadResultGlobal.server_file = edg_wll_from_string_to_string(XMLCtx);
-                else if (!strcmp(XMLCtx->element,"from"))
-                        XMLCtx->loadResultGlobal.from = edg_wll_from_string_to_time_t(XMLCtx);
-                else if (!strcmp(XMLCtx->element,"to"))
-                        XMLCtx->loadResultGlobal.to = edg_wll_from_string_to_time_t(XMLCtx);
-               
-       }
-
-       XMLCtx->char_buf = NULL;
-        XMLCtx->char_buf_len = 0;
-       XMLCtx->level--;
-}
-
-
-
-static void endIndexedAttrs(void *data, const char *el)
-{
-        edg_wll_XML_ctx *XMLCtx = data;
-
-        if (XMLCtx->level == 2) {
-               if (!strcmp(el,"index"))
-                       XMLCtx->position++;
-                       XMLCtx->position2 = 0;
-       }
-        if (XMLCtx->level == 3) {
-               if (!strcmp(el,"QueryRec"))
-                       XMLCtx->position2++;
-       }
-       if (XMLCtx->level == 4) {
-                if (!strcmp(XMLCtx->element,"attribute")) {
-                        XMLCtx->attrsGlobal[XMLCtx->position][XMLCtx->position2].attr = 
-                               edg_wll_StringToquery_attr(edg_wll_from_string_to_string(XMLCtx));
-               }
-               else if (!strcmp(XMLCtx->element,"state")) {
-                       XMLCtx->attrsGlobal[XMLCtx->position][XMLCtx->position2].attr_id.state =
-                               edg_wll_StringToStat(edg_wll_from_string_to_string(XMLCtx));
-               }
-               else if (!strcmp(XMLCtx->element,"name")) {
-                       XMLCtx->attrsGlobal[XMLCtx->position][XMLCtx->position2].attr_id.tag =
-                               edg_wll_from_string_to_string(XMLCtx);
-               }       
-        }
-
-        XMLCtx->char_buf = NULL;
-        XMLCtx->char_buf_len = 0;
-        XMLCtx->level--;
-}
-
-
-static void endNotifResult(void *data, const char *el UNUSED_VAR)
-{
-        edg_wll_XML_ctx *XMLCtx = data;
-
-
-        if (XMLCtx->level == 2) {
-                if (!strcmp(XMLCtx->element,"validity"))
-                        XMLCtx->notifValidity = edg_wll_from_string_to_time_t(XMLCtx);
-       }
-
-       XMLCtx->char_buf = NULL;
-        XMLCtx->char_buf_len = 0;
-       XMLCtx->level--;
-}
-
-
-
-static void endQuerySequenceCodeResult(void *data, const char *el UNUSED_VAR)
-{
-        edg_wll_XML_ctx *XMLCtx = data;
-
-        if (XMLCtx->level == 2) {
-                if (!strcmp(XMLCtx->element,"sequence_code"))
-                        XMLCtx->seqCode = edg_wll_from_string_to_string(XMLCtx);
-       }
-
-       XMLCtx->char_buf = NULL;
-        XMLCtx->char_buf_len = 0;
-       XMLCtx->level--;
-}
-
-
-
-
-
-
-static void endStatsResult(void *data, const char *el UNUSED_VAR)
-{
-        edg_wll_XML_ctx *XMLCtx = data;
-
-
-        if (XMLCtx->level == 2) {
-                if (!strcmp(XMLCtx->element,"from"))
-                        XMLCtx->statsFrom = edg_wll_from_string_to_time_t(XMLCtx);
-                else if (!strcmp(XMLCtx->element,"to"))
-                        XMLCtx->statsTo = edg_wll_from_string_to_time_t(XMLCtx);
-                else if (!strcmp(XMLCtx->element,"rate"))
-                        XMLCtx->statsRate = edg_wll_from_string_to_float(XMLCtx);
-                else if (!strcmp(XMLCtx->element,"duration"))
-                        XMLCtx->statsDuration = edg_wll_from_string_to_float(XMLCtx);
-                else if (!strcmp(XMLCtx->element,"res_from"))
-                        XMLCtx->statsResFrom = edg_wll_from_string_to_int(XMLCtx);
-                else if (!strcmp(XMLCtx->element,"res_to"))
-                        XMLCtx->statsResTo = edg_wll_from_string_to_int(XMLCtx);
-       }
-
-       XMLCtx->char_buf = NULL;
-        XMLCtx->char_buf_len = 0;
-       XMLCtx->level--;
-}
-
-
-
-#undef unexpError
-#undef unexpWarning
-
-
-
-edg_wll_ErrorCode edg_wll_ParseQueryJobs(edg_wll_Context ctx, char *messageBody, edg_wlc_JobId **jobsOut, edg_wll_JobStat **statesOut)
-{
-       int i;
-       edg_wll_XML_ctx XMLCtx;
-       edg_wll_ErrorCode errorCode = 0;
-       XML_Char *encoding = "ISO-8859-1";
-
-
-       edg_wll_initXMLCtx(&XMLCtx);
-       edg_wll_ResetError(ctx);        
-       XMLCtx.message_body = messageBody;
-       XMLCtx.ctx = ctx;
-
-       /* initialize parser */
-       XMLCtx.p = XML_ParserCreate(encoding);
-       XML_SetElementHandler(XMLCtx.p, startQueryJobs, endQueryJobs);
-       XML_SetCharacterDataHandler(XMLCtx.p, char_handler);
-       XML_SetUserData(XMLCtx.p, (void *) &XMLCtx);
-
-       /* parse messageBody */
-       if (! XML_Parse(XMLCtx.p, messageBody, strlen(messageBody), 1)) {
-               char *errorMessage;
-
-               asprintf(&errorMessage, "XML parse error at line %d:\n%s\n",
-                       XML_GetCurrentLineNumber(XMLCtx.p),
-                       XML_ErrorString(XML_GetErrorCode(XMLCtx.p))); 
-
-               edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, errorMessage);
-                free(errorMessage);            
-       }  else if (XMLCtx.errtxt) edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, XMLCtx.errtxt);
-
-        if ((errorCode = edg_wll_Error(ctx,NULL,NULL))) {
-               for (i=0; i<XMLCtx.position; i++)  edg_wlc_JobIdFree( (XMLCtx.jobsOutGlobal)[i] );
-               free(XMLCtx.jobsOutGlobal);
-               XMLCtx.jobsOutGlobal = NULL;
-               XMLCtx.position = 0;
-               if (jobsOut) *jobsOut = NULL;   
-
-               for (i=0; i<XMLCtx.position2; i++) edg_wll_FreeStatus( &(XMLCtx.jobStatGlobal[i]) );
-               free(XMLCtx.jobStatGlobal);
-               XMLCtx.jobStatGlobal = NULL;
-               XMLCtx.position2 = 0;
-               if (statesOut) *statesOut = NULL;
-
-                if (XMLCtx.errDesc) {
-                        free(XMLCtx.errDesc);
-                        XMLCtx.errDesc = NULL;
-                        XMLCtx.errCode = 0;
-                }
-        }
-
-       /* malloc-ate one more row for NULL list termination */
-        XMLCtx.jobsOutGlobal = realloc(XMLCtx.jobsOutGlobal,
-                               (XMLCtx.position+1)*sizeof(*XMLCtx.jobsOutGlobal));
-
-        if (!XMLCtx.jobsOutGlobal) { 
-               errorCode = (edg_wll_ErrorCode) ENOMEM;
-               if (jobsOut) *jobsOut = NULL;   
-       }
-       else {
-               /* add NULL to end of list */
-               XMLCtx.jobsOutGlobal[XMLCtx.position] = NULL;           
-
-               /* return results */
-               // XXX : may be should not be transfered; need to change protocol and 
-               // XXX   then return only non-NULL jobsOut or statesOut
-               if (jobsOut) 
-                       *jobsOut = XMLCtx.jobsOutGlobal;
-               else {
-                       for (i=0; i<XMLCtx.position; i++)  edg_wlc_JobIdFree( (XMLCtx.jobsOutGlobal)[i] );
-                       free(XMLCtx.jobsOutGlobal); 
-               }
-               XMLCtx.jobsOutGlobal = NULL; 
-       }
-       
-       XMLCtx.jobStatGlobal = realloc(XMLCtx.jobStatGlobal,
-                               (XMLCtx.position2+1)*sizeof(*XMLCtx.jobStatGlobal));
-
-       if (!XMLCtx.jobStatGlobal) { 
-               errorCode = (edg_wll_ErrorCode) ENOMEM;
-               if (statesOut) *statesOut = NULL;
-       }
-       else {
-               /* add NULL to end of list */
-               edg_wll_InitStatus(&XMLCtx.jobStatGlobal[XMLCtx.position2]);            
-
-               /* return results */
-               if (statesOut)
-                       *statesOut = XMLCtx.jobStatGlobal;
-               else {
-                       for (i=0; i<XMLCtx.position2; i++) edg_wll_FreeStatus( &(XMLCtx.jobStatGlobal[i]) );
-                       free(XMLCtx.jobStatGlobal);
-               }
-       
-               XMLCtx.jobStatGlobal = NULL; 
-       }
-       
-       if (XMLCtx.errDesc || XMLCtx.errCode) {
-               ctx->errDesc = XMLCtx.errDesc;
-                ctx->errCode = XMLCtx.errCode;
-       }
-
-
-       /* print all warning if corresponding env variable is set       */
-       if (XMLCtx.warntxt && getenv("EDG_WLL_XML_WARNINGS")) { 
-
-               fprintf(stderr,"----------------------------------------------------\n");
-               fprintf(stderr,"%s\n\n",XMLCtx.warntxt);
-               fprintf(stderr,"%s\n",messageBody);
-               fprintf(stderr,"----------------------------------------------------\n");
-       }
-
-       /* free parser */
-       XML_ParserFree(XMLCtx.p);
-
-       edg_wll_freeXMLCtx(&XMLCtx);
-       return errorCode;
-}
-
-
-
-edg_wll_ErrorCode edg_wll_ParseQueryEvents(edg_wll_Context ctx, char *messageBody, edg_wll_Event **eventsOut)
-{
-       int i;
-       edg_wll_XML_ctx XMLCtx;
-       edg_wll_ErrorCode errorCode = 0;
-       XML_Char *encoding = "ISO-8859-1";
-
-
-       edg_wll_initXMLCtx(&XMLCtx);
-       XMLCtx.position = -1;
-       edg_wll_ResetError(ctx);        
-
-        /* initialize parser */
-       XMLCtx.p = XML_ParserCreate(encoding);
-        XML_SetElementHandler(XMLCtx.p, startQueryEvents, endQueryEvents);
-        XML_SetCharacterDataHandler(XMLCtx.p, char_handler);
-       XML_SetUserData(XMLCtx.p, (void *) &XMLCtx);
-
-        /* parse messageBody */
-        if (! XML_Parse(XMLCtx.p, messageBody, strlen(messageBody), 1)) {
-                char *errorMessage;
-
-
-                asprintf(&errorMessage, "XML parse error at line %d:\n%s\n",
-                        XML_GetCurrentLineNumber(XMLCtx.p),
-                        XML_ErrorString(XML_GetErrorCode(XMLCtx.p)));
-
-               edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, errorMessage);
-               free(errorMessage);
-        } else if (XMLCtx.errtxt) edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, XMLCtx.errtxt);
-
-        if ((errorCode = edg_wll_Error(ctx,NULL,NULL))) {
-               *eventsOut = NULL;
-               for (i=0; i<= XMLCtx.position; i++) edg_wll_FreeEvent( &((XMLCtx.eventsOutGlobal)[i]) );
-                       free(XMLCtx.eventsOutGlobal); 
-               XMLCtx.eventsOutGlobal = NULL;
-
-                if (XMLCtx.errDesc) {
-                        free(XMLCtx.errDesc);
-                        XMLCtx.errDesc = NULL;
-                        XMLCtx.errCode = 0;
-                }
-       }
-        else {
-               /* malloc-ate one more row for NULL list termination */
-                XMLCtx.eventsOutGlobal = realloc(XMLCtx.eventsOutGlobal,
-                                          (++XMLCtx.position+1)*sizeof(*XMLCtx.eventsOutGlobal));
-                if (!XMLCtx.eventsOutGlobal) { 
-                       errorCode = (edg_wll_ErrorCode) ENOMEM; 
-                       *eventsOut = NULL;
-               }
-               else {
-                       /* last event in list is EDG_WLL_EVENT_UNDEF for end-of-list detection */
-                       memset(&XMLCtx.eventsOutGlobal[XMLCtx.position],0,sizeof(*XMLCtx.eventsOutGlobal));
-                       XMLCtx.eventsOutGlobal[XMLCtx.position].any.type = EDG_WLL_EVENT_UNDEF;
-
-                       /* return results */
-                       *eventsOut = XMLCtx.eventsOutGlobal;
-                       XMLCtx.eventsOutGlobal = NULL; 
-               }
-        }
-       
-       if (XMLCtx.errDesc || XMLCtx.errCode) {
-                ctx->errDesc = XMLCtx.errDesc;
-                ctx->errCode = XMLCtx.errCode;
-        }
-
-       /* print all warning if corresponding env variable is set       */
-       if (XMLCtx.warntxt && getenv("EDG_WLL_XML_WARNINGS")) { 
-               fprintf(stderr,"------------------------edg_wll_ParseQueryEvents----------------------------\n");
-               fprintf(stderr,"%s\n\n",XMLCtx.warntxt);
-               fprintf(stderr,"%s\n",messageBody);
-               fprintf(stderr,"----------------------------------------------------\n");
-       }
-
-        /* free parser */
-        XML_ParserFree(XMLCtx.p);
-
-       edg_wll_freeXMLCtx(&XMLCtx);
-        return errorCode;
-}
-
-
-
-
-edg_wll_ErrorCode edg_wll_ParseUserJobs(edg_wll_Context ctx, char *messageBody, edg_wlc_JobId **jobsOut)
-{
-       int i;
-       edg_wll_XML_ctx XMLCtx;
-       edg_wll_ErrorCode errorCode = 0;
-       XML_Char *encoding = "ISO-8859-1";
-
-
-       edg_wll_initXMLCtx(&XMLCtx);
-       edg_wll_ResetError(ctx);        
-
-       /* initialize parser */
-       XMLCtx.p = XML_ParserCreate(encoding);
-       XML_SetElementHandler(XMLCtx.p, startUserJobs, endUserJobs);
-       XML_SetCharacterDataHandler(XMLCtx.p, char_handler);
-       XML_SetUserData(XMLCtx.p, (void *) &XMLCtx);
-
-       /* parse messageBody */
-       if (! XML_Parse(XMLCtx.p, messageBody, strlen(messageBody), 1)) {
-               char *errorMessage;
-
-
-               asprintf(&errorMessage, "XML parse error at line %d:\n%s\n",
-                       XML_GetCurrentLineNumber(XMLCtx.p),
-                       XML_ErrorString(XML_GetErrorCode(XMLCtx.p))); 
-               *jobsOut = NULL;        
-
-               edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, errorMessage);
-                free(errorMessage);            
-       }  else if (XMLCtx.errtxt) edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, XMLCtx.errtxt);
-
-        if ((errorCode = edg_wll_Error(ctx,NULL,NULL))) {
-                *jobsOut = NULL;
-               for (i=0; i<XMLCtx.position; i++)  edg_wlc_JobIdFree( (XMLCtx.jobsOutGlobal)[i] );
-               free(XMLCtx.jobsOutGlobal);
-               XMLCtx.jobsOutGlobal = NULL;
-        } else {
-               /* malloc-ate one more row for NULL list termination */
-                XMLCtx.jobsOutGlobal = realloc(XMLCtx.jobsOutGlobal,
-                                        (XMLCtx.position+1)*sizeof(*XMLCtx.jobsOutGlobal));
-                if (!XMLCtx.jobsOutGlobal) { 
-                       errorCode = (edg_wll_ErrorCode) ENOMEM;
-                       *jobsOut = NULL;
-               }
-               else {
-                       /* add NULL to end of list */
-                       XMLCtx.jobsOutGlobal[XMLCtx.position] = NULL;           
-
-                       /* return results */
-                       *jobsOut = XMLCtx.jobsOutGlobal;
-                       XMLCtx.jobsOutGlobal = NULL; 
-               }
-        }
-
-       /* print all warning if corresponding env variable is set       */
-       if (XMLCtx.warntxt && getenv("EDG_WLL_XML_WARNINGS")) { 
-               fprintf(stderr,"----------------------------------------------------\n");
-               fprintf(stderr,"%s\n\n",XMLCtx.warntxt);
-               fprintf(stderr,"%s\n",messageBody);
-               fprintf(stderr,"----------------------------------------------------\n");
-       }
-
-       /* free parser */
-       XML_ParserFree(XMLCtx.p);
-
-       edg_wll_freeXMLCtx(&XMLCtx);
-       return errorCode;
-}
-
-
-
-edg_wll_ErrorCode edg_wll_ParseJobStat(edg_wll_Context ctx, char *messageBody, long len, edg_wll_JobStat *stat)
-{
-       edg_wll_XML_ctx XMLCtx;
-       edg_wll_ErrorCode errorCode;
-       XML_Char *encoding = "ISO-8859-1";
-
-
-       edg_wll_initXMLCtx(&XMLCtx);
-       edg_wll_ResetError(ctx);        
-       XMLCtx.message_body = messageBody;
-       XMLCtx.ctx = ctx;
-
-        /* initialize parser */
-       XMLCtx.p = XML_ParserCreate(encoding);
-        XML_SetElementHandler(XMLCtx.p, startJobStatus, endJobStat);
-        XML_SetCharacterDataHandler(XMLCtx.p, char_handler);
-       XML_SetUserData(XMLCtx.p, (void *) &XMLCtx);
-
-        /* parse messageBody */
-        if (! XML_Parse(XMLCtx.p, messageBody, len, 1)) {
-                char *errorMessage;
-
-
-                asprintf(&errorMessage, "Parse error at line %d:\n%s\n",
-                        XML_GetCurrentLineNumber(XMLCtx.p),
-                        XML_ErrorString(XML_GetErrorCode(XMLCtx.p)));
-
-                edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, errorMessage);
-                free(errorMessage);
-        } else if (XMLCtx.errtxt) edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, XMLCtx.errtxt);
-
-        if ((errorCode = edg_wll_Error(ctx,NULL,NULL))) {
-               edg_wll_FreeStatus( &XMLCtx.jobStatSingleGlobal );
-               memset(stat,0,sizeof(*stat));
-               XMLCtx.position = 0;
-        }
-       else {
-               /* return results */
-               memcpy(stat, &XMLCtx.jobStatSingleGlobal, sizeof(XMLCtx.jobStatSingleGlobal));
-       }
-
-       /* print all warning if corresponding env variable is set       */
-       if (XMLCtx.warntxt && getenv("EDG_WLL_XML_WARNINGS")) { 
-               fprintf(stderr,"----------------------------------------------------\n");
-               fprintf(stderr,"%s\n\n",XMLCtx.warntxt);
-               fprintf(stderr,"%s\n",messageBody);
-               fprintf(stderr,"----------------------------------------------------\n");
-       }
-
-        /* free parser */
-        XML_ParserFree(XMLCtx.p);
-
-       edg_wll_freeXMLCtx(&XMLCtx);    
-       return errorCode;
-}
-
-
-edg_wll_ErrorCode edg_wll_ParseStrList(edg_wll_Context ctx, char *messageBody, long len, char *tag, char *tag2,  char ***strListOut)
-{
-       edg_wll_XML_ctx XMLCtx;
-       edg_wll_ErrorCode errorCode;
-       XML_Char *encoding = "ISO-8859-1";
-
-
-       edg_wll_initXMLCtx(&XMLCtx);
-       edg_wll_ResetError(ctx);        
-       XMLCtx.message_body = messageBody;
-       XMLCtx.ctx = ctx;
-       asprintf(&XMLCtx.XML_tag,"%s",tag);
-       asprintf(&XMLCtx.XML_tag2,"%s",tag2);
-
-        /* initialize parser */
-       XMLCtx.p = XML_ParserCreate(encoding);
-        XML_SetElementHandler(XMLCtx.p, startStrList, endStrList);
-        XML_SetCharacterDataHandler(XMLCtx.p, char_handler);
-       XML_SetUserData(XMLCtx.p, (void *) &XMLCtx);
-
-        /* parse messageBody */
-        if (! XML_Parse(XMLCtx.p, messageBody, len, 1)) {
-                char *errorMessage;
-
-
-                asprintf(&errorMessage, "Parse error at line %d:\n%s\n",
-                        XML_GetCurrentLineNumber(XMLCtx.p),
-                        XML_ErrorString(XML_GetErrorCode(XMLCtx.p)));
-
-                edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, errorMessage);
-                free(errorMessage);
-        } else if (XMLCtx.errtxt) edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, XMLCtx.errtxt);
-
-        if ((errorCode = edg_wll_Error(ctx,NULL,NULL))) {
-               if (XMLCtx.strListGlobal) {
-                       int i;
-
-                       for (i=0; XMLCtx.strListGlobal[i]; i++)
-                               free(XMLCtx.strListGlobal[i]);
-                       free(XMLCtx.strListGlobal);
-                       XMLCtx.strListGlobal = NULL;
-               }
-               *strListOut = NULL;
-               XMLCtx.position = 0;
-        }
-       else {
-               XMLCtx.strListGlobal = realloc(XMLCtx.strListGlobal,
-                               (XMLCtx.position+1)*sizeof(*XMLCtx.strListGlobal));
-
-               if (!XMLCtx.strListGlobal) {
-                       errorCode = (edg_wll_ErrorCode) ENOMEM;
-                       if (strListOut) *strListOut = NULL;
-               }
-                       else {
-                       /* add NULL to end of list */
-                       XMLCtx.strListGlobal[XMLCtx.position] = NULL;
-
-                       /* return results */
-                       *strListOut = XMLCtx.strListGlobal;
-               }
-       }
-
-       /* print all warning if corresponding env variable is set       */
-       if (XMLCtx.warntxt && getenv("EDG_WLL_XML_WARNINGS")) { 
-               fprintf(stderr,"----------------------------------------------------\n");
-               fprintf(stderr,"%s\n\n",XMLCtx.warntxt);
-               fprintf(stderr,"%s\n",messageBody);
-               fprintf(stderr,"----------------------------------------------------\n");
-       }
-
-        /* free parser */
-        XML_ParserFree(XMLCtx.p);
-
-       edg_wll_freeXMLCtx(&XMLCtx);    
-       return errorCode;
-}
-
-
-edg_wll_ErrorCode edg_wll_ParseIntList(edg_wll_Context ctx, char *messageBody, long len, char *tag, int (*tagToIndex)(),  int **intListOut)
-{
-       edg_wll_XML_ctx XMLCtx;
-       edg_wll_ErrorCode errorCode;
-       XML_Char *encoding = "ISO-8859-1";
-
-
-       edg_wll_initXMLCtx(&XMLCtx);
-       edg_wll_ResetError(ctx);        
-       XMLCtx.message_body = messageBody;
-       XMLCtx.ctx = ctx;
-       asprintf(&XMLCtx.XML_tag,"%s",tag);
-       XMLCtx.tagToIndex = tagToIndex;
-
-        /* initialize parser */
-       XMLCtx.p = XML_ParserCreate(encoding);
-        XML_SetElementHandler(XMLCtx.p, startIntList, endIntList);
-        XML_SetCharacterDataHandler(XMLCtx.p, char_handler);
-       XML_SetUserData(XMLCtx.p, (void *) &XMLCtx);
-
-        /* parse messageBody */
-        if (! XML_Parse(XMLCtx.p, messageBody, len, 1)) {
-                char *errorMessage;
-
-
-                asprintf(&errorMessage, "Parse error at line %d:\n%s\n",
-                        XML_GetCurrentLineNumber(XMLCtx.p),
-                        XML_ErrorString(XML_GetErrorCode(XMLCtx.p)));
-
-                edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, errorMessage);
-                free(errorMessage);
-        } else if (XMLCtx.errtxt) edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, XMLCtx.errtxt);
-
-        if ((errorCode = edg_wll_Error(ctx,NULL,NULL))) {
-               if (XMLCtx.intListGlobal) free(XMLCtx.intListGlobal);
-               *intListOut = NULL;
-               XMLCtx.max_index = 0;
-        }
-       else {
-                       /* add array length to zeros' position */
-                       if (XMLCtx.intListGlobal) 
-                       XMLCtx.intListGlobal[0] = XMLCtx.max_index + 1;
-
-               /* return results */
-               *intListOut = XMLCtx.intListGlobal;
-       }
-
-       /* print all warning if corresponding env variable is set       */
-       if (XMLCtx.warntxt && getenv("EDG_WLL_XML_WARNINGS")) { 
-               fprintf(stderr,"----------------------------------------------------\n");
-               fprintf(stderr,"%s\n\n",XMLCtx.warntxt);
-               fprintf(stderr,"%s\n",messageBody);
-               fprintf(stderr,"----------------------------------------------------\n");
-       }
-
-        /* free parser */
-        XML_ParserFree(XMLCtx.p);
-
-       edg_wll_freeXMLCtx(&XMLCtx);    
-       return errorCode;
-}
-
-
-edg_wll_ErrorCode edg_wll_ParseTagList(edg_wll_Context ctx, char *messageBody, long len, char *tag, char *tag2,  edg_wll_TagValue **tagListOut)
-{
-       edg_wll_XML_ctx XMLCtx;
-       edg_wll_ErrorCode errorCode;
-       XML_Char *encoding = "ISO-8859-1";
-
-
-       edg_wll_initXMLCtx(&XMLCtx);
-       edg_wll_ResetError(ctx);        
-       XMLCtx.message_body = messageBody;
-       XMLCtx.ctx = ctx;
-       asprintf(&XMLCtx.XML_tag,"%s",tag);
-       asprintf(&XMLCtx.XML_tag2,"%s",tag2);
-
-        /* initialize parser */
-       XMLCtx.p = XML_ParserCreate(encoding);
-        XML_SetElementHandler(XMLCtx.p, startTagList, endTagList);
-        XML_SetCharacterDataHandler(XMLCtx.p, char_handler);
-       XML_SetUserData(XMLCtx.p, (void *) &XMLCtx);
-
-        /* parse messageBody */
-        if (! XML_Parse(XMLCtx.p, messageBody, len, 1)) {
-                char *errorMessage;
-
-
-                asprintf(&errorMessage, "Parse error at line %d:\n%s\n",
-                        XML_GetCurrentLineNumber(XMLCtx.p),
-                        XML_ErrorString(XML_GetErrorCode(XMLCtx.p)));
-
-                edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, errorMessage);
-                free(errorMessage);
-        } else if (XMLCtx.errtxt) edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, XMLCtx.errtxt);
-
-        if ((errorCode = edg_wll_Error(ctx,NULL,NULL))) {
-               if (XMLCtx.tagListGlobal) {
-                       int i;
-
-                       for (i=0; XMLCtx.tagListGlobal[i].tag; i++) {
-                               free(XMLCtx.tagListGlobal[i].tag);
-                               free(XMLCtx.tagListGlobal[i].value);
-                       }
-                       free(XMLCtx.tagListGlobal);
-                       XMLCtx.tagListGlobal = NULL;
-               }
-               *tagListOut = NULL;
-               XMLCtx.position = 0;
-        }
-       else {
-               XMLCtx.tagListGlobal = realloc(XMLCtx.tagListGlobal,
-                               (XMLCtx.position+1)*sizeof(*XMLCtx.tagListGlobal));
-
-               if (!XMLCtx.tagListGlobal) {
-                       errorCode = (edg_wll_ErrorCode) ENOMEM;
-                       if (tagListOut) *tagListOut = NULL;
-               }
-                       else {
-                       /* add NULL to end of list */
-                       XMLCtx.tagListGlobal[XMLCtx.position].tag = NULL;
-
-                       /* return results */
-                       *tagListOut = XMLCtx.tagListGlobal;
-               }
-       }
-
-       /* print all warning if corresponding env variable is set       */
-       if (XMLCtx.warntxt && getenv("EDG_WLL_XML_WARNINGS")) { 
-               fprintf(stderr,"----------------------------------------------------\n");
-               fprintf(stderr,"%s\n\n",XMLCtx.warntxt);
-               fprintf(stderr,"%s\n",messageBody);
-               fprintf(stderr,"----------------------------------------------------\n");
-       }
-
-        /* free parser */
-        XML_ParserFree(XMLCtx.p);
-
-       edg_wll_freeXMLCtx(&XMLCtx);    
-       return errorCode;
-}
-
-
-
-edg_wll_ErrorCode edg_wll_ParseStsList(edg_wll_Context ctx, char *messageBody, long len, char *tag, char *tag2,  edg_wll_JobStat **stsListOut)
-{
-       edg_wll_XML_ctx XMLCtx;
-       edg_wll_ErrorCode errorCode;
-       XML_Char *encoding = "ISO-8859-1";
-
-
-       edg_wll_initXMLCtx(&XMLCtx);
-       edg_wll_ResetError(ctx);        
-       XMLCtx.message_body = messageBody;
-       XMLCtx.ctx = ctx;
-       asprintf(&XMLCtx.XML_tag,"%s",tag);
-       asprintf(&XMLCtx.XML_tag2,"%s",tag2);
-
-        /* initialize parser */
-       XMLCtx.p = XML_ParserCreate(encoding);
-        XML_SetElementHandler(XMLCtx.p, startStsList, endStsList);
-        XML_SetCharacterDataHandler(XMLCtx.p, char_handler);
-       XML_SetUserData(XMLCtx.p, (void *) &XMLCtx);
-
-        /* parse messageBody */
-        if (! XML_Parse(XMLCtx.p, messageBody, len, 1)) {
-                char *errorMessage;
-
-
-                asprintf(&errorMessage, "Parse error at line %d:\n%s\n",
-                        XML_GetCurrentLineNumber(XMLCtx.p),
-                        XML_ErrorString(XML_GetErrorCode(XMLCtx.p)));
-
-                edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, errorMessage);
-                free(errorMessage);
-        } else if (XMLCtx.errtxt) edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, XMLCtx.errtxt);
-
-        if ((errorCode = edg_wll_Error(ctx,NULL,NULL))) {
-               if (XMLCtx.stsListGlobal) {
-                       int i;
-
-                       for (i=0; XMLCtx.position; i++)
-                               edg_wll_FreeStatus(&XMLCtx.stsListGlobal[i]);
-                       free(XMLCtx.stsListGlobal);
-                       XMLCtx.stsListGlobal = NULL;
-               }
-               *stsListOut = NULL;
-               XMLCtx.position = 0;
-        }
-       else {
-               XMLCtx.stsListGlobal = realloc(XMLCtx.stsListGlobal,
-                               (XMLCtx.position+1)*sizeof(*XMLCtx.stsListGlobal));
-
-               if (!XMLCtx.stsListGlobal) {
-                       errorCode = (edg_wll_ErrorCode) ENOMEM;
-                       if (stsListOut) *stsListOut = NULL;
-               }
-                       else {
-                       /* add NULL to end of list */
-                       edg_wll_InitStatus(&XMLCtx.stsListGlobal[XMLCtx.position]);
-
-                       /* return results */
-                       *stsListOut = XMLCtx.stsListGlobal;
-               }
-       }
-
-       /* print all warning if corresponding env variable is set       */
-       if (XMLCtx.warntxt && getenv("EDG_WLL_XML_WARNINGS")) { 
-               fprintf(stderr,"----------------------------------------------------\n");
-               fprintf(stderr,"%s\n\n",XMLCtx.warntxt);
-               fprintf(stderr,"%s\n",messageBody);
-               fprintf(stderr,"----------------------------------------------------\n");
-       }
-
-        /* free parser */
-        XML_ParserFree(XMLCtx.p);
-
-       edg_wll_freeXMLCtx(&XMLCtx);    
-       return errorCode;
-}
-
-
-
-/* parse purge result from client */
-edg_wll_ErrorCode edg_wll_ParsePurgeResult(edg_wll_Context ctx, char *messageBody, edg_wll_PurgeResult *result)
-{
-       edg_wll_XML_ctx XMLCtx;
-       edg_wll_ErrorCode errorCode;
-       XML_Char *encoding = "ISO-8859-1";
-
-       errno = 0;
-       edg_wll_ResetError(ctx);
-       edg_wll_initXMLCtx(&XMLCtx);
-       XMLCtx.ctx = ctx;
-
-
-        /* initialize parser */
-        XMLCtx.p = XML_ParserCreate(encoding);
-        XML_SetElementHandler(XMLCtx.p, startPurgeResult, endPurgeResult);
-        XML_SetCharacterDataHandler(XMLCtx.p, char_handler);
-        XML_SetUserData(XMLCtx.p, (void *) &XMLCtx);
-
-
-        if (! XML_Parse(XMLCtx.p, messageBody, strlen(messageBody), 1)) {
-                char *errorMessage;
-
-                asprintf(&errorMessage, "Parse error at line %d:\n%s\n",
-                        XML_GetCurrentLineNumber(XMLCtx.p),
-                        XML_ErrorString(XML_GetErrorCode(XMLCtx.p)));
-
-                edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, errorMessage);
-                free(errorMessage);
-        } else if (XMLCtx.errtxt) edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, XMLCtx.errtxt);
-
-
-       if ((errorCode = edg_wll_Error(ctx,NULL,NULL))) {
-               int i;
-
-               if (XMLCtx.purgeResultGlobal.jobs) {
-                       for (i=0; XMLCtx.purgeResultGlobal.jobs[i]; i++) 
-                               free(XMLCtx.purgeResultGlobal.jobs[i]);
-                       free(XMLCtx.purgeResultGlobal.jobs);
-               }
-               memset(result,0,sizeof(*result));
-               free(XMLCtx.purgeResultGlobal.server_file);
-               
-       } else {
-               memcpy(result, &XMLCtx.purgeResultGlobal, sizeof(XMLCtx.purgeResultGlobal));
-       }
-
-       if (XMLCtx.errDesc || XMLCtx.errCode) {
-               ctx->errDesc = XMLCtx.errDesc;
-                ctx->errCode = XMLCtx.errCode;
-       }
-       
-       /* print all warning if corresponding env variable is set       */
-       if (XMLCtx.warntxt && getenv("EDG_WLL_XML_WARNINGS")) { 
-               fprintf(stderr,"----------------------------------------------------\n");
-               fprintf(stderr,"%s\n\n",XMLCtx.warntxt);
-               fprintf(stderr,"%s\n",messageBody);
-               fprintf(stderr,"----------------------------------------------------\n");
-       }
-
-        /* free parser */
-        XML_ParserFree(XMLCtx.p);
-
-       edg_wll_freeXMLCtx(&XMLCtx);    
-       return errorCode;
-}
-
-
-
-/* parse dump result from client */
-edg_wll_ErrorCode edg_wll_ParseDumpResult(edg_wll_Context ctx, char *messageBody, edg_wll_DumpResult *result)
-{
-       edg_wll_XML_ctx XMLCtx;
-       edg_wll_ErrorCode errorCode;
-       XML_Char *encoding = "ISO-8859-1";
-
-       errno = 0;
-       edg_wll_ResetError(ctx);
-       edg_wll_initXMLCtx(&XMLCtx);
-       XMLCtx.ctx = ctx;
-
-
-        /* initialize parser */
-        XMLCtx.p = XML_ParserCreate(encoding);
-        XML_SetElementHandler(XMLCtx.p, startDumpResult, endDumpResult);
-        XML_SetCharacterDataHandler(XMLCtx.p, char_handler);
-        XML_SetUserData(XMLCtx.p, (void *) &XMLCtx);
-
-
-        if (! XML_Parse(XMLCtx.p, messageBody, strlen(messageBody), 1)) {
-                char *errorMessage;
-
-                asprintf(&errorMessage, "Parse error at line %d:\n%s\n",
-                        XML_GetCurrentLineNumber(XMLCtx.p),
-                        XML_ErrorString(XML_GetErrorCode(XMLCtx.p)));
-
-                edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, errorMessage);
-                free(errorMessage);
-        } else if (XMLCtx.errtxt) edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, XMLCtx.errtxt);
-
-
-       if ((errorCode = edg_wll_Error(ctx,NULL,NULL))) {
-               free(XMLCtx.dumpResultGlobal.server_file);
-               memset(result,0,sizeof(*result));
-       } else {
-               memcpy(result, &XMLCtx.dumpResultGlobal, sizeof(XMLCtx.dumpResultGlobal));
-       }
-
-       if (XMLCtx.errDesc || XMLCtx.errCode) {
-               ctx->errDesc = XMLCtx.errDesc;
-                ctx->errCode = XMLCtx.errCode;
-       }
-       
-       /* print all warning if corresponding env variable is set       */
-       if (XMLCtx.warntxt && getenv("EDG_WLL_XML_WARNINGS")) { 
-               fprintf(stderr,"----------------------------------------------------\n");
-               fprintf(stderr,"%s\n\n",XMLCtx.warntxt);
-               fprintf(stderr,"%s\n",messageBody);
-               fprintf(stderr,"----------------------------------------------------\n");
-       }
-
-        /* free parser */
-        XML_ParserFree(XMLCtx.p);
-
-       edg_wll_freeXMLCtx(&XMLCtx);    
-       return errorCode;
-}
-
-
-
-/* parse load result from client */
-edg_wll_ErrorCode edg_wll_ParseLoadResult(edg_wll_Context ctx, char *messageBody, edg_wll_LoadResult *result)
-{
-       edg_wll_XML_ctx XMLCtx;
-       edg_wll_ErrorCode errorCode;
-       XML_Char *encoding = "ISO-8859-1";
-
-       errno = 0;
-       edg_wll_ResetError(ctx);
-       edg_wll_initXMLCtx(&XMLCtx);
-       XMLCtx.ctx = ctx;
-
-
-        /* initialize parser */
-        XMLCtx.p = XML_ParserCreate(encoding);
-        XML_SetElementHandler(XMLCtx.p, startLoadResult, endLoadResult);
-        XML_SetCharacterDataHandler(XMLCtx.p, char_handler);
-        XML_SetUserData(XMLCtx.p, (void *) &XMLCtx);
-
-
-        if (! XML_Parse(XMLCtx.p, messageBody, strlen(messageBody), 1)) {
-                char *errorMessage;
-
-                asprintf(&errorMessage, "Parse error at line %d:\n%s\n",
-                        XML_GetCurrentLineNumber(XMLCtx.p),
-                        XML_ErrorString(XML_GetErrorCode(XMLCtx.p)));
-
-                edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, errorMessage);
-                free(errorMessage);
-        } else if (XMLCtx.errtxt) edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, XMLCtx.errtxt);
-
-
-       if ((errorCode = edg_wll_Error(ctx,NULL,NULL))) {
-               free(XMLCtx.loadResultGlobal.server_file);
-               memset(result,0,sizeof(*result));
-       } else {
-               memcpy(result, &XMLCtx.loadResultGlobal, sizeof(XMLCtx.loadResultGlobal));
-       }
-
-       if (XMLCtx.errDesc || XMLCtx.errCode) {
-               ctx->errDesc = XMLCtx.errDesc;
-                ctx->errCode = XMLCtx.errCode;
-       }
-       
-       /* print all warning if corresponding env variable is set       */
-       if (XMLCtx.warntxt && getenv("EDG_WLL_XML_WARNINGS")) { 
-               fprintf(stderr,"----------------------------------------------------\n");
-               fprintf(stderr,"%s\n\n",XMLCtx.warntxt);
-               fprintf(stderr,"%s\n",messageBody);
-               fprintf(stderr,"----------------------------------------------------\n");
-       }
-
-        /* free parser */
-        XML_ParserFree(XMLCtx.p);
-
-       edg_wll_freeXMLCtx(&XMLCtx);    
-       return errorCode;
-}
-
-
-
-edg_wll_ErrorCode edg_wll_ParseIndexedAttrs(edg_wll_Context ctx, char *messageBody, edg_wll_QueryRec ***attrs)
-{
-       edg_wll_XML_ctx XMLCtx;
-       edg_wll_ErrorCode errorCode;
-       XML_Char *encoding = "ISO-8859-1";
-
-
-       edg_wll_initXMLCtx(&XMLCtx);
-       edg_wll_ResetError(ctx);        
-       XMLCtx.message_body = messageBody;
-       XMLCtx.ctx = ctx;
-
-        /* initialize parser */
-       XMLCtx.p = XML_ParserCreate(encoding);
-        XML_SetElementHandler(XMLCtx.p, startIndexedAttrs, endIndexedAttrs);
-        XML_SetCharacterDataHandler(XMLCtx.p, char_handler);
-       XML_SetUserData(XMLCtx.p, (void *) &XMLCtx);
-
-        /* parse messageBody */
-        if (! XML_Parse(XMLCtx.p, messageBody, strlen(messageBody), 1)) {
-                char *errorMessage;
-
-
-                asprintf(&errorMessage, "Parse error at line %d:\n%s\n",
-                        XML_GetCurrentLineNumber(XMLCtx.p),
-                        XML_ErrorString(XML_GetErrorCode(XMLCtx.p)));
-
-                edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, errorMessage);
-                free(errorMessage);
-        } else if (XMLCtx.errtxt) edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, XMLCtx.errtxt);
-
-        if ((errorCode = edg_wll_Error(ctx,NULL,NULL))) {
-               if (XMLCtx.attrsGlobal) {
-                       int i,j;
-
-                       for (i=0; XMLCtx.attrsGlobal[i]; i++) {
-                               for (j=0; XMLCtx.attrsGlobal[i][j].attr != EDG_WLL_QUERY_ATTR_UNDEF; j++) {
-                                       if (XMLCtx.attrsGlobal[i][j].attr == EDG_WLL_QUERY_ATTR_USERTAG) 
-                                               free(XMLCtx.attrsGlobal[i][j].attr_id.tag);
-                               }               
-                               free(XMLCtx.attrsGlobal[i]);
-                       }
-                       free(XMLCtx.attrsGlobal);
-                       XMLCtx.attrsGlobal = NULL;
-               }
-               XMLCtx.position = 0;
-               XMLCtx.position2 = 0;
-        }
-
-       /* return results */
-       *attrs = XMLCtx.attrsGlobal;
-
-       if (XMLCtx.errDesc || XMLCtx.errCode) {
-               ctx->errDesc = XMLCtx.errDesc;
-                ctx->errCode = XMLCtx.errCode;
-       }
-
-       /* print all warning if corresponding env variable is set       */
-       if (XMLCtx.warntxt && getenv("EDG_WLL_XML_WARNINGS")) { 
-               fprintf(stderr,"----------------------------------------------------\n");
-               fprintf(stderr,"%s\n\n",XMLCtx.warntxt);
-               fprintf(stderr,"%s\n",messageBody);
-               fprintf(stderr,"----------------------------------------------------\n");
-       }
-
-        /* free parser */
-        XML_ParserFree(XMLCtx.p);
-
-       edg_wll_freeXMLCtx(&XMLCtx);    
-       return errorCode;
-}
-
-
-
-/* parse notification result from client */
-edg_wll_ErrorCode edg_wll_ParseNotifResult(edg_wll_Context ctx, char *messageBody, time_t *validity)
-{
-       edg_wll_XML_ctx XMLCtx;
-       edg_wll_ErrorCode errorCode;
-       XML_Char *encoding = "ISO-8859-1";
-
-       errno = 0;
-       edg_wll_ResetError(ctx);
-       edg_wll_initXMLCtx(&XMLCtx);
-       XMLCtx.ctx = ctx;
-
-
-        /* initialize parser */
-        XMLCtx.p = XML_ParserCreate(encoding);
-        XML_SetElementHandler(XMLCtx.p, startNotifResult, endNotifResult);
-        XML_SetCharacterDataHandler(XMLCtx.p, char_handler);
-        XML_SetUserData(XMLCtx.p, (void *) &XMLCtx);
-
-
-        if (! XML_Parse(XMLCtx.p, messageBody, strlen(messageBody), 1)) {
-                char *errorMessage;
-
-                asprintf(&errorMessage, "Parse error at line %d:\n%s\n",
-                        XML_GetCurrentLineNumber(XMLCtx.p),
-                        XML_ErrorString(XML_GetErrorCode(XMLCtx.p)));
-
-                edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, errorMessage);
-                free(errorMessage);
-        } else if (XMLCtx.errtxt) edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, XMLCtx.errtxt);
-
-
-       if ((errorCode = edg_wll_Error(ctx,NULL,NULL))) {
-               *validity = -1;
-       } else {
-               *validity = XMLCtx.notifValidity;
-       }
-
-       if (XMLCtx.errDesc || XMLCtx.errCode) {
-               ctx->errDesc = XMLCtx.errDesc;
-                ctx->errCode = XMLCtx.errCode;
-       }
-       
-       /* print all warning if corresponding env variable is set       */
-       if (XMLCtx.warntxt && getenv("EDG_WLL_XML_WARNINGS")) { 
-               fprintf(stderr,"----------------------------------------------------\n");
-               fprintf(stderr,"%s\n\n",XMLCtx.warntxt);
-               fprintf(stderr,"%s\n",messageBody);
-               fprintf(stderr,"----------------------------------------------------\n");
-       }
-
-        /* free parser */
-        XML_ParserFree(XMLCtx.p);
-
-       edg_wll_freeXMLCtx(&XMLCtx);    
-       return errorCode;
-}
-
-
-
-/* parse sequence code result from server */
-edg_wll_ErrorCode edg_wll_ParseQuerySequenceCodeResult(edg_wll_Context ctx, char *messageBody, char **seqCode)
-{
-       edg_wll_XML_ctx XMLCtx;
-       edg_wll_ErrorCode errorCode;
-       XML_Char *encoding = "ISO-8859-1";
-
-       errno = 0;
-       edg_wll_ResetError(ctx);
-       edg_wll_initXMLCtx(&XMLCtx);
-       XMLCtx.ctx = ctx;
-
-
-        /* initialize parser */
-        XMLCtx.p = XML_ParserCreate(encoding);
-        XML_SetElementHandler(XMLCtx.p, startQuerySequenceCodeResult, endQuerySequenceCodeResult);
-        XML_SetCharacterDataHandler(XMLCtx.p, char_handler);
-        XML_SetUserData(XMLCtx.p, (void *) &XMLCtx);
-
-
-        if (! XML_Parse(XMLCtx.p, messageBody, strlen(messageBody), 1)) {
-                char *errorMessage;
-
-                asprintf(&errorMessage, "Parse error at line %d:\n%s\n",
-                        XML_GetCurrentLineNumber(XMLCtx.p),
-                        XML_ErrorString(XML_GetErrorCode(XMLCtx.p)));
-
-                edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, errorMessage);
-                free(errorMessage);
-        } else if (XMLCtx.errtxt) edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, XMLCtx.errtxt);
-
-
-       if ((errorCode = edg_wll_Error(ctx,NULL,NULL))) {
-               free(XMLCtx.seqCode);
-               *seqCode = NULL;
-       } else {
-               *seqCode = XMLCtx.seqCode;
-       }
-
-       if (XMLCtx.errDesc || XMLCtx.errCode) {
-               ctx->errDesc = XMLCtx.errDesc;
-                ctx->errCode = XMLCtx.errCode;
-       }
-       
-       /* print all warning if corresponding env variable is set       */
-       if (XMLCtx.warntxt && getenv("EDG_WLL_XML_WARNINGS")) { 
-               fprintf(stderr,"----------------------------------------------------\n");
-               fprintf(stderr,"%s\n\n",XMLCtx.warntxt);
-               fprintf(stderr,"%s\n",messageBody);
-               fprintf(stderr,"----------------------------------------------------\n");
-       }
-
-        /* free parser */
-        XML_ParserFree(XMLCtx.p);
-
-       edg_wll_freeXMLCtx(&XMLCtx);    
-       return errorCode;
-}
-
-
-
-/* parse statistics result from client */
-edg_wll_ErrorCode edg_wll_ParseStatsResult(edg_wll_Context ctx, char *messageBody, time_t *from, time_t *to, float *rate, float *duration, int *res_from, int *res_to)
-{
-       edg_wll_XML_ctx XMLCtx;
-       edg_wll_ErrorCode errorCode;
-       XML_Char *encoding = "ISO-8859-1";
-
-       errno = 0;
-       edg_wll_ResetError(ctx);
-       edg_wll_initXMLCtx(&XMLCtx);
-       XMLCtx.ctx = ctx;
-
-
-        /* initialize parser */
-        XMLCtx.p = XML_ParserCreate(encoding);
-        XML_SetElementHandler(XMLCtx.p, startStatsResult, endStatsResult);
-        XML_SetCharacterDataHandler(XMLCtx.p, char_handler);
-        XML_SetUserData(XMLCtx.p, (void *) &XMLCtx);
-
-
-        if (! XML_Parse(XMLCtx.p, messageBody, strlen(messageBody), 1)) {
-                char *errorMessage;
-
-                asprintf(&errorMessage, "Parse error at line %d:\n%s\n",
-                        XML_GetCurrentLineNumber(XMLCtx.p),
-                        XML_ErrorString(XML_GetErrorCode(XMLCtx.p)));
-
-                edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, errorMessage);
-                free(errorMessage);
-        } else if (XMLCtx.errtxt) edg_wll_SetError(ctx, EDG_WLL_ERROR_XML_PARSE, XMLCtx.errtxt);
-
-
-       if ((errorCode = edg_wll_Error(ctx,NULL,NULL))) {
-               *from = -1;
-               *to = -1;
-               *rate = 0;
-               *duration = 0;
-               *res_from = -1;
-               *res_to = -1;
-       } else {
-               *from = XMLCtx.statsFrom;
-               *to = XMLCtx.statsTo;
-               *rate = XMLCtx.statsRate;
-               *duration = XMLCtx.statsDuration;
-               *res_from = XMLCtx.statsResFrom;
-               *res_to = XMLCtx.statsResTo;
-       }
-
-       if (XMLCtx.errDesc || XMLCtx.errCode) {
-               ctx->errDesc = XMLCtx.errDesc;
-                ctx->errCode = XMLCtx.errCode;
-       }
-       
-       /* print all warning if corresponding env variable is set       */
-       if (XMLCtx.warntxt && getenv("EDG_WLL_XML_WARNINGS")) { 
-               fprintf(stderr,"----------------------------------------------------\n");
-               fprintf(stderr,"%s\n\n",XMLCtx.warntxt);
-               fprintf(stderr,"%s\n",messageBody);
-               fprintf(stderr,"----------------------------------------------------\n");
-       }
-
-        /* free parser */
-        XML_ParserFree(XMLCtx.p);
-
-       edg_wll_freeXMLCtx(&XMLCtx);    
-       return errorCode;
-}
-
-
-
-
-/* construct Message-Body of Request-Line for edg_wll_QueryJobs */
-int edg_wll_JobQueryRecToXML(
-               edg_wll_Context ctx,
-               edg_wll_QueryRec const * const *conditions,
-                char **message)
-{
-        char *pomA, *pomB, *pomC;
-        int i = 0, len, tot_len = 0, nconditions, row = 0;
-        int *len_list;
-        char **list;
-
-       
-       pomC = strdup("");
-
-       while (conditions && conditions[row]) {
-
-               pomA = pomB = NULL;
-       
-               for (i=0; conditions[row][i].attr != EDG_WLL_QUERY_ATTR_UNDEF ; i++);
-               nconditions = i;
-       
-               list = (char **) malloc ((nconditions) * sizeof(*list));
-               len_list = (int *) malloc ((nconditions) * sizeof(*len_list));
-       
-               i=0;
-               while (i < nconditions) {
-                       const char *pomOp;
-                       char       *pomValue;
-       
-                       asprintf(&pomValue,"%s","");
-       
-                       switch (conditions[row][i].attr) {
-                                       /* job specific conditions */
-                                       case EDG_WLL_QUERY_ATTR_JOBID:
-                                               edg_wll_add_jobid_to_XMLBody(&pomValue, conditions[row][i].value.j, "jobId", NULL);
-                                               break;
-                                       case EDG_WLL_QUERY_ATTR_TIME:
-                                               if (conditions[row][i].op == EDG_WLL_QUERY_OP_WITHIN) {
-                                                       edg_wll_add_tagged_time_t_to_XMLBody(&pomValue, conditions[row][i].value.t.tv_sec, "time", edg_wll_StatToString(conditions[row][i].attr_id.state), "state", -1);
-                                                       edg_wll_add_tagged_time_t_to_XMLBody(&pomValue, conditions[row][i].value2.t.tv_sec, "time", edg_wll_StatToString(conditions[row][i].attr_id.state), "state", -1);       
-                                               }
-                                               else 
-                                                       edg_wll_add_tagged_time_t_to_XMLBody(&pomValue, conditions[row][i].value.t.tv_sec, "time", edg_wll_StatToString(conditions[row][i].attr_id.state), "state", -1);
-                                               break;
-                               
-                                       case EDG_WLL_QUERY_ATTR_PARENT:
-                                               edg_wll_add_jobid_to_XMLBody(&pomValue, conditions[row][i].value.j, "parent_job", NULL);
-                                               break;
-                                       case EDG_WLL_QUERY_ATTR_OWNER:
-                                               edg_wll_add_string_to_XMLBody(&pomValue, (conditions[row][i].value.c) ? conditions[row][i].value.c : 
-                                                                                                               "NULL", "owner", NULL);
-                                               break;
-                                       case EDG_WLL_QUERY_ATTR_STATUS:
-                                               edg_wll_add_edg_wll_JobStatCode_to_XMLBody(&pomValue, conditions[row][i].value.i, "status", EDG_WLL_JOB_UNDEF);
-                                               if (conditions[row][i].op == EDG_WLL_QUERY_OP_WITHIN)
-                                                       edg_wll_add_edg_wll_JobStatCode_to_XMLBody(&pomValue, conditions[row][i].value2.i, "status", EDG_WLL_JOB_UNDEF);
-                                               break;
-                                       case EDG_WLL_QUERY_ATTR_LOCATION:
-                                               edg_wll_add_string_to_XMLBody(&pomValue, conditions[row][i].value.c, "location", NULL);
-                                               break;
-                                       case EDG_WLL_QUERY_ATTR_DESTINATION:
-                                               edg_wll_add_string_to_XMLBody(&pomValue, conditions[row][i].value.c, "destination", NULL);
-                                               break;
-                                       case EDG_WLL_QUERY_ATTR_RESUBMITTED:
-                                               edg_wll_add_int_to_XMLBody(&pomValue, conditions[row][i].value.i, "resubmitted", -1);
-                                               if (conditions[row][i].op == EDG_WLL_QUERY_OP_WITHIN)
-                                                       edg_wll_add_int_to_XMLBody(&pomValue, conditions[row][i].value2.i, "resubmitted", -1);
-                                               break;
-                                       case EDG_WLL_QUERY_ATTR_DONECODE:
-                                               edg_wll_add_int_to_XMLBody(&pomValue, conditions[row][i].value.i, "donecode", -1);
-                                               if (conditions[row][i].op == EDG_WLL_QUERY_OP_WITHIN)
-                                                       edg_wll_add_int_to_XMLBody(&pomValue, conditions[row][i].value2.i, "donecode", -1);
-                                               break;
-                                       case EDG_WLL_QUERY_ATTR_EXITCODE:
-                                               edg_wll_add_int_to_XMLBody(&pomValue, conditions[row][i].value.i, "exitcode", -1);
-                                               if (conditions[row][i].op == EDG_WLL_QUERY_OP_WITHIN)
-                                                       edg_wll_add_int_to_XMLBody(&pomValue, conditions[row][i].value2.i, "exitcode", -1);
-                                               break;
-                                       /* common conditions */
-                                       case EDG_WLL_QUERY_ATTR_USERTAG:
-                                               edg_wll_add_tagged_string_to_XMLBody(&pomValue, conditions[row][i].value.c, "usertag", conditions[row][i].attr_id.tag, "name", NULL);
-                                               break;
-                               default:
-                                       free(pomValue);
-                                       return -1;
-                       }
-                       switch (conditions[row][i].op) {
-                               case EDG_WLL_QUERY_OP_EQUAL: pomOp = "equal"; break;
-                               case EDG_WLL_QUERY_OP_LESS: pomOp = "less"; break;
-                               case EDG_WLL_QUERY_OP_GREATER: pomOp = "greater"; break;
-                               case EDG_WLL_QUERY_OP_WITHIN: pomOp = "within"; break;
-                               case EDG_WLL_QUERY_OP_UNEQUAL: pomOp = "unequal"; break;
-                               default:
-                                       return -1;
-                       }
-       
-                       len = asprintf(&list[i],"\t\t\t<%s>\n\t\t%s\t\t\t</%s>\r\n",
-                                       pomOp,pomValue,pomOp);
-                       tot_len += len;
-                       len_list[i] = len;
-       
-                       free(pomValue);
-       
-                       i++;
-               }
-       
-       
-               pomA = (char *) malloc(tot_len  * sizeof(char) +
-                       sizeof(QUERY_JOBS_OR_BEGIN) + sizeof(QUERY_JOBS_OR_END) - 1);
-       
-               memcpy(pomA, QUERY_JOBS_OR_BEGIN, sizeof(QUERY_JOBS_OR_BEGIN));
-               pomB = pomA + sizeof(QUERY_JOBS_OR_BEGIN) - 1;
-       
-               for (i=0; i < nconditions; i++) {
-                       memcpy(pomB, list[i], len_list[i] );
-                       pomB += len_list[i];
-                       free(list[i]);
-               }
-               free(list);
-               free(len_list);
-               
-               strcpy(pomB, QUERY_JOBS_OR_END);
-               asprintf(message,"%s%s", pomC, pomA);
-               free(pomA);
-               free(pomC);
-               pomC = *message;                
-               *message = NULL;
-
-               row++;
-       }
-
-
-       asprintf(message,"%s", pomC);   
-
-       free(pomC);
-
-        return 0;
-}
-
-
-
-
-/* construct Message-Body of Request-Line for edg_wll_QueryEvents */
-int edg_wll_QueryEventsRequestToXML(
-               edg_wll_Context ctx,
-                const edg_wll_QueryRec **job_conditions,
-                const edg_wll_QueryRec **event_conditions,
-                char **message)
-{
-        char *pomA, *pomB, *pomC;
-        int i = 0, len, tot_len = 0, row = 0;
-        int nevent_conditions;
-        char **list;
-        int *len_list;
-
-       
-       edg_wll_JobQueryRecToXML(ctx, job_conditions, &pomC);
-
-       row = 0;
-       while(event_conditions && event_conditions[row]) {      
-
-               pomA = pomB = NULL;
-
-               for (i=0; event_conditions[row][i].attr != EDG_WLL_QUERY_ATTR_UNDEF ; i++);
-               nevent_conditions = i;
-       
-                list = (char **) malloc ((nevent_conditions) * sizeof(*list));
-                len_list = (int *) malloc ((nevent_conditions) * sizeof(*len_list));
-
-               i=0;
-               while (i < nevent_conditions) {
-                       const char *pomOp;
-                       char       *pomValue;
-       
-                       asprintf(&pomValue,"%s","");
-       
-                       switch (event_conditions[row][i].attr) {
-                               /* event specific conditions */
-                               case EDG_WLL_QUERY_ATTR_TIME:
-                                       if (event_conditions[row][i].op == EDG_WLL_QUERY_OP_WITHIN) {
-                                               edg_wll_add_tagged_time_t_to_XMLBody(&pomValue, event_conditions[row][i].value.t.tv_sec, "time", edg_wll_StatToString(event_conditions[row][i].attr_id.state), "state", -1);
-                                               edg_wll_add_tagged_time_t_to_XMLBody(&pomValue, event_conditions[row][i].value2.t.tv_sec, "time", edg_wll_StatToString(event_conditions[row][i].attr_id.state), "state", -1);   
-                                       }
-                                       else 
-                                               edg_wll_add_tagged_time_t_to_XMLBody(&pomValue, event_conditions[row][i].value.t.tv_sec, "time", edg_wll_StatToString(event_conditions[row][i].attr_id.state), "state", -1);
-                                       break;
-                               case EDG_WLL_QUERY_ATTR_LEVEL:
-                                       edg_wll_add_int_to_XMLBody(&pomValue, event_conditions[row][i].value.i, "level", -1);
-                                       if (event_conditions[row][i].op == EDG_WLL_QUERY_OP_WITHIN)
-                                               edg_wll_add_int_to_XMLBody(&pomValue, event_conditions[row][i].value2.i, "level", -1);
-                                       break;
-                               case EDG_WLL_QUERY_ATTR_HOST:
-                                       edg_wll_add_string_to_XMLBody(&pomValue, event_conditions[row][i].value.c, "host", NULL);
-                                       break;
-                               case EDG_WLL_QUERY_ATTR_SOURCE:
-                                       edg_wll_add_int_to_XMLBody(&pomValue, event_conditions[row][i].value.i, "source", -1);
-                                       break;
-                               case EDG_WLL_QUERY_ATTR_INSTANCE:
-                                       edg_wll_add_string_to_XMLBody(&pomValue, event_conditions[row][i].value.c, "instance", NULL);
-                                       break;
-                               case EDG_WLL_QUERY_ATTR_EVENT_TYPE:
-                                       edg_wll_add_int_to_XMLBody(&pomValue, event_conditions[row][i].value.i, "type", EDG_WLL_EVENT_UNDEF);
-                                       if (event_conditions[row][i].op == EDG_WLL_QUERY_OP_WITHIN)
-                                               edg_wll_add_int_to_XMLBody(&pomValue, event_conditions[row][i].value2.i, "type", EDG_WLL_EVENT_UNDEF);
-                                       break;
-                               /* common conditions */
-                               case EDG_WLL_QUERY_ATTR_USERTAG:
-                                       edg_wll_add_tagged_string_to_XMLBody(&pomValue, event_conditions[row][i].value.c, "usertag", event_conditions[row][i].attr_id.tag, "name", NULL);
-                                       break;
-                               default:
-                                       free(pomValue);
-                                       return -1;
-                       }
-                       switch (event_conditions[row][i].op) {
-                               case EDG_WLL_QUERY_OP_EQUAL: pomOp = "equal"; break;
-                               case EDG_WLL_QUERY_OP_LESS: pomOp = "less"; break;
-                               case EDG_WLL_QUERY_OP_GREATER: pomOp = "greater"; break;
-                               case EDG_WLL_QUERY_OP_WITHIN: pomOp = "within"; break;
-                               case EDG_WLL_QUERY_OP_UNEQUAL: pomOp = "unequal"; break;
-                               default:
-                                       return -1;
-                       }
-       
-                       len = asprintf(&list[i],"\t\t\t<%s>\n\t\t%s\t\t\t</%s>\r\n",
-                                       pomOp,pomValue,pomOp);
-       
-                       tot_len += len;
-                       len_list[i] = len;
-       
-                       free(pomValue);
-       
-                       i++;
-               }
-
-                pomA = (char *) malloc(tot_len  * sizeof(char) +
-                        sizeof(QUERY_EVENTS_OREC_BEGIN) + sizeof(QUERY_EVENTS_OREC_END) - 1);
-
-                memcpy(pomA, QUERY_EVENTS_OREC_BEGIN, sizeof(QUERY_EVENTS_OREC_BEGIN));
-                pomB = pomA + sizeof(QUERY_EVENTS_OREC_BEGIN) - 1;
-
-                for (i=0; i < nevent_conditions; i++) {
-                        memcpy(pomB, list[i], len_list[i] );
-                        pomB += len_list[i];
-                        free(list[i]);
-                }
-                free(list);
-                free(len_list);
-
-                strcpy(pomB, QUERY_EVENTS_OREC_END);
-                asprintf(message,"%s%s", pomC, pomA);
-                free(pomA);
-                free(pomC);
-                pomC = *message;
-                *message = NULL;
-
-               row++;
-       }       
-       
-       asprintf(message,"%s softLimit=\"%d\" queryRes=\"%d\">\r\n\t<and>\r\n%s%s",
-               QUERY_EVENTS_REQUEST_BEGIN, 
-               ctx->p_query_events_limit, ctx->p_query_results,
-               pomC, QUERY_EVENTS_REQUEST_END);        
-
-       free(pomC);
-
-       return 0;
-}
-
-
-
-/* construct Message-Body of Request-Line for edg_wll_QueryJobs */
-int edg_wll_QueryJobsRequestToXML(
-               edg_wll_Context ctx,
-               const edg_wll_QueryRec **conditions,
-                int flags,
-                char **message)
-{
-        char *pomC, *cflags;
-
-       
-       edg_wll_JobQueryRecToXML(ctx, conditions, &pomC);       
-
-       asprintf(message,
-               "%s softLimit=\"%d\" queryRes=\"%d\">\r\n\t<flags>%s</flags>\r\n\t<and>\r\n%s%s",
-               QUERY_JOBS_REQUEST_BEGIN,
-               ctx->p_query_jobs_limit, ctx->p_query_results,
-               cflags = edg_wll_stat_flags_to_string(flags), pomC, QUERY_JOBS_REQUEST_END);    
-
-       free(cflags);
-       free(pomC);
-
-        return 0;
-}
-
-
-/* construct Message-Body of Request-Line for edg_wll_Purge */
-int edg_wll_PurgeRequestToXML(
-                edg_wll_Context ctx,
-               const edg_wll_PurgeRequest *request,
-                char **message)
-{
-        char *pomA, *pomB, *pomC;
-
-
-       if (!request) { *message = NULL; return(-1); }
-
-       pomA = strdup("");
-       if (request->jobs) edg_wll_add_strlist_to_XMLBody(&pomA, request->jobs, "jobs",
-                                                               "jobId", "\t", NULL);
-
-       /* print timeout for all status codes */
-       pomB = strdup("");
-       edg_wll_add_time_t_list_to_XMLBody(&pomB, request->timeout, "timeout", edg_wll_StatToString, "\t",
-                                               0, EDG_WLL_NUMBER_OF_STATCODES);
-
-       trio_asprintf(&pomC,"%s%s%s\t<flags>%|Xs</flags>\r\n%s",
-                       PURGE_REQUEST_BEGIN,pomA,pomB,edg_wll_purge_flags_to_string(request->flags),
-                       PURGE_REQUEST_END);
-
-       free(pomA);
-       free(pomB);
-
-
-        *message = pomC;
-
-        return 0;
-}
-
-
-
-/* construct Message-Body of Request-Line for edg_wll_Dump */
-int edg_wll_DumpRequestToXML(
-                edg_wll_Context ctx,
-               const edg_wll_DumpRequest *request,
-                char **message)
-{
-        char *pomA, *pomB;
-
-
-       if (!request) { *message = NULL; return(-1); }
-
-       pomA = strdup("");
-       if (request->from < 0)
-               edg_wll_add_string_to_XMLBody(&pomA, 
-                       edg_wll_DumpConstToString(request->from), "from", NULL);
-       else
-       edg_wll_add_time_t_to_XMLBody(&pomA, request->from, "from", 0);
-       if (request->to < 0)
-               edg_wll_add_string_to_XMLBody(&pomA,
-                       edg_wll_DumpConstToString(request->to), "to", NULL);
-       else
-       edg_wll_add_time_t_to_XMLBody(&pomA, request->to, "to", 0);
-
-       trio_asprintf(&pomB,"%s%s%s",
-                       DUMP_REQUEST_BEGIN,pomA,DUMP_REQUEST_END);
-
-       free(pomA);
-
-
-        *message = pomB;
-
-        return 0;
-}
-
-
-
-/* construct Message-Body of Request-Line for edg_wll_Load */
-int edg_wll_LoadRequestToXML(
-                edg_wll_Context ctx,
-               const edg_wll_LoadRequest *request,
-                char **message)
-{
-        char *pomA, *pomB;
-
-
-       if (!request) { *message = NULL; return(-1); }
-
-       pomA = strdup("");
-       edg_wll_add_string_to_XMLBody(&pomA, request->server_file, "server_file", 0);
-
-       trio_asprintf(&pomB,"%s%s%s",
-                       LOAD_REQUEST_BEGIN,pomA,LOAD_REQUEST_END);
-
-       free(pomA);
-
-
-        *message = pomB;
-
-        return 0;
-}
-
-
-
-/* construct Message-Body of Request-Line for edg_wll_IndexedAttrs */
-int edg_wll_IndexedAttrsRequestToXML(
-                edg_wll_Context ctx,
-                char **message)
-{
-       char *pomB;
-
-
-       trio_asprintf(&pomB,"%s%s",
-                       INDEXED_ATTRS_REQUEST_BEGIN,INDEXED_ATTRS_REQUEST_END);
-
-        *message = pomB;
-
-        return 0;
-}
-
-
-/* construct Message-Body of Request-Line for edg_wll_Notif* functions */
-int edg_wll_NotifRequestToXML(
-                edg_wll_Context ctx, 
-               const char *function,
-               const edg_wll_NotifId notifId,
-               const char *address,
-               edg_wll_NotifChangeOp op,
-               edg_wll_QueryRec const * const *conditions,
-                char **message)
-{
-       char *pomA=NULL, *pomB=NULL, *pomC=NULL;
-
-
-       pomA = strdup("");
-       edg_wll_add_string_to_XMLBody(&pomA, edg_wll_NotifIdUnparse(notifId), "notifId", NULL);
-       edg_wll_add_string_to_XMLBody(&pomA, address, "clientAddress", NULL);
-       edg_wll_add_string_to_XMLBody(&pomA, edg_wll_NotifChangeOpToString(op), "notifChangeOp", NULL);
-       if (conditions && conditions[0] && conditions[0][0].attr != EDG_WLL_QUERY_ATTR_UNDEF)
-               edg_wll_JobQueryRecToXML(ctx, conditions, &pomB);
-               
-
-       if (pomB)
-               trio_asprintf(&pomC,"%s function=\"%s\">\r\n%s\t<and>\r\n%s\t</and>\r\n%s",
-                       NOTIF_REQUEST_BEGIN,function,pomA,pomB,NOTIF_REQUEST_END);
-       else
-               trio_asprintf(&pomC,"%s function=\"%s\">\r\n%s%s",
-                       NOTIF_REQUEST_BEGIN,function,pomA,NOTIF_REQUEST_END);
-
-
-       free(pomA);
-       free(pomB);
-        *message = pomC;
-
-        return 0;
-}
-
-
-/* construct Message-Body of Request-Line for edg_wll_QuerySequeceCode function */
-int edg_wll_QuerySequenceCodeToXML(
-               edg_wll_Context ctx,
-               edg_wlc_JobId jobId,
-                char **message)
-{
-       char *pomA=NULL, *pomC=NULL;
-
-
-       pomA = strdup("");
-       edg_wll_add_jobid_to_XMLBody(&pomA, jobId, "jobId", NULL);
-       edg_wll_add_string_to_XMLBody(&pomA, edg_wll_SourceToString(ctx->p_source), "source", NULL);
-
-       trio_asprintf(&pomC,"%s%s%s",
-               QUERY_SEQUENCE_CODE_REQUEST_BEGIN,pomA,QUERY_SEQUENCE_CODE_REQUEST_END);
-
-
-       free(pomA);
-        *message = pomC;
-
-        return 0;
-}
-
-
-/* construct Message-Body of Request-Line for edg_wll_StateRate function */
-int edg_wll_StatsRequestToXML(
-                edg_wll_Context        ctx, 
-               const char              *function,
-               const edg_wll_QueryRec  *cond,
-               edg_wll_JobStatCode     major,
-               int                     minor,
-               time_t                  *from,
-               time_t                  *to,
-                char **message)
-{
-       char *pomA=NULL, *pomB=NULL, *pomC=NULL;
-       edg_wll_QueryRec **conditions;
-
-       
-        conditions = (edg_wll_QueryRec **) malloc(2 * sizeof(edg_wll_QueryRec *));
-        conditions[1] = NULL;
-
-       conditions[0] = cond;
-       conditions[1] = NULL;
-
-       pomA = strdup("");
-       
-       edg_wll_add_edg_wll_JobStatCode_to_XMLBody(&pomA, major, "major", EDG_WLL_JOB_UNDEF);
-       edg_wll_add_int_to_XMLBody(&pomA, minor, "minor", -1);
-       edg_wll_add_time_t_to_XMLBody(&pomA, *from, "from", 0); 
-       edg_wll_add_time_t_to_XMLBody(&pomA, *to, "to", 0); 
-
-       if (conditions && conditions[0] && conditions[0][0].attr != EDG_WLL_QUERY_ATTR_UNDEF)
-               edg_wll_JobQueryRecToXML(ctx, (edg_wll_QueryRec const * const *) conditions, &pomB);
-               
-
-       if (pomB)
-               trio_asprintf(&pomC,"%s function=\"%s\">\r\n%s\t<and>\r\n%s\t</and>\r\n%s",
-                       STATS_REQUEST_BEGIN,function,pomA,pomB,STATS_REQUEST_END);
-       else
-               trio_asprintf(&pomC,"%s function=\"%s\">\r\n%s%s",
-                       STATS_REQUEST_BEGIN,function,pomA,STATS_REQUEST_END);
-
-
-       free(pomA);
-       free(pomB);
-       free(conditions);
-        *message = pomC;
-
-        return 0;
-}
diff --git a/org.glite.lb.common/test/il_int_test.cpp b/org.glite.lb.common/test/il_int_test.cpp
deleted file mode 100644 (file)
index f00b4c6..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <cppunit/extensions/HelperMacros.h>
-
-
-extern "C" {
-#include "il_string.h"
-}
-
-class IlIntTest: public CppUnit::TestFixture
-{
-       CPPUNIT_TEST_SUITE( IlIntTest );
-       CPPUNIT_TEST( testPutInt );
-       CPPUNIT_TEST( testGetInt );
-       CPPUNIT_TEST( testLenInt );
-       CPPUNIT_TEST_SUITE_END();
-
-public:
-       void setUp() {
-       }
-
-       void tearDown() {
-       }
-
-       void testPutInt() {
-               put_int(buffer, 17);
-               CPPUNIT_ASSERT(!strcmp(buffer, "17\n"));
-       }
-
-       void testGetInt() {
-               int d;
-               get_int("17\n", &d);
-               CPPUNIT_ASSERT(d == 17);
-               CPPUNIT_ASSERT(get_int("17 \n", &d) == NULL);
-       }
-
-       void testLenInt() {
-               CPPUNIT_ASSERT(3 == len_int(17));
-       }
-
-protected:
-       char buffer[255];
-};
-
-CPPUNIT_TEST_SUITE_REGISTRATION( IlIntTest ) ;
-
diff --git a/org.glite.lb.common/test/il_string_test.cpp b/org.glite.lb.common/test/il_string_test.cpp
deleted file mode 100644 (file)
index 2f03a94..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <cppunit/extensions/HelperMacros.h>
-
-extern "C" {
-#include "il_string.h"
-}
-
-class IlStringTest : public CppUnit::TestFixture 
-{
-       CPPUNIT_TEST_SUITE( IlStringTest );
-       CPPUNIT_TEST( testPutString );
-       CPPUNIT_TEST( testGetString );
-       CPPUNIT_TEST( testLenString );
-       CPPUNIT_TEST_SUITE_END();
-
-public:
-       void setUp() {
-       }
-
-       void tearDown() {
-       }
-
-       void testPutString() {
-               put_string(buffer, "ahoj");
-               CPPUNIT_ASSERT( !strncmp(buffer,"4 ahoj\n",7) );
-       }
-
-       void testGetString() {
-               char *s;
-               get_string("4 ahoj\n", &s);
-               CPPUNIT_ASSERT( s != NULL );
-               CPPUNIT_ASSERT( !strcmp(s, "ahoj") );
-               CPPUNIT_ASSERT( s[4] == 0 );
-               free(s);
-       }
-
-       void testLenString() {
-               int d = len_string("ahoj");
-               CPPUNIT_ASSERT( d == 7);
-       }
-
-private:
-       char buffer[255];
-};
-
-CPPUNIT_TEST_SUITE_REGISTRATION( IlStringTest );
diff --git a/org.glite.lb.common/test/il_test.cpp b/org.glite.lb.common/test/il_test.cpp
deleted file mode 100644 (file)
index 794c0a0..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TextTestRunner.h>
-
-
-int main(int argc, char *argv[])
-{
-       CppUnit::Test  *suite = CppUnit::TestFactoryRegistry::getRegistry().makeTest();
-       CppUnit::TextTestRunner runner;
-
-       runner.addTest(suite);
-       runner.setOutputter(CppUnit::CompilerOutputter::defaultOutputter(&runner.result(), std::cerr));
-
-       return runner.run() ? 0 : 1;
-}
diff --git a/org.glite.lb.common/test/parse.cpp.T b/org.glite.lb.common/test/parse.cpp.T
deleted file mode 100644 (file)
index face531..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-#include <iostream>
-
-#include <cppunit/extensions/HelperMacros.h>
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-
-#include <glite/lb/producer.h>
-#include "events_parse.h"
-
-class EventParseTest: public  CppUnit::TestFixture
-{
-       CPPUNIT_TEST_SUITE(EventParseTest);
-       CPPUNIT_TEST(regJob);
-/*
-@@@{
-        for my $e ($event->getTypesOrdered) {
-                my $u = lcfirst $e;
-                my $c = getTypeComment $event $e;
-                gen "\tCPPUNIT_TEST($u);\n";
-        }
-@@@}
-*/
-       CPPUNIT_TEST_SUITE_END();
-
-public:
-       void regJob();
-/*
-@@@{
-        for my $e ($event->getTypesOrdered) {
-                my $u = lcfirst $e;
-                my $c = getTypeComment $event $e;
-                gen "\tvoid $u();\n";
-        }
-@@@}
-*/
-
-};
-
-void EventParseTest::regJob()
-{
-       edg_wll_Context ctx;
-       edg_wll_Event   *e1,*e2;
-       char    *line,*et,*ed;
-
-       edg_wll_InitContext(&ctx);
-       e1 = edg_wll_InitEvent(EDG_WLL_EVENT_REGJOB);
-
-       e1->regJob.jdl = strdup("very long job = \"blabla\" \\\\ \n hugh\t;");
-       e1->regJob.ns = strdup("ns address");
-       e1->regJob.jobtype = EDG_WLL_REGJOB_SIMPLE;
-       e1->regJob.seed = strdup("");
-
-       gettimeofday(&e1->any.timestamp,NULL);
-       
-       e1->any.host = strdup("some.host");
-       e1->any.level = 7;
-       e1->any.priority = 0;
-       edg_wlc_JobIdParse("https://some.host:1234/x67qr549qc",&e1->any.jobId);
-       e1->any.seqcode = EDG_WLL_SEQ_BIGHELPER_INITIAL;
-       e1->any.user = strdup("/O=Grid/CN=This User");
-       e1->any.source = EDG_WLL_SOURCE_USER_INTERFACE;
-       e1->any.src_instance = strdup("");
-
-       line = edg_wll_UnparseEvent(ctx,e1);
-       std::cerr << line << std::endl;
-       
-       if (!line) {
-               edg_wll_Error(ctx,&et,&ed);
-               CPPUNIT_ASSERT_MESSAGE(std::string("edg_wll_UnparseEvent():") + et + " " + ed, line);
-       }
-
-       if (edg_wll_ParseEvent(ctx,line,&e2)) {
-               edg_wll_Error(ctx,&et,&ed);
-               CPPUNIT_ASSERT_MESSAGE(std::string("edg_wll_ParseEvent():") + et + " " + ed, 0);
-       }
-
-       if ((edg_wll_CompareEvents(ctx,e1,e2))) {
-               edg_wll_Error(ctx,&et,&ed);
-               CPPUNIT_ASSERT_MESSAGE(std::string("edg_wll_CompareEvents():") + et + " " + ed, 0);
-       }
-}
-
-/*
-@@@{
-        for my $e ($event->getTypesOrdered) {
-                my $l = lcfirst $e;
-                my $u = uc $e;
-                my $c = getTypeComment $event $e;
-                gen "
-void EventParseTest::$l(){
-       edg_wll_Context ctx;
-       edg_wll_Event   *e1,*e2;
-       char    *line,*et,*ed;
-
-       edg_wll_InitContext(&ctx);
-       e1 = edg_wll_InitEvent(EDG_WLL_EVENT_$u);
-";
-
-               selectType $event '_common_';
-               for ($event->getFieldsOrdered) {
-                       my $f = selectField $event $_;
-                       my $fn = getName $f;
-                       my $value = getDefaultTestValue $f;
-                       if (!$f->{codes}) {
-                               if (!$f->hasAlias('ULM')) {
-                                       my $fu = uc $fn;
-                                       gen "\te1->any.$fn = $value;\n";
-#                                      gen "\tif (". $f->isNULL("e1->any.$fn") .") MISSING(EDG_WLL\_COMMON\_$fu)\n";
-                               } else {
-                                       my $fa = $f->getName('ULM');
-                                       my $fu = uc $fa;
-#                                      gen "\tif (". $f->isNULL("e1->any.$fn") .") MISSING(ULM\_$fu)\n";
-                               }
-                       }
-               }
-               gen '
-       if (!line) {
-               edg_wll_Error(ctx,&et,&ed);
-               CPPUNIT_ASSERT_MESSAGE(std::string("edg_wll_UnparseEvent():") + et + " " + ed, line);
-       }
-
-       if (edg_wll_ParseEvent(ctx,line,&e2)) {
-               edg_wll_Error(ctx,&et,&ed);
-               CPPUNIT_ASSERT_MESSAGE(std::string("edg_wll_ParseEvent():") + et + " " + ed, 0);
-       }
-
-       if ((edg_wll_CompareEvents(ctx,e1,e2))) {
-               edg_wll_Error(ctx,&et,&ed);
-               CPPUNIT_ASSERT_MESSAGE(std::string("edg_wll_CompareEvents():") + et + " " + ed, 0);
-       }
-}
-
-';
-
-        }
-@@@}
-*/
-
-CPPUNIT_TEST_SUITE_REGISTRATION( EventParseTest );
-
-int main (int ac,const char *av[])
-{
-       CppUnit::Test *suite = CppUnit::TestFactoryRegistry::getRegistry().makeTest();
-       CppUnit::TextUi::TestRunner runner;
-       
-       runner.addTest(suite);
-       return runner.run() ? 0 : 1;
-}
diff --git a/org.glite.lb.common/test/test_gss.cpp b/org.glite.lb.common/test/test_gss.cpp
deleted file mode 100644 (file)
index d6df484..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-#include <iostream>
-#include <sys/types.h>
-#include <unistd.h>
-
-
-#include <cppunit/extensions/HelperMacros.h>
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-
-#include "lb_gss.h"
-
-class GSSTest: public  CppUnit::TestFixture
-{
-       CPPUNIT_TEST_SUITE(GSSTest);
-       CPPUNIT_TEST(echo);
-       CPPUNIT_TEST(errorTest);
-       CPPUNIT_TEST_SUITE_END();
-
-public:
-       void echo();
-       void errorTest();
-
-       void setUp();
-
-private:
-       gss_cred_id_t   my_cred;
-       char *          my_subject;
-       int             sock, port;
-       struct timeval  timeout;
-       
-       void replier();
-       
-};
-
-
-void GSSTest::replier() {
-       edg_wll_GssConnection   conn;
-       edg_wll_GssStatus       stat;
-       struct sockaddr_in      a;
-       socklen_t               alen = sizeof(a);
-       int                     s, len;
-       char                    buf[100];
-       
-
-       if ( (s = accept(sock, (struct sockaddr *) &a, &alen)) < 0 ) exit(1);
-       
-       if ( edg_wll_gss_accept(my_cred, s, &timeout, &conn, &stat) ) exit(1);
-
-       while ( (len = edg_wll_gss_read(&conn, buf, sizeof(buf), &timeout, &stat)) >= 0 ) {
-               if ( edg_wll_gss_write(&conn, buf, len, &timeout, &stat) ) exit(1);
-       }       
-
-       exit(0);
-}
-
-
-void GSSTest::setUp(void) {
-       pid_t pid;
-       edg_wll_GssStatus stat;
-       struct sockaddr_in      a;
-       socklen_t               alen = sizeof(a);
-       char *                  cred_file = NULL;
-       char *                  key_file = NULL;
-
-       timeout.tv_sec = 10;
-       timeout.tv_usec = 0;
-       
-       key_file = cred_file = getenv("X509_USER_PROXY");
-       CPPUNIT_ASSERT_MESSAGE("credential file", cred_file);
-       
-       if (edg_wll_gss_acquire_cred_gsi(cred_file, key_file, &my_cred, &my_subject, &stat))
-               CPPUNIT_ASSERT_MESSAGE("gss_acquire_cred", 0);
-       
-        sock = socket(PF_INET,SOCK_STREAM,0);
-       CPPUNIT_ASSERT_MESSAGE("socket()", sock >= 0);
-
-        a.sin_family = AF_INET;
-        a.sin_port = 0;
-        a.sin_addr.s_addr = INADDR_ANY;
-
-        if (bind(sock,(struct sockaddr *) &a,sizeof(a))) {
-               CPPUNIT_ASSERT_MESSAGE("bind()", 0);
-        }
-
-        if (listen(sock,1)) {
-               CPPUNIT_ASSERT_MESSAGE("listen()", 0);
-       }
-
-       getsockname(sock,(struct sockaddr *) &a,&alen);
-       port = ntohs(a.sin_port);
-
-       if ( !(pid = fork()) ) replier();
-       else close(sock);
-}
-
-
-
-void GSSTest::echo()
-{
-       edg_wll_GssConnection   conn;
-       edg_wll_GssStatus       stat;
-       size_t                  total;
-       int                     err;
-       char                    buf[] = "f843fejwfanczn nc4*&686%$$&^(*)*#$@WSH";       
-       char                    buf2[100];      
-
-
-       err = edg_wll_gss_connect(my_cred, "localhost", port, &timeout, &conn, &stat);
-       CPPUNIT_ASSERT_MESSAGE("edg_wll_gss_connect()", !err);
-       
-       err = edg_wll_gss_write(&conn, buf, strlen(buf)+1, &timeout, &stat);
-       CPPUNIT_ASSERT_MESSAGE("edg_wll_gss_write()", !err);
-       
-       err = edg_wll_gss_read_full(&conn, buf2, strlen(buf)+1, &timeout, &total, &stat);
-       CPPUNIT_ASSERT_MESSAGE("edg_wll_gss_read_full()", !err);
-
-       CPPUNIT_ASSERT(strlen(buf)+1 == total && !strcmp(buf,buf2) );
-
-       edg_wll_gss_close(&conn, &timeout);
-               
-}
-
-
-void GSSTest::errorTest()
-{
-       edg_wll_GssConnection   conn;
-       edg_wll_GssStatus       stat;
-       int                     err;
-       char *                  msg = NULL;
-
-
-       err = edg_wll_gss_connect(my_cred, "xxx.porno.net", port, &timeout, &conn, &stat);
-       if (err) edg_wll_gss_get_error(&stat, "gss_connect()", &msg);
-       CPPUNIT_ASSERT_MESSAGE("edg_wll_gss_get_error()", msg);
-}
-
-
-CPPUNIT_TEST_SUITE_REGISTRATION( GSSTest );
-
-int main (int ac,const char *av[])
-{
-       CppUnit::Test *suite = CppUnit::TestFactoryRegistry::getRegistry().makeTest();
-       CppUnit::TextUi::TestRunner runner;
-       
-       runner.addTest(suite);
-       return runner.run() ? 0 : 1;
-}
diff --git a/org.glite.lb.logger/.cvsignore b/org.glite.lb.logger/.cvsignore
deleted file mode 100644 (file)
index 1df717b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-.project
-.cdtproject
\ No newline at end of file
diff --git a/org.glite.lb.logger/LICENSE b/org.glite.lb.logger/LICENSE
deleted file mode 100644 (file)
index 259a91f..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-LICENSE file for EGEE Middleware\r
-================================\r
-\r
-Copyright (c) 2004 on behalf of the EU EGEE Project: \r
-The European Organization for Nuclear Research (CERN), \r
-Istituto Nazionale di Fisica Nucleare (INFN), Italy\r
-Datamat Spa, Italy\r
-Centre National de la Recherche Scientifique (CNRS), France\r
-CS Systeme d'Information (CSSI), France\r
-Royal Institute of Technology, Center for Parallel Computers (KTH-PDC), Sweden\r
-Universiteit van Amsterdam (UvA), Netherlands\r
-University of Helsinki (UH.HIP), Finlan\r
-University of Bergen (UiB), Norway\r
-Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom\r
-\r
-Redistribution and use in source and binary forms, with or without\r
-modification, are permitted provided that the following conditions are\r
-met: \r
-\r
-1. Redistributions of source code must retain the above copyright\r
-notice, this list of conditions and the following disclaimer.\r
-\r
-2. Redistributions in binary form must reproduce the above copyright\r
-notice, this list of conditions and the following disclaimer in the\r
-documentation and/or other materials provided with the distribution.\r
-\r
-3. The end-user documentation included with the redistribution, if\r
-any, must include the following acknowledgment: "This product includes\r
-software developed by The EU EGEE Project (http://cern.ch/eu-egee/)."\r
-Alternatively, this acknowledgment may appear in the software itself, if\r
-and wherever such third-party acknowledgments normally appear.\r
-\r
-4. The names EGEE and the EU EGEE Project must not be\r
-used to endorse or promote products derived from this software without\r
-prior written permission. For written permission, please contact\r
-<email address>.\r
-\r
-5. You are under no obligation whatsoever to provide anyone with any\r
-bug fixes, patches, or upgrades to the features, functionality or\r
-performance of the Software ("Enhancements") that you may develop over\r
-time; however, if you choose to provide your Enhancements to The EU\r
-EGEE Project, or if you choose to otherwise publish or distribute your\r
-Enhancements, in source code form without contemporaneously requiring\r
-end users of The EU EGEE Proejct to enter into a separate written license\r
-agreement for such Enhancements, then you hereby grant The EU EGEE Project\r
-a non-exclusive, royalty-free perpetual license to install, use, copy,\r
-modify, prepare derivative works, incorporate into the EGEE Middleware\r
-or any other computer software, distribute, and sublicense your\r
-Enhancements or derivative works thereof, in binary and source code\r
-form (if any), whether developed by The EU EGEE Project or third parties.\r
-\r
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED\r
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
-DISCLAIMED. IN NO EVENT SHALL PROJECT OR ITS CONTRIBUTORS BE LIABLE\r
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\r
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\r
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\r
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-\r
-This software consists of voluntary contributions made by many\r
-individuals on behalf of the EU EGEE Prject. For more information on The\r
-EU EGEE Project, please see http://cern.ch/eu-egee/. For more information on\r
-EGEE Middleware, please see http://egee-jra1.web.cern.ch/egee-jra1/\r
-\r
-\r
diff --git a/org.glite.lb.logger/Makefile b/org.glite.lb.logger/Makefile
deleted file mode 100644 (file)
index eeed980..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-# defaults
-top_srcdir=.
-builddir=build
-top_builddir=${top_srcdir}/${builddir}
-stagedir=.
-distdir=.
-globalprefix=glite
-lbprefix=lb
-package=glite-lb-client
-version=0.0.0
-PREFIX=/opt/glite
-
-glite_location=/opt/glite
-globus_prefix=/opt/globus
-nothrflavour=gcc32
-thrflavour=gcc32pthr
-expat_prefix=/opt/expat
-ares_prefix=/opt/ares
-
--include Makefile.inc
-
-CC=gcc
-
-VPATH:=${top_srcdir}/src:${top_srcdir}/test
-
-VERSION=-DVERSION=\"GLite-${version}\"
-
-SUFFIXES=.no
-
-GLOBUSINC=-I${globus_prefix}/include/${nothrflavour}
-
-GLOBUSTHRINC=-I${globus_prefix}/include/${thrflavour}
-
-DEBUG:=-g -O0
-CFLAGS:=${DEBUG} \
-       -I${stagedir}/include -I${top_srcdir}/src \
-       -D_GNU_SOURCE \
-       ${COVERAGE_FLAGS} \
-       ${VERSION}
-
-LDFLAGS:=-L${stagedir}/lib \
-       ${COVERAGE_FLAGS} 
-LINK:=libtool --mode=link ${CC} ${LDFLAGS}
-LINKXX:=libtool --mode=link ${CXX} -rpath ${stagedir}/lib ${LDFLAGS} 
-INSTALL:=libtool --mode=install install
-
-GLOBUS_LIBS:= -L${globus_prefix}/lib \
-       -lglobus_common_${nothrflavour} \
-       -lglobus_gssapi_gsi_${nothrflavour}
-
-GLOBUS_THRLIBS:= -L${globus_prefix}/lib \
-       -lglobus_common_${thrflavour} \
-       -lglobus_gssapi_gsi_${thrflavour}
-
-ifneq (${expat_prefix},/usr)
-       EXPAT_LIBS:=-L${expat_prefix}/lib
-endif
-EXPAT_LIBS:=${EXPAT_LIBS} -lexpat
-
-EXT_LIBS:= -L${ares_prefix}/lib -lares ${EXPAT_LIBS}
-
-COMMON_LIB:=-lglite_lb_common
-
-TEST_LIBS:=-L${cppunit_prefix}/lib -lcppunit
-TEST_INC:=-I${cppunit_prefix}/include
-
-LOGD_OBJS:= logd_proto.o logd.o
-
-INTERLOG_OBJS:=il_error.o input_queue_socket.o \
-       recover.o send_event.o \
-       event_queue.o event_store.o il_master.o interlogd.o \
-       queue_mgr.o server_msg.o queue_thread.o
-
-INTERLOG_NOBJS:=${INTERLOG_OBJS:.o=.no}
-
-INTERLOG_TEST_OBJS:= \
-       il_error.o \
-       server_msg.o \
-       server_msgTest.o \
-       queue_thread.o \
-       event_store.o \
-       event_storeTest.o \
-       queue_mgr.o \
-       il_master.o \
-       input_queue_socket.o \
-       input_queue_socketTest.o \
-       send_event.o \
-       event_queue.o \
-       event_queueTest.o \
-       IlTestBase.o \
-       il_test.o 
-
-glite_lb_logd: ${LOGD_OBJS}
-       ${LINK} -o $@ ${LOGD_OBJS} ${COMMON_LIB}_${nothrflavour} ${EXT_LIBS} ${GLOBUS_LIBS}
-
-glite_lb_interlogd: ${INTERLOG_OBJS}
-       ${LINK} -o $@ ${INTERLOG_OBJS} \
-               ${COMMON_LIB}_${thrflavour} ${EXT_LIBS} ${GLOBUS_THRLIBS} -lpthread
-
-glite_lb_notif_interlogd: ${INTERLOG_NOBJS}
-       ${LINK} -o $@ ${INTERLOG_NOBJS} \
-               ${COMMON_LIB}_${thrflavour} ${EXT_LIBS} ${GLOBUS_THRLIBS} -lpthread
-
-default: all
-
-all compile: glite_lb_logd glite_lb_interlogd glite_lb_notif_interlogd
-
-stage: compile
-       $(MAKE) install PREFIX=${stagedir} DOSTAGE=yes
-
-check: 
-# do nothing until test/ is really added to CVS
-# check.ll check.il
-
-#check.ll: logd_proto_test.o ll_test.o
-#      ${LINKXX} -o $@ ${COMMON_LIB}_${nothrflavour} ${EXT_LIBS} ${GLOBUS_LIBS} ${TEST_LIBS} $+
-#      ./check.ll
-
-check.ll:
-       -echo commented out -- fix needed
-
-check.il: ${INTERLOG_TEST_OBJS}
-       ${LINKXX} -o $@ ${COMMON_LIB}_${thrflavour} ${EXT_LIBS} ${GLOBUS_THRLIBS} ${TEST_LIBS} -lpthread $+
-
-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:
-       -mkdir -p ${PREFIX}/bin
-       -mkdir -p ${PREFIX}/etc/init.d
-       -mkdir -p ${PREFIX}/share/doc/${package}-${version}
-       ${INSTALL} -m 755 glite_lb_logd ${PREFIX}/bin/glite-lb-logd
-       ${INSTALL} -m 755 glite_lb_interlogd ${PREFIX}/bin/glite-lb-interlogd
-       if [ x${DOSTAGE} = xyes ]; then \
-               ${INSTALL} -m 755 glite_lb_notif_interlogd ${PREFIX}/bin/glite-lb-notif-interlogd; \
-       fi
-       ${INSTALL} -m 755 ${top_srcdir}/config/startup ${PREFIX}/etc/init.d/glite-lb-locallogger
-       ${INSTALL} -m 644 ${top_srcdir}/LICENSE ${PREFIX}/share/doc/${package}-${version}
-
-%.no: %.c
-       ${CC} ${CFLAGS} ${GLOBUSTHRINC} -DIL_NOTIFICATIONS -c $< -o $@
-
-${INTERLOG_OBJS}: %.o: %.c
-       ${CC} ${CFLAGS} ${GLOBUSTHRINC} -c $< -o $@
-
-${LOGD_OBJS}: %.o: %.c
-       ${CC} ${CFLAGS} ${GLOBUSINC} -c $< -o $@
-
-logd_proto_test.o: %.o: %.c
-       ${CC} ${CFLAGS} ${GLOBUSINC} -c $< -o $@
-
-ll_test.o: %.o: %.cpp
-       ${CXX} ${CFLAGS} ${TEST_INC} -c $< -o $@
-
-il_test.o IlTestBase.o server_msgTest.o event_queueTest.o input_queue_socketTest.o event_storeTest.o: %.o: %.cpp
-       ${CXX} ${CFLAGS} ${GLOBUSTHRINC} ${TEST_INC} -c $< -o $@
diff --git a/org.glite.lb.logger/build.xml b/org.glite.lb.logger/build.xml
deleted file mode 100755 (executable)
index 293f6d5..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Build file for the GLite LB Client module
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.3  2004/07/29 23:21:51  dimeglio
-       Changed default target from compile to dist
-       
-       Revision 1.2  2004/07/07 09:24:57  akrenek
-       thr/nonthr flavours used correctly
-       
-       Revision 1.3  2004/07/06 17:45:30  flammer
-       Update of classpath definitions, targets & configure file.
-       
-       Revision 1.2  2004/06/23 00:29:33  dimeglio
-       Added standard comments and handling of support files
-       
--->
-
-<project name="logger" default="dist">
-       
-       <!-- =========================================
-                Builds the GLite LB Client 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}"/>
-               
-       <!-- ==============================================
-                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>
-       
-       <!-- =========================================
-            RPM settings
-            ========================================= -->
-
-       <property name="build.package.summary" value="L&amp;B local logger" />
-       <property name="build.package.description" value="
-Daemons installed on any EGEE machine producing Logging &amp; Bookkeeping
-(L&amp;B)&#xA;events. They are responsible for non-blocking accept of
-an event, persistent&#xA;storage, and reliable transfer to bookkeeping server." />
-
-</project>             
diff --git a/org.glite.lb.logger/config/startup b/org.glite.lb.logger/config/startup
deleted file mode 100755 (executable)
index 0d1e095..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/bin/sh
-
-GLITE_LOCATION=${GLITE_LOCATION:-/opt/glite}
-GLITE_LOCATION_VAR=${GLITE_LOCATION_VAR:-$GLITE_LOCATION/var}
-
-[ -f /etc/glite.conf ] && . /etc/glite.conf
-[ -f $GLITE_LOCATION/etc/glite-wms.conf ] && . $GLITE_LOCATION/etc/glite-wms.conf
-
-[ -f $GLITE_LOCATION/etc/lb.conf ] && . $GLITE_LOCATION/etc/lb.conf
-[ -f $GLITE_LOCATION_VAR/etc/lb.conf ] && . $GLITE_LOCATION_VAR/etc/lb.conf
-
-[ -f $HOME/.glite.conf ] && . $HOME/.glite.conf
-
-unset creds port
-
-start()
-{
-       if test -z "$GLITE_USER" ;then
-               echo 'Error: GLITE_USER is not set'
-               echo FAILED
-               return 1
-       fi
-
-       [ -n "$GLITE_HOST_CERT" -a -n "$GLITE_HOST_KEY" ] &&
-               creds="-c $GLITE_HOST_CERT -k $GLITE_HOST_KEY"
-
-       if test -z "$creds"; then
-               if su - $GLITE_USER -c "test -r /etc/grid-security/hostkey.pem -a -r /etc/grid-security/hostcert.pem"; then
-                       echo "$0: WARNING: /etc/grid-security/hostkey.pem readable by $GLITE_USER"
-                       creds="-c /etc/grid-security/hostcert.pem -k /etc/grid-security/hostkey.pem"
-               fi
-       fi
-
-       [ -z "$creds" ] && echo $0: WARNING: No credentials specified. Using default lookup which is dangerous. >&2
-
-       [ -n "$GLITE_LB_LOGGER_PORT" ] && port="-p $GLITE_LB_LOGGER_PORT"
-
-       echo -n Starting glite-lb-logd ...
-        (cd /tmp && ls -f /tmp |fgrep ^dglogd_sock_ |xargs rm -f)
-       su - $GLITE_USER -c "$GLITE_LOCATION/bin/glite-lb-logd \
-               $creds $port" && echo " done" || echo " FAILED"
-
-       echo -n Starting glite-lb-interlogd ...
-       su - $GLITE_USER -c "$GLITE_LOCATION/bin/glite-lb-interlogd \
-               $creds" && echo " done" || echo " FAILED"
-}
-
-stop()
-{
-               echo -n Stopping glite-lb-logd ...
-               killall glite-lb-logd
-               echo " done"
-               echo -n Stopping glite-lb-interlogd ...
-               killall glite-lb-interlogd
-               echo " done"
-}
-
-status()
-{
-       if netstat -an --inet | grep "^tcp .* 0.0.0.0:${GLITE_LB_LOGGER_PORT:-9002} .*LISTEN" >/dev/null 2>&1 ;then
-       echo glite-lb-logd running
-       else
-       echo glite-lb-logd not running
-       return 1
-       fi
-       if netstat -an --unix | grep "^unix .* LISTEN.* /tmp/interlogger.sock$" >/dev/null 2>&1 ;then
-       echo glite-lb-interlogd running
-       else
-       echo glite-lb-interlogd not running
-       return 1
-       fi
-}
-
-case x$1 in
-       xstart) start;;
-       xstop)  stop;;
-       xrestart) stop; start;;
-       xstatus) status;;
-       x*)     echo usage: $0 start,stop,restart,status >&2
-               exit 1;;
-esac
diff --git a/org.glite.lb.logger/project/build.properties b/org.glite.lb.logger/project/build.properties
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.glite.lb.logger/project/configure.properties.xml b/org.glite.lb.logger/project/configure.properties.xml
deleted file mode 100644 (file)
index 0e51395..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Configuration options for the GLite LB Client module
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.1  2004/07/07 12:08:47  akrenek
-       *** empty log message ***
-       
-       Revision 1.2  2004/07/06 20:47:11  flammer
-       Moved to configure.properties.xml
-       
-       
--->
-
-       <!-- ======================================================
-         Define extra properties here ...
-         ====================================================== -->
-        
-       <project name="LB Client configuration options">                                                                        
-               <target name="lbmakefiles">
-                       <exec executable="ln" failonerror="true">
-                               <arg line="-fs ${component.dir}/Makefile ${module.build.dir}/Makefile"/>
-                       </exec>
-                       <echo file="${module.build.dir}/Makefile.inc">
-top_srcdir=..
-builddir=build
-stagedir=${stage.abs.dir}
-distdir=${dist.dir}
-globalprefix=${global.prefix}
-lbprefix=${subsystem.prefix}
-package=${module.package.name}
-PREFIX=${install.dir}
-version=${module.version}
-glite_location=${with.glite.location}
-globus_prefix=${with.globus.prefix}
-thrflavour=${with.globus.thr.flavor}
-nothrflavour=${with.globus.nothr.flavor}
-expat_prefix=${with.expat.prefix}
-ares_prefix=${with.ares.prefix}
-cppunit_prefix=${with.cppunit.prefix}
-                       </echo>
-           </target>
-       </project>
diff --git a/org.glite.lb.logger/project/properties.xml b/org.glite.lb.logger/project/properties.xml
deleted file mode 100755 (executable)
index 44827cf..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Common build properties file for the Glite LB Logger component
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$ 
-       
-       Revision history:
-       $Log$
--->
-
-<project name="LB Logger component common properties">
-
-       <!-- Include build properties to allow overwriting 
-            of properties for subsystem                    -->
-       <property file="project/build.properties" />    
-
-       <!-- ======================================================
-          Define corresponding subsystem properties
-                ====================================================== -->
-
-       <!-- Subsystem name -->
-       <property name="subsystem.name" value="${lb.subsystem.name}"/>
-               
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${lb.subsystem.prefix}"/>
-
-       <!-- ======================================================
-          Define component properties
-                ====================================================== -->
-                               
-       <!-- Component name prefix -->
-       <property name="component.prefix" value="logger" />
-                       
-       <!-- ======================================================
-          Define general component properties
-                ====================================================== -->
-       
-       <import file="${component.general.properties.file}" />
-                                               
-       <!-- ======================================================
-                Define extra properties here ...
-                ====================================================== -->
-                
-                                                               
-</project>
diff --git a/org.glite.lb.logger/project/tar_exclude b/org.glite.lb.logger/project/tar_exclude
deleted file mode 100644 (file)
index e1fcd1a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-tar_exclude
-CVS
-build.xml
-build
-build.properties
-properties.xml
-configure.properties.xml
-.cvsignore
-.project
-.cdtproject
diff --git a/org.glite.lb.logger/project/version.properties b/org.glite.lb.logger/project/version.properties
deleted file mode 100644 (file)
index 6c55b19..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Dec 10 13:27:13 CET 2004
-module.version=0.5.0
-module.build=112
-module.age=3
diff --git a/org.glite.lb.logger/src/event_queue.c b/org.glite.lb.logger/src/event_queue.c
deleted file mode 100644 (file)
index d311a1a..0000000
+++ /dev/null
@@ -1,314 +0,0 @@
-#ident "$Header$"
-
-/* 
- *   - general queue handling routines (insert, get)
- */
-
-#include <netdb.h>
-#include <sys/socket.h>
-#include <assert.h>
-#include <errno.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "glite/wmsutils/jobid/cjobid.h"
-
-#include "interlogd.h"
-
-struct event_queue_msg {
-  struct server_msg *msg;
-  struct event_queue_msg *prev;
-};
-
-struct event_queue *
-event_queue_create(char *server_name)
-{
-  struct event_queue *eq;
-  char *p;
-
-  p = strchr(server_name, ':');
-  
-  if(p) 
-    *p++ = 0;
-
-  if((eq = malloc(sizeof(*eq))) == NULL) {
-    set_error(IL_NOMEM, ENOMEM, "event_queue_create: error allocating event queue");
-    return(NULL);
-  }
-
-  memset(eq, 0, sizeof(*eq));
-
-  eq->dest_name = strdup(server_name);
-
-  if(p)
-    *(p-1) = ':';
-  
-#if defined(IL_NOTIFICATIONS)
-  eq->dest_port = atoi(p);
-#else
-  eq->dest_port = p ? atoi(p)+1 : GLITE_WMSC_JOBID_DEFAULT_PORT+1;
-#endif
-  /* create all necessary locks */
-  if(pthread_rwlock_init(&eq->update_lock, NULL)) {
-    set_error(IL_SYS, errno, "event_queue_create: error creating update lock");
-    free(eq);
-    return(NULL);
-  }
-  if(pthread_mutex_init(&eq->cond_lock, NULL)) {
-    set_error(IL_SYS, errno, "event_queue_create: error creating cond mutex");
-    free(eq);
-    return(NULL);
-  }
-  if(pthread_cond_init(&eq->ready_cond, NULL)) {
-    set_error(IL_SYS, errno, "event_queue_create: error creating cond variable");
-    free(eq);
-    return(NULL);
-  }
-
-#if defined(INTERLOGD_HANDLE_CMD) && defined(INTERLOGD_FLUSH)
-  if(pthread_cond_init(&eq->flush_cond, NULL)) {
-    set_error(IL_SYS, errno, "event_queue_create: error creating cond variable");
-    free(eq);
-    return(NULL);
-  }
-#endif
-
-  return(eq);
-}
-
-
-int
-event_queue_free(struct event_queue *eq)
-{
-  assert(eq != NULL);
-
-  if(!event_queue_empty(eq))
-    return(-1);
-
-  if(eq->thread_id)
-    pthread_cancel(eq->thread_id);
-
-
-  pthread_rwlock_destroy(&eq->update_lock);
-  pthread_mutex_destroy(&eq->cond_lock);
-  pthread_cond_destroy(&eq->ready_cond);
-#if defined(INTERLOGD_HANDLE_CMD) && defined(INTERLOGD_FLUSH)
-  pthread_cond_destroy(&eq->flush_cond);
-#endif
-  free(eq);
-
-  return(0);
-}
-
-
-int
-event_queue_empty(struct event_queue *eq)
-{
-  int ret;
-
-  assert(eq != NULL);
-
-  event_queue_lock_ro(eq);
-  ret = eq->head == NULL;
-  event_queue_unlock(eq);
-
-  return(ret);
-}
-
-
-int
-event_queue_insert(struct event_queue *eq, struct server_msg *msg)
-{
-  struct event_queue_msg *el;
-#if defined(INTERLOGD_EMS)
-  struct event_queue_msg *tail;
-#endif
-  
-  assert(eq != NULL);
-
-  if((el = malloc(sizeof(*el))) == NULL) 
-    return(set_error(IL_NOMEM, ENOMEM, "event_queue_insert: not enough room for queue element"));
-
-  el->msg = server_msg_copy(msg);
-  if(el->msg == NULL) {
-    free(el);
-    return(-1);
-  };
-
-  /* this is critical section */
-  event_queue_lock(eq);
-#if defined(INTERLOGD_EMS)
-  if(server_msg_is_priority(msg)) {
-    /* priority messages go first */
-    tail = eq->tail_ems;
-    if(tail) {
-      el->prev = tail->prev;
-      tail->prev = el;
-      if (tail == eq->tail)
-       eq->tail = el;
-    } else {
-      el->prev = eq->head;
-      eq->head = el;
-      if(eq->tail == NULL)
-       eq->tail = el;
-    }
-    eq->tail_ems = el;
-  } else 
-#endif
-  { 
-    /* normal messages */
-    if(eq->tail)
-      eq->tail->prev = el;
-    else
-      eq->head = el;
-    eq->tail = el;
-    el->prev = NULL;
-  }
-#if defined(INTERLOGD_EMS)
-  /* if we are inserting message between mark_prev and mark_this,
-     we have to adjust mark_prev accordingly */
-  if(eq->mark_this && (el->prev == eq->mark_this)) 
-    eq->mark_prev = el;
-#endif
-  event_queue_unlock(eq);
-  /* end of critical section */
-
-  return(0);
-}
-
-
-int
-event_queue_get(struct event_queue *eq, struct server_msg **msg)
-{
-  struct event_queue_msg *el;
-
-  assert(eq != NULL);
-  assert(msg != NULL);
-  
-  event_queue_lock_ro(eq);
-  el = eq->head;
-#if defined(INTERLOGD_EMS)
-  /* this message is marked for removal, it is first on the queue */
-  eq->mark_this = el;
-  eq->mark_prev = NULL;
-#endif
-  event_queue_unlock(eq);
-
-  if(el == NULL)
-    return(-1);
-
-  *msg = el->msg;
-
-  return(0);
-}
-
-
-int 
-event_queue_remove(struct event_queue *eq)
-{
-  struct event_queue_msg *el;
-#if defined(INTERLOGD_EMS)
-  struct event_queue_msg *prev;
-#endif
-
-  assert(eq != NULL);
-
-  /* this is critical section */
-  event_queue_lock(eq);
-#if defined(INTERLOGD_EMS)
-  el = eq->mark_this;
-  prev = eq->mark_prev;
-
-  if(el == NULL) {
-    event_queue_unlock(eq);
-    return(-1);
-  }
-
-  if(prev == NULL) {
-    /* removing from head of the queue */
-    eq->head = el->prev;
-  } else {
-    /* removing from middle of the queue */
-    prev->prev = el->prev;
-  }
-  if(el == eq->tail) {
-    /* we are removing the last message */
-    eq->tail = NULL;
-  }
-  if(el == eq->tail_ems) {
-    /* we are removing last priority message */
-    eq->tail_ems = NULL;
-  }
-
-  eq->mark_this = NULL;
-  eq->mark_prev = NULL;
-#else
-  el = eq->head;
-  if(el == NULL) {
-         event_queue_unlock(eq);
-         return(-1);
-  }
-  eq->head = el->prev;
-  if(el == eq->tail) {
-         eq->tail = NULL;
-  }
-#endif
-  event_queue_unlock(eq);
-  /* end of critical section */
-    
-  server_msg_free(el->msg);
-  free(el);
-
-  return(0);
-}
-
-#if defined(IL_NOTIFICATIONS)
-
-int
-event_queue_move_events(struct event_queue *eq_s, struct event_queue *eq_d, char *notif_id)
-{
-       struct event_queue_msg *p, **source_prev, **dest_tail;
-
-       assert(eq_s != NULL);
-       assert(notif_id != NULL);
-
-       event_queue_lock(eq_s);
-       if(eq_d) {
-               event_queue_lock(eq_d);
-               /* dest tail is set to point to the last (NULL) pointer in the list */
-               dest_tail = (eq_d->head == NULL) ? &(eq_d->head) : &(eq_d->tail->prev);
-       }
-       source_prev = &(eq_s->head);
-       p = *source_prev;
-       eq_s->tail = NULL;
-       while(p) {
-               if(strcmp(p->msg->job_id_s, notif_id) == 0) {
-                       il_log(LOG_DEBUG, "  moving event with notif id %s from %s:%d to %s:%d\n",
-                              notif_id, eq_s->dest_name,eq_s->dest_port, eq_d ? eq_d->dest_name : "trash",eq_d ? eq_d->dest_port : -1);
-                       /* remove the message from the source list */
-                       *source_prev = p->prev;
-                       if(eq_d) {
-                               /* append the message at the end of destination list */
-                               p->prev = NULL;
-                               *dest_tail = p;
-                               dest_tail = &(p->prev);
-                               eq_d->tail = p;
-                       } else {
-                               /* free the message */
-                               server_msg_free(p->msg);
-                               free(p);
-                       }
-               } else {
-                       /* message stays */
-                       source_prev = &(p->prev);
-                       eq_s->tail = p;
-               }
-               p = *source_prev;
-       }
-       if(eq_d) event_queue_unlock(eq_d);
-       event_queue_unlock(eq_s);
-       return(0);
-}
-
-#endif
diff --git a/org.glite.lb.logger/src/event_store.c b/org.glite.lb.logger/src/event_store.c
deleted file mode 100644 (file)
index 295b2f0..0000000
+++ /dev/null
@@ -1,1025 +0,0 @@
-#ident "$Header$"
-
-#include <assert.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <dirent.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <fcntl.h>
-
-#include "glite/lb/consumer.h"
-#include "glite/lb/events_parse.h"
-
-#include "interlogd.h"
-
-#ifdef __GNUC__
-#define UNUSED_VAR __attribute__((unused))
-#else
-#define UNUSED_VAR
-#endif
-
-static char *file_prefix = NULL;
-
-
-struct event_store_list {
-       struct event_store *es;
-       struct event_store_list *next;
-};
-
-
-static struct event_store_list *store_list;
-static pthread_rwlock_t store_list_lock = PTHREAD_RWLOCK_INITIALIZER;
-
-
-/* ----------------
- * helper functions
- * ----------------
- */
-static
-char *
-jobid2eventfile(IL_EVENT_ID_T job_id)
-{
-  char *buffer;
-  char *hash;
-
-  if(job_id) {
-    hash = IL_EVENT_GET_UNIQUE(job_id);
-    asprintf(&buffer, "%s.%s", file_prefix, hash);
-    free(hash);
-  } else 
-    asprintf(&buffer, "%s.default", file_prefix);
-    
-  return(buffer);
-}
-
-
-static
-char *
-jobid2controlfile(IL_EVENT_ID_T job_id)
-{
-  char buffer[256];
-  char *hash;
-
-  if(job_id) {
-    hash = IL_EVENT_GET_UNIQUE(job_id);
-    snprintf(buffer, 256, "%s.%s.ctl", file_prefix, hash);
-    free(hash);
-  } else 
-    snprintf(buffer, 256, "%s.default.ctl", file_prefix);
-    
-  return(strdup(buffer));
-}
-
-
-static
-char *
-read_event_string(FILE *file)
-{
-  char *buffer, *p, *n;
-  int  len, c;
-
-  buffer=malloc(1024);
-  if(buffer == NULL) {
-    set_error(IL_NOMEM, ENOMEM, "read_event_string: no room for event");
-    return(NULL);
-  }
-  p = buffer;
-  len = 1024;
-
-  while((c=fgetc(file)) != EOF) {
-    
-    /* we have to have free room for one byte */
-    /* if(len - (p - buffer) < 1) */
-    if(p - buffer >= len) {
-      n = realloc(buffer, len + 8192);
-      if(n == NULL) {
-       free(buffer);
-       set_error(IL_NOMEM, ENOMEM, "read_event_string: no room for event");
-       return(NULL);
-      }
-      p = p - buffer + n;
-      buffer = n;
-      len += 8192;
-    }
-
-    if(c == EVENT_SEPARATOR) {
-      *p++ = 0;
-      break;
-    } else
-      *p++ = (char) c; 
-  }
-
-  if(c != EVENT_SEPARATOR) {
-    free(buffer);
-    return(NULL);
-  }
-
-  return(buffer);
-}
-
-
-
-/* ------------------------------
- * event_store 'member' functions
- * ------------------------------
- */
-static
-int
-event_store_free(struct event_store *es)
-{
-  assert(es != NULL);
-
-  if(es->job_id_s) free(es->job_id_s);
-  if(es->event_file_name) free(es->event_file_name);
-  if(es->control_file_name) free(es->control_file_name);
-  pthread_rwlock_destroy(&es->use_lock);
-  pthread_rwlock_destroy(&es->update_lock);
-  free(es);
-
-  return(0);
-}
-
-
-static
-struct event_store *
-event_store_create(char *job_id_s)
-{
-  struct event_store *es;
-  IL_EVENT_ID_T job_id;
-
-  es = malloc(sizeof(*es));
-  if(es == NULL) {
-    set_error(IL_NOMEM, ENOMEM, "event_store_create: error allocating room for structure");
-    return(NULL);
-  }
-
-  memset(es, 0, sizeof(*es));
-
-  il_log(LOG_DEBUG, "  creating event store for id %s\n", job_id_s);
-
-  job_id = NULL;
-  if(strcmp(job_id_s, "default") && IL_EVENT_ID_PARSE(job_id_s, &job_id)) {
-    set_error(IL_LBAPI, EDG_WLL_ERROR_PARSE_BROKEN_ULM, "event_store_create: error parsing id");
-    free(es);
-    return(NULL);
-  }
-
-  es->job_id_s = strdup(job_id_s);
-  es->event_file_name = jobid2eventfile(job_id);
-  es->control_file_name = jobid2controlfile(job_id);
-  IL_EVENT_ID_FREE(job_id);
-
-  if(pthread_rwlock_init(&es->update_lock, NULL)) 
-          abort();
-  if(pthread_rwlock_init(&es->use_lock, NULL)) 
-         abort();
-
-  return(es);
-}
-
-
-static
-int
-event_store_lock_ro(struct event_store *es)
-{
-  assert(es != NULL);
-
-  if(pthread_rwlock_rdlock(&es->update_lock)) 
-    abort();
-
-  return(0);
-}
-
-
-static
-int
-event_store_lock(struct event_store *es)
-{
-  assert(es != NULL);
-
-  if(pthread_rwlock_wrlock(&es->update_lock)) 
-    abort();
-
-  return(0);
-}
-
-
-static
-int
-event_store_unlock(struct event_store *es)
-{
-  assert(es != NULL);
-
-  if(pthread_rwlock_unlock(&es->update_lock)) 
-    abort();
-  return(0);
-}
-
-
-static
-int
-event_store_read_ctl(struct event_store *es)
-{
-  FILE *ctl_file;
-
-  assert(es != NULL);
-
-  event_store_lock(es);
-  if((ctl_file = fopen(es->control_file_name, "r")) == NULL) {
-    /* no control file, new event file */
-    es->last_committed_ls = 0;
-    es->last_committed_bs = 0;
-  } else {
-    /* read last seen and last committed counts */
-    fscanf(ctl_file, "%*s\n%ld\n%ld\n",
-          &es->last_committed_ls,
-          &es->last_committed_bs);
-    fclose(ctl_file);
-  }
-  event_store_unlock(es);
-
-  return(0);
-}
-
-
-static
-int
-event_store_write_ctl(struct event_store *es)
-{
-  FILE   *ctl;
-
-  assert(es != NULL);
-
-  ctl = fopen(es->control_file_name, "w");
-  if(ctl == NULL) {
-    set_error(IL_SYS, errno, "event_store_write_ctl: error opening control file");
-    return(-1);
-  }
-
-  if(fprintf(ctl, "%s\n%ld\n%ld\n", 
-            es->job_id_s, 
-            es->last_committed_ls,
-            es->last_committed_bs) < 0) {
-    set_error(IL_SYS, errno, "event_store_write_ctl: error writing control record");
-    return(-1);
-  }
-
-  if(fclose(ctl) < 0) {
-    set_error(IL_SYS, errno, "event_store_write_ctl: error closing control file");
-    return(-1);
-  }
-
-  return(0);
-}
-
-
-/*
- * event_store_recover()
- *   - recover after restart or catch up when events missing in IPC
- *   - if offset > 0, read everything behind it
- *   - if offset == 0, read everything behind min(last_committed_bs, last_committed_es)
- */
-int
-event_store_recover(struct event_store *es)
-{
-  struct event_queue *eq_l = NULL, *eq_b, *eq_b_new;
-  struct server_msg *msg;
-  char *event_s;
-  int fd, ret;
-  long last;
-  FILE *ef;
-  struct flock efl;
-  char err_msg[128];
-
-  assert(es != NULL);
-  
-#if defined(IL_NOTIFICATIONS)
-  eq_b = queue_list_get(es->dest);
-#else
-  /* find bookkepping server queue */
-  eq_b = queue_list_get(es->job_id_s);
-#endif
-  if(eq_b == NULL) 
-    return(-1);
-
-#if !defined(IL_NOTIFICATIONS)
-  /* get log server queue */
-  eq_l = queue_list_get(NULL);
-#endif
-
-  event_store_lock(es);
-
-  il_log(LOG_DEBUG, "  reading events from %s\n", es->event_file_name);
-
-  /* open event file */
-  ef = fopen(es->event_file_name, "r");
-  if(ef == NULL) {
-         snprintf(err_msg, sizeof(err_msg), 
-                  "event_store_recover: error opening event file %s",
-                  es->event_file_name);
-         set_error(IL_SYS, errno, err_msg);
-         event_store_unlock(es);
-         return(-1);
-  }
-
-  /* lock the file for reading (we should not read while dglogd is writing) */
-  fd = fileno(ef);
-  efl.l_type = F_RDLCK;
-  efl.l_whence = SEEK_SET;
-  efl.l_start = 0;
-  efl.l_len = 0;
-  if(fcntl(fd, F_SETLKW, &efl) < 0) {
-         snprintf(err_msg, sizeof(err_msg), 
-                  "event_store_recover: error locking event file %s",
-                  es->event_file_name);
-         set_error(IL_SYS, errno, err_msg);
-         event_store_unlock(es);
-         fclose(ef);
-         return(-1);
-  }
-
-  /* get the position in file to be sought */
-  if(es->offset)
-    last = es->offset;
-  else {
-#if !defined(IL_NOTIFICATIONS)
-    if(eq_b == eq_l) 
-      last = es->last_committed_ls;
-    else
-#endif
-      /* last = min(ls, bs) */
-      last = (es->last_committed_bs < es->last_committed_ls) ? es->last_committed_bs : es->last_committed_ls;
-  }
-
-  il_log(LOG_DEBUG, "    setting starting file position to  %ld\n", last);
-  il_log(LOG_DEBUG, "    bytes sent to logging server: %d\n", es->last_committed_ls);
-  il_log(LOG_DEBUG, "    bytes sent to bookkeeping server: %d\n", es->last_committed_bs);
-
-  /* skip all committed or already enqueued events */
-  if(fseek(ef, last, SEEK_SET) < 0) {
-    set_error(IL_SYS, errno, "event_store_recover: error setting position for read");
-    event_store_unlock(es);
-    fclose(ef);
-    return(-1);
-  }
-
-  /* enqueue all remaining events */
-  ret = 1;
-  msg = NULL;
-  while((event_s=read_event_string(ef)) != NULL) {
-       
-    /* last holds the starting position of event_s in file */
-    il_log(LOG_DEBUG, "    reading event at %ld\n", last);
-
-    /* break from now on means there was some error */
-    ret = -1;
-
-    /* create message for server */
-    msg = server_msg_create(event_s, last);
-    free(event_s);
-    if(msg == NULL) {
-      break;
-    }
-    msg->es = es;
-
-    /* first enqueue to the LS */
-    if(!bs_only && (last >= es->last_committed_ls)) {
-      
-      il_log(LOG_DEBUG, "      queueing event at %ld to logging server\n", last);
-
-#if !defined(IL_NOTIFICATIONS)
-      if(enqueue_msg(eq_l, msg) < 0)
-       break;
-#endif
-      }
-
-#ifdef IL_NOTIFICATIONS
-    eq_b_new = queue_list_get(msg->dest);
-    if (eq_b_new != eq_b) {
-           free(es->dest);
-           es->dest = strdup(msg->dest);
-           eq_b = eq_b_new;
-    }
-#endif
-
-    /* now enqueue to the BS, if neccessary */
-    if((eq_b != eq_l) && 
-       (last >= es->last_committed_bs)) {
-      
-      il_log(LOG_DEBUG, "      queueing event at %ld to bookkeeping server\n", last);
-      
-      if(enqueue_msg(eq_b, msg) < 0)
-       break;
-    }
-    server_msg_free(msg);
-    msg = NULL;
-
-    /* now last is also the offset behind the last successfully queued event */
-    last = ftell(ef);
-
-    /* ret == 0 means EOF or incomplete event found */
-    ret = 0;
-
-  } /* while */
-
-  /* due to this little assignment we had to lock the event_store for writing */
-  es->offset = last;
-  il_log(LOG_DEBUG, "  event store offset set to %ld\n", last);
-
-  if(msg) 
-    server_msg_free(msg);
-
-  fclose(ef);
-  il_log(LOG_DEBUG, "  finished reading events with %d\n", ret);
-
-  event_store_unlock(es);
-  return(ret);
-}
-
-
-/*
- * event_store_sync()
- *   - check the position of event and fill holes from file
- *   - return 1 if the event is new,
- *            0 if it was seen before,
- *           -1 if there was an error
- */
-int
-event_store_sync(struct event_store *es, long offset)
-{
-  int ret;
-
-  assert(es != NULL);
-
-  event_store_lock_ro(es);
-  if(es->offset == offset) 
-    /* we are up to date */
-    ret = 1;
-  else if(es->offset > offset)
-    /* we have already seen this event */
-    ret = 0;
-  else {
-    /* es->offset < offset, i.e. we have missed some events */
-    event_store_unlock(es);
-    ret = event_store_recover(es);
-    /* XXX possible room for intervention by another thread - is there 
-     * any other thread messing with us? 
-     * 1) After recover() es->offset is set at the end of file. 
-     * 2) es->offset is set only by recover() and next().
-     * 3) Additional recover can not do much harm.
-     * 4) And next() is only called by the same thread as sync().
-     * => no one is messing with us right now */
-    event_store_lock_ro(es);
-    if(ret < 0)
-      ret = -1;
-    else 
-      /* somehow we suppose that now es->offset >= offset */
-      /* in fact it must be es->offset > offset, anything else would be weird */
-      ret = (es->offset > offset) ? 0 : 1;
-  }
-  event_store_unlock(es);
-  return(ret);
-}
-
-
-int
-event_store_next(struct event_store *es, int len)
-{
-  assert(es != NULL);
-  
-  event_store_lock(es);
-  es->offset += len;
-  event_store_unlock(es);
-
-  return(0);
-}
-
-
-/* 
- * event_store_commit()
- *
- */
-int
-event_store_commit(struct event_store *es, int len, int ls)
-{
-  assert(es != NULL);
-
-  event_store_lock(es);
-
-  if(ls)
-    es->last_committed_ls += len;
-  else {
-    es->last_committed_bs += len;
-    if (bs_only) es->last_committed_ls += len;
-  }
-
-  if(event_store_write_ctl(es) < 0) {
-    event_store_unlock(es);
-    return(-1);
-  }
-
-  event_store_unlock(es);
-
-
-  return(0);
-}
-
-
-/*
- * event_store_clean()
- *  - remove the event files (event and ctl), if they are not needed anymore
- *  - returns 0 if event_store is in use, 1 if it was removed and -1 on error
- *
- * Q: How do we know that we can safely remove the files?
- * A: When all events from file have been committed both by LS and BS.
- */
-static 
-int
-event_store_clean(struct event_store *es)
-{
-  long last;
-  int fd;
-  FILE *ef;
-  struct flock efl;
-
-  assert(es != NULL);
-
-  /* prevent sender threads from updating */
-  event_store_lock(es);
-  
-  il_log(LOG_DEBUG, "  trying to cleanup event store %s\n", es->job_id_s);
-  il_log(LOG_DEBUG, "    bytes sent to logging server: %d\n", es->last_committed_ls);
-  il_log(LOG_DEBUG, "    bytes sent to bookkeeping server: %d\n", es->last_committed_bs);
-
-  /* preliminary check to avoid opening event file */
-  /* if the positions differ, some events still have to be sent */
-  if(es->last_committed_ls != es->last_committed_bs) {
-    event_store_unlock(es);
-    il_log(LOG_DEBUG, "  not all events sent, cleanup aborted\n");
-    return(0);
-  }
-
-  /* the file can only be removed when all the events were succesfully sent 
-     (ie. committed both by LS and BS */
-  /* That also implies that the event queues are 'empty' at the moment. */
-  ef = fopen(es->event_file_name, "r+");
-  if(ef == NULL) {
-    /* if we can not open the event store, it is an error and the struct should be removed */
-    /* XXX - is it true? */
-    event_store_unlock(es);
-    il_log(LOG_ERR,  "  event_store_clean: error opening event file: %s\n", strerror(errno));
-    return(1);
-  }
-  
-  fd = fileno(ef);
-  
-  /* prevent local-logger from writing into event file */
-  efl.l_type = F_WRLCK;
-  efl.l_whence = SEEK_SET;
-  efl.l_start = 0;
-  efl.l_len = 0;
-  if(fcntl(fd, F_SETLK, &efl) < 0) {
-    il_log(LOG_DEBUG, "    could not lock event file, cleanup aborted\n");
-    fclose(ef);
-    event_store_unlock(es);
-    if(errno != EACCES &&
-       errno != EAGAIN) {
-      set_error(IL_SYS, errno, "event_store_clean: error locking event file");
-      return(-1);
-    }
-    return(0);
-  }
-  
-  /* now the file should not contain partially written event, so it is safe
-     to get offset behind last event by seeking the end of file */
-  if(fseek(ef, 0, SEEK_END) < 0) {
-    set_error(IL_SYS, errno, "event_store_clean: error seeking the end of file");
-    event_store_unlock(es);
-    fclose(ef);
-    return(-1);
-  }
-  
-  last = ftell(ef);
-  il_log(LOG_DEBUG, "    total bytes in file: %d\n", last);
-
-  if(es->last_committed_ls < last) {
-    fclose(ef);
-    event_store_unlock(es);
-    il_log(LOG_DEBUG, "    events still waiting in queue, cleanup aborted\n");
-    return(0);
-  } else if( es->last_committed_ls > last) {
-         il_log(LOG_WARNING, "  warning: event file seems to shrink!\n");
-  }
-  
-  /* now we are sure that all events were sent and the event queues are empty */
-  il_log(LOG_INFO, "    removing event file %s\n", es->event_file_name);
-  
-  /* remove the event file */
-  unlink(es->event_file_name);
-  unlink(es->control_file_name);
-  
-  /* clear the counters */
-  es->last_committed_ls = 0;
-  es->last_committed_bs = 0;
-  es->offset = 0;
-
-  /* unlock the event_store even if it is going to be removed */
-  event_store_unlock(es);
-
-  /* close the event file (that unlocks it as well) */
-  fclose(ef);
-
-  /* indicate that it is safe to remove this event_store */
-  return(1);
-}
-
-
-
-/* --------------------------------
- * event store management functions
- * --------------------------------
- */
-struct event_store *
-event_store_find(char *job_id_s)
-{
-  struct event_store_list *q, *p;
-  struct event_store *es;
-
-  if(pthread_rwlock_wrlock(&store_list_lock)) {
-         abort();
-  }
-
-  es = NULL;
-  
-  q = NULL;
-  p = store_list;
-  
-  while(p) {
-    if(strcmp(p->es->job_id_s, job_id_s) == 0) {
-      es = p->es;
-      if(pthread_rwlock_rdlock(&es->use_lock))
-             abort();
-      if(pthread_rwlock_unlock(&store_list_lock)) 
-             abort();
-      return(es);
-    }
-
-    q = p;
-    p = p->next;
-  }
-
-  es = event_store_create(job_id_s);
-  if(es == NULL) {
-         if(pthread_rwlock_unlock(&store_list_lock)) 
-                 abort();
-         return(NULL);
-  }
-
-  p = malloc(sizeof(*p));
-  if(p == NULL) {
-    set_error(IL_NOMEM, ENOMEM, "event_store_find: no room for new event store");
-      if(pthread_rwlock_unlock(&store_list_lock)) 
-             abort();
-    return(NULL);
-  }
-  
-  p->next = store_list;
-  store_list = p;
-    
-  p->es = es;
-
-  if(pthread_rwlock_rdlock(&es->use_lock))
-         abort();
-
-  if(pthread_rwlock_unlock(&store_list_lock)) 
-         abort();
-
-  return(es);
-}
-
-
-int
-event_store_release(struct event_store *es)
-{
-       assert(es != NULL);
-
-       if(pthread_rwlock_unlock(&es->use_lock))
-               abort();
-       il_log(LOG_DEBUG, "  released lock on %s\n", es->job_id_s);
-       return(0);
-}
-
-
-static
-int
-event_store_from_file(char *filename)
-{
-       struct event_store *es;
-       FILE *event_file;
-       char *event_s, *job_id_s = NULL;
-       int ret;
-#if defined(IL_NOTIFICATIONS)
-       edg_wll_Event *notif_event;
-       edg_wll_Context context;
-       char *dest_name = NULL;
-
-       edg_wll_InitContext(&context);
-#endif
-       
-       il_log(LOG_INFO, "  attaching to event file: %s\n", filename);
-       
-       event_file = fopen(filename, "r");
-       if(event_file == NULL) {
-               set_error(IL_SYS, errno, "event_store_from_file: error opening event file");
-               return(-1);
-       }
-       event_s = read_event_string(event_file);
-       fclose(event_file);
-       if(event_s == NULL) 
-               return(0);
-       
-#if defined(IL_NOTIFICATIONS)
-       if((ret=edg_wll_ParseNotifEvent(context, event_s, &notif_event))) {
-               set_error(IL_LBAPI, ret, "event_store_from_file: could not parse event");
-               ret = -1;
-               goto out;
-       }
-       if(notif_event->notification.notifId == NULL) {
-               set_error(IL_LBAPI, EDG_WLL_ERROR_PARSE_BROKEN_ULM, 
-                         "event_store_from_file: parse error - no notif id");
-               ret = -1;
-               goto out;
-       }
-       if((job_id_s = edg_wll_NotifIdUnparse(notif_event->notification.notifId)) == NULL) {
-               set_error(IL_SYS, ENOMEM, "event_store_from_file: could not copy id");
-               ret = -1;
-               goto out;
-       }
-       if(notif_event->notification.dest_host && 
-          (strlen(notif_event->notification.dest_host) > 0)) {
-               asprintf(&dest_name, "%s:%d", notif_event->notification.dest_host, notif_event->notification.dest_port);
-       }
-       
-#else
-       job_id_s = edg_wll_GetJobId(event_s);
-#endif
-       il_log(LOG_DEBUG, "  event id: '%s'\n", job_id_s);
-       if(job_id_s == NULL) {
-               il_log(LOG_NOTICE, "  skipping file, could not parse event\n");
-               ret = 0;
-               goto out;
-       }
-       
-       es=event_store_find(job_id_s);
-       
-       if(es == NULL) {
-               ret = -1;
-               goto out;
-       }
-
-#if defined(IL_NOTIFICATIONS)
-       es->dest = dest_name;
-#endif
-
-       if((es->last_committed_ls == 0) &&
-          (es->last_committed_bs == 0) &&
-          (es->offset == 0)) {
-               ret = event_store_read_ctl(es);
-       } else 
-               ret = 0;
-       
-       event_store_release(es);
-
-out:
-#if defined(IL_NOTIFICATIONS)
-       if(notif_event) {
-               edg_wll_FreeEvent(notif_event);
-               free(notif_event);
-       }
-#endif
-       if(event_s) free(event_s); 
-       if(job_id_s) free(job_id_s);
-       return(ret);
-}
-
-
-int
-event_store_init(char *prefix)
-{
-  if(file_prefix == NULL) {
-    file_prefix = strdup(prefix);
-    store_list = NULL;
-  }
-
-  /* read directory and get a list of event files */
-  {
-    int len;
-
-    char *p, *dir;
-    DIR *event_dir;
-    struct dirent *entry;
-
-
-    /* get directory name */
-    p = strrchr(file_prefix, '/');
-    if(p == NULL) {
-      dir = strdup(".");
-      p = "";
-      len = 0;
-    } else {
-      *p = '\0';
-      dir = strdup(file_prefix);
-      *p++ = '/';
-      len = strlen(p);
-    }
-
-    event_dir = opendir(dir);
-    if(event_dir == NULL) {
-      free(dir);
-      set_error(IL_SYS, errno, "event_store_init: error opening event directory");
-      return(-1);
-    }
-    
-    while((entry=readdir(event_dir))) {
-      char *s;
-
-      /* skip all files that do not match prefix */
-      if(strncmp(entry->d_name, p, len) != 0) 
-       continue;
-
-      /* skip all control files */
-      if((s=strstr(entry->d_name, ".ctl")) != NULL &&
-        s[4] == '\0')
-       continue;
-
-      s = malloc(strlen(dir) + strlen(entry->d_name) + 2);
-      if(s == NULL) {
-       free(dir);
-       set_error(IL_NOMEM, ENOMEM, "event_store_init: no room for file name");
-       return(-1);
-      }
-
-      *s = '\0';
-      strcat(s, dir);
-      strcat(s, "/");
-      strcat(s, entry->d_name);
-
-      if(event_store_from_file(s) < 0) {
-       free(dir);
-       free(s);
-       closedir(event_dir);
-       return(-1);
-      }
-
-      free(s);
-    }
-    closedir(event_dir);
-    free(dir);
-  }
-
-  return(0);
-}
-
-
-int
-event_store_recover_all()
-{
-  struct event_store_list *sl;
-
-
-  if(pthread_rwlock_rdlock(&store_list_lock)) 
-         abort();
-
-  /* recover all event stores */
-  sl = store_list;
-  while(sl != NULL) {
-
-         /* recover this event store */
-         /* no need to lock use_lock in event_store, the store_list_lock is in place */
-         if(event_store_recover(sl->es) < 0) {
-                 il_log(LOG_ERR, "  error recovering event store %s:\n    %s\n", sl->es->event_file_name, error_get_msg());
-                 clear_error();
-         }
-         sl = sl->next;
-  }
-  
-  if(pthread_rwlock_unlock(&store_list_lock)) 
-         abort();
-
-  return(0);
-}
-
-
-#if 0 
-int
-event_store_remove(struct event_store *es)
-{
-  struct event_store_list *p, **q;
-
-  assert(es != NULL);
-
-  switch(event_store_clean(es)) {
-  case 0:
-    il_log(LOG_DEBUG, "  event store not removed, still used\n");
-    return(0);
-    
-  case 1:
-    if(pthread_rwlock_wrlock(&store_list_lock) < 0) {
-      set_error(IL_SYS, errno, "  event_store_remove: error locking event store list");
-      return(-1);
-    }
-
-    p = store_list;
-    q = &store_list;
-
-    while(p) {
-      if(p->es == es) {
-       (*q) = p->next;
-       event_store_free(es);
-       free(p);
-       break;
-      }
-      q = &(p->next);
-      p = p->next;
-    }
-
-    if(pthread_rwlock_unlock(&store_list_lock) < 0) {
-      set_error(IL_SYS, errno, "  event_store_remove: error unlocking event store list");
-      return(-1);
-    }
-    return(1);
-
-  default:
-    return(-1);
-  }
-  /* not reached */
-  return(0);
-}
-#endif
-
-int
-event_store_cleanup()
-{
-  struct event_store_list *sl;
-  struct event_store_list *slnext;
-  struct event_store_list **prev;
-
-  /* try to remove event files */
-
-  if(pthread_rwlock_wrlock(&store_list_lock)) 
-         abort();
-
-  sl = store_list;
-  prev = &store_list;
-
-  while(sl != NULL) {
-         int ret;
-
-         slnext = sl->next;
-         
-         /* one event store at time */
-         ret = pthread_rwlock_trywrlock(&sl->es->use_lock);
-         if(ret == EBUSY) {
-                 il_log(LOG_DEBUG, "  event_store %s is in use by another thread\n", 
-                        sl->es->job_id_s);
-                 sl = slnext;
-                 continue;
-         } else if (ret < 0)
-           abort();
-
-         switch(event_store_clean(sl->es)) {
-                 
-         case 1:
-                 /* remove this event store */
-                 (*prev) = slnext;
-                 event_store_free(sl->es);
-                 free(sl);
-                 break;
-                 
-         case -1:
-                 il_log(LOG_ERR, "  error removing event store %s (file %s):\n    %s\n", 
-                        sl->es->job_id_s, sl->es->event_file_name, error_get_msg());
-                 event_store_release(sl->es);
-                 clear_error();
-                 /* go on to the next */
-                 
-         default:
-                 event_store_release(sl->es);
-                 prev = &(sl->next);
-                 break;
-         }
-         
-         sl = slnext;
-  }
-  
-  if(pthread_rwlock_unlock(&store_list_lock)) 
-         abort();
-  
-  return(0);
-}
-
diff --git a/org.glite.lb.logger/src/il_error.c b/org.glite.lb.logger/src/il_error.c
deleted file mode 100644 (file)
index 6a9083a..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-#ident "$Header$"
-
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <netdb.h>
-#include <assert.h>
-#include <pthread.h>
-#include <stdlib.h>
-
-/* XXX DK: */
-#include <err.h> // SSL header file 
-
-#include "glite/lb/lb_gss.h"
-
-#include "il_error.h"
-
-
-extern int log_level;
-
-static pthread_key_t err_key;
-
-static int IL_ERR_MSG_LEN = 128;
-
-static
-void
-error_key_delete(void *err)
-{
-  free(err);
-}
-
-static 
-void
-error_key_create()
-{
-  pthread_key_create(&err_key, error_key_delete);
-}
-
-static 
-struct error_inf *
-error_get_err ()
-{
-  struct error_inf *err;
-
-  /* get thread specific error structure */
-  err = (struct error_inf *)pthread_getspecific(err_key);
-  assert(err != NULL);
-
-  return(err);
-}
-
-int
-init_errors(int level)
-{
-  static pthread_once_t error_once = PTHREAD_ONCE_INIT;
-  struct error_inf *err;
-
-  /* create the key for thread specific error only once */
-  pthread_once(&error_once, error_key_create);
-  
-  /* there is no thread error yet, try to create one */
-  if((err = (struct error_inf *)malloc(sizeof(*err)))) {
-    /* allocation successfull, make it thread specific data */
-    if(pthread_setspecific(err_key, err)) {
-       free(err);
-       return(-1);
-    }
-  } else 
-    return(-1);
-
-  err->code_maj = 0;
-  err->code_min = 0;
-  err->msg = malloc(IL_ERR_MSG_LEN + 1);
-  if(err->msg == NULL) 
-         return(-1);
-
-  if(level)
-    log_level = level;
-
-  return(0);
-}
-
-int 
-set_error(int code, long minor, char *msg)
-{
-  struct error_inf *err;
-
-  err = error_get_err();
-
-  err->code_maj = code;
-  err->code_min = minor;
-
-  switch(code) {
-
-  case IL_SYS:
-    snprintf(err->msg, IL_ERR_MSG_LEN, "%s: %s", msg, strerror(err->code_min));
-    break;
-
-  case IL_HOST:
-    snprintf(err->msg, IL_ERR_MSG_LEN, "%s: %s", msg, hstrerror(err->code_min));
-    break;
-
-  /* XXX DK: je tahle hodnota k necemu potreba? */
-  case IL_AUTH:
-    snprintf(err->msg, IL_ERR_MSG_LEN, "%s: %s", msg, ERR_error_string(err->code_min, NULL));
-    break;
-
-  case IL_DGGSS:
-    switch(err->code_min) {
-
-    case EDG_WLL_GSS_ERROR_GSS:
-      snprintf(err->msg, IL_ERR_MSG_LEN, "%s", msg);
-      break;
-
-    case EDG_WLL_GSS_ERROR_TIMEOUT:
-      snprintf(err->msg, IL_ERR_MSG_LEN, "%s: Timeout in GSS connection.", msg);
-      break;
-
-    case EDG_WLL_GSS_ERROR_EOF:
-      snprintf(err->msg, IL_ERR_MSG_LEN, "%s: Connection lost.", msg);
-      break;
-
-    case EDG_WLL_GSS_ERROR_ERRNO:
-      snprintf(err->msg, IL_ERR_MSG_LEN, "%s: %s", msg, strerror(errno));
-      break;
-      
-    case EDG_WLL_GSS_ERROR_HERRNO:
-      snprintf(err->msg, IL_ERR_MSG_LEN, "%s: %s", msg, hstrerror(errno));
-      break;
-    }
-
-  default:
-         strncpy(err->msg, msg, IL_ERR_MSG_LEN);
-  }
-
-  return(code);
-}
-
-
-int 
-clear_error() {
-  struct error_inf *err;
-
-  err = error_get_err();
-
-  err->code_maj = IL_OK;
-  err->code_min = 0;
-  *(err->msg) = 0;
-
-  return(0);
-} 
-
-
-int
-error_get_maj()
-{
-  struct error_inf *err;
-
-  err = error_get_err();
-
-  return(err->code_maj);
-}
-
-
-long
-error_get_min()
-{
-  struct error_inf *err;
-
-  err = error_get_err();
-
-  return(err->code_min);
-}
-
-
-char * 
-error_get_msg()
-{
-  struct error_inf *err;
-
-  err = error_get_err();
-
-  return(err->msg);
-}
diff --git a/org.glite.lb.logger/src/il_error.h b/org.glite.lb.logger/src/il_error.h
deleted file mode 100644 (file)
index 120e7ed..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef IL_ERROR_H
-#define IL_ERROR_H
-
-#ident "$Header$"
-
-#include <syslog.h>
-
-enum err_code_maj { /* minor =                   */
-  IL_OK,            /*     0                     */
-  IL_SYS,           /*     errno                 */
-  IL_NOMEM,         /*     ENOMEM                */
-  IL_AUTH,          /*     0 (SSL error)         */
-  IL_PROTO,         /*     LB_*                  */
-  IL_LBAPI,         /*     dgLBErrCode           */
-  IL_DGGSS,         /*     EDG_WLL_GSS_*         */
-  IL_HOST           /*     h_errno               */
-};
-
-struct error_inf {
-  int  code_maj;
-  long code_min;
-  char *msg;
-};
-
-int init_errors(int);
-int set_error(int, long, char *);
-int clear_error();
-int error_get_maj();
-long error_get_min();
-char *error_get_msg();
-
-int il_log(int, char *, ...);
-
-#endif
diff --git a/org.glite.lb.logger/src/il_master.c b/org.glite.lb.logger/src/il_master.c
deleted file mode 100644 (file)
index f6414c9..0000000
+++ /dev/null
@@ -1,419 +0,0 @@
-#ident "$Header$"
-
-#include <errno.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "glite/wmsutils/jobid/cjobid.h"
-#include "glite/lb/context.h"
-#include "glite/lb/events_parse.h"
-#include "glite/lb/il_string.h"
-
-#include "interlogd.h"
-
-int 
-enqueue_msg(struct event_queue *eq, struct server_msg *msg)
-{
-#if defined(IL_NOTIFICATIONS)
-       struct event_queue *eq_known;
-
-       /* now we have a new event with possibly changed destination,
-          so check for the already known destination and possibly move 
-          events from the original output queue to a new one */
-       eq_known = notifid_map_get_dest(msg->job_id_s);
-       if(eq != eq_known) {
-               /* client has changed delivery address for this notification */
-               if(notifid_map_set_dest(msg->job_id_s, eq) < 0) 
-                       return(-1);
-               /* move all events with this notif_id from eq_known to eq */
-               if(eq_known != NULL) 
-                       event_queue_move_events(eq_known, eq, msg->job_id_s);
-       }
-#endif
-
-       /* fire thread to take care of this queue */
-       if(event_queue_create_thread(eq) < 0) 
-               return(-1);
-       
-#if defined(IL_NOTIFICATIONS)
-       /* if there are no data to send, do not send anything 
-          (messsage was just to change the delivery address) */
-       if(msg->len == 0) 
-               return(0);
-
-#endif
-       /* avoid losing signal to thread */
-       event_queue_cond_lock(eq);
-
-       /* insert new event */
-       if(event_queue_insert(eq, msg) < 0)
-               return(-1);
-      
-       /* signal thread that we have a new message */
-       event_queue_signal(eq);
-
-       /* allow thread to continue */
-       event_queue_cond_unlock(eq);
-
-       return(0);
-}
-
-
-#if defined(INTERLOGD_HANDLE_CMD) && defined(INTERLOGD_FLUSH)
-pthread_mutex_t flush_lock = PTHREAD_MUTEX_INITIALIZER;
-pthread_cond_t flush_cond = PTHREAD_COND_INITIALIZER;
-#endif /* INTERLOGD_FLUSH */
-
-#ifdef INTERLOGD_HANDLE_CMD
-static 
-int
-parse_cmd(char *event, char **job_id_s, long *receipt, int *timeout)
-{
-       char *token, *r;
-       int ret;
-
-       if(strstr(event, "DG.TYPE=\"command\"") == NULL)
-               return(-1);
-
-       *job_id_s = NULL;
-       *timeout = 0;
-       *receipt = 0;
-       ret = 0;
-
-       for(token = strtok(event, " "); token != NULL; token = strtok(NULL, " ")) {
-               r = index(token, '=');
-               if(r == NULL) {
-                       ret = -1;
-                       continue;
-               }
-               if(strncmp(token, "DG.COMMAND", r - token) == 0) {
-#if defined(INTERLOGD_FLUSH)                   
-                       if(strcmp(++r, "\"flush\"")) {
-#endif
-                               il_log(LOG_WARNING, "  command %s not implemented\n", r);
-                               ret = -1;
-                               continue;
-#if defined(INTERLOGD_FLUSH)
-                       }
-#endif
-               } else if(strncmp(token, "DG.JOBID", r - token) == 0) {
-                       char  *p;
-      
-                       r += 2; /* skip =" */
-                       p = index(r, '"');
-                       if(p == NULL) { ret = -1; continue; }
-                       *job_id_s = strndup(r, p-r);
-
-               } else if(strncmp(token, "DG.TIMEOUT", r - token) == 0) {
-                       sscanf(++r, "\"%d\"", timeout);
-               } else if(strncmp(token, "DG.LLLID", r - token) == 0) {
-                       sscanf(++r, "%ld", receipt);
-               }
-    
-       }
-       return(0);
-}
-
-
-/* return value:
- *   0 - not command
- *   1 - success
- *  -1 - failure
- */
-
-static 
-int 
-handle_cmd(char *event, long offset)
-{
-       char *job_id_s;
-       struct event_queue *eq;
-       int  num_replies, num_threads = 0;
-       int  timeout, result;
-       long receipt;
-       struct timespec endtime;
-       struct timeval  tv;
-
-       /* parse command */
-       if(parse_cmd(event, &job_id_s, &receipt, &timeout) < 0) 
-               return(0);
-
-#if defined(INTERLOGD_FLUSH)
-       il_log(LOG_DEBUG, "  received FLUSH command\n");
-
-       /* catchup with all neccessary event files */
-       if(job_id_s) {
-               struct event_store *es = event_store_find(job_id_s);
-
-               if(es == NULL) {
-                       goto cmd_error;
-               }
-               result = event_store_recover(es);
-               /* NOTE: if flush had been stored in file, there would have been
-                  no need to lock the event_store at all */
-               event_store_release(es);
-               if(result < 0) {
-                       il_log(LOG_ERR, "  error trying to catch up with event file: %s\n",
-                              error_get_msg());
-                       clear_error();
-               }
-       } else 
-         /* this call does not fail :-) */
-         event_store_recover_all();
-
-       il_log(LOG_DEBUG, "  alerting threads to report status\n");
-
-       /* prevent threads from reporting too early */
-       if(pthread_mutex_lock(&flush_lock) < 0) {
-               /*** this error is considered too serious to allow the program run anymore!
-                    set_error(IL_SYS, errno, "pthread_mutex_lock: error locking flush lock");
-                    goto cmd_error;
-               */
-               abort();
-       }
-
-       /* wake up all threads */
-       if(job_id_s) {
-               /* find appropriate queue */
-               eq = queue_list_get(job_id_s);
-               if(eq == NULL) goto cmd_error;
-               if(!event_queue_empty(eq) && !queue_list_is_log(eq)) {
-                       num_threads++;
-                       event_queue_cond_lock(eq);
-                       eq->flushing = 1;
-                       event_queue_wakeup(eq);
-                       event_queue_cond_unlock(eq);
-               }
-       } else {
-               /* iterate over event queues */
-               for(eq=queue_list_first(); eq != NULL; eq=queue_list_next()) {
-                       if(!event_queue_empty(eq) && !queue_list_is_log(eq)) {
-                               num_threads++;
-                               event_queue_cond_lock(eq);
-                               eq->flushing = 1;
-                               event_queue_wakeup(eq);
-                               event_queue_cond_unlock(eq);
-                       }
-               }
-       }
-       if(!bs_only) {
-               eq = queue_list_get(NULL);
-               if(eq == NULL) goto cmd_error;
-               if(!event_queue_empty(eq)) {
-                       num_threads++;
-                       event_queue_cond_lock(eq);
-                       eq->flushing = 1;
-                       event_queue_wakeup(eq);
-                       event_queue_cond_unlock(eq);
-               }
-       }
-
-       /* wait for thread replies */
-       num_replies = 0;
-       result = 1;
-       gettimeofday(&tv, NULL);
-       endtime.tv_sec = tv.tv_sec + timeout;
-       endtime.tv_nsec = 1000 * tv.tv_usec;
-       while(num_replies < num_threads) {
-               int ret;
-               if((ret=pthread_cond_timedwait(&flush_cond, &flush_lock, &endtime)) < 0) {
-                       il_log(LOG_ERR, "    error waiting for thread reply: %s\n", strerror(errno));
-                       result = (ret == ETIMEDOUT) ? 0 : -1;
-                       break;
-               }
-               
-               /* collect results from reporting threads */
-               if(job_id_s) {
-                       /* find appropriate queue */
-                       eq = queue_list_get(job_id_s);
-                       if(eq == NULL) goto cmd_error;
-                       if(!queue_list_is_log(eq)) {
-                               event_queue_cond_lock(eq);
-                               if(eq->flushing == 2) {
-                                       eq->flushing = 0;
-                                       num_replies++;
-                                       result = ((result == 1) || (eq->flush_result < 0))  ? 
-                                               eq->flush_result : result;
-                               }
-                               event_queue_cond_unlock(eq);
-                       }
-               } else {
-                       /* iterate over event queues */
-                       for(eq=queue_list_first(); eq != NULL; eq=queue_list_next()) {
-                               if(!queue_list_is_log(eq)) {
-                                       event_queue_cond_lock(eq);
-                                       if(eq->flushing == 2) {
-                                               eq->flushing = 0;
-                                               num_replies++;
-                                               il_log(LOG_DEBUG, "    thread reply: %d\n", eq->flush_result);
-                                               result = ((result == 1) || (eq->flush_result < 0))  ? 
-                                                       eq->flush_result : result;
-                                       }
-                                       event_queue_cond_unlock(eq);
-                               }
-                       }
-               }
-               if(!bs_only) {
-                       eq = queue_list_get(NULL);
-                       if(eq == NULL) goto cmd_error;
-                       event_queue_cond_lock(eq);
-                       if(eq->flushing == 2) {
-                               eq->flushing = 0;
-                               num_replies++;
-                               result = ((result == 1) || (eq->flush_result < 0))  ? 
-                                       eq->flush_result : result;
-                       }
-                       event_queue_cond_unlock(eq);
-               }
-       }
-
-       /* prevent deadlock in next flush */
-       if(pthread_mutex_unlock(&flush_lock) < 0) 
-               abort();
-
-
-       /* report back to local logger */
-       switch(result) {
-       case 1:
-               result = 0; break;
-       case 0:
-               result = EDG_WLL_IL_EVENTS_WAITING; break;
-       default:
-               result = EDG_WLL_IL_SYS; break;
-       }
-       if(job_id_s) free(job_id_s);
-       result = send_confirmation(receipt, result);
-       if(result <= 0) 
-               il_log(LOG_ERR, "handle_cmd: error sending status: %s\n", error_get_msg());
-       return(1);
-
-
-cmd_error:
-       if(job_id_s) free(job_id_s);
-       return(-1);
-#else
-       return(0);
-#endif /* INTERLOGD_FLUSH */
-}
-#endif /* INTERLOGD_HANDLE_CMD */
-
-
-static 
-int
-handle_msg(char *event, long offset)
-{ 
-       struct server_msg *msg = NULL;
-#if !defined(IL_NOTIFICATIONS)
-       struct event_queue *eq_l;
-#endif
-       struct event_queue *eq_s;
-       struct event_store *es;
-
-       int ret;
-
-       /* convert event to message for server */
-       if((msg = server_msg_create(event, offset)) == NULL) {
-               il_log(LOG_ERR, "    handle_msg: error parsing event '%s':\n      %s\n", event, error_get_msg());
-               return(0);
-       }
-  
-       /* sync event store with IPC (if neccessary)
-        * This MUST be called before inserting event into output queue! */
-       if((es = event_store_find(msg->job_id_s)) == NULL) 
-               return(-1);
-       msg->es = es;
-
-       ret = event_store_sync(es, offset);
-       il_log(LOG_DEBUG, "  syncing event store at %d with event at %d, result %d\n", es->offset, offset, ret);
-       if(ret < 0) {
-               il_log(LOG_ERR, "    handle_msg: error syncing event store:\n      %s\n", error_get_msg());
-               event_store_release(es);
-               return(0);
-       } else if(ret == 0) {
-               /* we have seen this event already */
-               server_msg_free(msg);
-               event_store_release(es);
-               return(1);
-       }
-
-       /* find apropriate queue for this event */
-#if defined(IL_NOTIFICATIONS)
-       eq_s = queue_list_get(msg->dest);
-#else
-       eq_s = queue_list_get(msg->job_id_s);
-#endif
-       if(eq_s == NULL) { 
-               il_log(LOG_ERR, "    handle_msg: apropriate queue not found: %s\n", error_get_msg());
-               clear_error();
-       } else {
-               if(enqueue_msg(eq_s, msg) < 0)
-                       goto err;
-       }
-
-#if !defined(IL_NOTIFICATIONS)
-       eq_l = queue_list_get(NULL);
-       if(!bs_only && eq_l != eq_s) {
-               /* send to default queue (logging server) as well */
-               if(enqueue_msg(eq_l, msg) < 0)
-                       goto err;
-       }
-#endif
-
-       /* if there was no error, set the next expected event offset */
-       event_store_next(es, msg->ev_len);
-       /* allow cleanup thread to check on this event_store */
-       event_store_release(es);
-
-       /* free the message */
-       server_msg_free(msg);
-       return(1);
-
-err:
-       event_store_release(es);
-       server_msg_free(msg);
-       return(-1);
-}
-
-
-
-int 
-loop()
-{
-       /* receive events */
-       while(1) {
-               char *msg;
-               long offset;
-               int ret;
-    
-               clear_error();
-               if((ret = input_queue_get(&msg, &offset, INPUT_TIMEOUT)) < 0) 
-               {
-                       if(error_get_maj() == IL_PROTO) {
-                               il_log(LOG_DEBUG, "  premature EOF while receiving event\n");
-                               /* problems with socket input, try to catch up from files */
-                               event_store_recover_all();
-                               continue;
-                       } else 
-                               return(-1);
-               }
-               else if(ret == 0) {
-                       continue;
-               }
-
-#ifdef INTERLOGD_HANDLE_CMD            
-               ret = handle_cmd(msg, offset);
-               if(ret == 0)
-#endif
-                       ret = handle_msg(msg, offset);
-               free(msg);
-               if(ret < 0)
-                       switch (error_get_maj()) {
-                               case IL_SYS:
-                               case IL_NOMEM:
-                                       return (ret);
-                                       break;
-                               default: 
-                                       il_log(LOG_ERR, "Error: %s\n", error_get_msg());
-                                       break;
-                       }
-       } /* while */
-}
diff --git a/org.glite.lb.logger/src/input_queue_socket.c b/org.glite.lb.logger/src/input_queue_socket.c
deleted file mode 100644 (file)
index f183319..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-#ident "$Header$"
-
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <sys/time.h>
-#include <unistd.h>
-#include <errno.h>
-#include <assert.h>
-#include <string.h>
-
-#include "interlogd.h"
-
-
-static const int   SOCK_QUEUE_MAX = 50;
-extern char *socket_path;
-
-static int sock;
-static int accepted;
-
-int 
-input_queue_attach()
-{ 
-  struct sockaddr_un saddr;
-
-  if((sock=socket(PF_UNIX, SOCK_STREAM, 0)) < 0) {
-    set_error(IL_SYS, errno, "input_queue_attach: error creating socket");
-    return(-1);
-  }
-
-  memset(&saddr, 0, sizeof(saddr));
-  saddr.sun_family = AF_UNIX;
-  strcpy(saddr.sun_path, socket_path);
-
-  /* test for the presence of the socket and another instance 
-     of interlogger listening */
-  if(connect(sock, (struct sockaddr *)&saddr, sizeof(saddr.sun_path)) < 0) {
-         if(errno == ECONNREFUSED) {
-                 /* socket present, but no one at the other end; remove it */
-                 il_log(LOG_WARNING, "  removing stale input socket %s\n", socket_path);
-                 unlink(socket_path);
-         }
-         /* ignore other errors for now */
-  } else {
-         /* connection was successful, so bail out - there is 
-            another interlogger running */
-         set_error(IL_SYS, EADDRINUSE, "input_queue_attach: another instance of interlogger is running");
-         return(-1);
-  }
-  
-  if(bind(sock, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) {
-    set_error(IL_SYS, errno, "input_queue_attach: error binding socket");
-    return(-1);
-  }
-
-  if (listen(sock, SOCK_QUEUE_MAX)) {
-    set_error(IL_SYS, errno, "input_queue_attach: error listening on socket");
-    return -1;
-  }
-
-  return(0);
-}
-
-void input_queue_detach()
-{
-  if (sock >= 0)
-    close(sock);
-  unlink(socket_path);
-}
-
-
-static
-char *
-read_event(int sock, long *offset)
-{
-  char *buffer, *p, *n;
-  int  len, alen;
-  char buf[256];
-
-  /* receive offset */
-  len = recv(sock, offset, sizeof(*offset), MSG_NOSIGNAL);
-  if(len < sizeof(*offset)) {
-    set_error(IL_PROTO, errno, "read_event: error reading offset");
-    return(NULL);
-  }
-  
-  /* receive event string */
-  buffer=malloc(1024);
-  if(buffer == NULL) {
-    set_error(IL_NOMEM, ENOMEM, "read_event: no room for event");
-    return(NULL);
-  }
-  p = buffer;
-
-  alen = 1024;
-  while((len=recv(sock, buf, sizeof(buf), MSG_PEEK | MSG_NOSIGNAL)) > 0) {
-    int i;
-
-    /* we have to be prepared for sizeof(buf) bytes */
-    if(alen - (p - buffer) < (int)sizeof(buf)) {
-      alen += 8192;
-      n = realloc(buffer, alen);
-      if(n == NULL) {
-       free(buffer);
-       set_error(IL_NOMEM, ENOMEM, "read_event: no room for event");
-       return(NULL);
-      }
-      p = p - buffer + n;
-      buffer = n;
-    }
-
-    /* copy all relevant bytes from buffer */
-    for(i=0; (i < len) && (buf[i] != EVENT_SEPARATOR); i++) 
-      *p++ = buf[i];
-
-    /* remove the data from queue */
-    if(i > 0) 
-      if(recv(sock, buf, i, MSG_NOSIGNAL) != i) {
-       set_error(IL_SYS, errno, "read_event: error reading data");
-       free(buffer);
-       return(NULL);
-      }
-    if(i < len)
-      /* the event is complete */
-      break;
-  }
-
-  /* terminate buffer */
-  *p = 0;
-
-  if(len < 0) {
-    set_error(IL_SYS, errno, "read_event: error reading data");
-    free(buffer);
-    return(NULL);
-  }
-
-  /* if len == 0, we have not encountered EVENT_SEPARATOR and thus the event is not complete */
-  if(len == 0) {
-    set_error(IL_PROTO, errno, "read_event: error reading data - premature EOF");
-    free(buffer);
-    return(NULL);
-  }
-
-  /* this is probably not necessary at all:
-     either len <=0, which was covered before,
-     or 0 <= i < len => p > buffer;
-     I would say this condition can not be satisfied.
-  */
-  if(p == buffer) {
-    set_error(IL_PROTO, errno, "read_event: error reading data - no data received");
-    free(buffer);
-    return(NULL);
-  }
-
-  return(buffer);
-}
-
-
-/*
- * Returns: -1 on error, 0 if no message available, message length otherwise
- *
- */
-int
-input_queue_get(char **buffer, long *offset, int timeout)
-{
-  fd_set fds;
-  struct timeval tv;
-  int msg_len;
-
-  assert(buffer != NULL);
-
-  FD_ZERO(&fds);
-  FD_SET(sock, &fds);
-  
-  tv.tv_sec = timeout;
-  tv.tv_usec = 0;
-  
-  msg_len = select(sock + 1, &fds, NULL, NULL, timeout >= 0 ? &tv : NULL);
-  switch(msg_len) {
-     
-  case 0: /* timeout */
-    return(0);
-    
-  case -1: /* error */
-    set_error(IL_SYS, errno, "input_queue_get: error waiting for event");
-    return(-1);
-    
-  default:
-    break;
-  }
-  
-  if((accepted=accept(sock, NULL, NULL)) < 0) {
-    set_error(IL_SYS, errno, "input_queue_get: error accepting connection");
-    return(-1);
-  }
-
-  *buffer = read_event(accepted, offset);
-  close(accepted);
-
-  if(*buffer == NULL) {
-    if(error_get_maj() != IL_OK)
-      return(-1);
-    else
-      return(0);
-  }
-    
-  return(strlen(*buffer));
-}
diff --git a/org.glite.lb.logger/src/interlogd.c b/org.glite.lb.logger/src/interlogd.c
deleted file mode 100644 (file)
index dba2f0d..0000000
+++ /dev/null
@@ -1,279 +0,0 @@
-#ident "$Header$"
-
-/*
-   interlogger - collect events from local-logger and send them to logging and bookkeeping servers
-
-*/
-#include <getopt.h>
-#include <string.h>
-#include <signal.h>
-#include <pthread.h>
-
-#include <globus_common.h>
-
-#include "interlogd.h"
-#include "glite/lb/consumer.h"
-#include "glite/lb/lb_gss.h"
-
-#define EXIT_FAILURE 1
-#if defined(IL_NOTIFICATIONS)
-#define DEFAULT_PREFIX "/tmp/notif_events"
-#define DEFAULT_SOCKET "/tmp/notif_interlogger.sock"
-#else
-#define DEFAULT_PREFIX "/tmp/dglogd.log"
-#define DEFAULT_SOCKET "/tmp/interlogger.sock"
-#endif
-
-
-/* The name the program was run with, stripped of any leading path. */
-char *program_name;
-static int killflg = 0;
-
-int TIMEOUT = DEFAULT_TIMEOUT;
-
-gss_cred_id_t cred_handle = GSS_C_NO_CREDENTIAL;
-pthread_mutex_t cred_handle_lock = PTHREAD_MUTEX_INITIALIZER;
-
-time_t key_mtime = 0, cert_mtime = 0;
-
-static void usage (int status)
-{
-       printf("%s - \n"
-              "  collect events from local-logger and send them to logging and bookkeeping servers\n"
-              "Usage: %s [OPTION]... [FILE]...\n"
-              "Options:\n"
-              "  -h, --help                 display this help and exit\n"
-              "  -V, --version              output version information and exit\n"
-              "  -d, --debug                do not run as daemon\n"
-              "  -v, --verbose              print extensive debug output\n"
-              "  -f, --file-prefix <prefix> path and prefix for event files\n"
-              "  -c, --cert <file>          location of server certificate\n"
-              "  -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"
-              "  -l, --log-server <host>    specify address of log server\n"
-              "  -s, --socket <path>        non-default path of local socket\n"
-              , program_name, program_name);
-       exit(status);
-}
-
-
-/* Option flags and variables */
-static int debug;
-static int verbose = 0;
-char *file_prefix = DEFAULT_PREFIX;
-int bs_only = 0;
-
-char *cert_file = NULL;
-char *key_file  = NULL;
-char *CAcert_dir = NULL;
-char *log_server = NULL;
-char *socket_path = DEFAULT_SOCKET;
-
-static struct option const long_options[] =
-{
-  {"help", no_argument, 0, 'h'},
-  {"version", no_argument, 0, 'V'},
-  {"verbose", no_argument, 0, 'v'},
-  {"debug", no_argument, 0, 'd'},
-  {"file-prefix", required_argument, 0, 'f'},
-  {"cert", required_argument, 0, 'c'},
-  {"key", required_argument, 0, 'k'},
-  {"book", no_argument, 0, 'b'},
-  {"CAdir", required_argument, 0, 'C'},
-  {"log-server", required_argument, 0, 'l'},
-  {"socket", required_argument, 0, 's'},
-  {NULL, 0, NULL, 0}
-};
-
-
-
-/* Set all the option flags according to the switches specified.
-   Return the index of the first non-option argument.  */
-static int
-decode_switches (int argc, char **argv)
-{
-  int c;
-
-  debug = 0;
-
-  while ((c = getopt_long (argc, argv,
-                          "f:"  /* file prefix */
-                          "h"  /* help */
-                          "V"  /* version */
-                          "v"  /* verbose */
-                          "c:"          /* certificate */
-                          "k:"          /* key */
-                          "C:"          /* CA dir */
-                          "b"  /* only bookeeping */
-                           "l:" /* log server */
-                          "d" /* debug */
-                          "s:", /* socket */
-                          long_options, (int *) 0)) != EOF)
-    {
-      switch (c)
-       {
-       case 'V':
-         printf ("interlogger %s\n", VERSION);
-         exit (0);
-
-       case 'v':
-         verbose = 1;
-         break;
-
-       case 'h':
-         usage (0);
-
-       case 'd':
-         debug = 1;
-         break;
-
-       case 'f':
-         file_prefix = strdup(optarg);
-         break;
-
-       case 'c':
-         cert_file = strdup(optarg);
-         break;
-
-       case 'k':
-         key_file = strdup(optarg);
-         break;
-
-       case 'b':
-         bs_only = 1;
-         break;
-
-       case 'l':
-         log_server = strdup(optarg);
-         break;
-
-       case 'C':
-         CAcert_dir = strdup(optarg);
-         break;
-
-       case 's':
-         socket_path = strdup(optarg);
-         break;
-
-       default:
-         usage (EXIT_FAILURE);
-       }
-    }
-
-  return optind;
-}
-
-
-void handle_signal(int num) {
-    il_log(LOG_DEBUG, "Received signal %d\n", num);
-    killflg++;
-}
-
-int
-main (int argc, char **argv)
-{
-  int i;
-  char *p;
-  edg_wll_GssStatus gss_stat;
-  int ret;
-
-  program_name = argv[0];
-
-  setlinebuf(stdout);
-  setlinebuf(stderr);
-
-  i = decode_switches (argc, argv);
-
-  if ((p = getenv("EDG_WL_INTERLOG_TIMEOUT"))) TIMEOUT = atoi(p);
-
-  /* force -b if we do not have log server */
-  if(log_server == NULL) {
-    log_server = strdup(DEFAULT_LOG_SERVER);
-    bs_only = 1;
-  }
-
-  if(init_errors(verbose ? LOG_DEBUG : LOG_WARNING)) {
-    fprintf(stderr, "Failed to initialize error message subsys. Exiting.\n");
-    exit(EXIT_FAILURE);
-  }
-
-  if (signal(SIGPIPE, handle_signal) == SIG_ERR
-      || signal(SIGABRT, handle_signal) == SIG_ERR
-      || signal(SIGTERM, handle_signal) == SIG_ERR
-      || signal(SIGINT, handle_signal) == SIG_ERR) {
-    perror("signal");
-    exit(EXIT_FAILURE);
-  }
-
-  il_log(LOG_INFO, "Initializing input queue...\n");
-  if(input_queue_attach() < 0) {
-    il_log(LOG_CRIT, "Failed to initialize input queue: %s\n", error_get_msg());
-    exit(EXIT_FAILURE);
-  }
-
-  /* initialize output queues */
-  il_log(LOG_INFO, "Initializing event queues...\n");
-  if(queue_list_init(log_server) < 0) {
-    il_log(LOG_CRIT, "Failed to initialize output event queues: %s\n", error_get_msg());
-    exit(EXIT_FAILURE);
-  }
-
-  if (CAcert_dir)
-     setenv("X509_CERT_DIR", CAcert_dir, 1);
-
-  edg_wll_gss_watch_creds(cert_file,&cert_mtime);
-  ret = edg_wll_gss_acquire_cred_gsi(cert_file, key_file, &cred_handle, NULL, &gss_stat);
-  if (ret) {
-     char *gss_err = NULL;
-     char *str;
-
-     if (ret == EDG_WLL_GSS_ERROR_GSS)
-       edg_wll_gss_get_error(&gss_stat, "edg_wll_gss_acquire_cred_gsi()", &gss_err);
-     asprintf(&str, "Failed to load GSI credential: %s\n",
-             (gss_err) ? gss_err : "edg_wll_gss_acquire_cred_gsi() failed"); 
-     il_log(LOG_CRIT, str);
-     free(str);
-     if (gss_err)
-       free(gss_err);
-     exit(EXIT_FAILURE);
-  }
-  
-  if(!debug &&
-     (daemon(0,0) < 0)) {
-    perror("daemon");
-    exit(EXIT_FAILURE);
-  }
-
-  if (globus_module_activate(GLOBUS_COMMON_MODULE) != GLOBUS_SUCCESS)  {
-       il_log(LOG_CRIT, "Failed to initialize Globus common module\n");
-       exit(EXIT_FAILURE);
-  }
-
-  /* find all unsent events waiting in files */
-  { 
-         pthread_t rid;
-
-         il_log(LOG_INFO, "Starting recovery thread...\n");
-         if(pthread_create(&rid, NULL, recover_thread, NULL) < 0) {
-                 il_log(LOG_CRIT, "Failed to start recovery thread: %s\n", strerror(errno));
-                 exit(EXIT_FAILURE);
-         }
-         pthread_detach(rid);
-  }
-
-  il_log(LOG_INFO, "Entering main loop...\n");
-
-  /* do the work */
-  if(loop() < 0) {
-    il_log(LOG_CRIT, "Fatal error: %s\n", error_get_msg());
-    if (killflg) {
-      input_queue_detach();
-      exit(EXIT_FAILURE);
-    }
-  }
-  il_log(LOG_INFO, "Done!\n");
-  input_queue_detach();
-
-  exit (0);
-}
diff --git a/org.glite.lb.logger/src/interlogd.h b/org.glite.lb.logger/src/interlogd.h
deleted file mode 100644 (file)
index 3c96828..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-#ifndef INTERLOGGER_P_H
-#define INTERLOGGER_P_H
-
-#ident "$Header$"
-
-#include "il_error.h"
-#include "glite/lb/lb_gss.h"
-
-#include <pthread.h>
-#include <sys/time.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <stdlib.h>
-#ifdef HAVE_DMALLOC_H
-#include <dmalloc.h>
-#endif
-
-#define INTERLOGD_HANDLE_CMD
-#define INTERLOGD_FLUSH
-#define INTERLOGD_EMS
-
-#define DEFAULT_USER "michal"
-#define DEFAULT_LOG_SERVER "localhost"
-#define DEFAULT_TIMEOUT 60
-
-#if defined(IL_NOTIFICATIONS)
-
-#include "glite/lb/notifid.h"
-
-#undef INTERLOGD_HANDLE_CMD
-#undef INTERLOGD_FLUSH
-#undef INTERLOGD_EMS
-#define IL_EVENT_ID_T          edg_wll_NotifId
-#define IL_EVENT_GET_UNIQUE(a) edg_wll_NotifIdGetUnique((a))
-#define IL_EVENT_ID_FREE(a)    edg_wll_NotifIdFree((a))
-#define IL_EVENT_ID_PARSE(a,b) edg_wll_NotifIdParse((a),(b))
-
-#else
-
-#define INTERLOGD_HANDLE_CMD
-#define INTERLOGD_FLUSH
-#define INTERLOGD_EMS
-#define IL_EVENT_ID_T          edg_wlc_JobId
-#define IL_EVENT_GET_UNIQUE(a) edg_wlc_JobIdGetUnique((a))
-#define IL_EVENT_ID_FREE(a)    edg_wlc_JobIdFree((a))
-#define IL_EVENT_ID_PARSE(a,b) edg_wlc_JobIdParse((a),(b))
-
-#endif
-
-
-#define EVENT_SEPARATOR '\n'
-
-// #define TIMEOUT      5
-extern int TIMEOUT;
-#define INPUT_TIMEOUT (60)
-
-
-extern gss_cred_id_t cred_handle;
-extern pthread_mutex_t cred_handle_lock;
-extern char *cert_file;
-extern char *key_file;
-extern char *CAcert_dir;
-extern int bs_only;
-
-
-/* shared data for thread communication */
-#ifdef INTERLOGD_FLUSH
-extern pthread_mutex_t flush_lock;
-extern pthread_cond_t flush_cond;
-#endif
-  
-struct event_store {
-       char     *event_file_name;         /* file with events from local logger */
-       char     *control_file_name;       /* file with control information */
-       char     *job_id_s;                /* string form of the job id */
-       long      last_committed_bs;       /* offset behind event that was last committed by BS */
-       long      last_committed_ls;       /*  -"-                                           LS */
-       long      offset;                  /* expected file position of next event */
-       int       recovering;              /* flag for recovery mode */
-       pthread_rwlock_t update_lock;      /* lock to prevent simultaneous updates */
-       pthread_rwlock_t use_lock;         /* lock to prevent struct deallocation */
-#if defined(IL_NOTIFICATIONS)
-       char     *dest;                    /* host:port destination */
-#endif
-};
-
-
-struct server_msg {
-       char                   *job_id_s;       /* necessary for commit */
-       long                    offset;         /* just for printing more information to debug */
-       char                   *msg;
-       int                     len;
-       int                     ev_len;
-       struct event_store     *es;             /* cache for corresponding event store */
-       long                    receipt_to;     /* receiver (long local-logger id - LLLID) of delivery confirmation (for priority messages) */
-#if defined(IL_NOTIFICATIONS)
-       char                   *dest_name;
-       int                     dest_port;
-       char                   *dest;
-#endif
-};
-
-
-struct event_queue {
-       edg_wll_GssConnection   gss;            /* GSS connection */
-       char                   *dest_name;
-       int                     dest_port;
-       int                     timeout;        /* queue timeout */
-       struct event_queue_msg *tail;           /* last message in the queue */
-       struct event_queue_msg *head;           /* first message in the queue */
-#if defined(INTERLOGD_EMS)
-       struct event_queue_msg *tail_ems;       /* last priority message in the queue (or NULL) */
-       struct event_queue_msg *mark_this;      /* mark message for removal */
-       struct event_queue_msg *mark_prev;      /* predecessor of the marked message */
-#endif
-       pthread_t               thread_id;      /* id of associated thread */
-       pthread_rwlock_t        update_lock;    /* mutex for queue updates */
-       pthread_mutex_t         cond_lock;      /* mutex for condition variable */
-       pthread_cond_t          ready_cond;     /* condition variable for message arrival */
-#if defined(INTERLOGD_HANDLE_CMD) && defined(INTERLOGD_FLUSH)
-       int                     flushing;
-       int                     flush_result;   /* result of flush operation */
-       pthread_cond_t          flush_cond;     /* condition variable for flush operation */
-#endif
-};
-
-
-/* server msg methods */
-struct server_msg *server_msg_create(char *, long);
-struct server_msg *server_msg_copy(struct server_msg *);
-int server_msg_init(struct server_msg *, char *);
-#if defined(INTERLOGD_EMS)
-int server_msg_is_priority(struct server_msg *);
-#endif
-int server_msg_free(struct server_msg *);
-
-/* general event queue methods */
-struct event_queue *event_queue_create(char *);
-int event_queue_free(struct event_queue *);
-int event_queue_empty(struct event_queue *);
-int event_queue_insert(struct event_queue *, struct server_msg *);
-int event_queue_get(struct event_queue *, struct server_msg **);
-int event_queue_remove(struct event_queue *);
-int event_queue_enqueue(struct event_queue *, char *);
-/* helper */
-int enqueue_msg(struct event_queue *, struct server_msg *);
-
-/* protocol event queue methods */
-int event_queue_connect(struct event_queue *);
-int event_queue_send(struct event_queue *);
-int event_queue_close(struct event_queue *);
-int send_confirmation(long, int);
-
-/* thread event queue methods */
-int event_queue_create_thread(struct event_queue *);
-int event_queue_lock(struct event_queue *);
-int event_queue_unlock(struct event_queue *);
-int event_queue_lock_ro(struct event_queue *);
-int event_queue_signal(struct event_queue *);
-int event_queue_wait(struct event_queue *, int);
-int event_queue_sleep(struct event_queue *);
-int event_queue_wakeup(struct event_queue *);
-int event_queue_cond_lock(struct event_queue *);
-int event_queue_cond_unlock(struct event_queue *);
-
-/* input queue */
-int input_queue_attach();
-void input_queue_detach();
-int input_queue_get(char **, long *, int);
-
-/* queue management functions */
-int queue_list_init(char *);
-struct event_queue *queue_list_get(char *);
-struct event_queue *queue_list_first();
-struct event_queue *queue_list_next();
-int queue_list_is_log(struct event_queue *);
-
-#if defined(IL_NOTIFICATIONS)
-struct event_queue *notifid_map_get_dest(const char *);
-int notifid_map_set_dest(const char *, struct event_queue *);
-int event_queue_move_events(struct event_queue *, struct event_queue *, char *); 
-#endif
-
-/* event store functions */
-int event_store_init(char *);
-int event_store_cleanup();
-int event_store_recover_all(void);
-struct event_store *event_store_find(char *);
-int event_store_sync(struct event_store *, long);
-int event_store_next(struct event_store *, int);
-int event_store_commit(struct event_store *, int, int);
-int event_store_recover(struct event_store *);
-int event_store_release(struct event_store *);
-/* int event_store_remove(struct event_store *); */
-
-/* master main loop */
-int loop();
-
-/* recover thread */
-void *recover_thread(void*);
-
-#endif
diff --git a/org.glite.lb.logger/src/logd.c b/org.glite.lb.logger/src/logd.c
deleted file mode 100644 (file)
index f291a81..0000000
+++ /dev/null
@@ -1,436 +0,0 @@
-#ident "$Header$"
-
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <sys/wait.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <signal.h>
-#include <unistd.h> 
-#include <string.h>
-#include <getopt.h>
-
-#include <globus_common.h>
-
-#include "logd_proto.h"
-#include "glite/lb/consumer.h"
-#include "glite/lb/lb_gss.h"
-
-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 *cert_file = NULL;
-static char *key_file = NULL;
-static char *CAcert_dir = NULL;
-static int noAuth = 0;
-static int noIPC = 0;
-static int noParse = 0;
-
-#define DEFAULT_SOCKET "/tmp/interlogger.sock"
-char *socket_path = DEFAULT_SOCKET;
-
-extern int confirm_sock;
-extern char confirm_sock_name[256];
-
-static struct option const long_options[] = {
-       { "help", no_argument, 0, 'h' },
-       { "version", no_argument, 0, 'V' },
-       { "verbose", no_argument, 0, 'v' },
-       { "debug", no_argument, 0, 'd' },
-       { "port", required_argument, 0, 'p' },
-       { "file-prefix", required_argument, 0, 'f' },
-       { "cert", required_argument, 0, 'c' },
-       { "key", required_argument, 0, 'k' },
-       { "CAdir", required_argument, 0, 'C' },
-       { "socket",required_argument, 0, 's' },
-       { "noAuth", no_argument, 0, 'x' },
-       { "noIPC", no_argument, 0, 'y' },
-       { "noParse", no_argument, 0, 'z' },
-       { NULL, 0, NULL, 0}
-};
-
-/*
- *----------------------------------------------------------------------
- *
- * usage - print usage
- *
- *----------------------------------------------------------------------
- */
-
-static void
-usage(char *program_name) {
-       fprintf(stdout,"%s\n"
-               "- collect events from logging API calls,\n"
-               "- save them to files and\n"
-               "- send them to inter-logger\n\n"
-               "Usage: %s [option]\n"
-               "-h, --help                 display this help and exit\n"
-               "-V, --version              output version information and exit\n"
-               "-d, --debug                do not run as daemon\n"
-               "-v, --verbose              print extensive debug output\n"
-               "-p, --port <num>           port to listen\n"
-               "-f, --file-prefix <prefix> path and prefix for event files\n"
-               "-c, --cert <file>          location of server certificate\n"
-               "-k, --key  <file>          location of server private key\n"
-               "-C, --CAdir <dir>          directory containing CA certificates\n"
-               "-s, --socket <dir>         socket to send messages (NOT IMPLEMENTED YET)\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",
-               program_name,program_name);
-}
-
-static sighandler_t mysignal(int num,sighandler_t handler)
-{
-       struct sigaction        sa,osa;
-
-       memset(&sa,0,sizeof(sa));
-       sa.sa_handler = handler;
-       sa.sa_flags = SA_RESTART;
-       return sigaction(num,&sa,&osa) ? SIG_ERR : osa.sa_handler;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * handle_signal -
- *     USR1 - increase the verbosity of the program
- *     USR2 - decrease the verbosity of the program
- *
- *----------------------------------------------------------------------
- */
-void handle_signal(int num) {
-       if (num != SIGCHLD) edg_wll_ll_log(LOG_NOTICE,"Received signal %d\n", num);
-       switch (num) {
-               case SIGUSR1:
-                       if (edg_wll_ll_log_level < LOG_DEBUG) edg_wll_ll_log_level++;
-                       edg_wll_ll_log(LOG_NOTICE,"Logging level is now %d\n", edg_wll_ll_log_level);
-                       break;
-               case SIGUSR2:
-                       if (edg_wll_ll_log_level > LOG_EMERG) edg_wll_ll_log_level--;
-                       edg_wll_ll_log(LOG_NOTICE,"Logging level is now %d\n", edg_wll_ll_log_level);
-                       break;
-               case SIGPIPE:
-                       edg_wll_ll_log(LOG_NOTICE,"Broken pipe, lost communication channel.\n");
-                       break;
-               case SIGCHLD:
-                       while (wait3(NULL,WNOHANG,NULL) > 0);
-                       break;
-               case SIGINT:
-               case SIGTERM:
-               case SIGQUIT:
-                       if (confirm_sock) {
-                               edg_wll_ll_log(LOG_NOTICE,"Closing confirmation socket.\n");
-                               close(confirm_sock);
-                               unlink(confirm_sock_name);
-                       }
-                       exit(1);
-                       break;
-               default: break;
-       }
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * doit - do all the dirty work
- *
- *----------------------------------------------------------------------
- */
-static int
-doit(int socket, gss_cred_id_t cred_handle, char *file_name_prefix, int noipc, int noparse)
-{
-    char       *subject;
-    int        ret;
-    struct timeval timeout = {10,0};
-    edg_wll_GssConnection      con;
-    edg_wll_GssStatus  gss_stat;
-    gss_buffer_desc    gss_token = GSS_C_EMPTY_BUFFER;
-    gss_name_t client_name = GSS_C_NO_NAME;
-    OM_uint32  min_stat;
-    gss_OID    name_type = GSS_C_NO_OID;
-
-    /* authentication */
-    edg_wll_ll_log(LOG_INFO,"Processing authentication:\n");
-// FIXME - put here some meaningfull value of timeout + do somthing if timeouted
-    ret = edg_wll_gss_accept(cred_handle,socket,&timeout,&con, &gss_stat);
-    if (ret) {
-           edg_wll_ll_log(LOG_ERR,"edg_wll_gss_accept() failed\n");
-           return(-1);
-    }
-
-    gss_stat.major_status = gss_inquire_context(&gss_stat.minor_status, con.context,
-                                               &client_name, NULL, NULL, NULL, NULL,
-                                               NULL, NULL);
-    if (GSS_ERROR(gss_stat.major_status)) {
-       char *gss_err;
-       edg_wll_gss_get_error(&gss_stat, "Cannot read client identification", &gss_err);
-       edg_wll_ll_log(LOG_WARNING, "%s\n", gss_err);
-       free(gss_err);
-    } else {
-       gss_stat.major_status = gss_display_name(&gss_stat.minor_status, client_name,
-                                               &gss_token, &name_type);
-       if (GSS_ERROR(gss_stat.major_status)) {
-         char *gss_err;
-         edg_wll_gss_get_error(&gss_stat, "Cannot process client identification", &gss_err);
-         edg_wll_ll_log(LOG_WARNING, "%s\n", gss_err);
-         free(gss_err);
-       }
-    }
-
-    if (GSS_ERROR(gss_stat.major_status) ||
-        edg_wll_gss_oid_equal(name_type, GSS_C_NT_ANONYMOUS)) {
-       edg_wll_ll_log(LOG_INFO,"  User not authenticated, setting as \"%s\". \n",EDG_WLL_LOG_USER_DEFAULT);
-       subject=strdup(EDG_WLL_LOG_USER_DEFAULT);
-    } else {
-       edg_wll_ll_log(LOG_INFO,"  User successfully authenticated as:\n");
-       edg_wll_ll_log(LOG_INFO, "   %s\n", (char *)gss_token.value);
-       subject=gss_token.value;
-       memset(&gss_token.value, 0, sizeof(gss_token.value));
-    }
-
-    ret = edg_wll_log_proto_server(&con,subject,file_name_prefix,noipc,noparse);
-
-    edg_wll_gss_close(&con, NULL);
-    if (subject) free(subject);
-    if (gss_token.length)
-       gss_release_buffer(&min_stat, &gss_token);
-    if (client_name != GSS_C_NO_NAME)
-       gss_release_name(&min_stat, &client_name);
-    return ret;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * Main -
- *
- *----------------------------------------------------------------------
- */
-int main(int argc, char *argv[])
-{
-   int ret;
-   int childpid;
-   int opt;
-
-   int listener_fd;
-   int client_fd;
-   struct sockaddr_in client_addr;
-   int client_addr_len;
-
-   char *my_subject_name = NULL;
-
-   time_t      cert_mtime = 0, key_mtime = 0;
-   OM_uint32   min_stat;
-   edg_wll_GssStatus   gss_stat;
-   gss_cred_id_t       cred = GSS_C_NO_CREDENTIAL;
-
-
-   setlinebuf(stdout);
-   setlinebuf(stderr);
-
-   /* welcome */
-   fprintf(stdout,"\
-This is LocalLogger, part of Workload Management System in EU DataGrid.\
-Copyright (c) 2002 CERN, INFN and CESNET on behalf of the EU DataGrid.\n");
-
-   /* get arguments */
-   while ((opt = getopt_long(argc,argv,
-       "h"  /* help */
-       "V"  /* version */
-       "v"  /* verbose */
-       "d"  /* debug */
-       "p:" /* port */
-       "f:" /* file prefix */
-       "c:" /* certificate */
-       "k:" /* key */
-       "C:" /* CA dir */
-       "s:" /* socket */
-       "x"  /* noAuth */
-       "y"  /* noIPC */
-       "z",  /* noParse */
-       long_options, (int *) 0)) != EOF) {
-
-       switch (opt) {
-               case 'V': fprintf(stdout,"%s:\t%s\n",argv[0],rcsid); exit(0);
-               case 'v': verbose = 1; break;
-               case 'd': debug = 1; break;
-               case 'p': port = atoi(optarg); break;
-               case 'f': prefix = optarg; break;
-               case 'c': cert_file = optarg; break;
-               case 'k': key_file = optarg; break;
-               case 'C': CAcert_dir = optarg; break;
-               case 's': socket_path = optarg; break;
-               case 'x': noAuth = 1; break;
-               case 'y': noIPC = 1; break;
-               case 'z': noParse = 1; break;
-               case 'h':
-               default:
-                       usage(argv[0]); exit(0);
-       }
-   }
-   edg_wll_ll_log_init(verbose ? LOG_DEBUG : LOG_INFO);
-   edg_wll_ll_log(LOG_INFO,"Initializing...\n");
-
-   /* check noParse */
-   edg_wll_ll_log(LOG_INFO,"Parse messages for correctness...");
-   if (noParse) {
-       edg_wll_ll_log(LOG_INFO,"no.\n");
-   } else {
-       edg_wll_ll_log(LOG_INFO,"yes.\n");
-   }
-
-   /* check noIPC */
-   edg_wll_ll_log(LOG_INFO,"Send messages also to inter-logger...");
-   if (noIPC) {
-       edg_wll_ll_log(LOG_INFO,"no.\n");
-   } else {
-       edg_wll_ll_log(LOG_INFO,"yes.\n");
-   }
-
-   /* check prefix correctness */
-/* XXX: check probably also write permisions */
-   edg_wll_ll_log(LOG_INFO,"Store messages with the filename prefix \"%s\"...",prefix);
-   if (strlen(prefix) > FILENAME_MAX - 34) {
-       edg_wll_ll_log(LOG_INFO,"no.\n");
-       edg_wll_ll_log(LOG_CRIT,"Too long prefix for file names, would not be able to write to log files. Exiting.\n");
-       exit(1);
-   } else {
-       edg_wll_ll_log(LOG_INFO,"yes.\n");
-   }
-
-   if (CAcert_dir)
-      setenv("X509_CERT_DIR", CAcert_dir, 1);
-
-   /* initialize Globus common module */
-   edg_wll_ll_log(LOG_INFO,"Initializing Globus common module...");
-   if (globus_module_activate(GLOBUS_COMMON_MODULE) != GLOBUS_SUCCESS) {
-       edg_wll_ll_log(LOG_NOTICE,"no.\n");
-       edg_wll_ll_log(LOG_CRIT, "Failed to initialize Globus common module. Exiting.\n");
-       exit(1);
-   } else {
-       edg_wll_ll_log(LOG_INFO,"yes.\n");
-   }
-
-   /* initialize signal handling */
-   if (mysignal(SIGUSR1, handle_signal) == SIG_ERR) { perror("signal"); exit(1); }
-   if (mysignal(SIGUSR2, handle_signal) == SIG_ERR) { perror("signal"); exit(1); }
-   if (mysignal(SIGPIPE, handle_signal) == SIG_ERR) { perror("signal"); exit(1); }
-   if (mysignal(SIGHUP,  SIG_DFL) == SIG_ERR) { perror("signal"); exit(1); }
-   if (mysignal(SIGINT,  handle_signal) == SIG_ERR) { perror("signal"); exit(1); }
-   if (mysignal(SIGQUIT, handle_signal) == SIG_ERR) { perror("signal"); exit(1); }
-   if (mysignal(SIGTERM, handle_signal) == SIG_ERR) { perror("signal"); exit(1); }
-   if (mysignal(SIGCHLD, handle_signal) == SIG_ERR) { perror("signal"); exit(1); }
-
-   edg_wll_gss_watch_creds(cert_file,&cert_mtime);
-   /* XXX DK: support noAuth */
-   ret = edg_wll_gss_acquire_cred_gsi(cert_file, key_file, &cred, &my_subject_name,
-                                     &gss_stat);
-   if (ret) {
-      /* XXX DK: call edg_wll_gss_get_error() */
-      edg_wll_ll_log(LOG_CRIT, "Failed to get GSI credentials. Exiting.\n");
-      exit(1);
-   }
-
-   if (my_subject_name!=NULL) {
-       edg_wll_ll_log(LOG_INFO,"  server running with certificate: %s\n",my_subject_name);
-       free(my_subject_name);
-   } else if (noAuth) {
-       edg_wll_ll_log(LOG_INFO,"  running without certificate\n");
-#if 0
-   /* XXX DK: */    
-   } else {
-       edg_wll_ll_log(LOG_CRIT,"No server credential found. Exiting.\n");
-       exit(1);
-#endif
-   }
-
-   /* do listen */
-   edg_wll_ll_log(LOG_INFO,"Listening on port %d\n",port);
-   listener_fd = do_listen(port);
-   if (listener_fd == -1) {
-       edg_wll_ll_log(LOG_CRIT,"Failed to listen on port %d\n",port);
-       gss_release_cred(&min_stat, &cred);
-       exit(-1);
-   }
-
-   client_addr_len = sizeof(client_addr);
-   bzero((char *) &client_addr, client_addr_len);
-
-   /* daemonize */
-   edg_wll_ll_log(LOG_INFO,"Running as daemon...");
-   if (debug) {
-       edg_wll_ll_log(LOG_NOTICE,"no.\n");
-   }
-   else if (daemon(0,0) < 0) {
-       edg_wll_ll_log(LOG_CRIT,"Failed to run as daemon. Exiting.\n");
-       perror("daemon");
-       exit(1);
-   }
-   else {
-       edg_wll_ll_log(LOG_INFO,"yes.\n");
-   }
-
-   /*
-    * Main loop
-    */
-   while (1) {
-       edg_wll_ll_log(LOG_INFO,"Accepting incomming connections...\n");
-       client_fd = accept(listener_fd, (struct sockaddr *) &client_addr,
-                          &client_addr_len);
-       if (client_fd < 0) {
-          close(listener_fd);
-          edg_wll_ll_log(LOG_CRIT,"Failed to accept incomming connections\n");
-          perror("accept");
-          gss_release_cred(&min_stat, &cred);
-          exit(-1);
-       }
-
-       switch (edg_wll_gss_watch_creds(cert_file,&cert_mtime)) {
-         gss_cred_id_t newcred;
-         case 0: break;
-         case 1:
-            ret = edg_wll_gss_acquire_cred_gsi(cert_file,key_file,&newcred,NULL,&gss_stat);
-            if (ret) {
-               edg_wll_ll_log(LOG_WARNING, "Reloading credentials failed, continue with older\n");
-            } else {
-               edg_wll_ll_log(LOG_INFO, "Reloading credentials\n");
-               gss_release_cred(&min_stat, &cred);
-               cred = newcred;
-            }
-            break;
-         case -1:
-            edg_wll_ll_log(LOG_WARNING, "edg_wll_gss_watch_creds failed\n");
-            break;
-       }
-
-    /* FORK - change next line if fork() is not needed (for debugging for
-     * example
-     */
-#if 1
-       if ((childpid = fork()) < 0) {
-             perror("fork()");
-             close(client_fd);
-       }
-       if (childpid == 0) {
-             ret=doit(client_fd,cred,prefix,noIPC,noParse);
-             close(client_fd);
-             goto end;
-       }
-       if (childpid > 0) {
-             close(client_fd);
-       }
-#else
-       ret=doit(client_fd,cred,prefix,noIPC,noParse);
-       close(client_fd);
-#endif
-    } /* while */
-
-end:
-   close(listener_fd);
-   gss_release_cred(&min_stat, &cred);
-   exit(ret);
-}
diff --git a/org.glite.lb.logger/src/logd_proto.c b/org.glite.lb.logger/src/logd_proto.c
deleted file mode 100644 (file)
index 463266a..0000000
+++ /dev/null
@@ -1,866 +0,0 @@
-#ident "$Header$"
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <unistd.h>
-#include <netinet/in.h>
-#include <signal.h>
-#include <string.h>
-#include <syslog.h>
-#include <fcntl.h>
-
-#include "logd_proto.h"
-#include "glite/lb/context-int.h"
-#include "glite/lb/escape.h"
-#include "glite/lb/events_parse.h"
-
-static const int one = 1;
-
-extern char* socket_path;
-
-int edg_wll_ll_log_level;
-
-#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;\
-       }\
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * send_answer_back - 
- *                     
- *----------------------------------------------------------------------
- */
-static int send_answer_back(edg_wll_GssConnection *con, int answer, struct timeval *timeout) {
-       size_t count = 0;
-       int err = 0;
-       int ans = answer;
-       u_int8_t ans_end[4];
-       edg_wll_GssStatus       gss_stat;
-
-       edg_wll_ll_log(LOG_INFO,"Sending answer \"%d\" back to client...",answer);
-        ans_end[0] = ans & 0xff; ans >>= 8;
-        ans_end[1] = ans & 0xff; ans >>= 8;
-        ans_end[2] = ans & 0xff; ans >>= 8;
-        ans_end[3] = ans;
-       if ((err = edg_wll_gss_write_full(con,ans_end,4,timeout,&count, &gss_stat)) < 0 ) {
-               edg_wll_ll_log(LOG_INFO,"error.\n");
-               return edg_wll_log_proto_server_failure(err,&gss_stat,"Error sending answer");
-       } else {
-               edg_wll_ll_log(LOG_INFO,"o.k.\n");
-               return 0;
-       }
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * wait_for_confirmation -
- *
- * Args:    timeout - number of seconds to wait, 0 => wait indefinitely
- *
- * Returns:  1 => OK, *code contains error code sent by interlogger
- *           0 => timeout expired before anything interesting happened
- *          -1 => some error (see errno for details)
- *
- *----------------------------------------------------------------------
- */
-int confirm_sock;
-char confirm_sock_name[256];
-
-static
-int init_confirmation()
-{
-       struct sockaddr_un saddr;
-
-       /* create socket */
-       if((confirm_sock=socket(PF_UNIX, SOCK_STREAM, 0)) < 0) {
-               edg_wll_ll_log(LOG_ERR,"init_confirmation(): error creating socket\n");
-               SYSTEM_ERROR("socket");
-               return(-1);
-       }
-
-       /* set the socket parameters */
-       memset(&saddr, 0, sizeof(saddr));
-       saddr.sun_family = AF_UNIX;
-       strcpy(saddr.sun_path, confirm_sock_name);
-
-       /* bind the socket */
-       if(bind(confirm_sock, (struct sockaddr *)&saddr, sizeof(saddr.sun_path)) < 0) {
-               edg_wll_ll_log(LOG_ERR,"init_confirmation(): error binding socket\n");
-               SYSTEM_ERROR("bind");
-               close(confirm_sock);
-               unlink(confirm_sock_name);
-               return(-1);
-       }
-
-       /* and listen */
-       if(listen(confirm_sock, 5) < 0) {
-               edg_wll_ll_log(LOG_ERR,"init_confirmation(): error listening on socket\n");
-               SYSTEM_ERROR("listen");
-               close(confirm_sock);
-               unlink(confirm_sock_name);
-               return(-1);
-       }
-
-       return(0);
-}
-
-
-int wait_for_confirmation(struct timeval *timeout, int *code)
-{
-       fd_set fds;
-       struct timeval  to,before,after;
-       int ret = 0, tmp = 0;
-
-       *code = 0;
-
-       FD_ZERO(&fds);
-       FD_SET(confirm_sock, &fds);
-
-       /* set timeout */
-       if (timeout) {
-               memcpy(&to,timeout,sizeof to);
-               gettimeofday(&before,NULL);
-       }
-
-       /* wait for confirmation at most timeout seconds */
-       if ((tmp=select(confirm_sock+1, &fds, NULL, NULL, timeout?&to:NULL)) < 0) {
-               edg_wll_ll_log(LOG_ERR,"wait_for_confirmation(): error selecting socket\n");
-               SYSTEM_ERROR("select");
-               ret = -1;
-       } else {
-               if (tmp == 0)
-                       ret = 0;
-               else {
-                       int nsd = accept(confirm_sock, NULL, NULL);
-                       ret = 1;
-                       if(nsd < 0) {
-                               edg_wll_ll_log(LOG_ERR,"wait_for_confirmation(): error accepting a connection on a socket\n");
-                               SYSTEM_ERROR("accept");
-                               ret = -1;
-                       } else {
-                               if(recv(nsd, code, sizeof(*code), MSG_NOSIGNAL) < 0) {
-                                       edg_wll_ll_log(LOG_ERR,"wait_for_confirmation(): error receiving a message from a socket\n");
-                                       SYSTEM_ERROR("recv");
-                                       ret = -1;
-                               }
-                               close(nsd);
-                       }
-               }
-       }
-       close(confirm_sock);
-       unlink(confirm_sock_name);
-        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 ret;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * do_listen - listen on given port
- *
- * Returns: socket handle or -1 if something fails
- *
- * Calls: socket, bind, listen
- *
- * Algorithm:
- *
- *----------------------------------------------------------------------
- */
-int do_listen(int port)
-{
-       int                ret;
-       int                sock;
-       struct sockaddr_in my_addr;
-
-       memset(&my_addr, 0, sizeof(my_addr));
-       my_addr.sin_family = AF_INET;
-       my_addr.sin_addr.s_addr = INADDR_ANY;
-       my_addr.sin_port = htons(port);
-
-       sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-       if (sock == -1) { 
-               edg_wll_ll_log(LOG_ERR,"do_listen(): error creating socket\n");
-               SYSTEM_ERROR("socket"); 
-               return -1; 
-       }
-
-       setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
-       ret = bind(sock, (struct sockaddr *)&my_addr, sizeof(my_addr));
-       if (ret == -1) { 
-               edg_wll_ll_log(LOG_ERR,"do_listen(): error binding socket\n");
-               SYSTEM_ERROR("bind"); 
-               return -1; 
-       }
-
-       ret = listen(sock, 5);
-       if (ret == -1) { 
-               edg_wll_ll_log(LOG_ERR,"do_listen(): error listening on socket\n");
-               SYSTEM_ERROR("listen"); 
-               close(sock); 
-               return -1; 
-       }
-
-       return sock;
-}
-
-/*!
- *----------------------------------------------------------------------
- * 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, ret = 0;
-       fd_set  fds;
-       struct timeval  to,before,after;
-
-       if (timeout) {
-               memcpy(&to,timeout,sizeof to);
-               gettimeofday(&before,NULL);
-       }
-        len = write(sock,buf,bufsize);
-        while (len <= 0) {
-               FD_ZERO(&fds);
-               FD_SET(sock,&fds);
-               if ((ret=select(sock+1,&fds,NULL,NULL,timeout?&to:NULL)) < 0) {
-                       edg_wll_ll_log(LOG_ERR,"edg_wll_socket_write(): error selecting socket\n");
-                       SYSTEM_ERROR("select"); 
-                       break;
-               }
-                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_proto_server - handle incoming data
- *
- * Returns: 0 if done properly or errno
- *
- * Calls:
- *
- * Algorithm:
- *
- *----------------------------------------------------------------------
- */
-int edg_wll_log_proto_server(edg_wll_GssConnection *con, char *name, char *prefix, int noipc, int noparse)
-{
-       char    *buf,*dglllid,*dguser,*jobId,*name_esc;
-       char    header[EDG_WLL_LOG_SOCKET_HEADER_LENGTH+1];
-       char    outfilename[FILENAME_MAX];
-       size_t  count;
-       int     count_total,size;
-       u_int8_t size_end[4];
-       size_t  msg_size,dglllid_size,dguser_size;
-       int     i,answer,answer_sent;
-       int     msg_sock;
-       char    *msg,*msg_begin;
-       FILE    *outfile;
-       int     filedesc,filelock_status,flags;
-       long    filepos;
-       struct flock filelock;
-       int     priority;
-       long    lllid;
-       int     unique;
-       struct timeval timeout;
-       int     err;
-       edg_wll_Context context;
-       edg_wll_Event   *event;
-       edg_wll_GssStatus       gss_stat;
-                
-       errno = i = answer = answer_sent = size = msg_size = dglllid_size = dguser_size = count = count_total = msg_sock = filedesc = filelock_status = /* priority */ unique = err = 0;     
-        buf = dglllid = dguser = jobId = name_esc = msg = msg_begin = NULL;
-       event = NULL;
-       if (EDG_WLL_LOG_TIMEOUT_MAX > EDG_WLL_LOG_SYNC_TIMEOUT_MAX) timeout.tv_sec = EDG_WLL_LOG_TIMEOUT_MAX;
-       else timeout.tv_sec = EDG_WLL_LOG_SYNC_TIMEOUT_MAX;
-        timeout.tv_usec = 0;
-       if (edg_wll_InitContext(&context) != 0) {
-               edg_wll_ll_log(LOG_ERR,"edg_wll_InitContex(): error.\n");
-               answer = ENOMEM; 
-               goto edg_wll_log_proto_server_end; 
-       }
-       if (edg_wll_ResetError(context) != 0) { 
-               edg_wll_ll_log(LOG_ERR,"edg_wll_ResetError(): error.\n");
-               answer = ENOMEM; 
-               goto edg_wll_log_proto_server_end;
-       }
-
-       /* look for the unique unused long local-logger id (LLLID) */
-       lllid = 1000*getpid();
-       for (i=0; (i<1000)&&(!unique); i++) {
-               lllid += i;
-               snprintf(confirm_sock_name, sizeof(confirm_sock_name), "/tmp/dglogd_sock_%ld", lllid);
-               if ((filedesc = open(confirm_sock_name,O_CREAT)) == -1) {
-                       if (errno == EEXIST) {
-                               edg_wll_ll_log(LOG_WARNING,"Warning: LLLID %ld already in use.\n",lllid);
-                       } else {
-                               SYSTEM_ERROR("open");
-                       }
-               } else {
-                       unique = 1;
-                       close(filedesc); filedesc = 0;
-                       unlink(confirm_sock_name);
-               }
-       }
-       if (!unique) {
-               edg_wll_ll_log(LOG_ERR,"Cannot determine the unique long local-logger id (LLLID)!\n",lllid);
-               return EAGAIN;
-       }
-       edg_wll_ll_log(LOG_INFO,"Long local-logger id (LLLID): %ld\n",lllid);
-
-       /* receive socket header */
-       edg_wll_ll_log(LOG_INFO,"Reading socket header...");
-       memset(header, 0, EDG_WLL_LOG_SOCKET_HEADER_LENGTH+1);
-       if ((err = edg_wll_gss_read_full(con, header, EDG_WLL_LOG_SOCKET_HEADER_LENGTH, &timeout, &count, &gss_stat)) < 0) {
-               edg_wll_ll_log(LOG_INFO,"error.\n");
-               answer = edg_wll_log_proto_server_failure(err,&gss_stat,"Error receiving header");
-               goto edg_wll_log_proto_server_end;
-       } else {
-               edg_wll_ll_log(LOG_INFO,"o.k.\n");
-       }
-       edg_wll_ll_log(LOG_DEBUG,"Checking socket header...");
-       header[EDG_WLL_LOG_SOCKET_HEADER_LENGTH] = '\0';
-       if (strncmp(header,EDG_WLL_LOG_SOCKET_HEADER,EDG_WLL_LOG_SOCKET_HEADER_LENGTH)) {
-               /* not the proper socket header text */
-               edg_wll_ll_log(LOG_DEBUG,"error.\n");
-               edg_wll_ll_log(LOG_ERR,"edg_wll_log_proto_server(): invalid socket header\n");
-               edg_wll_ll_log(LOG_DEBUG,"edg_wll_log_proto_server(): read header '%s' instead of '%s'\n",
-                               header,EDG_WLL_LOG_SOCKET_HEADER);
-               answer = EINVAL;
-               goto edg_wll_log_proto_server_end;
-       } else {
-               edg_wll_ll_log(LOG_DEBUG,"o.k.\n");
-       }
-
-/*
-       edg_wll_ll_log(LOG_DEBUG,"Reading message priority...");
-       count = 0;
-       if ((err = edg_wll_gss_read_full(con, &priority, sizeof(priority), &timeout, &count, &gss_stat)) < 0) {
-               edg_wll_ll_log(LOG_DEBUG,"error.\n");
-               answer = edg_wll_log_proto_server_failure(err,&gss_stat,"Error receiving message priority");
-                goto edg_wll_log_proto_server_end;
-        } else {
-               edg_wll_ll_log(LOG_DEBUG,"o.k.\n");
-       }
-*/
-
-        edg_wll_ll_log(LOG_DEBUG,"Reading message size...");
-       count = 0;
-       if ((err = edg_wll_gss_read_full(con, size_end, 4, &timeout, &count,&gss_stat)) < 0) {
-               edg_wll_ll_log(LOG_DEBUG,"error.\n");
-               answer = edg_wll_log_proto_server_failure(err,&gss_stat,"Error receiving message size");
-                goto edg_wll_log_proto_server_end;
-       } else {
-               edg_wll_ll_log(LOG_DEBUG,"o.k.\n");
-       }
-       size = size_end[3]; size <<=8; 
-       size |= size_end[2]; size <<=8; 
-       size |= size_end[1]; size <<=8; 
-       size |= size_end[0];
-        edg_wll_ll_log(LOG_DEBUG,"Checking message size...");
-       if (size <= 0) {
-               edg_wll_ll_log(LOG_DEBUG,"error.\n");
-               /* probably wrong size in the header or nothing to read */
-               edg_wll_ll_log(LOG_ERR,"edg_wll_log_proto_server(): invalid size read from socket header\n");
-               edg_wll_ll_log(LOG_DEBUG,"Read size '%d'.\n",size);
-               answer = EINVAL;
-               goto edg_wll_log_proto_server_end;
-       } else {
-               edg_wll_ll_log(LOG_DEBUG,"o.k.\n");
-               edg_wll_ll_log(LOG_DEBUG,"- Size read from header: %d bytes.\n",size);
-       }
-
-       /* format the DG.LLLID string */
-       if (asprintf(&dglllid,"DG.LLLID=%ld ",lllid) == -1) {
-               edg_wll_ll_log(LOG_ERR,"edg_wll_log_proto_server(): nomem for DG.LLLID\n");
-               SYSTEM_ERROR("asprintf");
-               answer = ENOMEM;
-               goto edg_wll_log_proto_server_end;
-       }
-       dglllid_size = strlen(dglllid);
-
-       /* format the DG.USER string */
-       name_esc = edg_wll_LogEscape(name);
-       if (asprintf(&dguser,"DG.USER=\"%s\" ",name_esc) == -1) {
-               edg_wll_ll_log(LOG_ERR,"edg_wll_log_proto_server(): nomem for DG.USER\n");
-               SYSTEM_ERROR("asprintf");
-               answer = ENOMEM;
-               goto edg_wll_log_proto_server_end;
-       }
-       dguser_size = strlen(dguser);
-
-       /* allocate enough memory for all data */
-       msg_size = dglllid_size + dguser_size + size + 1;
-       if ((msg = malloc(msg_size)) == NULL) {
-               edg_wll_ll_log(LOG_ERR,"edg_wll_log_proto_server(): out of memory for allocating message\n");
-               SYSTEM_ERROR("malloc");
-               answer = ENOMEM;
-               goto edg_wll_log_proto_server_end;
-       }
-       strncpy(msg,dglllid,dglllid_size);
-       msg_begin = msg + dglllid_size; // this is the "official" beginning of the message
-       strncpy(msg_begin,dguser,dguser_size);
-
-       /* receive message */
-       edg_wll_ll_log(LOG_INFO,"Reading message from socket...");
-       buf = msg_begin + dguser_size;
-       count = 0;
-       if ((err = edg_wll_gss_read_full(con, buf, size, &timeout, &count, &gss_stat)) < 0) {
-               edg_wll_ll_log(LOG_INFO,"error.\n");
-               answer = edg_wll_log_proto_server_failure(err,&gss_stat,"Error receiving message");
-               goto edg_wll_log_proto_server_end;
-       } else {
-               edg_wll_ll_log(LOG_INFO,"o.k.\n");
-       }       
-
-       if (buf[count] != '\0') buf[count] = '\0';
-
-       /* parse message and get jobId and priority from it */
-       if (!noparse && strstr(msg, "DG.TYPE=\"command\"") == NULL) {
-               edg_wll_ll_log(LOG_INFO,"Parsing message for correctness...");
-               if (edg_wll_ParseEvent(context,msg_begin,&event) != 0) { 
-                       edg_wll_ll_log(LOG_INFO,"error.\n");
-                       edg_wll_ll_log(LOG_ERR,"edg_wll_log_proto_server(): edg_wll_ParseEvent error\n");
-                       edg_wll_ll_log(LOG_ERR,"edg_wll_ParseEvent(): %s\n",context->errDesc);
-                       answer = edg_wll_Error(context,NULL,NULL);
-                       goto edg_wll_log_proto_server_end;
-               } else {
-                       edg_wll_ll_log(LOG_INFO,"o.k.\n");
-               }
-               edg_wll_ll_log(LOG_DEBUG,"Getting jobId from message...");
-               jobId = edg_wlc_JobIdGetUnique(event->any.jobId);
-               priority = event->any.priority;
-               edg_wll_FreeEvent(event);
-               event->any.priority = priority;
-               edg_wll_ll_log(LOG_DEBUG,"o.k.\n");
-       } else {
-/* FIXME: what if edg_wll_InitEvent fails? should be checked somehow -> nomem etc.  */
-               event = edg_wll_InitEvent(EDG_WLL_EVENT_UNDEF);
-/* XXX:
-               event = calloc(1,sizeof(*event));
-               if(event == NULL) {
-                       edg_wll_ll_log(LOG_ERR, "out of memory\n");
-                       answer = ENOMEM;
-                       goto edg_wll_log_proto_server_end;
-               }
-*/
-
-/* XXX: obsolete, logd now doesn't need jobId for 'command' messages,
- * it will be probably needed for writing 'command' messages to some files
-               edg_wll_ll_log(LOG_DEBUG,"Getting jobId from message...");
-               jobId = edg_wll_GetJobId(msg);
-               if (!jobId || edg_wlc_JobIdParse(jobId,&j)) {
-                       edg_wll_ll_log(LOG_DEBUG,"error.\n");
-                       edg_wll_ll_log(LOG_ERR,"ParseJobId(%s)\n",jobId?jobId:"NULL");
-                       answer = EINVAL;
-                       goto edg_wll_log_proto_server_end;
-               } else {
-                       edg_wll_ll_log(LOG_DEBUG,"o.k.\n");
-               }
-               free(jobId);
-               jobId = edg_wlc_JobIdGetUnique(j);
-               edg_wlc_JobIdFree(j);
-*/
-
-/* FIXME: get the priority from message some better way */
-               if (strstr(msg, "DG.PRIORITY=1") != NULL)
-                       event->any.priority = 1;
-               else event->any.priority = 0;
-       }
-
-
-       /* if not command, save message to file */
-       if(strstr(msg, "DG.TYPE=\"command\"") == NULL) {
-               /* compose the name of the log file */
-//             edg_wll_ll_log(LOG_DEBUG,"Composing filename from prefix \"%s\" and jobId \"%s\"...",prefix,jobId);
-               count = strlen(prefix);
-               strncpy(outfilename,prefix,count); count_total=count;
-               strncpy(outfilename+count_total,".",1); count_total+=1; count=strlen(jobId);
-               strncpy(outfilename+count_total,jobId,count); count_total+=count;
-               outfilename[count_total]='\0';
-//             edg_wll_ll_log(LOG_DEBUG,"o.k.\n");
-               edg_wll_ll_log(LOG_INFO,"Writing message to \"%s\"...",outfilename);
-
-               i = 0;
-open_event_file:
-               /* fopen and properly handle the filelock */
-               if ((outfile = fopen(outfilename,"a")) == NULL) {
-                       edg_wll_ll_log(LOG_INFO,"error.\n");
-                       SYSTEM_ERROR("fopen"); 
-                       answer = errno; 
-                       goto edg_wll_log_proto_server_end;
-               } else {
-                       edg_wll_ll_log(LOG_INFO,".");
-               }
-               if ((filedesc = fileno(outfile)) == -1) {
-                       edg_wll_ll_log(LOG_INFO,"error.\n");
-                       SYSTEM_ERROR("fileno"); 
-                       answer = errno; 
-                       fclose(outfile); 
-                       goto edg_wll_log_proto_server_end;
-               } else {
-                       edg_wll_ll_log(LOG_INFO,".");
-               }
-               filelock.l_type = F_WRLCK;
-               filelock.l_whence = SEEK_SET;
-               filelock.l_start = 0;
-               filelock.l_len = 0;
-               if ((filelock_status=fcntl(filedesc,F_SETLK,&filelock) < 0) && (i < FCNTL_ATTEMPTS)) {
-                       fclose(outfile);
-                       edg_wll_ll_log(LOG_DEBUG,"\nWaiting %d seconds for filelock to open...\n",FCNTL_TIMEOUT);
-                       sleep(FCNTL_TIMEOUT);
-                       i++;
-                       goto open_event_file;
-               }
-               if (filelock_status < 0) {
-                       edg_wll_ll_log(LOG_INFO,"error.\n");
-                       SYSTEM_ERROR("fcntl"); 
-                       answer = errno; 
-                       fclose(outfile); 
-                       goto edg_wll_log_proto_server_end;
-               } else {
-                       edg_wll_ll_log(LOG_INFO,".");
-               }
-               if (fseek(outfile, 0, SEEK_END) == -1) {
-                       SYSTEM_ERROR("fseek"); 
-                       answer = errno; 
-                       fclose(outfile); 
-                       goto edg_wll_log_proto_server_end;
-               }
-               if ((filepos=ftell(outfile)) == -1) {
-                       SYSTEM_ERROR("ftell"); 
-                       answer = errno; 
-                       fclose(outfile); 
-                       goto edg_wll_log_proto_server_end;
-               }
-               /* write, flush and sync */
-               if (fputs(msg,outfile) == EOF) {
-                       edg_wll_ll_log(LOG_INFO,"error.\n");
-                       SYSTEM_ERROR("fputs"); 
-                       answer = errno; 
-                       fclose(outfile); 
-                       goto edg_wll_log_proto_server_end;
-               }       
-               if (fflush(outfile) == EOF) {
-                       edg_wll_ll_log(LOG_INFO,"error.\n");
-                       SYSTEM_ERROR("fflush"); 
-                       answer = errno; 
-                       fclose(outfile); 
-                       goto edg_wll_log_proto_server_end;
-               }
-               if (fsync(filedesc) < 0) { /* synchronize */
-                       edg_wll_ll_log(LOG_INFO,"error.\n");
-                       SYSTEM_ERROR("fsync"); 
-                       answer = errno; 
-                       fclose(outfile); 
-                       goto edg_wll_log_proto_server_end;
-               } else {
-                       edg_wll_ll_log(LOG_INFO,"o.k.\n");
-               }
-               /* close and unlock */
-               fclose(outfile); 
-       } else {
-               filepos = 0;
-       }
-
-
-       /* if not priority send now the answer back to client */
-       if (!event->any.priority) {
-               if (!send_answer_back(con,answer,&timeout)) { 
-                       answer_sent = 1;
-               }
-       } 
-
-       /* send message via IPC (UNIX socket) */
-       if (!noipc) {
-               struct sockaddr_un saddr;
-               edg_wll_ll_log(LOG_INFO,"The message will be send via IPC (UNIX socket):\n");
-
-               /* initialize socket */
-               edg_wll_ll_log(LOG_DEBUG,"Initializing UNIX socket...\n");
-
-               edg_wll_ll_log(LOG_DEBUG,"- Getting UNIX socket descriptor...");
-               msg_sock = socket(PF_UNIX, SOCK_STREAM, 0);
-               if(msg_sock < 0) {
-                       edg_wll_ll_log(LOG_DEBUG,"error.\n");
-                       SYSTEM_ERROR("socket"); 
-                       answer = errno; 
-                       goto edg_wll_log_proto_server_end;
-               } else {
-                       edg_wll_ll_log(LOG_DEBUG,"o.k.\n");
-               }
-
-               edg_wll_ll_log(LOG_DEBUG,"- Setting UNIX socket parameters...");
-               memset(&saddr, 0, sizeof(saddr));
-               saddr.sun_family = AF_UNIX;
-               strcpy(saddr.sun_path, socket_path);
-               edg_wll_ll_log(LOG_DEBUG,"o.k.\n");
-
-               edg_wll_ll_log(LOG_DEBUG,"-- adding O_NONBLOCK to socket parameters...");
-               if ((flags = fcntl(msg_sock, F_GETFL, 0)) < 0 ||
-                       fcntl(msg_sock, F_SETFL, flags | O_NONBLOCK) < 0) {
-                       edg_wll_ll_log(LOG_DEBUG,"error.\n");
-                       SYSTEM_ERROR("fcntl"); 
-                       answer = errno; 
-                       close(msg_sock); 
-                       goto edg_wll_log_proto_server_end;
-               } else {
-                       edg_wll_ll_log(LOG_DEBUG,"o.k.\n");
-               }
-
-               /* for priority messages initialize also another socket for confirmation */
-               if (event->any.priority) {
-                       edg_wll_ll_log(LOG_DEBUG,"- Initializing 2nd UNIX socket for priority messages confirmation...");
-                       if(init_confirmation() < 0) { 
-                               edg_wll_ll_log(LOG_DEBUG,"error.\n");
-                               answer = errno; 
-                               goto edg_wll_log_proto_server_end; 
-                       } else {
-                               edg_wll_ll_log(LOG_DEBUG,"o.k.\n");
-                       }
-               }         
-
-               edg_wll_ll_log(LOG_DEBUG,"Connecting to UNIX socket...");
-               for (i=0; i < CONNECT_ATTEMPTS; i++) {
-                       if(connect(msg_sock, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) {
-                               if ((errno == EAGAIN) || (errno == ETIMEDOUT)) {
-                                       edg_wll_ll_log(LOG_DEBUG,"."); 
-                                       sleep(CONNECT_TIMEOUT);
-                                       continue;
-                               } else if (errno == EISCONN) {
-                                       edg_wll_ll_log(LOG_DEBUG,"warning.\n");
-                                       edg_wll_ll_log(LOG_ERR,"The socket is already connected!\n");
-                                       break;
-                               } else {
-                                       edg_wll_ll_log(LOG_DEBUG,"error.\n");
-                                       SYSTEM_ERROR("connect"); 
-                                       answer = errno; 
-                                       close(msg_sock); 
-                                       goto edg_wll_log_proto_server_end_1;
-                               }
-                       } else {
-                               edg_wll_ll_log(LOG_DEBUG,"o.k.\n");
-                               break;
-                       }
-               }
-
-               edg_wll_ll_log(LOG_DEBUG,"Sending via IPC the message position %ld (%d bytes)...", filepos, sizeof(filepos));
-               count = 0;
-               if (edg_wll_socket_write_full(msg_sock, &filepos, sizeof(filepos), &timeout, &count) < 0) {
-                       edg_wll_ll_log(LOG_DEBUG,"error.\n");
-                       edg_wll_ll_log(LOG_ERR,"edg_wll_socket_write_full(): error,\n");
-                       answer = errno; 
-                       close(msg_sock); 
-                       goto edg_wll_log_proto_server_end_1;
-               } else {
-                       edg_wll_ll_log(LOG_DEBUG,"o.k.\n");
-               }
-
-               edg_wll_ll_log(LOG_DEBUG,"Sending via IPC the message itself (%d bytes)...",msg_size);
-               if (edg_wll_socket_write_full(msg_sock, msg, msg_size, &timeout, &count) < 0) {
-                       edg_wll_ll_log(LOG_DEBUG,"error.\n");
-                       edg_wll_ll_log(LOG_ERR,"edg_wll_socket_write_full(): error."); 
-                       answer = errno; 
-                       close(msg_sock); 
-                       goto edg_wll_log_proto_server_end_1;
-               } else {
-                       edg_wll_ll_log(LOG_DEBUG,"o.k.\n");
-               }
-
-               close(msg_sock);
-
-               if (event->any.priority) {
-                       edg_wll_ll_log(LOG_INFO,"Waiting for confirmation...");
-                       if ((count = wait_for_confirmation(&timeout, &answer)) < 0) {
-                               edg_wll_ll_log(LOG_INFO,"error.\n");
-                               edg_wll_ll_log(LOG_ERR,"wait_for_confirmation(): error.\n"); 
-                               answer = errno;
-                       } else {
-                               edg_wll_ll_log(LOG_INFO,"o.k.\n");
-                               if (count == 0) {
-                                       edg_wll_ll_log(LOG_DEBUG,"Waking up, timeout expired.\n");
-                                       answer = EAGAIN;
-                               } else {
-                                       edg_wll_ll_log(LOG_DEBUG,"Confirmation received, waking up.\n");
-                               }
-                       }
-               }
-       } else {
-               edg_wll_ll_log(LOG_NOTICE,"Not sending via IPC.\n");
-       }
-
-edg_wll_log_proto_server_end:
-       /* if not sent already, send the answer back to client */
-       if (!answer_sent) {
-               answer = send_answer_back(con,answer,&timeout);
-       } 
-       /* clean */
-       edg_wll_FreeContext(context);
-       if (name_esc) free(name_esc);
-       if (dglllid) free(dglllid);
-       if (dguser) free(dguser);
-       if (jobId) free(jobId);
-       if (msg) free(msg);
-       if (event) free(event);
-
-       edg_wll_ll_log(LOG_INFO,"Done.\n");
-
-       return answer;
-
-edg_wll_log_proto_server_end_1:
-       if (event->any.priority) {
-               close(confirm_sock);
-               unlink(confirm_sock_name);
-       }       
-       goto edg_wll_log_proto_server_end;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * edg_wll_log_proto_server_failure - handle protocol failures on the server side
- *
- * Returns: errno
- *
- *----------------------------------------------------------------------
- */
-int edg_wll_log_proto_server_failure(int code, edg_wll_GssStatus *gss_code, const char *text)
-{
-       const char      *func = "edg_wll_log_proto_server()";
-        int             ret = 0;
-
-       if(code>0) {
-                return(0);
-       }
-       switch(code) {
-               case EDG_WLL_GSS_ERROR_EOF: 
-                       edg_wll_ll_log(LOG_ERR,"%s: %s, EOF occured\n", func, text);    
-                       ret = EAGAIN;
-                       break;
-               case EDG_WLL_GSS_ERROR_TIMEOUT: 
-                       edg_wll_ll_log(LOG_ERR,"%s: %s, timeout expired\n", func, text);        
-                       ret = EAGAIN;
-                       break;
-               /* XXX DK: co tenhle break??: */
-               case EDG_WLL_GSS_ERROR_ERRNO: perror("edg_wll_gss_read()"); break;
-                       edg_wll_ll_log(LOG_ERR,"%s: %s, system error occured\n", func, text);   
-                       ret = EAGAIN;
-                       break;
-               case EDG_WLL_GSS_ERROR_GSS:
-                       {
-                          char *gss_err;
-
-                          edg_wll_gss_get_error(gss_code, "GSS error occured", &gss_err);
-                          edg_wll_ll_log(LOG_ERR,"%s: %s, %s\n", func, text, gss_err);
-                          free(gss_err);
-                          ret = EAGAIN;
-                          break;
-                       }
-               default:
-                       edg_wll_ll_log(LOG_ERR,"%s: %s, unknown error occured\n");
-                       break;
-       }
-       return ret;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * edg_wll_ll_log_init - initialize the logging level
- *
- *----------------------------------------------------------------------
- */
-void edg_wll_ll_log_init(int level) {
-       edg_wll_ll_log_level = level;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * edg_wll_ll_log - print to stderr according to logging level
- *   serious messages are also written to syslog
- *
- *----------------------------------------------------------------------
- */
-void edg_wll_ll_log(int level, const char *fmt, ...) {
-    char *err_text;
-       va_list fmt_args;
-
-       va_start(fmt_args, fmt);
-    vasprintf(&err_text, fmt, fmt_args);
-    va_end(fmt_args);
-
-       if(level <= edg_wll_ll_log_level) 
-               fprintf(stderr, "[%d] %s", (int) getpid(), err_text);
-       if(level <= LOG_ERR) {
-        openlog("edg-wl-logd", LOG_PID | LOG_CONS, LOG_DAEMON);
-               syslog(level, "%s", err_text);
-               closelog();
-       }
-
-    if(err_text) free(err_text);
-
-    return;
-}
diff --git a/org.glite.lb.logger/src/logd_proto.h b/org.glite.lb.logger/src/logd_proto.h
deleted file mode 100644 (file)
index b8e167e..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_LOCALLOGGER_LOGD_PROTO_H__
-#define __EDG_WORKLOAD_LOGGING_LOCALLOGGER_LOGD_PROTO_H__
-
-#ident "$Header$"
-
-/**
- * \file edg/workload/logging/locallogger/logd_proto.h
- * \brief server part of the logging protocol
- * \note private
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#include <syslog.h>
-
-#include "glite/lb/log_proto.h"
-#include "glite/lb/lb_gss.h"
-
-int edg_wll_log_proto_server(edg_wll_GssConnection *con, char *name, char *prefix, int noipc, int noparse);
-int edg_wll_log_proto_server_failure(int code, edg_wll_GssStatus *gss_code, const char *text);
-
-#define SYSTEM_ERROR(my_err) { \
-       if (errno !=0 ) \
-               edg_wll_ll_log(LOG_ERR,"%s: %s\n",my_err,strerror(errno)); \
-       else \
-               edg_wll_ll_log(LOG_ERR,"%s\n",my_err); }
-
-/* locallogger daemon error handling */
-
-extern int edg_wll_ll_log_level;
-void edg_wll_ll_log_init(int level);
-void edg_wll_ll_log(int level, const char *fmt, ...);
-
-
-/* fcntl defaults */
-
-#define FCNTL_ATTEMPTS         5
-#define FCNTL_TIMEOUT          1
-
-
-/* connect defaults */
-
-#define CONNECT_ATTEMPTS       50
-#define CONNECT_TIMEOUT                10
-
-
-/* locallogger daemon listen and connect functions prototypes */
-
-int do_listen(int port);
-int do_connect(char *hostname, int port);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __EDG_WORKLOAD_LOGGING_LOCALLOGGER_LOGD_PROTO_H__ */
diff --git a/org.glite.lb.logger/src/queue_mgr.c b/org.glite.lb.logger/src/queue_mgr.c
deleted file mode 100644 (file)
index abae1f3..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-#ident "$Header$"
-
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-
-#include "glite/lb/consumer.h"
-
-#include "interlogd.h"
-
-struct queue_list {
-  struct event_queue *queue;
-  char   *dest;
-  struct queue_list *next;
-};
-
-static struct event_queue *log_queue;
-static struct queue_list  *queues;
-
-
-static 
-int
-queue_list_create()
-{
-  queues = NULL;
-
-  return(0);
-}
-
-
-static
-int
-queue_list_find(struct queue_list *ql, const char *dest, struct queue_list **el, struct queue_list **prev)
-{
-  struct queue_list *q, *p;
-
-  assert(el != NULL);
-
-  *el = NULL;
-  if(prev)
-    *prev = NULL;
-
-  if(ql == NULL) 
-    return(0);
-
-  q = NULL;
-  p = ql;
-
-  while(p) {
-    if(strcmp(p->dest, dest) == 0) {
-      *el = p;
-      if(prev)
-       *prev = q;
-      return(1);
-    }
-
-    q = p;
-    p = p->next;
-  };
-
-  return(0);
-}
-
-
-static
-int
-queue_list_add(struct queue_list **ql, const char *dest, struct event_queue *eq)
-{
-  struct queue_list *el;
-  
-  assert(dest != NULL);
-  assert(eq != NULL);
-  assert(ql != NULL);
-
-  el = malloc(sizeof(*el));
-  if(el == NULL) {
-    set_error(IL_NOMEM, ENOMEM, "queue_list_add: not enough room for new queue");
-    return(-1);
-  }
-
-  el->dest = strdup(dest);
-  if(el->dest == NULL) {
-    free(el);
-    set_error(IL_NOMEM, ENOMEM, "queue_list_add: not enough memory for new queue");
-    return(-1);
-  }
-  el->queue = eq;
-  el->next = queues;
-  *ql = el;
-  return 0;
-}
-
-
-/*
-static
-int
-queue_list_remove(struct queue_list *el, struct queue_list *prev)
-{
-  assert(el != NULL);
-
-  if(prev) 
-    prev->next = el->next;
-  else
-    queues = el->next;
-
-  free(el);
-  return(1);
-}
-*/
-
-
-#if !defined(IL_NOTIFICATIONS)
-static
-char *
-jobid2dest(edg_wlc_JobId jobid)
-{
-  char *server_name,*out;
-  unsigned int server_port;
-
-  if (!jobid) {
-    set_error(IL_PROTO, EDG_WLL_ERROR_PARSE_BROKEN_ULM, "jobid2dest: invalid job id");
-    return(NULL);
-  }
-  edg_wlc_JobIdGetServerParts(jobid,&server_name,&server_port);
-
-  asprintf(&out,"%s:%d",server_name,server_port);
-  free(server_name);
-  if(!out)
-    set_error(IL_SYS, ENOMEM, "jobid2dest: error creating server name");
-  return(out);
-}
-#endif
-
-struct event_queue *
-queue_list_get(char *job_id_s)
-{
-  char *dest;
-  struct queue_list *q;
-  struct event_queue *eq;
-#if !defined(IL_NOTIFICATIONS)
-  IL_EVENT_ID_T job_id;
-
-  if(job_id_s == NULL || strcmp(job_id_s, "default") == 0)
-    return(log_queue);
-
-  if(edg_wlc_JobIdParse(job_id_s, &job_id)) {
-    set_error(IL_LBAPI, EDG_WLL_ERROR_PARSE_BROKEN_ULM, "queue_list_get: invalid job id");
-    return(NULL);
-  }
-
-  dest = jobid2dest(job_id);
-  edg_wlc_JobIdFree(job_id);
-#else
-  dest = job_id_s;
-#endif
-
-  if(dest == NULL) 
-    return(NULL);
-  
-  if(queue_list_find(queues, dest, &q, NULL)) {
-#if !defined(IL_NOTIFICATIONS)
-    free(dest);
-#endif
-    return(q->queue);
-  } else {
-    eq = event_queue_create(dest);
-    if(eq)
-      queue_list_add(&queues, dest, eq);
-#if !defined(IL_NOTIFICATIONS)
-    free(dest);
-#endif
-    return(eq);
-  }
-}
-
-
-int
-queue_list_is_log(struct event_queue *eq)
-{
-  return(eq == queue_list_get(NULL));
-}
-
-
-int
-queue_list_init(char *ls)
-{
-#if !defined(IL_NOTIFICATIONS)
-  /* create queue for log server */
-  log_queue = event_queue_create(ls);
-  if(log_queue == NULL)
-    return(-1);
-#endif
-
-  return(queue_list_create());
-}
-
-
-static struct queue_list *current;
-
-
-struct event_queue *
-queue_list_first()
-{
-  current = queues;
-  return(current ? current->queue : NULL);
-}
-
-
-struct event_queue *
-queue_list_next()
-{
-  current = current ? current->next : NULL;
-  return(current ? current->queue : NULL);
-}
-
-#if defined(IL_NOTIFICATIONS)
-
-static struct queue_list  *notifid_map = NULL;
-
-struct event_queue *
-notifid_map_get_dest(const char * notif_id)
-{
-       struct queue_list *q = NULL;
-
-       queue_list_find(notifid_map, notif_id, &q, NULL);
-       return(q ? q->queue : NULL);
-}
-
-
-/* returns 1 if mapping was changed, 0 if new one had to be created, -1 on error */
-int
-notifid_map_set_dest(const char *notif_id, struct event_queue *eq)
-{
-       struct queue_list *q;
-
-       if(queue_list_find(notifid_map, notif_id, &q, NULL)) {
-               q->queue = eq;
-               return(1);
-       } else {
-               return(queue_list_add(&notifid_map, notif_id, eq));
-       }
-}
-
-#endif
diff --git a/org.glite.lb.logger/src/queue_thread.c b/org.glite.lb.logger/src/queue_thread.c
deleted file mode 100644 (file)
index 5eeff30..0000000
+++ /dev/null
@@ -1,357 +0,0 @@
-#ident "$Header$"
-
-#include <stdio.h>
-#include <assert.h>
-#include <errno.h>
-#include <signal.h>
-
-#include "interlogd.h"
-
-static 
-void 
-queue_thread_cleanup(void *q)
-{
-       struct event_queue *eq = (struct event_queue *)q;
-
-       il_log(LOG_WARNING, "thread %d exits\n", eq->thread_id);
-
-       /* unlock all held locks */
-       /* FIXME: check that the thread always exits when holding these locks;
-          unlock them at appropriate places if this condition is not met  
-          event_queue_unlock(eq);
-          event_queue_cond_unlock(eq);
-       */
-  
-       /* clear thread id */
-       eq->thread_id = 0;
-}
-
-
-static
-void *
-queue_thread(void *q)
-{
-       struct event_queue *eq = (struct event_queue *)q;
-       int ret, exit, flushing;
-
-       if(init_errors(0) < 0) {
-               il_log(LOG_ERR, "Error initializing thread specific data, exiting!");
-               pthread_exit(NULL);
-       }
-  
-       pthread_cleanup_push(queue_thread_cleanup, q); 
-
-       event_queue_cond_lock(eq);
-
-       exit = 0;
-       while(!exit) {
-    
-               clear_error();
-
-               /* if there are no events, wait for them */
-               ret = 0;
-               while (event_queue_empty(eq) 
-#if defined(INTERLOGD_HANDLE_CMD) && defined(INTERLOGD_FLUSH)
-                      && ((flushing=eq->flushing) != 1)
-#endif
-                       ) {
-                       ret = event_queue_wait(eq, 0);
-                       if(ret < 0) {
-                               /* error waiting */
-                               il_log(LOG_ERR, "queue_thread: %s\n", error_get_msg());
-                               event_queue_cond_unlock(eq);
-                               pthread_exit((void*)-1);
-                       }
-               }  /* END while(empty) */
-    
-               il_log(LOG_DEBUG, "  attempting delivery to %s:%d\n", eq->dest_name, eq->dest_port);
-
-               /* allow other threads to signal us, ie. insert new events while
-                * we are sending or request flush operation
-                */
-               event_queue_cond_unlock(eq);
-               
-               /* connect to server */
-               if((ret=event_queue_connect(eq)) == 0) {
-                       /* not connected */
-                       if(error_get_maj() != IL_OK)
-                               il_log(LOG_ERR, "queue_thread: %s\n", error_get_msg());
-#if defined(IL_NOTIFICATIONS)
-                       il_log(LOG_INFO, "    could not connect to client %s, waiting for retry\n", eq->dest_name);
-#else
-                       il_log(LOG_INFO, "    could not connect to bookkeeping server %s, waiting for retry\n", eq->dest_name);
-#endif
-               } else {
-                       /* connected, send events */
-                       switch(ret=event_queue_send(eq)) {
-                               
-                       case 0:
-                               /* there was an error and we still have events to send */
-                               if(error_get_maj() != IL_OK)
-                                       il_log(LOG_ERR, "queue_thread: %s\n", error_get_msg());
-                               il_log(LOG_DEBUG, "  events still waiting\n");
-                               break;
-                               
-                       case 1:
-                               /* hey, we are done for now */
-                               il_log(LOG_DEBUG, "  all events for %s sent\n", eq->dest_name);
-                               break;
-                               
-                       default:
-                               /* internal error */
-                               il_log(LOG_ERR, "queue_thread: %s\n", error_get_msg());
-                               exit = 1;      
-                               break;
-                               
-                       } /* switch */
-                       
-                       /* we are done for now anyway, so close the queue */
-                               event_queue_close(eq);
-               } 
-
-#if defined(INTERLOGD_HANDLE_CMD) && defined(INTERLOGD_FLUSH)
-               if(pthread_mutex_lock(&flush_lock) < 0)
-                       abort();
-               event_queue_cond_lock(eq);
-
-               /* Check if we are flushing and if we are, report status to master */
-               if(flushing == 1) {
-                       il_log(LOG_DEBUG, "    flushing mode detected, reporting status\n");
-                       /* 0 - events waiting, 1 - events sent, < 0 - some error */
-                       eq->flush_result = ret;
-                       eq->flushing = 2;
-                       if(pthread_cond_signal(&flush_cond) < 0)
-                               abort();
-               }
-               if(pthread_mutex_unlock(&flush_lock) < 0)
-                       abort();
-#else
-               event_queue_cond_lock(eq);
-#endif
-
-               /* if there was some error with server, sleep for a while */
-               /* iff !event_queue_empty() */
-               if(ret == 0) 
-                       event_queue_sleep(eq);
-
-               if(exit) {
-                       /* we have to clean up before exiting */
-                       event_queue_cond_unlock(eq);
-               }
-    
-       } /* while */
-
-       pthread_cleanup_pop(1);
-
-       return(eq);
-}
-
-
-int
-event_queue_create_thread(struct event_queue *eq)
-{
-       assert(eq != NULL);
-
-       /* if there is a thread already, just return */
-       if(eq->thread_id > 0)
-               return(0);
-
-       /* create the thread itself */
-       if(pthread_create(&eq->thread_id, NULL, queue_thread, eq) < 0) {
-               eq->thread_id = 0;
-               set_error(IL_SYS, errno, "event_queue_create_thread: error creating new thread");
-               return(-1);
-       }
-
-       /* the thread is never going to be joined */
-       pthread_detach(eq->thread_id);
-
-       return(1);
-}
-
-
-
-int
-event_queue_lock(struct event_queue *eq)
-{
-       assert(eq != NULL);
-
-       if(pthread_rwlock_wrlock(&eq->update_lock)) {
-               /*** abort instead, this is too serious
-               set_error(IL_SYS, errno, "event_queue_lock: error acquiring write lock");
-               return(-1);
-               */
-               abort();
-       }
-
-       return(0);
-}
-
-
-int
-event_queue_lock_ro(struct event_queue *eq)
-{
-       assert(eq != NULL);
-
-       if(pthread_rwlock_rdlock(&eq->update_lock)) {
-               /*** abort instead, this is too serious
-               set_error(IL_SYS, errno, "event_queue_lock_ro: error acquiring read lock");
-               return(-1);
-               */
-               abort();
-       }
-
-       return(0);
-}
-
-
-int
-event_queue_unlock(struct event_queue *eq)
-{
-       assert(eq != NULL);
-
-       if(pthread_rwlock_unlock(&eq->update_lock)) {
-               /*** abort instead, this is too serious
-               set_error(IL_SYS, errno, "event_queue_unlock: error releasing lock");
-               return(-1);
-               */
-               abort();
-       }
-
-       return(0);
-}
-
-
-int
-event_queue_signal(struct event_queue *eq)
-{
-       assert(eq != NULL);
-
-       if(pthread_cond_signal(&eq->ready_cond)) {
-               /*** abort instead, this is too serious
-               set_error(IL_SYS, errno, "event_queue_signal: error signaling queue thread");
-               return(-1);
-               */
-               abort();
-       }
-       return(0);
-}
-
-
-int
-event_queue_wait(struct event_queue *eq, int timeout)
-{
-       assert(eq != NULL);
-
-       if(timeout) {
-               struct timespec endtime;
-               int  ret = 0;
-
-               endtime.tv_sec = time(NULL) + timeout;
-               endtime.tv_nsec = 0;
-               
-               if((ret=pthread_cond_timedwait(&eq->ready_cond, &eq->cond_lock, &endtime))) {
-                       if(ret == ETIMEDOUT) 
-                               return(1);
-                       /*** abort instead, this is too serious
-                       set_error(IL_SYS, errno, "event_queue_wait: error waiting on condition variable");
-                       return(-1);
-                       */
-                       abort();
-               }
-       } else {
-               if(pthread_cond_wait(&eq->ready_cond, &eq->cond_lock)) {
-                       /*** abort instead, this is too serious
-                       set_error(IL_SYS, errno, "event_queue_wait: error waiting on condition variable");
-                       return(-1);
-                       */
-                       abort();
-               }
-       }
-       return(0);
-}
-
-
-int event_queue_sleep(struct event_queue *eq)
-{
-#if defined(INTERLOGD_HANDLE_CMD) && defined(INTERLOGD_FLUSH)
-       struct timespec ts;
-       struct timeval tv;
-       int ret;
-
-       assert(eq != NULL);
-
-       gettimeofday(&tv, NULL);
-       ts.tv_sec = tv.tv_sec + eq->timeout;
-       ts.tv_nsec = 1000 * tv.tv_usec;
-       if((ret=pthread_cond_timedwait(&eq->flush_cond, &eq->cond_lock, &ts)) < 0) {
-               if(ret != ETIMEDOUT) {
-                       /*** abort instead, this is too serious
-                       set_error(IL_SYS, errno, "event_queue_sleep: error waiting on condition");
-                       return(-1);
-                       */
-                       abort();
-               }
-       }
-#else
-       sleep(eq->timeout);
-#endif
-       return(0);
-}
-
-
-#if defined(INTERLOGD_HANDLE_CMD)
-int event_queue_wakeup(struct event_queue *eq)
-{
-       assert(eq != NULL);
-
-       if(pthread_cond_signal(&eq->ready_cond)) {
-               /**
-               set_error(IL_SYS, errno, "event_queue_wakeup: error signaling queue thread");
-               return(-1);
-               */
-               abort();
-       }
-#if defined(INTERLOGD_FLUSH)
-       if(pthread_cond_signal(&eq->flush_cond)) {
-               /**
-               set_error(IL_SYS, errno, "event_queue_wakeup: error signaling queue thread");
-               return(-1);
-               */
-               abort();
-       }
-#endif
-       return(0);
-}
-#endif
-
-int event_queue_cond_lock(struct event_queue *eq)
-{
-       assert(eq != NULL);
-
-       if(pthread_mutex_lock(&eq->cond_lock)) {
-               /**
-               set_error(IL_SYS, errno, "event_queue_cond_lock: error locking condition mutex");
-               return(-1);
-               */
-               abort();
-       }
-
-       return(0);
-}
-
-
-int event_queue_cond_unlock(struct event_queue *eq)
-{
-       assert(eq != NULL);
-
-       if(pthread_mutex_unlock(&eq->cond_lock)) {
-               /**
-               set_error(IL_SYS, errno, "event_queue_cond_unlock: error locking condition mutex");
-               return(-1);
-               */
-               abort();
-       }
-
-       return(0);
-}
diff --git a/org.glite.lb.logger/src/recover.c b/org.glite.lb.logger/src/recover.c
deleted file mode 100644 (file)
index ed31186..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-#ident "$Header$"
-
-#include <stdio.h>
-#include <assert.h>
-#include <errno.h>
-
-#include "interlogd.h"
-
-extern char *file_prefix;
-
-extern time_t cert_mtime, key_mtime;
-
-void *
-recover_thread(void *q)
-{
-       if(init_errors(0) < 0) {
-               il_log(LOG_ERR, "Error initializing thread specific data, exiting!");
-               pthread_exit(NULL);
-       }
-
-       while(1) {
-               il_log(LOG_INFO, "Looking up event files...\n");
-               if(event_store_init(file_prefix) < 0) {
-                       il_log(LOG_ERR, "recover_thread: %s\n", error_get_msg());
-                       exit(1);
-               }
-               if(event_store_recover_all() < 0) {
-                       il_log(LOG_ERR, "recover_thread: %s\n", error_get_msg());
-                       exit(1);
-               }
-               if(event_store_cleanup() < 0) {
-                       il_log(LOG_ERR, "recover_thread: %s\n", error_get_msg());
-                       exit(1);
-               }
-               il_log(LOG_INFO, "Checking for new certificate...\n");
-               if(pthread_mutex_lock(&cred_handle_lock) < 0)
-                       abort();
-               if (edg_wll_gss_watch_creds(cert_file, &cert_mtime) > 0) {
-                       gss_cred_id_t new_cred_handle = GSS_C_NO_CREDENTIAL;
-                       OM_uint32 min_stat;
-                       int ret;
-
-                       ret = edg_wll_gss_acquire_cred_gsi(cert_file,key_file, 
-                               &new_cred_handle, NULL, NULL);
-                       if (new_cred_handle != GSS_C_NO_CREDENTIAL) {
-                               gss_release_cred(&min_stat, &cred_handle);
-                               cred_handle = new_cred_handle;
-                               il_log(LOG_INFO, "New certificate found and deployed.\n");
-                       }
-               }
-               if(pthread_mutex_unlock(&cred_handle_lock) < 0)
-                       abort();
-               sleep(INPUT_TIMEOUT);
-       }
-}
diff --git a/org.glite.lb.logger/src/send_event.c b/org.glite.lb.logger/src/send_event.c
deleted file mode 100644 (file)
index 5d8958f..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-#ident "$Header$"
-
-#include <assert.h>
-#include <errno.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-
-/*
- *   - L/B server protocol handling routines 
- */
-
-#include "glite/wmsutils/jobid/cjobid.h"
-#include "glite/lb/il_string.h"
-#include "glite/lb/context.h"
-
-#include "interlogd.h"
-
-#if defined(INTERLOGD_EMS) || (defined(INTERLOGD_HANDLE_CMD) && defined(INTERLOGD_FLUSH))
-/* 
- * Send confirmation to client.
- *
- */
-int
-send_confirmation(long lllid, int code)
-{
-  struct sockaddr_un saddr;
-  char sname[256];
-  int  sock, ret;
-
-  if((sock=socket(PF_UNIX, SOCK_STREAM, 0)) < 0) {
-    set_error(IL_SYS, errno, "send_confirmation: error creating socket");
-    return(-1);
-  }
-
-  if(fcntl(sock, F_SETFL, O_NONBLOCK) < 0) {
-         set_error(IL_SYS, errno, "send_confirmation: error setting socket options");
-         return(-1);
-  }
-
-  ret = 0;
-  memset(&saddr, 0, sizeof(saddr));
-  saddr.sun_family = AF_UNIX;
-  snprintf(sname, sizeof(sname), "/tmp/dglogd_sock_%ld", lllid);
-  strcpy(saddr.sun_path, sname);
-  if(connect(sock, (struct sockaddr *)&saddr, sizeof(saddr.sun_path)) < 0) {
-    set_error(IL_SYS, errno, "send_confirmation: error connecting socket");
-    goto out;
-  }
-
-  if(send(sock, &code, sizeof(code), MSG_NOSIGNAL) < 0) {
-    set_error(IL_SYS, errno, "send_confirmation: error sending data");
-    goto out;
-  }
-  ret = 1;
-
-  il_log(LOG_DEBUG, "  sent code %d back to client\n", code);
-
- out:
-  close(sock);
-  return(ret);
-}
-
-
-static 
-int
-confirm_msg(struct server_msg *msg, int code, int code_min)
-{
-       switch(code) {
-       case LB_OK:
-               code_min = 0;
-               break;
-       case LB_DBERR:
-               /* code_min already contains apropriate error code */
-               break;
-       case LB_PROTO:
-               code_min = EDG_WLL_IL_PROTO;
-               break;
-       default:
-               code_min = EDG_WLL_IL_SYS;
-               break;
-       }
-  
-       return(send_confirmation(msg->receipt_to, code_min));
-}
-#endif
-
-
-/*
- * Read reply from server.
- *  Returns: -1 - error reading message, 
- *         code > 0 - error code from server
- */
-static
-int 
-get_reply(struct event_queue *eq, char **buf, int *code_min)
-{
-  char buffer[17];
-  char *msg, *p;
-  int inlen, code;
-  size_t len, l;
-  edg_wll_GssConnection *gss;
-  struct timeval tv;
-  edg_wll_GssStatus gss_stat;
-
-  gss = &eq->gss;
-
-  /* get message header */
-  tv.tv_sec = TIMEOUT;
-  tv.tv_usec = 0;
-  code = edg_wll_gss_read_full(gss, buffer, 17, &tv, &len, &gss_stat);
-  if(code < 0) {
-    char *gss_err = NULL;
-
-    if (code == EDG_WLL_GSS_ERROR_GSS)
-       edg_wll_gss_get_error(&gss_stat, "get_reply (header)", &gss_err);
-    set_error(IL_DGGSS, code,
-             (code == EDG_WLL_GSS_ERROR_GSS) ? gss_err : "get_reply (header)");
-    if (gss_err) free(gss_err);
-    return(-1);
-  }
-    
-  buffer[16] = 0;
-
-  sscanf(buffer, "%d", &inlen);
-  if(inlen < 0 || inlen > MAXLEN) {
-    set_error(IL_PROTO, LB_NOMEM, "get_reply: error reading reply length");
-    return(-1);
-  }
-  len = (size_t) inlen;
-
-  /* allocate room for message body */
-  if((msg = malloc(len)) == NULL) {
-    set_error(IL_NOMEM, ENOMEM, "get_reply: no room for message body");
-    return(-1);
-  }
-
-  /* read all the data */
-  tv.tv_sec = TIMEOUT;
-  tv.tv_usec = 0;
-  code = edg_wll_gss_read_full(gss, msg, len, &tv, &l, &gss_stat);
-  if(code < 0) {
-    char *gss_err = NULL;
-
-    if (code == EDG_WLL_GSS_ERROR_GSS)
-       edg_wll_gss_get_error(&gss_stat, "get_reply (body)", &gss_err);
-    set_error(IL_DGGSS, code,
-             (code == EDG_WLL_GSS_ERROR_GSS) ? gss_err : "get_reply (body)"); 
-    if (gss_err) free(gss_err);
-    return(-1);
-  }
-
-  p = msg;
-  p = get_int(p, &code);
-  if(p == NULL) {
-    set_error(IL_PROTO, LB_PROTO, "get_reply: error receiving result code");
-    free(msg);
-    return(-1);
-  }
-  p = get_int(p, code_min);
-  if(p == NULL) {
-    set_error(IL_PROTO, LB_PROTO, "get_reply: error receiving result code minor");
-    free(msg);
-    return(-1);
-  }
-  p = get_string(p, buf);
-  if(p == NULL) {
-    if(*buf) {
-      free(*buf);
-      *buf = NULL;
-    }
-    free(msg);
-    set_error(IL_PROTO, LB_PROTO, "get_reply: error receiving result string");
-    return(-1);
-  }
-  free(msg);
-  return(code);
-}
-
-
-
-/*
- *  Returns: 0 - not connected, timeout set, 1 - OK
- */
-int 
-event_queue_connect(struct event_queue *eq)
-{
-  int ret;
-  struct timeval tv;
-  edg_wll_GssStatus gss_stat;
-
-  assert(eq != NULL);
-
-  if(eq->gss.context == GSS_C_NO_CONTEXT) {
-
-    tv.tv_sec = TIMEOUT;
-    tv.tv_usec = 0;
-    if(pthread_mutex_lock(&cred_handle_lock) < 0)
-           abort();
-    il_log(LOG_DEBUG, "    trying to connect to %s:%d\n", eq->dest_name, eq->dest_port);
-    ret = edg_wll_gss_connect(cred_handle, eq->dest_name, eq->dest_port, &tv, &eq->gss, &gss_stat);
-    if(pthread_mutex_unlock(&cred_handle_lock) < 0)
-           abort();
-    if(ret < 0) {
-      char *gss_err = NULL;
-
-      if (ret == EDG_WLL_GSS_ERROR_GSS)
-        edg_wll_gss_get_error(&gss_stat, "event_queue_connect: edg_wll_gss_connect", &gss_err);
-      set_error(IL_DGGSS, ret,
-               (ret == EDG_WLL_GSS_ERROR_GSS) ? gss_err : "event_queue_connect: edg_wll_gss_connect");
-      if (gss_err) free(gss_err);
-      eq->gss.context = GSS_C_NO_CONTEXT;
-      eq->timeout = TIMEOUT;
-      return(0);
-    }
-  }
-
-  return(1);
-}
-
-
-int
-event_queue_close(struct event_queue *eq)
-{
-  assert(eq != NULL);
-
-  if(eq->gss.context != GSS_C_NO_CONTEXT) {
-    edg_wll_gss_close(&eq->gss, NULL);
-    eq->gss.context = GSS_C_NO_CONTEXT;
-  }
-  return(0);
-}
-
-
-/* 
- * Send all events from the queue.
- *   Returns: -1 - system error, 0 - not send, 1 - queue empty
- */
-int 
-event_queue_send(struct event_queue *eq)
-{
-  assert(eq != NULL);
-
-  if(eq->gss.context == GSS_C_NO_CONTEXT)
-    return(0);
-
-  /* feed the server with events */
-  while (!event_queue_empty(eq)) {
-    struct server_msg *msg;
-    char *rep;
-    int  ret, code, code_min;
-    size_t bytes_sent;
-    struct timeval tv;
-    edg_wll_GssStatus gss_stat;
-
-    clear_error();
-
-    if(event_queue_get(eq, &msg) < 0) 
-      return(-1);
-
-    il_log(LOG_DEBUG, "    trying to deliver event at offset %d for job %s\n", msg->offset, msg->job_id_s);
-
-    tv.tv_sec = TIMEOUT;
-    tv.tv_usec = 0;
-    ret = edg_wll_gss_write_full(&eq->gss, msg->msg, msg->len, &tv, &bytes_sent, &gss_stat);
-    if(ret < 0) {
-      eq->timeout = TIMEOUT;
-      return(0);
-    }
-    
-    if((code = get_reply(eq, &rep, &code_min)) < 0) {
-      /* could not get the reply properly, so try again later */
-      il_log(LOG_ERR, "  error reading server %s reply:\n    %s\n", eq->dest_name, error_get_msg());
-      eq->timeout = TIMEOUT;
-      return(0);
-    }
-    
-    il_log(LOG_DEBUG, "    event sent, server %s replied with %d, %s\n", eq->dest_name, code, rep);
-    free(rep);
-
-    /* the reply is back here */
-    switch(code) {
-      
-           /* NOT USED: case LB_TIME: */
-    case LB_NOMEM:
-           /* NOT USED: case LB_SYS:  */
-           /* NOT USED: case LB_AUTH: */
-      /* non fatal errors (for us) */
-      eq->timeout = TIMEOUT;
-      return(0);
-       
-    case LB_OK:
-      /* event succesfully delivered */
-      
-    default: /* LB_DBERR, LB_PROTO */
-      /* the event was not accepted by the server */
-      /* update the event pointer */
-      if(event_store_commit(msg->es, msg->ev_len, queue_list_is_log(eq)) < 0) 
-       /* failure committing message, this is bad */
-       return(-1);
-      /* if we have just delivered priority message from the queue, send confirmation */
-      ret = 1;
-#if defined(INTERLOGD_EMS)
-      if(server_msg_is_priority(msg) &&
-        ((ret=confirm_msg(msg, code, code_min)) < 0))
-       return(ret);
-#endif
-
-      if((ret == 0) &&
-        (error_get_maj() != IL_OK))
-         il_log(LOG_ERR, "send_event: %s\n", error_get_msg());
-       
-      event_queue_remove(eq);
-      break;
-      
-    } /* switch */
-  } /* while */
-
-  return(1);
-
-} /* send_events */
-
-
diff --git a/org.glite.lb.logger/src/server_msg.c b/org.glite.lb.logger/src/server_msg.c
deleted file mode 100644 (file)
index aa7e75c..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-#ident "$Header$"
-
-#include <errno.h>
-#include <assert.h>
-#include <string.h>
-
-#include "interlogd.h"
-#include "glite/lb/il_string.h"
-#include "glite/lb/events_parse.h"
-#include "glite/lb/consumer.h"
-#include "glite/lb/context.h"
-
-static
-int 
-create_msg(char *event, char **buffer, long *receipt)
-{
-  char *p;  int  len;
-  char *ucs = "michal";
-  
-  *receipt = 0;
-
-#if defined(INTERLOGD_EMS)
-  /* find DG.LLLID */
-  if(strncmp(event, "DG.LLLID",8) == 0 ||
-       strncmp(event, "DG.LLPID",8) == 0) { /* 8 == strlen("DG.LLLID") */
-
-    /* skip the key */
-    event += 9;  /* 9 = strlen("DG.LLLID=") */
-    *receipt = atol(event);
-    p = strchr(event, ' ');
-    if(!p) {
-      set_error(IL_LBAPI, EDG_WLL_ERROR_PARSE_BROKEN_ULM, 
-               "create_msg: error parsing locallogger PID");
-      return(-1);
-    }
-    /* skip the value */
-    event = p + 1;
-
-    /* find DG.PRIORITY */
-    p = strstr(event, "DG.PRIORITY");
-    if(p) {
-      int n;
-      
-      p += 12; /* skip the key and = */
-      if((n = atoi(p)) == 0) {
-       /* normal asynchronous message */
-       *receipt = 0;
-      }
-    } else {
-      /* could not find priority key */
-      *receipt = 0;
-    }
-    
-  } else {
-    /* could not find local logger PID, confirmation can not be sent */
-    *receipt = 0;
-  }
-#endif
-
-  /* allocate enough room to hold the message */
-  len = 17 + len_string(ucs) + len_string(event);
-  if((*buffer = malloc(len)) == NULL) {
-    set_error(IL_NOMEM, ENOMEM, "create_msg: out of memory allocating message");
-    return(-1);
-  }
-
-  p = *buffer;
-
-  /* write header */
-  sprintf(p, "%16d\n", len - 17);
-  p += 17;
-
-  /* write rest of the message */
-  p = put_string(p, ucs);
-  p = put_string(p, event);
-
-  return(p - *buffer);
-
-}
-
-
-struct server_msg *
-server_msg_create(char *event, long offset)
-{
-  struct server_msg *msg;
-
-  msg = malloc(sizeof(*msg));
-  if(msg == NULL) {
-    set_error(IL_NOMEM, ENOMEM, "server_msg_create: out of memory allocating message");
-    return(NULL);
-  }
-
-  if(server_msg_init(msg, event) < 0) {
-    server_msg_free(msg);
-    return(NULL);
-  }
-  msg->offset = offset;
-
-  return(msg);
-}
-
-
-struct server_msg *
-server_msg_copy(struct server_msg *src)
-{
-  struct server_msg *msg;
-
-  msg = malloc(sizeof(*msg));
-  if(msg == NULL) {
-    set_error(IL_NOMEM, ENOMEM, "server_msg_copy: out of memory allocating message");
-    return(NULL);
-  }
-  
-  msg->msg = malloc(src->len);
-  if(msg->msg == NULL) {
-    set_error(IL_NOMEM, ENOMEM, "server_msg_copy: out of memory allocating server message");
-    server_msg_free(msg);
-    return(NULL);
-  }
-  msg->len = src->len;
-  memcpy(msg->msg, src->msg, src->len);
-
-  msg->job_id_s = strdup(src->job_id_s);
-  msg->ev_len = src->ev_len;
-  msg->es = src->es;
-  msg->receipt_to = src->receipt_to;
-  msg->offset = src->offset;
-#if defined(IL_NOTIFICATIONS)
-  msg->dest_name = strdup(src->dest_name);
-  msg->dest_port = src->dest_port;
-  msg->dest = strdup(src->dest);
-#endif
-  return(msg);
-}
-
-
-int
-server_msg_init(struct server_msg *msg, char *event)
-{
-#if defined(IL_NOTIFICATIONS)
-       edg_wll_Context context;
-       edg_wll_Event *notif_event;
-       int ret;
-#endif
-
-       assert(msg != NULL);
-
-       memset(msg, 0, sizeof(*msg));
-
-
-#if defined(IL_NOTIFICATIONS)
-       edg_wll_InitContext(&context);
-
-       /* parse the notification event */
-       if((ret=edg_wll_ParseNotifEvent(context, event, &notif_event))) {
-               set_error(IL_LBAPI, ret, "server_msg_init: error parsing notification event");
-               return(-1);
-       }
-       /* FIXME: check for allocation error */
-       if(notif_event->notification.dest_host && 
-          (strlen(notif_event->notification.dest_host) > 0)) {
-               msg->dest_name = strdup(notif_event->notification.dest_host);
-               msg->dest_port = notif_event->notification.dest_port;
-               asprintf(&msg->dest, "%s:%d", msg->dest_name, msg->dest_port);
-       }
-       msg->job_id_s = edg_wll_NotifIdUnparse(notif_event->notification.notifId);
-       if(notif_event->notification.jobstat && 
-          (strlen(notif_event->notification.jobstat) > 0)) {
-               msg->len = create_msg(event, &msg->msg, &msg->receipt_to);
-       }
-       edg_wll_FreeEvent(notif_event);
-       free(notif_event);
-       if(msg->len < 0) {
-               return(-1);
-       }
-#else
-       msg->len = create_msg(event, &msg->msg, &msg->receipt_to);
-       if(msg->len < 0) {
-               return(-1);
-       }
-       msg->job_id_s = edg_wll_GetJobId(event);
-#endif
-       /* remember to add event separator to the length */
-       msg->ev_len = strlen(event) + 1;
-
-       if(msg->job_id_s == NULL) {
-               set_error(IL_LBAPI, EDG_WLL_ERROR_PARSE_BROKEN_ULM, "server_msg_init: error getting id");
-               return(-1);
-       }
-       
-       return(0);
-}
-
-
-int
-server_msg_is_priority(struct server_msg *msg)
-{
-  assert(msg != NULL);
-
-  return(msg->receipt_to != 0);
-}
-
-
-int
-server_msg_free(struct server_msg *msg)
-{
-  assert(msg != NULL);
-
-  if(msg->msg) free(msg->msg);
-  if(msg->job_id_s) free(msg->job_id_s);
-#if defined(IL_NOTIFICATIONS)
-  if(msg->dest_name) free(msg->dest_name);
-  if(msg->dest) free(msg->dest);
-#endif
-  free(msg);
-  return 0;
-}
diff --git a/org.glite.lb.logger/test/IlTestBase.cpp b/org.glite.lb.logger/test/IlTestBase.cpp
deleted file mode 100644 (file)
index a6b4624..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "IlTestBase.h"
-
-#include <string.h>
-
-const char *IlTestBase::msg = "DATE=20040831150159.702224 HOST=\"some.host\" PROG=edg-wms LVL=USAGE DG.PRIORITY=0 DG.SOURCE=\"UserInterface\" DG.SRC_INSTANCE=\"\" DG.EVNT=\"RegJob\" DG.JOBID=\"https://some.host:1234/x67qr549qc\" DG.SEQCODE=\"UI=2:NS=0:WM=0:BH=1:JSS=0:LM=0:LRMS=0:APP=0\" DG.USER=\"/C=CZ/O=Cesnet/CN=Michal Vocu\" DG.REGJOB.JDL=\"\" DG.REGJOB.NS=\"ns address\" DG.REGJOB.PARENT=\"\" DG.REGJOB.JOBTYPE=\"SIMPLE\" DG.REGJOB.NSUBJOBS=\"0\" DG.REGJOB.SEED=\"\"";
-
-const char *IlTestBase::msg_enc = "             429\n6 michal\n415 DATE=20040831150159.702224 HOST=\"some.host\" PROG=edg-wms LVL=USAGE DG.PRIORITY=0 DG.SOURCE=\"UserInterface\" DG.SRC_INSTANCE=\"\" DG.EVNT=\"RegJob\" DG.JOBID=\"https://some.host:1234/x67qr549qc\" DG.SEQCODE=\"UI=2:NS=0:WM=0:BH=1:JSS=0:LM=0:LRMS=0:APP=0\" DG.USER=\"/C=CZ/O=Cesnet/CN=Michal Vocu\" DG.REGJOB.JDL=\"\" DG.REGJOB.NS=\"ns address\" DG.REGJOB.PARENT=\"\" DG.REGJOB.JOBTYPE=\"SIMPLE\" DG.REGJOB.NSUBJOBS=\"0\" DG.REGJOB.SEED=\"\"\n";
-
-const struct server_msg IlTestBase::smsg = {
-       "https://some.host:1234/x67qr549qc",
-       (char*)IlTestBase::msg_enc,
-       strlen(IlTestBase::msg_enc),
-       strlen(IlTestBase::msg) + 1,
-       NULL
-};
diff --git a/org.glite.lb.logger/test/IlTestBase.h b/org.glite.lb.logger/test/IlTestBase.h
deleted file mode 100644 (file)
index 69bf347..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-extern "C" {
-#include "interlogd.h"
-}
-
-class IlTestBase {
-public:
-       static const char *msg;
-       static const char *msg_enc;
-       static const struct server_msg smsg;
-};
diff --git a/org.glite.lb.logger/test/event_queueTest.cpp b/org.glite.lb.logger/test/event_queueTest.cpp
deleted file mode 100644 (file)
index 86a6be1..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-#include <cppunit/extensions/HelperMacros.h>
-#include "IlTestBase.h"
-
-extern "C" {
-struct event_queue_msg {
-  struct server_msg *msg;
-  struct event_queue_msg *prev;
-};
-}
-
-#include <string>
-using namespace std;
-
-class event_queueTest: public CppUnit::TestFixture
-{
-       CPPUNIT_TEST_SUITE( event_queueTest );
-       CPPUNIT_TEST( testEventQueueCreate );
-       CPPUNIT_TEST( testEventQueueInsert );
-       CPPUNIT_TEST( testEventQueueGet );
-       CPPUNIT_TEST( testEventQueueRemove );
-       CPPUNIT_TEST_SUITE_END();
-
-public:
-       void setUp() {
-               server = strdup("localhost:8080");
-               eq = event_queue_create(server);
-               free(server);
-       }
-
-       void tearDown() {
-               struct event_queue_msg *mp;
-               struct server_msg *m;
-
-               for(mp = eq->head; mp != NULL; ) {
-                       struct event_queue_msg *mq;
-
-                       server_msg_free(mp->msg);
-                       mq = mp;
-                       mp = mp->prev;
-                       free(mq);
-               }
-               eq->head = NULL;
-               event_queue_free(eq);
-       }
-
-       void testEventQueueCreate() {
-               CPPUNIT_ASSERT( eq != NULL );
-               CPPUNIT_ASSERT_EQUAL( string(eq->dest_name), string("localhost") );
-               CPPUNIT_ASSERT_EQUAL( eq->dest_port, 8081 );
-               CPPUNIT_ASSERT( eq->tail == NULL );
-               CPPUNIT_ASSERT( eq->head == NULL );
-               CPPUNIT_ASSERT( eq->tail_ems == NULL );
-               CPPUNIT_ASSERT( eq->mark_this == NULL );
-               CPPUNIT_ASSERT( eq->mark_prev == NULL );
-               CPPUNIT_ASSERT( eq->thread_id == 0 );
-               CPPUNIT_ASSERT( eq->flushing == 0 );
-               CPPUNIT_ASSERT( eq->flush_result == 0 );
-       }
-
-       void testEventQueueInsert() {
-               struct event_queue_msg *mp;
-               struct server_msg *m;
-
-               doSomeInserts();
-               mp = eq->head;
-               m = mp->msg;
-               CPPUNIT_ASSERT_EQUAL( string(m->job_id_s), string("2") );
-               CPPUNIT_ASSERT_EQUAL( mp, eq->tail_ems );
-               mp = mp->prev;
-               m = mp->msg;
-               CPPUNIT_ASSERT_EQUAL( string(m->job_id_s), string("1") );
-               mp = mp->prev;
-               m = mp->msg;
-               CPPUNIT_ASSERT_EQUAL( string(m->job_id_s), string("3") );
-               CPPUNIT_ASSERT_EQUAL( mp, eq->tail );
-               CPPUNIT_ASSERT( mp->prev == NULL );
-       }
-
-       void testEventQueueGet() {
-               struct event_queue_msg *mp;
-               struct server_msg *m,sm;
-               int ret;
-
-               doSomeInserts();
-               mp = eq->head;
-               eq->head = mp->prev;
-               eq->tail_ems = NULL;
-               server_msg_free(mp->msg);
-               free(mp);
-               ret = event_queue_get(eq, &m);
-               CPPUNIT_ASSERT( ret == 0 );
-               CPPUNIT_ASSERT( eq->mark_this == eq->head );
-               CPPUNIT_ASSERT( eq->mark_prev == NULL );
-               CPPUNIT_ASSERT_EQUAL( string("1"), string(m->job_id_s) );
-               sm = IlTestBase::smsg;
-               sm.job_id_s = "4";
-               sm.receipt_to = 1;
-               ret = event_queue_insert(eq, &sm);
-               CPPUNIT_ASSERT( ret == 0 );
-               CPPUNIT_ASSERT( eq->mark_prev == eq->head );
-               CPPUNIT_ASSERT( eq->mark_this == eq->head->prev );
-               ret = event_queue_insert(eq, &sm);
-               CPPUNIT_ASSERT( ret == 0 );
-               CPPUNIT_ASSERT( eq->mark_prev == eq->head->prev );
-               CPPUNIT_ASSERT( eq->mark_this == eq->head->prev->prev );
-       }
-
-       void testEventQueueRemove() {
-               struct event_queue_msg *mp;
-               struct server_msg *m,sm;
-               int ret;
-
-               doSomeInserts();
-               ret = event_queue_get(eq, &m);
-               mp = eq->mark_this->prev;
-               sm = IlTestBase::smsg;
-               sm.job_id_s = "4";
-               sm.receipt_to = 1;
-               event_queue_insert(eq, &sm);
-               ret = event_queue_remove(eq);
-               CPPUNIT_ASSERT( eq->head->prev == mp );
-               CPPUNIT_ASSERT( eq->mark_this == NULL );
-               CPPUNIT_ASSERT( eq->mark_prev == NULL );
-       }
-
-protected:
-       char *server;
-       struct event_queue *eq;
-
-       void doSomeInserts() {
-               struct server_msg m = IlTestBase::smsg;
-
-               m.job_id_s = "1";
-               event_queue_insert(eq, &m);
-               m.receipt_to = 1;
-               m.job_id_s = "2";
-               event_queue_insert(eq, &m);
-               m.job_id_s = "3";
-               m.receipt_to = 0;
-               event_queue_insert(eq, &m);
-       }
-};
-
-CPPUNIT_TEST_SUITE_REGISTRATION( event_queueTest );
diff --git a/org.glite.lb.logger/test/event_storeTest.cpp b/org.glite.lb.logger/test/event_storeTest.cpp
deleted file mode 100644 (file)
index 8364cf4..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-#include <cppunit/extensions/HelperMacros.h>
-#include "IlTestBase.h"
-
-class event_storeTest: public CppUnit::TestFixture
-{
-       CPPUNIT_TEST_SUITE( event_storeTest );
-       CPPUNIT_TEST( event_store_recoverTest );
-       CPPUNIT_TEST( event_store_syncTest );
-       CPPUNIT_TEST( event_store_nextTest );
-       CPPUNIT_TEST( event_store_commitTest );
-       CPPUNIT_TEST( event_store_cleanTest );
-       CPPUNIT_TEST( event_store_findTest );
-       CPPUNIT_TEST( event_store_releaseTest );
-       CPPUNIT_TEST( event_store_initTest );
-       CPPUNIT_TEST( event_store_recover_allTest );
-       CPPUNIT_TEST( event_store_cleanupTest );
-       CPPUNIT_TEST_SUITE_END();
-
-public:
-       void setUp() {
-       }
-
-       void tearDown() {
-       }
-
-       void event_store_recoverTest() {
-       }
-
-       void event_store_syncTest() {
-       }
-
-       void event_store_nextTest() {
-       }
-
-       void event_store_commitTest() {
-       }
-
-       void event_store_cleanTest() {
-       }
-
-       void event_store_findTest() {
-       }
-
-       void event_store_releaseTest() {
-       }
-
-       void event_store_initTest() {
-       }
-
-       void event_store_recover_allTest() {
-       }
-
-       void event_store_cleanupTest() {
-       }
-};
-
-CPPUNIT_TEST_SUITE_REGISTRATION( event_storeTest );
diff --git a/org.glite.lb.logger/test/il_test.cpp b/org.glite.lb.logger/test/il_test.cpp
deleted file mode 100644 (file)
index 1bafb04..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-extern "C" {
-#include <pthread.h>
-#include "glite/wmsutils/tls/ssl_helpers/ssl_inits.h"
-#include "glite/wmsutils/tls/ssl_helpers/ssl_pthreads.h"
-#include "interlogd.h"
-#include "glite/lb/consumer.h"
-#include "glite/lb/lb_gss.h"
-}
-
-#if defined(IL_NOTIFICATIONS)
-#define DEFAULT_PREFIX "/tmp/notif_events"
-#define DEFAULT_SOCKET "/tmp/notif_interlogger.sock"
-#else
-#define DEFAULT_PREFIX "/tmp/dglogd.log"
-#define DEFAULT_SOCKET "/tmp/interlogger.sock"
-#endif
-                                                                                
-int TIMEOUT = DEFAULT_TIMEOUT;
-                                                                                
-gss_cred_id_t cred_handle = GSS_C_NO_CREDENTIAL;
-pthread_mutex_t cred_handle_lock = PTHREAD_MUTEX_INITIALIZER;
-                                                                                
-char *file_prefix = DEFAULT_PREFIX;
-int bs_only = 0;
-char *cert_file = NULL;
-char *key_file  = NULL;
-char *CAcert_dir = NULL;
-char *log_server = NULL;
-char *socket_path = DEFAULT_SOCKET;
-
-int 
-main (int ac,const char *av[])
-{
-       CppUnit::Test *suite = CppUnit::TestFactoryRegistry::getRegistry().makeTest();
-       CppUnit::TextUi::TestRunner runner;
-       
-       runner.addTest(suite);
-       return runner.run() ? 0 : 1;
-}
diff --git a/org.glite.lb.logger/test/input_queue_socketTest.cpp b/org.glite.lb.logger/test/input_queue_socketTest.cpp
deleted file mode 100644 (file)
index d29e2cc..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-#include <cppunit/extensions/HelperMacros.h>
-#include "IlTestBase.h"
-
-extern "C" {
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <unistd.h>
-
-#include "interlogd.h"
-
-       extern char *socket_path;
-}
-
-#include <string>
-using namespace std;
-class input_queue_socketTest: public CppUnit::TestFixture
-{
-       CPPUNIT_TEST_SUITE( input_queue_socketTest );
-       CPPUNIT_TEST( input_queue_getTest );
-       CPPUNIT_TEST_SUITE_END();
-
-public:
-
-       void setUp() {
-               struct sockaddr_un saddr;
-               int sock;
-               long offset = 0;
-
-               int ret = input_queue_attach();
-               CPPUNIT_ASSERT(ret == 0);
-
-               sock=socket(PF_UNIX, SOCK_STREAM, 0);
-               CPPUNIT_ASSERT(sock >= 0);
-               
-               memset(&saddr, 0, sizeof(saddr));
-               saddr.sun_family = AF_UNIX;
-               strcpy(saddr.sun_path, socket_path);
-               ret = connect(sock, (struct sockaddr *)&saddr, sizeof(saddr.sun_path));
-               CPPUNIT_ASSERT(ret >= 0);
-               
-               ret = write(sock, &offset, sizeof(offset));
-               CPPUNIT_ASSERT( ret == sizeof(offset) );
-               ret = write(sock, IlTestBase::msg, strlen(IlTestBase::msg));
-               CPPUNIT_ASSERT( ret == strlen(IlTestBase::msg) );
-               ret = write(sock, "\n", 1);
-               CPPUNIT_ASSERT( ret == 1 );
-       }
-
-       void tearDown() {
-               input_queue_detach();
-       }
-
-
-       void input_queue_getTest() {
-               char *event;
-               long offset;
-               int ret;
-
-               ret = input_queue_get(&event, &offset, 10);
-               CPPUNIT_ASSERT( ret >= 0 );
-               CPPUNIT_ASSERT_EQUAL( 0L, offset );
-               CPPUNIT_ASSERT_EQUAL( string(IlTestBase::msg), string(event) );
-               free(event);
-       }
-};
-
-CPPUNIT_TEST_SUITE_REGISTRATION(input_queue_socketTest);
diff --git a/org.glite.lb.logger/test/ll_test.cpp b/org.glite.lb.logger/test/ll_test.cpp
deleted file mode 100644 (file)
index 1e8dce6..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-#include <iostream>
-
-#include <cppunit/extensions/HelperMacros.h>
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <sys/time.h>
-#include <unistd.h>
-#include <errno.h>
-#include <assert.h>
-#include <string.h>
-
-extern "C" {
-#define DEFAULT_SOCKET "/tmp/interlogger.sock"
-char *socket_path = DEFAULT_SOCKET;
-int edg_wll_log_proto_server(int *,char *,char *,int,int);
-void edg_wll_ll_log_init(int);
-}
-
-class LLTest: public  CppUnit::TestFixture
-{
-       CPPUNIT_TEST_SUITE(LLTest);
-       CPPUNIT_TEST(testProtoServer);
-       CPPUNIT_TEST_SUITE_END();
-
-public:
-
-  void setUp() {
-    char *msg = "DATE=20040831150159.702224 HOST=\"some.host\" PROG=edg-wms LVL=USAGE DG.PRIORITY=0 DG.SOURCE=\"UserInterface\" DG.SRC_INSTANCE=\"\" DG.EVNT=\"RegJob\" DG.JOBID=\"https://some.host:1234/x67qr549qc\" DG.SEQCODE=\"UI=2:NS=0:WM=0:BH=1:JSS=0:LM=0:LRMS=0:APP=0\" DG.REGJOB.JDL=\"\" DG.REGJOB.NS=\"ns address\" DG.REGJOB.PARENT=\"\" DG.REGJOB.JOBTYPE=\"SIMPLE\" DG.REGJOB.NSUBJOBS=\"0\" DG.REGJOB.SEED=\"\"";
-    pipe(pd);
-    log_proto_client(pd[1], msg);
-    input_queue_attach();
-  }
-
-  void tearDown() {
-    close(pd[0]);
-    close(pd[1]);
-    input_queue_detach();
-  }
-
-  void testProtoServer() {
-    int ret;
-    edg_wll_ll_log_init(255);
-    ret = edg_wll_log_proto_server(&pd[0], 
-                                      "michal",
-                                      "/tmp/dglogd.log",
-                                      0,
-                                      0);
-    CPPUNIT_ASSERT( ret == 0 );
-  }
-
-private:
-  int  pd[2];
-
-  int log_proto_client(int con, char *logline) {
-    char       header[32];
-    int        err;
-    int        size;
-    u_int8_t size_end[4];
-
-    err = 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;
-
-    err = write(con, "DGLOG", 5);
-    CPPUNIT_ASSERT(err == 5);
-    err = write(con, size_end, 4);
-    CPPUNIT_ASSERT(err == 4);
-    err = write(con, logline, size);
-    CPPUNIT_ASSERT( err == size );
-}
-
- int sock;
- int accepted;
-
-int 
-input_queue_attach()
-{ 
-  struct sockaddr_un saddr;
-
-  CPPUNIT_ASSERT((sock=socket(PF_UNIX, SOCK_STREAM, 0)) >= 0);
-
-  memset(&saddr, 0, sizeof(saddr));
-  saddr.sun_family = AF_UNIX;
-  strcpy(saddr.sun_path, socket_path);
-
-  CPPUNIT_ASSERT(bind(sock, (struct sockaddr *)&saddr, sizeof(saddr)) >= 0); 
-  CPPUNIT_ASSERT(listen(sock, 5) >= 0 );
-  return(0);
-}
-
-void input_queue_detach()
-{
-  if (sock >= 0)
-    close(sock);
-  unlink(socket_path);
-}
-
-};
-
-
-CPPUNIT_TEST_SUITE_REGISTRATION( LLTest );
-
-int 
-main (int ac,const char *av[])
-{
-       CppUnit::Test *suite = CppUnit::TestFactoryRegistry::getRegistry().makeTest();
-       CppUnit::TextUi::TestRunner runner;
-       
-       runner.addTest(suite);
-       return runner.run() ? 0 : 1;
-}
diff --git a/org.glite.lb.logger/test/logd_proto_test.c b/org.glite.lb.logger/test/logd_proto_test.c
deleted file mode 100644 (file)
index 9ee0b44..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <unistd.h>
-#include <netinet/in.h>
-#include <signal.h>
-#include <string.h>
-#include <syslog.h>
-#include <fcntl.h>
-
-#define edg_wll_gss_read_full(a,b,c,d,e,f)  test_edg_wll_gss_read_full(a,b,c,d,e,f)
-#define edg_wll_gss_write_full(a,b,c,d,e,f) test_edg_wll_gss_write_full(a,b,c,d,e,f)
-#define edg_wll_GssConnection               int
-
-#include "logd_proto.h"
-#include "glite/lb/context-int.h"
-#include "glite/lb/escape.h"
-#include "glite/lb/events_parse.h"
-
-int
-test_edg_wll_gss_read_full(int *fd,
-                          void *buf,
-                          size_t bufsize,
-                          struct timeval *timeout,
-                          size_t *total,
-                          edg_wll_GssStatus *code) 
-{
-  *total = read(*fd, buf, bufsize);
-  return(*total < 0 ? *total : 0);
-}
-
-int
-test_edg_wll_gss_write_full(int *fd,
-                           const void *buf,
-                           size_t bufsize,
-                           struct timeval *timeout,
-                           size_t *total,
-                           edg_wll_GssStatus *code) 
-{
-  return(0);
-}
-
-#include "logd_proto.c"
diff --git a/org.glite.lb.logger/test/server_msgTest.cpp b/org.glite.lb.logger/test/server_msgTest.cpp
deleted file mode 100644 (file)
index e669ea1..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <cppunit/extensions/HelperMacros.h>
-#include "IlTestBase.h"
-
-#include <string.h>
-
-using namespace std;
-
-class server_msgTest: public CppUnit::TestFixture 
-{
-       CPPUNIT_TEST_SUITE(server_msgTest);
-       CPPUNIT_TEST( server_msg_createTest );
-       CPPUNIT_TEST( server_msg_copyTest );
-       CPPUNIT_TEST_SUITE_END();
-
-public:
-
-       void setUp() {
-               msg = server_msg_create((char *)IlTestBase::msg);
-       }
-
-       void tearDown() {
-               server_msg_free(msg);
-       }
-
-       void server_msg_createTest() {
-               CPPUNIT_ASSERT( msg != NULL );
-               CPPUNIT_ASSERT_EQUAL( string(msg->job_id_s), string(IlTestBase::smsg.job_id_s) );
-               CPPUNIT_ASSERT_EQUAL( string(msg->msg), string(IlTestBase::smsg.msg) );
-               CPPUNIT_ASSERT_EQUAL( msg->len, IlTestBase::smsg.len );
-               CPPUNIT_ASSERT_EQUAL( msg->ev_len, IlTestBase::smsg.ev_len );
-               CPPUNIT_ASSERT_EQUAL( msg->es, IlTestBase::smsg.es );
-               CPPUNIT_ASSERT( !server_msg_is_priority(msg) );
-       }
-
-       void server_msg_copyTest() {
-               struct server_msg *msg2;
-
-               msg2 = server_msg_copy(msg);
-               CPPUNIT_ASSERT( msg2 != NULL );
-               CPPUNIT_ASSERT( msg2 != msg );
-               CPPUNIT_ASSERT_EQUAL( string(msg->job_id_s), string(msg2->job_id_s) );
-               CPPUNIT_ASSERT( msg->job_id_s != msg2->job_id_s);
-               CPPUNIT_ASSERT_EQUAL( string(msg->msg), string(msg2->msg) );
-               CPPUNIT_ASSERT( msg->msg != msg2->msg );
-               CPPUNIT_ASSERT_EQUAL( msg->len, msg2->len );
-               CPPUNIT_ASSERT_EQUAL( msg->ev_len, msg2->ev_len );
-               CPPUNIT_ASSERT_EQUAL( msg->es, msg2->es );
-               server_msg_free(msg2);
-       }
-
-private:
-       struct server_msg *msg;
-};
-
-
-CPPUNIT_TEST_SUITE_REGISTRATION(server_msgTest);
diff --git a/org.glite.lb.server-bones/.cvsignore b/org.glite.lb.server-bones/.cvsignore
deleted file mode 100644 (file)
index 3a4edf6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.project
diff --git a/org.glite.lb.server-bones/Makefile b/org.glite.lb.server-bones/Makefile
deleted file mode 100644 (file)
index 926a6df..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-# defaults
-top_srcdir=.
-builddir=build
-top_builddir=${top_srcdir}/${builddir}
-stagedir=.
-distdir=.
-globalprefix=glite
-lbprefix=lb
-package=glite-lb-server-bones
-version=0.0.1
-PREFIX=/opt/glite
-
-glite_location=/opt/glite
-globus_prefix=/opt/globus
-nothrflavour=gcc32
-thrflavour=gcc32pthr
-expat_prefix=/opt/expat
-ares_prefix=/opt/ares
-
-CC=gcc
-
--include Makefile.inc
-
-VPATH=${top_srcdir}/src:${top_srcdir}/examples
-
-DEBUG:=-g -O0 -Wall
-CFLAGS:= ${DEBUG} -I${top_srcdir}/interface
-
-COMPILE:=libtool --mode=compile ${CC} ${CFLAGS}
-LINK:=libtool --mode=link ${CC} -rpath ${stagedir}/lib ${LDFLAGS} 
-INSTALL:=libtool --mode=install install
-
-STATICLIB:=libglite_lb_server_bones.a
-LTLIB:=libglite_lb_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}
-
-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:
-
-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:
-       mkdir -p ${PREFIX}/include/${globalprefix}/${lbprefix}
-       mkdir -p ${PREFIX}/lib
-       ${INSTALL} -m 644 ${STATICLIB} ${PREFIX}/lib
-       ${INSTALL} -m 644 ${LTLIB} ${PREFIX}/lib
-       cd ${top_srcdir}/interface && install -m 644 ${HDRS} ${PREFIX}/include/${globalprefix}/${lbprefix}
-
-clean:
-
-%.o: %.c
-       ${COMPILE} -c $<
diff --git a/org.glite.lb.server-bones/build.xml b/org.glite.lb.server-bones/build.xml
deleted file mode 100755 (executable)
index 9f9f459..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Build file for the GLite LB Client module
-       
-       Authors: Jiri Skrabal <nykolas@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.1  2004/09/22 15:41:24  jskrabal
-       - sorry! Forgot to add
-       
-       Revision 1.0  2004/09/07 00:00:01  nykolas
-       First shot
-       
--->
-
-<project name="server-bones" default="dist">
-       
-       <!-- =========================================
-                Builds the GLite LB Server-Bones 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}"/>
-               
-       <!-- ==============================================
-                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>
-       
-       <!-- =========================================
-            RPM settings
-            ========================================= -->
-
-       <property name="build.package.summary" value="L&amp;B server bones" />
-       <property name="build.package.description" value="
-Library of common routines used by Logging &amp; Bookkeeping (L&amp;B) servers." />
-
-</project>             
diff --git a/org.glite.lb.server-bones/examples/cnt_example.c b/org.glite.lb.server-bones/examples/cnt_example.c
deleted file mode 100644 (file)
index 5f73a23..0000000
+++ /dev/null
@@ -1,175 +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'},
-};
-
-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;
-
-
-       me = strrchr(argv[0], '/');
-       if ( me ) me++; else me = argv[0];
-       while ( (opt = getopt_long(argc, argv,"p:m:hd", opts, NULL)) != EOF )
-       {
-               switch ( opt )
-               {
-               case 'm':
-                       msg = strdup(optarg);
-                       break;
-               case 'p':
-                       port = atoi(optarg);
-                       break;
-               case 'd': debug = 1; 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);
-       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.lb.server-bones/examples/srv_example.c b/org.glite.lb.server-bones/examples/srv_example.c
deleted file mode 100644 (file)
index e897bc5..0000000
+++ /dev/null
@@ -1,199 +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 echo(int, void *);
-static int upper_echo(int, 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, NULL, echo, NULL, NULL },
-       { "Upper Echo Service", -1, NULL, upper_echo, NULL, NULL }
-};
-
-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_run(NULL, service_table, sizofa(service_table), 1);
-
-
-       return 0;
-}
-
-int upper_echo(int fd, 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 0;
-
-       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, 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 0;
-
-       if ( writen(fd, line, n) != n )
-       {
-               perror("write() message back");
-               return -1;
-       }
-
-       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.lb.server-bones/interface/srvbones.h b/org.glite.lb.server-bones/interface/srvbones.h
deleted file mode 100644 (file)
index 1fb87ed..0000000
+++ /dev/null
@@ -1,46 +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_CT,                        /* default number of slaves */ 
-       GLITE_SBPARAM_SLAVE_OVERLOAD,           /* queue items per slave */
-       GLITE_SBPARAM_SLAVE_CONNS_MAX,          /* commit suicide after that many */
-                                                                               /* connections */
-       GLITE_SBPARAM_CLNT_TIMEOUT,                     /* keep idle connection that many */
-                                                                               /* seconds */
-       GLITE_SBPARAM_TOTAL_CLNT_TIMEOUT,       /* client may ask one slave multiple */
-                                                                               /* times but only limited time to */
-                                                                               /* avoid DoS attacks */
-} glite_srvbones_param_t;
-
-typedef int (*slave_data_init_hnd)(void **);
-
-struct glite_srvbones_service {
-       char       *id;
-       int                     conn;
-       int               (*on_new_conn_hnd)(int conn, struct timeval start, void *clnt_data);
-       int               (*on_accept_hnd)(int conn, void *clnt_data);
-       int               (*on_reject_hnd)(int conn);
-       int               (*on_disconnect_hnd)(int conn, void *clnt_data);
-};
-
-extern int glite_srvbones_set_param(glite_srvbones_param_t param, ...);
-/*
- *     slaves_ct - forked slaves count
- *     slave_data_init_hnd - callback initializing client 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);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __ORG_GLITE_LB_SERVER_BONES_BONES_H__ */
diff --git a/org.glite.lb.server-bones/project/build.properties b/org.glite.lb.server-bones/project/build.properties
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.glite.lb.server-bones/project/configure.properties.xml b/org.glite.lb.server-bones/project/configure.properties.xml
deleted file mode 100644 (file)
index 335c3cf..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Configuration options for the GLite LB Client module
-       
-       Authors: Jiri Skrabal <nykolas@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.1  2004/09/08 12:08:09  nykolas
-       First shot
-       
--->
-
-       <!-- ======================================================
-         Define extra properties here ...
-         ====================================================== -->
-        
-       <project name="LB Server-Bones configuration options">                                                                        
-               <target name="lbmakefiles">
-                       <exec executable="ln" failonerror="true">
-                               <arg line="-fs ${component.dir}/Makefile ${module.build.dir}/Makefile"/>
-                       </exec>
-                       <echo file="${module.build.dir}/Makefile.inc">
-top_srcdir=..
-builddir=build
-stagedir=${stage.abs.dir}
-distdir=${dist.dir}
-globalprefix=${global.prefix}
-lbprefix=${subsystem.prefix}
-package=${module.package.name}
-PREFIX=${install.dir}
-version=${module.version}
-glite_location=${with.glite.location}
-globus_prefix=${with.globus.prefix}
-thrflavour=${with.globus.thr.flavor}
-nothrflavour=${with.globus.nothr.flavor}
-expat_prefix=${with.expat.prefix}
-ares_prefix=${with.ares.prefix}
-mysql_prefix=${with.mysql.prefix}
-                       </echo>
-           </target>
-       </project>
diff --git a/org.glite.lb.server-bones/project/properties.xml b/org.glite.lb.server-bones/project/properties.xml
deleted file mode 100755 (executable)
index fd20cb9..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Common build properties file for the Glite LB Server component
-       
-       Authors: Jiri Skrabal <nykolas@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$ 
-       
-       Revision history:
-       $Log$
-       Revision 1.0  2004/09/07 00:00:01  nykolas
-       First shot
-       
--->
-
-<project name="LB Server-Bones component common properties">
-
-       <!-- Include build properties to allow overwriting 
-            of properties for subsystem                    -->
-       <property file="build.properties" />    
-
-       <!-- ======================================================
-          Define corresponding subsystem properties
-                ====================================================== -->
-
-       <!-- Subsystem name -->
-       <property name="subsystem.name" value="${lb.subsystem.name}"/>
-               
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${lb.subsystem.prefix}"/>
-
-       <!-- ======================================================
-          Define component properties
-                ====================================================== -->
-                               
-       <!-- Component name prefix -->
-       <property name="component.prefix" value="server-bones" />
-                       
-       <!-- ======================================================
-          Define general component properties
-                ====================================================== -->
-       
-       <import file="${component.general.properties.file}" />
-                                               
-       <!-- ======================================================
-                Define extra properties here ...
-                ====================================================== -->
-                
-                                                               
-</project>
diff --git a/org.glite.lb.server-bones/project/tar_exclude b/org.glite.lb.server-bones/project/tar_exclude
deleted file mode 100644 (file)
index b3133e4..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-tar_exclude
-CVS
-build.xml
-build
-build.properties
-properties.xml
-configure-options.xml
-.cvsignore
-.project
-.cdtproject
diff --git a/org.glite.lb.server-bones/project/version.properties b/org.glite.lb.server-bones/project/version.properties
deleted file mode 100644 (file)
index 6246fa7..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Dec 10 13:25:32 CET 2004
-module.version=0.1.0
-module.build=70
-module.age=1
diff --git a/org.glite.lb.server-bones/src/srvbones.c b/org.glite.lb.server-bones/src/srvbones.c
deleted file mode 100644 (file)
index 8c69534..0000000
+++ /dev/null
@@ -1,602 +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 <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 "srvbones.h"
-
-#define SLAVES_CT                      5               /* default number of slaves */
-#define SLAVE_OVERLOAD         10              /* queue items per slave */
-#define SLAVE_CONNS_MAX                500             /* commit suicide after that many connections */
-#define SLAVE_CHECK_SIGNALS    2               /* how often to check signals while waiting for recv_mesg */
-#define CLNT_TIMEOUT           10              /* keep idle connection that many seconds */
-#define TOTAL_CLNT_TIMEOUT     60              /* one client may ask one slave multiple times */
-                                                                       /* but only limited time to avoid DoS attacks */
-
-#ifndef dprintf
-#define dprintf(x)                     { if (debug) printf x; }
-#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_CT;
-static int                                     set_slave_overload = SLAVE_OVERLOAD;
-static int                                     set_slave_conns_max = SLAVE_CONNS_MAX;
-static struct timeval          set_clnt_to = {CLNT_TIMEOUT, 0};
-static struct timeval          set_total_clnt_to = {TOTAL_CLNT_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 glite_srvbones_set_clnt_to(struct timeval *);
-static void glite_srvbones_set_total_clnt_to(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_CT:
-               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_CLNT_TIMEOUT:
-               glite_srvbones_set_clnt_to(va_arg(ap,struct timeval *)); break;
-       case GLITE_SBPARAM_TOTAL_CLNT_TIMEOUT:
-               glite_srvbones_set_total_clnt_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;
-
-
-       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);
-
-       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, NULL, WNOHANG)) > 0 )
-                       {
-                               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;
-}
-
-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;
-       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] Reject 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;
-       void                       *clnt_data = NULL;
-       int                                     conn = -1,
-                                               srv = -1,
-                                               conn_cnt = 0,
-                                               sockflags,
-                                               h_errno,
-                                               pid, i;
-
-
-
-       if ( (pid = fork()) ) return pid;
-
-       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?
-                */
-               exit(1);
-
-       while ( !die && (conn_cnt < set_slave_conns_max || conn >= 0) )
-       {
-               fd_set                          fds;
-               int                                     max = sock,
-                                                       connflags,
-                                                       newconn = -1,
-                                                       newsrv = -1,
-                                                       kick_client = 0;
-               unsigned long           seq;
-               struct timeval          check_to = { SLAVE_CHECK_SIGNALS, 0},
-                                                       total_to = set_total_clnt_to,
-                                                       client_to = set_clnt_to,
-                                                       now;
-
-
-               FD_ZERO(&fds);
-               FD_SET(sock, &fds);
-               if ( conn >= 0 ) FD_SET(conn, &fds);
-               if ( conn > sock ) max = conn;
-       
-               sigprocmask(SIG_UNBLOCK, &sset, NULL);
-               switch ( select(max+1, &fds, NULL, NULL, &check_to) )
-               {
-               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
-                       && (   check_timeout(&client_to, client_done, now)
-                               || check_timeout(&total_to, client_start, now)) )
-                       kick_client = 1;
-
-               if ( conn >= 0 && !kick_client && FD_ISSET(conn, &fds) )
-               {
-                       /*
-                        *      serve the request
-                        */
-                       int             rv;
-
-                       dprintf(("[%d] incoming request\n", getpid()));
-                       if ( !services[srv].on_accept_hnd )
-                       {
-                               dprintf(("[%d] request handler for '%s' service not set\n", getpid(), services[srv].id));
-                               kick_client = 1;
-                               continue;
-                       }
-
-                       if ( (rv = services[srv].on_accept_hnd(conn, clnt_data)) > 0 )
-                       {
-                               /*      expected FATAL error -> close connection and contiue
-                                */
-                               close(conn);
-                               conn = -1;
-                               continue;
-                       }
-                       else if ( rv < 0 )
-                               /*      unknown error -> clasified as FATAL -> kill slave
-                                */
-                               exit(1);
-
-                       dprintf(("[%d] request done\n", getpid()));
-                       gettimeofday(&client_done, NULL);
-                       continue;
-               }
-
-               if ( FD_ISSET(sock, &fds) && conn_cnt < set_slave_conns_max )
-               {
-                       if ( conn >= 0 ) usleep(100000 + 1000 * (random() % 200));
-                       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 = 1;
-               }
-
-               if ( kick_client && conn >= 0 )
-               {
-                       if ( services[srv].on_disconnect_hnd )
-                               services[srv].on_disconnect_hnd(conn, clnt_data);
-                       close(conn);
-                       conn = -1;
-                       srv = -1;
-                       dprintf(("[%d] Idle connection closed\n", getpid()));
-               }
-
-               if ( newconn >= 0 )
-               {
-                       conn = newconn;
-                       srv = newsrv;
-                       gettimeofday(&client_start, NULL);
-                       client_done.tv_sec = client_start.tv_sec;
-                       client_done.tv_usec = client_start.tv_usec;
-
-                       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);
-                       }
-       
-                       conn_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;
-                       }
-
-                       if (   services[srv].on_new_conn_hnd
-                               && services[srv].on_new_conn_hnd(conn, client_start, clnt_data) )
-                       {
-                               dprintf(("[%d] Connection not estabilished.\n", getpid()));
-                               if ( !debug ) syslog(LOG_ERR, "Connection not estabilished.\n");
-                               close(conn);
-                               conn = srv = -1;
-                               continue;
-                       }
-               }
-       }
-
-       if ( die )
-       {
-               dprintf(("[%d] Terminating on signal %d\n", getpid(), die));
-               if ( !debug ) syslog(LOG_INFO, "Terminating on signal %d", die);
-       }
-       dprintf(("[%d] Terminating after %d connections\n", getpid(), conn_cnt));
-       if ( !debug ) syslog(LOG_INFO, "Terminating after %d connections", conn_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 */
-
-
-       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_CT: 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_conns_max = (n == -1)? SLAVE_CONNS_MAX: n;
-}
-
-static void glite_srvbones_set_clnt_to(struct timeval *t)
-{
-       set_clnt_to = t? (struct timeval){CLNT_TIMEOUT, 0}: *t;
-}
-
-static void glite_srvbones_set_total_clnt_to(struct timeval *t)
-{
-       set_total_clnt_to = t? (struct timeval){TOTAL_CLNT_TIMEOUT, 0}: *t;
-}
diff --git a/org.glite.lb.ws-interface/.Makefile.swp b/org.glite.lb.ws-interface/.Makefile.swp
deleted file mode 100644 (file)
index 15a25d6..0000000
Binary files a/org.glite.lb.ws-interface/.Makefile.swp and /dev/null differ
diff --git a/org.glite.lb.ws-interface/.cvsignore b/org.glite.lb.ws-interface/.cvsignore
deleted file mode 100755 (executable)
index 1df717b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-.project
-.cdtproject
\ No newline at end of file
diff --git a/org.glite.lb.ws-interface/LICENSE b/org.glite.lb.ws-interface/LICENSE
deleted file mode 100755 (executable)
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.lb.ws-interface/Makefile b/org.glite.lb.ws-interface/Makefile
deleted file mode 100644 (file)
index 051fdeb..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-# Default values
-top_srcdir=.
-builddir=build
-top_builddir=${top_srcdir}/${builddir}
-stagedir=.
-distdir=.
-globalprefix=glite
-lbprefix=lb
-package=glite-lb-ws-interface
-version=0.0.0
-PREFIX=/opt/glite
-
--include Makefile.inc
-
-VPATH=${top_srcdir}/interface
-STAGETO=interface
-
-WSDL=LB.wsdl
-
-all compile:
-
-check: 
-       @echo No unit test required for interface-only module.
-
-stage:
-       $(MAKE) install PREFIX=${stagedir}
-
-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=${top_srcdir}/tmpbuilddir
-       cd ${top_srcdir}/tmpbuilddir && tar -czf ${top_srcdir}/${distdir}/${package}-${version}_bin.tar.gz *
-       rm -rf ${top_srcdir}/tmpbuilddir
-       
-install:
-       -mkdir -p ${PREFIX}/${STAGETO}
-       -mkdir -p ${PREFIX}/share/doc/${package}-${version}
-       install -m 644 ${top_srcdir}/LICENSE ${PREFIX}/share/doc/${package}-${version}
-       cd ${top_srcdir}/interface && install -m 644 ${WSDL} ${PREFIX}/${STAGETO}
-
-clean:
-       rm -f *.h
-       
diff --git a/org.glite.lb.ws-interface/build.xml b/org.glite.lb.ws-interface/build.xml
deleted file mode 100644 (file)
index b412fb1..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Build file for the GLite lb ws-interface component
-       
-       Authors: Joachim Flammer <Joachim.Flammer@Cern.ch>      
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.5  2004/07/20 16:08:30  flammer
-       Changed incorrect my_... instead of .._template entries for subsystem and component.
-       
-       Revision 1.4  2004/07/16 16:32:53  flammer
-       Added comment where to add language target.
-       
-       Revision 1.3  2004/07/16 14:56:55  flammer
-       Corrected input path of build.properties.
-       
-       Revision 1.2  2004/07/06 20:43:19  flammer
-       Update of configure & targets.
-       
-       Revision 1.1.1.1  2004/06/18 12:40:17  flammer
-       Added general component template.
-       
-       
--->
-
-<project name="ws-interface" default="dist">
-
-       <!-- ==============================================
-             Builds the GLite lb ws-interface component
-            ============================================== -->
-       
-       <!-- =========================================
-             Import properties (order is important)
-            ========================================= -->
-       
-       <!-- Import baseline properties & 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 configuration definitions (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
-            ========================================= -->
-       <!-- Put your language target (java/c++-ant/c++-autotool/perl) here -->
-       <import file="${global.targets-simple_make.file}" />
-               
-       <!-- =========================================
-                Load version file 
-            ========================================= -->
-       <property file="${module.version.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.lb.ws-interface/interface/LB.wsdl b/org.glite.lb.ws-interface/interface/LB.wsdl
deleted file mode 100755 (executable)
index dfbce26..0000000
+++ /dev/null
@@ -1,358 +0,0 @@
-<!-- $Header$ -->
-
-<WSDL:definitions
-       xmlns:tns="http://glite.org/wsdl/services/lb"
-       xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
-       xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-       xmlns:glitensservices="http://glite.org/wsdl/services/lb"
-       xmlns:glitenstypes="http://glite.org/wsdl/types/lb"
-       xmlns:SOAP="http://schemas.xmlsoap.org/wsdl/soap/"
-       xmlns:WSDL="http://schemas.xmlsoap.org/wsdl/"
-       xmlns="http://schemas.xmlsoap.org/wsdl/"
-       targetNamespace="http://glite.org/wsdl/services/lb"
-       name="LoggingAndBookkeeping">
-
-       <WSDL:types>
-               <schema
-                       targetNamespace="http://glite.org/wsdl/types/lb"
-                       xmlns="http://www.w3.org/2001/XMLSchema"
-                       elementFormDefault="unqualified"
-                       attributeFormDefault="unqualified">
-
-                       <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
-                       <simpleType name="QueryAttr">
-                               <restriction base="xsd:string">
-                                       <enumeration value="UNDEF"/>
-                                       <enumeration value="JOBID"/>
-                                       <enumeration value="OWNER"/>
-                                       <enumeration value="STATUS"/>
-                                       <enumeration value="LOCATION"/>
-                                       <enumeration value="DESTINATION"/>
-                                       <enumeration value="DONECODE"/>
-                                       <enumeration value="USERTAG"/>
-                                       <enumeration value="TIME"/>
-                                       <enumeration value="LEVEL"/>
-                                       <enumeration value="HOST"/>
-                                       <enumeration value="SOURCE"/>
-                                       <enumeration value="INSTANCE"/>
-                                       <enumeration value="EVENT-TYPE"/>
-                                       <enumeration value="CHKPT-TAG"/>
-                                       <enumeration value="RESUBMITTED"/>
-                                       <enumeration value="PARENT"/>
-                                       <enumeration value="EXITCODE"/>
-                               </restriction>
-                       </simpleType>
-                       <simpleType name="QueryOp">
-                               <restriction base="xsd:string">
-                                       <enumeration value="EQUAL"/>
-                                       <enumeration value="LESS"/>
-                                       <enumeration value="GREATER"/>
-                                       <enumeration value="WITHIN"/>
-                                       <enumeration value="UNEQUAL"/>
-                               </restriction>
-                       </simpleType>
-                       <simpleType name="JobStatCode">
-                               <restriction base="xsd:string">
-                                       <enumeration value="UNDEF"/>
-                                       <enumeration value="SUBMITTED"/>
-                                       <enumeration value="WAITING"/>
-                                       <enumeration value="READY"/>
-                                       <enumeration value="SCHEDULED"/>
-                                       <enumeration value="RUNNING"/>
-                                       <enumeration value="DONE"/>
-                                       <enumeration value="CLEARED"/>
-                                       <enumeration value="ABORTED"/>
-                                       <enumeration value="CANCELLED"/>
-                                       <enumeration value="UNKNOWN"/>
-                                       <enumeration value="PURGED"/>
-                               </restriction>
-                       </simpleType>
-                       <simpleType name="StatJobType">
-                               <restriction base="xsd:string">
-                                       <enumeration value="SIMPLE"/>
-                                       <enumeration value="DAG"/>
-                               </restriction>
-                       </simpleType>
-                       <simpleType name="StatDoneCode">
-                               <restriction base="xsd:string">
-                                       <enumeration value="OK"/>
-                                       <enumeration value="FAILED"/>
-                                       <enumeration value="CANCELLED"/>
-                               </restriction>
-                       </simpleType>
-                       <complexType name="timeval">
-                               <sequence>
-                                       <element name="tvSec" type="xsd:long" minOccurs="1" maxOccurs="1"/>
-                                       <element name="tvUsec" type="xsd:long" minOccurs="1" maxOccurs="1"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="QueryRecAttrId">
-                               <sequence>
-                                       <element name="tag" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="state" type="glitenstypes:JobStatCode" minOccurs="0" maxOccurs="1"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="QueryRecValue">
-                               <sequence>
-                                       <element name="i" type="xsd:int" minOccurs="0" maxOccurs="1"/>
-                                       <element name="c" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="t" type="glitenstypes:timeval" minOccurs="0" maxOccurs="1"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="QueryRec">
-                               <sequence>
-                                       <element name="op" type="glitenstypes:QueryOp" minOccurs="1" maxOccurs="1"/>
-                                       <element name="attrid" type="glitenstypes:QueryRecAttrId" minOccurs="0" maxOccurs="1"/>
-                                       <element name="value1" type="glitenstypes:QueryRecValue" minOccurs="1" maxOccurs="1"/>
-                                       <element name="value2" type="glitenstypes:QueryRecValue" minOccurs="0" maxOccurs="1"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="QueryCondition">
-                               <sequence>
-                                       <element name="attr" type="glitenstypes:QueryAttr" minOccurs="1" maxOccurs="1"/>
-                                       <element name="records" type="glitenstypes:QueryRec" minOccurs="1" maxOccurs="unbounded"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="QueryConditions">
-                               <sequence>
-                                       <element name="condition" type="glitenstypes:QueryCondition" minOccurs="1" maxOccurs="unbounded"/>
-                               </sequence>
-                       </complexType>
-                       <complexType  name="TagValue">
-                               <sequence>
-                                       <element name="tag" type="xsd:string" minOccurs="1" maxOccurs="1" />
-                                       <element name="value" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                               </sequence>
-                       </complexType>
-                       <simpleType name="JobStatFlag">
-                               <restriction base="xsd:string">
-                                       <enumeration value="CLASSADS"/>
-                                       <enumeration value="CHILDREN"/>
-                                       <enumeration value="CHILDSTAT"/>
-                               </restriction>
-                       </simpleType>
-                       <complexType name="JobStatFlags">
-                               <sequence>
-                                       <element name="flag" type="glitenstypes:JobStatFlag" minOccurs="0" maxOccurs="unbounded"/>
-                               </sequence>
-                       </complexType>
-                       <complexType name="JobStat">
-                               <sequence>
-                                       <element name="state" type="glitenstypes:JobStatCode" minOccurs="1" maxOccurs="1"/>
-                                       <element name="jobId" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-                                       <element name="owner" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
-                                       <element name="jobtype" type="glitenstypes:StatJobType" minOccurs="1" maxOccurs="1"/>
-                                       <element name="parentJob" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="seed" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="childrenNum" type="xsd:int" minOccurs="1" maxOccurs="1"/>
-                                       <element name="children" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
-                                       <element name="childrenHist" type="xsd:int" minOccurs="0" maxOccurs="unbounded"/>
-                                       <element name="childrenStates" type="glitenstypes:JobStat" minOccurs="0" maxOccurs="unbounded"/>
-                                       <element name="condorId" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="globusId" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="localId" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="jdl" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="matchedJdl" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="destination" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="condorJdl" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="rsl" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="reason" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="location" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="ceNode" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="networkServer" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="subjobFailed" type="xsd:boolean" minOccurs="1" maxOccurs="1"/>
-                                       <element name="doneCode" type="glitenstypes:StatDoneCode" minOccurs="1" maxOccurs="1"/>
-                                       <element name="exitCode" type="xsd:int" minOccurs="1" maxOccurs="1"/>
-                                       <element name="resubmitted" type="xsd:boolean" minOccurs="1" maxOccurs="1"/>
-                                       <element name="cancelling" type="xsd:boolean" minOccurs="1" maxOccurs="1"/>
-                                       <element name="cancelReason" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="cpuTime" type="xsd:int" minOccurs="1" maxOccurs="1"/>
-                                       <element name="userTags" type="glitenstypes:TagValue" minOccurs="0" maxOccurs="unbounded"/>
-                                       <element name="stateEnterTime" type="glitenstypes:timeval" minOccurs="1" maxOccurs="1"/>
-                                       <element name="lastUpdateTime" type="glitenstypes:timeval" minOccurs="1" maxOccurs="1"/>
-                                       <element name="stateEnterTimes" type="xsd:int" minOccurs="0" maxOccurs="unbounded" nillable="true"/>
-                                       <element name="expectUpdate" type="xsd:boolean" minOccurs="1" maxOccurs="1"/>
-                                       <element name="expectFrom" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="acl" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                               </sequence>
-                       </complexType>
-                       <complexType  name="jobsOut">
-                               <sequence>
-                                       <element name="jobs" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
-                               </sequence>
-                       </complexType>
-                       <complexType  name="statesOut">
-                               <sequence>
-                                       <element name="states" type="glitenstypes:JobStat" minOccurs="0" maxOccurs="unbounded" />
-                               </sequence>
-                       </complexType>
-                       <complexType name="GenericLBFaultType">
-                               <sequence>
-                                       <element name="source" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-                                       <element name="code" type="xsd:int" minOccurs="1" maxOccurs="1"/>
-                                       <element name="text" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-                                       <element name="description" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-                                       <element name="reason" type="glitenstypes:GenericLBFaultType" minOccurs="0" maxOccurs="1"/>
-                               </sequence>
-                       </complexType>
-                       <element name="GenericLBFault" type="glitenstypes:GenericLBFaultType"/>
-               </schema>
-       </WSDL:types>
-       <message name="GetVersionRequest">
-       </message>
-       <message name="GetVersionResponse">
-               <part name="version" type="xsd:string"/>
-       </message>
-       <message name="JobStatusRequest">
-               <part name="jobid" type="xsd:string"/>
-               <part name="flags" type="glitenstypes:JobStatFlags"/>
-       </message>
-       <message name="JobStatusResponse">
-               <part name="status" type="glitenstypes:JobStat"/>
-       </message>
-       <message name="QueryJobsRequest">
-               <part name="conditions" type="glitenstypes:QueryConditions"/>
-               <part name="flags" type="glitenstypes:JobStatFlags"/>
-       </message>
-       <message name="QueryJobsResponse">
-               <part name="jobs" type="glitenstypes:jobsOut"/>
-               <part name="states" type="glitenstypes:statesOut"/>
-       </message>
-       <message name="UserJobsRequest">
-       </message>
-       <message name="UserJobsResponse">
-               <part name="jobs" type="xsd:string"/>
-               <part name="states" type="glitenstypes:JobStat"/>
-       </message>
-
-       <message name="GenericLBFault">
-               <part name="fault" element="glitenstypes:GenericLBFault"/>
-       </message>
-
-       <portType name="LoggingAndBookkeeping_PortType">
-               <operation name="GetVersion">
-                       <documentation>Query the version of LB servere
-
-Input: no input
-
-Output: Version of LB server
-
-Faults: GenericLBFault
-                       </documentation>
-                       <input name="i" message="tns:GetVersionRequest"/>
-                       <output name="o" message="tns:GetVersionResponse"/>
-                       <fault name="f" message="tns:GenericLBFault"/>
-               </operation>
-               <operation name="JobStatus">
-                       <documentation>Retrieve state of a single job.
-
-Given a job id queries LB for detailed state of the job.
-
-
-Input:
-
-jobid: Id of the job
-
-flags: Which fields of the job state should be retrieved: zero or more of CLASSADS, CHILDREN, CHILDSTAT
-
-Output: state of the job
-
-Faults: GenericLBFault
-                       </documentation>
-                       <input name="i" message="tns:JobStatusRequest"/>
-                       <output name="o" message="tns:JobStatusResponse"/>
-                       <fault name="f" message="tns:GenericLBFault"/>
-               </operation>
-               <operation name="QueryJobs">
-                       <documentation>Query for jobs satisfying set of conditions.
-
-Intput:
-
-conditions: list of lists of query conditions. 
-       Elements of the inner lists refer to a single job attribute, the conditions are or-ed.
-       Elements of the outer list may refer to different job attributes, they are and-ed.
-
-flags: Which fields of the job state should be retrieved: see JobStatus
-
-Output: list of mathching jobs, including their states
-
-Faults: GenericLBFault
-                       </documentation>
-                       <input name="i" message="tns:QueryJobsRequest"/>
-                       <output name="o" message="tns:QueryJobsResponse"/>
-                       <fault name="f" message="tns:GenericLBFault"/>
-               </operation>
-               <operation name="UserJobs">
-                       <documentation>Query all jobs of the current user.
-
-Input: no input
-
-Output: list of all user's jobs, including their states
-
-Faults: GenericLBFault
-                       </documentation>
-                       <input name="i" message="tns:UserJobsRequest"/>
-                       <output name="o" message="tns:UserJobsResponse"/>
-                       <fault name="f" message="tns:GenericLBFault"/>
-               </operation>
-       </portType>
-       <binding name="LoggingAndBookkeeping" type="tns:LoggingAndBookkeeping_PortType">
-               <SOAP:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
-               <operation name="GetVersion">
-                       <SOAP:operation style="rpc"/>
-                       <input name="i">
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/lb"/>
-                       </input>
-                       <output name="o">
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/lb"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-               <operation name="JobStatus">
-                       <SOAP:operation style="rpc"/>
-                       <input name="i">
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/lb"/>
-                       </input>
-                       <output name="o">
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/lb"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-               <operation name="QueryJobs">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/lb"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/lb"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-               <operation name="UserJobs">
-                       <SOAP:operation style="rpc"/>
-                       <input>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/lb"/>
-                       </input>
-                       <output>
-                               <SOAP:body use="literal" namespace="http://glite.org/wsdl/services/lb"/>
-                       </output>
-                       <fault name="f">
-                               <SOAP:fault name="f" use="literal"/>
-                       </fault>
-               </operation>
-       </binding>
-       <service name="LoggingAndBookkeeping">
-               <documentation>Logging and Bookkeeping service</documentation>
-               <port name="LoggingAndBookkeeping" binding="tns:LoggingAndBookkeeping">
-                       <SOAP:address location="http://test.glite.org/lb:8080"/>
-               </port>
-       </service>
-</WSDL:definitions>
diff --git a/org.glite.lb.ws-interface/project/build.properties b/org.glite.lb.ws-interface/project/build.properties
deleted file mode 100755 (executable)
index e69de29..0000000
diff --git a/org.glite.lb.ws-interface/project/configure.properties.xml b/org.glite.lb.ws-interface/project/configure.properties.xml
deleted file mode 100644 (file)
index 563b7bd..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-        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), Finland
-        University of Bergen (UiB), Norway
-        Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-        Configuration build properties file for the GLite lb ws-interface component
-
-        Authors: Joachim Flammer <Joachim.Flammer@cern.ch>
-        Version info: $Id$
-        Release: $Name$
-
-        Revision history:
-        $Log$
-        Revision 1.3  2004/07/20 16:08:30  flammer
-        Changed incorrect my_... instead of .._template entries for subsystem and component.
-
-        Revision 1.2  2004/07/16 14:56:55  flammer
-        Corrected input path of build.properties.
-
-        Revision 1.1  2004/07/06 20:43:19  flammer
-        Update of configure & targets.
-
-
-
--->
-<project name="lb ws-interface component configuration properties">
-       <target name="lbmakefiles">
-               <exec executable="ln" failonerror="true">
-                       <arg line="-fs ${component.dir}/Makefile ${module.build.dir}/Makefile"/>
-               </exec>
-               <echo file="${module.build.dir}/Makefile.inc">
-top_srcdir=..
-builddir=build
-stagedir=${stage.abs.dir}
-distdir=${dist.dir}
-globalprefix=${global.prefix}
-lbprefix=${subsystem.prefix}
-package=${module.package.name}
-PREFIX=${install.dir}
-version=${module.version}
-glite_location=${with.glite.location}
-               </echo>
-    </target>
-</project>
diff --git a/org.glite.lb.ws-interface/project/properties.xml b/org.glite.lb.ws-interface/project/properties.xml
deleted file mode 100644 (file)
index 736515e..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Common build properties file for the GLite lb ws-interface component
-       
-       Authors: Joachim Flammer <Joachim.Flammer@cern.ch>
-       Version info: $Id$
-       Release: $Name$ 
-       
-       Revision history:
-       $Log$
-       Revision 1.4  2004/07/20 16:08:30  flammer
-       Changed incorrect my_... instead of .._template entries for subsystem and component.
-       
-       Revision 1.3  2004/07/16 14:56:55  flammer
-       Corrected input path of build.properties.
-       
-       Revision 1.2  2004/07/16 14:36:49  flammer
-       
-       Corrected build.properties include.
-       
-       Revision 1.1.1.1  2004/06/18 12:40:17  flammer
-       Added general component template.
-       
-       
--->
-
-<project name="lb ws-interface component common properties">
-
-       <!-- Include build properties to allow overwriting 
-            of properties for subsystem                    -->
-       <property file="project/build.properties" />    
-
-       <!-- ======================================================
-              Define corresponding subsystem properties
-            ====================================================== -->
-
-       <!-- Subsystem name -->
-       <property name="subsystem.name" value="${lb.subsystem.name}"/>
-               
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${lb.subsystem.prefix}"/>
-
-       <!-- ======================================================
-              Define component properties
-            ====================================================== -->
-                               
-       <!-- Component name prefix -->
-       <property name="component.prefix" value="ws-interface" />
-                       
-       <!-- ======================================================
-              Define general component properties
-            ====================================================== -->
-       
-       <import file="${component.general.properties.file}" />
-                                               
-       <!-- ======================================================
-             Define extra properties here ...
-            ====================================================== -->
-       
-               
-</project>
diff --git a/org.glite.lb.ws-interface/project/tar_exclude b/org.glite.lb.ws-interface/project/tar_exclude
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.glite.lb.ws-interface/project/version.properties b/org.glite.lb.ws-interface/project/version.properties
deleted file mode 100755 (executable)
index a39143f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Dec 10 13:20:01 CET 2004
-module.version=0.1.0
-module.build=13
-module.age=0
diff --git a/org.glite.lb/.cvsignore b/org.glite.lb/.cvsignore
deleted file mode 100644 (file)
index 1df717b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-.project
-.cdtproject
\ No newline at end of file
diff --git a/org.glite.lb/LICENSE b/org.glite.lb/LICENSE
deleted file mode 100644 (file)
index 259a91f..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-LICENSE file for EGEE Middleware\r
-================================\r
-\r
-Copyright (c) 2004 on behalf of the EU EGEE Project: \r
-The European Organization for Nuclear Research (CERN), \r
-Istituto Nazionale di Fisica Nucleare (INFN), Italy\r
-Datamat Spa, Italy\r
-Centre National de la Recherche Scientifique (CNRS), France\r
-CS Systeme d'Information (CSSI), France\r
-Royal Institute of Technology, Center for Parallel Computers (KTH-PDC), Sweden\r
-Universiteit van Amsterdam (UvA), Netherlands\r
-University of Helsinki (UH.HIP), Finlan\r
-University of Bergen (UiB), Norway\r
-Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom\r
-\r
-Redistribution and use in source and binary forms, with or without\r
-modification, are permitted provided that the following conditions are\r
-met: \r
-\r
-1. Redistributions of source code must retain the above copyright\r
-notice, this list of conditions and the following disclaimer.\r
-\r
-2. Redistributions in binary form must reproduce the above copyright\r
-notice, this list of conditions and the following disclaimer in the\r
-documentation and/or other materials provided with the distribution.\r
-\r
-3. The end-user documentation included with the redistribution, if\r
-any, must include the following acknowledgment: "This product includes\r
-software developed by The EU EGEE Project (http://cern.ch/eu-egee/)."\r
-Alternatively, this acknowledgment may appear in the software itself, if\r
-and wherever such third-party acknowledgments normally appear.\r
-\r
-4. The names EGEE and the EU EGEE Project must not be\r
-used to endorse or promote products derived from this software without\r
-prior written permission. For written permission, please contact\r
-<email address>.\r
-\r
-5. You are under no obligation whatsoever to provide anyone with any\r
-bug fixes, patches, or upgrades to the features, functionality or\r
-performance of the Software ("Enhancements") that you may develop over\r
-time; however, if you choose to provide your Enhancements to The EU\r
-EGEE Project, or if you choose to otherwise publish or distribute your\r
-Enhancements, in source code form without contemporaneously requiring\r
-end users of The EU EGEE Proejct to enter into a separate written license\r
-agreement for such Enhancements, then you hereby grant The EU EGEE Project\r
-a non-exclusive, royalty-free perpetual license to install, use, copy,\r
-modify, prepare derivative works, incorporate into the EGEE Middleware\r
-or any other computer software, distribute, and sublicense your\r
-Enhancements or derivative works thereof, in binary and source code\r
-form (if any), whether developed by The EU EGEE Project or third parties.\r
-\r
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED\r
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
-DISCLAIMED. IN NO EVENT SHALL PROJECT OR ITS CONTRIBUTORS BE LIABLE\r
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\r
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\r
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\r
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-\r
-This software consists of voluntary contributions made by many\r
-individuals on behalf of the EU EGEE Prject. For more information on The\r
-EU EGEE Project, please see http://cern.ch/eu-egee/. For more information on\r
-EGEE Middleware, please see http://egee-jra1.web.cern.ch/egee-jra1/\r
-\r
-\r
diff --git a/org.glite.lb/build.xml b/org.glite.lb/build.xml
deleted file mode 100755 (executable)
index 2ded065..0000000
+++ /dev/null
@@ -1,393 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Build file for the GLite Middleware Loggin and Bookkeeping Subsystem
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.27  2004/11/29 13:55:02  akrenek
-       added dependence on ws-interface
-       
-       Revision 1.26  2004/10/29 22:53:41  dimeglio
-       Use envset target
-       
-       Revision 1.25  2004/10/28 22:57:36  dimeglio
-       Quoted ant command line parameters
-       
-       Revision 1.24  2004/10/28 18:19:30  dimeglio
-       Added envcheck to individual components
-       
-       Revision 1.23  2004/10/26 15:12:06  dimeglio
-       Fixed spelling error in envchecks
-       
-       Revision 1.22  2004/10/26 13:11:13  dimeglio
-       Added dependency of clean on envchecks
-       
-       Revision 1.21  2004/10/25 20:57:38  dimeglio
-       Use antExec
-       
-       Revision 1.20  2004/10/21 10:37:48  akrenek
-       make server depend on logger due to notification interlogger
-       
-       Revision 1.19  2004/10/15 12:30:01  akrenek
-       build with lb.sever-bones
-       
-       Revision 1.18  2004/09/29 13:35:39  flammer
-       Only update of line formatting.
-       
-       Revision 1.17  2004/09/09 21:05:29  dimeglio
-       Moved tag target to targets-common
-       
-       Revision 1.16  2004/08/27 03:03:12  dimeglio
-       Preserve original timestamp when copying file and overwrite when new
-       
-       Revision 1.15  2004/08/27 02:46:52  dimeglio
-       Added logic to create the tagged dependencies properties file
-       
-       Revision 1.14  2004/08/26 23:48:26  dimeglio
-       Added generation of cruisecontrol config file entry
-       
-       Revision 1.13  2004/08/09 04:56:14  dimeglio
-       Replaced rtag with tag
-       
-       Revision 1.12  2004/08/09 04:36:44  dimeglio
-       Fixed inheritance of do.cvs.tag property
-       
-       Revision 1.11  2004/08/09 03:06:11  dimeglio
-       Fixed inheritance of failonerror property
-       
-       Revision 1.10  2004/08/09 02:35:35  dimeglio
-       Set default value for failonerror
-       
-       Revision 1.9  2004/08/08 19:07:17  dimeglio
-       Added small.memory type of build
-       
-       Revision 1.8  2004/07/29 10:47:46  dimeglio
-       Added server and logger
-       
-       Revision 1.7  2004/07/29 07:39:57  dimeglio
-       Removed local envinfo and envcheck target (must use common ones)
-       
-       Revision 1.6  2004/07/16 16:25:43  flammer
-       Added tags for automated adding of components.
-       
-       Revision 1.5  2004/07/06 17:43:33  flammer
-       Update of classpath definitions, targets & configure file.
-       
-       Revision 1.4  2004/06/23 00:24:03  dimeglio
-       Added common and client modules
-       
-       Revision 1.3  2004/06/22 18:24:35  dimeglio
-       Added client interface module
-       
-       Revision 1.2  2004/06/18 23:05:12  dimeglio
-       Added/upgraded default build scripts
-       
--->
-
-<project name="lb" default="dist">
-
-       <description>
-               Ant build file to build the GLite Logging and Bookkeping Subsystem
-       </description>
-               
-       <!-- =========================================
-                Builds the GLite LB subsystem
-            ========================================= -->
-
-       <!-- Import baseline & user properties -->
-       <import file="../org.glite/project/baseline.properties.xml" />
-
-       <!-- Import subsystem build properties, 
-                             subsystem properties & 
-                             subsystem common properties -->
-       <import file="./project/properties.xml" />
-
-       <!-- Import global build properties and global properties -->
-       <import file="${global.properties.file}" />
-                               
-       <!-- =========================================
-                Load dependencies properties files (order is important) 
-            ========================================= -->
-       <property file="${user.dependencies.file}"/>
-       <property file="${subsystem.dependencies.file}"/>
-       <property file="${global.dependencies.file}"/>  
-
-       <!-- =========================================
-                 Load configure options
-             ========================================= -->
-        <import file="${global.configure.options.file}"/>
-                       
-       <!-- =========================================
-                Import global task definitions
-            ========================================= -->
-       <import file="${global.taskdefs.file}" />
-       
-       <!-- =========================================
-            Import global compiler definitions
-            ========================================= -->
-       <import file="${global.compilerdefs.file}" />
-               
-       <!-- =========================================
-                Import targets 
-            ========================================= -->
-       <import file="${global.targets-common.file}"/>
-       
-       <!-- =========================================
-                Load version file 
-            ========================================= -->
-       <property file="${module.version.file}"/>
-                       
-       <!-- ===============================================
-                 Public common targets
-            =============================================== -->
-
-       <target name="localinit" depends="envcheck">
-
-               <echo> Preparing directories ... </echo>
-               
-               <mkdir dir="${stage.bin.dir}" />
-               <mkdir dir="${stage.lib.dir}" />
-               <mkdir dir="${stage.java.dir}" />
-               <mkdir dir="${stage.inc.dir}" />
-               <mkdir dir="${stage.int.dir}" />
-
-               <mkdir dir="${dist.dir}" />
-
-       </target>
-
-       <target name="init" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="init"/>
-               </antcall>
-       </target>
-
-       <target name="checkstyle" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="checkstyle"/>
-               </antcall>
-       </target>
-
-       <target name="compile" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="compile"/>
-               </antcall>
-       </target>
-
-       <target name="compiletest" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="compiletest"/>
-               </antcall>
-       </target>
-
-       <target name="unittest" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="unittest"/>
-               </antcall>
-       </target>
-
-       <target name="unitcoverage" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="unitcoverage"/>
-               </antcall>
-       </target>
-
-       <target name="stage" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="stage"/>
-               </antcall>
-       </target>
-
-       <target name="dist" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="dist"/>
-               </antcall>
-       </target>
-
-       <target name="install" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="install"/>
-               </antcall>
-       </target>
-
-       <target name="doc" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="doc"/>
-               </antcall>
-       </target>
-
-       <target name="all" depends="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="all"/>
-               </antcall>
-       </target>
-
-       <target name="clean" depends="envcheck">
-
-               <property name="offline.repository" value="true" />
-               <antcall target="buildmodules">
-                       <param name="target" value="clean"/>
-               </antcall>
-
-               <delete dir="${module.bin.dir}" />
-               <delete dir="${module.lib.dir}" />
-               <delete dir="${module.autosrc.dir}" />
-               <delete dir="${module.autodoc.dir}" />
-               <delete dir="${module.test.reports.dir}" />
-
-       </target>
-
-       <target name="cleanAll" depends="clean"/>
-
-       <!-- ===============================================
-                Private targets
-            =============================================== -->
-
-       <!-- ===============================================
-                Modules proxy targets
-            =============================================== -->
-
-       <!-- component targets definitions tag = do not remove = -->
-
-       <target name="client-interface" unless="setenvonly" depends="envset">
-               <if>
-                       <isset property="small.memory" />
-                       <then>
-                               <exec dir="${lb.subsystem.dir}.client-interface" executable="${antExec}" failonerror="${failonerror}">
-                                       <arg line="${target} &quot;-Dsmall.memory=true&quot; &quot;-Dbootstrap=${bootstrap}&quot; &quot;-Dfailonerror=${failonerror}&quot; &quot;-Ddo.cvs.tag=${do.cvs.tag}&quot;"/>
-                               </exec>
-                       </then>
-                       <else>
-                               <ant dir="${lb.subsystem.dir}.client-interface"
-                                    target="${target}"
-                                    inheritall="false" />
-                       </else>
-               </if>
-       </target>
-
-       <target name="ws-interface" unless="setenvonly" depends="envset">
-               <if>
-                       <isset property="small.memory" />
-                       <then>
-                               <exec dir="${lb.subsystem.dir}.ws-interface" executable="${antExec}" failonerror="${failonerror}">
-                                       <arg line="${target} &quot;-Dsmall.memory=true&quot; &quot;-Dbootstrap=${bootstrap}&quot; &quot;-Dfailonerror=${failonerror}&quot; &quot;-Ddo.cvs.tag=${do.cvs.tag}&quot;"/>
-                               </exec>
-                       </then>
-                       <else>
-                               <ant dir="${lb.subsystem.dir}.ws-interface"
-                                    target="${target}"
-                                    inheritall="false" />
-                       </else>
-               </if>
-       </target>
-
-       <target name="server-bones" unless="setenvonly" depends="envset">
-               <if>
-                       <isset property="small.memory" />
-                       <then>
-                               <exec dir="${lb.subsystem.dir}.server-bones" executable="${antExec}" failonerror="${failonerror}">
-                                       <arg line="${target} &quot;-Dsmall.memory=true&quot; &quot;-Dbootstrap=${bootstrap}&quot; &quot;-Dfailonerror=${failonerror}&quot; &quot;-Ddo.cvs.tag=${do.cvs.tag}&quot;"/>
-                               </exec>
-                       </then>
-                       <else>
-                               <ant dir="${lb.subsystem.dir}.server-bones"
-                                    target="${target}"
-                                    inheritall="false" />
-                       </else>
-               </if>
-       </target>
-
-       <target name="common" unless="setenvonly" depends="envset, globus,expat,ares,client-interface">
-               <if>
-                       <isset property="small.memory" />
-                       <then>
-                               <exec dir="${lb.subsystem.dir}.common" executable="${antExec}" failonerror="${failonerror}">
-                                       <arg line="${target} &quot;-Dsmall.memory=true&quot; &quot;-Dbootstrap=${bootstrap}&quot; &quot;-Dfailonerror=${failonerror}&quot; &quot;-Ddo.cvs.tag=${do.cvs.tag}&quot;"/>
-                               </exec>
-                       </then>
-                       <else>
-                               <ant dir="${lb.subsystem.dir}.common"
-                                    target="${target}"
-                                    inheritall="false" />
-                       </else>
-               </if>
-       </target>
-
-       <target name="client" unless="setenvonly" depends="envset, globus,expat,ares,client-interface,common">
-               <if>
-                       <isset property="small.memory" />
-                       <then>
-                               <exec dir="${lb.subsystem.dir}.client" executable="${antExec}" failonerror="${failonerror}">
-                                       <arg line="${target} &quot;-Dsmall.memory=true&quot; &quot;-Dbootstrap=${bootstrap}&quot; &quot;-Dfailonerror=${failonerror}&quot; &quot;-Ddo.cvs.tag=${do.cvs.tag}&quot;"/>
-                               </exec>
-                       </then>
-                       <else>
-                               <ant dir="${lb.subsystem.dir}.client"
-                                    target="${target}"
-                                    inheritall="false" />
-                       </else>
-               </if>
-       </target>
-
-       <target name="server" unless="setenvonly" depends="envset, globus,expat,ares,mysql,gsoap,client-interface,ws-interface,common,logger">
-               <if>
-                       <isset property="small.memory" />
-                       <then>
-                               <exec dir="${lb.subsystem.dir}.server" executable="${antExec}" failonerror="${failonerror}">
-                                       <arg line="${target} &quot;-Dsmall.memory=true&quot; &quot;-Dbootstrap=${bootstrap}&quot; &quot;-Dfailonerror=${failonerror}&quot; &quot;-Ddo.cvs.tag=${do.cvs.tag}&quot;"/>
-                               </exec>
-                       </then>
-                       <else>
-                               <ant dir="${lb.subsystem.dir}.server"
-                                    target="${target}"
-                                    inheritall="false" />
-                       </else>
-               </if>
-       </target>
-
-       <target name="logger" unless="setenvonly" depends="envset, globus,expat,ares,client-interface,common">
-               <if>
-                       <isset property="small.memory" />
-                       <then>
-                               <exec dir="${lb.subsystem.dir}.logger" executable="${antExec}" failonerror="${failonerror}">
-                                       <arg line="${target} &quot;-Dsmall.memory=true&quot; &quot;-Dbootstrap=${bootstrap}&quot; &quot;-Dfailonerror=${failonerror}&quot; &quot;-Ddo.cvs.tag=${do.cvs.tag}&quot;"/>
-                               </exec>
-                       </then>
-                       <else>
-                               <ant dir="${lb.subsystem.dir}.logger"
-                                    target="${target}"
-                                    inheritall="false" />
-                       </else>
-               </if>
-       </target>
-
-       <!-- Main proxy -->
-       <target name="buildmodules" depends="envset, 
-                                            client-interface,
-                                            ws-interface,
-                                            client,
-                                            server-bones,
-                                            common,
-                                            server,
-                                            logger">
-               <echo append="true" file="${global.project.dir}/cruisecontrol-stub.xml">
-       &lt;project name="${subsystem.name}" type="post-subsystem" packageName="${global.prefix}-${subsystem.prefix}"/&gt;
-               </echo>
-       </target>
-
-</project>
diff --git a/org.glite.lb/project/MultiStruct.pm b/org.glite.lb/project/MultiStruct.pm
deleted file mode 100644 (file)
index 9cd847c..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-package MultiStruct;
-
-use StructField;
-
-sub new {
-       shift;
-       my $self = {};
-       $self->{comments} = {}; # typ->comment
-       $self->{fields} = {};   # typ->{ name->StructField, ... }
-       $self->{order} = {};
-
-       bless $self;
-}
-
-sub selectType {
-       my $self = shift;
-       my $type = shift;
-       $self->{type} = $type;
-       1;
-}
-
-sub addType {
-       my $self = shift;
-       my $type = shift;
-       my $comment = shift;
-       $self->selectType($type);
-       $self->{comments}->{$type} = $comment;
-       $self->{fields}->{$type} = {};
-       1;
-}
-
-sub selectField {
-       my $self = shift;
-       $self->{field} = shift;
-       $self->getField;
-}
-
-sub addField {
-       my $self = shift;
-       my $field = shift;
-       
-       die "unselected type" unless $self->{type};
-       $self->{fields}->{$self->{type}}->{$field->{name}} = $field;
-       $self->selectField($field->{name});
-       1;
-}
-
-sub getField {
-       my $self = shift;
-       my $f = $self->{fields}->{$self->{type}}->{$self->{field}};
-       return $f ? $f : $self->{fields}->{_common_}->{$self->{field}};
-}
-
-sub load {
-       my $self = shift;
-       my $fh = shift;
-       local $_;
-
-       while ($_ = <$fh>) {
-
-               chomp;
-               s/#.*$//;
-               next if /^\s*$/;
-
-               if (/^\@type\s+(\S+)\s*(.*$)$/) {
-                       $self->addType($1,$2);
-                       $self->{order}->{$1} = $.;
-                       next;
-               }
-
-               s/^\s*//;
-               my ($ftype,$fname,$comment) = split /\s+/,$_,3;
-               if ($ftype eq '_code_') {
-                       my $f = $self->getField();
-                       addCode $f $fname,$comment;
-               }
-               elsif ($ftype eq '_alias_') {
-                       my $f = $self->getField();
-                       addAlias $f $fname,$comment;
-               }
-               elsif ($ftype eq '_special_') {
-                       my $f = $self->getField();
-                       addSpecial $f $fname;
-               }
-               elsif ($ftype eq '_null_') {
-                       my $f = $self->getField();
-                       setNull $f $fname;
-               }
-               elsif ($ftype eq '_optional_') {
-                       my $f = $self->getField();
-                       $f->{optional} = 1;
-               }
-               elsif ($ftype eq '_index_') {
-                       my $f = $self->getField();
-                       $f->{index} = 1;
-               }
-               else {
-                       my $f = new StructField $fname,$ftype,$comment,$.;
-                       $self->addField($f);
-               }
-       }
-}
-
-sub getTypes {
-       my $self = shift;
-       my @out;
-       local $_;
-
-       for (keys %{$self->{fields}}) {
-               push @out,$_ unless $_ eq '_common_';
-       }
-       @out;
-}
-
-sub getTypesOrdered {
-       my $self = shift;
-       my @names = getTypes $self;
-
-       sort {
-               my $oa = $self->{order}->{$a};
-               my $ob = $self->{order}->{$b};
-               $oa <=> $ob;
-       } @names;
-}
-
-sub getTypeComment {
-       my $self = shift;
-       my $type = shift || $self->{type};
-       $self->{comments}->{$type};
-}
-
-sub getFieldComment {
-       my $self = shift;
-       my $fname = shift;
-       $self->{fields}->{$self->{type}}->{$fname}->{comment};
-}
-
-sub getFields {
-       my $self = shift;
-       keys %{$self->{fields}->{$self->{type}}};
-}
-
-sub getFieldsOrdered {
-       my $self = shift;
-       my @names = $self->getFields;
-       sort {
-               my $oa = $self->selectField($a)->{order};
-               my $ob = $self->selectField($b)->{order};
-               $oa <=> $ob;
-       } @names;
-}
-
-sub getFieldOccurence {
-       my $self = shift;
-       my $fname = shift;
-       my @out;
-       local $_;
-
-       for (keys %{$self->{fields}}) {
-               push @out,$_ if $self->{fields}->{$_}->{$fname};
-       }
-       @out;
-}
-
-sub getAllFields {
-       my $self = shift;
-       my %out;
-       local $_;
-
-       for my $t (values %{$self->{fields}}) {
-               $out{$_->{name}} = 1 for (values %$t);
-       }
-       keys %out;
-}
-
-sub getAllFieldsOrdered {
-       my $self = shift;
-       my @names = getAllFields $self;
-
-       sort {
-               my @occ = $self->getFieldOccurence($a);
-               $self->selectType($occ[0]);
-               my $oa = $self->selectField($a)->{order};
-               @occ = $self->getFieldOccurence($b);
-               $self->selectType($occ[0]);
-               my $ob = $self->selectField($b)->{order};
-               $oa <=> $ob;
-       } @names;
-}
-
-1;
diff --git a/org.glite.lb/project/StructField.pm b/org.glite.lb/project/StructField.pm
deleted file mode 100644 (file)
index 95d33b8..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-package StructField;
-
-$lang = 'C';
-1;
-
-sub new {
-       shift;
-       my $self = {};
-       $self->{name} = shift;
-       $self->{type} = shift;
-       $self->{comment} = shift;
-       $self->{order} = shift;
-       $self->{null} = $main::DefaultNullValue{$self->{type}};
-       bless $self;
-}
-
-sub addCode {
-       my $self = shift;
-       my $code = shift;
-       my $comment = shift;
-       push @{$self->{codes}},{name=>$code,comment=>$comment};
-       1;
-}
-
-sub addSpecial {
-       my $self = shift;
-       my $special = shift;
-       $self->{special} = $special;
-       1;
-}
-
-sub addAlias {
-       my $self = shift;
-       my $name = shift;
-       my $lang = shift;
-       $self->{aliases}->{$lang} = $name;
-       1;
-}
-
-sub hasAlias {
-       my $self = shift;
-       my $lang = shift;
-       return $self->{aliases}->{$lang} ? 1 : 0;
-}
-
-sub getName {
-       my $self = shift;
-       my $lang = shift || $lang;
-       $self->{aliases}->{$lang} || $self->{name};
-#      return $self->{aliases}->{$lang} ? $self->{aliases}->{$lang} : $self->{name};
-}
-
-sub getComment {
-       my $self = shift;
-       $self->{comment};
-}
-
-sub getDefaultNullValue {
-       my $self = shift;
-       $self->{null};
-}
-
-sub toString {
-       my $self = shift;
-       my $src = shift;
-       my $dst = shift;
-
-       eval $main::toString{$lang}->{$self->{type}};
-}
-
-sub fromString {
-       my $self = shift;
-       my $src = shift;
-       my $dst = shift;
-
-       eval $main::fromString{$lang}->{$self->{type}};
-}
-
-sub isNULL {
-       my $self = shift;
-       my $a = shift;
-       my $b = $self->{null};
-
-       eval $main::compare{$lang}->{$self->{type}};
-}
-
-sub isnotNULL {
-       my $self = shift;
-       my $src = shift;
-
-       '!('.$self->isNULL($src).')';
-}
-
-sub compare {
-       my $self = shift;
-       my $a = shift;
-       my $b = shift;
-       eval $main::compare{$lang}->{$self->{type}};
-}
-
-sub toFormatString {
-       my $self = shift;
-
-       eval $main::toFormatString{$lang}->{$self->{type}};
-}
-
-sub setNull {
-       my $self = shift;
-       $self->{null} = shift;
-}
-
-sub getType {
-       my $self = shift;
-
-       eval $main::types{$lang}->{$self->{type}};
-}
diff --git a/org.glite.lb/project/at3 b/org.glite.lb/project/at3
deleted file mode 100755 (executable)
index 8ff52ec..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/perl -w
-
-use File::Basename;
-my $dir;
-BEGIN{
-       $dir = dirname $0;
-}
-
-my $lines = $ENV{AT3_LINES};
-
-use lib $dir;
-use MultiStruct;
-require 'types.T';
-
-my $eventsn;
-for (@INC) { 
-       if (-f "$_/events.T") {
-               $eventsn="$_/events.T";
-               last;
-       }
-}
-
-my $statusn;
-for (@INC) {
-       if (-f "$_/status.T") {
-               $statusn = "$_/status.T";
-               last;
-       }
-}
-
-my $indent = '';
-
-my $event = new MultiStruct;
-my $status = new MultiStruct;
-
-sub gen {
-       local $_ = shift;
-
-       s/^\n!//;
-       s/\n!/\n/g;
-       print $_;
-}
-
-
-open EVENTS,$eventsn or die "$eventsn: $!\n";
-$event->load(\*EVENTS);
-close EVENTS;
-
-open STATUS,$statusn or die "$statusn: $!\n";
-$status->load(\*STATUS);
-close STATUS;
-
-my $code;
-my $startcode;
-while (<>) {
-       chomp;
-       if (/^\@\@\@LANG: (\S+)$/) {
-               $StructField::lang = $1;
-               next;
-       }
-
-       if ($code) {
-               if (/^\@\@\@}$/) {
-                       $code .= "1;\n";
-                       print "#line $startcode \"$ARGV\"\n/* begin */\n" if $lines;
-                       eval $code or warn "eval: $@ at $ARGV:$.\n";
-                       my $nxtline = $.+1;
-                       print "/* end */\n#line $nxtline \"$ARGV\"\n" if $lines;
-                       undef $code;
-               }
-               else { $code .= $_."\n"; }
-       }
-       else {
-               if (/^\@\@\@{$/) {
-                       $startcode = $.;
-                       $code = "\n";
-               }
-               elsif (/^\@\@\@AUTO$/) {
-                       print qq{
-  !! Automatically generated file
-  !! Do not edit, your changes will be discarded upon build
-  !! Change the corresponding template file $ARGV
-
-};
-                       print "#line $. \"$ARGV\"\n" if $lines;
-               }
-               else {
-                       print "$_\n";
-               }
-       }
-}
-
-# print $event_common{prog}->copy('bla','hu');
diff --git a/org.glite.lb/project/build.properties b/org.glite.lb/project/build.properties
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.glite.lb/project/dependencies.properties b/org.glite.lb/project/dependencies.properties
deleted file mode 100644 (file)
index 8757f10..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-###################################################################
-# System dependencies
-###################################################################
-
-org.glite.version                              = HEAD
-org.glite.lb.version                           = HEAD
-
-# Component dependencies tag = do not remove this line =
-org.glite.lb.client-interface.version          = HEAD
-org.glite.lb.ws-interface.version              = HEAD
-org.glite.lb.common.version                    = HEAD
-org.glite.lb.client.version                    = HEAD
-org.glite.lb.server.version                    = HEAD
-org.glite.lb.server-bones.version              = HEAD
-org.glite.lb.logger.version                    = HEAD
diff --git a/org.glite.lb/project/events.T b/org.glite.lb/project/events.T
deleted file mode 100644 (file)
index b8e5399..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-@type _common_
-       timeval timestamp       timestamp of event generation
-       _alias_ date            ULM
-       timeval arrived         timestamp of event store
-       _alias_ arr_date        ULM
-       _optional_
-       string  host            hostname of the machine where the event was generated
-       _alias_ host            ULM
-       int     level           logging level (system, debug, ...)
-       _alias_ lvl             ULM
-       _code_  EMERGENCY       emergency
-       _code_  ALERT           alert
-       _code_  ERROR           error
-       _code_  WARNING         warning
-       _code_  AUTH            authentication
-       _code_  SECURITY        security
-       _code_  USAGE           usage
-       _code_  SYSTEM          system
-       _code_  IMPORTANT       important
-       _code_  DEBUG           debug
-       int     priority        message priority (yet 0 for asynchronous and 1 for synchronous transfers)
-       _null_  -1
-       jobid   jobId           DataGrid job id of the source job
-       string  seqcode         sequence code assigned to the event
-       string  user            identity (cert. subj.) of the generator
-       logsrc  source          source (WMS component) which generated this event
-#      string  prog            name of program ("EDG WMS" of name of the application)
-       string  src_instance    instance of WMS component (e.g. service communication endpoint)
-       _optional_
-
-@type Transfer         Start, success, or failure of job transfer to another component
-       logsrc  destination     destination where the job is being transfered to
-       string  dest_host       destination hostname
-       string  dest_instance   destination instance
-       _optional_
-       string  job             job description in receiver language
-       int     result          result of the attempt
-       _code_  START           the sending component has started or is about to start the transfer
-       _code_  OK              job was sent successfully
-       _code_  REFUSED         job was refused by the other component
-       _code_  FAIL            transfer failed for other reason than explicit refusal (eg. network timeout)
-       string  reason          detailed description of transfer, especially reason of failure
-       _optional_
-       string  dest_jobid      destination internal jobid
-       _optional_
-
-@type Accepted         Accepting job (successful couterpart to Transfer)
-       logsrc  from            where was the job received from
-       string  from_host       sending component hostname
-       string  from_instance   sending component instance
-       _optional_
-       string  local_jobid     new jobId (Condor, Globus ...) assigned by the receiving component
-
-@type Refused          Refusing job (unsuccessful couterpart to Transfer)
-       logsrc  from            where was the job received from
-       string  from_host       sending component hostname
-       string  from_instance   sending component instance
-       _optional_
-       string  reason          reason of refusal
-
-@type EnQueued         The job has been enqueued in an inter-component queue
-       string  queue           destination queue
-       string  job             job description in receiver language
-       int     result          result of the attempt
-       _code_  START           the sending component has started or is about to start the transfer
-       _code_  OK              job was sent successfully
-       _code_  REFUSED         job was refused by the other component
-       _code_  FAIL            transfer failed for other reason than explicit refusal (eg. network timeout)
-       string  reason          detailed description of transfer, especially reason of failure
-
-@type DeQueued         The job has been dequeued from an inter-component queue
-       string  queue           queue name
-       string  local_jobid     new jobId assigned by the receiving component
-
-@type HelperCall       Helper component is called
-       string  helper_name     name of the called component
-       string  helper_params   parameters of the call
-       int     src_role        whether the logging component is called or calling one
-       _code_  CALLING         the logging component is caller
-       _code_  CALLED          the logging component is callee
-
-@type HelperReturn     Helper component is returning the control
-       string  helper_name     name of the called component
-       string  retval          returned data
-       int     src_role        whether the logging component is called or calling one
-       _code_  CALLING         the logging component is caller
-       _code_  CALLED          the logging component is callee
-
-@type Running          Executable started
-       string  node            worker node where the executable is run
-
-@type Resubmission     Result of resubmission decision
-       int     result          result code
-       _code_  WILLRESUB       will be resubmitted
-       _code_  WONTRESUB       will not be resubmitted
-       string  reason          reason for the decision
-       string  tag             value of the attribute on which the decision is based
-
-@type Done             Execution terminated (normally or abnormally)
-       int     status_code     way of termination
-       _code_  OK              terminated by itself
-       _code_  FAILED          disappeared from LRMS
-       _code_  CANCELLED       cancelled by user request
-       string  reason          reason for the change
-       int     exit_code       process exit code
-       _null_  -1
-
-@type Cancel           Cancel operation has been attempted on the job
-       int     status_code     classification of the cancel
-       _code_  REQ             request acknowledged
-       _code_  REFUSE          request declined by this component
-       _code_  DONE            request completed by whole WMS
-       _code_  ABORT           request refused by whole WMS
-       string  reason  detailed description
-
-@type Abort            Job aborted by system
-       string  reason          reason of abort
-
-@type Clear            Job cleared, output sandbox removed
-       int     reason          why the job was cleared
-       _code_  USER            user retrieved output sandbox
-       _code_  TIMEOUT         timed out, resource purge forced
-       _code_  NOOUTPUT        no output was generated
-
-@type Purge            Job is purged from bookkepping server
-
-@type Match            Matching CE found
-       string  dest_id         Id of the destination CE/queue
-       
-@type Pending          No match found yet
-       string  reason          why matching CE cannot be found
-
-@type RegJob           New job registration
-       string  jdl             job description
-       string  ns              NetworkServer handling the job
-       jobid   parent          jobid of parent job
-       _optional_
-
-       int     jobtype         job type
-       _code_  SIMPLE          simple job
-       _code_  DAG             dag (containing static set of subjobs)
-       _code_  PARTITIONABLE   partitionable (may become partitioned)
-       _code_  PARTITIONED     partitioned (dynamically created dag)
-       
-       int     nsubjobs        number of subjobs
-       _optional_
-       string  seed            seed for subjob id generation
-       _optional_
-
-@type Chkpt            Application-specific checkpoint record
-       string  tag             checkpoint tag
-       string  classad         checkpoint value
-
-@type Listener                 Listening network port for interactive control
-       string  svc_name        port instance name
-       string  svc_host        hostname
-       port    svc_port        port number
-
-@type CurDescr         current state of job processing (optional event)
-       string  descr           description of current job transformation (output of helper)
-
-@type UserTag          user tag -- arbitrary name=value pair
-       string  name    tag name
-       string  value   tag value
-
-@type ChangeACL                Management of ACL stored on bookkepping server
-       string  user_id         DN or VOMS parameter (in format VO:group)
-       int     user_id_type    type of information given in user_id (DN or VOMS)
-       _null_  -1
-       int     permission      ACL permission to change (currently only READ)
-       _null_  -1
-       int     permission_type type of permission requested ('allow', 'deny')
-       _null_  -1
-       int     operation       operation requested to perform with ACL (add, remove)
-       _null_  -1
-
-@type Notification     Management of notification service
-       notifid notifId         notification id
-       string  owner           owner
-       string  dest_host       destination host
-       port    dest_port       destination port
-       string  jobstat         job status
-
diff --git a/org.glite.lb/project/glite.lb.csf.xml b/org.glite.lb/project/glite.lb.csf.xml
deleted file mode 100644 (file)
index d78376b..0000000
+++ /dev/null
@@ -1,335 +0,0 @@
-<?xml version="1.0"?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       gLite Middleware Logging and Bookkeping Configuration Specification File
-       
-       Authors: Alberto Di Meglio <alberto.di.meglio@cern.ch>  
-                Joachim Flammer <Joachim.Flammer@cern.ch>      
-                Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.10  2004/11/29 16:01:21  zsalvet
-       Evaluate component.{head,tag} conditions before use of get.* targets.
-       
-       Revision 1.9  2004/11/29 15:16:26  zsalvet
-       Add ws-interface to checkout/build machinery.
-       
-       Revision 1.8  2004/10/18 22:55:14  dimeglio
-       Added oscheck to various targets
-       
-       Revision 1.7  2004/10/15 12:30:01  akrenek
-       build with lb.sever-bones
-       
-       Revision 1.6  2004/08/27 10:03:41  zurek
-       typo problem
-       
-       Revision 1.5  2004/08/27 09:13:11  zurek
-       changing thee order for build
-       
-       Revision 1.4  2004/07/29 10:47:46  dimeglio
-       Added server and logger
-       
-       Revision 1.3  2004/07/16 16:25:43  flammer
-       Added tags for automated adding of components.
-       
-       Revision 1.2  2004/06/23 00:22:11  dimeglio
-       Added client and client-interface components
-       
-       Revision 1.1  2004/06/18 23:05:53  dimeglio
-       Added/upgraded default build scripts
-       
--->
-
-
-<project name="GLite Middleware Logging and Bookkeping CSF" default="all">
-
-       <!-- ===============================================
-                 Determine workspace directory 
-                =============================================== -->
-
-       <!-- Relative workspace root directory -->
-       <property name="workspace.dir" value="../.." />
-       
-       <!-- ===============================================
-                Load properties
-                =============================================== -->
-
-       <!-- load baseline and user properties -->
-       <import file="${workspace.dir}/org.glite/project/baseline.properties.xml" />
-
-       <!-- define build properties file location since we are already in project dir -->
-       <property name="subsystem.build.properties.file" value="./build.properties" />
-
-       <!-- Load subsystem-specific property file -->
-       <property file="./properties.xml"/>
-
-       <!-- load global properties -->
-       <import file="${global.properties.file}" />
-
-       <!-- ===============================================
-                Load dependencies 
-                =============================================== -->
-
-       <!-- Load user dependencies file -->
-       <property file="${user.dependencies.file}" />
-               
-       <!-- Load subsystem dependencies file -->
-       <property file="./dependencies.properties" />
-
-       <!-- Load global dependencies file -->
-       <property file="${global.dependencies.file}" />
-
-       <!-- ===============================================
-                Load targets
-                =============================================== -->
-       <import file="${global.targets-envchecks.file}" />
-       <import file="${global.targets-external-dependencies.file}" />  
-
-       <!-- ===============================================
-                Evaluate CVS tags
-                =============================================== -->
-
-       <target name="evaluate.cvs.tags" description="Figure out if we need tagged CVS checkout">
-               <condition property="glite.head">
-                       <and>
-                               <equals arg1="${org.glite.version}" arg2="HEAD" />
-                               <or>
-                                       <istrue value="${update}" />
-                                       <not>
-                                               <available file="${global.dependencies.file}" type="file" />
-                                       </not>
-                               </or>
-                       </and>
-               </condition>
-               <condition property="glite.tag">
-                       <and>
-                               <not>
-                                       <equals arg1="${org.glite.version}" arg2="HEAD" />
-                               </not>
-                               <or>
-                                       <istrue value="${update}" />
-                                       <not>
-                                               <available file="${global.dependencies.file}" type="file" />
-                                       </not>
-                               </or>
-                       </and>
-               </condition>
-               <condition property="glite-lb.head">
-                       <and>
-                               <equals arg1="${org.glite.lb.version}" arg2="HEAD" />
-                               <istrue value="${update}" />
-                       </and>
-               </condition>
-               <condition property="glite-lb.tag">
-                       <and>
-                               <not>
-                                       <equals arg1="${org.glite.lb.version}" arg2="HEAD" />
-                               </not>
-                               <istrue value="${update}" />
-                       </and>
-               </condition>
-       
-               <!-- condition property tag = do not remove = -->
-
-               <condition property="common.head">
-                       <equals arg1="${org.glite.lb.common.version}" arg2="HEAD" />
-               </condition>
-
-               <condition property="server-bones.head">
-                       <equals arg1="${org.glite.lb.server-bones.version}" arg2="HEAD" />
-               </condition>
-
-               <condition property="client-interface.head">
-                       <equals arg1="${org.glite.lb.client-interface.version}" arg2="HEAD" />
-               </condition>
-
-               <condition property="ws-interface.head">
-                       <equals arg1="${org.glite.lb.ws-interface.version}" arg2="HEAD" />
-               </condition>
-
-               <condition property="client.head">
-                       <equals arg1="${org.glite.lb.client.version}" arg2="HEAD" />
-               </condition>
-
-               <condition property="server.head">
-                       <equals arg1="${org.glite.lb.server.version}" arg2="HEAD" />
-               </condition>
-
-               <condition property="logger.head">
-                       <equals arg1="${org.glite.lb.logger.version}" arg2="HEAD" />
-               </condition>
-
-       </target>
-
-       <presetdef name="cvs-co">
-               <cvs command="checkout" dest="${workspace.dir}" />
-       </presetdef>
-
-       <!-- =====================================================
-                Self-update if required
-                ===================================================== -->
-               
-       <!-- Update main GLite module -->
-       <target name="org.glite" depends="evaluate.cvs.tags, get.glite.head, get.glite.tag"/>
-       <target name="get.glite.head" if="glite.head">
-               <cvs-co package="org.glite" />
-       </target>
-       <target name="get.glite.tag" if="glite.tag">
-               <cvs-co package="org.glite"
-                       tag="${org.glite.version}" />
-       </target>
-
-       <!-- Update the current module -->
-       <target name="org.glite.lb" depends="evaluate.cvs.tags, get.glite-lb.head, get.glite-lb.tag"/>
-       <target name="get.glite-lb.head" if="glite-lb.head">
-               <cvs-co package="org.glite.lb" />
-               <fail>The org.glite and org.glite.lb modules have been updated, please rerun the configuration file</fail>
-       </target>
-       <target name="get.glite-lb.tag" if="glite-lb.tag">
-               <cvs-co package="org.glite.lb"
-                       tag="${org.glite.lb.version}" />
-               <fail>The org.glite and org.glite.lb modules have been updated, please rerun the configuration file</fail>
-       </target>
-
-       <!-- *****************************************************-->
-       <!-- Development tools                                    -->
-       <!-- *****************************************************-->
-       
-       <!-- All development tools -->
-       <target name="devtools" depends="oscheck,
-                                       evaluate.cvs.tags,
-                                                                        junitcheck,
-                                                                        junit,
-                                                                        chkstyle,
-                                                                        jalopy,
-                                                                        ant-contrib,
-                                                                        cpptasks,
-                                                                        egee-ant-ext"
-                       description="Get development tools into repository."/>          
-
-       <!-- =====================================================
-                External libraries
-                ===================================================== -->
-       
-       <!--  All external libraries -->
-       <target name="external" depends="oscheck, evaluate.cvs.tags, globus"
-                       description="Install external packages"/>
-       
-       <!-- =====================================================
-                GLite Middleware LB modules
-                ===================================================== -->
-
-       <!-- component targets tag = do not remove = -->
-       
-       <!-- common -->
-       <target name="common" depends="evaluate.cvs.tags, get.common.head, get.common.tag"/>
-       <target name="get.common.head" if="common.head">
-               <cvs-co package="org.glite.lb.common" />
-       </target>
-       <target name="get.common.tag" unless="common.head">
-               <cvs-co package="org.glite.lb.common"
-                       tag="${org.glite.lb.common.version}" />
-       </target>
-
-       <!-- server-bones -->
-       <target name="server-bones" depends="evaluate.cvs.tags, get.server-bones.head, get.server-bones.tag"/>
-       <target name="get.server-bones.head" if="server-bones.head">
-               <cvs-co package="org.glite.lb.server-bones" />
-       </target>
-       <target name="get.server-bones.tag" unless="server-bones.head">
-               <cvs-co package="org.glite.lb.server-bones"
-                       tag="${org.glite.lb.server-bones.version}" />
-       </target>
-
-       <!-- client-interface -->
-       <target name="client-interface" depends="evaluate.cvs.tags, get.client-interface.head, get.client-interface.tag"/>
-       <target name="get.client-interface.head" if="client-interface.head">
-               <cvs-co package="org.glite.lb.client-interface" />
-       </target>
-       <target name="get.client-interface.tag" unless="client-interface.head">
-               <cvs-co package="org.glite.lb.client-interface"
-                       tag="${org.glite.lb.client-interface.version}" />
-       </target>
-
-       <!-- WS interface -->
-       <target name="ws-interface" depends="evaluate.cvs.tags, get.ws-interface.head, get.ws-interface.tag"/>
-       <target name="get.ws-interface.head" if="ws-interface.head">
-               <cvs-co package="org.glite.lb.ws-interface" />
-       </target>
-       <target name="get.ws-interface.tag" unless="ws-interface.head">
-               <cvs-co package="org.glite.lb.ws-interface"
-                       tag="${org.glite.lb.ws-interface.version}" />
-       </target>
-
-       <!-- client -->
-       <target name="client" depends="evaluate.cvs.tags, get.client.head, get.client.tag"/>
-       <target name="get.client.head" if="client.head">
-               <cvs-co package="org.glite.lb.client" />
-       </target>
-       <target name="get.client.tag" unless="client.head">
-               <cvs-co package="org.glite.lb.client"
-                       tag="${org.glite.lb.client.version}" />
-       </target>
-
-       <!-- server -->
-       <target name="server" depends="evaluate.cvs.tags, get.server.head, get.server.tag"/>
-       <target name="get.server.head" if="server.head">
-               <cvs-co package="org.glite.lb.server" />
-       </target>
-       <target name="get.server.tag" unless="server.head">
-               <cvs-co package="org.glite.lb.server"
-                       tag="${org.glite.lb.server.version}" />
-       </target>
-
-       <!-- logger -->
-       <target name="logger" depends="evaluate.cvs.tags, get.logger.head, get.logger.tag"/>
-       <target name="get.logger.head" if="logger.head">
-               <cvs-co package="org.glite.lb.logger" />
-       </target>
-       <target name="get.logger.tag" unless="logger.head">
-               <cvs-co package="org.glite.lb.logger"
-                       tag="${org.glite.lb.logger.version}" />
-       </target>
-
-       <!-- All project modules -->
-       <target name="project" depends="client-interface,
-                                               ws-interface,
-                                               common,
-                                               server-bones,
-                                               client,
-                                               server,
-                                               logger"/>
-
-
-       <!-- ====================================================
-                Checkout all
-                ==================================================== -->
-       
-       <!-- All libraries -->
-       <target name="all" depends="oscheck,evaluate.cvs.tags, defaultenvchecks, org.glite, org.glite.lb, devtools, external, project" />               
-
-       <!-- ====================================================
-                Print dependecies to console
-                ==================================================== -->
-       
-       <target name="dependencies">
-               <concat>
-                       <fileset dir="." includes="dependencies.properties" />
-               </concat>
-       </target>               
-
-</project>
diff --git a/org.glite.lb/project/properties.xml b/org.glite.lb/project/properties.xml
deleted file mode 100755 (executable)
index 0d0291a..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Common build properties file for the gLite LB modules
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-                        Alberto Di Meglio <alberto.di.meglio@cern.ch>          
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
--->
-
-<project name="Logging and Bookkeping subsystem common properties">
-
-       <!-- Include build properties to allow overwriting 
-            of properties for subsystem                    -->
-       <property name="subsystem.build.properties.file" value="./project/build.properties" />
-       <property file="${subsystem.build.properties.file}" />  
-
-       <!-- ======================================================
-          Define subsystem properties
-                ====================================================== -->
-       
-       <!-- Subsystem name -->
-       <property name="subsystem.name" value="${lb.subsystem.name}"/>
-       
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${lb.subsystem.prefix}"/>
-       
-       <!-- ======================================================
-          Define general subsystem properties
-                ====================================================== -->
-               
-       <!-- Include common subsystem properties -->
-       <import file="${subsystem.general.properties.file}" />
-       
-       <!-- ======================================================
-                Define extra properties here ...
-                ====================================================== -->
-                       
-               
-</project>
\ No newline at end of file
diff --git a/org.glite.lb/project/run-workspace b/org.glite.lb/project/run-workspace
deleted file mode 100644 (file)
index 03a3381..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-
-cd ../..
-
-cvs co org.glite
-cvs co org.glite.lb
-                                                                                                                                                             
-cd org.glite.lb/project
-ant -f glite.lb.csf.xml
-
diff --git a/org.glite.lb/project/status.T b/org.glite.lb/project/status.T
deleted file mode 100644 (file)
index 10071ac..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-@type _common_
-jobid  jobId           Id of the job
-string owner           Job owner
-_index_
-
-int    jobtype         Type of job
-       _null_  -1
-       _code_ SIMPLE   simple job
-       _code_ DAG      composite job
-jobid  parent_job      parent job of subjob
-
-string seed            string used for generation of subjob IDs
-int    children_num    number of subjobs
-strlist        children        list of subjob IDs
-       _special_       XMLstructured
-intlist        children_hist   summary (histogram) of children job states
-       _special_       XMLstructured
-stslist children_states full status information of the children
-       _special_       XMLstructured
-
-string         condorId        Id within Condor-G
-string globusId        Globus allocated Id
-string localId         Id within LRMS
-
-string jdl             User submitted job description
-string matched_jdl     Full job description after matchmaking
-string destination     ID of CE where the job is being sent
-_index_
-string condor_jdl      ClassAd passed to Condor-G for last job execution
-string rsl             Job RSL sent to Globus
-
-string reason          Reason of being in this status, if any
-
-string location        Where the job is being processed
-_index_
-string ce_node         Worker node where the job is executed
-string network_server  Network server handling the job
-
-bool   subjob_failed   Subjob failed (the parent job will fail too)
-int    done_code               Return code
-       _null_  -1
-       _code_  OK              Finished correctly
-       _code_  FAILED          Execution failed
-       _code_  CANCELLED       Cancelled by user
-int    exit_code               Unix exit code
-bool   resubmitted     The job was resubmitted
-
-bool   cancelling      Cancellation request in progress
-string cancelReason    Reason of cancel
-
-int    cpuTime         Consumed CPU time
-       _null_  -1
-
-taglist        user_tags       List of pairs (user_tag, user_value)
-       _special_       XMLstructured
-
-timeval        stateEnterTime  When entered this status
-timeval        lastUpdateTime  Last known event of the job
-
-intlist        stateEnterTimes When all previous states were entered
-       _special_       XMLstructured
-
-bool   expectUpdate    Some logged information has not arrived yet
-string expectFrom      Sources of the missing information
-string acl             ACL of the job
-
-@type Submitted                entered by the user to the User Interface or registered by Job Partitioner
-@type Waiting          Accepted by WMS, waiting for resource allocation
-@type Ready            Matching resources found
-@type Scheduled                Accepted by LRMS queue
-@type Running          Executable is running
-@type Done             Execution finished, output is available
-@type Cleared          Output transfered back to user and freed
-@type Aborted          Aborted by system (at any stage)
-@type Cancelled                Cancelled by user
-@type Unknown          Status cannot be determined
-@type Purged           Job has been purged from bookkeeping server (for LB->RGMA interface)
diff --git a/org.glite.lb/project/taskdefs.xml b/org.glite.lb/project/taskdefs.xml
deleted file mode 100755 (executable)
index 251f790..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Common Ant task definition file for the gLite Logging and Bookeeping modules
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-                        Alberto Di Meglio <alberto.di.meglio@cern.ch>          
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
--->
-
-<project name="Logging and Bookeeping subsystem common tasks and types definitions">
-       
-       <!-- ======================================================
-                Subsystem task definitions
-                ====================================================== -->
-       
-</project>
\ No newline at end of file
diff --git a/org.glite.lb/project/types.T b/org.glite.lb/project/types.T
deleted file mode 100644 (file)
index ccabc74..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-%types = (
-       C=>{
-               bool=>'"int"',
-               string=>'"char *"',
-               strlist=>'"char **"',
-               intlist=>'"int *"',
-               taglist=>'"edg_wll_TagValue *"',
-               stslist=>'"struct _edg_wll_JobStat *"',
-               timeval=>'"struct timeval"',
-               jobid=>'"edg_wlc_JobId"',
-               notifid=>'"edg_wll_NotifId"',
-               logsrc=>'"edg_wll_Source"',
-               port=>'"uint16_t"',
-#              level=>'"enum edg_wll_Level"',
-               int=>'"int"'
-       },
-       'C++'=>{
-               string=>'"std::string"',
-               timeval=>'"struct timeval"',
-               jobid=>'"edg::workload::common::jobid::JobId"',
-               bool=>'"int"',
-                intlist=>'"std::vector<int>"',
-                strlist=>'"std::vector<std::string>"',
-                taglist=>'"std::vector<std::pair<std::string>>"',
-               stslist=>'"std::vector<JobStatus>"',
-               logsrc=>'"int"',
-               port=>'"int"',
-               int=>'"int"'
-       }
-);
-
-%toString = (
-       C=>{
-               int=>'qq{asprintf(&$dst,"%d",$src);}',
-               port=>'qq{asprintf(&$dst,"%d",(int) $src);}',
-               bool=>'qq{asprintf(&$dst,"%d",$src);}',
-               string=>'qq{$dst = $src?strdup($src):NULL;}',
-               timeval=>'qq{edg_wll_ULMTimevalToDate(($src).tv_sec,($src).tv_usec,$dst);}',
-               jobid=>'qq{$dst = edg_wlc_JobIdUnparse($src);}',
-               notifid=>'qq{$dst = edg_wll_NotifIdUnparse($src);}',
-#              level=>'qq{$dst = edg_wll_LevelToString($src);}',
-               logsrc=>'qq{$dst = edg_wll_SourceToString($src);}',
-#      strlist, intlist, stslist are used only in consumer API, they don't need toString method
-       }
-);
-
-%ULMasString = (
-       logsrc=>1
-);
-
-%fromString = (
-       C=>{
-               int=>'qq{$dst = atoi($src);}',
-               port=>'qq{$dst = (uint16_t) atoi($src);}',
-               bool=>'qq{$dst = atoi($src);}',
-               string=>'qq{$dst = strdup($src);}',
-               timeval=>'qq{edg_wll_ULMDateToTimeval($src,&$dst);}',
-               jobid=>'qq{edg_wlc_JobIdParse($src,&$dst);}',
-               notifid=>'qq{edg_wll_NotifIdParse($src,&$dst);}',
-#              level=>'qq{$dst = edg_wll_StringToLevel($src);}',
-               logsrc=>'qq{$dst = edg_wll_StringToSource($src);}',
-#      strlist, intlist, stslist are used only in consumer API, they don't need fromString method
-       }
-);
-
-%DefaultNullValue = (
-       int=>0,
-       port=>0,
-#      level=>'EDG_WLL_LEVEL_UNDEFINED',
-       bool=>0,
-       string=>'NULL',
-       jobid=>'NULL',
-       notifid=>'NULL',
-       logsrc=>'EDG_WLL_SOURCE_NONE',
-       timeval=>'null_timeval',
-       strlist=>'NULL',
-       intlist=>'NULL',
-       taglist=>'NULL',
-       stslist=>'NULL',
-);
-
-%compare = (
-       C=>{
-               int=>'"($a == $b)"',
-               port=>'"($a == $b)"',
-#              level=>'"($a == $b)"',
-               bool=>'"(($a || !$b) && ($b || !$a))"',
-               string=>'"(($a) == NULL && ($b) == NULL) || (($a)&&($b)&& !strcmp($a,$b))"',
-               jobid=>'"(($a) == NULL && ($b) == NULL) || (($a)&&($b)&& !strcmp(edg_wlc_JobIdUnparse($a),edg_wlc_JobIdUnparse($b)))"',
-               notifid=>'"($a) == ($b)"',
-               logsrc=>'"($a) == ($b)"',
-               timeval=>'"($a).tv_sec == ($b).tv_sec && ($a).tv_usec == ($b).tv_usec"',
-       }
-);
-
-%toFormatString = (
-       C=>{
-               int=>'"%d"',
-               port=>'"%d"',
-               bool=>'"%d"',
-#              level=>'"%s"',
-               string=>'"%|Us"',
-               jobid=>'"%s"',
-               notifid=>'"%s"',
-               logsrc=>'"%s"',
-               timeval=>'"%s"',
-       }
-);
diff --git a/org.glite.lb/project/version.properties b/org.glite.lb/project/version.properties
deleted file mode 100644 (file)
index a999d55..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Dec 10 13:30:32 CET 2004
-module.version=0.3.0
-module.build=113
-module.age=2
diff --git a/org.glite.security.proxyrenewal/.cvsignore b/org.glite.security.proxyrenewal/.cvsignore
deleted file mode 100644 (file)
index 3a4edf6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.project
diff --git a/org.glite.security.proxyrenewal/LICENSE b/org.glite.security.proxyrenewal/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.security.proxyrenewal/Makefile b/org.glite.security.proxyrenewal/Makefile
deleted file mode 100644 (file)
index 539736d..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-#
-# 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), Finland
-# University of Bergen (UiB), Norway
-# Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-#
-# Top Makefile file for the GLite Security Proxyrenewal module
-#
-# Authors: Ales Krenek <ljocha@ics.muni.cz>
-# Version info: $Id$
-# Release: $Name$
-#
-# Revision history:
-# $Log
-#
-
-# defaults
-top_srcdir=.
-builddir=build
-top_builddir=${top_srcdir}/${builddir}
-stagedir=.
-distdir=.
-globalprefix=glite
-lbprefix=lb
-package=glite-security-proxyrenewal
-version=1.0.0
-PREFIX=/opt/glite
-
-glite_location=$PREFIX
-globus_prefix=/opt/globus
-voms_prefix=/opt/glite
-nothrflavour=gcc32
-thrflavour=gcc32pthr
-myproxy_prefix=$globus_prefix
-
--include Makefile.inc
-
-VPATH:=${top_srcdir}/src
-
-GLOBUSINC:= -I${globus_prefix}/include/${nothrflavour} \
-       -I${globus_prefix}/include/${nothrflavour}/openssl
-
-GLOBUSTHRINC:= -I${globus_prefix}/include/${thrflavour} \
-       -I${globus_prefix}/include/${thrflavour}/openssl
-
-MYPROXYINC:= -I${myproxy_prefix}/include/${nothrflavour}
-MYPROXYTHRINC:= -I${myproxy_prefix}/include/${thrflavour}
-
-DEBUG:=-g -O0
-
-# XXX: until VOMS is ready in SCM
-CFLAGS:= -DNOVOMS \
-       ${DEBUG} \
-       -DVOMS_INSTALL_PATH=\"${voms_prefix}\"\
-       ${MYPROXYINC} \
-       -I${top_srcdir}/src -I${top_srcdir}/interface \
-       -I${glite_location}/include
-
-GLOBUS_LIBS:=-L${globus_prefix}/lib \
-       -lglobus_common_${nothrflavour} \
-       -lssl_${nothrflavour}
-
-MYPROXY_LIB:=-L${myproxy_prefix}/lib -lmyproxy_${nothrflavour}
-
-JOBIDLIB:=-L${glite_location}/lib -lglite_wmsutils_cjobid
-
-COMPILE:=libtool --mode=compile ${CC} ${CFLAGS}
-LINK:=libtool --mode=link ${CC} ${LDFLAGS}
-INSTALL:=libtool --mode=install install
-
-DAEMONOBJ:=renewd.o renew.o common.o commands.o api.o
-LIBOBJ:=api.o common.o
-CLIENTOBJ:=client.o
-
-THRLIBOBJ:=${LIBOBJ:.o=.thr.o}
-LIBLOBJ:=${LIBOBJ:.o=.lo}
-THRLIBLOBJ:=${LIBOBJ:.o=.thr.lo}
-
-LIB:=libglite_security_proxyrenewal_${nothrflavour}.la
-THRLIB:=libglite_security_proxyrenewal_${thrflavour}.la
-
-DAEMON:=glite-proxy-renewd
-CLIENT:=glite-proxy-renew
-
-default: all
-compile all: ${LIB} ${THRLIB} ${DAEMON} ${CLIENT}
-
-${LIB}: ${LIBOBJ}
-       ${LINK} -o $@ ${LIBLOBJ} -rpath ${glite_location}/lib ${JOBIDLIB}
-
-
-${THRLIB}: ${THRLIBOBJ}
-       ${LINK} -o $@ ${THRLIBLOBJ} -rpath ${glite_location}/lib
-
-${DAEMON}: ${DAEMONOBJ}
-       ${LINK} -o $@ ${DAEMONOBJ} ${JOBIDLIB} ${MYPROXY_LIB} -lglobus_gss_assist_${nothrflavour} ${GLOBUS_LIBS} 
-
-${CLIENT}: ${CLIENTOBJ} ${LIB}
-       ${LINK} -o $@ ${CLIENTOBJ} ${LIB} ${GLOBUS_LIBS}
-
-${THRLIBOBJ}: %.thr.o: %.c
-       ${COMPILE} ${GLOBUSTHRINC} -o $@ -c $<
-
-%.o: %.c
-       ${COMPILE} ${GLOBUSINC} -c $<
-
-stage: compile
-       $(MAKE) install PREFIX=${stagedir}
-
-
-check:
-       echo No unit tests
-
-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
-       cd tmpbuilddir && tar -czf ../${top_srcdir}/${distdir}/${package}-${version}_bin.tar.gz *
-       rm -rf tmpbuilddir
-
-install:
-       -mkdir -p ${PREFIX}/bin ${PREFIX}/lib ${PREFIX}/include/glite/security/proxyrenewal ${PREFIX}/share/doc/${package}-${version} ${PREFIX}/etc/init.d
-       ${INSTALL} -m 644 ${LIB} ${THRLIB} ${PREFIX}/lib
-       ${INSTALL} -m 755 ${DAEMON} ${CLIENT} ${PREFIX}/bin
-       ${INSTALL} -m 644 ${top_srcdir}/LICENSE ${PREFIX}/share/doc/${package}-${version}
-       cd ${top_srcdir}/interface && ${INSTALL} -m 644 renewal.h ${PREFIX}/include/glite/security/proxyrenewal
-
-       ${INSTALL} -m 755 ${top_srcdir}/config/startup ${PREFIX}/etc/init.d/${DAEMON}
-
-
-clean:
-       $(RM) $(LIB) $(DAEMON) $(CLIENT) *.o core 
diff --git a/org.glite.security.proxyrenewal/build.xml b/org.glite.security.proxyrenewal/build.xml
deleted file mode 100755 (executable)
index fcced8d..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Build file for the GLite LB Client module
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.3  2004/07/30 08:31:07  dimeglio
-       Changed default Ant target from compile to dist
-       
-       Revision 1.2  2004/07/12 16:18:37  dimeglio
-       Modified to use myproxy from the repository if available
-       
-       Revision 1.1.1.1  2004/07/09 10:16:25  akrenek
-       initial import
-       
-       Revision 1.2  2004/07/07 09:24:57  akrenek
-       thr/nonthr flavours used correctly
-       
-       Revision 1.3  2004/07/06 17:45:30  flammer
-       Update of classpath definitions, targets & configure file.
-       
-       Revision 1.2  2004/06/23 00:29:33  dimeglio
-       Added standard comments and handling of support files
-       
--->
-
-<project name="proxyrenewal" default="dist">
-       
-       <!-- =========================================
-            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}"/>
-               
-       <!-- ==============================================
-                Local private targets
-            ============================================== -->
-       
-       <target name="localinit"
-               description="Module specific initialization tasks">
-               <antcall target="secmakefiles" />
-       </target>
-               
-       <target name="localcompile"
-               description="Module specific compile tasks">
-       </target>
-       
-       <target name="localclean"
-               description="Module specific cleaning tasks">
-       </target>
-
-       <!-- =========================================
-                RPM settings
-            ========================================= -->
-
-       <property name="build.package.summary" value="Proxy renewal daemon" />
-       <property name="build.package.description" value="The daemon is responsible for secure and controled way of periodical renewal&#xA;of users' proxy certificates. Its primary goal is to support long-time jobs&#xA;running on the grid. This package also contains a library and header file&#xA;that allow to develop C/C++ applications accessing the daemon." />
-       
-</project>             
diff --git a/org.glite.security.proxyrenewal/config/startup b/org.glite.security.proxyrenewal/config/startup
deleted file mode 100755 (executable)
index db273c2..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/bin/sh
-
-GLITE_LOCATION=${GLITE_LOCATION:-/opt/glite}
-GLITE_LOCATION_VAR=${GLITE_LOCATION_VAR:-/opt/glite/var}
-
-[ -f /etc/glite.conf ] && . /etc/glite.conf
-[ -f $GLITE_LOCATION/etc/glite-wms.conf ] && . $GLITE_LOCATION/etc/glite-wms.conf
-[ -f $HOME/.glite.conf ] && . $HOME/.glite.conf
-
-PROXY_REPOSITORY="$GLITE_LOCATION_VAR/spool/glite-renewd"
-
-start()
-{
-       if test -z "$GLITE_USER" ;then
-               echo 'Error: GLITE_USER is not set'
-               echo FAILED
-               return 1
-       fi
-
-       if [ -n "$GLITE_HOST_CERT" ]; then 
-               X509_USER_CERT="$GLITE_HOST_CERT"
-               export X509_USER_CERT
-       fi
-       if [ -n "$GLITE_HOST_KEY" ]; then
-               X509_USER_KEY="$GLITE_HOST_KEY"
-               export X509_USER_KEY
-       fi
-
-       echo -n Starting ProxyRenewal Daemon: glite-proxy-renewd ...
-
-       if [ ! -d "$PROXY_REPOSITORY" ]; then
-               mkdir -p $PROXY_REPOSITORY || exit 1
-               chown $GLITE_USER $PROXY_REPOSITORY
-               chmod 0700 $PROXY_REPOSITORY
-       fi
-       
-       su - $GLITE_USER -c "$GLITE_LOCATION/bin/glite-proxy-renewd \
-               -r $PROXY_REPOSITORY" && echo " done"
-}
-
-stop()
-{
-       echo -n "Stopping ProxyRenewal Daemon: glite-proxy-renewd ..."
-       PIDS=`ps -C glite-proxy-renewd -o pid --no-heading`
-       if [ -z "$PIDS" ]; then
-               echo " no process glite-proxy-renewd running"
-               exit 1
-       else
-               kill $PIDS && echo " done"
-       fi
-}
-
-status()
-{
-       PIDS=`ps -C glite-proxy-renewd -o pid --no-heading`
-       if ps p $PIDS >/dev/null 2>&1; then
-               echo glite-proxy-renewd running \($PIDS\)
-               return 0
-       fi
-       
-       echo glite-proxy-renewd not running
-       return 1
-}
-
-case x$1 in
-       xstart) start;;
-       xstop)  stop;;
-       xrestart) stop; start;;
-       xstatus) status;;
-       x*)     echo usage: $0 start,stop,restart,status >&2
-               exit 1;;
-esac
diff --git a/org.glite.security.proxyrenewal/interface/renewal.h b/org.glite.security.proxyrenewal/interface/renewal.h
deleted file mode 100644 (file)
index 167b27d..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/**
- * \file proxyrenewal/renewal.h
- * \author Daniel Kouril
- * \author Miroslav Ruda
- * \brief  API for proxy renewal.
- * \version 2.0
- *
- * General rules:
- * - functions return 0 on success, nonzero on error, errror details can
- *   be found via edg_wlpr_GetErrorText()
- */
-
-#ifndef RENEWAL_H
-#define RENEWAL_H
-
-#ident "$Header$"
-
-#include "glite/wmsutils/jobid/cjobid.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define EDG_WLPR_FLAG_UNIQUE   1
-#define EDG_WLPR_FLAG_UPDATE   2
-
-typedef enum _edg_wlpr_ErrorCode {
-/**
- * Base for proxy renewal specific code.
- * Start sufficently high not to collide with standard errno. */
- /* XXX see common/exception_codes.h */
-    EDG_WLPR_ERROR_BASE = 1900,
-    EDG_WLPR_ERROR_UNEXPECTED_EOF,
-    EDG_WLPR_ERROR_GENERIC,
-    EDG_WLPR_ERROR_PROTO_PARSE_ERROR,
-    EDG_WLPR_ERROR_PROTO_PARSE_NOT_FOUND,
-    EDG_WLPR_ERROR_UNKNOWN_COMMAND,
-    EDG_WLPR_ERROR_SSL,
-    EDG_WLPR_ERROR_MYPROXY,
-    EDG_WLPR_PROXY_NOT_REGISTERED,
-    EDG_WLPR_PROXY_EXPIRED,
-    EDG_WLPR_ERROR_VOMS,
-} edg_wlpr_ErrorCode;
-
-/**
- * Return a human readable string containg description of the errorcode
- * \retval char* pointer to a error description
- */
-const char *
-edg_wlpr_GetErrorText(int err_code);
-
-/**
- * This function contacts the renewal daemon and registers the specified proxy
- * for periodic renewal.
- * \param filename IN: specification of the proxy to register.
- * \param jdl IN: JDL of the job owing the proxy. The JDL is looked for a 
- * myproxy server contact.
- * \param flags IN: one of EDG_WLPR_FLAG_UNIQUE or EDG_WLPR_FLAG_UPDATE, or
- * their bitwise OR.
- * \param repository_filename OUT: filename of registered proxy in repository.
- * \retval 0 success
- * \retval nonzero on error. Human readable form of the error can be get via
- * edg_wlpr_GetErrorText().
- */
-int
-edg_wlpr_RegisterProxy(
-      const char * filename,
-      const char *jdl,
-      int flags,
-      char ** repository_filename
-);
-
-/**
- * The same function as edg_wlpr_RegisterProxy() but information about the
- * myproxy server and jobid are passed as parameters instead of in JDL.
- */
-int
-edg_wlpr_RegisterProxyExt(
-      const char * filename,
-      const char * server,
-      unsigned int port,
-      edg_wlc_JobId jobid,
-      int flags,
-      char ** repository_filename
-);
-
-/**
- * Unregister proxy from the renewal daemon.
- * \param jobid IN: specification of job whose proxy shall be unregistered
- * \param filename IN: (optional) specification of the proxy to unregister.
- * \retval 0 success
- * \retval nonzero on error. Human readable form of the error can be get via
- * edg_wlpr_GetErrorText().
- */
-int
-edg_wlpr_UnregisterProxy(
-      edg_wlc_JobId jobid,
-      const char * repository_filename
-);
-
-/**
- * Get a list of registered proxies maintained by the renewal daemon.
- * \param count OUT: number of proxies
- * \param list OUT: a list of filenames separated by '\n'
- * specifying the registered proxies. 
- * \warning The caller is responsible for freeing the data.
- * \retval 0 success
- * \retval nonzero on error. Human readable form of the error can be get via
- * edg_wlpr_GetErrorText().
- */
-int
-edg_wlpr_GetList(int *count, char **list);
-
-/**
- * Get a status message about a proxy.
- * The function contacts the renewal daemon and retrieve information it 
- * maintains about the proxy.
- * \param filename IN: specification of the proxy to query
- * \param info OUT: status message.
- * \warning The caller is responsible for freeing the data.
- * \retval 0 success
- * \retval nonzero on error. Human readable form of the error can be get via
- * edg_wlpr_GetErrorText().
- */
-int
-edg_wlpr_GetStatus(const char *repository_filename, char **info);
-
-/**
- * For given jobid return registered proxy filename from repository
- * \param jobid IN: specification of jobid
- * \param repository_filename OUT: proxy regitered for given jobid
- * \warning The caller is responsible for freeing the data.
- * \retval 0 success
- * \retval nonzero on error. Human readable form of the error can be get via
- * edg_wlpr_GetErrorText().
- */
-int
-edg_wlpr_GetProxy(edg_wlc_JobId jobid, char **repository_filename);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* RENEWAL_H */
diff --git a/org.glite.security.proxyrenewal/project/build.properties b/org.glite.security.proxyrenewal/project/build.properties
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.glite.security.proxyrenewal/project/configure.properties.xml b/org.glite.security.proxyrenewal/project/configure.properties.xml
deleted file mode 100644 (file)
index 4122b9d..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Configuration options for the GLite Security Proxyrenewal module
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-    Version info: $Id$
-    Release: $Name$
-
-    Revision history:
-    $Log$
--->
-
-       <!-- ======================================================
-         Define extra properties here ...
-         ====================================================== -->
-        
-       <project name="Security Proxyrenewal configuration options">                                                                        
-               <target name="secmakefiles">
-                       <exec executable="ln" failonerror="true">
-                               <arg line="-fs ${component.dir}/Makefile ${module.build.dir}/Makefile"/>
-                       </exec>
-                       <echo file="${module.build.dir}/Makefile.inc">
-top_srcdir=..
-builddir=build
-stagedir=${stage.abs.dir}
-distdir=${dist.dir}
-globalprefix=${global.prefix}
-package=${module.package.name}
-PREFIX=${install.dir}
-version=${module.version}
-glite_location=${with.glite.location}
-globus_prefix=${with.globus.prefix}
-thrflavour=${with.globus.thr.flavor}
-nothrflavour=${with.globus.nothr.flavor}
-myproxy_prefix=${with.myproxy.prefix}
-voms_prefix=${with.glite.location}
-                       </echo>
-           </target>
-       </project>
diff --git a/org.glite.security.proxyrenewal/project/properties.xml b/org.glite.security.proxyrenewal/project/properties.xml
deleted file mode 100755 (executable)
index f1e51dd..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Common build properties file for the Glite Security Proxyrenewal component
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-       Version info: $Id$
-       Release: $Name$ 
-       
-       Revision history:
-       $Log$
-       Revision 1.2  2004/07/12 16:18:37  dimeglio
-       Modified to use myproxy from the repository if available
-       
--->
-
-<project name="Security Proxyrenewal component common properties">
-
-       <!-- Include build properties to allow overwriting 
-            of properties for subsystem                    -->
-       <property file="project/build.properties" />    
-
-       <!-- ======================================================
-          Define corresponding subsystem properties
-                ====================================================== -->
-
-       <!-- Subsystem name -->
-       <property name="subsystem.name" value="${security.subsystem.name}"/>
-               
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${security.subsystem.prefix}"/>
-
-       <!-- ======================================================
-          Define component properties
-                ====================================================== -->
-                               
-       <!-- Component name prefix -->
-       <property name="component.prefix" value="proxyrenewal" />
-                       
-       <!-- ======================================================
-          Define general component properties
-                ====================================================== -->
-       
-       <import file="${component.general.properties.file}" />
-                                               
-       <!-- ======================================================
-                Define extra properties here ...
-                ====================================================== -->
-                
-                                                               
-</project>
diff --git a/org.glite.security.proxyrenewal/project/tar_exclude b/org.glite.security.proxyrenewal/project/tar_exclude
deleted file mode 100644 (file)
index e1fcd1a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-tar_exclude
-CVS
-build.xml
-build
-build.properties
-properties.xml
-configure.properties.xml
-.cvsignore
-.project
-.cdtproject
diff --git a/org.glite.security.proxyrenewal/project/taskdefs.xml b/org.glite.security.proxyrenewal/project/taskdefs.xml
deleted file mode 100755 (executable)
index 13e894e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<project name="tasks and types definitions">
-</project>
diff --git a/org.glite.security.proxyrenewal/project/version.properties b/org.glite.security.proxyrenewal/project/version.properties
deleted file mode 100644 (file)
index 0745aa0..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Dec 10 13:12:42 CET 2004
-module.version=0.1.1
-module.build=104
-module.age=1
diff --git a/org.glite.security.proxyrenewal/src/api.c b/org.glite.security.proxyrenewal/src/api.c
deleted file mode 100644 (file)
index e241f20..0000000
+++ /dev/null
@@ -1,436 +0,0 @@
-#include "renewal.h"
-#include "renewal_locl.h"
-
-#ident "$Header$"
-
-#define SEPARATORS "\n"
-
-/* prototypes of static routines */
-static int
-encode_request(edg_wlpr_Request *request, char **msg);
-
-static int
-decode_response(const char *msg, const size_t msg_len, edg_wlpr_Response *response);
-
-static int
-do_connect(char *socket_name, int *sock);
-
-static int
-send_request(int sock, edg_wlpr_Request *request, edg_wlpr_Response *response);
-
-
-static int 
-encode_request(edg_wlpr_Request *request, char **msg)
-{
-   char *buf;
-   size_t buf_len;
-   int ret;
-
-   buf_len = EDG_WLPR_BUF_SIZE;
-   buf = malloc(buf_len);
-   if (buf == NULL)
-      return ENOMEM;
-   buf[0] = '\0';
-
-   ret = edg_wlpr_StoreToken(&buf, &buf_len, EDG_WLPR_PROTO_VERSION,
-                            EDG_WLPR_VERSION, SEPARATORS);
-   if (ret)
-      goto err;
-
-   ret = edg_wlpr_StoreToken(&buf, &buf_len, EDG_WLPR_PROTO_COMMAND,
-                            edg_wlpr_EncodeInt(request->command),
-                            SEPARATORS);
-   if (ret)
-      goto err;
-
-   if (request->myproxy_server) {
-      char host[1024];
-
-#if 0
-      snprintf(host, sizeof(host), "%s:%d", request->myproxy_server, 
-              (request->myproxy_port) ? request->myproxy_port : EDG_WLPR_MYPROXY_PORT); /* XXX let server decide ? */
-#else
-      snprintf(host, sizeof(host), "%s", request->myproxy_server);
-#endif
-      ret = edg_wlpr_StoreToken(&buf, &buf_len, EDG_WLPR_PROTO_MYPROXY_SERVER,
-                               host, SEPARATORS);
-      if (ret)
-        goto err;
-   }
-
-   if (request->proxy_filename) {
-      ret = edg_wlpr_StoreToken(&buf, &buf_len, EDG_WLPR_PROTO_PROXY,
-                               request->proxy_filename, SEPARATORS);
-      if (ret)
-        goto err;
-   }
-
-   if (request->jobid) {
-      ret = edg_wlpr_StoreToken(&buf, &buf_len, EDG_WLPR_PROTO_JOBID,
-                               request->jobid, SEPARATORS);
-      if (ret)
-        goto err;
-   }
-
-   if (request->entries) {
-      char **p = request->entries;
-      while (*p) {
-        ret = edg_wlpr_StoreToken(&buf, &buf_len, EDG_WLPR_PROTO_ENTRY,
-                                  *p, SEPARATORS);
-        if (ret)
-           goto err;
-        p++;
-      }
-   }
-
-   buf[strlen(buf)] = '\0';
-   *msg = buf;
-   return 0;
-
-err:
-   free(buf);
-   *msg = NULL;
-   return ret;
-}
-
-static int
-decode_response(const char *msg, const size_t msg_len, edg_wlpr_Response *response)
-{
-   int ret;
-   char *value = NULL;
-   /* char *p; */
-   int i;
-   int current_size = 0;
-
-   /* XXX add an ending zero '\0' */
-
-   assert(msg != NULL);
-   assert(response != NULL);
-
-   memset(response, 0, sizeof(*response));
-
-   ret = edg_wlpr_GetToken(msg, msg_len, EDG_WLPR_PROTO_VERSION, SEPARATORS,
-                          0, &response->version);
-   if (ret)
-      goto err;
-
-   ret = edg_wlpr_GetToken(msg, msg_len, EDG_WLPR_PROTO_RESPONSE, SEPARATORS,
-                          0, &value);
-   if (ret)
-      goto err;
-
-   ret = edg_wlpr_DecodeInt(value, (int *)(&response->response_code));
-   free(value);
-   if (ret)
-      goto err;
-
-   ret = edg_wlpr_GetToken(msg, msg_len, EDG_WLPR_PROTO_MYPROXY_SERVER,
-                          SEPARATORS, 0, &response->myproxy_server);
-   if (ret && ret != EDG_WLPR_ERROR_PROTO_PARSE_NOT_FOUND)
-      goto err;
-
-#if 0
-   response->myproxy_port = EDG_WLPR_MYPROXY_PORT; /* ??? */
-   if (response->myproxy_server && (p = strchr(response->myproxy_server, ':'))) {
-      int port;
-      *p = '\0';
-      port = atol(p+1); /* XXX */
-      response->myproxy_port = port;
-   }
-#endif
-
-   ret = edg_wlpr_GetToken(msg, msg_len, EDG_WLPR_PROTO_START_TIME, SEPARATORS, 
-                          0, &value);
-   if (ret && ret != EDG_WLPR_ERROR_PROTO_PARSE_NOT_FOUND)
-      goto err;
-   if (ret == 0) {
-      ret = edg_wlpr_DecodeInt(value, (int *)(&response->start_time));
-      free(value);
-      if (ret)
-         goto err;
-   }
-
-   ret = edg_wlpr_GetToken(msg, msg_len, EDG_WLPR_PROTO_END_TIME, SEPARATORS,
-                          0, &value);
-   if (ret && ret != EDG_WLPR_ERROR_PROTO_PARSE_NOT_FOUND)
-      goto err;
-   if (ret == 0) { 
-      ret = edg_wlpr_DecodeInt(value, (int *)(&response->end_time));
-      free(value);
-      if (ret)
-        goto err;
-   }
-
-   ret = edg_wlpr_GetToken(msg, msg_len, EDG_WLPR_PROTO_RENEWAL_TIME,
-                          SEPARATORS, 0, &value);
-   if (ret && ret != EDG_WLPR_ERROR_PROTO_PARSE_NOT_FOUND)
-      goto err;
-   if (ret == 0) {
-      ret = edg_wlpr_DecodeInt(value, (int *)(&response->next_renewal_time));
-      free(value);
-      if (ret)
-        goto err;
-   }
-
-   /* XXX Counter */
-
-   i = 0;
-   while ((ret = edg_wlpr_GetToken(msg, msg_len, EDG_WLPR_PROTO_PROXY,
-                                  SEPARATORS, i, &value)) == 0) {
-      if (i >= current_size) {
-        char **tmp;
-
-        tmp = realloc(response->filenames, 
-                      (current_size + 16 + 1) * sizeof(*tmp));
-        if (tmp == NULL) {
-           ret = ENOMEM;
-           goto err;
-        }
-        response->filenames = tmp;
-        current_size += 16;
-      }
-      response->filenames[i] = value;
-      i++;
-   }
-   if (ret != EDG_WLPR_ERROR_PROTO_PARSE_NOT_FOUND)
-      goto err;
-   if (response->filenames)
-      response->filenames[i] = NULL;
-
-   return 0;
-
-err:
-   edg_wlpr_CleanResponse(response);
-
-   return ret;
-}
-
-static int
-do_connect(char *socket_name, int *sock)
-{
-   struct sockaddr_un my_addr;
-   int s;
-   int ret;
-
-   assert(sock != NULL);
-   memset(&my_addr, 0, sizeof(my_addr));
-
-   s = socket(AF_UNIX, SOCK_STREAM, 0);
-   if (s == -1) {
-      return errno;
-   }
-
-   my_addr.sun_family = AF_UNIX;
-   strncpy(my_addr.sun_path, socket_name, sizeof(my_addr.sun_path));
-
-   ret = connect(s, (struct sockaddr *) &my_addr, sizeof(my_addr));
-   if (ret == -1) {
-      close(s);
-      return errno;
-   }
-
-   *sock = s;
-   return 0;
-}
-
-static int
-send_request(int sock, edg_wlpr_Request *request, edg_wlpr_Response *response)
-{
-   int ret;
-   char *buf = NULL;
-   size_t buf_len;
-
-   /* timeouts ?? */
-
-   ret = encode_request(request, &buf);
-   if (ret)
-      return ret;
-
-   ret = edg_wlpr_Write(sock, buf, strlen(buf) + 1);
-   free(buf);
-   if (ret)
-      return ret;
-
-   ret = edg_wlpr_Read(sock, &buf, &buf_len);
-   if (ret)
-      return ret;
-
-   ret = decode_response(buf, buf_len, response);
-   free(buf);
-   if (ret)
-      return ret;
-
-   return 0;
-}
-
-int
-edg_wlpr_RequestSend(edg_wlpr_Request *request, edg_wlpr_Response *response)
-{
-   char sockname[1024];
-   int ret;
-   int sock;
-
-   snprintf(sockname, sizeof(sockname), "%s%d",
-           DGPR_REG_SOCKET_NAME_ROOT, getuid());
-   ret = do_connect(sockname, &sock);
-   if (ret)
-      return ret;
-
-   ret = send_request(sock, request, response);
-
-   close(sock);
-   return ret;
-}
-
-int
-edg_wlpr_RegisterProxyExt(const char *filename, const char * server,
-                         unsigned int port,
-                          edg_wlc_JobId jobid, int flags,
-                         char **repository_filename)
-{
-   edg_wlpr_Request request;
-   edg_wlpr_Response response;
-   int ret;
-
-   memset(&request, 0, sizeof(request));
-   memset(&response, 0, sizeof(response));
-
-   request.command = EDG_WLPR_COMMAND_REG;
-   request.myproxy_server = server;
-   request.proxy_filename = filename;
-   request.jobid = edg_wlc_JobIdUnparse(jobid);
-   if (request.jobid == NULL)
-      return EINVAL; /* XXX */
-
-   ret = edg_wlpr_RequestSend(&request, &response);
-   free(request.jobid);
-   if (ret == 0 && response.response_code == 0 && repository_filename &&
-       response.filenames && response.filenames[0] )
-      *repository_filename = strdup(response.filenames[0]);
-
-   if (ret == 0)
-      ret = response.response_code;
-
-   edg_wlpr_CleanResponse(&response);
-   
-   return ret;
-}
-
-int
-edg_wlpr_RegisterProxy(const char *filename, const char *jdl,
-                       int flags, char **repository_filename)
-{
-   char server[1024];
-   size_t server_len;
-   unsigned int port = 0;
-   char *p, *q;
-   
-   memset(server, 0, sizeof(server));
-   
-   /* parse JDL and find information about myproxy server */
-   p = strstr(jdl, JDL_MYPROXY);
-   if (p == NULL)
-      return 0; /* XXX */
-   q = strchr(p, '\n'); /* XXX */
-   if (q)
-      server_len = q - p;
-   else 
-      server_len = jdl + strlen(jdl) - p;
-   if (server_len >= sizeof(server))
-      return EINVAL; /* XXX */
-   strncmp(server, p, sizeof(server));
-
-   return (edg_wlpr_RegisterProxyExt(filename, server, port, NULL, flags, 
-                                    repository_filename));
-}
-
-int
-edg_wlpr_UnregisterProxy(edg_wlc_JobId jobid, const char *repository_filename)
-{
-   edg_wlpr_Request request;
-   edg_wlpr_Response response;
-   int ret;
-
-   memset(&request, 0, sizeof(request));
-   memset(&response, 0, sizeof(response));
-
-   request.command = EDG_WLPR_COMMAND_UNREG;
-   request.proxy_filename = repository_filename;
-   request.jobid = edg_wlc_JobIdUnparse(jobid);
-   if (request.jobid == NULL)
-      return EINVAL;
-
-   ret = edg_wlpr_RequestSend(&request, &response);
-   free(request.jobid);
-   
-   if (ret == 0)
-      ret = response.response_code;
-   edg_wlpr_CleanResponse(&response);
-
-   return ret;
-}
-
-int
-edg_wlpr_GetList(int *count, char **list)
-{
-   return ENOSYS; /* XXX */
-}
-
-int
-edg_wlpr_GetStatus(const char *filename, char **info)
-{
-   return ENOSYS; /* XXX */
-}
-
-static const char* const errTexts[] = {
-   "Unexpected EOF from peer",
-   "Generic error",
-   "Protocol parse error",
-   "Compulsory element not found in message",
-   "Unknown protocol command",
-   "SSL error",
-   "Error from Myproxy server",
-   "Proxy not registered",
-   "Proxy expired",
-   "VOMS error",
-};
-
-const char *
-edg_wlpr_GetErrorText(int code)
-{
-   return code ?
-           (code <= EDG_WLPR_ERROR_BASE ?
-                   strerror(code) :
-                   errTexts[code - EDG_WLPR_ERROR_BASE - 1]
-          ) :
-          NULL;
-}
-
-int
-edg_wlpr_GetProxy(edg_wlc_JobId jobid, char **repository_filename)
-{
-   edg_wlpr_Request request;
-   edg_wlpr_Response response;
-   int ret;
-
-   memset(&request, 0, sizeof(request));
-   memset(&response, 0, sizeof(response));
-
-   request.command = EDG_WLPR_COMMAND_GET;
-   request.jobid = edg_wlc_JobIdUnparse(jobid);
-   if (request.jobid == NULL)
-      return EINVAL;
-
-   ret = edg_wlpr_RequestSend(&request, &response);
-   free(request.jobid);
-
-   if (ret == 0 && response.response_code == 0 && repository_filename &&
-       response.filenames && response.filenames[0] )
-      *repository_filename = strdup(response.filenames[0]);
-   
-   if (ret == 0)
-      ret = response.response_code;
-   edg_wlpr_CleanResponse(&response);
-
-   return ret;
-}
diff --git a/org.glite.security.proxyrenewal/src/client.c b/org.glite.security.proxyrenewal/src/client.c
deleted file mode 100644 (file)
index eb2d36b..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <string.h>
-#include "renewal.h"
-
-static const char rcsid[] = "$Header$";
-
-static struct option const long_options[] = {
-   { "help",     no_argument,       0, 'h' },
-   { "version",  no_argument,       0, 'v' },
-   { "server",   required_argument, 0, 's' },
-   { "port",     required_argument, 0, 'p' },
-   { "file",     required_argument, 0, 'f' },
-   { "jobid",    required_argument, 0, 'j' },
-   { NULL, 0, NULL, 0}
-};
-
-static char short_options[] = "hvs:p:f:j:";
-
-static void
-usage(exit_code)
-{
-   fprintf(stdout, "Usage: edg-wl-renew [option] operation\n"
-          "\t-s myproxy_server [-p port] -f filename -j jobid start |\n"
-          "\t-j jobid [-f filename] stop |\n"
-          "\t-j jobid get\n"
-          "-h, --help                 display this help and exit\n"
-          "-v, --version              output version information and exit\n"
-          "-s, --server <fqdn>        address of myproxy server\n"
-          "-p, --port <num>           port of myproxy server\n"
-          "-f, --file <file>          filename with proxy\n"
-          "-j, --jobid <str>          datagrid jobid\n");
-   exit(exit_code);
-}
-
-int
-main(int argc, char *argv[])
-{
-   char *server = NULL;
-   int port = 0;
-   char *proxyfile = NULL;
-   char *jobid_str = NULL;
-   edg_wlc_JobId jobid = NULL;
-   char *repository_filename = NULL;
-   int ret;
-   int arg;
-   extern int optind;
-
-   while ((arg = getopt_long(argc, argv,
-                            short_options, long_options, (int *) 0)) != EOF)
-      switch(arg) {
-        case 'h':
-           usage(0); break;
-        case 'v':
-           fprintf(stdout, "%s:\t%s\n", argv[0], rcsid); exit(0);
-        case 's':
-           server = strdup(optarg); break;
-        case 'p':
-           port = atoi(optarg); break;
-        case 'f':
-           proxyfile = strdup(optarg); break;
-        case 'j':
-           jobid_str = strdup(optarg); break;
-        default:
-           usage(1); break;
-      }
-
-   if (optind >= argc)
-      usage(1);
-
-   if (jobid_str && edg_wlc_JobIdParse(jobid_str, &jobid)) {
-      fprintf(stderr, "Cannot parse jobid\n");
-      exit(1);
-   }
-
-   if (strcmp(argv[optind], "start") == 0) {
-      if (proxyfile == NULL || server == NULL || jobid == NULL)
-        usage(1);
-      ret = edg_wlpr_RegisterProxyExt(proxyfile, server, port, jobid, 0,
-                                     &repository_filename);
-      if (ret) {
-        fprintf(stderr, "Registering proxy failed: %s\n",
-                edg_wlpr_GetErrorText(ret));
-        exit(1);
-      }
-      printf("%s\n", repository_filename);
-      free(repository_filename);
-      exit(0);
-   }
-   else if (strcmp(argv[optind], "stop") == 0) {
-      if (jobid == NULL)
-        usage(1);
-      ret = edg_wlpr_UnregisterProxy(jobid, proxyfile);
-      if (ret) {
-        fprintf(stderr, "Unregistering proxy failed: %s\n",
-                edg_wlpr_GetErrorText(ret));
-        exit(1);
-      }
-   }
-   else if (strcmp(argv[optind], "get") == 0) {
-      if (jobid == NULL)
-        usage(1);
-      ret = edg_wlpr_GetProxy(jobid, &proxyfile);
-      if (ret) {
-        fprintf(stderr, "GET request failed: %s\n",
-                edg_wlpr_GetErrorText(ret));
-        exit(1);
-      }
-      printf("%s\n", proxyfile);
-      free(proxyfile);
-   }
-   else 
-      usage(1);
-
-   return 0;
-}
diff --git a/org.glite.security.proxyrenewal/src/commands.c b/org.glite.security.proxyrenewal/src/commands.c
deleted file mode 100644 (file)
index fc6235e..0000000
+++ /dev/null
@@ -1,1233 +0,0 @@
-#include "renewal_locl.h"
-#include "renewd_locl.h"
-
-#ifndef NOVOMS
-#include <voms_apic.h>
-#endif
-
-#ident "$Header$"
-
-#define SEPARATORS ",\n"
-#define RENEWAL_START_FRACTION 0.75 /* XXX */
-#define RENEWAL_CLOCK_SKEW (5 * 60)
-#define RENEWAL_MIN_LIFETIME (15 * 60)
-
-extern char *repository;
-extern time_t condor_limit;
-extern char *cadir;
-extern char *vomsdir;
-extern int voms_enabled;
-
-static char *
-strmd5(const char *s, unsigned char *digest);
-
-static int
-get_record_ext(FILE *fd, proxy_record *record, int *last_used_suffix);
-
-static int
-get_record(FILE *fd, proxy_record *record);
-
-static int
-store_record(char *basename, proxy_record *record);
-
-static int
-copy_file_content(FILE *in, FILE *out);
-
-static int
-copy_file(char *src, char *dst);
-
-static int
-get_base_filename(char *proxy_file, char **basefilename);
-
-int
-decode_record(char *line, proxy_record *record);
-
-int
-encode_record(proxy_record *record, char **line);
-
-static int
-open_metafile(char *proxy_file, FILE **fd);
-
-void
-free_record(proxy_record *record);
-
-static int
-realloc_prd_list(prd_list *list);
-
-/* make public: */
-static int
-edg_wlpr_GetTokenInt(const char *msg, const size_t msg_len,
-                     const char *key, const char *separators,
-                     int req_index, int *value);
-
-static void
-record_to_response(int status_code, proxy_record *record,
-                   edg_wlpr_Response *response);
-
-static int
-filename_to_response(char *filename, edg_wlpr_Response *response);
-
-
-
-
-static char *
-strmd5(const char *s, unsigned char *digest)
-{
-    MD5_CTX md5;
-    unsigned char   d[16];
-    int     i;
-    static char mbuf[33];
-
-    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 mbuf;
-}
-
-static int
-get_base_filename(char *proxy_file, char **basefilename)
-{
-   char *subject = NULL;
-   char file[FILENAME_MAX];
-   int ret;
-
-   assert(basefilename != NULL);
-
-   ret = get_proxy_base_name(proxy_file, &subject);
-   if (ret)
-      goto end;
-
-   snprintf(file, sizeof(file), "%s/%s", repository, strmd5(subject, NULL));
-   *basefilename = strdup(file); /* XXX test ENOMEM */
-   ret = 0;
-   
-end:
-   if (subject)
-      free(subject);
-   return ret;
-}
-
-static int
-copy_file_content(FILE *in, FILE *out)
-{
-   char buf[1024];
-   size_t num;
-   int ret;
-
-   while (1) {
-      num = fread(buf, sizeof(*buf), sizeof(buf), in);
-      if ((ret = ferror(in))) {
-        edg_wlpr_Log(LOG_ERR, "Reading failed: %s", strerror(errno));
-        return ret;
-      }
-      num = fwrite(buf, sizeof(*buf), num, out);
-      if ((ret = ferror(in))) {
-        edg_wlpr_Log(LOG_ERR, "Writing failed: %s", strerror(errno));
-        return ret;
-      }
-      if (feof(in))
-        return 0;
-   }
-}
-
-/* return the time interval, after which the renewal should be started */
-static time_t
-get_delta(time_t current_time, time_t start_time, time_t end_time)
-{
-   time_t length, lifetime;
-   time_t delta;
-   int condor_tested = 0;
-
-   lifetime = end_time - start_time;
-   delta = 0;
-   while (1) {
-      if (end_time - current_time <= RENEWAL_MIN_LIFETIME)
-        /* if the proxy is too short, renew it as soon as possible */
-        return RENEWAL_CLOCK_SKEW;
-
-      /* renewal starts at 3/4 of lifetime */
-      length = end_time - (start_time + delta);
-      delta += length * RENEWAL_START_FRACTION;
-
-      if (!condor_tested && delta > lifetime - condor_limit) {
-        /* Condor requires the proxies to be renewed a specified time interval
-            before the proxies have expired (see the 
-           GRIDMANAGER_MINIMUM_PROXY_TIME variable). We must ensure that
-           renewal takes place before Condor does this check */
-        if (current_time > end_time - condor_limit) {
-           edg_wlpr_Log(LOG_ERR, "Proxy lifetime exceeded value of the Condor limit!"); 
-        }
-        else
-           delta = lifetime - condor_limit - RENEWAL_CLOCK_SKEW;
-        condor_tested = 1;
-      }
-
-      if (abs(current_time - (start_time + delta)) < RENEWAL_CLOCK_SKEW)
-        continue;
-      
-      return (start_time + delta) - current_time;
-   };
-
-   /* not reachable */
-   return 0;
-}
-
-int
-get_times(char *proxy_file, proxy_record *record)
-{
-   FILE *fd;
-   X509 *cert = NULL;
-   ASN1_UTCTIME *asn1_time = NULL;
-   int ret;
-   time_t current_time, start_time, end_time;
-
-   assert(record != NULL);
-   assert(proxy_file != NULL);
-
-   fd = fopen(proxy_file, "r");
-   if (fd == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Opening proxy file %s failed: %s",
-                  proxy_file, strerror(errno));
-      return errno;
-   }
-
-   cert = PEM_read_X509(fd, NULL, NULL, NULL);
-   if (cert == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Cannot read X.509 certificate from %s",
-                  proxy_file);
-      ret = -1; /* XXX SSL_ERROR */
-      goto end;
-   }
-
-   asn1_time = ASN1_UTCTIME_new();
-   X509_gmtime_adj(asn1_time,0);
-   globus_gsi_cert_utils_make_time(X509_get_notAfter(cert), &end_time);
-   globus_gsi_cert_utils_make_time(X509_get_notBefore(cert), &start_time);
-   current_time = time(NULL);
-   ASN1_UTCTIME_free(asn1_time);
-   /* if (end_time - RENEWAL_CLOCK_SKEW < current_time) { Too short proxy } */
-   if (end_time + RENEWAL_CLOCK_SKEW < current_time) {
-      edg_wlpr_Log(LOG_ERR, "Expired proxy in %s", proxy_file);
-      ret = EDG_WLPR_PROXY_EXPIRED;
-      goto end;
-   }
-
-   /* Myproxy seems not to do check on expiration and return expired proxies
-      if credentials in repository are expired */
-   X509_free(cert);
-   cert = NULL;
-   while (1) {
-      time_t tmp_end;
-      /* see http://www.openssl.org/docs/crypto/pem.html section BUGS */
-      cert = PEM_read_X509(fd, NULL, NULL, NULL);
-      if (cert == NULL) {
-        if (ERR_GET_REASON(ERR_peek_error()) == PEM_R_NO_START_LINE) {
-           /* End of file reached. no error */
-           ERR_clear_error();
-           break;
-        }
-        edg_wlpr_Log(LOG_ERR, "Cannot read additional certificates from %s",
-                     proxy_file);
-        ret = -1; /* XXX SSL_ERROR */
-        goto end;
-      }
-      globus_gsi_cert_utils_make_time(X509_get_notAfter(cert), &tmp_end);
-      if (tmp_end + RENEWAL_CLOCK_SKEW < current_time) {
-        edg_wlpr_Log(LOG_ERR, "Expired proxy in %s", proxy_file);
-        ret = EDG_WLPR_PROXY_EXPIRED;
-        goto end;
-      }
-      X509_free(cert);
-      cert = NULL;
-   }
-
-   record->next_renewal = current_time + get_delta(current_time, start_time,
-                                                  end_time);
-   record->end_time = end_time;
-   ret = 0;
-
-end:
-   fclose(fd);
-   if (cert)
-      X509_free(cert);
-
-   return ret;
-}
-
-static int
-copy_file(char *src, char *dst)
-{
-   FILE *from = NULL;
-   FILE *tmp_to = NULL;
-   int tmp_fd;
-   char tmpfile[FILENAME_MAX];
-   int ret;
-
-   if (strcmp(src, dst) == 0)
-      return 0; 
-
-   from = fopen(src, "r");
-   if (from == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Cannot open file %s for reading (%s)",
-                  src, strerror(errno));
-      return errno;
-   }
-
-   snprintf(tmpfile, sizeof(tmpfile), "%s.XXXXXX", dst);
-   tmp_fd = mkstemp(tmpfile);
-   if (tmp_fd == -1) {
-      edg_wlpr_Log(LOG_ERR, "Cannot create temporary file (%s)",
-                  strerror(errno));
-      ret = errno;
-      goto end;
-   }
-
-
-   tmp_to = fdopen(tmp_fd, "w");
-   if (tmp_to == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Cannot associate stream with temporary file (%s)",
-                  strerror(errno));
-      unlink(tmpfile);
-      ret = errno;
-      goto end;
-   }
-
-   ret = copy_file_content(from, tmp_to);
-   fclose(tmp_to);
-   if (ret) {
-      goto end;
-   }
-
-   ret = rename(tmpfile, dst);
-   if (ret) {
-      edg_wlpr_Log(LOG_ERR, "Cannot replace repository file %s with temporary file (%s)",
-                  strerror(errno));
-      unlink(tmpfile);
-      ret = errno;
-      goto end;
-   }
-   tmp_to = NULL;
-      
-end:
-   fclose(from);
-   close(tmp_fd);
-   unlink(tmpfile);
-
-   return ret;
-}
-
-void
-free_record(proxy_record *record)
-{
-   int i;
-
-   if (record == NULL)
-      return;
-   if (record->myproxy_server)
-      free(record->myproxy_server);
-   if (record->jobids.val) {
-      for (i = 0; i < record->jobids.len; i++)
-        free(record->jobids.val[i]);
-      free(record->jobids.val);
-   }
-   memset(record, 0, sizeof(*record));
-}
-
-static int
-realloc_prd_list(prd_list *list)
-{
-   char **tmp;
-
-   tmp = realloc(list->val, (list->len + 1) * sizeof(*list->val));
-   if (tmp == NULL)
-      return ENOMEM;
-   list->val = tmp;
-   list->len++;
-   return 0;
-}
-
-static int
-get_jobids(const char *msg, const size_t msg_len, proxy_record *record)
-{
-   int index = 0;
-   int ret;
-   char *value;
-   char **tmp;
-
-   memset(&record->jobids, 0, sizeof(record->jobids));
-   while ((ret = edg_wlpr_GetToken(msg, msg_len, "jobid=", SEPARATORS,
-                                  index, &value)) == 0) {
-      tmp = realloc(record->jobids.val, (record->jobids.len + 1) * sizeof(*tmp));
-      if (tmp == NULL) {
-        ret = ENOMEM;
-        break;
-      }
-      record->jobids.val = tmp;
-      record->jobids.val[index] = value;
-      record->jobids.len++;
-      index++;
-   }
-   if (ret != EDG_WLPR_ERROR_PROTO_PARSE_NOT_FOUND) {
-      if (record->jobids.len)
-        free(record->jobids.val);
-      record->jobids.len = 0;
-      record->jobids.val = NULL;
-      return ret;
-   }
-
-   return 0;
-}
-
-static int
-edg_wlpr_GetTokenInt(const char *msg, const size_t msg_len,
-                     const char *key, const char *separators,
-                    int req_index, int *value)
-{
-   int ret;
-   char *str_value = NULL;
-
-   ret = edg_wlpr_GetToken(msg, msg_len, key, separators, req_index, &str_value);
-   if (ret)
-      return ret;
-
-   ret = edg_wlpr_DecodeInt(str_value, value);
-   free(str_value);
-   return ret;
-}
-
-int
-decode_record(char *line, proxy_record *record)
-{
-   /* line must be ended with '\0' */
-   int ret;
-   size_t len;
-
-   assert(line != NULL);
-   assert(record != NULL);
-
-   memset(record, 0, sizeof(*record));
-
-   len = strlen(line) + 1;
-
-   ret = edg_wlpr_GetTokenInt(line, len, "suffix=", SEPARATORS, 0,
-                             &record->suffix);
-   if (ret)
-      return ret;
-
-#if 0
-   ret = edg_wlpr_GetTokenInt(line, len, "counter=", SEPARATORS, 0, 
-                             &record->counter);
-   if (ret)
-      goto end;
-#endif
-
-   ret = edg_wlpr_GetTokenInt(line, len, "unique=", SEPARATORS, 0,
-                             &record->unique);
-   if (ret)
-      goto end;
-
-   ret = edg_wlpr_GetTokenInt(line, len, "voms_exts=", SEPARATORS, 0,
-                             &record->voms_exts);
-
-   ret = edg_wlpr_GetToken(line, len, "server=", SEPARATORS, 0,
-                          &record->myproxy_server);
-   if (ret)
-      goto end;
-
-   ret = edg_wlpr_GetTokenInt(line, len, "next_renewal=", SEPARATORS, 0,
-                             (int *)&record->next_renewal);
-   if (ret)
-      goto end;
-
-   ret = edg_wlpr_GetTokenInt(line, len, "end_time=", SEPARATORS, 0,
-                             (int *)&record->end_time);
-   if (ret)
-      goto end;
-
-   ret = get_jobids(line, len, record);
-   if (ret)
-      goto end;
-
-end:
-   if (ret)
-      free_record(record);
-
-   return ret;
-}
-
-int
-encode_record(proxy_record *record, char **line)
-{
-   char tmp_line[1024];
-   size_t jobids_len = 0;
-   int i;
-   
-   snprintf(tmp_line, sizeof(tmp_line), "suffix=%d, unique=%d, voms_exts=%d, server=%s, next_renewal=%ld, end_time=%ld",
-          record->suffix, record->unique, record->voms_exts,
-          (record->myproxy_server) ? record->myproxy_server : "",
-          record->next_renewal, record->end_time);
-   for (i = 0; i < record->jobids.len; i++)
-      /* alloc space for string ", jobid=<jobid>" */
-      jobids_len += 2 + strlen("jobid=") + strlen(record->jobids.val[i]);
-
-   *line = calloc(1, strlen(tmp_line) + jobids_len + 1);
-   if (*line == NULL)
-      return ENOMEM;
-
-   strcat(*line, tmp_line);
-   memset(tmp_line, 0, sizeof(tmp_line));
-
-   for (i = 0; i < record->jobids.len; i++) {
-      snprintf(tmp_line, sizeof(tmp_line), ", jobid=%s", record->jobids.val[i]);
-      strcat(*line, tmp_line);
-   }
-
-   return 0;
-}
-
-/* Get proxy record from the index file. If no suffix is defined return a free 
-   record with the smallest index */
-static int
-get_record_ext(FILE *fd, proxy_record *record, int *last_used_suffix)
-{
-   char line[1024];
-   int last_suffix = -1;
-   int ret;
-   char *p;
-   proxy_record tmp_record;
-   time_t current_time;
-
-   assert(record != NULL);
-   memset(&tmp_record, 0, sizeof(tmp_record));
-
-   current_time = time(NULL);
-   while (fgets(line, sizeof(line), fd) != NULL) {
-      free_record(&tmp_record);
-      p = strchr(line, '\n');
-      if (p)
-        *p = '\0';
-      ret = decode_record(line, &tmp_record);
-      if (ret)
-        return ret; /* XXX continue */
-      if (record->suffix >= 0) {
-        if (record->suffix == tmp_record.suffix) {
-           record->suffix = tmp_record.suffix;
-           record->jobids.len = tmp_record.jobids.len;
-           record->jobids.val = tmp_record.jobids.val;
-           record->unique = tmp_record.unique;
-           record->voms_exts = tmp_record.voms_exts;
-           if (record->myproxy_server)
-              free(record->myproxy_server);
-           record->myproxy_server = tmp_record.myproxy_server;
-           record->end_time = tmp_record.end_time;
-           record->next_renewal = tmp_record.next_renewal;
-           return 0;
-        } else
-           continue;
-      }
-      if (tmp_record.suffix > last_suffix)
-        last_suffix = tmp_record.suffix;
-
-      /* if no particular suffix was specified get the first free record 
-        available */
-      if (tmp_record.jobids.len >= MAX_PROXIES || tmp_record.unique || 
-         tmp_record.voms_exts)
-        continue;
-
-      if (tmp_record.jobids.len == 0) {
-        /* no jobs registered for this record, so use it initialized with the
-         * parameters (currently myproxy location) provided by user */
-        char *server = record->myproxy_server;
-
-        memset(record, sizeof(*record), 0);
-        record->suffix = tmp_record.suffix;
-        if (record->myproxy_server)
-           free(record->myproxy_server);
-        record->myproxy_server = server;
-        free_record(&tmp_record);
-        return 0;
-      }
-
-      if (tmp_record.jobids.len > 0 && record->myproxy_server &&
-         strcmp(record->myproxy_server, tmp_record.myproxy_server) != 0)
-        continue;
-
-      if (tmp_record.jobids.len > 0 &&
-         tmp_record.end_time - current_time < condor_limit) {
-        /* skip expired proxy (and that ones that are going to expire soon),
-           leaving it untouched (it will be removed after next run of the 
-           renewal process */
-        continue;
-      }
-
-      record->suffix = tmp_record.suffix;
-      record->jobids.len = tmp_record.jobids.len;
-      record->jobids.val = tmp_record.jobids.val;
-      record->unique = tmp_record.unique;
-      record->voms_exts = tmp_record.voms_exts;
-      if (record->myproxy_server)
-        free(record->myproxy_server);
-      record->myproxy_server = tmp_record.myproxy_server;
-      record->end_time = tmp_record.end_time;
-      record->next_renewal = tmp_record.next_renewal;
-      return 0;
-   }
-
-   if (last_used_suffix)
-      *last_used_suffix = last_suffix;
-
-   if (record->suffix >= 0) {
-      edg_wlpr_Log(LOG_DEBUG, "Requested suffix %d not found in meta file",
-                  record->suffix);
-   }
-
-   free_record(&tmp_record);
-
-   return EDG_WLPR_ERROR_PROTO_PARSE_NOT_FOUND;
-}
-
-static int
-get_record(FILE *fd, proxy_record *record)
-{
-   return get_record_ext(fd, record, NULL);
-}
-
-static int
-store_record(char *basename, proxy_record *record)
-{
-   int stored = 0;
-   FILE *fd = NULL;
-   int temp;
-   char line[1024];
-   char *new_line = NULL;
-   int ret, i;
-   char *p;
-   proxy_record tmp_record;
-   char tmp_file[FILENAME_MAX];
-   char meta_file[FILENAME_MAX];
-
-   assert (record != NULL);
-
-   memset(&tmp_record, 0, sizeof(tmp_record));
-
-   snprintf(meta_file, sizeof(meta_file), "%s.data", basename);
-   snprintf(tmp_file, sizeof(tmp_file), "%s.XXXXXX", meta_file);
-
-   temp = mkstemp(tmp_file);
-   if (temp < 0)
-      return errno;
-
-   fd = fopen(meta_file, "r");
-   if (fd == NULL) {
-      ret = errno;
-      goto end;
-   }
-   while (fgets(line, sizeof(line), fd) != NULL) {
-      free_record(&tmp_record);
-      p = strchr(line, '\n');
-      if (p)
-        *p = '\0';
-      ret = decode_record(line, &tmp_record);
-      if (ret)
-        goto end;
-      if (record->suffix == tmp_record.suffix &&
-         record->unique == tmp_record.unique) {
-        tmp_record.next_renewal = record->next_renewal;
-        tmp_record.end_time = record->end_time;
-        tmp_record.voms_exts = record->voms_exts;
-        if (tmp_record.myproxy_server != NULL)
-           free(tmp_record.myproxy_server);
-        tmp_record.myproxy_server = strdup(record->myproxy_server);
-        if (tmp_record.jobids.val) {
-           for (i = 0; i < tmp_record.jobids.len; i++)
-               free(tmp_record.jobids.val[i]);
-           free(tmp_record.jobids.val);
-        }
-        tmp_record.jobids.len = 0;
-        tmp_record.jobids.val = NULL;
-        for (i = 0; i < record->jobids.len; i++) {
-           realloc_prd_list(&tmp_record.jobids);
-           tmp_record.jobids.val[tmp_record.jobids.len - 1] = 
-              strdup(record->jobids.val[i]);
-        }
-        stored = 1;
-      }
-      ret = encode_record(&tmp_record, &new_line);
-      if (ret)
-        goto end;
-      dprintf(temp, "%s\n", new_line);
-      free(new_line);
-      new_line = NULL;
-   }
-   if (! stored) {
-      ret = encode_record(record, &new_line);
-      if (ret)
-        goto end;
-      ret = dprintf(temp, "%s\n", new_line);
-      free(new_line);
-      new_line = NULL;
-   }
-   fclose(fd); fd = NULL;
-   close(temp);
-
-   ret = rename(tmp_file, meta_file);
-   if (ret)
-      ret = errno;
-
-end:
-   free_record(&tmp_record);
-   if (fd)
-      fclose(fd);
-   close(temp);
-   return ret;
-}
-
-static int
-open_metafile(char *basename, FILE **fd)
-{
-   FILE *meta_fd;
-   char meta_filename[FILENAME_MAX];
-
-   snprintf(meta_filename, sizeof(meta_filename), "%s.data", basename);
-   meta_fd = fopen(meta_filename, "a+");
-   if (meta_fd == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Opening meta file %s failed (%s)",
-                  meta_filename, strerror(errno));
-      return errno;
-   }
-   rewind(meta_fd);
-   *fd = meta_fd;
-   edg_wlpr_Log(LOG_DEBUG, "Using meta file %s", meta_filename);
-   return 0;
-}
-
-static int
-filename_to_response(char *filename, edg_wlpr_Response *response)
-{
-   response->filenames = malloc(2 * sizeof(*response->filenames));
-   if (response->filenames == NULL) {
-      edg_wlpr_Log(LOG_DEBUG, "Not enough memory");
-      return errno;
-   }
-   response->filenames[0] = strdup(filename);
-   if (response->filenames[0] == NULL) {
-      edg_wlpr_Log(LOG_DEBUG, "Not enough memory");
-      free(response->filenames);
-      return errno;
-   }
-   response->filenames[1] = NULL;
-   return 0;
-}
-
-static void
-record_to_response(int status_code, proxy_record *record,
-                  edg_wlpr_Response *response)
-{
-   /* XXX Neni struktrura proxy_record zbytecna? Mohla by se pouzivat primo
-      edg_wlpr_Response? */
-   response->response_code = status_code; /* XXX chyba parsovatelna pres API */
-   if (status_code)
-      return;
-
-   if (response->myproxy_server) {
-      response->myproxy_server = strdup(record->myproxy_server);
-      if (response->myproxy_server == NULL) {
-        response->response_code = ENOMEM; /* XXX */
-        return;
-      }
-   }
-   response->end_time = record->end_time;
-   response->next_renewal_time = record->next_renewal;
-   /* XXX use jobid response->counter = record->counter; */
-}
-
-int
-check_proxyname(char *datafile, char *jobid, char **filename)
-{
-   proxy_record record;
-   FILE *meta_fd = NULL;
-   char line[1024];
-   char proxy[FILENAME_MAX];
-   char *p;
-   int ret, i;
-
-   memset(&record, 0, sizeof(record));
-
-   meta_fd = fopen(datafile, "r");
-   if (meta_fd == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Cannot open meta file %s (%s)",
-                  datafile, strerror(errno));
-      return errno;
-   }
-
-   while (fgets(line, sizeof(line), meta_fd) != NULL) {
-      free_record(&record);
-      p = strchr(line, '\n');
-      if (p)
-        *p = '\0';
-      ret = decode_record(line, &record);
-      if (ret)
-        continue; /* XXX exit? */
-      for (i = 0; i < record.jobids.len; i++) {
-        if (strcmp(jobid, record.jobids.val[i]) == 0) {
-           snprintf(proxy, sizeof(proxy), "%s/%s", repository, datafile);
-           p = strrchr(proxy, '.');
-           sprintf(p, ".%d", record.suffix);
-           *filename = strdup(proxy);
-            free_record(&record);
-           fclose(meta_fd);
-           return 0;
-        }
-      }
-   }
-   free_record(&record);
-   fclose(meta_fd);
-   return EDG_WLPR_ERROR_PROTO_PARSE_NOT_FOUND;
-}
-      
-int
-find_proxyname(char *jobid, char **filename)
-{
-   DIR *dir = NULL;
-   struct dirent *file;
-   int ret;
-   
-   chdir(repository);
-
-   dir = opendir(repository);
-   if (dir == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Cannot open repository directory %s (%s)",
-                  repository, strerror(errno));
-      return errno;
-   }
-
-   while ((file = readdir(dir))) {
-      /* read files of format `md5sum`.data, where md5sum() is of fixed length
-        32 chars */
-      if (file->d_name == NULL || strlen(file->d_name) != 37 ||
-         strcmp(file->d_name + 32, ".data") != 0)
-        continue;
-      ret = check_proxyname(file->d_name, jobid, filename);
-      if (ret == 0) {
-        closedir(dir);
-        return 0;
-      }
-   }
-   closedir(dir);
-   edg_wlpr_Log(LOG_ERR, "Requested proxy is not registered");
-   return EDG_WLPR_PROXY_NOT_REGISTERED;
-}
-
-#ifdef NOVOMS
-int
-find_voms_cert(char *file, int *present)
-{
-       *present = 0;
-       return 0;
-}
-
-#else
-int
-find_voms_cert(char *file, int *present)
-{
-   struct vomsdata *voms_info = NULL;
-   STACK_OF(X509) *chain = NULL;
-   EVP_PKEY *privkey = NULL;
-   X509 *cert = NULL;
-   int ret, err;
-   
-   *present = 0;
-
-   voms_info = VOMS_Init(vomsdir, cadir);
-   if (voms_info == NULL) {
-      edg_wlpr_Log(LOG_ERR, "check_voms_cert(): Cannot initialize VOMS context (VOMS_Init() failed, probably voms dir was not specified)");
-      return EDG_WLPR_ERROR_VOMS;
-   }
-
-   ret = load_proxy(file, &cert, &privkey, &chain);
-   if (ret) {
-      VOMS_Destroy(voms_info);
-      return ret;
-   }
-
-   ret = VOMS_Retrieve(cert, chain, RECURSE_CHAIN, voms_info, &err);
-   if (ret == 1) {
-      *present = 1;
-   }
-
-   VOMS_Destroy(voms_info);
-   X509_free(cert);
-   EVP_PKEY_free(privkey);
-   sk_X509_pop_free(chain, X509_free);
-   return 0;
-}
-#endif
-
-void
-register_proxy(edg_wlpr_Request *request, edg_wlpr_Response *response)
-{
-   proxy_record record;
-   int ret;
-   FILE *meta_fd = NULL;
-   int last_suffix;
-   char *basename = NULL;
-   char filename[FILENAME_MAX];
-
-   assert(request != NULL);
-   assert(response != NULL);
-
-   memset(&record, 0, sizeof(record));
-   memset(response, 0, sizeof(*response));
-   edg_wlpr_Log(LOG_DEBUG, "Registration request for %s", request->proxy_filename);
-
-   if (request->proxy_filename == NULL || request->jobid == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Registration request doesn't contain registration information");
-      return; /*  EINVAL; */
-   }
-   umask(0177);
-
-   ret = get_base_filename(request->proxy_filename, &basename);
-   if (ret)
-      goto end;
-
-   ret = open_metafile(basename, &meta_fd);
-   if (ret)
-      goto end;
-
-   if (voms_enabled)
-     ret = find_voms_cert(request->proxy_filename, &record.voms_exts);
-     /* ignore VOMS related error */
-
-   /* Find first free record */
-   record.suffix = -1;
-   record.myproxy_server = strdup(request->myproxy_server);
-   ret = get_record_ext(meta_fd, &record, &last_suffix);
-   fclose(meta_fd); meta_fd = NULL;
-   if (ret && ret != EDG_WLPR_ERROR_PROTO_PARSE_NOT_FOUND)
-      goto end;
-
-   if (ret == EDG_WLPR_ERROR_PROTO_PARSE_NOT_FOUND || record.jobids.len == 0 || request->unique || record.voms_exts) {
-      /* create a new proxy file in the repository */
-      int suffix;
-
-      suffix = (record.jobids.len == 0 && record.suffix >= 0) ? 
-                record.suffix : last_suffix + 1;
-      snprintf(filename, sizeof(filename), "%s.%d", basename, suffix);
-      ret = copy_file(request->proxy_filename, filename);
-      if (ret)
-        goto end;
-      ret = get_times(filename, &record);
-      if (ret)
-        goto end;
-      record.suffix = suffix;
-      ret = realloc_prd_list(&record.jobids);
-      if (ret)
-        goto end;
-      record.jobids.val[record.jobids.len - 1] = strdup(request->jobid);
-      record.unique = request->unique;
-      edg_wlpr_Log(LOG_DEBUG, "Created a new proxy file in repository (%s)",
-                  filename);
-   } else {
-      ret = realloc_prd_list(&record.jobids);
-      if (ret)
-        goto end;
-      record.jobids.val[record.jobids.len - 1] = strdup(request->jobid);
-      snprintf(filename, sizeof(filename), "%s.%d", basename, record.suffix);
-      edg_wlpr_Log(LOG_DEBUG, "Inremented counter on %s", filename);
-   }
-
-   ret = store_record(basename, &record);
-
-end:
-   if (meta_fd) {
-      fclose(meta_fd);
-   }
-
-   if (basename)
-      free(basename);
-
-   if (ret == 0)
-      ret = filename_to_response(filename, response);
-   record_to_response(ret, &record, response);
-   free_record(&record);
-}
-
-void
-unregister_proxy(edg_wlpr_Request *request, edg_wlpr_Response *response)
-{
-   proxy_record record;
-   int ret, i, index;
-   FILE *meta_fd = NULL;
-   char *basename = NULL;
-   char *p;
-   struct stat stat_buf;
-
-   memset(&record, 0, sizeof(record));
-   edg_wlpr_Log(LOG_DEBUG, "Unregistration request for %s", request->jobid);
-
-   if (request->jobid == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Unregistration request doesn't contain needed information");
-      ret = EINVAL;
-      goto end;
-   }
-
-   if (request->proxy_filename == NULL) {
-      ret = find_proxyname(request->jobid, &request->proxy_filename);
-      if (ret)
-        goto end;
-   }
-
-   ret = get_base_filename(request->proxy_filename, &basename);
-   if (ret) {
-      goto end;
-   }
-
-   if (strncmp(request->proxy_filename, basename, strlen(basename) != 0)) {
-      edg_wlpr_Log(LOG_DEBUG, "Requested proxy %s is not from repository",
-                  request->proxy_filename);
-      ret = EDG_WLPR_PROXY_NOT_REGISTERED;
-      goto end;
-   }
-
-   p = strrchr(request->proxy_filename, '.');
-   if (p == NULL) {
-      edg_wlpr_Log(LOG_DEBUG, "Requested proxy %s is not from repository",
-                  request->proxy_filename);
-      ret = EDG_WLPR_PROXY_NOT_REGISTERED;
-      goto end;
-   }
-
-   ret = edg_wlpr_DecodeInt(p+1, &record.suffix);
-   if (ret) {
-      edg_wlpr_Log(LOG_DEBUG, "Requested proxy %s is not from repository",
-                 request->proxy_filename);
-      ret = EDG_WLPR_PROXY_NOT_REGISTERED;
-      goto end;
-   }
-
-   ret = open_metafile(basename, &meta_fd);
-   if (ret) {
-      /* fill in error response */
-      return;
-   }
-
-   ret = get_record(meta_fd, &record);
-   if (ret)
-      goto end;
-
-   ret = EDG_WLPR_PROXY_NOT_REGISTERED;
-   for (i = 0; i < record.jobids.len; i++)
-      if (strcmp(request->jobid, record.jobids.val[i]) == 0) {
-        ret = 0;
-        break;
-      }
-   if (ret) {
-      edg_wlpr_Log(LOG_DEBUG, "Requested proxy %s is not registered",
-                  request->proxy_filename);
-      goto end;
-   }
-
-   /* remove jobid from the list */
-   index = i;
-   free(record.jobids.val[i]);
-   record.jobids.len--;
-   for (i = index; i < record.jobids.len; i++)
-      record.jobids.val[i] = record.jobids.val[i+1];
-
-   if (record.jobids.len == 0) {
-      record.unique = 0;
-      record.voms_exts = 0;
-      record.end_time = 0;
-      record.next_renewal = 0;
-   }
-
-   ret = stat(request->proxy_filename, &stat_buf);
-   if (ret) {
-      edg_wlpr_Log(LOG_DEBUG, "Cannot stat file %s: (%s)",
-                  request->proxy_filename, strerror(errno));
-      ret = errno;
-      goto end;
-   }
-
-   ret = store_record(basename, &record);
-   if (ret)
-      goto end;
-
-   if (record.jobids.len == 0)
-      unlink(request->proxy_filename);
-
-end:
-   if (meta_fd) {
-      fclose(meta_fd);
-   }
-   if (basename)
-      free(basename);
-
-   if (ret == 0)
-      ret = filename_to_response(request->proxy_filename, response);
-   record_to_response(ret, &record, response);
-   free_record(&record);
-}
-
-void
-get_proxy(edg_wlpr_Request *request, edg_wlpr_Response *response)
-{
-   char *filename = NULL;
-   int ret;
-
-   memset(response, 0, sizeof(*response));
-
-   edg_wlpr_Log(LOG_DEBUG, "GET request for %s", request->jobid);
-   
-   if (request->jobid == NULL) {
-      edg_wlpr_Log(LOG_ERR, "GET request doesn't contain jobid specification");
-      ret = EINVAL;
-      goto end;
-   }
-
-   ret = find_proxyname(request->jobid, &filename);
-
-end:
-   if (ret == 0)
-      ret = filename_to_response(filename, response);
-   if (filename)
-      free(filename);
-   response->response_code = ret;
-}
-
-void
-update_db(edg_wlpr_Request *request, edg_wlpr_Response *response)
-{
-   FILE *fd = NULL;
-   int tmp_fd = -1;
-   int suffix = -1;
-   char tmp_file[FILENAME_MAX];
-   char cur_proxy[FILENAME_MAX];
-   char datafile[FILENAME_MAX];
-   char line[1024];
-   char *new_line = NULL;
-   char *basename, *proxy = NULL;
-   char **entry;
-   proxy_record record;
-   int ret;
-   char *p;
-   time_t current_time;
-
-   memset(&record, 0, sizeof(record));
-
-   edg_wlpr_Log(LOG_DEBUG, "UPDATE_DB request for %s", request->proxy_filename);
-
-   chdir(repository);
-   basename = request->proxy_filename;
-
-   snprintf(datafile, sizeof(datafile), "%s.data", basename);
-   fd = fopen(datafile, "r");
-   if (fd == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Cannot open meta file %s (%s)",
-                  datafile, strerror(errno));
-      ret = errno;
-      return;
-   }
-
-   snprintf(tmp_file, sizeof(tmp_file), "%s.XXXXXX", datafile);
-   tmp_fd = mkstemp(tmp_file);
-   if (tmp_fd < 0) {
-      edg_wlpr_Log(LOG_ERR, "Cannot create temporary file (%s)",
-                  strerror(errno));
-      ret = errno;
-      goto end;
-   }
-
-   entry = request->entries;
-   if (entry) {
-      p = strchr(*entry, ':');
-      *p = '\0';
-      suffix = atoi(*entry);
-      proxy = p+1;
-   }
-
-   current_time = time(NULL);
-
-   while (fgets(line, sizeof(line), fd) != NULL) { 
-      free_record(&record);
-      p = strchr(line, '\n');
-      if (p)
-        *p = '\0';
-      ret = decode_record(line, &record);
-      if (ret)
-        goto end;
-      
-      if (record.suffix > suffix && entry && *entry) {
-        do {
-           entry++;
-           if (entry == NULL || *entry == NULL) {
-              suffix = -1;
-              break;
-           }
-           
-           p = strchr(*entry, ':');
-           suffix = atoi(*entry);
-           proxy = p+1;
-        } while (record.suffix > suffix);
-      }
-
-      if (record.suffix == suffix) {
-        snprintf(cur_proxy, sizeof(cur_proxy), "%s.%d", basename, suffix);
-        if (proxy == NULL || *proxy == '\0') {
-           /* if proxy isn't specified use file registered currently and
-            * reschedule renewal */
-           if (record.end_time < current_time) {
-              char *server;
-              /* remove file with expired proxy and clean the record in db */
-              unlink(cur_proxy);
-              server = strdup(record.myproxy_server);
-              free_record(&record);
-              record.suffix = suffix;
-              record.myproxy_server = server;
-              edg_wlpr_Log(LOG_WARNING, "Removed expired proxy (suffix %d)",
-                           suffix);
-           } else
-              get_times(cur_proxy, &record);
-        } else {
-           ret = get_times(proxy, &record);
-           (ret == 0) ? rename(proxy, cur_proxy) : unlink(proxy);
-        }
-      }
-      
-      ret = encode_record(&record, &new_line);
-      if (ret)
-        goto end;
-
-      dprintf(tmp_fd, "%s\n", new_line);
-      free(new_line);
-      new_line = NULL;
-   }
-   free_record(&record);
-
-   close(tmp_fd);
-   fclose(fd);
-
-   rename(tmp_file, datafile);
-
-   return;
-
-end:
-   if (fd)
-      fclose(fd);
-   unlink(tmp_file);
-   if (tmp_fd > 0)
-      close(tmp_fd);
-   free_record(&record);
-
-   return;
-}
diff --git a/org.glite.security.proxyrenewal/src/common.c b/org.glite.security.proxyrenewal/src/common.c
deleted file mode 100644 (file)
index 87fff76..0000000
+++ /dev/null
@@ -1,239 +0,0 @@
-#include "renewal_locl.h"
-
-#ident "$Header$"
-
-/* nread() and nwrite() never return partial data */
-static size_t
-nread(int sock, char *buf, size_t buf_len)
-{
-   size_t count;
-   size_t remain = buf_len;
-   char *cbuf = buf;
-
-   while (remain > 0) {
-      count = read(sock, cbuf, remain);
-      if (count < 0) {
-        if (errno == EINTR)
-           continue;
-        else
-           return count;
-      } else
-        if (count == 0) {
-           return count;
-        }
-      cbuf += count;
-      remain -= count;
-   }
-   return buf_len;
-}
-
-static size_t
-nwrite(int sock, const char *buf, size_t buf_len)
-{
-   const char *cbuf = buf;
-   size_t count;
-   size_t remain = buf_len;
-
-   while (remain > 0) {
-      count = write(sock, cbuf, remain);
-      if (count < 0) {
-        if (errno == EINTR)
-           continue;
-        else
-           return count;
-      }
-      cbuf += count;
-      remain -= count;
-   }
-   return buf_len;
-}
-
-int
-edg_wlpr_Read(int sock, char **buf, size_t *buf_len)
-{
-   int ret;
-   unsigned char length[4];
-
-   ret = nread(sock, length, 4);
-   if (ret == -1) {
-      *buf_len = 0;
-      return errno;
-   }
-   if (ret < 4) {
-      *buf_len = 0;
-      return EDG_WLPR_ERROR_UNEXPECTED_EOF; /* XXX vraci i kdyz peer spadne a zavre trubku */
-   }
-   *buf_len = (length[0] << 24) | 
-              (length[1] << 16) | 
-             (length[2] << 8 ) | 
-             (length[3] << 0);
-
-   *buf = malloc(*buf_len);
-   if (*buf == NULL)
-      return ENOMEM;
-
-   ret = nread(sock, *buf, *buf_len);
-   if (ret != *buf_len) {
-      free(*buf);
-      *buf_len = 0;
-      return errno;
-   }
-
-   return 0;
-}
-
-int
-edg_wlpr_Write(int sock, char *buf, size_t buf_len)
-{
-   unsigned char length[4];
-
-   length[0] = (buf_len >> 24) & 0xFF;
-   length[1] = (buf_len >> 16) & 0xFF;
-   length[2] = (buf_len >> 8)  & 0xFF;
-   length[3] = (buf_len >> 0)  & 0xFF;
-
-   if (nwrite(sock, length, 4) != 4 ||
-       nwrite(sock, buf, buf_len) != buf_len)
-       return errno;
-   
-   return 0;
-}
-
-int
-edg_wlpr_GetToken(const char *msg, const size_t msg_len, 
-                  const char *key, const char *separators,
-                 int req_index, char **value)
-{
-   char *p;
-   size_t len;
-   int index;
-
-   assert(separators != NULL);
-
-   /* Add ending zero ? */
-
-   index = 0;
-   p = (char *)msg;
-   while (p && (p = strstr(p, key))) {
-     if (index == req_index)
-       break;
-     index++;
-     p += strlen(key);
-   }
-   if (p == NULL)
-      return EDG_WLPR_ERROR_PROTO_PARSE_NOT_FOUND;
-
-   p = strchr(p, '=');
-   if (p == NULL)
-      return EDG_WLPR_ERROR_PROTO_PARSE_ERROR;
-
-   len = strcspn(p+1, separators);
-   if (len == 0)
-      return EDG_WLPR_ERROR_PROTO_PARSE_ERROR;
-
-   *value = malloc(len + 1);
-   if (*value == NULL)
-      return ENOMEM;
-
-   memcpy(*value, p+1, len);
-   (*value)[len] = '\0';
-
-   return 0;
-}
-
-int
-edg_wlpr_StoreToken(char **buf, size_t *buf_len, char *command,
-                    char *value, const char *separator)
-{
-   char line[2048];
-   char *tmp;
-
-   assert(buf != NULL);
-   assert(separator != NULL);
-
-   if (strlen(command) + 1 + strlen(value) + 2 > sizeof(line))
-      return ERANGE; /* XXX */
-
-   snprintf(line, sizeof(line), "%s%s%s", command, value, separator);
-
-   while (strlen(*buf) + strlen(line) + 1 > *buf_len) {
-      tmp = realloc(*buf, *buf_len + EDG_WLPR_BUF_SIZE);
-      if (tmp == NULL)
-         return ENOMEM;
-      *buf = tmp;
-      *buf_len += EDG_WLPR_BUF_SIZE;
-   }
-   strcat(*buf, line);
-
-   return 0;
-}
-
-void
-edg_wlpr_CleanRequest(edg_wlpr_Request *request)
-{
-   assert(request != NULL);
-   if (request->version)
-      free(request->version);
-   if (request->proxy_filename)
-      free(request->proxy_filename);
-   if (request->myproxy_server)
-      free(request->myproxy_server);
-   if (request->jobid)
-      free(request->jobid);
-   if (request->entries) {
-      char **p = request->entries;
-      char **next;
-      while (*p) {
-        next = p+1;
-        free(*p);
-        p = next;
-      }
-      free(request->entries);
-   }
-
-   memset(request, 0, sizeof(request));
-}
-
-void
-edg_wlpr_CleanResponse(edg_wlpr_Response *response)
-{
-   assert(response != NULL);
-   if (response->version)
-      free(response->version);
-   if (response->myproxy_server)
-      free(response->myproxy_server);
-   if (response->filenames) {
-      char **p = response->filenames;
-      char **next;
-
-      while (*p) {
-        next = p+1;
-        free(*p);
-        p = next;
-      }
-      free(response->filenames);
-   }
-   memset(response, 0, sizeof(*response));
-}
-
-const char *
-edg_wlpr_GetErrorString(int code)
-{
-   return (code == 0) ? "OK" : "Error";
-}
-
-char *
-edg_wlpr_EncodeInt(int num) /* long? time */
-{
-   static char ret[64];
-
-   snprintf(ret, sizeof(ret), "%d", num);
-   return ret;
-}
-
-int
-edg_wlpr_DecodeInt(char *str, int *num)
-{
-   *num = atol(str); /* XXX */
-   return 0;
-}
diff --git a/org.glite.security.proxyrenewal/src/renew.c b/org.glite.security.proxyrenewal/src/renew.c
deleted file mode 100644 (file)
index 6c6e577..0000000
+++ /dev/null
@@ -1,1120 +0,0 @@
-#include "renewal_locl.h"
-#include "renewd_locl.h"
-
-#ifndef NOVOMS
-#include <voms_apic.h>
-#endif
-
-#ident "$Header$"
-
-extern char *repository;
-extern char *cadir;
-extern char *vomsdir;
-extern int voms_enabled;
-extern char *vomsconf;
-extern struct vomses_records vomses;
-
-static int received_signal = -1;
-
-static void
-check_renewal(char *datafile, int force_renew);
-
-static int
-renew_proxy(proxy_record *record, char *basename, char **new_proxy);
-
-static void
-register_signal(int signal);
-
-
-#define DGPR_RETRIEVE_DEFAULT_HOURS 10
-#define RENEWAL_CLOCK_SKEW 5 * 60
-
-static const char *
-get_ssl_err()
-{
-   return "SSL failed";
-}
-
-int
-load_proxy(const char *filename, X509 **cert, EVP_PKEY **privkey,
-           STACK_OF(X509) **chain)
-{
-   X509 *my_cert = NULL;
-   EVP_PKEY *my_key = NULL;
-   STACK_OF(X509) *my_chain = NULL;
-   FILE *fd = NULL;
-   int ret;
-
-   fd = fopen(filename, "r");
-   if (fd == NULL) {
-      edg_wlpr_Log(LOG_ERR,
-           "Cannot read VOMS certificate (fopen() failed on %s: %s)",
-           filename, strerror(errno));
-      return errno;
-   }
-
-   my_cert = PEM_read_X509(fd, NULL, NULL, NULL);
-   if (my_cert == NULL) {
-      edg_wlpr_Log(LOG_ERR,
-           "Cannot read VOMS certificate (PEM_read_X509() failed: %s)",
-           get_ssl_err());
-      ret = EDG_WLPR_ERROR_SSL;
-      goto end;
-   }
-
-   my_key = PEM_read_PrivateKey(fd, NULL, NULL, NULL);
-   if (my_key == NULL) {
-      edg_wlpr_Log(LOG_ERR,
-           "Cannot read VOMS certificate (PEM_read_PrivateKey() failed: %s)",
-           get_ssl_err());
-      ret = EDG_WLPR_ERROR_SSL;
-      goto end;
-   }
-
-   my_chain = sk_X509_new_null();
-   if (my_chain == NULL) {
-      edg_wlpr_Log(LOG_ERR,
-                  "Cannot read VOMS certificate (sk_X509_new_null() failed: %s)",
-                  get_ssl_err());
-      ret = EDG_WLPR_ERROR_SSL;
-      goto end;
-   }
-
-   while (1) {
-      X509 *c;
-
-      c = PEM_read_X509(fd, NULL, NULL, NULL);
-      if (c == NULL) {
-        if (ERR_GET_REASON(ERR_peek_error()) == PEM_R_NO_START_LINE) {
-           /* End of file reached. no error */
-           ERR_clear_error();
-           break;
-        }
-        edg_wlpr_Log(LOG_ERR,
-                     "Cannot read VOMS certificate (PEM_read_X509() failed: %s)",
-                     get_ssl_err());
-        ret = EDG_WLPR_ERROR_SSL;
-        goto end;
-      }
-      sk_X509_push(my_chain, c);
-   }
-
-   *cert = my_cert;
-   *privkey = my_key;
-   *chain = my_chain;
-   my_cert = NULL; my_key = NULL; my_chain = NULL;
-   ret = 0;
-
-end:
-   fclose(fd);
-
-   if (my_cert)
-      X509_free(my_cert);
-   if (my_key)
-      EVP_PKEY_free(my_key);
-   if (my_chain)
-      sk_X509_pop_free(my_chain, X509_free);
-
-   return ret;
-}
-
-static int
-save_proxy(const char *filename, X509 *new_cert, EVP_PKEY *new_privkey, 
-           STACK_OF(X509) *chain)
-{
-   FILE *fd = NULL;
-   int ret, i;
-   int retval = EDG_WLPR_ERROR_SSL;
-
-   fd = fopen(filename, "w");
-   if (fd == NULL) {
-      edg_wlpr_Log(LOG_ERR,
-                  "Cannot store proxy (fopen() failed on %s: %s)",
-                  filename, strerror(errno));
-      return errno;
-   }
-
-   ret = PEM_write_X509(fd, new_cert);
-   if (ret == 0) {
-      edg_wlpr_Log(LOG_ERR,
-                  "Cannot store proxy (PEM_write_X509() failed: %s)",
-                  get_ssl_err());
-      goto end;
-   }
-
-   ret = PEM_write_PrivateKey(fd, new_privkey, NULL, NULL, 0, NULL, NULL);
-   if (ret == 0) {
-      edg_wlpr_Log(LOG_ERR,
-                  "Cannot store proxy (PEM_write_PrivateKey() failed: %s)",
-                  get_ssl_err());
-      goto end;
-   }
-
-   for (i = 0; i < sk_X509_num(chain); i++) {
-      X509 *cert = sk_X509_value(chain, i);
-      ret = PEM_write_X509(fd, cert);
-      if (ret == 0) {
-        edg_wlpr_Log(LOG_ERR,
-                     "Cannot store proxy (PEM_write_X509() failed: %s)",
-                     get_ssl_err());
-        goto end;
-      }
-   }
-      
-   retval = 0;
-
-end:
-   fclose(fd);
-
-   return retval;
-}
-
-static int
-gen_keypair(EVP_PKEY **keypair, int requested_bits)
-{
-   RSA *rsa = NULL;
-   EVP_PKEY *key;
-
-   *keypair = NULL;
-   rsa = RSA_generate_key(requested_bits,
-                         RSA_F4 /* public exponent */,
-                         NULL, NULL);
-   if (rsa == NULL) {
-      edg_wlpr_Log(LOG_ERR,
-                  "Cannot generate new proxy (RSA_generate_key() failed: %s)",
-                  get_ssl_err());
-      return EDG_WLPR_ERROR_SSL;
-   }
-
-   key = EVP_PKEY_new();
-   if (key == NULL) {
-      edg_wlpr_Log(LOG_ERR,
-                  "Cannot generate new proxy (EVP_PKEY_new() failed: %s)",
-                  get_ssl_err());
-      RSA_free(rsa);
-      return EDG_WLPR_ERROR_SSL;
-   }
-
-   if (EVP_PKEY_assign_RSA(key, rsa) == 0) {
-      edg_wlpr_Log(LOG_ERR,
-                  "Cannot generate new proxy (EVP_PKEY_assign_RSA() failed: %s)",
-                  get_ssl_err());
-      RSA_free(rsa);
-      EVP_PKEY_free(key);
-      return EDG_WLPR_ERROR_SSL;
-   }
-
-   *keypair = key;
-
-   return 0;
-}
-
-static int
-gen_subject_name(X509 *old_cert, X509 *new_cert)
-{
-   X509_NAME *name = NULL;
-   X509_NAME_ENTRY *name_entry = NULL;
-   int ret = EDG_WLPR_ERROR_SSL;
-
-   name = X509_NAME_dup(X509_get_subject_name(old_cert));
-   if (name == NULL) {
-      edg_wlpr_Log(LOG_ERR,
-                  "Cannot generate new proxy (X509_NAME_dup() failed: %s",
-                  get_ssl_err());
-      goto end;
-   }
-
-   name_entry = X509_NAME_ENTRY_create_by_NID(NULL /* make new entry */,
-                                             NID_commonName,
-                                             V_ASN1_APP_CHOOSE,
-                                             "proxy", -1);
-   if (name_entry == NULL) {
-      edg_wlpr_Log(LOG_ERR,
-                  "Cannot generate new proxy (X509_NAME_ENTRY_create_by_NID() failed: %s)",
-                  get_ssl_err());
-      goto end;
-   }
-
-   if (X509_NAME_add_entry(name, name_entry, X509_NAME_entry_count(name), 0) == 0) {
-      edg_wlpr_Log(LOG_ERR,
-                  "Cannot generate new proxy (X509_NAME_add_entry() failed: %s)",
-                  get_ssl_err());
-      goto end;
-   }
-
-
-   if (X509_set_subject_name(new_cert, name) == 0) {
-      edg_wlpr_Log(LOG_ERR,
-                  "Cannot generate new proxy (X509_set_subject_name() failed: %s)",
-                  get_ssl_err());
-      goto end;
-   }
-
-   ret = 0;
-
-end:
-   if (name)
-      X509_NAME_free(name);
-   if (name_entry != NULL)
-      X509_NAME_ENTRY_free(name_entry);
-
-   return ret;
-}
-
-static int
-create_proxy(X509 *old_cert, EVP_PKEY *old_privkey, X509_EXTENSION *extension, 
-            X509 **new_cert, EVP_PKEY **new_privkey)
-{
-   /* Inspired by code from Myproxy */
-   EVP_PKEY *key_pair = NULL;
-   X509 *cert = NULL;
-   int ret;
-   int retval = EDG_WLPR_ERROR_SSL;
-
-   ret = gen_keypair(&key_pair, 512);
-   if (ret)
-      return ret;
-
-   cert = X509_new();
-   if (cert == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Cannot generate new proxy (X509_new() failed: Not enough memory)");
-      goto end;
-   }
-
-   ret = gen_subject_name(old_cert, cert);
-   if (ret) {
-      retval = ret;
-      goto end;
-   }
-
-   if (X509_set_issuer_name(cert, X509_get_subject_name(old_cert)) == 0) {
-      edg_wlpr_Log(LOG_ERR,
-                  "Cannot generate new proxy (X509_set_issuer_name() failed: %s)",
-                  get_ssl_err());
-      goto end;
-   }
-
-   if (X509_set_serialNumber(cert, X509_get_serialNumber(old_cert)) == 0) {
-      edg_wlpr_Log(LOG_ERR,
-                  "Cannot generate new proxy (X509_set_serialNumber() failed: %s)",
-                  get_ssl_err());
-      goto end;
-   }
-
-   X509_gmtime_adj(X509_get_notBefore(cert), -(60 * 5));
-   X509_set_notAfter(cert, X509_get_notAfter(old_cert));
-
-   if (X509_set_pubkey(cert, key_pair) == 0) {
-      edg_wlpr_Log(LOG_ERR, 
-                  "Cannot generate new proxy (X509_set_pubkey() failed: %s)",
-                  get_ssl_err());
-      goto end;
-   }
-
-   /* set v3 */
-   if (X509_set_version(cert, 2L) == 0) {
-      edg_wlpr_Log(LOG_ERR,
-                  "Cannot generate new proxy (X509_set_version() failed: %s)",
-                  get_ssl_err());
-      goto end;
-   }
-
-   if (cert->cert_info->extensions != NULL)
-      sk_X509_EXTENSION_pop_free(cert->cert_info->extensions,
-                                X509_EXTENSION_free);
-   cert->cert_info->extensions = sk_X509_EXTENSION_new_null();
-   sk_X509_EXTENSION_push(cert->cert_info->extensions, extension);
-
-   if (X509_sign(cert, old_privkey, EVP_md5()) == 0) {
-      edg_wlpr_Log(LOG_ERR,
-                  "Cannot generate new proxy (X509_sign() failed: %s)",
-                  get_ssl_err());
-      goto end;
-   }
-
-   *new_privkey = key_pair;
-   *new_cert = cert;
-   key_pair = NULL;
-   cert = NULL;
-
-   retval = 0;
-
-end:
-   if (key_pair)
-      EVP_PKEY_free(key_pair);
-   if (cert)
-      X509_free(cert);
-
-   return retval;
-}
-
-static int
-create_voms_extension(char *buf, size_t buf_len, X509_EXTENSION **extensions)
-{
-   ASN1_OBJECT *voms_obj = NULL;
-   ASN1_OCTET_STRING *voms_oct = NULL;
-
-   *extensions = NULL;
-
-   voms_oct = ASN1_OCTET_STRING_new();
-   if (voms_oct == NULL) {
-      edg_wlpr_Log(LOG_ERR,
-                  "Cannot generate new proxy (ASN1_OCTET_STRING_new() failed: %s)",
-                  get_ssl_err());
-      return EDG_WLPR_ERROR_SSL;
-   }
-
-   voms_oct->data = buf;
-   voms_oct->length = buf_len;
-
-   voms_obj = OBJ_nid2obj(OBJ_txt2nid("VOMS"));
-   if (voms_obj == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Cannot generate new proxy (OBJ_nid2obj() failed");
-      goto end;
-   }
-
-   *extensions = X509_EXTENSION_create_by_OBJ(NULL, voms_obj, 0, voms_oct);
-   if (*extensions == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Cannot generate new proxy (X509_EXTENSION_create_by_OBJ() failed");
-      goto end;
-   }
-
-   return 0;
-
-end:
-   if (voms_oct)
-      ASN1_OCTET_STRING_free(voms_oct);
-   if (voms_obj)
-      ASN1_OBJECT_free(voms_obj);
-   return EDG_WLPR_ERROR_SSL;
-}
-
-#ifndef NOVOMS
-static int
-export_std_data(struct data *voms_data, char **buf)
-{
-   asprintf(buf, "GROUP: %s\n"
-                "ROLE:%s\n" /* the space is missing intentionaly */
-                "CAP: %s\n",
-                (voms_data->group) ? voms_data->group : "NULL",
-                (voms_data->role) ? voms_data->role : "NULL",
-                (voms_data->cap) ? voms_data->cap : "NULL");
-   return 0;
-}
-
-static int
-export_user_data(struct voms *voms_cert, char **buf, size_t *len)
-{
-   struct data **voms_data;
-   char *str = NULL;
-   char *ptr;
-
-   *buf = NULL;
-
-   switch (voms_cert->type) {
-      case TYPE_NODATA:
-        *buf = strdup("NO DATA");
-        break;
-      case TYPE_CUSTOM:
-        *buf = strdup(voms_cert->custom);
-        break;
-      case TYPE_STD:
-        for (voms_data = voms_cert->std; voms_data && *voms_data; voms_data++) {
-           export_std_data(*voms_data, &str);
-           if (*buf == NULL)
-              ptr = calloc(strlen(str) + 1, 1);
-           else
-              ptr = realloc(*buf, strlen(*buf) + strlen(str) + 1);
-           if (ptr == NULL) {
-              return ENOMEM;
-           }
-           *buf = ptr;
-           strcat(*buf, str);
-           free(str);
-        }
-           
-        break;
-      default:
-        return -1;
-   }
-   
-   *len = strlen(*buf);
-   return 0;
-}
-
-#endif
-
-static int
-encode_voms_buf(const char *label, char *data, size_t data_len,
-                char **buf, size_t *buf_len)
-{
-   char *tmp;
-
-   tmp = realloc(*buf, *buf_len + strlen(label) + data_len + 1);
-   if (tmp == NULL)
-      return ENOMEM;
-
-   memcpy(tmp + *buf_len, label, strlen(label));
-
-   memcpy(tmp + *buf_len + strlen(label), data, data_len);
-   tmp[*buf_len + strlen(label) + data_len] = '\n';
-   *buf = tmp;
-   *buf_len = *buf_len + strlen(label) + data_len + 1;
-
-   return 0;
-}
-
-static int
-encode_voms_int(const char *label, int value, char **buf, size_t *buf_len)
-{
-   char tmp[16];
-
-   snprintf(tmp, sizeof(tmp), "%d", value);
-   return encode_voms_buf(label, tmp, strlen(tmp), buf, buf_len);
-}
-
-static int
-encode_voms_str(const char *label, char *value, char **buf, size_t *buf_len)
-{
-   return encode_voms_buf(label, value, strlen(value), buf, buf_len);
-}
-
-#if 0
-static int
-VOMS_Export(struct vomsdata *voms_info, char **buf, size_t *len)
-{
-   struct voms *vc;
-   char *enc_voms = NULL;
-   size_t enc_voms_len = 0;
-   char *data_buf;
-   size_t data_len;
-   int ret;
-
-   if (voms_info == NULL || voms_info->data == NULL || *voms_info->data == NULL)
-      return EINVAL;
-   vc = *voms_info->data;
-
-   ret = export_user_data(vc, &data_buf, &data_len);
-   if (ret)
-      return ret;
-
-   encode_voms_int("SIGLEN:",   vc->siglen, &enc_voms, &enc_voms_len);
-   encode_voms_buf("SIGNATURE:",vc->signature, vc->siglen,
-                  &enc_voms, &enc_voms_len);
-   enc_voms_len--; /* Signature is not followed by '\n' */
-   encode_voms_str("USER:",     vc->user, &enc_voms, &enc_voms_len);
-   encode_voms_str("UCA:",      vc->userca, &enc_voms, &enc_voms_len);
-   encode_voms_str("SERVER:",   vc->server, &enc_voms, &enc_voms_len);
-   encode_voms_str("SCA:",      vc->serverca, &enc_voms, &enc_voms_len);
-   encode_voms_str("VO:",       vc->voname, &enc_voms, &enc_voms_len);
-   encode_voms_str("URI:",      vc->uri, &enc_voms, &enc_voms_len);
-   encode_voms_str("TIME1:",    vc->date1, &enc_voms, &enc_voms_len);
-   encode_voms_str("TIME2:",    vc->date2, &enc_voms, &enc_voms_len);
-   encode_voms_int("DATALEN:",  data_len, &enc_voms, &enc_voms_len);
-   encode_voms_buf("",          data_buf, data_len, &enc_voms, &enc_voms_len);
-   enc_voms_len--; /* the data already contains endind '\n' */
-
-   free(data_buf);
-   if (enc_voms == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Cannot renew VOMS certificate (Not enough memory)");
-      return ENOMEM;
-   }
-   *buf = enc_voms;
-   *len = enc_voms_len;
-   return 0;
-}
-
-static int
-voms_cert_renew(char *hostname, int port, char *voms_subject,
-               char *proxy,
-                struct voms **cur_voms_cert, struct vomsdata *voms_info)
-{
-   int ret = 0;
-   char *command = "A";
-   int err = 0;
-   char *old_env_proxy = getenv("X509_USER_PROXY");
-
-   setenv("X509_USER_PROXY", proxy, 1);
-
-   /* hack (suggested by Vincenzo Ciaschini) to work around problem with
-    * unitialized VOMS struct */
-   ret = VOMS_Ordering("zzz:zzz", voms_info, &err);
-   if (ret == 0) {
-      edg_wlpr_Log(LOG_ERR, "Cannot renew VOMS certificate (VOMS_Ordering() failed");
-      ret = EDG_WLPR_ERROR_VOMS;
-      goto end;
-   }
-
-   /* XXX only attributes which are in current certificate should be requested*/
-   ret = VOMS_Contact(hostname, port, (*cur_voms_cert)->server, command,
-                     voms_info, &err);
-   if (ret == 0) {
-#if 0
-      if (err == 1) { /* XXX cannot connect voms server */ 
-        ret = 0;
-        goto end;
-      }
-#endif
-      edg_wlpr_Log(LOG_ERR, "Cannot renew VOMS certificate (VOMS_Contact() failed: %d)", err);
-      ret = EDG_WLPR_ERROR_VOMS;
-   } else
-      ret = 0;
-
-end:
-   (old_env_proxy) ? setenv("X509_USER_PROXY", old_env_proxy, 1) :
-                    unsetenv("X509_USER_PROXY");
-
-   return ret;
-}
-
-static int
-renew_voms_cert(struct voms **cur_voms_cert, char *proxy, char **buf, size_t *buf_len)
-{
-   struct vomsdata *voms_info = NULL;
-   char *hostname = NULL;
-   char *p;
-   int port, ret;
-
-   hostname = strdup((*cur_voms_cert)->uri);
-   p = strchr(hostname, ':');
-   if (p)
-      *p = '\0';
-   port = (p) ? atoi(p+1) : 15000;
-
-   voms_info = VOMS_Init(vomsdir, cadir);
-   if (voms_info == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Cannot renew VOMS certificate (VOMS_Init() failed)");
-      ret = EDG_WLPR_ERROR_VOMS;
-      goto end;
-   }
-
-   ret = voms_cert_renew(hostname, port, (*cur_voms_cert)->server, proxy, cur_voms_cert,
-                        voms_info);
-   if (ret)
-      goto end;
-  
-   ret = VOMS_Export(voms_info, buf, buf_len);
-   if (ret) {
-      edg_wlpr_Log(LOG_ERR, "Cannot renew VOMS certificate (VOMS_Export() failed)");
-      ret = EDG_WLPR_ERROR_VOMS;
-      goto end;
-   }
-
-   ret = 0;
-
-end:
-   if (hostname)
-      free(hostname);
-#if 0
-   if (voms_info)
-      VOMS_Destroy(voms_info);
-#endif
-
-   return ret;
-}
-#endif
-
-#ifndef NOVOMS
-static vomses_record *
-find_vomses_record(char *hostname, int port)
-{
-   int i;
-
-   for (i = 0; i < vomses.len; i++) {
-      if (strcmp(vomses.val[i]->hostname, hostname) == 0 &&
-         vomses.val[i]->port == port)
-        return vomses.val[i];
-   }
-
-   return NULL;
-}
-
-static int
-set_vo_params(struct voms **voms_cert, char **arg)
-{
-   vomses_record *r;
-   char *tmp;
-   int port;
-   char *hostname;
-   char *p;
-
-   hostname = strdup((*voms_cert)->uri);
-   p = strchr(hostname, ':');
-   if (p)
-      *p = '\0';
-   port = (p) ? atoi(p+1) : 15000;
-
-   r = find_vomses_record(hostname, port);
-   if (r == NULL)
-      return EINVAL;
-
-   if (*arg == NULL) {
-      asprintf(arg, " -voms %s", r->nick);
-   } else {
-      tmp = realloc(*arg, 
-                   strlen(*arg) + strlen(" -voms ") + strlen(r->nick) + 1);
-      if (tmp == NULL)
-        return ENOMEM;
-      *arg = tmp;
-      *arg = strcat(*arg, " -voms ");
-      *arg = strcat(*arg, r->nick);
-   }
-   return 0;
-}
-#endif
-
-static int
-exec_voms_proxy_init(char *arg, char *old_proxy, char *new_proxy)
-{
-   char command[256];
-   int ret;
-   char *old_env_proxy = getenv("X509_USER_PROXY");
-
-   setenv("X509_USER_PROXY", old_proxy, 1);
-
-   snprintf(command, sizeof(command), 
-        "edg-voms-proxy-init -out %s -key %s -cert %s -confile %s -q %s",
-        new_proxy, old_proxy, old_proxy, vomsconf, arg);
-   ret = system(command);
-
-   (old_env_proxy) ? setenv("X509_USER_PROXY", old_env_proxy, 1) :
-                     unsetenv("X509_USER_PROXY");
-
-   return ret;
-}
-
-#if 0
-static int
-renew_voms_certs(const char *old_proxy, const char *new_proxy)
-{
-   struct vomsdata *voms_info = NULL;
-   struct voms **voms_cert = NULL;
-   STACK_OF(X509) *chain = NULL;
-   EVP_PKEY *privkey = NULL;
-   X509 *cert = NULL;
-   int ret, err;
-   char *buf = NULL;
-   size_t buf_len = 0;
-   X509_EXTENSION *extension = NULL;
-   X509 *new_cert = NULL;
-   EVP_PKEY *new_privkey = NULL;
-
-   voms_info = VOMS_Init(vomsdir, cadir);
-   if (voms_info == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Cannot initialize VOMS context (VOMS_Init() failed)");
-      return EDG_WLPR_ERROR_VOMS;
-   }
-
-   ret = load_proxy(old_proxy, &cert, &privkey, &chain);
-   if (ret)
-      goto end;
-
-   ret = VOMS_Retrieve(cert, chain, RECURSE_CHAIN, voms_info, &err);
-   if (ret == 0) {
-      if (err == VERR_NOEXT) {
-        /* no VOMS cred, no problem; continue */
-        ret = 0;
-      } else {
-         edg_wlpr_Log(LOG_ERR, "Cannot get VOMS certificate(s) from proxy");
-         ret = EDG_WLPR_ERROR_VOMS;
-      }
-      goto end;
-   }
-
-   for (voms_cert = voms_info->data; voms_cert && *voms_cert; voms_cert++) {
-      char *tmp, *ptr;
-      size_t tmp_len;
-
-      ret = renew_voms_cert(voms_cert, old_proxy, &tmp, &tmp_len);
-      if (ret)
-        continue;
-      ptr = realloc(buf, buf_len + tmp_len);
-      if (ptr == NULL) {
-        ret = ENOMEM;
-        goto end;
-      }
-      buf = ptr;
-      memcpy(buf + buf_len, tmp, tmp_len);
-      buf_len += tmp_len;
-   }
-
-   if (buf == NULL) {
-      /* no extension renewed, return */
-      ret = 0;
-      goto end;
-   }
-
-   ret = create_voms_extension(buf, buf_len, &extension);
-   if (ret)
-      goto end;
-
-   X509_free(cert);
-   EVP_PKEY_free(privkey);
-   sk_X509_pop_free(chain, X509_free);
-
-   ret = load_proxy(new_proxy, &cert, &privkey, &chain);
-   if (ret)
-      goto end;
-
-   ret = create_proxy(cert, privkey, extension, &new_cert, &new_privkey);
-   if (ret)
-      goto end;
-
-   sk_X509_insert(chain, cert, 0);
-        
-   ret = save_proxy(new_proxy, new_cert, new_privkey, chain);
-   if (ret)
-      goto end;
-
-   ret = 0;
-
-end:
-   VOMS_Destroy(voms_info);
-
-   return ret;
-}
-#else /* 0 */
-
-#ifdef NOVOMS
-static int
-renew_voms_certs(const char *old_proxy, char *myproxy_proxy, const char *new_proxy)
-{
-       return 0;
-}
-
-#else
-static int
-renew_voms_certs(const char *old_proxy, char *myproxy_proxy, const char *new_proxy)
-{
-   struct vomsdata *voms_info = NULL;
-   struct voms **voms_cert = NULL;
-   STACK_OF(X509) *chain = NULL;
-   EVP_PKEY *privkey = NULL;
-   X509 *cert = NULL;
-   int ret, err;
-   char *arg = NULL;
-
-   voms_info = VOMS_Init(vomsdir, cadir);
-   if (voms_info == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Cannot initialize VOMS context (VOMS_Init() failed)");
-      return EDG_WLPR_ERROR_VOMS;
-   }
-
-   ret = load_proxy(old_proxy, &cert, &privkey, &chain);
-   if (ret)
-      goto end;
-
-   ret = VOMS_Retrieve(cert, chain, RECURSE_CHAIN, voms_info, &err);
-   if (ret == 0) {
-      if (err == VERR_NOEXT) {
-        /* no VOMS cred, no problem; continue */
-        ret = 0;
-      } else {
-         edg_wlpr_Log(LOG_ERR, "Cannot get VOMS certificate(s) from proxy");
-         ret = EDG_WLPR_ERROR_VOMS;
-      }
-      goto end;
-   }
-
-   for (voms_cert = voms_info->data; voms_cert && *voms_cert; voms_cert++) {
-      ret = set_vo_params(voms_cert, &arg);
-      if (ret)
-        goto end;
-   }
-   ret = exec_voms_proxy_init(arg, myproxy_proxy, new_proxy);
-
-end:
-   VOMS_Destroy(voms_info);
-   return ret;
-}
-#endif /* NOVOMS */
-
-#endif /* 0 */
-
-static void
-register_signal(int signal)
-{
-      received_signal = signal;
-}
-
-static int
-renew_proxy(proxy_record *record, char *basename, char **new_proxy)
-{
-   char tmp_proxy[FILENAME_MAX];
-   int tmp_fd;
-   char repository_file[FILENAME_MAX];
-   int ret = -1;
-   char *p;
-   char *server = NULL;
-   myproxy_socket_attrs_t *socket_attrs;
-   myproxy_request_t      *client_request;
-   myproxy_response_t     *server_response;
-   char *renewed_proxy;
-
-   socket_attrs = malloc(sizeof(*socket_attrs));
-   memset(socket_attrs, 0, sizeof(*socket_attrs));
-
-   client_request = malloc(sizeof(*client_request));
-   memset(client_request, 0, sizeof(*client_request));
-
-   server_response = malloc(sizeof(*server_response));
-   memset(server_response, 0, sizeof(*server_response));
-
-   myproxy_set_delegation_defaults(socket_attrs, client_request);
-
-   edg_wlpr_Log(LOG_DEBUG, "Trying to renew proxy in %s.%d",
-               basename, record->suffix);
-
-   snprintf(tmp_proxy, sizeof(tmp_proxy), "%s.%d.renew.XXXXXX", 
-           basename, record->suffix);
-   tmp_fd = mkstemp(tmp_proxy);
-   if (tmp_fd == -1) {
-      edg_wlpr_Log(LOG_ERR, "Cannot create temporary file (%s)",
-                   strerror(errno));
-      return errno;
-   }
-
-   snprintf(repository_file, sizeof(repository_file),"%s.%d",
-           basename, record->suffix);
-
-   ret = get_proxy_base_name(repository_file, &client_request->username);
-   if (ret)
-      goto end;
-
-   client_request->proxy_lifetime = 60 * 60 * DGPR_RETRIEVE_DEFAULT_HOURS;
-   client_request->authzcreds = repository_file;
-
-   server = (record->myproxy_server) ? record->myproxy_server :
-                                       socket_attrs->pshost;
-   if (server == NULL) {
-      edg_wlpr_Log(LOG_ERR, "No myproxy server specified");
-      ret = EINVAL;
-      goto end;
-   }
-   socket_attrs->pshost = strdup(server);
-
-   p = strchr(socket_attrs->pshost, ':');
-   if (p) {
-      *p++ = '\0';
-      ret = edg_wlpr_DecodeInt(p, &socket_attrs->psport);
-      if (ret)
-        goto end;
-   } else
-      socket_attrs->psport = MYPROXY_SERVER_PORT;
-
-   ret = myproxy_get_delegation(socket_attrs, client_request,
-                               server_response, tmp_proxy);
-   if (ret == 1) {
-      ret = EDG_WLPR_ERROR_MYPROXY;
-      edg_wlpr_Log(LOG_ERR, "Cannot get renewed proxy from Myproxy server");
-      goto end;
-   }
-
-   renewed_proxy = tmp_proxy;
-
-   if (voms_enabled) {
-      char tmp_voms_proxy[FILENAME_MAX];
-      int tmp_voms_fd;
-      
-      snprintf(tmp_voms_proxy, sizeof(tmp_voms_proxy), "%s.%d.renew.XXXXXX",
-              basename, record->suffix);
-      tmp_voms_fd = mkstemp(tmp_voms_proxy);
-      if (tmp_voms_fd == -1) {
-        edg_wlpr_Log(LOG_ERR, "Cannot create temporary file (%s)",
-                     strerror(errno));
-        ret = errno;
-        goto end;
-      }
-
-      ret = renew_voms_certs(repository_file, tmp_proxy, tmp_voms_proxy);
-      if (ret)
-        goto end;
-
-      renewed_proxy = tmp_voms_proxy;
-   }
-
-   if (new_proxy)
-      *new_proxy = strdup(renewed_proxy);
-
-   ret = 0;
-
-end:
-   if (socket_attrs->socket_fd)
-      close(socket_attrs->socket_fd);
-   close(tmp_fd);
-   if (ret)
-      unlink(tmp_proxy);
-   myproxy_free(socket_attrs, client_request, server_response);
-
-   return ret;
-}
-
-static void
-check_renewal(char *datafile, int force_renew)
-{
-   char line[1024];
-   proxy_record record;
-   char *p;
-   int ret, i;
-   time_t current_time;
-   FILE *meta_fd = NULL;
-   char basename[FILENAME_MAX];
-   edg_wlpr_Request request;
-   edg_wlpr_Response response;
-   char *new_proxy = NULL;
-   char *entry = NULL;
-   char **tmp;
-   int num = 0;
-
-   assert(datafile != NULL);
-
-   memset(&record, 0, sizeof(record));
-   memset(basename, 0, sizeof(basename));
-   memset(&request, 0, sizeof(request));
-   memset(&response, 0, sizeof(response));
-   
-   strncpy(basename, datafile, sizeof(basename) - 1);
-   p = basename + strlen(basename) - strlen(".data");
-   if (strcmp(p, ".data") != 0) {
-      edg_wlpr_Log(LOG_ERR, "Meta filename doesn't end with '.data'");
-      return;
-   }
-   *p = '\0';
-
-   request.command = EDG_WLPR_COMMAND_UPDATE_DB;
-   request.proxy_filename = strdup(basename);
-
-   meta_fd = fopen(datafile, "r");
-   if (meta_fd == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Cannot open meta file %s (%s)",
-                  datafile, strerror(errno));
-      return;
-   }
-
-   current_time = time(NULL);
-   edg_wlpr_Log(LOG_DEBUG, "Reading metafile %s", datafile);
-
-   while (fgets(line, sizeof(line), meta_fd) != NULL) {
-      free_record(&record);
-      p = strchr(line, '\n');
-      if (p)
-        *p = '\0';
-      ret = decode_record(line, &record);
-      if (ret)
-        continue; /* XXX exit? */
-      if (record.jobids.len == 0) /* no jobid registered for this proxy */
-        continue;
-      if (record.end_time - current_time < RENEWAL_CLOCK_SKEW ||
-         abs(record.next_renewal - current_time) < RENEWAL_CLOCK_SKEW ||
-         record.next_renewal < current_time ||
-         record.end_time < current_time ||
-         force_renew) {
-        ret = EDG_WLPR_PROXY_EXPIRED;
-        if (record.end_time >= current_time)
-           /* only try renewal if the proxy hasn't already expired */
-           ret = renew_proxy(&record, basename, &new_proxy);
-
-        /* if the proxy wasn't renewed have the daemon planned another renewal */
-        asprintf(&entry, "%d:%s", record.suffix, (ret == 0) ? new_proxy : "");
-        if (new_proxy) {
-           free(new_proxy); new_proxy = NULL;
-        }
-
-        tmp = realloc(request.entries, (num + 2) * sizeof(*tmp));
-        if (tmp == NULL) {
-           free_record(&record);
-           return;
-        }
-        request.entries = tmp;
-        request.entries[num] = entry;
-        request.entries[num+1] = NULL;
-        num++;
-      }
-   }
-   free_record(&record);
-
-   if (num > 0) {
-      ret = edg_wlpr_RequestSend(&request, &response);
-      if (ret != 0)
-        edg_wlpr_Log(LOG_ERR,
-                     "Failed to send update request to master (%d)", ret);
-      else if (response.response_code != 0)
-        edg_wlpr_Log(LOG_ERR,
-                     "Master failed to update database (%d)", response.response_code);
-
-      /* delete all tmp proxy files which may survive */
-      for (i = 0; i < num; i++) {
-        p = strchr(request.entries[i], ':');
-        if (p+1)
-           unlink(p+1);
-      }
-   }
-   fclose(meta_fd);
-
-   edg_wlpr_CleanResponse(&response);
-   edg_wlpr_CleanRequest(&request);
-
-   return;
-}
-
-int renewal(int force_renew)
-{
-   DIR *dir = NULL;
-   struct dirent *file;
-   FILE *fd;
-
-   edg_wlpr_Log(LOG_DEBUG, "Starting renewal process");
-
-   if (chdir(repository)) {
-      edg_wlpr_Log(LOG_ERR, "Cannot access repository directory %s (%s)",
-                  repository, strerror(errno));
-      return errno;
-   }
-
-   dir = opendir(repository);
-   if (dir == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Cannot open repository directory %s (%s)",
-                  repository, strerror(errno));
-      return errno;
-   }
-
-   while ((file = readdir(dir))) {
-      /* read files of format `md5sum`.data, where md5sum() is of fixed length
-        32 chars */
-      if (file->d_name == NULL || strlen(file->d_name) != 37 ||
-         strcmp(file->d_name + 32, ".data") != 0)
-        continue;
-      fd = fopen(file->d_name, "r");
-      if (fd == NULL) {
-        edg_wlpr_Log(LOG_ERR, "Cannot open meta file %s (%s)",
-                     file->d_name, strerror(errno));
-        continue;
-      }
-      check_renewal(file->d_name, force_renew);
-      fclose(fd);
-   }
-   closedir(dir);
-   edg_wlpr_Log(LOG_DEBUG, "Finishing renewal process");
-   return 0;
-}
-
-void
-watchdog_start(void)
-{
-   struct sigaction sa;
-   int force_renewal;
-   
-   memset(&sa,0,sizeof(sa));
-   sa.sa_handler = register_signal;
-   sigaction(SIGUSR1, &sa, NULL);
-
-   /* load_vomses(); */
-
-   while (1) {
-       received_signal = -1;
-       sleep(60 * 5);
-       force_renewal = (received_signal == SIGUSR1) ? 1 : 0;
-       /* XXX uninstall signal handler ? */
-       renewal(force_renewal);
-   }
-}
diff --git a/org.glite.security.proxyrenewal/src/renewal_locl.h b/org.glite.security.proxyrenewal/src/renewal_locl.h
deleted file mode 100644 (file)
index 45317e3..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-#ifndef RENEWAL_LOCL_H
-#define RENEWAL_LOCL_H
-
-#ident "$Header$"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <stdarg.h>
-#include <string.h>
-#include <time.h>
-#include <errno.h>
-#include <syslog.h>
-#include <linux/limits.h>
-#include <signal.h>
-#include <assert.h>
-#include <getopt.h>
-#include <dirent.h>
-#include <sys/un.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/file.h>
-#include <openssl/md5.h>
-#include <openssl/x509.h>
-#include <openssl/pem.h>
-#include <openssl/err.h>
-
-#include "renewal.h"
-
-#define JDL_MYPROXY "Myproxy_server="
-
-typedef enum {
-  EDG_WLPR_COMMAND_NONE = 0,
-  EDG_WLPR_COMMAND_REG = 1,
-  EDG_WLPR_COMMAND_UNREG,
-  EDG_WLPR_COMMAND_GET,
-  EDG_WLPR_COMMAND_LIST,
-  EDG_WLPR_COMMAND_STATUS,
-  EDG_WLPR_COMMAND_UPDATE_DB,
-} edg_wlpr_Command;
-
-/* prefix neni nutny */
-#define EDG_WLPR_PROTO_VERSION          "Version="
-#define EDG_WLPR_PROTO_COMMAND          "Command="
-#define EDG_WLPR_PROTO_MYPROXY_SERVER   "Myproxy_server="
-#define EDG_WLPR_PROTO_PROXY            "Proxy_name="
-#define EDG_WLPR_PROTO_UNIQUE_PROXY     "Unique=" /* XXX */
-#define EDG_WLPR_PROTO_JOBID            "Jobid="
-#define EDG_WLPR_PROTO_ENTRY            "Entry="
-
-#define EDG_WLPR_PROTO_RESPONSE         "Response=" /* XXX result ?? */
-#define EDG_WLPR_PROTO_START_TIME       "Start_time="
-#define EDG_WLPR_PROTO_END_TIME         "End_time="
-#define EDG_WLPR_PROTO_RENEWAL_TIME     "Renewal_time=" /* XXX Next renewal ?? */
-
-#define EDG_WLPR_MYPROXY_PORT 7512
-
-#define EDG_WLPR_REPOSITORY_ROOT "/var/spool/edg-wl-renewd"
-
-#define EDG_WLPR_BUF_SIZE 4096
-
-#define EDG_WLPR_VERSION "EDG Proxy Renewal 1.0"
-
-#define MAX_PROXIES 4 /* max. number of jobids sharing one proxy */
-
-typedef struct {
-  char *version;
-  edg_wlpr_Command command;
-  char *myproxy_server;
-  char *proxy_filename;
-  int unique; 
-  char *jobid;
-  char **entries; /* for updates from the renewal part (renew.c) */
-} edg_wlpr_Request;
-
-typedef struct {
-  char *version;
-  int response_code;
-  time_t start_time;
-  time_t end_time;
-  time_t next_renewal_time;
-  int counter;
-  char *myproxy_server;
-  char **filenames;
-} edg_wlpr_Response;
-
-#define DGPR_REG_SOCKET_NAME_ROOT "/tmp/dgpr_renew_"
-
-#if 0
-/* Errors: */
-/* XXX enum */
-#define EDG_WLPR_ERROR_EOF 1
-#define EDG_WLPR_ERROR_PARSE_NOT_FOUND 2
-#define EDG_WLPR_ERROR_PARSE_ERROR 3
-#define EDG_WLPR_ERROR_UNKNOWN_COMMAND 4
-#define EDG_WLPR_ERROR_NOTFOUND 5
-#endif
-
-int
-edg_wlpr_GetToken(const char *msg, const size_t msg_len,
-                  const char *key, const char *separators,
-                  int req_index, char **value);
-
-int
-edg_wlpr_StoreToken(char **buf, size_t *buf_len, char *command,
-                    char *value, const char *separator);
-
-int
-edg_wlpr_Read(int sock, char **buf, size_t *buf_len);
-
-int
-edg_wlpr_Write(int sock, char *buf, size_t buf_len);
-
-void
-edg_wlpr_CleanRequest(edg_wlpr_Request *request);
-
-void
-edg_wlpr_CleanResponse(edg_wlpr_Response *response);
-
-const char *
-edg_wlpr_GetErrorString(int err);
-
-char *
-edg_wlpr_EncodeInt(int num); /* long? time */
-
-int
-edg_wlpr_DecodeInt(char *str, int *num);
-
-int
-edg_wlpr_RequestSend(edg_wlpr_Request *request, edg_wlpr_Response *response);
-
-#endif /* RENEWAL_LOCL_H */
diff --git a/org.glite.security.proxyrenewal/src/renewd.c b/org.glite.security.proxyrenewal/src/renewd.c
deleted file mode 100644 (file)
index adebb09..0000000
+++ /dev/null
@@ -1,709 +0,0 @@
-#include "renewal_locl.h"
-#include "renewd_locl.h"
-
-static const char rcsid[] = "$Header$";
-
-#define SEPARATORS "\n"
-/* GRIDMANAGER_CHECKPROXY_INTERVAL + GRIDMANAGER_MINIMUM_PROXY_TIME */
-#define CONDOR_MINIMUM_PROXY_TIME (1800)
-
-int debug = 0;
-char *repository = NULL;
-time_t condor_limit = CONDOR_MINIMUM_PROXY_TIME;
-char *cadir = NULL;
-char *vomsdir = NULL;
-int voms_enabled = 0;
-
-char *vomsconf = "/opt/edg/etc/vomses";
-#ifndef NOVOMS
-struct vomses_records vomses;
-#endif
-
-static struct option opts[] = {
-   { "help",       no_argument,       NULL,  'h' },
-   { "version",    no_argument,       NULL,  'v' },
-   { "debug",      no_argument,       NULL,  'd' },
-   { "repository", required_argument, NULL,  'r' },
-   { "condor-limit", required_argument, NULL, 'c' }, 
-   { "CAdir",      required_argument, NULL,  'C' },
-   { "VOMSdir",    required_argument, NULL,  'V' },
-   { "enable-voms", no_argument,     NULL,  'A' },
-   { "voms-config", required_argument, NULL, 'G' },
-   { NULL, 0, NULL, 0 }
-};
-
-typedef struct {
-   edg_wlpr_Command code;
-   void (*handler) (edg_wlpr_Request *request, edg_wlpr_Response *response);
-} command_table;
-
-static command_table commands[] = {
-   { EDG_WLPR_COMMAND_REG,     register_proxy,     },
-   { EDG_WLPR_COMMAND_UNREG,   unregister_proxy,   },
-   { EDG_WLPR_COMMAND_GET,     get_proxy,          },
-#if 0
-   { EDG_WLPR_COMMAND_LIST,    list_proxies,       },
-   { EDG_WLPR_COMMAND_STATUS,  status_proxy,       },
-#endif
-   { EDG_WLPR_COMMAND_UPDATE_DB, update_db,        },
-   { 0, NULL },
-};
-
-/* static prototypes */
-static void
-usage(char *progname);
-
-static int
-do_listen(char *socket_name, int *sock);
-
-static int
-encode_response(edg_wlpr_Response *response, char **msg);
-
-static command_table *
-find_command(edg_wlpr_Command code);
-
-static int
-proto(int sock);
-
-static int
-doit(int sock);
-
-static int
-decode_request(const char *msg, const size_t msg_len, edg_wlpr_Request *request);
-
-static command_table *
-find_command(edg_wlpr_Command code)
-{
-   command_table *c;
-
-   for (c = commands; c->code; c++) {
-      if (c->code == code)
-          return c;
-   }
-   return NULL;
-}
-
-static int
-proto(int sock)
-{
-   char  *buf = NULL;
-   size_t  buf_len;
-   int  ret;
-   edg_wlpr_Response  response;
-   edg_wlpr_Request  request;
-   command_table  *command;
-
-   memset(&request, 0, sizeof(request));
-   memset(&response, 0, sizeof(response));
-
-   ret = edg_wlpr_Read(sock, &buf, &buf_len);
-   if (ret) {
-      edg_wlpr_Log(LOG_ERR, "Error reading from client: %s",
-                   edg_wlpr_GetErrorString(ret));
-      return ret;
-   }
-
-   ret = decode_request(buf, buf_len, &request);
-   free(buf);
-   if (ret)
-      goto end;
-
-   /* XXX check request (protocol version, ...) */
-
-   command = find_command(request.command);
-   if (command == NULL) {
-      ret = EDG_WLPR_ERROR_UNKNOWN_COMMAND;
-      edg_wlpr_Log(LOG_ERR, "Received unknown command (%d)", request.command);
-      goto end;
-   }
-
-   edg_wlpr_Log(LOG_INFO, "Received command code %d for proxy %s",
-                request.command,
-                request.proxy_filename ? request.proxy_filename : "(unspecified)");
-
-   command->handler(&request, &response);
-
-   ret = encode_response(&response, &buf);
-   if (ret)
-      goto end;
-
-   ret = edg_wlpr_Write(sock, buf, strlen(buf) + 1);
-   free(buf);
-   if (ret) {
-      edg_wlpr_Log(LOG_ERR, "Error sending response to client: %s",
-                   edg_wlpr_GetErrorString(ret));
-      goto end;
-   }
-
-end:
-   edg_wlpr_CleanRequest(&request);
-   edg_wlpr_CleanResponse(&response);
-
-   return ret;
-}
-
-static int
-doit(int sock)
-{
-   int newsock;
-   struct sockaddr_un client_addr;
-   int client_addr_len = sizeof(client_addr);
-#if 0
-   next_renewal = LONG_MAX;
-   size_of_proxies = PROXIES_ALLOC_SIZE;
-   proxies = malloc((size_of_proxies) * sizeof(struct guarded_proxy *));
-   if (proxies == NULL) {
-       return ENOMEM;
-   }
-   proxies[0] = NULL;
-#endif
-
-#if 0
-   sigemptyset(&sset);
-   sigaddset(&sset,SIGTERM);
-   sigaddset(&sset,SIGINT);
-   sigaddset(&sset, SIGKILL);
-   sigaddset(&sset, SIGUSR1);
-   sigaddset(&sset, SIGALRM);
-   sigprocmask(SIG_BLOCK,&sset,NULL);
-#endif
-
-   while (1) {
-#if 0
-      sigprocmask(SIG_UNBLOCK,&sset,NULL);
-      newsock = accept(sock, (struct sockaddr *) &client_addr, &client_addr_len);
-      sigprocmask(SIG_BLOCK,&sset,NULL);
-
-      if (newsock == -1) {
-         if (errno == EINTR) /* ERESTARTSYS */
-             proxy_renewal(received_signal);
-         else
-            log();
-         continue;
-      }
-#else
-      newsock = accept(sock, (struct sockaddr *) &client_addr, &client_addr_len);
-      if (newsock == -1) {
-         edg_wlpr_Log(LOG_ERR, "accept() failed");
-         continue;
-      }
-      edg_wlpr_Log(LOG_DEBUG, "Got connection");
-
-#endif
-
-      proto(newsock);
-
-      edg_wlpr_Log(LOG_DEBUG, "Connection closed");
-      close(newsock);
-   }
-}
-
-static int
-decode_request(const char *msg, const size_t msg_len, edg_wlpr_Request *request)
-{
-   char *value = NULL;
-#if 0
-   char *p;
-   int port;
-#endif
-   int ret;
-   int index;
-   
-   /* XXX add an ending zero '\0' */
-
-   assert(msg != NULL);
-   assert(request != NULL);
-   
-   memset(request, 0, sizeof(*request));
-
-   ret = edg_wlpr_GetToken(msg, msg_len, EDG_WLPR_PROTO_VERSION, SEPARATORS,
-                          0, &request->version);
-   if (ret) {
-      edg_wlpr_Log(LOG_ERR, "Protocol error reading protocol specification: %s",
-                   edg_wlpr_GetErrorString(ret));
-      return ret;
-   }
-   
-   ret = edg_wlpr_GetToken(msg, msg_len, EDG_WLPR_PROTO_COMMAND, SEPARATORS,
-                          0, &value);
-   if (ret) {
-      edg_wlpr_Log(LOG_ERR, "Protocol error reading command specification: %s",
-                   edg_wlpr_GetErrorString(ret));
-      goto err;
-   }
-
-   ret = edg_wlpr_DecodeInt(value, (int *)(&request->command));
-   if (ret) {
-      edg_wlpr_Log(LOG_ERR, "Received non-numeric command specification (%s)",
-                   value);
-      free(value);
-      goto err;
-   }
-   free(value);
-
-   if (find_command(request->command) == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Received unknown command (%d)", request->command);
-      ret = EDG_WLPR_ERROR_UNKNOWN_COMMAND;
-      goto err;
-   }
-
-   ret = edg_wlpr_GetToken(msg, msg_len, EDG_WLPR_PROTO_MYPROXY_SERVER,
-                          SEPARATORS, 0, &request->myproxy_server);
-   if (ret && ret != EDG_WLPR_ERROR_PROTO_PARSE_NOT_FOUND) {
-      edg_wlpr_Log(LOG_ERR, "Protocol error reading myproxy server specification: %s",
-                   edg_wlpr_GetErrorString(ret));
-      goto err;
-   }
-
-#if 0
-   request->myproxy_port = EDG_WLPR_MYPROXY_PORT; /* ??? */
-   if (request->myproxy_server && (p = strchr(request->myproxy_server, ':'))) {
-      *p = '\0';
-      port = atol(p+1); /* XXX see myproxy for err check */
-      request->myproxy_port = port;
-   }
-#endif
-
-   ret = edg_wlpr_GetToken(msg, msg_len, EDG_WLPR_PROTO_PROXY, SEPARATORS, 
-                          0, &request->proxy_filename);
-   if (ret && ret != EDG_WLPR_ERROR_PROTO_PARSE_NOT_FOUND) {
-      edg_wlpr_Log(LOG_ERR, "Protocol error reading proxy specification: %s",
-                   edg_wlpr_GetErrorString(ret));
-      goto err;
-   }
-
-#if 0
-   ret = edg_wlpr_GetToken(msg, msg_len, EDG_WLPR_PROTO_UNIQUE_PROXY, 
-                          SEPARATORS, 0, &value);
-   if (ret && ret != EDG_WLPR_ERROR_PARSE_NOT_FOUND)
-      goto err;
-   if (ret == 0 && strcasecmp(value, "yes") == 0)
-      request->unique = 1;
-   free(value);
-#endif
-
-   ret = edg_wlpr_GetToken(msg, msg_len, EDG_WLPR_PROTO_JOBID, SEPARATORS,
-                          0, &request->jobid);
-   if (ret && ret != EDG_WLPR_ERROR_PROTO_PARSE_NOT_FOUND) {
-      edg_wlpr_Log(LOG_ERR, "Protocol error reading JobId : %s",
-                  edg_wlpr_GetErrorString(ret));
-      goto err;
-   }
-
-   index = 0;
-   while ((ret = edg_wlpr_GetToken(msg, msg_len, EDG_WLPR_PROTO_ENTRY,
-                                  SEPARATORS, index, &value)) == 0) {
-      char **tmp;
-
-      tmp = realloc(request->entries, (index + 2) * sizeof(*tmp));
-      if (tmp == NULL) {
-        ret = ENOMEM;
-        goto err;
-      }
-      request->entries = tmp;
-      request->entries[index] = value;
-      index++;
-   }
-   if (ret != EDG_WLPR_ERROR_PROTO_PARSE_NOT_FOUND)
-      goto err;
-   if (request->entries)
-      request->entries[index] = NULL;
-
-   return 0;
-
-err:
-   edg_wlpr_CleanRequest(request);
-   return ret;
-}
-
-static int
-encode_response(edg_wlpr_Response *response, char **msg)
-{
-   char *buf;
-   size_t buf_len;
-   int ret;
-
-   buf_len = EDG_WLPR_BUF_SIZE;
-   buf = malloc(buf_len);
-   if (buf == NULL)
-      return ENOMEM;
-   buf[0] = '\0';
-
-   ret = edg_wlpr_StoreToken(&buf, &buf_len, EDG_WLPR_PROTO_VERSION,
-                            EDG_WLPR_VERSION, SEPARATORS);
-   if (ret)
-      goto err;
-
-   ret = edg_wlpr_StoreToken(&buf, &buf_len, EDG_WLPR_PROTO_RESPONSE,
-                             edg_wlpr_EncodeInt(response->response_code),
-                            SEPARATORS);
-   if (ret)
-      goto err;
-
-   if (response->myproxy_server) {
-      char host[1024];
-
-#if 0
-      snprintf(host, sizeof(host), "%s:%d", response->myproxy_server,
-               (response->myproxy_port) ? response->myproxy_port : EDG_WLPR_MYPROXY_PORT);
-#endif
-      ret = edg_wlpr_StoreToken(&buf, &buf_len, EDG_WLPR_PROTO_MYPROXY_SERVER,
-                                host, SEPARATORS);
-      if (ret)
-         goto err;
-   }
-
-   if (response->start_time) {
-      ret = edg_wlpr_StoreToken(&buf, &buf_len, EDG_WLPR_PROTO_START_TIME,
-                                edg_wlpr_EncodeInt(response->start_time),
-                               SEPARATORS);
-      if (ret)
-         goto err;
-   }
-
-   if (response->end_time) {
-      ret = edg_wlpr_StoreToken(&buf, &buf_len, EDG_WLPR_PROTO_END_TIME,
-                                edg_wlpr_EncodeInt(response->end_time),
-                               SEPARATORS);
-      if (ret)
-         goto err;
-   }
-
-   if (response->next_renewal_time) {
-      ret = edg_wlpr_StoreToken(&buf, &buf_len, EDG_WLPR_PROTO_RENEWAL_TIME,
-                                edg_wlpr_EncodeInt(response->next_renewal_time),
-                               SEPARATORS);
-      if (ret)
-         goto err;
-   }
-
-   if (response->filenames) {
-      char **p = response->filenames;
-      while (*p) {
-         ret = edg_wlpr_StoreToken(&buf, &buf_len, EDG_WLPR_PROTO_PROXY, *p,
-                                  SEPARATORS);
-         if (ret)
-            goto err;
-         p++;
-      }
-   }
-
-   buf[strlen(buf)] = '\0';
-   *msg = buf;
-   return 0;
-
-err:
-   free(buf);
-   *msg = NULL;
-   return ret;
-}
-
-
-static void
-usage(char *progname)
-{
-   fprintf(stderr,"usage: %s [option]\n"
-          "\t-h, --help           display this help and exit\n"
-          "\t-v, --version        output version information and exit\n"
-          "\t-d, --debug          don't fork, print out debugging information\n"
-          "\t-r, --repository     repository directory\n"
-          "\t-c, --condor-limit   how long before expiration the proxy must be renewed\n"
-          "\t-C, --CAdir          trusted certificates directory\n"
-          "\t-V, --VOMSdir        trusted VOMS servers certificates directory\n"
-          "\t-A, --enable-voms    renew also VOMS certificates in proxies\n"
-          "\t-G, --voms-config    location of the vomses configuration file\n",
-          progname);
-}
-
-static int
-do_listen(char *socket_name, int *sock)
-{
-   struct sockaddr_un my_addr;
-   int s;
-   int ret;
-
-   assert(sock != NULL);
-
-   memset(&my_addr, 0, sizeof(my_addr));
-   my_addr.sun_family = AF_UNIX;
-   strncpy(my_addr.sun_path, socket_name, sizeof(my_addr.sun_path));
-   unlink(socket_name);
-   umask(0177);
-
-   s = socket(AF_UNIX, SOCK_STREAM, 0);
-   if (s == -1) {
-      edg_wlpr_Log(LOG_ERR, "socket(): %s", strerror(errno));
-      return errno;
-   }
-
-   ret = bind(s, (struct sockaddr *)&my_addr, sizeof(my_addr));
-   if (ret == -1) {
-      edg_wlpr_Log(LOG_ERR, "bind(): %s", strerror(errno));
-      close(s);
-      return errno;
-   }
-
-   ret = listen(s, 5); /* XXX enough ? */
-   if (ret == -1) {
-      edg_wlpr_Log(LOG_ERR, "listen(): %s", strerror(errno));
-      close(s);
-      return errno;
-   }
-
-   *sock = s;
-   return 0;
-}
-
-void
-edg_wlpr_Log(int dbg_level, const char *format, ...)
-{
-   va_list ap;
-   char    log_mess[1024];
-
-   /* cannot handle the %m format argument specific for syslog() */
-   va_start(ap, format);
-   vsnprintf(log_mess, sizeof(log_mess), format, ap);
-   va_end(ap);
-   
-   if (debug)
-      printf("[%d] %s\n", getpid(), log_mess);
-   else
-      if (dbg_level < LOG_DEBUG) /* XXX make configurable */
-         syslog(dbg_level, "%s", log_mess);
-}
-
-int
-start_watchdog(pid_t *pid)
-{
-   pid_t p;
-
-   switch ((p = fork())) {
-      case -1:
-        edg_wlpr_Log(LOG_ERR, "fork() failed: %s",
-                     strerror(errno));
-        return errno;
-      case 0:
-        watchdog_start();
-        exit(0); 
-        break;
-      default:
-        *pid = p;
-        return 0;
-   }
-   /* not reachable */
-   exit(0);
-}
-
-#ifdef NOVOMS
-static int
-load_vomses()
-{
-       return ENOSYS;
-}
-
-#else
-static int
-load_vomses()
-{
-   FILE *fd = NULL;
-   char line[1024];
-   char *nick, *hostname;
-   int port;
-   vomses_record *rec;
-   vomses_record **tmp;
-   char *p;
-   
-   fd = fopen(vomsconf, "r");
-   if (fd == NULL) {
-      edg_wlpr_Log(LOG_ERR, "Cannot open vomses configuration file (%s)",
-                  strerror(errno));
-      return errno;
-   }
-   while (fgets(line, sizeof(line), fd) != NULL) {
-      p = line;
-      if (*p != '"') {
-        edg_wlpr_Log(LOG_ERR, "Parsing error when reading vomses configuration file");
-        return EINVAL;
-      }
-      nick = strdup(strtok(p+1, "\""));
-
-      p = strtok(NULL, "\"");
-      hostname = strdup(strtok(NULL, "\""));
-
-      p = strtok(NULL, "\"");
-      port = atoi(strdup(strtok(NULL, "\"")));
-
-      if (nick == NULL || hostname == NULL) {
-        edg_wlpr_Log(LOG_ERR, "Parsing error when reading vomses configuration file");
-        return EINVAL;
-      }
-
-      rec = calloc(1, sizeof(*rec));
-      if (rec == NULL) {
-        edg_wlpr_Log(LOG_ERR, "Not enough memory");
-        return ENOMEM;
-      }
-      rec->nick = nick;
-      rec->hostname = hostname;
-      rec->port = port;
-
-      tmp = realloc(vomses.val, vomses.len + 1);
-      if (tmp == NULL) {
-        edg_wlpr_Log(LOG_ERR, "Not enough memory");
-        return ENOMEM;
-      }
-      vomses.val = tmp;
-      vomses.len++;
-
-      vomses.val[vomses.len-1] = rec;
-   }
-   fclose(fd);
-   return 0;
-}
-#endif
-
-int main(int argc, char *argv[])
-{
-   int   sock;
-   char  *progname;
-   int   opt;
-   int   fd;
-   char  sockname[PATH_MAX];
-   int   ret;
-   pid_t pid;
-
-   progname = strrchr(argv[0],'/');
-   if (progname) progname++; 
-   else progname = argv[0];
-
-   repository = EDG_WLPR_REPOSITORY_ROOT;
-   debug = 0;
-
-   while ((opt = getopt_long(argc, argv, "hvdr:c:C:V:AG:", opts, NULL)) != EOF)
-      switch (opt) {
-        case 'h': usage(progname); exit(0);
-        case 'v': fprintf(stdout, "%s:\t%s\n", progname, rcsid); exit(0);
-        case 'd': debug = 1; break;
-         case 'r': repository = optarg; break;
-        case 'c': condor_limit = atoi(optarg); break;
-        case 'C': cadir = optarg; break;
-        case 'V': vomsdir = optarg; break;
-        case 'A': voms_enabled = 1; break;
-        case 'G': vomsconf = optarg; break;
-        case '?': usage(progname); return 1;
-      }
-
-   if (optind < argc) {
-      usage(progname);
-      exit(1);
-   }
-
-   if (chdir(repository)) {
-      edg_wlpr_Log(LOG_ERR, "Cannot access repository directory %s (%s)",
-                  repository, strerror(errno));
-      exit(1);
-   }
-
-   globus_module_activate(GLOBUS_GSI_CERT_UTILS_MODULE);
-
-   if (!debug)
-      for (fd = 3; fd < OPEN_MAX; fd++) close(fd);
-
-   if (!debug) {
-      /* chdir ? */
-      if (daemon(1,0) == -1) {
-        perror("deamon()");
-        exit(1);
-      }
-      openlog(progname, LOG_PID, LOG_DAEMON);
-   }
-
-   if (voms_enabled) {
-      char *path;
-      char *new_path;
-      ret = load_vomses();
-      if (ret)
-        return 1;
-      setenv("GLOBUS_VERSION", "22", 0);
-      if (VOMS_INSTALL_PATH != NULL && *VOMS_INSTALL_PATH != '\0') {
-        path = getenv("PATH");
-        asprintf(&new_path, "%s:%s/bin", path, VOMS_INSTALL_PATH);
-         setenv("PATH", new_path, 1);
-      }
-   }
-   
-   ret = start_watchdog(&pid);
-   if (ret)
-      return 1;
-  
-   umask(0177);
-   snprintf(sockname, sizeof(sockname), "%s%d",
-           DGPR_REG_SOCKET_NAME_ROOT, getuid());
-   /* XXX check that the socket is not already active */
-   ret = do_listen(sockname, &sock);
-   if (ret)
-      return 1;
-   edg_wlpr_Log(LOG_DEBUG, "Listening at %s", sockname);
-
-#if 0
-   /* XXX ??? */
-   install_handlers();
-#endif
-   
-
-#if 0
-   /* XXX this overrides setings done by install_handlers()? */
-   signal(SIGTERM, cleanup);
-   signal(SIGINT, cleanup);
-   signal(SIGKILL, cleanup);
-   signal(SIGPIPE, SIG_IGN);
-
-   atexit(cleanup);
-#endif
-
-   ret = doit(sock);
-
-   close(sock);
-   return ret;
-}
-
-int
-get_proxy_base_name(char *file, char **name)
-{
-   X509 *cert = NULL;
-   EVP_PKEY *key = NULL;
-   STACK_OF(X509) *chain = NULL;
-   X509_NAME *subject = NULL;
-   int ret;
-
-   ret = load_proxy(file, &cert, &key, &chain);
-   if (ret)
-      return ret;
-
-   subject = X509_NAME_dup(X509_get_subject_name(cert));
-
-   sk_X509_insert(chain, cert, 0);
-   cert = NULL;
-
-   ret = globus_gsi_cert_utils_get_base_name(subject, chain);
-   if (ret) {
-      edg_wlpr_Log(LOG_ERR, "Cannot get subject name from proxy %s", file);
-      ret = EDG_WLPR_ERROR_SSL; /* XXX ??? */
-      goto end;
-   }
-
-   *name = X509_NAME_oneline(subject, NULL, 0);
-   ret = 0;
-
-end:
-   if (cert)
-      X509_free(cert);
-   if (key)
-      EVP_PKEY_free(key);
-   if (chain)
-      sk_X509_pop_free(chain, X509_free);
-   if (subject)
-      X509_NAME_free(subject);
-
-   return ret;
-}
diff --git a/org.glite.security.proxyrenewal/src/renewd_locl.h b/org.glite.security.proxyrenewal/src/renewd_locl.h
deleted file mode 100644 (file)
index 426c2ee..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-#ifndef RENEWALD_LOCL_H
-#define RENEWALD_LOCL_H
-
-#ident "$Header$"
-
-#include <myproxy.h>
-#include <myproxy_delegation.h>
-#include <globus_gsi_cert_utils.h>
-
-#include "renewal.h"
-
-#ifdef HAVE_DMALLOC_H
-#include <dmalloc.h>
-#endif
-
-/* XXX */
-#if 0
-#define EDG_WLPR_ERROR_PARSE_NOT_FOUND EDG_WLPR_ERROR_PROTO_PARSE_ERROR
-#define EDG_WLPR_ERROR_NOTFOUND        EDG_WLPR_PROXY_NOT_REGISTERED
-#endif
-
-typedef struct {
-   unsigned int len;
-   char **val;
-} prd_list;
-
-typedef struct {
-   int suffix;
-   prd_list jobids;
-   int unique;
-   int voms_exts;
-   char *myproxy_server;
-   time_t end_time;
-   time_t next_renewal;
-} proxy_record;
-
-typedef struct vomses_record {
-   char *nick;
-   char *hostname;
-   int port;
-} vomses_record;
-
-typedef struct vomses_records {
-   unsigned int len;
-   struct vomses_record **val;
-} vomses_records;
-
-/* commands */
-void
-register_proxy(edg_wlpr_Request *request, edg_wlpr_Response *response);
-
-void
-unregister_proxy(edg_wlpr_Request *request, edg_wlpr_Response *response);
-
-void
-get_proxy(edg_wlpr_Request *request, edg_wlpr_Response *response);
-
-void
-update_db(edg_wlpr_Request *request, edg_wlpr_Response *response);
-
-int
-get_times(char *proxy_file, proxy_record *record);
-
-void
-watchdog_start(void);
-
-void
-edg_wlpr_Log(int dbg_level, const char *format, ...);
-
-int
-decode_record(char *line, proxy_record *record);
-
-int
-encode_record(proxy_record *record, char **line);
-
-void
-free_record(proxy_record *record);
-
-int
-load_proxy(const char *filename, X509 **cert, EVP_PKEY **privkey,
-           STACK_OF(X509) **chain);
-
-int
-get_proxy_base_name(char *file, char **subject);
-
-#endif /* RENEWALD_LOCL_H */
diff --git a/org.glite.wms-utils.exception/.cvsignore b/org.glite.wms-utils.exception/.cvsignore
deleted file mode 100644 (file)
index e970233..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.project
\ No newline at end of file
diff --git a/org.glite.wms-utils.exception/LICENSE b/org.glite.wms-utils.exception/LICENSE
deleted file mode 100755 (executable)
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.wms-utils.exception/Makefile.am b/org.glite.wms-utils.exception/Makefile.am
deleted file mode 100755 (executable)
index b66c2bb..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-## *********************************************************************
-## *
-## * Copyright (c) 2002 CERN and INFN on behalf of the EU DataGrid.
-## * For license conditions see LICENSE file or
-## * http://www.edg.org/license.html
-## *
-## *********************************************************************
-
-## Process this file with automake to produce Makefile.in
-EXTRA_DIST = LICENSE
-docdir = $(datadir)/doc/@PACKAGE@-@VERSION@
-doc_DATA = LICENSE
-## Subdirectories list
-SUBDIRS = interface src 
-
-## Default flags to run aclocal
-ACLOCAL_AMFLAGS = -I project
-
-stage:
-       @set fnord $(MAKEFLAGS); amf=$$2; \
-       dot_seen=no; \
-        target="install"; \
-       prefix_arg="@prefix@"; \
-        list='$(SUBDIRS)'; for subdir in $$list; do \
-          echo "Making $$target $$prefix_arg in $$subdir"; \
-          if test "$$subdir" = "."; then \
-            dot_seen=yes; \
-            local_target="$$target-am"; \
-          else \
-            local_target="$$target"; \
-          fi; \
-          (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target $$prefix_arg) \
-           || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
-        done; \
-        if test "$$dot_seen" = "no"; then \
-          $(MAKE) $(AM_MAKEFLAGS) "$$target-am" $$prefix_arg || exit 1; \
-        fi; test -z "$$fail"
-
-distsrc: dist
-       mv $(distdir).tar.gz $(DISTTAR)/$(distdir)_src.tar.gz
-
-distbin:
-       @set fnord $(MAKEFLAGS); amf=$$2; \
-        dot_seen=no; \
-        target="install"; \
-       tmpdistbin="$(WORKDIR)/dist_bin"; \
-        prefix_arg="prefix=$$tmpdistbin"; \
-        list='$(SUBDIRS)'; for subdir in $$list; do \
-          echo "Making $$target $$prefix_arg in $$subdir"; \
-          if test "$$subdir" = "."; then \
-            dot_seen=yes; \
-            local_target="$$target-am"; \
-          else \
-            local_target="$$target"; \
-          fi; \
-          (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target $$prefix_arg) \
-           || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
-        done; \
-        if test "$$dot_seen" = "no"; then \
-          $(MAKE) $(AM_MAKEFLAGS) "$$target-am" $$prefix_arg || exit 1; \
-        fi; test -z "$$fail"; \
-       pushd $$tmpdistbin; \
-       $(AMTAR) -zcf $(DISTTAR)/$(distdir)_bin.tar.gz .; \
-       popd; \
-       rm -rf $$tmpdistbin
-       
diff --git a/org.glite.wms-utils.exception/bootstrap b/org.glite.wms-utils.exception/bootstrap
deleted file mode 100755 (executable)
index ceeb099..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#! /bin/sh
-
-mkdir -p src/autogen
-set -x
-aclocal -I project
-libtoolize --force
-autoheader
-automake --foreign --add-missing --copy
-autoconf
diff --git a/org.glite.wms-utils.exception/build.xml b/org.glite.wms-utils.exception/build.xml
deleted file mode 100755 (executable)
index 4061536..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Build file for the GLite WMS jobid module
-       
-       Authors: Alberto Di Meglio <alberto.di.meglio@cern.ch>
-                  Joachim Flammer <Joachim.Flammer@cern.ch>            
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-
--->
-
-<project name="exception" default="dist">
-       
-       <!-- =========================================
-                Builds the GLite WMS Utils Exception 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-make.file}" />
-               
-       <!-- =========================================
-                Load version file 
-            ========================================= -->
-       <property file="${module.version.file}"/>
-               
-       <!-- ==============================================
-                Local private targets
-            ============================================== -->
-       
-       <target name="localinit"
-               description="Module specific initialization tasks">
-       </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.wms-utils.exception/configure.ac b/org.glite.wms-utils.exception/configure.ac
deleted file mode 100755 (executable)
index 30f379f..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-#
-#       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), Finland
-#       University of Bergen (UiB), Norway
-#       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-#
-#       Common configure.ac file for the GLite WMS Common module
-#
-#       Authors: Alberto Di Meglio <alberto.di.meglio@cern.ch>
-#       Version info: $Id$
-#       Release: $Name$
-#
-#       Revision history:
-#       $Log$
-#       Revision 1.9  2004/11/16 15:31:13  eronchie
-#       Increased version
-#
-#       Revision 1.8  2004/09/22 00:25:17  glbuild
-#       Fixed missing parenthesis
-#
-#       Revision 1.7  2004/09/21 19:21:57  glbuild
-#       modified module.version
-#
-#       Revision 1.6  2004/08/17 10:41:47  eronchie
-#       Added optimize option
-#
-#       Revision 1.5  2004/07/23 08:02:09  eronchie
-#       Updated configure.ac
-#
-#       Revision 1.4  2004/07/21 18:49:26  eronchie
-#       Added AC_GLITE
-#
-#       Revision 1.3  2004/07/21 18:47:49  eronchie
-#       Removed obsolete things
-#
-#       Revision 1.2  2004/07/21 18:44:22  eronchie
-#       Updated header file
-#
-#       Revision 1.1.1.1  2004/07/21 18:16:57  eronchie
-#       Moved out exception from org.glite.wms.common/src/utilitiesY
-#
-#
-#
-                                                                                                                                                             
-# Process this file with autoconf to produce a configure script.
-
-AC_PREREQ(2.57)
-AC_INIT([GLite WMS Utils Exception], [1.0.0])
-AC_CONFIG_AUX_DIR([./project])
-AM_INIT_AUTOMAKE([1.6.3 subdir-objects])
-AC_CONFIG_SRCDIR([src/Exception.cpp])
-
-# Notices.
-AC_COPYRIGHT([Copyright (c) 2004 The EU EGEE Project
-See LICENCE file for details
-])
-AC_REVISION([$Revision$])
-
-#Environment.
-WORKDIR=`pwd`
-AC_SUBST(WORKDIR)
-
-# Checks for programs.
-AC_PROG_CC
-AC_PROG_CPP
-AC_PROG_CXX
-AC_PROG_CXXCPP
-AM_PROG_CC_C_O
-AC_PROG_LIBTOOL
-
-# Checks for libraries.
-
-# Checks for header files.
-AC_CHECK_HEADERS([fcntl.h mntent.h sys/vfs.h syslog.h unistd.h])
-
-# Checks for typedefs, structures, and compiler characteristics.
-AC_HEADER_STDBOOL
-AC_C_CONST
-AC_C_INLINE
-AC_TYPE_OFF_T
-AC_TYPE_SIZE_T
-AC_CHECK_MEMBERS([struct stat.st_rdev])
-AC_TYPE_UID_T
-AC_CHECK_TYPES([ptrdiff_t])
-
-# Checks for library functions.
-AC_HEADER_STDC
-AC_FUNC_ERROR_AT_LINE
-AC_FUNC_GETMNTENT
-AC_FUNC_MEMCMP
-AC_FUNC_STAT
-AC_FUNC_STRFTIME
-AC_FUNC_VPRINTF
-AC_CHECK_FUNCS([bzero endpwent ftruncate getmntent memset mkdir pow strerror strtol])
-
-AC_GLITE
-
-AC_OPTIMIZE
-
-# Configuration items
-AC_PREFIX_DEFAULT([/opt/glite])
-AM_CONFIG_HEADER([src/autogen/config.h])
-AC_CONFIG_FILES([Makefile])
-AC_CONFIG_FILES([src/Makefile])
-AC_CONFIG_FILES([interface/Makefile])
-
-AC_OUTPUT
-
diff --git a/org.glite.wms-utils.exception/interface/Makefile.am b/org.glite.wms-utils.exception/interface/Makefile.am
deleted file mode 100755 (executable)
index 3c4ccb7..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-## *********************************************************************
-## *
-## * Copyright (c) 2002 CERN and INFN on behalf of the EU DataGrid.
-## * For license conditions see LICENSE file or
-## * http://www.edg.org/license.html
-## *
-## *********************************************************************
-
-exceptiondir = $(includedir)
-nobase_exception_HEADERS = \
-       glite/wmsutils/exception/exception_codes.h \
-       glite/wmsutils/exception/Exception.h
-
-MAINTAINERCLEANFILES = Makefile.in
diff --git a/org.glite.wms-utils.exception/interface/glite/wmsutils/exception/Exception.h b/org.glite.wms-utils.exception/interface/glite/wmsutils/exception/Exception.h
deleted file mode 100644 (file)
index 7ba0fda..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-#ifndef  GLITE_WMS_UTILS_EXCEPTION_EXCEPTION_H
-#define GLITE_WMS_UTILS_EXCEPTION_EXCEPTION_H
-
-/*
- * Exception.h
- * Copyright (c) 2001 The European Datagrid Project - IST programme, all rights reserved.
- * Contributors are mentioned in the code where appropriate.
- */
-
-#include <fstream>
-#include <cstdlib>
-//#include <list>
-#include <syslog.h>  // For logging exceptions to log file
-#include <errno.h> // list the exception codes
-#include <string>
-#include <vector>
-#include <exception> // base ancestor stl::exception
-
-
-namespace glite {
-       namespace wmsutils {
-               namespace exception {
-
-extern pthread_mutex_t METHOD_MUTEX; //  used in order to store info into a file (rather then syslog)
-#define GLITE_STACK_TRY(method_name) std::string METHOD = method_name ;  int LINE = __LINE__ ; try {
-#define GLITE_STACK_CATCH() } catch (glite::wmsutils::exception::Exception &exc){ exc.push_back ( __FILE__ , LINE,  METHOD ); throw exc ;  }
-
-/**
- * The Exception base classe contains attributes into which are placed exception information and provides
- * constructor that beyond the error code take parameters specifying the source file and line number
- * (e.g. through __FILE__ and __LINE__) where the error has been generated and string messages,
- * allowing an easy way of storing the origin of the exception.
- * Moreover it provides methods for getting all the exception information and for logging them either
- * in a log file or to the syslog daemon.
- * Each of the derived types may contain its private attributes describing the actual error instance in detail.
- * Moreover each exception has an attribute representing the exception identifier that is set by the
- * class constructor and allows the identification of the original exception.
- *
- * @version 0.1
- * @date 22 July 2004
- * @author Alessandro Maraschini <alessandro.maraschini@datamat.it>
-*/
-
-class Exception : public std::exception{
-   public:
-       /**
-       *  Constructor Update all mandatory fields
-       * @param method the name of the method that raised the exception
-       * @param source The source that raised the exception (could be the file path, the class Name, etc etc)
-       * @param  exc the previous exception as in the stack trace */
-       Exception (  const std::string& source,  const std::string& method,  Exception *exc);
-       /**
-       *  Constructor Update all mandatory fields
-       * @param code the code representing the thrown exception
-       * @param exception the name of the thrown exception
-       * @param method the name of the method that raised the exception
-       * @param source The source that raised the exception (could be the file path, the class Name, etc etc)
-       * @param line_number the number of the line in the file that raised the exception(if the source has been given as a file)  */
-       Exception ( const std::string& source, const std::string& method,  int code,  const std::string& exception);
-
-       /**
-       *  Constructor Update all mandatory fields
-       * @param source the path of the file that raised the exception
-       * @param line_number the number of the line in the file that raised the exception
-       * @param method the name of the method that raised the exception
-       * @param code the code representing the thrown exception
-       * @param exception the name of the thrown exception */
-       Exception (const std::string& source,  int line_number,   const std::string& method,  int code,  const std::string& exception);
-       /**
-       * Default Destructor
-       */
-       virtual ~Exception() throw ();
-       /**
-       *  Return a string debug message containing information about Exception thrown
-       * Debug message contains all the attributes stored in an exception instance such as the method, the file and the line
-       * that threw the exception.
-       *@return the debug message string representation
-       */
-       virtual std::string dbgMessage();
-       /**
-       *  Return the error code
-       * @return The integer representing the code of the error that generated the exception
-       */
-       virtual int getCode();
-
-       /**
-       * return the Error Message associated to the Exception
-       * @return The Exception string message representation
-       */
-       virtual const char* what() const  throw ();
-
-       /**
-       *  Print Exception error information into a log file
-       * @param logfile the file where to log exception information
-       */
-       virtual void log(const std::string& logfile = "");
-       /**
-       *   Retrieve the Exception name
-       * @return the name of the Exception thrown
-       */
-       virtual std::string getExceptionName();
-
-       /**
-       *   Retrieve the Stack of the exception as a list of previous generated exceptions
-       *@return the string representation of the stack trace: each line correspond to an exception message
-       */
-       virtual std::string printStackTrace() ;
-       /**
-       *   Return the list of methods that caused the Exception
-       */
-       virtual std::vector<std::string> getStackTrace() ;
-       /**
-       * Update stack information
-       */
-       virtual void push_back (  const std::string& source, int line_number,  const std::string& method   ) ;
-  protected:
-               Exception();
-               int                   error_code;
-               std::string          error_message ;
-               int                   line;
-               std::string          source_file;
-               std::string          exception_name;
-               std::string          method_name ;
-               std::string          stack;
-               std::vector< std::string> stack_strings ;
-               std::string          ancestor ;
-}; //End  Exception Class
-}}}  // Closing namespace
-#endif
diff --git a/org.glite.wms-utils.exception/interface/glite/wmsutils/exception/exception_codes.h b/org.glite.wms-utils.exception/interface/glite/wmsutils/exception/exception_codes.h
deleted file mode 100755 (executable)
index fce99aa..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef   GLITE_WMSUTILS_EXCEPTION_CODES_H
-#define  GLITE_WMSUTILS_EXCEPTION_CODES_H
-// pure C-style code (needed by some libraries)
-#define GLITE_WMS_COMMON_ERROR_BASE 900
-#define GLITE_WMS_USERINTERFACE_ERROR_BASE 1000
-#define GLITE_WMS_NETWORKSERVER_ERROR_BASE 1200
-#define GLITE_WMS_SOCKET_ERROR_BASE 1300
-#define GLITE_WMS_LDAP_ERROR_BASE 1350
-#define GLITE_WMS_LOGGING_ERROR_BASE 1400
-#define GLITE_WMS_REQUESTAD_ERROR_BASE 1500
-#define GLITE_WMS_CHECKPOINT_ERROR_BASE 1600
-#define GLITE_WMS_CONFIGURATION_ERROR_BASE 1800
-#ifdef __cplusplus
-namespace glite { 
-namespace wmsutils { 
-namespace exception {
-       /**
-       * The Error Code
-       */
-       enum {
-                       WMS_COMMON_BASE = GLITE_WMS_COMMON_ERROR_BASE,
-                       THREAD_INIT  ,          // pthread_attr_init              method failed
-                       THREAD_DETACH ,         // pthread_attr_setdetachstate    method failed
-                       THREAD_CREATE ,         // pthread_create                 method failed
-                       THREAD_JOIN,
-                       THREAD_SSL,
-                       WMS_FATAL_ERROR,
-                       WMS_UI_ERROR_BASE            = GLITE_WMS_USERINTERFACE_ERROR_BASE,
-                       WMS_NS_ERROR_BASE            = GLITE_WMS_NETWORKSERVER_ERROR_BASE,
-                       WMS_SOCKET_ERROR_BASE        = GLITE_WMS_SOCKET_ERROR_BASE,
-                       WMS_LDAP_ERROR_BASE          = GLITE_WMS_LDAP_ERROR_BASE,
-                       WMS_LB_ERROR_BASE            = GLITE_WMS_LOGGING_ERROR_BASE ,
-                       WMS_REQUESTAD_ERROR_BASE     = GLITE_WMS_REQUESTAD_ERROR_BASE,
-                       WMS_CHKPT_ERROR_BASE         = GLITE_WMS_CHECKPOINT_ERROR_BASE,
-                       WMS_CONFIGURATION_ERROR_BASE = GLITE_WMS_CONFIGURATION_ERROR_BASE
-       };
-} // exception namespace
-} // wmsutils namespace
-} // glite namespace
-#endif   //ifdef c++
-#endif
diff --git a/org.glite.wms-utils.exception/project/build.properties b/org.glite.wms-utils.exception/project/build.properties
deleted file mode 100755 (executable)
index e69de29..0000000
diff --git a/org.glite.wms-utils.exception/project/configure.properties.xml b/org.glite.wms-utils.exception/project/configure.properties.xml
deleted file mode 100644 (file)
index 04d3b17..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-       <!-- ======================================================
-                 Define extra properties here ...
-                 ====================================================== -->
-        
-       <project name="configure options">                                                                        
-        <property name="configure.args"
-               value="--prefix=${workspace.abs.dir}/stage --with-globus-prefix=${with.globus.prefix} --with-globus-thr-flavor=${with.globus.thr.flavor} --with-globus-nothr-flavor=${with.globus.nothr.flavor} --with-cppunit-prefix=${with.cppunit.prefix} --with-glite-location=${with.glite.location} --with-dist-location=${with.dist.location} --disable-optimization"/>
-
-       </project>
diff --git a/org.glite.wms-utils.exception/project/properties.xml b/org.glite.wms-utils.exception/project/properties.xml
deleted file mode 100755 (executable)
index 1e49af0..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Common build properties file for the Glite WMS Common component
-       
-       Authors: Alberto Di Meglio <alberto.di.meglio@cern.ch>          
-                  Joachim Flammer <Joachim.Flammer@cern.ch>
-       Version info: $Id$
-       Release: $Name$ 
-       
-       Revision history:
-       $Log$
-       Revision 1.5  2004/08/04 07:40:02  eronchie
-       Added cppunit
-       
-       Revision 1.4  2004/07/28 07:26:45  eronchie
-       Added /
-       
-       Revision 1.3  2004/07/28 07:19:56  eronchie
-       Added m4files.list
-       
-       Revision 1.2  2004/07/23 15:37:26  eronchie
-       Commit
-       
-       Revision 1.1.1.1  2004/07/21 18:16:57  eronchie
-       Moved out exception from org.glite.wms.common/src/utilitiesY
-       
-       Revision 1.2  2004/07/16 14:56:56  flammer
-       Corrected input path of build.properties.
-       
-       Revision 1.1.1.1  2004/05/26 18:45:05  eronchie
-       Import of wms jobid
-       
-       
--->
-
-<project name="WMS Utils Exception component common properties">
-
-       <!-- Include build properties to allow overwriting 
-            of properties for subsystem                    -->
-       <property file="project/build.properties" />    
-
-       <!-- ======================================================
-          Define corresponding subsystem properties
-                ====================================================== -->
-
-       <!-- Subsystem name -->
-       <property name="subsystem.name" value="${wms-utils.subsystem.name}"/>
-               
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${wms-utils.subsystem.prefix}"/>
-
-       <!-- ======================================================
-          Define component properties
-                ====================================================== -->
-                               
-       <!-- Component name prefix -->
-       <property name="component.prefix" value="exception" />
-                       
-       <!-- ======================================================
-          Define general component properties
-                ====================================================== -->
-       
-       <import file="${component.general.properties.file}" />
-                                               
-       <!-- ======================================================
-                Define extra properties here ...
-                ====================================================== -->
-                
-       <property name="m4files.list" value="glite.m4 cppunit optimize.m4"/>
-
-</project>
diff --git a/org.glite.wms-utils.exception/project/version.properties b/org.glite.wms-utils.exception/project/version.properties
deleted file mode 100755 (executable)
index 7cd1d7c..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Dec 10 12:18:50 CET 2004
-module.version=1.0.0
-module.build=105
-module.age=1
diff --git a/org.glite.wms-utils.exception/src/Exception.cpp b/org.glite.wms-utils.exception/src/Exception.cpp
deleted file mode 100644 (file)
index 1ec3b4a..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/* **************************************************************************
-*  filename  : Exceptions.cpp
-*  author    : Alessandro Maraschini <alessandro.maraschini@datamat.it>
-*  copyright : (C) 2002 by DATAMAT
-***************************************************************************/
-
-#include "glite/wmsutils/exception/Exception.h"
-#include "glite/wmsutils/exception/exception_codes.h"
-
-namespace glite {
-namespace wmsutils{
-namespace exception {
-using namespace std ;
-pthread_mutex_t METHOD_MUTEX  ;  // This mutex is used in order to lock the file for writing log infornation
-/* *********************************
-* Exception Class Implementation
-************************************/
-//Constructor/Destructor
-
-Exception::Exception () {
-       line = 0;
-} ;
-Exception::~Exception() throw(){ }
-/**
-* Exception chainig
-*/
-void Exception::push_back (  const string& source, int line_number,  const string& method ){
-       stack_strings.push_back ( dbgMessage() ) ;
-       ancestor = what() ;
-       source_file = source ;
-       line = line_number ;
-       method_name    =  method;
-       error_message = "" ;
-       exception_name="" ;
-}
-Exception::Exception( const std::string& file, int line_number,  const std::string& method,  int code, const std::string& name)
-       : error_code(code), exception_name(name){
-       source_file    = file;
-       line           = line_number;
-       method_name    = method;
-};
-Exception::Exception (const string& source, const string& method, int code, const string& exception)
-       : error_code(code), exception_name(exception){
-       source_file    = source;
-       method_name    = method;
-       // stack= "";
-       line = 0;
-};
-int Exception::getCode(){
-    if  (error_code != 0)
-       return error_code ;
-    else
-       return WMS_COMMON_BASE;
-};
-const char* Exception::what() const throw(){
-  if (!ancestor.empty() )
-       return ancestor.c_str() ;
-  if  ( error_message != "")
-       return error_message.c_str() ;
-  else       return "" ;
-
-};
-string Exception::getExceptionName(){
-   if  (exception_name!= "")
-     return exception_name;
-   else
-     return "" ;
-};
-void Exception::log(const std::string& logfile)
-{
-    if (  logfile == "")
-       syslog (  LOG_PERROR,   (char *)  (dbgMessage()).c_str()  );
-    else{
-       pthread_mutex_lock( &METHOD_MUTEX);                   //   LOCK
-       //TBD : test if file exist-->>Create HEADER   ??
-       ofstream fout ((char *)   logfile.c_str()  , ios::app );  //Open the file for writing (if it doesn't exist then it will be created)
-       fout << "\n" << dbgMessage() ;  //write (append) the message
-       fout.close();  //close the file
-       pthread_mutex_unlock( &METHOD_MUTEX);               //   UNLOCK
-    }
-};
-string Exception::printStackTrace(){
-       string stack = "" ;
-       for (unsigned int i = 0 ; i < stack_strings.size() ; i++ ){
-               stack+=stack_strings[i] +"\n" ;
-       }
-       return stack +dbgMessage();
-};
-vector<string> Exception::getStackTrace(){
-       // make a copy of the stack
-       vector<string> stack = stack_strings ;
-       stack.push_back(dbgMessage() ) ;
-       return stack;
-};
-
-string Exception::dbgMessage(){
-   string result ;
-   //Adding exception Name
-   if ( exception_name!="")
-        result = exception_name ;
-   //Adding error msg
-   if (error_message!="")
-        result +=": " + string(what());
-   if (result != "")
-      result+="\n";
-   //Adding  Source
-   result +="\tat " + method_name  +"[" +source_file;
-   //Adding line number
-   if (line!=0){
-      char buffer [1024] ;
-      sprintf (buffer, "%i" ,  line) ;
-      result += ":" + string ( buffer );
-   }
-   result +="]" ;
-   return result;
-}
-
-}}}  // Closing namespace
-
diff --git a/org.glite.wms-utils.exception/src/Makefile.am b/org.glite.wms-utils.exception/src/Makefile.am
deleted file mode 100755 (executable)
index 0c5caac..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-## *********************************************************************
-## *
-## * Copyright (c) 2002 CERN and INFN on behalf of the EU DataGrid.
-## * For license conditions see LICENSE file or
-## * http://www.edg.org/license.html
-## *
-## *********************************************************************
-
-lib_LTLIBRARIES    = libglite_wmsutils_exception.la
-
-libglite_wmsutils_exception_la_SOURCES = \
-       Exception.cpp
-
-AM_CPPFLAGS = -I$(top_srcdir)/interface \
-       -I$(top_srcdir)/src 
-
-MAINTAINERCLEANFILES = Makefile.in *.*~
diff --git a/org.glite.wms-utils.jobid/.cvsignore b/org.glite.wms-utils.jobid/.cvsignore
deleted file mode 100755 (executable)
index 1df717b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-.project
-.cdtproject
\ No newline at end of file
diff --git a/org.glite.wms-utils.jobid/LICENSE b/org.glite.wms-utils.jobid/LICENSE
deleted file mode 100755 (executable)
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.wms-utils.jobid/Makefile.am b/org.glite.wms-utils.jobid/Makefile.am
deleted file mode 100755 (executable)
index bf956e1..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-## *********************************************************************
-## *
-## * Copyright (c) 2002 CERN and INFN on behalf of the EU DataGrid.
-## * For license conditions see LICENSE file or
-## * http://www.edg.org/license.html
-## *
-## *********************************************************************
-
-## Process this file with automake to produce Makefile.in
-
-EXTRA_DIST = LICENSE
-
-docdir = $(datadir)/doc/@PACKAGE@-@VERSION@
-doc_DATA = LICENSE
-
-## Subdirectories list
-SUBDIRS = interface src examples 
-
-## Default flags to run aclocal
-ACLOCAL_AMFLAGS = -I project
-
-stage:
-       @set fnord $(MAKEFLAGS); amf=$$2; \
-       dot_seen=no; \
-        target="install"; \
-       prefix_arg="@prefix@"; \
-        list='$(SUBDIRS)'; for subdir in $$list; do \
-          echo "Making $$target $$prefix_arg in $$subdir"; \
-          if test "$$subdir" = "."; then \
-            dot_seen=yes; \
-            local_target="$$target-am"; \
-          else \
-            local_target="$$target"; \
-          fi; \
-          (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target $$prefix_arg) \
-           || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
-        done; \
-        if test "$$dot_seen" = "no"; then \
-          $(MAKE) $(AM_MAKEFLAGS) "$$target-am" $$prefix_arg || exit 1; \
-        fi; test -z "$$fail"
-
-distsrc: dist
-       mv $(distdir).tar.gz $(DISTTAR)/$(distdir)_src.tar.gz
-
-distbin:
-       @set fnord $(MAKEFLAGS); amf=$$2; \
-        dot_seen=no; \
-        target="install"; \
-       tmpdistbin="$(WORKDIR)/dist_bin"; \
-        prefix_arg="prefix=$$tmpdistbin"; \
-        list='$(SUBDIRS)'; for subdir in $$list; do \
-          echo "Making $$target $$prefix_arg in $$subdir"; \
-          if test "$$subdir" = "."; then \
-            dot_seen=yes; \
-            local_target="$$target-am"; \
-          else \
-            local_target="$$target"; \
-          fi; \
-          (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target $$prefix_arg) \
-           || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
-        done; \
-        if test "$$dot_seen" = "no"; then \
-          $(MAKE) $(AM_MAKEFLAGS) "$$target-am" $$prefix_arg || exit 1; \
-        fi; test -z "$$fail"; \
-       pushd $$tmpdistbin; \
-       $(AMTAR) -zcf $(DISTTAR)/$(distdir)_bin.tar.gz .; \
-       popd; \
-       rm -rf $$tmpdistbin
-       
diff --git a/org.glite.wms-utils.jobid/bootstrap b/org.glite.wms-utils.jobid/bootstrap
deleted file mode 100755 (executable)
index ceeb099..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#! /bin/sh
-
-mkdir -p src/autogen
-set -x
-aclocal -I project
-libtoolize --force
-autoheader
-automake --foreign --add-missing --copy
-autoconf
diff --git a/org.glite.wms-utils.jobid/build.xml b/org.glite.wms-utils.jobid/build.xml
deleted file mode 100755 (executable)
index 220b2a6..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Build file for the GLite WMS jobid module
-       
-       Authors: Alberto Di Meglio <alberto.di.meglio@cern.ch>
-                  Joachim Flammer <Joachim.Flammer@cern.ch>            
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-
--->
-
-<project name="jobid" default="dist">
-       
-       <!-- =========================================
-                Builds the GLite WMS Utils Jobid 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-make.file}" />
-               
-       <!-- =========================================
-                Load version file 
-            ========================================= -->
-       <property file="${module.version.file}"/>
-               
-       <!-- ==============================================
-                Local private targets
-            ============================================== -->
-       
-       <target name="localinit"
-               description="Module specific initialization tasks">
-       </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.wms-utils.jobid/configure.ac b/org.glite.wms-utils.jobid/configure.ac
deleted file mode 100755 (executable)
index 0f1deb4..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-#
-#       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), Finland
-#       University of Bergen (UiB), Norway
-#       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-#
-#       Common configure.ac file for the GLite WMS Common module
-#
-#       Authors: Alberto Di Meglio <alberto.di.meglio@cern.ch>
-#       Version info: $Id$
-#       Release: $Name$
-#
-#       Revision history:
-#       $Log$
-#       Revision 1.15  2004/11/16 15:35:22  eronchie
-#       Increased version
-#
-#       Revision 1.14  2004/11/16 15:15:45  eronchie
-#       Increased version
-#
-#       Revision 1.13  2004/09/22 00:25:17  glbuild
-#       Fixed missing parenthesis
-#
-#       Revision 1.12  2004/09/21 19:22:09  glbuild
-#       modified module.version
-#
-#       Revision 1.11  2004/08/17 13:46:28  eronchie
-#       Added interface
-#
-#       Revision 1.10  2004/08/17 13:41:20  eronchie
-#       Moved out JobIdExceptions.h cjobid.h JobId.h
-#       Put in interface/glite/wmsutils/jobid
-#
-#       Revision 1.9  2004/08/17 10:40:34  eronchie
-#       Added optimize option
-#
-#       Revision 1.8  2004/07/27 09:14:19  eronchie
-#       Removed AC_WMSUTILS_EXCEPTION and AC_GLOBUS_SSL_UTILS checks
-#       Set directly exception library macro
-#
-#       Revision 1.7  2004/07/21 17:53:36  eronchie
-#       Moved out org.glite.wms.jobid from org.glite.wms and put in org.glite.wms-utils
-#
-#
-#
-                                                                                                                                                             
-# Process this file with autoconf to produce a configure script.
-
-AC_PREREQ(2.57)
-AC_INIT([GLite WMS Utils Jobid], [1.0.0])
-AC_CONFIG_AUX_DIR([./project])
-AM_INIT_AUTOMAKE([1.6.3 subdir-objects])
-AC_CONFIG_SRCDIR([src/jobid/strmd5.h])
-
-# Notices.
-AC_COPYRIGHT([Copyright (c) 2004 The EU EGEE Project
-See LICENCE file for details
-])
-AC_REVISION([$Revision$])
-
-#Environment.
-WORKDIR=`pwd`
-AC_SUBST(WORKDIR)
-
-# Checks for programs.
-AC_PROG_CC
-AC_PROG_CPP
-AC_PROG_CXX
-AC_PROG_CXXCPP
-AM_PROG_CC_C_O
-AC_PROG_LIBTOOL
-
-# Checks for libraries.
-
-# Checks for header files.
-AC_CHECK_HEADERS([fcntl.h mntent.h sys/vfs.h syslog.h unistd.h])
-
-# Checks for typedefs, structures, and compiler characteristics.
-AC_HEADER_STDBOOL
-AC_C_CONST
-AC_C_INLINE
-AC_TYPE_OFF_T
-AC_TYPE_SIZE_T
-AC_CHECK_MEMBERS([struct stat.st_rdev])
-AC_TYPE_UID_T
-AC_CHECK_TYPES([ptrdiff_t])
-
-# Checks for library functions.
-AC_HEADER_STDC
-AC_FUNC_ERROR_AT_LINE
-AC_FUNC_GETMNTENT
-AC_FUNC_MEMCMP
-AC_FUNC_STAT
-AC_FUNC_STRFTIME
-AC_FUNC_VPRINTF
-AC_CHECK_FUNCS([bzero endpwent ftruncate getmntent memset mkdir pow strerror strtol])
-
-have_globus=no
-                                                                                
-AC_GLOBUS([], have_globus=yes, have_globus=no)
-AC_MSG_RESULT(["GLOBUS found $have_globus"])
-
-have_glite_wmsutils_exception=no
-                                                                                
-AC_GLITE
-
-GLITE_WMSUTILS_EXCEPTION_LIBS="-L$GLITE_LOCATION/lib -lglite_wmsutils_exception"AC_SUBST(GLITE_WMSUTILS_EXCEPTION_LIBS)
-
-AC_OPTIMIZE
-
-# Configuration items
-AC_PREFIX_DEFAULT([/opt/glite])
-AM_CONFIG_HEADER([src/autogen/config.h])
-AC_CONFIG_FILES([Makefile])
-AC_CONFIG_FILES([examples/Makefile])
-AC_CONFIG_FILES([interface/Makefile])
-AC_CONFIG_FILES([src/Makefile])
-AC_CONFIG_FILES([src/jobid/Makefile])
-
-AC_OUTPUT
-
diff --git a/org.glite.wms-utils.jobid/examples/Makefile.am b/org.glite.wms-utils.jobid/examples/Makefile.am
deleted file mode 100755 (executable)
index fa9a407..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-## *********************************************************************
-## *
-## * Copyright (c) 2002 CERN and INFN on behalf of the EU DataGrid.
-## * For license conditions see LICENSE file or
-## * http://www.edg.org/license.html
-## *
-## *********************************************************************
-
-STDCPP = -lstdc++
-
-JOBID = $(top_builddir)/src/jobid/libglite_wmsutils_cjobid.la
-
-check_PROGRAMS = testjobid 
-
-testjobid_SOURCES = testjobid.c
-testjobid_LDADD = \
-       $(JOBID) \
-       $(GLITE_WMSUTILS_EXCEPTION_LIBS) \
-       $(GLOBUS_SSL_THR_LIBS) \
-       $(STDCPP)
-
-AM_CPPFLAGS = -I$(top_srcdir)/src \
-       -I$(top_srcdir)/interface \
-        $(GLITE_CFLAGS) \
-       $(GLOBUS_THR_CFLAGS)
-
-MAINTAINERCLEANFILES = Makefile.in *~
-
diff --git a/org.glite.wms-utils.jobid/examples/testjobid.c b/org.glite.wms-utils.jobid/examples/testjobid.c
deleted file mode 100755 (executable)
index 56f6cba..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* test code for jobid routines */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "glite/wmsutils/jobid/cjobid.h"
-
-int main(int argc, char* argv[])
-{
-  char* ju;
-  char* bkserver = "ujsa.uhjs";
-
-  edg_wlc_JobId ji = 0;
-  edg_wlc_JobId ji2 = 0;
-
-  int r = edg_wlc_JobIdCreate(bkserver, 0, &ji);
-  printf("Create: %d\n", r);
-
-  ju = edg_wlc_JobIdUnparse(ji);
-  printf("Unparse:  %s\n", ju);
-
-  edg_wlc_JobIdParse(ju, &ji2);
-  free(ju);
-
-  ju = edg_wlc_JobIdUnparse(ji);
-  printf("Unparse2: %s\n", ju);
-  free(ju);
-
-  edg_wlc_JobIdFree(ji);
-  edg_wlc_JobIdFree(ji2);
-
-  return 0;
-}
diff --git a/org.glite.wms-utils.jobid/interface/Makefile.am b/org.glite.wms-utils.jobid/interface/Makefile.am
deleted file mode 100755 (executable)
index 8737f19..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-## *********************************************************************
-## *
-## * Copyright (c) 2002 CERN and INFN on behalf of the EU DataGrid.
-## * For license conditions see LICENSE file or
-## * http://www.edg.org/license.html
-## *
-## *********************************************************************
-
-jobiddir = $(includedir)
-nobase_jobid_HEADERS = \
-       glite/wmsutils/jobid/cjobid.h \
-       glite/wmsutils/jobid/manipulation.h \
-       glite/wmsutils/jobid/JobIdExceptions.h \
-       glite/wmsutils/jobid/JobId.h
-
-MAINTAINERCLEANFILES = Makefile.in
diff --git a/org.glite.wms-utils.jobid/interface/glite/wmsutils/jobid/JobId.h b/org.glite.wms-utils.jobid/interface/glite/wmsutils/jobid/JobId.h
deleted file mode 100755 (executable)
index f7c1bb5..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-#ifndef GLITE_WMSUTILS_JOBID_JOBID_H
-#define GLITE_WMSUTILS_JOBID_JOBID_H
-
-/*
- * JobId.h
- * Copyright (c) 2001 The European Datagrid Project - IST programme, all rights reserved.
- *
- */
-
-#include <string>
-#include <iosfwd>
-
-#include "glite/wmsutils/jobid/cjobid.h"
-
-typedef struct _edg_wlc_jobid_s* edg_wlc_jobid_t;
-
-namespace glite { 
-namespace wmsutils { 
-namespace jobid {
-
-/**
- * Managing Identification, checking, retreiving info from a job
- * File name: JobId.h
- * The JobId class provides a representation of the Datagrid job identifier
- * (dg_jobId) and the methods for manipulating it.
- * We remind that the format of the dg_jobId is as follows:
- * <LB address>:<LB port>/<Unique String>
- *
- * @ingroup common
- * @version 0.1
- * @date 15 April 2002
- * @author Alessandro Maraschini <alessandro.maraschini@datamat.it>  */ 
-
-class JobId {
-public:
-    /**@name Constructors/Destructor */
-    //@{
-    /** Instantiates an empty  JobId object */
-    JobId() ;
-    /**
-     * Instantiates a JobId object from the passed dg_jobId in string format.
-     * @param  job_id_string a string representig a classAd expression
-     * @throws  WrongIdException When a string is passed in a wrong format
-     */
-    JobId(const std::string& job_id_string ) ;
-    JobId(const JobId&);
-    JobId(const edg_wlc_JobId&);
-    /**
-     * Destructor
-     * Destroy the Job Id instance
-     */
-    ~JobId() ;
-  //@}
-
-    /**@name Miscellaneous  */
-    //@{
-    /** Unsets the JobId instance. Clear all it's memebers */
-    void clear() ;
-    /**
-     * Check wheater the jobId has been already created (true) or not (false)
-     *@return  true (jobId created) or false (jobId not yet created)
-     */
-    bool isSet() { return ( m_JobId != 0 ) ; }
-    /**
-     * Set the JobId instance according to the LB and RB server addresses and the unique string passed as input parameters.
-     * @param lb_server  Loggin and Bookkeeping server  address
-     * @param port Loggin and Bookkeeping port ( dafault value is 9000 )
-     * @param  unique A Unique identification ( automatically generatad by md5 protocol )
-     * @throws  WrongIdException  When one parameter has been passed in a wrong format  */
-    void setJobId(const std::string& lb_server, int port = 0, const std::string& unique = "");
-  //@}
-    /**@name Get Methods */
-  //@{
-    /** @return the LB address  into its string format
-    * @throws  EmptyIdException  If the jobId has not been initialised yet */
-    std::string getServer() const;
-    /** @return the Unique string into its string format
-    * @throws  EmptyIdException  If the jobId has not been initialised yet */
-    std::string getUnique() const;
-  //@}
-    /** This method sets the JobId instance from the JobId in string format given
-    * as input.
-    * @param dg_JobId the string representing the job
-    * @throws  WrongIdException  When a string is passed in a wrong format */
-    void fromString ( const std::string& dg_JobId );
-    /** Converts the jobId into a string
-    @return the string representation of a JobId*/
-    std::string toString() const;
-    operator const edg_wlc_JobId() const { return m_JobId; }
-    JobId & operator=(JobId const &);
-    JobId & operator=(const edg_wlc_JobId &);
-    edg_wlc_JobId  getId() const ;
-private:
-    // This Variable stores the Job unique identification String
-    edg_wlc_JobId m_JobId;
-    mutable char* m_pStr;
-    mutable char* m_pBkserver;
-    mutable char* m_pUnique;
-
-    friend bool operator<(JobId const& lhs, JobId const& rhs);
-    friend bool operator==(JobId const& lhs, JobId const& rhs);
-};
-
-inline bool operator<(JobId const& lhs, JobId const& rhs)
-{
-  return    strcmp ( lhs.m_pStr , rhs.m_pStr )  <0 ;
-}
-
-inline bool operator==(JobId const& lhs, JobId const& rhs)
-{
-return     strcmp ( lhs.m_pStr , rhs.m_pStr ) ==0 ;
-}
-
-std::ostream& operator<<(std::ostream& os, JobId const& id);
-
-} // namespace jobid
-} // namespace wmsutils
-} // namespace glite
-
-#endif // GLITE_WMSUTILS_JOBID_JOBID_H
diff --git a/org.glite.wms-utils.jobid/interface/glite/wmsutils/jobid/JobIdExceptions.h b/org.glite.wms-utils.jobid/interface/glite/wmsutils/jobid/JobIdExceptions.h
deleted file mode 100755 (executable)
index 42cbdf4..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-#ifndef GLITE_WMSUTILS_JOBID_EXCEPTIONS_H
-#define GLITE_WMSUTILS_JOBID_EXCEPTIONS_H
-
-/*
- * JobIdExceptions.h
- * Copyright (c) 2001 The European Datagrid Project - IST programme, all rights reserved.
- */
-
-#include "glite/wmsutils/exception/Exception.h"
-
-namespace glite { 
-namespace wmsutils { 
-namespace jobid {
-
-/**
- * JobIdException - Exception thrown by JobId Class
- * @ingroup Common
- * @version 0.1
- * @date 15 April 2002
- * @author Alessandro Maraschini <alessandro.maraschini@datamat.it>
-*/
-
-class JobIdException : public glite::wmsutils::exception::Exception {
-public:
-    /**
-     * Update all mandatory Exception Information
-     */
-  JobIdException (const std::string& file,
-                                   int line,
-                                   const std::string& method,
-                                   int code,
-                                   const std::string& exception_name) ;
-};//End CLass  JobIdException
-
-/**
-* WrongIdFieldException
-* This Exception is thrown when a Job Id syntax error is found
-* A valid Job Identification string should be made as follows:
-* <LB address>:<LB port>/ <Unique string> */
-class  WrongIdException  : public JobIdException {
-public:
-  /**
-  * Constructor
-  * @param file - The source file which has generated the Exception
-  * @param line - The line number in the source file where the Exception has been thrown
-  * @param method - The Name of the method which has thrown the Exception
-  * @param code - The Code of the Error raised
-  * @param field - The wrong expression catched */
-    WrongIdException(const std::string& file,
-                                      int line,
-                                      const std::string& method,
-                                      int code );
-}; //End CLass WrongIdException
-/**
-*  EmptyIdException
-* This Exception is thrown when the user tries to get information from a JobId
-* which has not been initialized yet, i.e tries to use the get<field name> Methods
-*/
-class EmptyIdException : public JobIdException {
-public:
-  /**
-  * Constructor
-  * @param file - The source file which has generated the Exception
-  * @param line - The line number in the source file where the Exception has been thrown
-  * @param method - The Name of the method which has thrown the Exception
-  * @param code - The Code of the Error raised
-  * @param field - The Empty filed requested for */
-    EmptyIdException::EmptyIdException(const std::string& file,
-                                      int line,
-                                      const std::string& method,
-                                      int code ,
-                                      const std::string& field );
-}; //End CLass EmptyIdException
-
-} // namespace jobid
-} // namespace wmsutils
-} // namespace glite
-
-#endif // GLITE_WMSUTILS_JOBID_EXCEPTIONS_H
-
diff --git a/org.glite.wms-utils.jobid/interface/glite/wmsutils/jobid/cjobid.h b/org.glite.wms-utils.jobid/interface/glite/wmsutils/jobid/cjobid.h
deleted file mode 100755 (executable)
index e8f84f5..0000000
+++ /dev/null
@@ -1,109 +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 *edg_wlc_JobId;
-
-#define GLITE_WMSC_JOBID_DEFAULT_PORT 9000 /**< Default port where bookkeeping server listens */
-#define GLITE_WMSC_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 edg_wlc_JobIdCreate(const char * bkserver, int port, edg_wlc_JobId * 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 edg_wlc_JobIdRecreate(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 edg_wlc_JobIdDup(const edg_wlc_JobId in, edg_wlc_JobId * jobid);
-
-/*
- * Free jobid structure
- * \param jobid for dealocation
- */
-void edg_wlc_JobIdFree(edg_wlc_JobId 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 edg_wlc_JobIdParse(const char* jobidstr, edg_wlc_JobId * jobid);
-
-/**
- * Unparse Job ID (produce the string form of JobId).
- * \param jobid to be converted to string
- * \return allocated string which represents jobid
- */
-char* edg_wlc_JobIdUnparse(const edg_wlc_JobId 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* edg_wlc_JobIdGetServer(const edg_wlc_JobId 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 edg_wlc_JobIdGetServerParts(const edg_wlc_JobId 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* edg_wlc_JobIdGetUnique(const edg_wlc_JobId jobid);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _GLITE_JOBID_H */
diff --git a/org.glite.wms-utils.jobid/interface/glite/wmsutils/jobid/manipulation.h b/org.glite.wms-utils.jobid/interface/glite/wmsutils/jobid/manipulation.h
deleted file mode 100755 (executable)
index 9f862ae..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef GLITE_WMSUTILS_JOBID_MANIPULATION_H
-#define GLITE_WMSUTILS_JOBID_MANIPULATION_H
-
-#include <string>
-
-namespace glite {
-namespace wmsutils {
-namespace jobid {
-
-class JobId;
-
-std::string get_reduced_part( const JobId &id, int level = 0 );
-std::string to_filename( const JobId &id );
-JobId from_filename( const std::string &filename );
-
-} // namespace jobid
-} // namespace wmsutils
-} // namespace glite
-
-#endif /* GLITE_WMSUTILS_JOBID_MANIPULATION_H */
-
-// Local Variables:
-// mode: c++
-// End:
diff --git a/org.glite.wms-utils.jobid/project/build.properties b/org.glite.wms-utils.jobid/project/build.properties
deleted file mode 100755 (executable)
index e69de29..0000000
diff --git a/org.glite.wms-utils.jobid/project/configure.properties.xml b/org.glite.wms-utils.jobid/project/configure.properties.xml
deleted file mode 100644 (file)
index 04d3b17..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-       <!-- ======================================================
-                 Define extra properties here ...
-                 ====================================================== -->
-        
-       <project name="configure options">                                                                        
-        <property name="configure.args"
-               value="--prefix=${workspace.abs.dir}/stage --with-globus-prefix=${with.globus.prefix} --with-globus-thr-flavor=${with.globus.thr.flavor} --with-globus-nothr-flavor=${with.globus.nothr.flavor} --with-cppunit-prefix=${with.cppunit.prefix} --with-glite-location=${with.glite.location} --with-dist-location=${with.dist.location} --disable-optimization"/>
-
-       </project>
diff --git a/org.glite.wms-utils.jobid/project/properties.xml b/org.glite.wms-utils.jobid/project/properties.xml
deleted file mode 100755 (executable)
index 9662658..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Common build properties file for the Glite WMS Common component
-       
-       Authors: Alberto Di Meglio <alberto.di.meglio@cern.ch>          
-                  Joachim Flammer <Joachim.Flammer@cern.ch>
-       Version info: $Id$
-       Release: $Name$ 
-       
-       Revision history:
-       $Log$
-       Revision 1.8  2004/08/04 07:42:42  eronchie
-       Added cppunit.m4
-       
-       Revision 1.7  2004/08/04 07:38:27  eronchie
-       Added cppunit
-       
-       Revision 1.6  2004/07/28 07:27:22  eronchie
-       Added /
-       
-       Revision 1.5  2004/07/28 07:21:58  eronchie
-       Added m4files.list property
-       
-       Revision 1.4  2004/07/23 14:47:01  eronchie
-       Removed....
-       
-       Revision 1.3  2004/07/21 18:22:38  eronchie
-       Changed wms in wms-utils
-       
-       Revision 1.2  2004/07/16 14:56:56  flammer
-       Corrected input path of build.properties.
-       
-       Revision 1.1.1.1  2004/05/26 18:45:05  eronchie
-       Import of wms jobid
-       
-       
--->
-
-<project name="WMS Utils jobid component common properties">
-
-       <!-- Include build properties to allow overwriting 
-            of properties for subsystem                    -->
-       <property file="project/build.properties" />    
-
-       <!-- ======================================================
-          Define corresponding subsystem properties
-                ====================================================== -->
-
-       <!-- Subsystem name -->
-       <property name="subsystem.name" value="${wms-utils.subsystem.name}"/>
-               
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${wms-utils.subsystem.prefix}"/>
-
-       <!-- ======================================================
-          Define component properties
-                ====================================================== -->
-                               
-       <!-- Component name prefix -->
-       <property name="component.prefix" value="jobid" />
-                       
-       <!-- ======================================================
-          Define general component properties
-                ====================================================== -->
-       
-       <import file="${component.general.properties.file}" />
-
-       <!-- ======================================================
-                 Define extra properties here ...
-                 ====================================================== -->
-
-        <property name="m4files.list" value="globus.m4 glite.m4 cppunit.m4 optimize.m4"/>
-       
-</project>
diff --git a/org.glite.wms-utils.jobid/project/version.properties b/org.glite.wms-utils.jobid/project/version.properties
deleted file mode 100755 (executable)
index 3c2b57f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Dec 10 12:23:10 CET 2004
-module.version=1.0.0
-module.build=104
-module.age=1
diff --git a/org.glite.wms-utils.jobid/src/Makefile.am b/org.glite.wms-utils.jobid/src/Makefile.am
deleted file mode 100755 (executable)
index 5225c64..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-## *********************************************************************
-## *
-## * Copyright (c) 2002 CERN and INFN on behalf of the EU DataGrid.
-## * For license conditions see LICENSE file or
-## * http://www.edg.org/license.html
-## *
-## *********************************************************************
-
-## Subdirectories list
-SUBDIRS = jobid 
-
-MAINTAINERCLEANFILES = Makefile.in 
diff --git a/org.glite.wms-utils.jobid/src/jobid/JobId.cpp b/org.glite.wms-utils.jobid/src/jobid/JobId.cpp
deleted file mode 100755 (executable)
index 273f9f9..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-/* **************************************************************************
- *  filename  : JobId.cpp
- *  author    : Alessandro Maraschini <alessandro.maraschini@datamat.it>
- *  copyright : (C) 2002 by DATAMAT
- ***************************************************************************/
-
-#include "glite/wmsutils/jobid/JobId.h"
-
-#include <iostream>
-
-#include "glite/wmsutils/jobid/JobIdExceptions.h"
-
-namespace glite {
-namespace wmsutils {
-namespace jobid {
-
-using namespace std ;
-
-/******************************************************************
- Constructor / Destructor
- *******************************************************************/
-JobId::JobId() : m_JobId( 0 ), m_pStr( 0 ), m_pBkserver( 0 ), m_pUnique( 0 )
-{
-}
-
-JobId::JobId(const std::string& job_id_string )
-    : m_JobId( 0 ), m_pStr( 0 ), m_pBkserver( 0 ), m_pUnique( 0 )
-{
-    fromString( job_id_string ) ;
-}
-
-JobId::JobId(const JobId &old)
-{
-       edg_wlc_JobIdDup(old.m_JobId,&m_JobId);
-       m_pStr = old.m_pStr ? strdup(old.m_pStr) : 0;
-       m_pBkserver = old.m_pBkserver ? strdup(old.m_pBkserver) : 0;
-       m_pUnique = old.m_pUnique ? strdup(old.m_pUnique) : 0;
-}
-
-JobId & JobId::operator=(JobId const &old)
-{
-       clear();
-       edg_wlc_JobIdDup(old.m_JobId,&m_JobId);
-       m_pStr = old.m_pStr ? strdup(old.m_pStr) : 0;
-       m_pBkserver = old.m_pBkserver ? strdup(old.m_pBkserver) : 0;
-       m_pUnique = old.m_pUnique ? strdup(old.m_pUnique) : 0;
-
-       return *this;
-}
-
-
-JobId::JobId(const edg_wlc_JobId &old)
-       : m_pStr(0), m_pBkserver(0), m_pUnique(0)
-{
-       edg_wlc_JobIdDup(old,&m_JobId);
-}
-
-
-JobId & JobId::operator=(const edg_wlc_JobId &old)
-{
-       clear();
-       edg_wlc_JobIdDup(old,&m_JobId);
-       m_pStr = 0;
-       m_pBkserver = 0;
-       m_pUnique = 0;
-       return(*this);
-}
-
-JobId::~JobId()
-{
-    clear();
-}
-
-/******************************************************************
- method : clear
- unsets the JobId instance.
- *******************************************************************/
-void JobId::clear()
-{
-    if ( m_JobId )
-    {
-       edg_wlc_JobIdFree( m_JobId );
-       m_JobId = 0;
-       if (m_pStr)
-            free(m_pStr);
-       if (m_pBkserver)
-            free(m_pBkserver);
-       if (m_pUnique)
-           free(m_pUnique);
-        m_pStr = m_pBkserver = m_pUnique = NULL;
-    }
-}
-
-
-/******************************************************************
- method :    setJobId
- sets the JobId instance according to the LB and RB
- server addresses and the unique string passed as input parameters.
- *******************************************************************/
-void JobId::setJobId(const string& bkserver, int port, const string& unique)
-{
-    int code = edg_wlc_JobIdRecreate(bkserver.c_str(), port, unique.size() ? unique.c_str() : NULL, &m_JobId) ;
-    if (  code != 0 )
-       throw WrongIdException(__FILE__ , __LINE__ ,  "setJobId(const string& bkserver, int port, const string& unique)" , code  )  ;
-}
-
-
-/******************************************************************
- Protected method :    fromString
- sets the JobId instance from the dg_jobId in string format given as input.
- *******************************************************************/
-void JobId::fromString (const string& dg_JobId)
-{
-    clear();
-    int code = edg_wlc_JobIdParse(dg_JobId.c_str(), &m_JobId)  ;
-    if  ( code != 0 )
-       throw WrongIdException(__FILE__ , __LINE__ , "fromString (const string& dg_JobId)" , code )  ;
-}
-
-/******************************************************************
- method :    ToString
- converts the JobId instance into its string format.
- and put it in the dg_jobId output variable
- *******************************************************************/
-std::string JobId::toString() const
-{
-    if ( m_JobId && !m_pStr )
-       m_pStr = edg_wlc_JobIdUnparse(m_JobId) ;
-    if ( !m_pStr )
-       throw EmptyIdException (__FILE__ , __LINE__ ,"toString()" ,ENOENT , "JobId")  ;
-    return m_pStr;
-}
-
-/******************************************************************
- method :   getServer
- return a string containing the LB server address,
- *******************************************************************/
-std::string JobId::getServer() const
-{
-    if ( m_JobId && !m_pBkserver )
-       m_pBkserver = edg_wlc_JobIdGetServer( m_JobId ) ;
-
-    if ( !m_pBkserver )
-       throw EmptyIdException (__FILE__ , __LINE__ , "getServer()",  ENOENT , "LB server Address")  ;
-
-    return m_pBkserver;
-}
-
-/******************************************************************
- method :   getUnique
- return a string containing unique jobid string
- *******************************************************************/
-std::string JobId::getUnique() const
-{
-    if ( m_JobId && !m_pUnique )
-       m_pUnique = edg_wlc_JobIdGetUnique( m_JobId ) ;
-
-    if ( !m_pUnique )
-       throw EmptyIdException (__FILE__ , __LINE__ , "getUnique()" ,  ENOENT , "Unique")  ;
-
-    return m_pUnique;
-}
-/******************************************************************
- method :   getId
- return the c JobId struct representing this instance
- *******************************************************************/
-edg_wlc_JobId  JobId::getId() const
-{
-       edg_wlc_JobId out ;
-       if ( edg_wlc_JobIdDup(m_JobId,  &out)  )
-               throw EmptyIdException (__FILE__ , __LINE__ , "getId()" ,  ENOENT , "JobId")  ;
-       return out ;
-}
-
-std::ostream&
-operator<<(std::ostream& os, JobId const& id)
-{
-  return os << id.toString();
-}
-
-} // namespace jobid
-} // namespace wmsutils
-} // namespace glite 
diff --git a/org.glite.wms-utils.jobid/src/jobid/JobIdExceptions.cpp b/org.glite.wms-utils.jobid/src/jobid/JobIdExceptions.cpp
deleted file mode 100755 (executable)
index 6be40b7..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/* **************************************************************************
-*  filename  : JobIdExecptions.cpp
-*  author    : Alessandro Maraschini <alessandro.maraschini@datamat.it>
-*  copyright : (C) 2002 by DATAMAT
-***************************************************************************/
-
-#include "glite/wmsutils/jobid/JobIdExceptions.h"
-
-namespace glite {
-namespace wmsutils {
-namespace jobid {
-
-using namespace std;
-using namespace glite::wmsutils::exception;
-
-/*****************************
-* JobIdException
-*****************************/
-JobIdException::JobIdException (const string& file,
-                                   int line,
-                                   const string& method,
-                                   int code,
-                                   const string& exception_name)
-       : Exception(file, line, method, code, exception_name)
-{
-}
-
-/*****************************
-* WrongIdException
-*****************************/
-WrongIdException::WrongIdException(const string& file,
-                                      int line,
-                                      const string& method,
-                                      int code )
-       : JobIdException(file, line, method, code,
-                        "WrongIdException")
-{
-       error_message = "Wrong Field caught while parsing Job Id" ;
-}
-
-/*****************************
-* EmptyIdException
-*****************************/
-EmptyIdException::EmptyIdException(const string& file,
-                                      int line,
-                                      const string& method,
-                                      int code ,
-                                      const string& field )
-       : JobIdException(file, line, method, code,
-                        "EmptyIdException")
-{
-       error_message = "Unable to retrieve " + field + ": the instance has not been initialized yet";
-}
-
-} // namespace jobid
-} // namespace wmsutils
-} // namespace glite
-
diff --git a/org.glite.wms-utils.jobid/src/jobid/Makefile.am b/org.glite.wms-utils.jobid/src/jobid/Makefile.am
deleted file mode 100755 (executable)
index 7a23118..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-## *********************************************************************
-## *
-## * Copyright (c) 2002 CERN and INFN on behalf of the EU DataGrid.
-## * For license conditions see LICENSE file or
-## * http://www.edg.org/license.html
-## *
-## *********************************************************************
-
-lib_LTLIBRARIES = libglite_wmsutils_jobid.la libglite_wmsutils_cjobid.la
-
-libglite_wmsutils_jobid_la_SOURCES = \
-       JobId.cpp \
-       JobIdExceptions.cpp \
-       manipulation.cpp 
-
-libglite_wmsutils_cjobid_la_SOURCES = \
-        cjobid.c \
-        strmd5.c
-
-jobidincludedir = $(includedir)/glite/wmsutils/jobid
-jobidinclude_HEADERS = \
-       strmd5.h 
-
-AM_CPPFLAGS = -I$(top_srcdir)/src \
-       -I$(top_srcdir)/interface \
-       $(GLITE_CFLAGS) \
-       $(GLOBUS_THR_CFLAGS) \
-       -D_GNU_SOURCE
-
-MAINTAINERCLEANFILES = Makefile.in
diff --git a/org.glite.wms-utils.jobid/src/jobid/cjobid.c b/org.glite.wms-utils.jobid/src/jobid/cjobid.c
deleted file mode 100755 (executable)
index 2fa0010..0000000
+++ /dev/null
@@ -1,258 +0,0 @@
-#ident "$Header$"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-
-#include <netdb.h>
-#include <sys/time.h>
-#include <unistd.h>
-
-#include "glite/wmsutils/jobid/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 edg_wlc_JobIdCreate(const char *bkserver, int port, edg_wlc_JobId *jobId)
-{
-    return edg_wlc_JobIdRecreate(bkserver, port, NULL, jobId);
-}
-
-
-int edg_wlc_JobIdRecreate(const char* bkserver, int port, const char *unique, edg_wlc_JobId *jobId)
-{
-    edg_wlc_JobId 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 = (edg_wlc_JobId) malloc (sizeof(*out));
-    if (!out)
-       return ENOMEM;
-
-    memset(out, 0, sizeof(*out));
-
-    /* check if it begins with prefix */
-    /* unsupported */
-    if (strncmp(bkserver, GLITE_WMSC_JOBID_PROTO_PREFIX, sizeof(GLITE_WMSC_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_WMSC_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) {
-       edg_wlc_JobIdFree(out);
-       return ENOMEM;
-    }
-
-    *jobId = out;
-    return 0;
-}
-
-
-int edg_wlc_JobIdDup(const edg_wlc_JobId in, edg_wlc_JobId *out)
-{
-    edg_wlc_JobId 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) {
-       edg_wlc_JobIdFree(jid);
-       return ENOMEM;
-    }
-
-    jid->BSport = in->BSport;
-    *out = jid;
-    return 0;
-}
-
-
-// XXX
-// use recreate
-// parse name, port, unique
-int edg_wlc_JobIdParse(const char *idString, edg_wlc_JobId *jobId)
-{
-    char *pom, *pom1, *pom2;
-    edg_wlc_JobId out;
-
-    *jobId = NULL;
-
-    out = (edg_wlc_JobId) malloc (sizeof(*out));
-    if (out == NULL )
-       return ENOMEM;
-
-    memset(out,0,sizeof(*out));
-
-    if (strncmp(idString, GLITE_WMSC_JOBID_PROTO_PREFIX, sizeof(GLITE_WMSC_JOBID_PROTO_PREFIX) - 1)) {
-       out->BShost  = (char *) NULL;
-       out->BSport  = 0;
-
-       free(out);
-       return EINVAL;
-    }
-
-    pom = strdup(idString + sizeof(GLITE_WMSC_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_WMSC_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);
-           edg_wlc_JobIdFree(out);
-           return EINVAL;
-    }
-
-    free(pom);
-    *jobId = out;
-    return 0;
-}
-
-
-void edg_wlc_JobIdFree(edg_wlc_JobId job)
-{
-    if (job) {
-       free(job->id);
-       free(job->BShost);
-       free(job->info);
-       free(job);
-    }
-}
-
-
-char* edg_wlc_JobIdUnparse(const edg_wlc_JobId jobid)
-{
-    char *out, port[40];
-
-    if (!jobid)
-       return NULL;
-
-    if (jobid->BSport)
-       sprintf(port,":%d",jobid->BSport);
-    else
-        *port = 0;
-
-    asprintf(&out, GLITE_WMSC_JOBID_PROTO_PREFIX"%s%s/%s%s%s",
-            jobid->BShost,port,
-            jobid->id,
-            (jobid->info ? "?" : ""),
-            (jobid->info ? jobid->info : ""));
-
-    return out;
-}
-
-
-char* edg_wlc_JobIdGetServer(const edg_wlc_JobId jobid)
-{
-    char *bs = NULL;
-
-    if (jobid)
-       asprintf(&bs, "%s:%u", jobid->BShost,
-                jobid->BSport ? jobid->BSport : GLITE_WMSC_JOBID_DEFAULT_PORT);
-
-    return bs;
-}
-
-
-void edg_wlc_JobIdGetServerParts(const edg_wlc_JobId jobid, char **srvName, unsigned int *srvPort)
-{
-    if (jobid) {
-       *srvName = strdup(jobid->BShost);
-       *srvPort = jobid->BSport ? jobid->BSport : GLITE_WMSC_JOBID_DEFAULT_PORT;
-    }
-}
-
-
-char* edg_wlc_JobIdGetUnique(const edg_wlc_JobId jobid)
-{
-    return jobid ? strdup(jobid->id) : NULL;
-}
diff --git a/org.glite.wms-utils.jobid/src/jobid/manipulation.cpp b/org.glite.wms-utils.jobid/src/jobid/manipulation.cpp
deleted file mode 100755 (executable)
index cf3a710..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-#include <cctype>
-
-#include <string>
-#include <algorithm>
-
-#include "glite/wmsutils/jobid/JobId.h"
-
-using namespace std;
-
-namespace glite {
-namespace wmsutils {
-namespace jobid {
-
-namespace {
-
-class HexInt {
-public:
-  HexInt( unsigned int i = 0 );
-  HexInt( const string &str );
-  HexInt( string::const_iterator begin, string::const_iterator end );
-  ~HexInt( void );
-
-  inline operator unsigned int( void ) const { return this->hi_int; }
-  inline operator const string &( void ) const { return this->hi_str; }
-
-  static unsigned int least( void ) { return hi_s_least; }
-  static void least( unsigned int least ) { hi_s_least = least; }
-
-private:
-  void parseString( void );
-
-  unsigned int    hi_int;
-  string          hi_str;
-
-  static unsigned int  hi_s_least;
-  static const char   *hi_s_map;
-};
-
-class BadChar {
-public:
-  BadChar( void );
-  ~BadChar( void );
-
-  inline bool operator()( char c )
-  { return( !(((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')) || ((c >= '0') && (c <= '9')) ||
-             (c == '.') || (c == '-') || (c == ' ')) ); }
-};
-
-unsigned int  HexInt::hi_s_least = 2;
-const char   *HexInt::hi_s_map = "0123456789abcdef";
-
-HexInt::HexInt( unsigned int ui ) : hi_int( ui ), hi_str( hi_s_least, '0' )
-{
-  int                       n;
-  string::reverse_iterator  pos = this->hi_str.rbegin();
-
-  while( ui != 0 ) {
-    n = ui % 16;
-    if( pos != this->hi_str.rend() ) {
-      *pos = hi_s_map[n];
-      pos += 1;
-    }
-    else this->hi_str.insert( this->hi_str.begin(), hi_s_map[n] );
-
-    ui /= 16;
-  }
-
-  if( this->hi_str.length() < hi_s_least )
-    this->hi_str.insert( this->hi_str.begin(), (hi_s_least - this->hi_str.length()), '0' );
-}
-
-HexInt::HexInt( const string &str ) : hi_int( 0 ), hi_str( str )
-{
-  this->parseString();
-}
-
-HexInt::HexInt( string::const_iterator begin, string::const_iterator end ) : hi_int( 0 ), hi_str( begin, end )
-{
-  this->parseString();
-}
-
-void HexInt::parseString( void )
-{
-  int                        hexbase;
-  char                      *pos, *end = (char *) hi_s_map + 16;
-  string::reverse_iterator   it;
-
-  for( it = this->hi_str.rbegin(), hexbase = 1; it != this->hi_str.rend(); ++it, hexbase *= 16 ) {
-    pos = find( (char *) hi_s_map, end, (char) tolower(*it) );
-
-    if( pos != end ) this->hi_int += hexbase * (pos - hi_s_map);
-    else {
-      this->hi_int = 0;
-      break;
-    }
-  }
-
-  return;
-}
-
-HexInt::~HexInt( void ) {}
-
-BadChar::BadChar( void ) {}
-
-BadChar::~BadChar( void ) {}
-
-/*
-  Helper function for the get_reduced_part(...)
-*/
-string get_reduced_part_internal( const string &unique, int level )
-{
-  string::size_type  length = unique.length();
-  string             piece( unique.substr(0, 2) ), answer;
-
-  if( (level == 0) || (length <= 2) ) answer.assign( piece );
-  else if( length != 0 ) {
-    answer.assign( piece );
-    answer.append( 1, '/' );
-    answer.append( get_reduced_part_internal(unique.substr(2, length - 2),  level - 1) );
-  }
-
-  return answer;
-}
-
-}; // Unnamed namespace
-
-string get_reduced_part( const JobId &id, int level )
-{
-  return get_reduced_part_internal( id.getUnique(), level );
-}
-
-string to_filename( const JobId &id )
-{
-  string            sid( id.toString() ), coded;
-  string::iterator  last, next;
-
-  last = sid.begin();
-  do {
-    next = find_if( last, sid.end(), BadChar() );
-
-    if( next != sid.end() ) {
-      if( last != next ) coded.append( last, next );
-      coded.append( 1, '_' );
-      coded.append( HexInt(*next) );
-
-      last = next + 1;
-    }
-    else coded.append( last, sid.end() );
-  } while( next != sid.end() );
-
-  return coded;
-}
-
-JobId from_filename( const string &filename )
-{
-  char                     c;
-  string                   decoded;
-  string::const_iterator   last, next;
-
-  last = filename.begin();
-  do {
-    next = find( last, filename.end(), '_' );
-
-    if( next != filename.end() ) {
-      c = HexInt( next + 1, next + 3 );
-
-      if( last != next ) decoded.append( last, next );
-      decoded.append( 1, c );
-
-      last = next + 3;
-    }
-    else decoded.append( last, filename.end() );
-  } while( next != filename.end() );
-
-  return JobId( decoded );
-}
-
-} // namespace jobid
-} // namespace wmsutils
-} // namespace glite
diff --git a/org.glite.wms-utils.jobid/src/jobid/strmd5.c b/org.glite.wms-utils.jobid/src/jobid/strmd5.c
deleted file mode 100755 (executable)
index 0433f55..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-#ident "$Header$"
-
-#include <openssl/md5.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "jobid/strmd5.h"
-
-#warning Thread unsafe!
-static char mbuf[33];
-
-static int base64_encode(const void *enc, int enc_size, char *out, int out_max_size)
-{
-    static const char* b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
-
-    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;
-}
-
-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.wms-utils.jobid/src/jobid/strmd5.h b/org.glite.wms-utils.jobid/src/jobid/strmd5.h
deleted file mode 100755 (executable)
index c5d76b6..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef _GLITE_STRMD5_H
-#define _GLITE_STRMD5_H
-
-#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);
-
-#endif /* _GLITE_STRMD5_H */
diff --git a/org.gridsite.core/.cvsignore b/org.gridsite.core/.cvsignore
deleted file mode 100644 (file)
index e970233..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.project
\ No newline at end of file
diff --git a/org.gridsite.core/CHANGES b/org.gridsite.core/CHANGES
deleted file mode 100644 (file)
index e46eee6..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-* Mon Nov 15 2004 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Back out of (most of) redone VOMS support for committing
-  to JRA1 CVS.
-* Thu Oct 19 2004 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.1.3 ====
-* Thu Oct 19 2004 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Fix Bug #5203 from Martijn Steenbakkers <msteenba>
-  by fixing GACLparseEntry in gridsite-gacl.h
-- Change to C style comments (mostly) in gridsite.h and
-  gridsite-gacl.h (fixes part of Bug #4222 from 
-  <aleks@fys.uio.no>)
-- Fix Bug #4225 from <aleks@fys.uio.no> in
-  GRSTgaclCredsFree()
-- Add GRSTx509CachedProxyFind() and findproxyfile
-  command to allow proxies to be found in proxy cache
-- Change GRSTx509StoreProxy() to GRSTx509CacheProxy() for
-  consistency with this and GRSTx509CachedProxyKeyFind()
-* Wed Oct 18 2004 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.1.2 ====
-* Tue Oct 19 2004 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Copy code from delegation prototype into grst_x509.c
-  and include htproxyput.c and grst-delegation.c
-  optional targets (which depend on gSOAP.)
-* Wed Oct 13 2004 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Include per-file patch to GRSTgaclFileFindAclname: 
-  .gacl:FILENAME controls FILENAME if it exists.
-* Tue Jul 27 2004 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.1.1 ====
-* Tue Jul 27 2004 Andrew McNab <mcnab@hep.man.ac.uk>
-- Include HTTP Downgrade support in htcp
-* Sat Jul 24 2004 Andrew McNab <mcnab@hep.man.ac.uk>
-- Include HTTP Downgrade support in mod_gridsite.
-* Thu Jul 22 2004 Andrew McNab <mcnab@hep.man.ac.uk>
-- Begin development version 1.1.x
-* Thu Jul 22 2004 Andrew McNab <mcnab@hep.man.ac.uk>
-- ==== GridSite version 1.1.0 ====
-* Mon Jul 19 2004 Andrew McNab <mcnab@hep.man.ac.uk>
-- Changes in line with EGEE SCM - most importantly
-  the top level directory becomes org.gridsite.core
-* Mon Jul 19 2004 Andrew McNab <mcnab@hep.man.ac.uk>
-- ==== GridSite version 1.0.3 ====
-* Mon Jun 28 2004 Andrew McNab <mcnab@hep.man.ac.uk>
-- In GRSTx509CheckChain() and GRSTx509CompactCreds()
-  we now accept the first cert in a chain as a CA
-  even if it is X509v3 but without the CA bits set.
-  (On the basis that the first chain is from the 
-  administrator-installed CA files store.)
-* Sun Jun 27 2004 Andrew McNab <mcnab@hep.man.ac.uk>
-- ==== GridSite version 1.0.2 ====
-* Sun Jun 27 2004 Andrew McNab <mcnab@hep.man.ac.uk>
-- Fix for Bug #2860 (so can now read DN Lists over
-  HTTPS when have no user certificate if relevant
-  .gacl gives <read> permission but not <list>)
-- Include gridsite-gacl.h mods from Daniel Kouril
-  <kouril@ics.muni.cz> to fix faulty definitions
-  of GACLnewEntry() and GACLnewAcl() and to make
-  a legacy non-static GACLparseEntry() wrapper.
-* Thu Jun 17 2004 Andrew McNab <mcnab@hep.man.ac.uk>
-- Changes to mod_gridsite.h for Fedora Core 2 /
-  Apache 2.0.49+ mod_ssl changes (mod_ssl-private.h)
-* Wed Jun 9 2004 Andrew McNab <mcnab@hep.man.ac.uk>
-- Incorporate EGEE CVS layout changes in production
-  branch.
-* Wed Jun 9 2004 Andrew McNab <mcnab@hep.man.ac.uk>
-- ==== GridSite version 1.0.1 ====
-* Sun Dec 14 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- 1.0.0 is first full production release
-  (development now in 1.1.x branch)
-* Sun Dec 14 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- ==== GridSite version 1.0.0 ====
-* Sat Dec 13 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- Remove need for modified mod_ssl-gridsite: now
-  mod_gridsite intercepts callbacks with wrappers.
-- Add GRSTx509NameCmp() which compares string reps of
-  DNs across OpenSSL version changes (ie Email=)
-* Fri Dec 12 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- ==== GridSite version 0.9.11 ====
-* Thu Dec 11 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- Simplify checking of cert/proxy chain in 
-  mod_ssl-gridsite: rely on mod_ssl/OpenSSL more.
-* Wed Dec 2 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- ==== GridSite version 0.9.10 ====
-* Tue Dec 1 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- GACL ignores leading/trailing spaces in values.
-* Sat Nov 29 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- Better directory listing in htcp.
-- htcp now built as separate binary RPM.
-- gridsite-admin.cgi upload now redirects to same
-  directory after upload (Bug #1939); allows
-  optional new name for file (Request / Bug #1940);
-  and has better checking of ../dir/file attacks.
-* Sat Nov 29 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- ==== GridSite version 0.9.8 ====
-* Thu Nov 27 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- Shiv's updated GACL editor, with redirects.
-* Wed Nov 26 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- Include Daniel Stenberg's roffit script to make
-  HTML man pages for htcp and urlencode.
-- Various fixes found when installing GridPP WWW.
-* Wed Nov 26 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- ==== GridSite version 0.9.7 ====
-* Thu Nov 20 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- Major updates to htcp (htrm/htls/htll)
-- GACL now recurses subdirectories when examining
-  the DN List directories path.
-* Sat Nov 15 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- ==== GridSite version 0.9.6 ====
-* Fri Nov 14 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- Function call fixes in grst-admin.cgi
-* Thu Nov 13 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- Add htcp (curl-url-get reborn)
-* Thu Nov 13 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- ==== GridSite version 0.9.5 ====
-* Thu Nov 13 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- More grst-admin.cgi GACL updates from Shiv.
-- .gacl security improvements to grst-admin.cgi from
-  Shiv Kaushal and Peter Moore.
-* Tue Nov 11 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- One RPM instead of three, with version from VERSION
-- Textarea for HTML/Text editing now 80 columns
-* Mon Nov 10 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- Add delegation level and GridSiteGSIProxyLimit
-  support.
-- Add GridSiteAdminList handling to mod_gridsite
-  and real-gridsite-admin.cgi
-* Sun Nov 9 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- Add directory create/delete, and file/dir rename.
-- Add ZIP listing/unzipping via external unzip
-  utility from http://www.info-zip.org/pub/infozip/
-* Mon Nov 3 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- Include next version of Shiv's GACL editor.
-- Add rpm-usr target to Makefile, to make RPMs
-  out-of-the-box compatible with RH9 and its Apache2
-- Use REMOTE_DOUBLE_REV for GACL hostname creds in
-  mod_gridsite.c/mod_gridsite_perm_handler()
-* Sun Oct 26 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- Include GACL editor in real-gridsite-admin.cgi
-  from Shiv Kaushal <shiv@hep.man.ac.uk>
-* Sun Oct 26 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- Reorganise into a single build tree, including
-  Apache 2.0 .h files to remove circular dependency.
-* Sun Oct 26 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- ==== GridSite version 0.9.4 ====
-* Sun Oct 19 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- Include many pieces of GridSite code from 0.3.x (CGI)
-  fileGridSite and mod_gridsite 0.9.0
-* Sun Oct 19 2003 Andrew McNab <mcnab@hep.man.ac.uk>
-- ==== GridSite version 0.9.3 ====
diff --git a/org.gridsite.core/INSTALL b/org.gridsite.core/INSTALL
deleted file mode 100644 (file)
index 3da6cde..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-BUILDING/INSTALLING GRIDSITE
-============================
-
-For more detailed instructions, see the install.html file, either
-in the ./doc subdirectory in the sources, in the directory
-gridsite-VERSION/html of the docs directory when GridSite is
-installed, or http://www.gridsite.org/1.1.x/install.html
-
-GridSite is currently only supported on Linux, but should be
-trivially portable to other Unix platforms where the GNU build
-tools are available.
-
-When building from source, two routes are available: building
-with Make or with RPM.
-
-BUILDING WITH MAKE
-==================
-
-make 
-make install
-
-will build all components and install them all under the default
-locations of /usr/local/[lib|bin|include|sbin] The default prefix
-/usr/local is set by the prefix variable in the top level Makefile
-
-BUILDING WITH RPM
-=================
-
-For RedHat Linux and derivatives, building with RPM is recommended.
-The command
-
-make rpm
-
-will build the gridsite and htcp binary RPMs in the directory
-../RPMTMP/RPMS/i386 relative to the working directory. A SRPM is 
-put into ../RPMTMP/SRPMS
-
-Building with RPM uses the default prefix /usr, although the
-resulting RPMs are relocatable to other hierarchies.
diff --git a/org.gridsite.core/LICENSE b/org.gridsite.core/LICENSE
deleted file mode 100644 (file)
index ce67433..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-Copyright (c) 2002-4, Andrew McNab and Shiv Kaushal,
-University of Manchester. All rights reserved.
-
-Redistribution and use in source and binary forms, with or
-without modification, are permitted provided that the following
-conditions are met:
-
-  o Redistributions of source code must retain the above
-    copyright notice, this list of conditions and the following
-    disclaimer. 
-  o 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. 
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-
-                                                                                
-Clearly marked portions of the published GridSite source code 
-are derived from Apache httpd or its modules, and are covered
-by the Apache Software License:
-
-Copyright 2001-2004 The Apache Software Foundation
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/org.gridsite.core/README b/org.gridsite.core/README
deleted file mode 100644 (file)
index 62730a6..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-See INSTALL for build and installation instructions, and 
-the Documentation section of http://www.gridsite.org/
-for configuration and usage guides.
diff --git a/org.gridsite.core/VERSION b/org.gridsite.core/VERSION
deleted file mode 100644 (file)
index 372ce91..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-MAJOR_VERSION=1
-MINOR_VERSION=1.1
-PATCH_VERSION=1.1.3
-VERSION=$(PATCH_VERSION)
diff --git a/org.gridsite.core/build.xml b/org.gridsite.core/build.xml
deleted file mode 100644 (file)
index a214d0a..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Build file for the Gridsite Core Subsystem
-       
-       Authors: Alberto Di Meglio <alberto.di.meglio@cern.ch>          
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.6  2004/11/13 10:55:44  glbuild
-       Added artifacts RPMS directory
-       
-       Revision 1.5  2004/10/29 22:55:07  dimeglio
-       Use envset target
-       
-       Revision 1.4  2004/10/28 23:00:14  dimeglio
-       Removed post-subsystem entry
-       
-       Revision 1.3  2004/10/27 11:19:17  dimeglio
-       Fixed i386 instead of 1386
-       
-       Revision 1.2  2004/10/27 11:18:38  dimeglio
-       Use os.platform instead of hard-coded rhel30
-       
-       Revision 1.1  2004/10/26 17:54:24  dimeglio
-       First version of this file
-       
--->
-
-<project name="gridsite-core" default="dist">
-
-       <description>
-               Ant build file to build the Gridsite Core Component
-       </description>
-       
-       <!-- =========================================
-            Import properties (order is important) 
-            ========================================= -->
-       
-       <!-- Import baseline & user properties -->
-       <import file="../org.glite/project/baseline.properties.xml" />
-
-       <!-- Import subsystem build properties, 
-                             subsystem properties & 
-                             subsystem common properties -->
-       <import file="./project/properties.xml" />
-
-       <!-- Import global build properties and global properties -->
-       <import file="${global.properties.file}" />
-                               
-       <!-- =========================================
-                Load dependencies properties files (order is important) 
-            ========================================= -->
-       <property file="${user.dependencies.file}"/>
-       <property file="${subsystem.dependencies.file}"/>
-       <property file="${global.dependencies.file}"/>  
-       
-       <!-- =========================================
-                Load configure options
-               ========================================= -->
-        <import file="${global.configure.options.file}"/>
-               <import file="${component.configure.options.file}"/>
-               
-       <!-- =========================================
-                Import global task definitions
-            ========================================= -->
-       <import file="${global.taskdefs.file}" />
-       
-       <!-- =========================================
-            Import global compiler definitions
-            ========================================= -->
-       <import file="${global.compilerdefs.file}" />
-               
-       <!-- =========================================
-                Import targets 
-            ========================================= -->
-       <import file="${global.targets-common.file}" />
-       
-       <!-- =========================================
-                Load version file 
-            ========================================= -->
-       <property file="${module.version.file}"/>
-       
-       <!-- ===============================================
-                 Public common targets
-            =============================================== -->
-       
-        <var name="global.prefix" unset="true"/>
-        <property name="global.prefix" value="gridsite"/>
-
-       <target name="localinit" depends="envcheck">
-               <mkdir dir="${stage.dir}" />
-               <mkdir dir="${dist.dir}" />
-       </target>
-
-       <target name="init" depends="localinit">
-               <echo>${global.prefix}</echo>
-       </target>
-
-       <target name="checkstyle" depends="init">
-       </target>
-
-       <target name="compile" depends="checkstyle">
-               <if>
-                       <isset property="build.make.arguments"/>         
-                       <then>
-                               <!-- Call make default compile target -->       
-                               <make target="build" dir="${module.src.dir}" failonerror="${failonerror}" args="${build.make.arguments}"/>
-                       </then>          
-                       <else>   
-                               <!-- Call make default compile target -->       
-                               <make target="build" dir="${module.src.dir}" failonerror="${failonerror}"/>
-                       </else>          
-               </if>    
-       </target>
-
-       <target name="compiletest" depends="compile">
-       </target>
-
-       <target name="unittest" depends="compiletest">
-       </target>
-
-       <target name="unitcoverage" depends="unittest">
-       </target>
-
-       <target name="doc" depends="unitcoverage">
-       </target>
-
-    <target name="stage" depends="doc">
-               <if>
-                       <isset property="build.make.arguments"/>         
-                       <then>
-                               <!-- Call make default compile target -->       
-                               <make target="install" dir="${module.src.dir}" failonerror="${failonerror}" args="${build.make.arguments}"/>
-                       </then>          
-                       <else>   
-                               <!-- Call make default compile target -->       
-                               <make target="install" dir="${module.src.dir}" failonerror="${failonerror}"/>
-                       </else>          
-               </if>    
-    </target>
-
-       <target name="dist" depends="stage">
-               <make target="rpm" dir="${module.src.dir}" failonerror="${failonerror}"/>
-               <exec dir="${module.dir}/RPMTMP/BUILDROOT/usr" executable="tar">
-                       <arg line="-czf ${module.dir}/gridsite-${module.version}_bin.tar.gz ." />
-               </exec>
-               <copy file="gridsite-${module.version}_bin.tar.gz" todir="${dist.dir}"/>
-               <copy file="gridsite-${module.version}.src.tar.gz" tofile="${dist.dir}/gridsite-${module.version}_src.tar.gz"/>
-               <copy todir="${dist.dir}/${os.platform}/i386/RPMS">
-                       <fileset dir="${module.dir}/RPMTMP/RPMS/i386">
-                               <include name="*.rpm"/>
-                       </fileset>
-               </copy>
-               <delete dir="${module.dir}/RPMS"/>
-               <mkdir dir="${module.dir}/RPMS"/>
-                <copy todir="${module.dir}/RPMS">
-                        <fileset dir="${module.dir}/RPMTMP/RPMS/i386">
-                                <include name="*.rpm"/>
-                        </fileset>
-                </copy>
-               <delete>
-                       <fileset dir="${module.dir}">
-                               <include name="*.tar.gz"/>
-                       </fileset>
-               </delete>
-               <delete dir="RPMTMP"/>
-       </target>
-
-       <target name="install" depends="localinit">
-               <make target="install" dir="${module.src.dir}" failonerror="${failonerror}"/>
-       </target>
-
-       <target name="all" depends="dist">
-       </target>
-
-       <target name="clean" depends="envcheck">
-               <property name="offline.repository" value="true" />
-               <make target="clean" dir="${module.src.dir}" failonerror="false"/>
-               <delete dir="${module.dir}/src/doxygen"/>
-               <delete>
-                       <fileset dir="${module.dir}/src">
-                               <include name="*.o"/>
-                               <include name="*.so"/>
-                               <include name="*.so.*"/>
-                               <include name="*.a"/>
-                               <include name="rm -rf urlencode"/>
-                       </fileset>
-               </delete>
-               <delete dir="${module.dir}/RPMS"/>
-       </target>
-
-       <target name="cleanAll" depends="clean"/>
-
-       <!-- ===============================================
-                Private targets
-            =============================================== -->
-       
-       <!-- ===============================================
-                Modules proxy targets
-            =============================================== -->
-
-       <!-- component targets definitions tag = do not remove = -->
-
-
-       <!-- Main proxy -->
-       <target name="buildmodules" depends="envset"/>
-
-</project>
-
diff --git a/org.gridsite.core/doc/README.htcp-bin b/org.gridsite.core/doc/README.htcp-bin
deleted file mode 100644 (file)
index ac546fc..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Binaries (and links) are in ./bin; man pages are in ./man/man1
-
-Install by copying binaries/links onto your path, or by copying htcp
-and making symbolic links to htcp from htls, htll, htrm and htmkdir.
-
-All the .1 man pages should be copied to a suitable ./man/man1 
-directory on your man path.
-
-If you just want to install htcp in /usr/local, then unpacking this
-tgz file in /usr/local should do the trick. (Delete this README when
-you're finished!)
-
-For more about htcp see http://www.gridsite.org/
diff --git a/org.gridsite.core/doc/admin.html b/org.gridsite.core/doc/admin.html
deleted file mode 100644 (file)
index 1f7f422..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-<title>GridSite Admin Guide</title>
-<body>
-<h1 align=center>GridSite Admin Guide</h1>
-
-<p> 
-This Guide is intended for people administrating areas of GridSite
-websites or fileservers, or managing GridSite's DN List groups - that is,
-how to use GridSite to manage other people's access to parts of the site - 
-for example,  people's write access to areas devoted to specific subprojects.
-
-<p>
- There is a separate 
-<a href="user.html">User Guide</a>
- which explains how to authenticate to the server with X.509 certificates,
-and how to manage files via a standard web browser or with command-line
-HTTPS clients. You should be familiar with the User Guide to fully
-understand this Admin Guide. 
-
-<p>
- You may also find the 
-<a href="config.html">Config Guide</a> 
- useful to understand how the Apache webserver is configured with GridSite
-extensions. If you are also the Apache webmaster for your site, you will
-definitely need to read the Config Guide to create the httpd.conf file.
-However, if you only need to manage webpages and files, then this Admin
-Guide and the User Guide should be sufficient.
-
-<h2>Groups and DN Lists</h2>
-
-<p>
-GridSite defines groups of people using plain text DN Lists - that is, lists
-of people's certificate DNs. Each DN List has a URL which uniquely
-identifies the list (and may also allow other sites to obtain the list and
-use it themselves.) For example, the list of all GridPP members is
-https://www.gridpp.ac.uk/dn-lists/gridpp (note that it's https:// not
-http:// - this means that other sites that download the list can check the
-certificate of www.gridpp.ac.uk and know they're talking to the
-authoritative source of the lists.)
-
-<p>
-The system can also have a number of other DN Lists which are associated with
-specific groups of people and perhaps with specific areas of responsibility
-of the website. If the DN List directory URI is /dn-lists/ then
-there is a full list of the DN Lists exported by the server at that URI
-(for example, https://www.gridpp.ac.uk/dn-lists/&nbsp;)
-
-<p>
-If you have permission to modify a DN List, you can start changing it by
-going to /dn-lists/ (via HTTPS), using the &quot;Manage directory&quot;
-button and finding the URL of your DN List in the listings. You may
-need to go down into a subdirectory to find your list. For
-example, https://www.gridpp.ac.uk/dn-lists/atlas is in the atlas
-subdirectory of /dn-lists/ (You may wish to bookmark the listing of such
-a directory if you frequently work with one.)
-
-<p>
-DN List directories are managed by the ACLs described in the next section,
-and if you have write permission, you can edit the lists already there, and
-add new lists with the same prefix (this means you can readily create your
-own subgroups.)
-
-<h2>Access Control Lists</h2>
-
-<p>
-DN Lists appear in the Grid Access Control Lists (GACL) used by GridSite.
-These are stored as .gacl files in directories: if the .gacl file is
-present, it governs access to the directory; if it is absent, then the
-parent directories are searched upwards until a .gacl is found.
-
-<p>
-The GridSite <a href="gacl.html">GACL Reference</a> explains the XML format
-of these files, but they
-can be edited using the ACL editor built into the GridSite system by people
-who have the Admin permission within the ACL.
-
-<p>
-If you have this permission in a given directory, when you view directory
-listings or files in that directory you will see the option &quot;Manage
-Directory&quot; in the page footer. This allows you to get a listing of the
-directory and the .gacl file will appear at the top if it's present. If not,
-then there will be a button to create a new .gacl file with the same
-permissions as have been inherited by that directory from its parent.
-
-<p>
-GACL allows quite complex conditions to be imposed on access, but normally
-you can think of an ACL as being composed of a number of entries, each of
-which contains one condition (the required credential) and a set of allowed
-and denied permissions.
-
-<p>
-Credentials can be individual user's certificate names or whole groups of
-certificate names if a DN List is given. (You can also specifiy hostname
-patterns using Unix shell wildcards (eg *.ac.uk) or EDG VOMS attribute
-certificates - see the GACL Reference for details.)
-
-<p>
-Permissions can be Admin (edit the ACL), Write (create, modify or delete
-files), List (browse the directory) or Read (read files.) Permissions can be
-allowed or denied. If denied by any entry, the permission is not available
-to that user or DN List (depending on what credential type was associated
-with the Deny.)
-
-</body>
diff --git a/org.gridsite.core/doc/build-apache2.sh b/org.gridsite.core/doc/build-apache2.sh
deleted file mode 100644 (file)
index 507be31..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/sh
-#
-#   Copyright (c) 2002-3, Andrew McNab, University of Manchester
-#   All rights reserved.
-#
-#   Redistribution and use in source and binary forms, with or
-#   without modification, are permitted provided that the following
-#   conditions are met:
-#
-#     o Redistributions of source code must retain the above
-#       copyright notice, this list of conditions and the following
-#       disclaimer.
-#     o 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.
-#
-#   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-#   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-#
-#---------------------------------------------------------------
-# For more information about GridSite: http://www.gridsite.org/
-#---------------------------------------------------------------
-#
-# This script takes an Apache .tar.gz as the single command line argument,
-# unpacks the file, modifies the httpd.spec it contains to work without
-# the "-C" option to configure (which RedHat 7.3 doesnt like) and
-# outputs source and binary RPMs in SRPMS and RPMS/i386
-
-if [ "$1" = "" ] ; then
- echo Must give a tar.gz file name
- exit
-fi
-
-export MYTOPDIR=`pwd`
-
-if [ -x /usr/bin/rpmbuild ] ; then
- export RPMCMD=rpmbuild
-else
- export RPMCMD=rpm
-fi
-
-echo "$1" | grep '\.tar\.gz$' >/dev/null 2>&1
-if [ $? = 0 ] ; then # a gzipped source tar ball
-
- rm -Rf $MYTOPDIR/BUILD $MYTOPDIR/BUILDROOT $MYTOPDIR/SOURCES
- mkdir -p $MYTOPDIR/SOURCES $MYTOPDIR/SPECS $MYTOPDIR/BUILD \
-          $MYTOPDIR/SRPMS $MYTOPDIR/RPMS/i386 $MYTOPDIR/BUILDROOT
- shortname=`echo $1 | sed 's:^.*/::' | sed 's:\.tar\.gz$::'`
-
- cp -f $1 SOURCES
-
- tar zxvf SOURCES/$shortname.tar.gz $shortname/httpd.spec
- cp -f $shortname/httpd.spec SPECS
-
- sed -e 's/configure -C /configure /' \
-              SPECS/httpd.spec >SPECS/httpd-2.spec
-
- $RPMCMD --define "_topdir $MYTOPDIR" \
-        -ba --buildroot $MYTOPDIR/BUILDROOT SPECS/httpd-2.spec
-
- exit
-fi
-
-echo I dont recognise the file type (must be .tar.gz)
-
-exit
diff --git a/org.gridsite.core/doc/config.html b/org.gridsite.core/doc/config.html
deleted file mode 100644 (file)
index 825bf49..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-<title>GridSite Config Guide</title>
-<body>
-<h1 align=center>GridSite Config Guide</h1>
-
-<p> 
-This Guide is intended for webmasters setting up 
-<a href="http://www.gridsite.org/">GridSite</a> with an Apache 2.0
-webserver. We assume you have root access to the server machine to do this.
-There is a separate <a href="admin.html">Admin Guide</a> for
-people administrating areas of GridSite
-websites or fileservers, or managing GridSite's DN List groups. That is, for
-people managing files on the server rather than the server itself.
-
-<h2>Installation</h2>
-
-<p>
-We assume you have installed Apache 2.0 and GridSite, using the
-<a href="install.html">Building and Installation Guide</a> where necessary.
-This Config Guide assumes installation has been done under /usr. For an
-alternative tree like /usr/local, the relative paths should be the same.
-
-<p>
-Installation should have given you an Apache 2.0 httpd binary at
-/usr/sbin/httpd and a set of standard Apache 2.0 modules in
-/usr/lib/httpd/modules/ including the standard mod_ssl
-and our mod_gridsite.so module.
-
-<p>
-GridSite also includes some commands and man pages in /usr/bin and
-/usr/share/man/man1: <a href="urlencode.1.html">urlencode</a> and
-<a href="htcp.1.html">htcp</a>.
-
-<h2>Certificates</h2>
-
-<p>
-You must also install the CA root certificates of the CA's 
-used by the users you wish to talk to. These should be installed in
-/etc/grid-security/certificates as files like 01621954.0, and RPMs and tar
-files for many common European and North American CAs are available from
-<a href="https://datagrid.in2p3.fr/distribution/datagrid/security/">
-https://datagrid.in2p3.fr/distribution/datagrid/security/</a>
-
-<p>
-This location also has VOMS server certificate RPMs which install into
-the /etc/grid-security/vomsdir directory. You may also manually install VOMS
-server certificates into that directory with any filename. (GridSite
-currently parses the certificate itself when looking for a match, rather
-than checking the filename.)
-
-<p>
-The server itself needs a certificate to supply to clients that use HTTPS
-connections. You should apply for this from your Certification Authority
-(for example, the <a href="http://ca.grid-support.ac.uk/">UK e-Science
-CA</a>) and your request must use the advertised hostname of your server
-(the one that appears in URLs and not, for instance, the canonical name of
-the host itself.) This advertised hostname should appear in the
-Distinguished Name of your request. (For example
-/C=UK/O=eScience/OU=Manchester/L=HEP/CN=www.gridpp.ac.uk) For compatability
-with standard browsers, the /CN= component should not include any
-Globus-style service name (so <b>not</b> /CN=host/www.gridpp.ac.uk) If
-possible, you should also include the advertised hostname as a DNS Subject
-Alternative Name. Consult your CA first if you're in any doubt about how to
-compose your certificate request.
-
-<p>
-Once you've got your certificate, 
-Apache uses the certificate and private key in PEM format. If you obtained
-your certificate and key in PKCS#12 or .p12 format (eg by exporting from a web
-browser), you can convert the .p12 file to .pem with the following commands:
-<pre>
-openssl pkcs12 -in ck.p12 -clcerts -nokeys -out hostcert.pem
-openssl pkcs12 -in ck.p12 -nodes  -nocerts -out hostkey.pem
-</pre>
-
-<p>
-Copy the PEM files to /etc/grid-security/ as hostcert.pem (which
-should be world readable) and hostkey.pem (which should only be readable by
-root):
-
-<pre>
-chown root.root hostkey.pem hostcert.pem
-chmod 400 hostkey.pem
-chmod 444 hostcert.pem
-</pre>
-
-<h2>httpd.conf</h2>
-
-<p>
-/etc/httpd/conf/httpd.conf is the key to configuring the Apache 2.0
-webserver. The directives in this file determine which files the server will
-publish, how they are handled, which areas are writeable and who can access
-them. Through mod_gridsite.so, the GridSite system itself is configured by
-directives in this file.
-
-<p>
-The easiest way to get started is to examine the example httpd.conf files we
-provide. 
-
-<!--
-virtual servers
-directory sections
-order of loadable modules
--->
-
-<h2>httpd-fileserver.conf</h2>
-
-<p>
-<a href="httpd-fileserver.conf">httpd-fileserver.conf</a> is an example
-configuration file to use Apache/GridSite as a read/write HTTP(S)
-fileserver, including comments on how to get the server up and running.
-
-<h2>httpd-webserver.conf</h2>
-
-<p>
-<a href="httpd-webserver.conf">httpd-webserver.conf</a> is an example
-configuration file to use Apache/GridSite as a Web Server
-(that is, primarily for interactive use with a browser)
-including comments on how to get the server up and running.
-
-<h2>GridSite Directives</h2>
-
-<p>
-The <a href="module.html">mod_gridsite reference</a> lists all the GridSite
-httpd.conf directives. 
-
-<p>
-To start serving files, make a directory /var/www/htdocs owned by
-nobody.nobody, including the .gacl access control file described below,
-and add the following directive to the HTTPS &lt;Directory&gt; section:
-
-<p>
-GridSiteMethods GET PUT DELETE
-
-<p>
-If you wish to accept Globus GSI Proxies as well as full X.509 user
-certificates, set GridSiteGSIProxyLimit to the depth of proxy you
-wish to accept. (As a _rough_ guide: 0=No Proxies; 1=Proxy on user's
-machine; 2=Proxy owned by running Globus job; 3=Proxy delegated by a
-Globus job.)
-
-<h2>GACL access control</h2>
-
-<p>
-The <a href="gacl.html">GACL reference</a> explains the XML access
-control files used by GridSite. These allow flexible policies to be written,
-in terms of X.509 user certificates, GSI proxies, VOMS attribute
-certificates, DN List groups and DNS hostnames.
-
-<p>
-For example, to give all clients read and list permission:
-<p>
-<pre>
-&lt;gacl&gt;
-&lt;entry&gt;
-  &lt;any-user/&gt;
-  &lt;allow&gt;&lt;read/&gt;&lt;list/&gt;&lt;/allow&gt;
-&lt;/entry&gt;
-&lt;/gacl&gt;
-</pre>
-
-<p>
-To enable writing, add DN List, Person or VOMS entries to the file.
-For example:
-
-<p>
-<pre>
-&lt;gacl&gt;
-&lt;entry&gt;
-  &lt;any-user/&gt;
-  &lt;allow&gt;&lt;read/&gt;&lt;list/&gt;&lt;/allow&gt;
-&lt;/entry&gt;
-&lt;entry&gt;
-  &lt;person&gt;
-  &lt;dn&gt;/C=UK/O=eScience/OU=Manchester/L=HEP/CN=Andrew McNab&lt;/dn&gt;
-  &lt;/person&gt;
-  &lt;allow&gt;&lt;write/&gt;&lt;/allow&gt;
-&lt;/entry&gt;
-&lt;/gacl&gt;
-</pre>
-
-<p>
-The GACL file that governs a directory is stored as .gacl in that directory.
-If no .gacl is present, then GridSite will search the parent directories in
-ascending order until one is found.
-
-<!--
-<h2>DN Lists</h2>
-<h2>gridsite-admin.cgi</h2>
-<h2>Other CGI</h2>
--->
-
-</body>
diff --git a/org.gridsite.core/doc/findproxyfile.1 b/org.gridsite.core/doc/findproxyfile.1
deleted file mode 100644 (file)
index ae2f944..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-.TH findproxyfile 1 "October 2004" findproxyfile "FINDPROXYFILE Manual"
-.SH NAME
-.B findproxyfile
-\- returns full path to GSI Proxy file
-.SH SYNOPSIS
-.B findproxyfile 
-[--proxycache=PATH] [--delegation-id=ID] [--user-dn=DN] [--outsidecache]
-.SH DESCRIPTION
-.B findproxyfile
-returns full path to a GSI Proxy file, either in the proxy cache maintained
-by the GridSite G-HTTPS and delegation portType functions, or in other
-standard places.
-
-If a User DN is given
-.B findproxyfile 
-uses the value of the 
-.B --proxycache
-argument, the GRST_PROXY_PATH or the
-compile time default to detemine the location of the proxy cache directory.
-The directory is searched for a proxy having the given User DN and 
-Delegation ID. (If no Delegation ID is specificed, then the default value is
-used.)
-
-If
-.B findproxyfile
-does not find a proxy or if a User DN is not given, but
-.B --outsidecache
-was given, then the environment variable X509_USER_PROXY and the standard
-location /tmp/x509up_uUID are searched as well.
-
-.SH OPTIONS
-
-.IP "--proxycache=PATH"
-Give the path of the proxy cache directory explicitly, overriding the
-default and the GRST_PROXY_PATH environment variable if present.
-
-.IP "--delegation-id=ID"
-The optional delegation ID is search for in the proxy cache in addition to
-the User DN. If absent, the default Delegation ID value is searched for.
-
-.IP "--user-dn=DN"
-The DN of the full user certificate associated with the proxy to be searched
-for in the proxy cache. (This is not the DN of any proxy earlier in the
-chain: it is a the DN of a certificate issued by a recognised CA.)
-
-.IP "--outsidecache"
-If a User DN is not given, or a proxy not found in the cache, then search
-for a proxy using X509_USER_PROXY environment variable and file name of
-form /tmp/x509up_uUID as well.
-
-.SH RETURN VALUE
-If a proxy is found, its full path is output on standard out.
-
-.SH EXIT CODES
-0 is returned on succcess. Non-zero otherwise.
-
-.SH BUGS
-In this version, no attempt is made to verify or validate the proxies.
-
-.SH AUTHOR
-Andrew McNab <Andrew.McNab@man.ac.uk>
-
-findproxyfile is part of GridSite: http://www.gridsite.org/
diff --git a/org.gridsite.core/doc/gacl.html b/org.gridsite.core/doc/gacl.html
deleted file mode 100644 (file)
index 40efdd2..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-<title>GridSite: Grid Access Control Language</title>
-<body>
-<h1 align=center>GridSite: Grid Access Control Language</h1>
-
-<p> 
-GACL is the authorization policy language used by 
-<a href="http://www.gridsite.org/">GridSite</a> GACL allows
-policies to be written in terms of common Grid credentials: X.509
-identities, GSI proxies, VOMS attribute certificates and lists of X.509
-identities.
-
-<p>
-GridSite both uses GACL policies and provides a GACL manipulation API for
-C/C++ in the GridSite library.
-
-<h2>Credentials</h2>
-
-<p>
-In GridSite 1.0.x, four credential types are supported:
-
-<p>
-&lt;person&gt;
-&lt;dn&gt;/O=Grid/CN=Name&lt;/dn&gt;
-&lt;/person&gt;
-
-<p>
-&lt;voms&gt;
-&lt;fqan&gt;/vo.dom.ain/group&lt;/fqan&gt;
-&lt;/voms&gt;
-
-<p>
-&lt;dn-list&gt;
-&lt;url&gt;https://www.vo.dom.ain/dn-lists/group&lt;/url&gt;
-&lt;/dn-list&gt;
-
-<p>
-&lt;dns&gt;
-&lt;hostname&gt;host*.dom.ain&lt;/hostname&gt;
-&lt;/dns&gt;
-
-<h2>Permissions</h2>
-
-<p>
-Five permissions are supported: Admin, Write, List, Exec and Read. Admin is
-permission to modify the authorization policy itself, but applications can
-map the other permissions to local methods as appropriate to their
-environment. For filesystems and fileservers, Write, List and Read have
-their usual meanings: creating or modifying files or directories; browsing
-directories; reading files. Exec is not used by GridSite itself, and
-applications are free to give it a meaning within their own contexts.
-
-<p>
-In 1.0.x, only per-directory GACL files are supported, and the file is stored
-in the directory in question, or in one of its parent directories. (GridSite
-searches upwards until it finds one.)
-
-<p>
-In GACL files, the permissions are represented by single tags:
-&lt;admin/&gt;, &lt;write/&gt;, &lt;list/&gt;, &lt;exec/&gt;, &lt;read/&gt;.
-Permission
-tags are contained within Allow or Deny blocks. For example: 
-&lt;allow&gt;&lt;read/&gt;&lt;list/&gt;&lt;/allow&gt; or 
-&lt;deny&gt;&lt;admin/&gt;&lt;/deny&gt;.
-
-<h2>Entries</h2>
-
-<p>
-Entries associate credentials with permission statements. Entries consist of
-one or more credential blocks, and either an Allow or a Deny block, or both. 
-If multiple credentials are present in one entry, they must all be held by a
-user to receive the association permissions. (So Entries provide logical AND
-of credentials.)
-
-<h2>Access Control Lists</h2>
-
-<p>
-ACLs consist of a list of one or more Entry blocks. When a user's credentials
-are compared to the ACL, the permissions given to the user by Allow blocks
-are recorded, along with those forbidden by Deny blocks. When all entries 
-have been evaluated, any forbidden permissions are removed from those
-granted. (So Deny always wins over Allow, even between different Entries,
-but otherwise ACLs provide logical OR of credentials.)
-
-</body>
diff --git a/org.gridsite.core/doc/htcp.1 b/org.gridsite.core/doc/htcp.1
deleted file mode 100644 (file)
index 984aaaf..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-.TH htcp 1 "July 2004" htcp "HTCP Manual"
-.SH NAME
-.B htcp, htrm, htls, htll, htmkdir
-\- get, put, delete or list HTTP/HTTPS files or directories
-.SH SYNOPSIS
-.B htcp [options]
-.I Source-URL[s] [Destination URL]
-.SH DESCRIPTION
-.B htcp
-is a client to fetch files or directory listings from remote servers using
-HTTP or HTTPS, or to put or delete files or directories onto remote servers
-using HTTPS. htcp is similar to scp(1), but uses HTTP/HTTPS rather than ssh
-as its transfer protocol.
-
-When talking to an HTTPS server, htcp can run "anonymously", with a
-standard X.509 user certificate and key, or with a GSI Proxy. This makes
-htcp very useful in Grid environments where many users have certificates
-and where jobs and users have access to GSI proxies.
-
-.SH URLs
-htcp supports the file:, http: and https: URL schemes as sources and
-destinations. If no scheme is given, the URL scheme is assumed to be file:
-and relative to the current directory if not an absolute path.
-
-If multiple sources are given, they will be used in turn and the destination
-must be a directory (directories are indicated by a trailing /) However,
-source and destination cannot both refer to remote servers.
-
-.SH OPTIONS
-.IP "-v/--verbose"
-Turn on debugging information. Used once, this option will enable htcp's
-messages to stderr. Used twice, will also enable the underlying libcurl
-messages.
-
-.IP "--delete"
-Instead of copying files, delete all the URLs given on the command line.
-Calling the program as htrm has the same effect.
-
-.IP "--list"
-.br
-Instead of copying files, output lists of files located in the URL-directories
-given on the command line. Calling the program as htls has the same effect.
-
-.IP "--long-list"
-Instead of copying files, output long listings of files located in the
-URL-directories given on the command line. If available, the size in bytes
-and modification time of each file is given. Calling the program as 
-htll has the same effect.
-
-.IP "--mkdir"
-Instead of copying files, attempt to create a directory on a remote server
-with HTTP PUT. The server must support the convention that PUT to a URL with
-a trailing slash means create a directory. No file body is sent. Calling the
-program as htmkdir has the same effect.
-
-.IP "--anon"
-.br
-Do not attempt to use X.509 user certificates or GSI proxies to authenticate
-to the remote HTTPS server. This means you are "anonymous", but the server's
-identity may still be verified and the connection is still encrypted.
-
-.IP "--cert <X.509 cert path>  and  --key <X.509 key path>"
-Path to the PEM-encoded
-X.509 or GSI Proxy user certificate and key to use for HTTPS
-connections, intead of "anonymous mode." If only one of --key or --cert
-is given, then that will be tried for both. If neither is given, then the
-following order of precedence is used: 
-the file name held by the variable X509_USER_PROXY; the file
-/tmp/x509up_uID (with Unix UID equal to ID); the file names held by
-X509_USER_CERT / X509_USER_KEY; the files ~/.globus/usercert.pem and
-~/.globus/userkey.pem (where ~/ is the home directory of the user.)
-
-.IP "--capath <X.509 CA root certs directory or file>"
-Path to the PEM-encoded CA root certificates to use when
-verifying remote servers' host certificates in HTTPS connections. Ideally
-this should be a directory of hash.0 files as described in the OpenSSL
-verify(1) man page, but a file may be used instead. If --capath is not
-given, the value of the environment variable X509_CERT_DIR will be tried.
-If this is not valid, then /etc/grid-security/certificates will be used.
-
-.IP "--no-verify"
-Do not use CA root certificates to verify remote servers' host certificates.
-This is useful for testing sites before their certificate is set up properly,
-but leaves you vulnerable to "man in the middle" attacks by hostile servers
-masquerading as your target.
-
-.IP "--downgrade-size <minimum file size for downgrade>"
-Try to use HTTP-Downgrade for HTTPS URLs. Compatible servers will perform
-authentication and authorization on the HTTPS connection and then redirect
-to HTTP for the GET or PUT file transfer. htcp makes the HTTP request using
-the GRID_AUTH_ONETIME single-use passcode obtained via HTTPS. The downgrade
-option will be ignored for directory operations, HTTP URLs, or if the file
-size is less than the value given. If a downgraded transfer isn't possible,
-a normal HTTPS data transfer will be done.
-
-.SH FILES
-.IP /tmp/x509up_uID
-Default GSI Proxy file for Unix UID equal to ID.
-
-.IP /etc/grid-security/certificates
-Default location for trusted Certification Authority root certificates to use
-when checking server certificates.
-
-.IP /tmp/.ca-roots-XXXXXX
-Prior to 7.9.8, the underlying curl library did not support the CA root
-certificates directory.
-If built with an old version of libcurl, htcp will concatenate the
-certificates in the CA roots directory into a unique temporary file and use
-that.
-
-.SH ENVIRONMENT
-
-.IP X509_CERT_DIR
-Holds directory to search for Certification Authority root certificates when
-verifying server certificates. (Tried if --capath is not given on the
-command line.)
-
-.IP X509_USER_PROXY
-Holds file name of a GSI Proxy to use as user certificate. (Tried if --cert or
---key are not given on the command line.)
-
-.IP "X509_USER_CERT and X509_USER_KEY"
-Holds file name of X.509 user certificate and key. (Tried if X509_USER_PROXY
-is not valid.)
-
-.SH EXIT CODES
-0 is returned on complete success. Curl error codes are returned when 
-reported by the underlying curl library, and CURLE_HTTP_RETURNED_ERROR (22) 
-is returned when the HTTP(S) server returns a code outside the range 200-299.
-The manpage libcurl-errors(3) lists all the curl error codes.
-
-.SH TO DO
-Recursive copying. Server-side wildcards. Parallel streams. Error recovery.
-
-.SH BUGS
-Not enough beta testing (hint hint...)
-
-.SH AUTHOR
-Andrew McNab <Andrew.McNab@man.ac.uk>
-
-htcp is part of GridSite: http://www.gridsite.org/
-.SH "SEE ALSO"
-.BR scp(1),
-.BR curl(1),
-.BR wget(1),
-.BR verify(1),
-.BR libcurl-errors(3)
diff --git a/org.gridsite.core/doc/htll.1 b/org.gridsite.core/doc/htll.1
deleted file mode 100644 (file)
index 11a60d1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.so man1/htcp.1
diff --git a/org.gridsite.core/doc/htls.1 b/org.gridsite.core/doc/htls.1
deleted file mode 100644 (file)
index 11a60d1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.so man1/htcp.1
diff --git a/org.gridsite.core/doc/htmkdir.1 b/org.gridsite.core/doc/htmkdir.1
deleted file mode 100644 (file)
index 11a60d1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.so man1/htcp.1
diff --git a/org.gridsite.core/doc/htrm.1 b/org.gridsite.core/doc/htrm.1
deleted file mode 100644 (file)
index 11a60d1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.so man1/htcp.1
diff --git a/org.gridsite.core/doc/httpd-fileserver.conf b/org.gridsite.core/doc/httpd-fileserver.conf
deleted file mode 100644 (file)
index 9bd51e2..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-##############################################################################
-## GridSite httpd-fileserver.conf - Andrew McNab <Andrew.McNab@man.ac.uk>
-##
-## Example configuration file for GridSite as an HTTP(S) fileserver.
-##
-## For GridSite documentation, see http://www.gridsite.org/
-##
-## This file should be renamed /etc/httpd/conf/httpd.conf and Apache
-## restarted to use Apache2/GridSite as a simple HTTP(S) fileserver. 
-##
-## You do not need to install the GridSite mod_ssl.so module if you
-## do not wish to use Globus Proxies or VOMS attributes, but you must
-## have the mod_gridsite.so in /usr/lib/httpd/modules 
-##
-## We're assuming you have (a) the host's hostcert.pem and hostkey.pem 
-## in /etc/grid-security/ and (b) the Certification Authorities' you
-## trust have their root certs in /etc/grid-security/certificates
-##
-## (You can get RPMs for many European and North American Grid CAs
-## from https://datagrid.in2p3.fr/distribution/datagrid/security/ ) 
-##
-## If you want to use DN Lists in ACLs, they should be placed/downloaded
-## in /etc/grid-security/dn-lists/
-##
-## To start serving files, make a directory /var/www/htdocs owned by
-## nobody.nobody, including the file .gacl containing:
-##
-## <gacl>
-## <entry>
-##   <any-user/>
-##   <allow><read/><list/></allow>
-## </entry>
-## </gacl>
-##
-## To enable writing, add DN List, Person or VOMS entries to the GACL
-## (see the GridSite GACL document for the syntax.) For example:
-##
-## <gacl>
-## <entry>
-##   <any-user/>
-##   <allow><read/><list/></allow>
-## </entry>
-## <entry>
-##   <person>
-##   <dn>/C=UK/O=eScience/OU=Manchester/L=HEP/CN=Andrew McNab</dn>
-##   </person>
-##   <allow><write/></allow>
-## </entry>
-## </gacl>
-##
-## and add the following directive to the HTTPS <Directory> section:
-##
-## GridSiteMethods GET PUT DELETE
-##
-## If you wish to accept Globus GSI Proxies as well as full X.509 user
-## certificates, set GridSiteGSIProxyLimit to the depth of proxy you
-## wish to accept. 
-##
-## (As a _rough_ guide: 0=No Proxies; 1=Proxy on user's machine; 2=Proxy 
-##  owned by running Globus job; 3=Proxy delegated by a Globus job.)
-##
-## With this done and Apache restarted, you can upload a file with:
-##
-## curl -v --cert ~/.globus/usercert.pem --key ~/.globus/userkey.pem    \
-##  --capath /etc/grid-security/certificates --upload-file /tmp/tmp.txt \
-##  https://INSERT.HOSTNAME.HERE/tmp.txt
-##
-## (or with  --cert /tmp/x509up_u`id -u` --key /tmp/x509up_u`id -u`  to use
-##  a Globus GSI Proxy created with grid-proxy-init.)
-##############################################################################
-
-ServerRoot "/etc/httpd"
-
-PidFile logs/httpd.pid
-
-Timeout                        300
-KeepAlive              On
-MaxKeepAliveRequests   100
-KeepAliveTimeout       15
-
-LoadModule log_config_module   /usr/lib/httpd/modules/mod_log_config.so
-LoadModule ssl_module          /usr/lib/httpd/modules/mod_ssl.so
-LoadModule gridsite_module     /usr/lib/httpd/modules/mod_gridsite.so
-LoadModule mime_module         /usr/lib/httpd/modules/mod_mime.so
-LoadModule dir_module          /usr/lib/httpd/modules/mod_dir.so
-
-TypesConfig /etc/mime.types
-
-# User and group who will own files created by Apache
-User  nobody
-Group nobody
-
-DocumentRoot "/var/www/htdocs"
-
-<Directory />
-    AllowOverride None
-</Directory>
-
-LogLevel debug
-LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
-
-CustomLog      logs/httpd-gridsite-access combined
-ErrorLog       logs/httpd-gridsite-errors
-
-HostnameLookups On
-
-######################################################################
-# Plain unauthenticated HTTP on port 80
-######################################################################
-
-Listen 80
-<VirtualHost *:80>
-
-<Directory "/var/www/htdocs">
- GridSiteIndexes       on
- GridSiteAuth          on
- GridSiteDNlists       /etc/grid-security/dn-lists/
-</Directory>
-
-</VirtualHost>
-
-######################################################################
-# Secured and possibly authenticated HTTPS on port 443
-######################################################################
-Listen 443
-<VirtualHost *:443>
-SSLEngine               on
-SSLCertificateFile      /etc/grid-security/hostcert.pem
-SSLCertificateKeyFile   /etc/grid-security/hostkey.pem
-SSLCACertificatePath    /etc/grid-security/certificates
-#SSLCARevocationPath    YOUR CRL DIRECTORY WOULD GO HERE
-SSLSessionCache         dbm:/var/cache/mod_ssl/scache
-SSLSessionCacheTimeout  300
-SSLVerifyClient         optional
-SSLVerifyDepth          10
-SSLOptions              +ExportCertData +StdEnvVars
-
-<Directory "/var/www/htdocs">
- GridSiteIndexes       on
- GridSiteAuth          on
- GridSiteDNlists       /etc/grid-security/dn-lists/
- GridSiteGSIProxyLimit 0
-# GridSiteMethods      GET PUT DELETE
-</Directory>
-</VirtualHost>
diff --git a/org.gridsite.core/doc/httpd-webserver.conf b/org.gridsite.core/doc/httpd-webserver.conf
deleted file mode 100644 (file)
index da332a0..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-##############################################################################
-## GridSite httpd-webserver.conf - Andrew McNab <Andrew.McNab@man.ac.uk>
-##
-## Example configuration file for GridSite as a Web Server 
-## (that is, primarily for interactive use with a browser.)
-##
-## For GridSite documentation, see http://www.gridsite.org/
-##
-## This file should be renamed /etc/httpd/conf/httpd.conf and Apache
-## restarted to use Apache2/GridSite as a webserver. 
-##
-## You do not need to install the GridSite mod_ssl.so module if you
-## do not wish to use Globus Proxies or VOMS attributes, but you must
-## have the mod_gridsite.so in /usr/lib/httpd/modules 
-##
-## We're assuming you have (a) the host's hostcert.pem and hostkey.pem 
-## in /etc/grid-security/ and (b) the Certification Authorities' you
-## trust have their root certs in /etc/grid-security/certificates
-##
-## (You can get RPMs for many European and North American Grid CAs
-## from https://datagrid.in2p3.fr/distribution/datagrid/security/ ) 
-##
-## If you want to use DN Lists in ACLs, they should be placed/downloaded
-## in /etc/grid-security/dn-lists/ or /var/www/htdocs/dn-lists/ 
-## (Lists in /etc/grid-security/dn-lists/ override lists elsewhere.)
-##
-## To start serving files, make a directory /var/www/htdocs owned by
-## nobody.nobody, including the file .gacl containing:
-##
-## <gacl>
-## <entry>
-##   <any-user/>
-##   <allow><read/><list/></allow>
-## </entry>
-## </gacl>
-##
-## To enable writing, add DN List, Person or VOMS entries to the GACL
-## (see the GridSite GACL document for the syntax.) For example:
-##
-## <gacl>
-## <entry>
-##   <any-user/>
-##   <allow><read/><list/></allow>
-## </entry>
-## <entry>
-##   <person>
-##   <dn>/C=UK/O=eScience/OU=Manchester/L=HEP/CN=Andrew McNab</dn>
-##   </person>
-##   <allow><write/></allow>
-## </entry>
-## </gacl>
-##
-## and add the following directive to the HTTPS <Directory> section:
-##
-## GridSiteMethods GET PUT DELETE
-##
-## If you wish to accept Globus GSI Proxies as well as full X.509 user
-## certificates, set GridSiteGSIProxyLimit to the depth of proxy you
-## wish to accept. 
-##
-## (As a _rough_ guide: 0=No Proxies; 1=Proxy on user's machine; 2=Proxy 
-##  owned by running Globus job; 3=Proxy delegated by a Globus job.)
-##
-## With this done and Apache restarted, you can upload a file with:
-##
-## curl -v --cert ~/.globus/usercert.pem --key ~/.globus/userkey.pem    \
-##  --capath /etc/grid-security/certificates --upload-file /tmp/tmp.txt \
-##  https://INSERT.HOSTNAME.HERE/tmp.txt
-##
-## (or with  --cert /tmp/x509up_u`id -u` --key /tmp/x509up_u`id -u`  to use
-##  a Globus GSI Proxy created with grid-proxy-init.)
-##############################################################################
-
-ServerRoot "/etc/httpd"
-
-## You MUST put your server's fully qualified domain name here
-## This, the DOMAIN part of the https://DOMAIN/... URLs you want
-ServerName FULL.SERVER.NAME
-
-PidFile logs/httpd.pid
-
-Timeout                        300
-KeepAlive              On
-MaxKeepAliveRequests   100
-KeepAliveTimeout       15
-
-LoadModule log_config_module   /usr/lib/httpd/modules/mod_log_config.so
-LoadModule ssl_module          /usr/lib/httpd/modules/mod_ssl.so
-LoadModule gridsite_module     /usr/lib/httpd/modules/mod_gridsite.so
-LoadModule mime_module         /usr/lib/httpd/modules/mod_mime.so
-LoadModule dir_module          /usr/lib/httpd/modules/mod_dir.so
-LoadModule alias_module                /usr/lib/httpd/modules/mod_alias.so
-LoadModule cgi_module          /usr/lib/httpd/modules/mod_cgi.so
-
-TypesConfig /etc/mime.types
-
-# User and group who will own files created by Apache
-User  nobody
-Group nobody
-
-DocumentRoot "/var/www/htdocs"
-
-<Directory />
-    AllowOverride None
-</Directory>
-
-LogLevel debug
-LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
-
-CustomLog      logs/httpd-gridsite-access combined
-ErrorLog       logs/httpd-gridsite-errors
-
-HostnameLookups On
-
-######################################################################
-# Plain unauthenticated HTTP on port 80
-######################################################################
-
-Listen 80
-<VirtualHost *:80>
-
-## This is used to serve the Manage Directory links in footers,
-## and to allow you to edit files and ACLs via your browser.
-ScriptAlias /real-gridsite-admin.cgi /usr/sbin/real-gridsite-admin.cgi
-
-<Directory "/var/www/htdocs">
- ## This sets up GACL authorization for this server.
- GridSiteAuth          on
-
- ## This exports various bits of info into the CGI environment 
- ## variables (and is needed for gridsite-admin.cgi to work.)
- GridSiteEnvs           on
-
- ## Nice GridSite directory listings (without truncating file names!)
- GridSiteIndexes       on
-
- ## If this is on, GridSite will look for gridsitehead.txt and
- ## gridsitefoot.txt in the current directory or its parents, and
- ## use them to replace the <body> and </body> tags in .html files.
- GridSiteHtmlFormat    on
-
- ## These directives (and the ScriptAlias above) allow authorized
- ## people to manage files, ACLs and DN Lists through their web
- ## browsers.  Via HTTP, this just means extended directory listings
- ## and History pages.
- GridSiteAdminURI      /real-gridsite-admin.cgi
- GridSiteAdminFile     gridsite-admin.cgi
-</Directory>
-</VirtualHost>
-
-######################################################################
-# Secured and possibly authenticated HTTPS on port 443
-######################################################################
-Listen 443
-<VirtualHost *:443>
-SSLEngine               on
-SSLCertificateFile      /etc/grid-security/hostcert.pem
-SSLCertificateKeyFile   /etc/grid-security/hostkey.pem
-SSLCACertificatePath    /etc/grid-security/certificates
-#SSLCARevocationPath    YOUR CRL DIRECTORY WOULD GO HERE
-SSLSessionCache         dbm:/var/cache/mod_ssl/scache
-SSLSessionCacheTimeout  300
-SSLVerifyClient         optional
-SSLVerifyDepth          10
-SSLOptions              +ExportCertData +StdEnvVars
-
-## This is used to serve the Manage Directory links in footers,
-## and to allow you to edit files and ACLs via your browser.
-ScriptAlias /real-gridsite-admin.cgi /usr/sbin/real-gridsite-admin.cgi
-
-<Directory "/var/www/htdocs">
- ## This sets up GACL authorization for this server.
- GridSiteAuth          on
-
- ## This exports various bits of info into the CGI environment 
- ## variables (and is needed for gridsite-admin.cgi to work.)
- GridSiteEnvs           on
-
- ## Nice GridSite directory listings (without truncating file names!)
- GridSiteIndexes       on
-
- ## If this is on, GridSite will look for gridsitehead.txt and
- ## gridsitefoot.txt in the current directory or its parents, and
- ## use them to replace the <body> and </body> tags in .html files.
- GridSiteHtmlFormat    on
-
- ## This is the path of directories (and all their subdirectories) for
- ## GACL to search when it encounters a dn-list credential. The DN List
- ## files are plain text, one DN per line, and must have the full url
- ## as the file name, but URL Encoded - eg with urlencode(1)
- GridSiteDNlists /etc/grid-security/dn-lists/:/var/www/htdocs/dn-lists/
-
- ## This is used to form the URL at which DN Lists "owned" by this 
- ## server are exported. https://FULL.SERVER.NAME/dn-lists/file
- ## ALL FILES WITH URLs ON THIS SERVER WILL BE EXPORTED IRRESPECTIVE
- ## OF WHERE THEY ARE FOUND ON THE DN-LISTS PATH!!
- GridSiteDNlistsURI    /dn-lists/
-
- ## If this is greater than zero, we will accept GSI Proxies for clients
- ## (full client certificates - eg inside web browsers - are always ok)
- GridSiteGSIProxyLimit 0
-
- ## This directive allows authorized people to write/delete files 
- ## from non-browser clients - eg with htcp(1)
- GridSiteMethods       GET PUT DELETE
-
- ## These directives (and the ScriptAlias above) allow authorized
- ## people to manage files, ACLs and DN Lists through their web
- ## browsers via HTTPS. The value of GridSiteAdminFile appears to
- ## exist in every directory, but is internally redirected by
- ## mod_gridsite to the value of GridSiteAdminURI (the ScriptAlias
- ## then maps that onto the real-gridsite-admin.cgi executable.)
- GridSiteAdminURI      /real-gridsite-admin.cgi
- GridSiteAdminFile     gridsite-admin.cgi
-</Directory>
-</VirtualHost>
diff --git a/org.gridsite.core/doc/index.html b/org.gridsite.core/doc/index.html
deleted file mode 100644 (file)
index a93f2cb..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-<title>GridSite 1.1.x Documentation</title>
-<body>
-<h1 align=center>GridSite 1.1.x Documentation</h1>
-
-<p>
-<a href="http://www.gridsite.org/">GridSite</a>
-is a set of extensions to the Apache 2.0 webserver, which support 
-Grid security based on X.509 certificates. Since GridSite applies access
-control within Apache itself, via mod_gridsite, Grid authorization and
-the associated verified credentials are available to all technologies
-supported by Apache, including static file serving, SSI, CGI, PHP, JSP and 
-mod_perl.
-
-<h2>Guides</h2>
-
-<p>
-<dl>
-<dt><b><a href="user.html">User Guide</a></b>
-<dd>End-user documentation for people managing webpages and files on
-    GridSite servers, either through the web interface or with command
-    line clients like htcp.
-<p>
-
-<dt><b><a href="admin.html">Admin Guide</a></b>
-<dd>For people administering areas of GridSite websites or fileservers, or
-    managing GridSite's support for DN List groups.
-<p>
-
-<dt><b><a href="install.html">Building and Installation</a></b>
-<dd>Instructions for building GridSite from source, and installing from
-    binaries or RPMs.
-<p>
-
-<dt><b><a href="config.html">Config Guide</a></b>
-<dd>For webmasters setting up Apache 2.0 and GridSite, and writing the
-    Apache httpd.conf file.
-<p>
-
-<dt><b><a href="httpd-fileserver.conf">httpd-fileserver.conf</a></b> and
-    <b><a href="httpd-webserver.conf">httpd-webserver.conf</a></b>
-<dd>Example configuration files for simple HTTP(S) fileservers and
-    webservers, with explanatory comments.
-<p>
-
-</dl>
-
-<h2>Reference</h2>
-
-<p>
-<dl>
-<dt><b><a href="gacl.html">Grid Access Control Lists</a></b>
-<dd>Syntax and usage of the XML Grid Access Control Lists used by GridSite.
-<p>
-
-<dt><b><a href="htcp.1.html">htcp</a></b> and
-    <b><a href="urlencode.1.html">urlencode</a></b> man pages
-<dd>Command line tools for copying files to or from HTTP(S) servers, and
-    for URL-encoding strings. 
-<p>
-
-<!--
-<dt><b><a href="gridsite-admin.html">gridsite-admin.cgi</a></b>
-<dd>A CGI program providing site administration functions for users with
-    standard web browsers, via HTTPS. gridsite-admin.cgi includes a file
-    manager, support for file uploading, and editors for HTML, text and
-    Grid Access Control List files.
-<p>
--->
-
-<dt><b><a href="module.html">mod_gridsite</a></b>
-<dd>An Apache 2.0 module which enforces access control via Grid Access
-    Control Lists, and X.509, GSI or VOMS credentials. mod_gridsite also
-    gives Apache built-in support for the HTTP PUT and DELETE methods, and
-    formatting of HTML pages with standard headers and footers. 
-<p>
-
-<!--
-<dt><b><a href="library.html">libgridsite</a></b>
-<dd>The GridSite library provides common functions for other components of
-    the GridSite system, and utilities for programs using CGI, X.509, GSI,
-    VOMS and HTTP. 
-<p>
--->
-
-<dt><b><a href="gridsite_8h.html">gridsite.h API reference</a></b>
-<dd>A detailed description of the C API provided by libgridsite, generated
-    from the sources by doxygen.
-<p>
-
-</dl>
-
-</body>
diff --git a/org.gridsite.core/doc/install.html b/org.gridsite.core/doc/install.html
deleted file mode 100644 (file)
index 91a60d2..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-<title>GridSite: Building and Installation Guide</title>
-<body>
-<h1 align=center>GridSite: Building and Installation Guide</h1>
-
-<p>
-This Guide explains how to build GridSite from source, and how to install 
-the server components alongside an Apache 2.0 webserver. There is a 
-separate <a href="config.html">Config Guide</a> which explains how to modify
-the httpd.conf file, and how to set up other files and directories used by
-the system. You should look through all of this Building and Installation
-Guide to decide which is the easiest route for your system.
-
-<h2>Installing with RPM</h2>
-
-<p>
-If you are installing on Linux with the binary RPM release, you can skip
-most of this Guide, install the binary rpm(s) and go straight
-to the Config Guide.
-
-<p>
-We currently distribute GridSite RPMs for RedHat Linux versions 9 and 7.3
-from our download area at 
-<a href="https://www.gridsite.org/download/">
-https://www.gridsite.org/download/</a>
-
-<p>
-<b>RedHat 9</b>:
-This is the simpler case, since the standard release includes a suitable
-version of Apache 2.0: just install the gridsite-...-1.i386.rpm to get the
-various GridSite components. 
-
-<p>
-<b>RedHat 7.3</b>:
-This is more complicated because you must also install a back-ported Apache
-2.0 RPM. We distribute RPMs built on 7.3 aimed at RedHat 7.3 
-machines with updates, from our download area. These are built from the 
-tar.gz and .spec files distributed by the
-Apache Foundation itself, using the 
-<a href="build-apache2.sh">build-apache2.sh</a> script in the GridSite
-/usr/share/doc/gridsite directory. The Apache RPMs install in /usr, and you
-should at least install the httpd and mod_ssl RPMs.
-You must also install the gridsite-...-1.i386.rpm as above.
-
-<p>
-GridSite also depends on shared libraries from libcurl and libxml2, and the
-RPMs distributed as part of the standard RedHat 7.3 and 9 releases are
-sufficient. 
-
-<p>
-With the RPMs installed, you can proceed to the
-<a href="config.html">Config Guide</a>.
-
-<h2>Requirements for building GridSite from source</h2>
-
-<p>
-GridSite is currently only supported on Linux, but should be
-straightforwardly
-portable to other Unix platforms where the GNU build tools are available.
-
-<p>
-GridSite consists of a core library (libgridsite[.so|.a]), an Apache module 
-(mod_gridsite.so), a CGI utility (gridsite-admin.cgi) and some command line
-tools (htcp, urlencode.)
-
-<p>
-All of the components use the GridSite library, and this in turn depends on
-libcurl and libxml2. You will need the development versions of these
-packages installed before you can proceed. (They are available as part of
-RedHat Linux releases 7.x onwards, for instance.) 
-
-<h2>Building GridSite with Make</h2>
-
-<p>
-Our download area at
-<a href="https://www.gridsite.org/download/">
-https://www.gridsite.org/download/</a> includes a tar-ball
-distribution of the sources, which can be unpacked and used to build
-GridSite from source. (Bleeding-edge developers can get the current snapshot
-of the same files from our CVS area.)
-
-<p>
-GridSite needs a copy of the Apache 2.0 include files to build, and the
-location of this is set by the MYCFLAGS variable in the top-level Makefile.
-For manual builds, the default
-<b>MYCFLAGS=-I/usr/local/include/httpd</b> is used.
-If you wish to use the GridSite module with Apache
-2.0 installed elsewhere, you should change the MYCFLAGS variable to point to
-the includes directory installed by the development part of that Apache 2.0 
-distribution.
-
-<p>
-<pre>
-make 
-make install
-</pre>
-
-<p>
-will build all components and install them all under the default
-locations of /usr/local/[lib|bin|include|sbin] The default prefix for manual
-builds is
-/usr/local, as set by the prefix variable in the top level Makefile
-(/usr is the default for RPMs.)
-
-<h2>Building GridSite with RPM</h2>
-
-<p>
-For RedHat Linux and derivatives, building with RPM is recommended.
-The command <b>make rpm</b> in the top level of the source tree
-will build the GridSite and htcp binary RPMs in the
-directory ../RPMTMP/RPMS/i386 relative to the working directory. An SRPM is
-put into ../RPMTMP/SRPMS
-This build assumes the Apache 2.0 includes are in /usr/include/httpd.
-
-<p>
-<b>If you make RPMs on a RedHat 9 system (or a 7.3 system with our httpd RPM
-installed), you can install the resulting GridSite 
-RPM alongside the standard Apache 2.0 RPM without having to
-modify shared library or Apache module paths.</b>
-
-<p>
-For other configurations,
-you can modify the assumed location of the Apache 2.0 includes
-by changing the MYCFLAGS variable in the rpm target near the
-foot of the top level Makefile.
-
-<h2>Building Apache 2.0</h2>
-
-<p>
-If it is not possible to use binary RPMs of Apache 2.0,
-then it can be built from source using the build-apache2.sh script
-found in the GridSite docs directory.
-The script includes instructions on how to build from the tarballs
-distributed by the Apache Foundation.
-(it removes the -C option from &quot;configure&nbsp;-C&quot; in the .spec file
-and builds the RPMs under the current directory.)
-
-<p>
-If these targets do not work on your build platform,
-the Makefile and the scriptlets in the included SPEC files are a good
-starting point for building Apache by hand yourself. The complexities of
-this are outside of the scope of this Guide, but you are welcome to ask for
-assistance on the 
-<a href="http://www.gridsite.org/discuss.html">GridSite
-Discussion List</a>, although 
-<a href="http://www.apache.org/">www.apache.org</a> is a better starting
-point for purely Apache problems.
-</body>
diff --git a/org.gridsite.core/doc/library.html b/org.gridsite.core/doc/library.html
deleted file mode 100644 (file)
index 28458ae..0000000
+++ /dev/null
@@ -1 +0,0 @@
-library docs
diff --git a/org.gridsite.core/doc/module.html b/org.gridsite.core/doc/module.html
deleted file mode 100644 (file)
index 7f2096e..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-<title>GridSite Apache module: mod_gridsite</title>
-<body>
-<h1 align=center>GridSite Apache module: mod_gridsite</h1>
-
-<p> 
-mod_gridsite is an Apache 2.0 module which enforces access control via Grid
-Access Control Lists, and X.509, GSI or VOMS credentials. mod_gridsite also
-gives Apache built-in support for the HTTP PUT and DELETE methods, and
-formatting of HTML pages with standard headers and footers.
-
-<p>
-Since mod_gridsite access
-control within Apache itself, Grid authorization and
-the associated verified credentials are available to all technologies
-supported by Apache, including static file serving, SSI, CGI, PHP, mod_perl
-and Java servlets via a connector to Tomcat.
-
-<p>
-Operation of mod_gridsite can be configured using runtime directives
-in Apache's standard httpd.conf configuration file. The module must first be
-loaded with a LoadModule directive:
-
-<p>
-<b>LoadModule gridsite_module /PATH/TO/MODULES/mod_gridsite.so</b>
-
-<p>
-The module's behaviour is then controlled by GridSite... directives within
-Apache &lt;Directory ...&gt; sections, allowing different directories to use
-GridSite features in different ways.
-
-<h2>GridSite directives</h2>
-
-<dl>
-<dt><b>GridSiteIndexes on|off</b>
-<dd>Determines whether GridSite generates HTML directory listings. These
-    have some advantages over standard Apache directory listings (eg the
-    displayed filenames are never truncated) and will include standard
-    headers and footers if GridSiteHtmlFormat is on. 
-    <br>
-    (Default: GridSiteIndexes off)
-<p>
-
-<dt><b>GridSiteIndexHeader file</b>
-<dd>If the named file is found in the directory being listed, the file
-    is included verbatim at the top of the listing and excluded from
-    the file-by-file listing. The file can either be HTML or plain text (in
-    which case browsers will be treat it as one HTML paragraph.) 
-    <br>
-    (Default: none)
-<p>
-
-<dt><b>GridSiteHtmlFormat on|off</b>
-<dd>Determines where HTML pages receive additional formatting before being
-    sent to the client. This includes the &quot;Last modified&quot;,
-    &quot;View page history&quot;, &quot;Switch to HTTP(S)&quot;,
-    &quot;Print View&quot; and &quot;Built with GridSite&quot; footer
-    elements. If header and footer files are found, they will be used too.
-    <br>
-    (Default: GridSiteHtmlFormat off)
-<p>
-
-<dt><b>GridSiteHeadFile file</b><br>
-    <b>GridSiteFootFile file</b>
-<dd>Set the filenames to be searched for as standard headers and footers
-    for HTML pages. For each HTML page, the directory of that page is tried
-    first, and then parent directories in ascending order until a header / 
-    footer file is found. Header files are inserted in place of HTML
-    &lt;body[ ...]&gt; tags; footer files in place of &lt;/body&gt;. (These
-    standard files should each include the appropriate body tag as a
-    replacement.)
-    <br>
-    (Defaults: GridSiteHeadFile gridsitehead.txt, 
-     GridSiteFootFile gridsitefoot.txt)
-<p>
-
-<dt><b>GridSiteAuth on|off</b>
-<dd>Enables GridSite access control features, using 
-    <a href="gacl.html">GACL</a> files. The files are named .gacl and are
-    per-directory. The current directory is tried and then parent
-    directories in ascending order until a .gacl file is found. 
-    <br>
-    (Default: GridSiteAuth off)
-<p>
-
-<dt><b>GridSiteAdminList uri</b>
-<dd>All members of the DN List with name &quot;uri&quot; receive the full set
-    of permissions, irrespective of per-directory .gacl files. People in
-    this group have full control over the whole site.
-    <br>
-    (Default: none)
-<p>
-
-<dt><b>GridSiteGSIProxyLimit limit</b>
-<dd>When using GSI Proxy credentials,
-    proxies with delegation depth greater than &quot;limit&quot; will
-    be ignored by mod_gridsite authorization decisions. A limit of zero 
-    implies only full X.509
-    certificates (and no proxies) will be accepted. A limit of 1 implies
-    that only the initial proxy, usually created on the user's own machine,
-    is acceptable. Higher levels lead to proxies on remote machines, eg
-    used by running jobs, being accepted.
-    <br>
-    (Default: GridSiteGSIProxyLimit 1)
-<p>
-
-<dt><b>GridSiteMethods [GET] [PUT] [DELETE]</b>
-<dd>Specifies which HTTP methods are supported by GridSite. GET (and HEAD)
-    are always supported. PUT and DELETE support is turned on by this
-    directive, subject to a positive statement that write permission is
-    allowed for the directory in question, by a GACL file.
-    <br>
-    (Default: GridSite GET)
-<p>
-
-<dt><b>GridSiteDNlists directory1[:directory2[:directory3]...]</b>
-<dd>Sets up the DN List path used by <a href="gacl.html">GACL</a> for
-    evaluating &lt;dn-list&gt; credentials. If this directive is not used,
-    then GACL will use the GRST_DN_LISTS variable from Apache's own
-    environment. If that is not set either, then /etc/grid-security/dn-lists
-    is searched.
-    <br>
-    (Default: none)
-<p>
-
-<dt><b>GridSiteDNlistsURI uri</b>
-<dd>If GridSiteDNlistsURI is used, then the URI given appears to be 
-    populated with all the DN lists on the current DN lists path which
-    match the current server. That is, for server https://example.org/ 
-    with DN lists URI /dn-lists/, all DN lists with URLs starting
-    https://example.org/dn-lists/ will appear to be present in /dn-lists/,
-    irrespective of where in the path they are stored.    
-    <br>
-    (Default: none)
-<p>
-
-<dt><b>GridSiteAdminURI uri</b>
-<dd>GridSiteAdminURI gives the absolute URI on the server of the GridSite
-    Admin CGI program, which is used for file management, HTML and GACL 
-    editing. This should be used in conjunction with the standard Apache
-    directive ScriptAlias to map that URI to the real-gridsite-admin.cgi
-    executable. For example:
-    <br>
-    <b>ScriptAlias /real-gridsite-admin.cgi
-    /PATH/TO/real-gridsite-admin.cgi</b>
-    <br>
-    This URI is always reached by an internal redirection from the value
-    set by GridSiteAdminFile, and is never visible to users.
-    <br>
-    (Default: none)
-<p>
-
-<dt><b>GridSiteAdminFile cgifilename</b>
-<dd>If GridSiteAdminURI is set, then the cgifilename of GridSiteAdminFile
-    appears to be present in all directories when explicitly
-    requested (it does not appear in directory listings.) Requests for these
-    ghost CGI URIs are internally redirected to the value set by 
-    GridSiteAdminURI. 
-    <br>
-    (Default: GridSiteAdminFile gridsite-admin.cgi)
-<p>
-
-<dt><b>GridSiteEnvs on|off</b>
-<dd>This makes mod_gridsite export several variables into the environment
-    of CGI programs and other dynamic content systems. The variable names
-    are listed below. For gridsite-admin.cgi mechanism to work, this switch
-    must be left in its default state of on.
-    <br>
-    (Default: GridSiteEnvs on)
-<p>
-
-<dt><b>GridSiteEditable [ext1 [ext2 [ext3] ...]]]</b>
-<dd>A space-separated list of file extensions which can safely be edited
-    by the GridSite Text/HTML editor. The extensions are given without the
-    initial dot.
-    <br>
-    (Default: GridSiteEditable txt shtml html htm css js php jsp)
-<p>
-
-<dt><b>GridSiteHelpURI uri</b>
-<dd>If set, gives the URI to use for &quot;Website Help&quot; links in HTML
-    page footers.
-    <br>
-    (Default: none)
-<p>
-
-<dt><b>GridSiteLink on|off</b>
-<dd>Turns off the link in the HTML page footers which gives credit to
-    GridSite.
-    <br>
-    (Default: GridSiteLink on)
-<p>
-
-<dt><b>GridSiteUnzip path</b>
-<dd>If &quot;path&quot; is set by this directive, then real-gridsite-admin.cgi
-    will offer to list the contents of .zip archives on the server. 
-    Users with write access are able to unpack the contents into the same
-    directory as the .zip file. The value of &quot;path&quot; must point
-    to the location of the 
-    <a href="http://www.info-zip.org/UnZip.html">unzip</a> binary.
-    <br>
-    (Default: none)
-<p>
-
-</dl>
-
-<h2>Environment variables</h2>
-
-<p>
-The following variables are present in the environment of CGI programs and
-other dynamic content systems if the <b>GridSiteEnvs on</b> directive is
-in effect.
-
-<p>
-<dl>
-<dt><b>GRST_PERM</b>
-<dd>Numerical value of the permission bit-map obtained by comparing the
-    user with the GACL in force. (These should be tested using the
-    GRSTgaclPermHasXXXX functions from GACL.)
-<p>
-
-<dt><b>GRST_ADMIN_LIST</b>
-<dd>URI of the DN List, listing people with full admin and write access
-    to the whole site.
-<p>
-
-<dt><b>GRST_GSIPROXY_LIMIT</b>
-<dd>Maximum valid delegation level for GSI Proxies.
-<p>
-
-<dt><b>GRST_DIR_PATH</b>
-<dd>Absolute path in the local filesystem to the directory holding the
-    file being requested.
-<p>
-
-<dt><b>GRST_HELP_URI</b>
-<dd>URI of website help pages set by GridSiteHelpURI directive.
-<p>
-
-<dt><b>GRST_ADMIN_FILE</b>
-<dd>Filename of per-directory ghost gridsite-admin.cgi program. (This is
-    used by real-gridsite-admin.cgi to construct links in its pages.)
-<p>
-
-<dt><b>GRST_EDITABLE</b>
-<dd>Space-separated list of extensions which can safely be edited with a
-    Text/HTML editor.
-<p>
-
-<dt><b>GRST_HEAD_FILE</b> and <b>GRST_FOOT_FILE</b>
-<dd>Filenames of standard header and footer files.
-<p>
-
-<dt><b>GRST_DN_LISTS</b>
-<dd>DN lists search path.
-<p>
-
-<dt><b>GRST_DN_LISTS_URI</b>
-<dd>Directory of virtual URIs used to publish this site's DN Lists.
-<p>
-
-<dt><b>GRST_UNZIP</b>
-<dd>Full path to the unzip binary, used to list and unpack .zip files.
-<p>
-
-<dt><b>GRST_NO_LINK</b>
-<dd>If set, do not include credit links to GridSite in page footers.
-<p>
-
-</dl>
-
-</body>
diff --git a/org.gridsite.core/doc/urlencode.1 b/org.gridsite.core/doc/urlencode.1
deleted file mode 100644 (file)
index fe84405..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-.TH urlencode 1 "November 2003" urlencode "URLENCODE Manual"
-.SH NAME
-.B urlencode
-\- convert strings to or from URL-encoded form
-.SH SYNOPSIS
-.B urlencode 
-[-m|-d] 
-.I string [string ...]
-.SH DESCRIPTION
-.B urlencode
-encodes strings according to RFC 1738. 
-
-That is, characters A-Z a-z 0-9 . _ 
-and - are passed through unmodified, but all other characters are
-represented as %HH, where HH is their two-digit upper-case hexadecimal ASCII
-representation.
-For example, the URL http://www.gridpp.ac.uk/ becomes
-http%3A%2F%2Fwww.gridpp.ac.uk%2F
-
-.B urlencode
-converts each character in all the strings given on the command line. If
-multiple strings are given, they are concatenated with separating spaces
-before conversion.
-
-.SH OPTIONS
-.IP "-m"
-Instead of full conversion, do GridSite "mild URL encoding" in which A-Z a-z
-0-9 . = - _ @ and / are passed through unmodified. This results in slightly
-more human-readable strings but the application must be prepared to create
-or simulate the directories implied by any slashes.
-
-.IP "-d"
-Do URL-decoding rather than encoding, according to RFC 1738. %HH and %hh
-strings are converted and other characters are passed through unmodified,
-with the exception that + is converted to space.
-
-.SH EXIT CODES
-0 is always returned.
-
-.SH BUGS
-Not enough beta testing (hint hint...)
-
-.SH AUTHOR
-Andrew McNab <Andrew.McNab@man.ac.uk>
-
-urlencode is part of GridSite: http://www.gridsite.org/
diff --git a/org.gridsite.core/doc/user.html b/org.gridsite.core/doc/user.html
deleted file mode 100644 (file)
index ae37cdd..0000000
+++ /dev/null
@@ -1,302 +0,0 @@
-<title>GridSite User Guide</title>
-<body>
-<h1 align=center>GridSite User Guide</h1>
-
-<p><i>If you are setting up a GridSite-based website you may wish to use this 
-file as the basis of your end-user documentation. If so, copy all of the
-files from the GridSite doc directory (probably
-<small>/usr/share/doc/gridsite-VERSION/</small>) 
-to somewhere on your website like
-<b>/gridsite-doc/</b> and add <b>GridSiteHelpURI /gridsite-doc/user.html</b>
-to the virtual server configuration in
-httpd.conf - you should also look through the rest of the HTML source since
-there are some comments you may find helpful.</i>
-
-<p> 
-This Guide is intended for people using GridSite websites with conventional
-web browsers, especially people with write access to areas of the site.
- There is a separate 
-<a href="admin.html">Administration Guide</a>
- with additional information for people managing access control and group
-membership. This Guide assumes you are familiar with basic Web and HTML
-concepts. Towards the end we discuss how to access servers with command
-line tools like curl and htcp. 
-
-<h2>Reading from HTTP and HTTPS servers</h2>
-
-<p>
-GridSite servers are usually accessible both via HTTP and via HTTPS. You can
-always tell which version you are using by looking at whether the URL in your
-browser's location window starts with &quot;http://&quot; or 
-&quot;https://&quot; HTTPS means that the connection to the server is
-encrypted, that you can verify you're talking to the real server and not an
-imposter, and gives you the option to authenticate to the site and perhaps
-gain write access.
-
-<p>
- Simple browsing of the website via HTTP or HTTPS is reasonably
- self-explanatory. If configured, additional links may appear in the footer
- of each webpage with links to this help, 
-<!-- if  GridSiteHelpURI uri  is set --> 
- and to switch between HTTP and HTTPS versions of the page. Pages may also
- have a link to the page History, 
-<!-- GridSiteAdminURI uri  must be set and gridsite-admin.cgi working for
- the history-viewing mechanism to work -->
- showing the dates of changes to that page and names of its authors.
-
-<p>
- When looking at HTTPS pages, you may find your browser reports it cannot
- verify the server's certificate since it does not recognise the
- Certification Authority (CA) it uses. You should attempt to load the CA's
- root certificate into your browser to stop these warnings. (This means your
- browser will be able to identify any servers using fake certificates which
- you shouldn't trust.) How you obtain the CA Root Certificate from a
- trust-worthy source depends on the CA. For example, the UK e-Science CA
- lets you download it <a href="http://ca.grid-support.ac.uk/">from their
- website</a>.
-<!-- if most of your users use one or two CAs, you could add a link to their
-CA root cert loading instructions here -->
-
-<h2>Authenticating</h2>
-
-<p>
- To go beyond reading pages you need to obtain a user certificate and load it
- into your web browser. How you do this again depends on the Certification
- Authority you have access to (for most Grid projects, CAs are organised
- on a national basis.) To use the UK e-Science CA example again, 
- <a href="http://ca.grid-support.ac.uk/">from their website</a> has links to
- the procedure for applying for a certificate from within a web browser.
-<!-- again, a link to your CA would be good here -->
-
-<p>
-A user certificate usually has a version of your name and affiliation as its
-Distinguished Name (DN) - for example,
-&quot;/C=UK/O=eScience/OU=Manchester/L=HEP/CN=Andrew McNab&quot;
-
-<p>
-Once you've obtained a user certificate in your name from your CA, you need
-to make sure it is loaded into the browser you normally use to browse the
-web. How you do this is different for different browsers and to some extent
-for different CAs (but if you applied
-for the CA through your browser, you may already have it there.)
-
-<p>
-Browsers want the certificate and private key in the PKCS#12 format, which
-is normally a single file with the extension &quot;.p12&quot;.
-Many programs which are based on OpenSSL, such as Globus and curl, prefer
-the PEM (&quot;.pem&quot;) format for certificates, with separate
-certificate and key files (&quot;usercert.pem&quot; and
-&quot;userkey.pem&quot;, for example.) If you only have the files in .pem
-format and have access to openssl, you
-can use its command line tools to convert PEM to PKCS#12:
-<pre>
-openssl pkcs12 -in usercert.pem -inkey userkey.pem -export -out certkey.p12
-</pre>
-
-<p>
-<b>Be very careful not to accidentally overwrite .pem or .p12 files when
-doing this kind of thing! In particular, if you lose your private key, you
-cannot retrieve it from your CA.</b>
-
-<p>
- Once your user certificate is loaded, you should be able to see your
- certificate name appear when you look at an HTTPS GridSite page which has
- the page footers enabled - for example, the &quot;Switch to HTTP&quot; link
- present. If GridSite understands your user certificate, it displays a
- &quot;You are ...&quot; line in the footer. (However, the Apache webserver
- must also be set up with your CAs root certificate for this to work. The
- <a href="https://www.gridpp.ac.uk/">GridPP HTTPS home page</a> is set up
- to recognise a good range of European and North American Grid CAs.)
-<!-- the CA root certificates normally go somewhere like
-/etc/grid-security/certificates and httpd.conf should reflect this with the
-directive   SSLCACertificatePath /etc/grid-security/certificates  -->
-
-<h2>Authorization</h2>
-
-<p>
- Once users can prove their identity to the web server, it then becomes
- possible to give them appropriate rights depending on that identity.
- GridSite allows site administrators to specify these rights for individuals
- and groups using 
-<a href="gacl.html">GACL</a>
- access control files. (The
-<a href="admin.html">Administration Guide</a>
- explains how to manage these files.) GACL defines who can
- read files, who can list directories,
- who can write or create files and who can modify the GACL policy files. To
- get increased access to an area of a site, you need to contact the
- administrator for that area and give the DN of your certificate (it's not
- necessary to send any certificate files.)
-
-<h2>Managing Directories and Files</h2>
-
-<p>
-If you have list permission for the directory containing a page, you should
-see an extra link &quot;Manage Directory&quot; in the page's set of footer
-links, which allows you to browse the directory even if the normal
-index.html is present. If page histories are available, this listing view
-also has links to them.
-
-<p>
-The real power of GridSite becomes available if you have write access to a
-directory. In that case, the &quot;Manage Directory&quot; page has
-additional links to Delete or Rename pages and other files, and to Edit HTML
-and plain text files. An Edit link also appears in the footer links of HTML
-pages.
-
-<p>
-If you use the Edit function, you are presented with an HTML form containing
-the current filename and the full HTML or plain text of the page for you to
-edit. This allows you to maintain the content of the site &quot;in
-place&quot; and to see the result of your changes immediately, in context.
-
-<p>
-If you modify the filename in the form before saving, GridSite will make a
-new file with that name, and the old file will still be present, unmodified.
-(However, you cannot use this feature for creating a file in a different
-directory.)
-As you make changes, the history of the changes and your certificate DN are
-recorded, and available in the history page for that file.
-
-<p>
- For people with write access, the &quot;Manage Directory&quot; page also has
- options to upload a file from the computer your browser is running on, and to
- create files and directories. If it's enabled, you can also view the
- contents of WinZIP / PKZIP / .zip files, and unpack their contents into the
- current directory. (This feature is very useful if you have several files
- to upload at one time.)
-<!-- This needs the  GridSiteUnzip path  directive in httpd.conf -->
-
-<h2>HTML Formatting in GridSite</h2>
-
-<p>
-As well as providing access control and file management, GridSite provides
-some simple formatting of HTML pages by adding standard headers and footers.
-(If this isn't sufficient, GridSite will happily coexist with HTML
-preprocessor languages like SSI, PHP and JSP.)
-
-<p>
- If HTML formatting is enabled
- for the current directory, GridSite looks for the files gridsitehead.txt and
- gridsitefoot.txt in that directory, or goes up through the parent
- directories until they are found. 
-<!-- GridSiteHtmlFormat on  turns this on and  GridSiteHeadFile file  and
-GridSiteFootFile file  can change the names of the header and footer. If 
-you change from the defaults, you need to change this paragraph. -->
-
-<p>
-The &lt;body&gt; and &lt;/body&gt; tags from the HTML file are replaced with
-the contents of the gridsitehead.txt and gridsitefoot.txt files, which
-should normally be chunks of HTML including a replacement &lt;body&gt;
-or &lt;/body&gt; tag. If either tag is absent from the original page, then
-the header or footer is just added rather than being inserted in place of
-the tag. (One consequence of this absence is that HTML header tags like
-&lt;title&gt; can end up after a &lt;body&gt; tag, and can get ignored by
-browsers - so always include &lt;body&gt; ... &lt;/body&gt; in your pages.)
-
-<p>
-This simple system is suprisingly flexible, and allows a variety of top and
-bottom, or sidebar navigation layouts of pages. Since the &lt;body ...&gt;
-tag is under full control of the author of the gridsitehead.txt file,
-backgrounds, colour schemes and style sheets can easily be specified. 
-
-<p>
-For example:
-
-<p>
-<table border=1 cellpadding=3>
-<tr><th>Source</th><th>HTML</th></tr>
-<tr><td>page.html</td><td>&lt;title&gt;PAGE TITLE&lt;/title&gt;</td></tr>
-<tr><td>page.html<br>(replaced)</td><td>&lt;body&gt;</td></tr>
-<tr><td>gridsitehead.txt</td>
-    <td>&lt;body text=blue&gt;<br>
-        Heading text<br>
-        &lt;table border=1&gt;<br>&lt;tr&gt;<br>&lt;td&gt;Standard&lt;br&gt;<br>
-        sidebar&lt;/td&gt;<br>&lt;td&gt;</td></tr>
-<tr><td>page.html</td><td>&lt;p&gt;<br>Page content...</td></tr>
-<tr><td>page.html<br>(replaced)</td><td>&lt;/body&gt;</td></tr>
-<tr><td>gridsitefoot.txt</td><td>&lt;/td&gt;<br>&lt;/tr&gt;<br>
-        &lt;/table&gt;<br>Footer text<br>&lt;/body&gt;</td></tr>
-</table>
-
-<p>
-produces pages with a layout like:
-
-<p>
-<table border=1 cellpadding=3>
-<tr><td colspan=2>Heading text</td></tr>
-<tr><td>Standard<br>sidebar</td><td>Page content...</td><tr>
-<tr><td colspan=2>Footer text</td></tr>
-</table>
-
-<h2>Command line use</h2>
-
-<p>
-GridSite adds support for the HTTP PUT and DELETE methods, and this makes it
-easy to create or delete files from within programs and commands without
-using a web browser and HTML forms. It is straightforward, although slightly
-awkward, to use a standard HTTPS-aware client like 
-<a href="http://curl.haxx.se/">curl</a> to upload files, but GridSite
-provides htcp as a more convenient client program, which is easier to use
-with GSI Proxies and X.509 user certificates, and has a syntax closer to the
-familiar scp command.
-
-<p>
-The following examples assume the GridSite server has GSI support and use a
-GSI proxy as the client certificate. For non-GSI use, just skip the
-grid-proxy-init stage, and replace the proxy
-filename with $HOME/.globus/usercert.pem and $HOME/.globus/userkey.pem (or
-wherever your PEM format certificate and key are stored.)
-
-<p>
-First generate a GSI proxy with grid-proxy-init. This will create a proxy file
-in /tmp/x509up_uXXXXX where XXXXX is your Unix UID (also given by <b>id
--u</b>.) The GSI proxy contains a
-temporary private key and certificate signed by your long-term user
-certificate.
-
-<p>
-You should make sure you have a copy of the CA root certificates of the CA's
-used by the servers you wish to talk to. These are usually installed in
-/etc/grid-security/certificates as files like 01621954.0, and RPMs and tar
-files for many common European and North American CAs are available from
-<a href="https://datagrid.in2p3.fr/distribution/datagrid/security/">
-https://datagrid.in2p3.fr/distribution/datagrid/security/</a>
-
-<p>
-To upload a file with curl:
-<pre>
-curl --cert /tmp/x509up_u`id -n` --key /tmp/x509up_u`id -n` \
-     --capath /etc/grid-security/certificates \
-     --upload-file /tmp/new.file.txt https://server/new.file.txt
-</pre>
-
-<p>
-The equivalent htcp command is:
-<pre>
-htcp /tmp/new.file.txt https://server/new.file.txt
-</pre>
-since htcp looks for the GSI proxy and CA certificates automatically. htcp
-can also be used to copy remote files to the local machine by reversing the
-arguments. For more details, see the 
-<a href="htcp.1.html">htcp(1)</a>  man page.
-
-<p>
-htcp also has options for deleting files, and doing short or long listings,
-and these can also be accessed using the htrm, htls and htll commands (which
-are normally symbolic links to htcp.)
-
-<p>
-Directory indexes are based on parsing the index returned by the web server
-and by using the HTTP HEAD method to obtain the file size and modification
-times.
-
-<p>
-All of the ht** commands can accept multiple source file arguments, and this
-allows you to copy multiple files to or from the server. Shell wildcard
-expansion on the local machine is especially useful:
-<pre>
-htcp /tmp/new.*.txt https://server/
-</pre>
-
-</body>
diff --git a/org.gridsite.core/interface/gridsite-gacl.h b/org.gridsite.core/interface/gridsite-gacl.h
deleted file mode 100644 (file)
index f739c00..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
-   Copyright (c) 2002-4, Andrew McNab, University of Manchester
-   All rights reserved.
-
-   Redistribution and use in source and binary forms, with or
-   without modification, are permitted provided that the following
-   conditions are met:
-
-     o Redistributions of source code must retain the above
-       copyright notice, this list of conditions and the following
-       disclaimer. 
-     o 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. 
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-*/
-
-/*---------------------------------------------------------------*
- * For more about GridSite: http://www.gridsite.org/             *
- *---------------------------------------------------------------*/
-
-#ifndef HEADER_GACL_H
-#define HEADER_GACL_H
-#endif
-
-#ifndef GACL_LIB_VERSION
-#define GACL_LIB_VERSION "x.x.x"
-#endif
-
-typedef GRSTgaclCred GACLcred;
-
-typedef int                GACLaction;
-typedef unsigned int       GACLperm;
-
-typedef GRSTgaclEntry  GACLentry;
-
-typedef GRSTgaclAcl    GACLacl;  
-
-typedef GRSTgaclUser   GACLuser;
-
-extern char      *gacl_perm_syms[];
-extern GACLperm   gacl_perm_vals[];
-
-#define GACL_PERM_NONE  GRST_PERM_NONE
-#define GACL_PERM_READ  GRST_PERM_READ
-#define GACL_PERM_LIST  GRST_PERM_LIST
-#define GACL_PERM_WRITE GRST_PERM_WRITE
-#define GACL_PERM_ADMIN GRST_PERM_ADMIN
-
-#define GACLhasNone(perm)  (perm == 0)
-#define GACLhasRead(perm)  ((perm & GRST_PERM_READ) != 0)
-#define GACLhasList(perm)  ((perm & GRST_PERM_LIST) != 0)
-#define GACLhasWrite(perm) ((perm & GRST_PERM_WRITE) != 0)
-#define GACLhasAdmin(perm) ((perm & GRST_PERM_ADMIN) != 0)
-
-#define GACL_ACTION_ALLOW GRST_ACTION_ALLOW
-#define GACL_ACTION_DENY  GRST_ACTION_DENY
-
-#define GACL_ACL_FILE GRST_ACL_FILE
-#define GACL_DN_LISTS GRST_DN_LISTS
-
-#define GACLinit() GRSTgaclInit()
-
-#define GACLnewCred(x)         GRSTgaclCredNew((x))
-/* GACLcred  *GACLnewCred(char *); */
-
-#define GACLaddToCred(x,y,z)   GRSTgaclCredAddValue((x),(y),(z))
-/* int        GACLaddToCred(GACLcred *, char *, char *); */
-
-#define GACLfreeCred(x)                GRSTgaclCredFree((x))
-/* int        GACLfreeCred(GACLcred *); */
-
-#define GACLaddCred(x,y)       GRSTgaclEntryAddCred((x),(y))
-/* int        GACLaddCred(GACLentry *, GACLcred *); */
-
-#define GACLdelCred(x,y)       GRSTgaclEntryDelCred((x),(y))
-/* int        GACLdelCred(GACLentry *, GACLcred *); */
-
-#define GACLprintCred(x,y)     GRSTgaclCredPrint((x),(y))
-/*  int        GACLprintCred(GACLcred *, FILE *); */
-
-
-#define GACLnewEntry()         GRSTgaclEntryNew()
-/*  GACLentry *GACLnewEntry(void); */
-
-#define GACLfreeEntry(x)       GRSTgaclEntryFree((x))
-/*  int        GACLfreeEntry(GACLentry *); */
-
-#define GACLaddEntry(x,y)      GRSTgaclAclAddEntry((x),(y))
-/*  int        GACLaddEntry(GACLacl *, GACLentry *); */
-
-#define GACLprintEntry(x,y)    GRSTgaclEntryPrint((x),(y))
-/*  int        GACLprintEntry(GACLentry *, FILE *); */
-
-
-#define GACLprintPerm(x,y)     GRSTgaclPermPrint((x),(y))
-/* int        GACLprintPerm(GACLperm, FILE *); */
-
-#define GACLallowPerm(x,y)     GRSTgaclEntryAllowPerm((x),(y))
-/*  int        GACLallowPerm(GACLentry *, GACLperm); */
-
-#define GACLunallowPerm(x,y)   GRSTgaclEntryUnallowPerm((x),(y))
-/* int        GACLunallowPerm(GACLentry *, GACLperm); */
-
-#define GACLdenyPerm(x,y)      GRSTgaclEntryDenyPerm((x),(y))
-/*  int        GACLdenyPerm(GACLentry *, GACLperm); */
-
-#define GACLundenyPerm(x,y)    GRSTgaclEntryUndenyPerm((x),(y))
-/*  int        GACLundenyPerm(GACLentry *, GACLperm); */
-
-#define GACLpermToChar(x)      GRSTgaclPermToChar((x))
-/*  char      *GACLpermToChar(GACLperm); */
-
-#define GACLcharToPerm(x)      GRSTgaclPermFromChar((x))
-/*  GACLperm   GACLcharToPerm(char *); */
-
-#define GACLnewAcl()           GRSTgaclAclNew()
-/*  GACLacl   *GACLnewAcl(void); */
-
-#define GACLfreeAcl(x)         GRSTgaclAclFree((x))
-/*  int        GACLfreeAcl(GACLacl *); */
-
-#define GACLprintAcl(x,y)      GRSTgaclAclPrint((x),(y))
-/*  int        GACLprintAcl(GACLacl *, FILE *); */
-
-#define GACLsaveAcl(x,y)       GRSTgaclAclSave((y),(x))
-/*  int        GACLsaveAcl(char *, GACLacl *); */
-
-#define GACLloadAcl(x)         GRSTgaclAclLoadFile((x))
-/*  GACLacl   *GACLloadAcl(char *); */
-
-#define GACLfindAclForFile(x)  GRSTgaclFileFindAclname((x))
-/*  char      *GACLfindAclForFile(char *); */
-
-#define GACLloadAclForFile(x)  GRSTgaclAclLoadforFile((x))
-/*  GACLacl   *GACLloadAclForFile(char *); */
-
-#define GACLisAclFile(x)       GRSTgaclFileIsAcl((x))
-/*  int        GACLisAclFile(char *); */
-
-
-#define GACLnewUser(x)         GRSTgaclUserNew((x))
-/*  GACLuser *GACLnewUser(GACLcred *); */
-
-#define GACLfreeUser(x)                GRSTgaclUserFree((x))
-/*  int       GACLfreeUser(GACLuser *); */
-
-#define GACLuserAddCred(x,y)   GRSTgaclUserAddCred((x),(y))
-/*  int       GACLuserAddCred(GACLuser *, GACLcred *); */
-
-#define GACLuserHasCred(x,y)   GRSTgaclUserHasCred((x),(y))
-/*  int       GACLuserHasCred(GACLuser *, GACLcred *); */
-
-#define GACLuserFindCredType(x,y) GRSTgaclUserFindCredtype((x),(y))
-/*  GACLcred *GACLuserFindCredType(GACLuser *, char *); */
-
-#define GACLtestDnList(x,y)    GRSTgaclDNlistHasUser((x),(y))
-/*  int        GACLtestDnList(char *, GACLuser *); */
-
-#define GACLtestUserAcl(x,y)   GRSTgaclAclTestUser((x),(y))
-/*  GACLperm   GACLtestUserAcl(GACLacl *, GACLuser *); */
-
-#define GACLtestExclAcl(x,y)   GRSTgaclAclTestexclUser((x),(y))
-/*  GACLperm   GACLtestExclAcl(GACLacl *, GACLuser *); */
-
-
-#define GACLurlEncode(x)       GRSThttpUrlEncode((x))
-/*  char      *GACLurlEncode(char *); */
-
-#define GACLmildUrlEncode(x)   GRSThttpUrlMildencode((x))
-/*  char      *GACLmildUrlEncode(char *); */
-
-GACLentry *GRSTgaclEntryParse(xmlNodePtr cur);
-/*  special function for legacy EDG LB service */
diff --git a/org.gridsite.core/interface/gridsite.h b/org.gridsite.core/interface/gridsite.h
deleted file mode 100644 (file)
index febda2c..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
-   Copyright (c) 2002-3, Andrew McNab, University of Manchester
-   All rights reserved.
-
-   Redistribution and use in source and binary forms, with or
-   without modification, are permitted provided that the following
-   conditions are met:
-
-     o Redistributions of source code must retain the above
-       copyright notice, this list of conditions and the following
-       disclaimer. 
-     o 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. 
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-*/
-
-/*---------------------------------------------------------------*
- * For more about GridSite: http://www.gridsite.org/             *
- *---------------------------------------------------------------*/
-
-#ifndef HEADER_SSL_H
-#include <openssl/ssl.h>
-#endif
-
-#ifndef HEADER_CRYPTO_H
-#include <openssl/crypto.h>
-#endif
-
-#ifndef FALSE
-#define FALSE (0)
-#endif
-#ifndef TRUE
-#define TRUE (!FALSE)
-#endif
-
-/// Everything ok (= OpenSSL X509_V_OK)
-#define GRST_RET_OK            0
-
-/// Failed for unspecified reason
-#define GRST_RET_FAILED                1000
-
-/// Failed to find certificate in some cert store / directory
-#define GRST_RET_CERT_NOT_FOUND        1001
-
-/// Bad signature
-#define GRST_RET_BAD_SIGNATURE 1002
-
-/// No such file or directory
-#define GRST_RET_NO_SUCH_FILE  1003
-
-#define GRST_PROXYCERTINFO_OID "1.3.6.1.4.1.3536.1.222"
-#define GRST_VOMS_OID          "1.3.6.1.4.1.8005.100.100.1"
-#define GRST_VOMS_DIR          "/etc/grid-security/vomsdir"
-
-
-
-typedef struct { char                      *name;
-                 char                      *value;
-                 void                      *next;  } GRSTgaclNamevalue;
-
-typedef struct { char                      *type;
-                 int                        delegation;
-                 GRSTgaclNamevalue         *firstname;
-                 void                      *next;      } GRSTgaclCred;
-typedef int                GRSTgaclAction;
-typedef unsigned int       GRSTgaclPerm;
-typedef struct { GRSTgaclCred   *firstcred;
-                 GRSTgaclPerm    allowed;
-                 GRSTgaclPerm    denied;
-                 void           *next;    } GRSTgaclEntry;
-typedef struct { GRSTgaclEntry *firstentry; } GRSTgaclAcl;
-typedef struct { GRSTgaclCred *firstcred; 
-                 char         *dnlists;   } GRSTgaclUser;
-
-#define GRST_PERM_NONE   0
-#define GRST_PERM_READ   1
-#define GRST_PERM_EXEC   2
-#define GRST_PERM_LIST   4
-#define GRST_PERM_WRITE  8
-#define GRST_PERM_ADMIN 16
-#define GRST_PERM_ALL   31
-
-/* DO NOT USE PermIsNone!! */
-#define GRSTgaclPermIsNone(perm)    (perm == 0)
-
-#define GRSTgaclPermHasNone(perm)    (perm == 0)
-#define GRSTgaclPermHasRead(perm)  ((perm & GRST_PERM_READ ) != 0)
-#define GRSTgaclPermHasExec(perm)  ((perm & GRST_PERM_EXEC ) != 0)
-#define GRSTgaclPermHasList(perm)  ((perm & GRST_PERM_LIST ) != 0)
-#define GRSTgaclPermHasWrite(perm) ((perm & GRST_PERM_WRITE) != 0)
-#define GRSTgaclPermHasAdmin(perm) ((perm & GRST_PERM_ADMIN) != 0)
-
-#define GRST_ACTION_ALLOW 0
-#define GRST_ACTION_DENY  1
-
-#define GRST_HIST_PREFIX  ".grsthist"
-#define GRST_ACL_FILE     ".gacl"
-#define GRST_DN_LISTS     "/etc/grid-security/dn-lists"
-#define GRST_RECURS_LIMIT 9
-
-int GRSTgaclInit(void);
-
-/* #define GACLnewCred(x)              GRSTgaclCredNew((x)) */
-GRSTgaclCred  *GRSTgaclCredNew(char *);
-
-/* #define GACLaddToCred(x,y,z)        GRSTgaclCredAddValue((x),(y),(z)) */
-int        GRSTgaclCredAddValue(GRSTgaclCred *, char *, char *);
-
-#define GRSTgaclCredSetDelegation(cred, level) ((cred)->delegation = (level))
-#define GRSTgaclCredGetDelegation(cred) ((cred)->delegation)
-
-/* #define GACLfreeCred(x)             GRSTgaclCredFree((x)) */
-int        GRSTgaclCredFree(GRSTgaclCred *);
-
-/*  #define GACLaddCred(x,y)   GRSTgaclEntryAddCred((x),(y)) */
-int        GRSTgaclEntryAddCred(GRSTgaclEntry *, GRSTgaclCred *);
-
-/*  #define GACLdelCred(x,y)   GRSTgaclEntryDelCred((x),(y)) */
-int        GRSTgaclEntryDelCred(GRSTgaclEntry *, GRSTgaclCred *);
-
-/*  #define GACLprintCred(x,y) GRSTgaclCredPrint((x),(y)) */
-int        GRSTgaclCredCredPrint(GRSTgaclCred *, FILE *);
-
-
-/*  #define GACLnewEntry(x)            GRSTgaclEntryNew((x)) */
-GRSTgaclEntry *GRSTgaclEntryNew(void);
-
-/*  #define GACLfreeEntry(x)   GRSTgaclEntryFree((x)) */
-int        GRSTgaclEntryFree(GRSTgaclEntry *);
-
-/*  #define GACLaddEntry(x,y)  GRSTgaclAclAddEntry((x),(y)) */
-int        GRSTgaclAclAddEntry(GRSTgaclAcl *, GRSTgaclEntry *);
-
-/*  #define GACLprintEntry(x,y)        GRSTgaclEntryPrint((x),(y)) */
-int        GRSTgaclEntryPrint(GRSTgaclEntry *, FILE *);
-
-
-/*  #define GACLprintPerm(x,y) GRSTgaclPermPrint((x),(y)) */
-int        GRSTgaclPermPrint(GRSTgaclPerm, FILE *);
-
-/*  #define GACLallowPerm(x,y) GRSTgaclEntryAllowPerm((x),(y)) */
-int        GRSTgaclEntryAllowPerm(GRSTgaclEntry *, GRSTgaclPerm);
-
-/*  #define GACLunallowPerm(x,y)       GRSTgaclEntryUnallowPerm((x),(y)) */
-int        GRSTgaclEntryUnallowPerm(GRSTgaclEntry *, GRSTgaclPerm);
-
-/*  #define GACLdenyPerm(x,y)  GRSTgaclEntryDenyPerm((x),(y)) */
-int        GRSTgaclEntryDenyPerm(GRSTgaclEntry *, GRSTgaclPerm);
-
-/*  #define GACLundenyPerm(x,y)        GRSTgaclEntryUndenyPerm((x),(y)) */
-int        GRSTgaclUndenyPerm(GRSTgaclEntry *, GRSTgaclPerm);
-
-/*  #define GACLpermToChar(x)  GRSTgaclPermToChar((x)) */
-char      *GRSTgaclPermToChar(GRSTgaclPerm);
-
-/*  #define GACLcharToPerm(x)  GRSTgaclPermFromChar((x)) */
-GRSTgaclPerm   GRSTgaclPermFromChar(char *);
-
-/*  #define GACLnewAcl(x)              GRSTgaclAclNew((x)) */
-GRSTgaclAcl   *GRSTgaclAclNew(void);
-
-/*  #define GACLfreeAcl(x)             GRSTgaclAclFree((x)) */
-int        GRSTgaclAclFree(GRSTgaclAcl *);
-
-/*  #define GACLprintAcl(x,y)  GRSTgaclAclPrint((x),(y)) */
-int        GRSTgaclAclPrint(GRSTgaclAcl *, FILE *);
-
-/*  #define GACLsaveAcl(x,y)   GRSTgaclAclSave((y),(x)) */
-int        GRSTgaclAclSave(GRSTgaclAcl *, char *);
-
-/*  #define GACLloadAcl(x)             GRSTgaclFileLoadAcl((x)) */
-GRSTgaclAcl   *GRSTgaclAclLoadFile(char *);
-
-/*  #define GACLfindAclForFile(x)      GRSTgaclFileFindAclname((x)) */
-char      *GRSTgaclFileFindAclname(char *);
-
-/*  #define GACLloadAclForFile(x)      GRSTgaclFileLoadAcl((x)) */
-GRSTgaclAcl   *GRSTgaclAclLoadforFile(char *);
-
-/*  #define GACLisAclFile(x)   GRSTgaclFileIsAcl((x)) */
-int        GRSTgaclFileIsAcl(char *);
-
-
-/*  #define GACLnewUser(x)             GRSTgaclUserNew((x)) */
-GRSTgaclUser *GRSTgaclUserNew(GRSTgaclCred *);
-
-/*  #define GACLfreeUser(x)            GRSTgaclUserFree((x)) */
-int       GRSTgaclUserFree(GRSTgaclUser *);
-
-/*  #define GACLuserAddCred(x,y)       GRSTgaclUserAddCred((x),(y)) */
-int       GRSTgaclUserAddCred(GRSTgaclUser *, GRSTgaclCred *);
-
-/*  #define GACLuserHasCred(x,y)       GRSTgaclUserHasCred((x),(y)) */
-int       GRSTgaclUserHasCred(GRSTgaclUser *, GRSTgaclCred *);
-
-int       GRSTgaclUserSetDNlists(GRSTgaclUser *, char *);
-
-/*  #define GACLuserFindCredType(x,y) GRSTgaclUserFindCredtype((x),(y)) */
-GRSTgaclCred *GRSTgaclUserFindCredtype(GRSTgaclUser *, char *);
-
-/*  #define GACLtestDnList(x,y)        GRSTgaclDNlistHasUser((x),(y)) */
-int GRSTgaclDNlistHasUser(char *, GRSTgaclUser *);
-
-/*  #define GACLtestUserAcl(x,y)       GRSTgaclAclTestUser((x),(y)) */
-GRSTgaclPerm   GRSTgaclAclTestUser(GRSTgaclAcl *, GRSTgaclUser *);
-
-/*  #define GACLtestExclAcl(x,y)       GRSTgaclAclTestexclUser((x),(y)) */
-GRSTgaclPerm   GRSTgaclAclTestexclUser(GRSTgaclAcl *, GRSTgaclUser *);
-
-
-char      *GRSThttpUrlDecode(char *);
-
-/*  #define GACLurlEncode(x)   GRSThttpUrlEncode((x)) */
-char      *GRSThttpUrlEncode(char *);
-
-/*  #define GACLmildUrlEncode(x)       GRSThttpMildUrlEncode((x)) */
-char      *GRSThttpUrlMildencode(char *);
-
-int GRSTx509NameCmp(char *, char *);
-
-int GRSTx509KnownCriticalExts(X509 *);
-
-time_t GRSTasn1TimeToTimeT(char *);
-int GRSTx509IsCA(X509 *);
-int GRSTx509CheckChain(int *, X509_STORE_CTX *);
-int GRSTx509VerifyCallback(int, X509_STORE_CTX *);
-
-int GRSTx509GetVomsCreds(int *, int, size_t, char *, X509 *, STACK_OF(X509) *, char *);
-GRSTgaclCred *GRSTx509CompactToCred(char *);
-int GRSTx509CompactCreds(int *, int, size_t, char *, STACK_OF(X509) *, char *);
-char *GRSTx509CachedProxyFind(char *, char *, char *);
-char *GRSTx509FindProxyFileName(void);
-int GRSTx509MakeProxyCert(char **, FILE *, char *, char *, char *, int);
-char *GRSTx509CachedProxyKeyFind(char *, char *, char *);
-int GRSTx509MakeProxyRequest(char **, char *, char *, char *);
-int GRSTx509CacheProxy(char *, char *, char *, char *);
-
-#define GRST_HEADFILE   "gridsitehead.txt"
-#define GRST_FOOTFILE   "gridsitefoot.txt"
-#define GRST_ADMIN_FILE "gridsite-admin.cgi"
-
-typedef struct { char *text;
-                 void *next; } GRSThttpCharsList;
-
-typedef struct { size_t             size;
-                 GRSThttpCharsList *first;
-                 GRSThttpCharsList *last;  } GRSThttpBody;
-
-void  GRSThttpBodyInit(GRSThttpBody *); 
-void  GRSThttpPrintf(GRSThttpBody *, char *, ...);
-int   GRSThttpCopy(GRSThttpBody *, char *);
-void  GRSThttpWriteOut(GRSThttpBody *);
-int   GRSThttpPrintHeaderFooter(GRSThttpBody *, char *, char *);
-char *GRSThttpGetCGI(char *);
diff --git a/org.gridsite.core/project/build.properties b/org.gridsite.core/project/build.properties
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.gridsite.core/project/configure.properties.xml b/org.gridsite.core/project/configure.properties.xml
deleted file mode 100644 (file)
index 6ee8706..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-       <!-- ======================================================
-                Define extra properties here ...
-                ====================================================== -->
-
-       <project name="configure options">
-        <property name="build.make.arguments"
-               value="prefix=${stage.abs.dir} GSOAPDIR=${with.gsoap.prefix} OPENSSL_FLAGS=-I${with.globus.prefix}/include/gcc32/openssl OPENSSL_LIBS=-L${with.globus.prefix}/lib/"/>
-       </project>
-
diff --git a/org.gridsite.core/project/dependencies.properties b/org.gridsite.core/project/dependencies.properties
deleted file mode 100644 (file)
index 2a7383b..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-###################################################################
-# System dependencies
-###################################################################
-
-org.glite.version = HEAD
-org.glite.core.version = HEAD
-
-# Component dependencies tag = do not remove this line =
-
diff --git a/org.gridsite.core/project/gridsite.core.csf.xml b/org.gridsite.core/project/gridsite.core.csf.xml
deleted file mode 100644 (file)
index 7ca38dc..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-<?xml version="1.0"?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       GLite Middleware WMS Configuration Specification File
-       
-       Authors: Alberto Di Meglio <alberto.di.meglio@cern.ch>          
-                Joachim Flammer <Joachim.Flammer@cern.ch>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.3  2004/10/27 10:35:37  dimeglio
-       Added missing closing target
-       
-       Revision 1.2  2004/10/27 10:28:29  dimeglio
-       Modified to use gridsite-core
-       
-       Revision 1.1  2004/10/26 17:54:24  dimeglio
-       First version of this file
-       
-       Revision 1.7  2004/10/18 23:01:18  dimeglio
-       Added oscheck to various targets
-       
-       Revision 1.6  2004/10/12 14:21:21  eronchie
-       Removed ssl_utils dependency
-       
-       Revision 1.5  2004/08/20 09:51:39  eronchie
-       Updated buildmodules orders
-       
-       Revision 1.4  2004/08/04 07:30:29  eronchie
-       Added cppunit
-       
-       Revision 1.3  2004/07/23 14:50:08  eronchie
-       Added exception
-       
-       Revision 1.2  2004/07/23 08:27:03  eronchie
-       Updated
-       
-       
--->
-
-<project name="Gridsite Core CSF" default="all">
-
-       <!-- overwrite default workspace directory -->
-       <property name="workspace.dir" value="../.." />
-
-       <!-- ===============================================
-                Load properties
-                =============================================== -->
-
-       <!-- load baseline and user properties -->
-       <import file="${workspace.dir}/org.glite/project/baseline.properties.xml" />
-
-       <!-- define build properties file location since we are already in project dir -->
-       <property name="subsystem.build.properties.file" value="./build.properties" />
-
-       <!-- Load subsytem-specific property files -->
-       <import file="./properties.xml"/>
-
-       <!-- load global properties -->
-       <import file="${global.properties.file}" />
-
-       <!-- ===============================================
-                Load dependencies 
-                =============================================== -->
-
-       <!-- Load user dependencies file -->
-       <property file="${user.dependencies.file}" />
-               
-       <!-- Load subsystem dependencies file -->
-       <property file="./dependencies.properties" />
-
-       <!-- Load global dependencies file -->
-       <property file="${global.dependencies.file}" />
-
-       <!-- ===============================================
-                Load targets 
-                =============================================== -->
-       <import file="${global.targets-envchecks.file}" />
-       <import file="${global.targets-external-dependencies.file}" />
-
-       <!-- ===============================================
-                Evaluate CVS tags
-                =============================================== -->
-
-       <target name="evaluate.cvs.tags" description="Figure out if we need tagged CVS checkout">
-                       <condition property="glite.head">
-                               <and>
-                                       <equals arg1="${org.glite.version}" arg2="HEAD" />
-                                       <or>
-                                               <istrue value="${update}" />
-                                               <not>
-                                                       <available file="${global.dependencies.file}" type="file" />
-                                               </not>
-                                       </or>
-                               </and>
-                       </condition>
-                       <condition property="glite.tag">
-                               <and>
-                                       <not>
-                                               <equals arg1="${org.glite.version}" arg2="HEAD" />
-                                       </not>
-                                       <or>
-                                               <istrue value="${update}" />
-                                               <not>
-                                                       <available file="${global.dependencies.file}" type="file" />
-                                               </not>
-                                       </or>
-                               </and>
-                       </condition>
-                       <condition property="gridsite-core.head">
-                               <and>
-                                       <equals arg1="${org.gridsite-core.version}" arg2="HEAD" />
-                                       <istrue value="${update}" />
-                               </and>
-                       </condition>
-                       <condition property="gridsite-core.tag">
-                               <and>
-                                       <not>
-                                               <equals arg1="${org.gridsite-core.version}" arg2="HEAD" />
-                                       </not>
-                                       <istrue value="${update}" />
-                               </and>
-                       </condition>
-
-               </target>
-       
-               <!-- condition property tag = do not remove = -->
-
-       <presetdef name="cvs-co">
-               <cvs command="checkout" dest="${workspace.dir}" />
-       </presetdef>
-
-       <!-- =====================================================
-                Self-update if required
-                ===================================================== -->
-               
-       <!-- Update main GLite module -->
-       <target name="org.glite" depends="get.glite.head, get.glite.tag"/>
-       <target name="get.glite.head" if="glite.head">
-               <cvs-co package="org.glite" />
-       </target>
-       <target name="get.glite.tag" if="glite.tag">
-               <cvs-co package="org.glite"
-                       tag="${org.glite.version}" />
-       </target>
-
-       <!-- Update the current module -->
-       <target name="org.gridsite.core" depends="get.gridsite-core.head, get.gridsite-core.tag"/>
-       <target name="get.gridsite-core.head" if="gridsite-core.head">
-               <cvs-co package="org.gridsite.core" />
-               <fail>The org.glite and org.gridsite.core modules have been updated, please rerun the configuration file</fail>
-       </target>
-       <target name="get.gridsite-core.tag" if="gridsite-core.tag">
-               <cvs-co package="org.gridsite.core"
-                       tag="${org.gridsite.core.version}" />
-               <fail>The org.glite and org.gridsite.core modules have been updated, please rerun the configuration file</fail>
-       </target>
-
-       <!-- *****************************************************-->
-       <!-- Development tools                                    -->
-       <!-- *****************************************************-->
-       
-       <!-- All development tools -->
-       <target name="devtools" depends="oscheck,
-                                        junitcheck,
-                                        junit,
-                                    chkstyle,
-                                        jalopy,
-                                        ant-contrib,
-                                        cpptasks,
-                                        egee-ant-ext"/>                
-       
-       <!-- =====================================================
-                External libraries
-                ===================================================== -->
-       
-       <!--  All external libraries -->
-       <target name="external" depends="oscheck,
-                                        log4j"/>
-       
-       <!-- =====================================================
-                GLite WMS modules
-                ===================================================== -->
-
-       <!-- component targets tag = do not remove = -->
-
-       <!-- All project modules -->
-       <target name="project" depends=""/>
-
-
-       <!-- ====================================================
-                Checkout all
-                ==================================================== -->
-       
-       <!-- All libraries -->
-       <target name="all" depends="oscheck,evaluate.cvs.tags,defaultenvchecks,org.glite,org.gridsite.core,devtools,external,project" />                
-
-       <!-- ====================================================
-                Print dependecies to console
-                ==================================================== -->
-       
-       <target name="dependencies">
-               <concat>
-                       <fileset dir="." includes="dependencies.properties" />
-               </concat>
-       </target>               
-
-</project>
diff --git a/org.gridsite.core/project/properties.xml b/org.gridsite.core/project/properties.xml
deleted file mode 100644 (file)
index 74f88dc..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Common build properties file for the Gridsite Core modules
-       
-       Authors: Alberto Di Meglio <alberto.di.meglio@cern.ch>          
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
--->
-
-<project name="Gridsite Core common properties">
-
-       <!-- Include build properties to allow overwriting 
-            of properties for subsystem                    -->
-       <property name="subsystem.build.properties.file" value="./project/build.properties" />
-       <property file="${subsystem.build.properties.file}" />  
-
-       <!-- ======================================================
-          Define subsystem properties
-                ====================================================== -->
-       
-       <!-- Subsystem name -->
-       <property name="subsystem.name" value="${gridsite-core.subsystem.name}"/>
-       
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${gridsite-core.subsystem.prefix}"/>
-       
-       <!-- ======================================================
-          Define general subsystem properties
-                ====================================================== -->
-               
-       <!-- Include common subsystem properties -->
-       <import file="${subsystem.general.properties.file}" />
-       
-       <!-- ======================================================
-                Define extra properties here ...
-                ====================================================== -->
-                                       
-</project>
diff --git a/org.gridsite.core/project/taskdefs.xml b/org.gridsite.core/project/taskdefs.xml
deleted file mode 100644 (file)
index 9c35cef..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-       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), Finland
-       University of Bergen (UiB), Norway
-       Council for the Central Laboratory of the Research Councils (CCLRC), United Kingdom
-
-       Common Ant task definition file for the Gridsite Core modules
-       
-       Authors: Alberto Di Meglio <alberto.di.meglio@cern.ch>          
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
--->
-
-<project name="Gridsite Core common tasks and types definitions">
-
-<!-- ======================================================
-        Subsystem task definitions
-        ====================================================== -->
-
-</project>
\ No newline at end of file
diff --git a/org.gridsite.core/project/version.properties b/org.gridsite.core/project/version.properties
deleted file mode 100644 (file)
index 271daff..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Dec 10 12:31:28 CET 2004
-module.version=1.1.3
-module.build=71
-module.age=2
diff --git a/org.gridsite.core/src/Doxyfile b/org.gridsite.core/src/Doxyfile
deleted file mode 100644 (file)
index e47d005..0000000
+++ /dev/null
@@ -1,993 +0,0 @@
-# Doxyfile 1.2.18
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
-#
-# All text after a hash (#) is considered a comment and will be ignored
-# The format is:
-#       TAG = value [value, ...]
-# For lists items can also be appended using:
-#       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
-
-#---------------------------------------------------------------------------
-# General configuration options
-#---------------------------------------------------------------------------
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
-# by quotes) that should identify the project.
-
-PROJECT_NAME           = 
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
-# This could be handy for archiving the generated documentation or 
-# if some version control system is used.
-
-PROJECT_NUMBER         = 
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
-# base path where the generated documentation will be put. 
-# If a relative path is entered, it will be relative to the location 
-# where doxygen was started. If left blank the current directory will be used.
-
-OUTPUT_DIRECTORY       = 
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
-# documentation generated by doxygen is written. Doxygen will use this 
-# information to generate all constant output in the proper language. 
-# The default language is English, other supported languages are: 
-# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, 
-# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en 
-# (Japanese with english messages), Korean, Norwegian, Polish, Portuguese, 
-# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish and Ukrainian.
-
-OUTPUT_LANGUAGE        = English
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
-# documentation are documented, even if no documentation was available. 
-# Private class members and static file members will be hidden unless 
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
-EXTRACT_ALL            = YES
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
-# will be included in the documentation.
-
-EXTRACT_PRIVATE        = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file 
-# will be included in the documentation.
-
-EXTRACT_STATIC         = NO
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
-# defined locally in source files will be included in the documentation. 
-# If set to NO only classes defined in header files are included.
-
-EXTRACT_LOCAL_CLASSES  = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
-# undocumented members of documented classes, files or namespaces. 
-# If set to NO (the default) these members will be included in the 
-# various overviews, but no documentation section is generated. 
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS     = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
-# undocumented classes that are normally visible in the class hierarchy. 
-# If set to NO (the default) these class will be included in the various 
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES     = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
-# friend (class|struct|union) declarations. 
-# If set to NO (the default) these declarations will be included in the 
-# documentation.
-
-HIDE_FRIEND_COMPOUNDS  = NO
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
-# include brief member descriptions after the members that are listed in 
-# the file and class documentation (similar to JavaDoc). 
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
-# the brief description of a member or function before the detailed description. 
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF           = YES
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
-# Doxygen will generate a detailed section even if there is only a brief 
-# description.
-
-ALWAYS_DETAILED_SEC    = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited 
-# members of a class in the documentation of that class as if those members were 
-# ordinary class members. Constructors, destructors and assignment operators of 
-# the base classes will not be shown.
-
-INLINE_INHERITED_MEMB  = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
-# path before files name in the file list and in the header files. If set 
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES        = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
-# can be used to strip a user defined part of the path. Stripping is 
-# only done if one of the specified strings matches the left-hand part of 
-# the path. It is allowed to use relative paths in the argument list.
-
-STRIP_FROM_PATH        = 
-
-# The INTERNAL_DOCS tag determines if documentation 
-# that is typed after a \internal command is included. If the tag is set 
-# to NO (the default) then the documentation will be excluded. 
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS          = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
-# doxygen to hide any special comment blocks from generated source code 
-# fragments. Normal C and C++ comments will always remain visible.
-
-STRIP_CODE_COMMENTS    = YES
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
-# file names in lower case letters. If set to YES upper case letters are also 
-# allowed. This is useful if you have classes or files whose names only differ 
-# in case and if your file system supports case sensitive file names. Windows 
-# users are adviced to set this option to NO.
-
-CASE_SENSE_NAMES       = YES
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
-# (but less readable) file names. This can be useful is your file systems 
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES            = NO
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
-# will show members with their full class and namespace scopes in the 
-# documentation. If set to YES the scope will be hidden.
-
-HIDE_SCOPE_NAMES       = NO
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
-# will generate a verbatim copy of the header file for each class for 
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS       = YES
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
-# will put list of the files that are included by a file in the documentation 
-# of that file.
-
-SHOW_INCLUDE_FILES     = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
-# will interpret the first line (until the first dot) of a JavaDoc-style 
-# comment as the brief description. If set to NO, the JavaDoc 
-# comments  will behave just like the Qt-style comments (thus requiring an 
-# explict @brief command for a brief description.
-
-JAVADOC_AUTOBRIEF      = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
-# comments) as a brief description. This used to be the default behaviour. 
-# The new default is to treat a multi-line C++ comment block as a detailed 
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
-# will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member 
-# documentation.
-
-DETAILS_AT_TOP         = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
-# member inherits the documentation from any documented member that it 
-# reimplements.
-
-INHERIT_DOCS           = YES
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
-# is inserted in the documentation for inline members.
-
-INLINE_INFO            = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
-# will sort the (detailed) documentation of file and class members 
-# alphabetically by member name. If set to NO the members will appear in 
-# declaration order.
-
-SORT_MEMBER_DOCS       = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
-# tag is set to YES, then doxygen will reuse the documentation of the first 
-# member in the group (if any) for the other members of the group. By default 
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC   = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE               = 8
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or 
-# disable (NO) the todo list. This list is created by putting \todo 
-# commands in the documentation.
-
-GENERATE_TODOLIST      = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or 
-# disable (NO) the test list. This list is created by putting \test 
-# commands in the documentation.
-
-GENERATE_TESTLIST      = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or 
-# disable (NO) the bug list. This list is created by putting \bug 
-# commands in the documentation.
-
-GENERATE_BUGLIST       = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
-# disable (NO) the deprecated list. This list is created by putting \deprecated commands in the documentation.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# This tag can be used to specify a number of aliases that acts 
-# as commands in the documentation. An alias has the form "name=value". 
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
-# put the command \sideeffect (or @sideeffect) in the documentation, which 
-# will result in a user defined paragraph with heading "Side Effects:". 
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES                = 
-
-# The ENABLED_SECTIONS tag can be used to enable conditional 
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS       = 
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
-# the initial value of a variable or define consist of for it to appear in 
-# the documentation. If the initializer consists of more lines than specified 
-# here it will be hidden. Use a value of 0 to hide initializers completely. 
-# The appearance of the initializer of individual variables and defines in the 
-# documentation can be controlled using \showinitializer or \hideinitializer 
-# command in the documentation regardless of this setting.
-
-MAX_INITIALIZER_LINES  = 30
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources 
-# only. Doxygen will then generate output that is more tailored for C. 
-# For instance some of the names that are used will be different. The list 
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C  = YES
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources 
-# only. Doxygen will then generate output that is more tailored for Java. 
-# For instance namespaces will be presented as packages, qualified scopes 
-# will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA   = NO
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
-# at the bottom of the documentation of classes and structs. If set to YES the 
-# list will mention the files that were used to generate the documentation.
-
-SHOW_USED_FILES        = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated 
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
-QUIET                  = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are 
-# generated by doxygen. Possible values are YES and NO. If left blank 
-# NO is used.
-
-WARNINGS               = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
-# automatically be disabled.
-
-WARN_IF_UNDOCUMENTED   = YES
-
-# The WARN_FORMAT tag determines the format of the warning messages that 
-# doxygen can produce. The string should contain the $file, $line, and $text 
-# tags, which will be replaced by the file and line number from which the 
-# warning originated and the warning text.
-
-WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning 
-# and error messages should be written. If left blank the output is written 
-# to stderr.
-
-WARN_LOGFILE           = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories that contain 
-# documented source files. You may enter file names like "myfile.cpp" or 
-# directories like "/usr/src/myproject". Separate the files or directories 
-# with spaces.
-
-INPUT                  =
-
-# If the value of the INPUT tag contains directories, you can use the 
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
-# blank the following patterns are tested: 
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp 
-# *.h++ *.idl *.odl
-
-FILE_PATTERNS          =
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
-# should be searched for input files as well. Possible values are YES and NO. 
-# If left blank NO is used.
-
-RECURSIVE              = NO
-
-# The EXCLUDE tag can be used to specify files and/or directories that should 
-# excluded from the INPUT source files. This way you can easily exclude a 
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-
-EXCLUDE                = 
-
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories 
-# that are symbolic links (a Unix filesystem feature) are excluded from the input.
-
-EXCLUDE_SYMLINKS       = NO
-
-# If the value of the INPUT tag contains directories, you can use the 
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
-# certain files from those directories.
-
-EXCLUDE_PATTERNS       = 
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or 
-# directories that contain example code fragments that are included (see 
-# the \include command).
-
-EXAMPLE_PATH           = 
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
-# blank all files are included.
-
-EXAMPLE_PATTERNS       = 
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
-# searched for input files to be used with the \include or \dontinclude 
-# commands irrespective of the value of the RECURSIVE tag. 
-# Possible values are YES and NO. If left blank NO is used.
-
-EXAMPLE_RECURSIVE      = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or 
-# directories that contain image that are included in the documentation (see 
-# the \image command).
-
-IMAGE_PATH             = 
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should 
-# invoke to filter for each input file. Doxygen will invoke the filter program 
-# by executing (via popen()) the command <filter> <input-file>, where <filter> 
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
-# input file. Doxygen will then use the output that the filter program writes 
-# to standard output.
-
-INPUT_FILTER           = 
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
-# INPUT_FILTER) will be used to filter the input files when producing source 
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
-FILTER_SOURCE_FILES    = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
-# be generated. Documented entities will be cross-referenced with these sources.
-
-SOURCE_BROWSER         = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body 
-# of functions and classes directly in the documentation.
-
-INLINE_SOURCES         = NO
-
-# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
-# then for each documented function all documented 
-# functions referencing it will be listed.
-
-REFERENCED_BY_RELATION = NO
-
-# If the REFERENCES_RELATION tag is set to YES (the default) 
-# then for each documented function all documented entities 
-# called/used by that function will be listed.
-
-REFERENCES_RELATION    = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
-# of all compounds will be generated. Enable this if the project 
-# contains a lot of classes, structs, unions or interfaces.
-
-ALPHABETICAL_INDEX     = YES
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
-# in which this list will be split (can be a number in the range [1..20])
-
-COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all 
-# classes will be put under the same header in the alphabetical index. 
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX          = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
-# generate HTML output.
-
-GENERATE_HTML          = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `html' will be used as the default path.
-
-HTML_OUTPUT            = doxygen
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
-# doxygen will generate files with .html extension.
-
-HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for 
-# each generated HTML page. If it is left blank doxygen will generate a 
-# standard header.
-
-HTML_HEADER            =
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
-# each generated HTML page. If it is left blank doxygen will generate a 
-# standard footer.
-
-HTML_FOOTER            =
-
-# The HTML_STYLESHEET tag can be used to specify a user defined cascading 
-# style sheet that is used by each HTML page. It can be used to 
-# fine-tune the look of the HTML output. If the tag is left blank doxygen 
-# will generate a default style sheet
-
-HTML_STYLESHEET        = doxygen.css
-
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
-# files or namespaces will be aligned in HTML using tables. If set to 
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS     = YES
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
-# will be generated that can be used as input for tools like the 
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
-# of the generated HTML documentation.
-
-GENERATE_HTMLHELP      = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
-# be used to specify the file name of the resulting .chm file. You 
-# can add a path in front of the file if the result should not be 
-# written to the html output dir.
-
-CHM_FILE               = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
-# be used to specify the location (absolute path including file name) of 
-# the HTML help compiler (hhc.exe). If non empty doxygen will try to run 
-# the html help compiler on the generated index.hhp.
-
-HHC_LOCATION           = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
-# controls if a separate .chi index file is generated (YES) or that 
-# it should be included in the master .chm file (NO).
-
-GENERATE_CHI           = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
-# controls whether a binary table of contents is generated (YES) or a 
-# normal table of contents (NO) in the .chm file.
-
-BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members 
-# to the contents of the Html help documentation and to the tree view.
-
-TOC_EXPAND             = NO
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
-# top of each HTML page. The value NO (the default) enables the index and 
-# the value YES disables it.
-
-DISABLE_INDEX          = YES
-
-# This tag can be used to set the number of enum values (range [1..20]) 
-# that doxygen will group on one line in the generated HTML documentation.
-
-ENUM_VALUES_PER_LINE   = 4
-
-# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that 
-# is generated for HTML Help). For this to work a browser that supports 
-# JavaScript and frames is required (for instance Mozilla, Netscape 4.0+, 
-# or Internet explorer 4.0+). Note that for large projects the tree generation 
-# can take a very long time. In such cases it is better to disable this feature. 
-# Windows users are probably better off using the HTML help feature.
-
-GENERATE_TREEVIEW      = NO
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
-# used to set the initial width (in pixels) of the frame in which the tree 
-# is shown.
-
-TREEVIEW_WIDTH         = 250
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
-# generate Latex output.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be invoked. If left blank `latex' will be used as the default command name.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
-# generate index for LaTeX. If left blank `makeindex' will be used as the 
-# default command name.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
-# LaTeX documents. This may be useful for small projects and may help to 
-# save some trees in general.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used 
-# by the printer. Possible values are: a4, a4wide, letter, legal and 
-# executive. If left blank a4wide will be used.
-
-PAPER_TYPE             = a4wide
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
-# packages that should be included in the LaTeX output.
-
-EXTRA_PACKAGES         = 
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
-# the generated latex document. The header should contain everything until 
-# the first chapter. If it is left blank doxygen will generate a 
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER           = 
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
-# contain links (just like the HTML output) instead of page references 
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS         = NO
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
-# plain latex in the generated Makefile. Set this option to YES to get a 
-# higher quality PDF documentation.
-
-USE_PDFLATEX           = NO
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
-# command to the generated LaTeX files. This will instruct LaTeX to keep 
-# running if errors occur, instead of asking the user for help. 
-# This option is also used when generating formulas in HTML.
-
-LATEX_BATCHMODE        = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
-# The RTF output is optimised for Word 97 and may not look very pretty with 
-# other RTF readers or editors.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
-# RTF documents. This may be useful for small projects and may help to 
-# save some trees in general.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
-# will contain hyperlink fields. The RTF file will 
-# contain links (just like the HTML output) instead of page references. 
-# This makes the output suitable for online browsing using WORD or other 
-# programs which support those fields. 
-# Note: wordpad (write) and others do not support links.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's 
-# config file, i.e. a series of assigments. You only have to provide 
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE    = 
-
-# Set optional variables used in the generation of an rtf document. 
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE    = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
-# generate man pages
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to 
-# the generated man pages (default is the subroutine's section .3)
-
-MAN_EXTENSION          = .3
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
-# then it will generate one additional man file for each entity 
-# documented in the real man page(s). These additional files 
-# only source the real man page, but without them the man command 
-# would be unable to find the correct page. The default is NO.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will 
-# generate an XML file that captures the structure of 
-# the code including all documentation. Note that this 
-# feature is still experimental and incomplete at the 
-# moment.
-
-GENERATE_XML           = NO
-
-# The XML_SCHEMA tag can be used to specify an XML schema, 
-# which can be used by a validating XML parser to check the 
-# syntax of the XML files.
-
-XML_SCHEMA             = 
-
-# The XML_DTD tag can be used to specify an XML DTD, 
-# which can be used by a validating XML parser to check the 
-# syntax of the XML files.
-
-XML_DTD                = 
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
-# generate an AutoGen Definitions (see autogen.sf.net) file 
-# that captures the structure of the code including all 
-# documentation. Note that this feature is still experimental 
-# and incomplete at the moment.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor   
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
-# evaluate all C-preprocessor directives found in the sources and include 
-# files.
-
-ENABLE_PREPROCESSING   = NO
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
-# names in the source code. If set to NO (the default) only conditional 
-# compilation will be performed. Macro expansion can be done in a controlled 
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
-MACRO_EXPANSION        = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
-# then the macro expansion is limited to the macros specified with the 
-# PREDEFINED and EXPAND_AS_PREDEFINED tags.
-
-EXPAND_ONLY_PREDEF     = NO
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that 
-# contain include files that are not input files but should be processed by 
-# the preprocessor.
-
-INCLUDE_PATH           = 
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
-# patterns (like *.h and *.hpp) to filter out the header-files in the 
-# directories. If left blank, the patterns specified with FILE_PATTERNS will 
-# be used.
-
-INCLUDE_FILE_PATTERNS  = 
-
-# The PREDEFINED tag can be used to specify one or more macro names that 
-# are defined before the preprocessor is started (similar to the -D option of 
-# gcc). The argument of the tag is a list of macros of the form: name 
-# or name=definition (no spaces). If the definition and the = are 
-# omitted =1 is assumed.
-
-PREDEFINED             = 
-
-# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then 
-# this tag can be used to specify a list of macro names that should be expanded. 
-# The macro definition that is found in the sources will be used. 
-# Use the PREDEFINED tag if you want to use a different macro definition.
-
-EXPAND_AS_DEFINED      = 
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
-# doxygen's preprocessor will remove all function-like macros that are alone 
-# on a line, have an all uppercase name, and do not end with a semicolon. Such 
-# function macros are typically used for boiler-plate code, and will confuse the 
-# parser if not removed.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration::addtions related to external references   
-#---------------------------------------------------------------------------
-
-# The TAGFILES tag can be used to specify one or more tagfiles.
-
-TAGFILES               = 
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
-# a tag file that is based on the input files it reads.
-
-GENERATE_TAGFILE       = 
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
-# in the class index. If set to NO only the inherited external classes 
-# will be listed.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
-# in the modules index. If set to NO, only the current project's groups will 
-# be listed.
-
-EXTERNAL_GROUPS        = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script 
-# interpreter (i.e. the result of `which perl').
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool   
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
-# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or 
-# super classes. Setting the tag to NO turns the diagrams off. Note that this 
-# option is superceded by the HAVE_DOT option below. This is only a fallback. It is 
-# recommended to install and use dot, since it yield more powerful graphs.
-
-CLASS_DIAGRAMS         = YES
-
-# If set to YES, the inheritance and collaboration graphs will hide 
-# inheritance and usage relations if the target is undocumented 
-# or is not a class.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
-# available from the path. This tool is part of Graphviz, a graph visualization 
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
-# have no effect if this option is set to NO (the default)
-
-HAVE_DOT               = NO
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect inheritance relations. Setting this tag to YES will force the 
-# the CLASS_DIAGRAMS tag to NO.
-
-CLASS_GRAPH            = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect implementation dependencies (inheritance, containment, and 
-# class references variables) of the class with other documented classes.
-
-COLLABORATION_GRAPH    = YES
-
-# If set to YES, the inheritance and collaboration graphs will show the 
-# relations between templates and their instances.
-
-TEMPLATE_RELATIONS     = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
-# tags are set to YES then doxygen will generate a graph for each documented 
-# file showing the direct and indirect include dependencies of the file with 
-# other documented files.
-
-INCLUDE_GRAPH          = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
-# documented header file showing the documented files that directly or 
-# indirectly include this file.
-
-INCLUDED_BY_GRAPH      = YES
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
-# will graphical hierarchy of all classes instead of a textual one.
-
-GRAPHICAL_HIERARCHY    = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
-# generated by dot. Possible values are png, jpg, or gif
-# If left blank png will be used.
-
-DOT_IMAGE_FORMAT       = png
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be 
-# found. If left blank, it is assumed the dot tool can be found on the path.
-
-DOT_PATH               = 
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that 
-# contain dot files that are included in the documentation (see the 
-# \dotfile command).
-
-DOTFILE_DIRS           = 
-
-# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
-# this value, doxygen will try to truncate the graph, so that it fits within 
-# the specified constraint. Beware that most browsers cannot cope with very 
-# large images.
-
-MAX_DOT_GRAPH_WIDTH    = 1024
-
-# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
-# this value, doxygen will try to truncate the graph, so that it fits within 
-# the specified constraint. Beware that most browsers cannot cope with very 
-# large images.
-
-MAX_DOT_GRAPH_HEIGHT   = 1024
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
-# generate a legend page explaining the meaning of the various boxes and 
-# arrows in the dot generated graphs.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
-# remove the intermedate dot files that are used to generate 
-# the various graphs.
-
-DOT_CLEANUP            = YES
-
-#---------------------------------------------------------------------------
-# Configuration::addtions related to the search engine   
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be 
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE           = NO
-
-# The CGI_NAME tag should be the name of the CGI script that 
-# starts the search engine (doxysearch) with the correct parameters. 
-# A script with this name will be generated by doxygen.
-
-CGI_NAME               = search.cgi
-
-# The CGI_URL tag should be the absolute URL to the directory where the 
-# cgi binaries are located. See the documentation of your http daemon for 
-# details.
-
-CGI_URL                = 
-
-# The DOC_URL tag should be the absolute URL to the directory where the 
-# documentation is located. If left blank the absolute path to the 
-# documentation, with file:// prepended to it, will be used.
-
-DOC_URL                = 
-
-# The DOC_ABSPATH tag should be the absolute path to the directory where the 
-# documentation is located. If left blank the directory on the local machine 
-# will be used.
-
-DOC_ABSPATH            = 
-
-# The BIN_ABSPATH tag must point to the directory where the doxysearch binary 
-# is installed.
-
-BIN_ABSPATH            = /usr/local/bin/
-
-# The EXT_DOC_PATHS tag can be used to specify one or more paths to 
-# documentation generated for other projects. This allows doxysearch to search 
-# the documentation for these projects as well.
-
-EXT_DOC_PATHS          = 
diff --git a/org.gridsite.core/src/Makefile b/org.gridsite.core/src/Makefile
deleted file mode 100644 (file)
index bd66586..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-#
-#   Andrew McNab and Shiv Kaushal, University of Manchester.
-#   Copyright (c) 2002-4. All rights reserved.
-#
-#   Redistribution and use in source and binary forms, with or
-#   without modification, are permitted provided that the following
-#   conditions are met:
-#
-#     o Redistributions of source code must retain the above
-#       copyright notice, this list of conditions and the following
-#       disclaimer. 
-#     o 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. 
-#
-#   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-#   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-#
-#---------------------------------------------------------------
-# For more information about GridSite: http://www.gridsite.org/ 
-#---------------------------------------------------------------
-
-include ../VERSION
-
-RPMCMD=$(shell if [ -x /usr/bin/rpmbuild ] ; then echo /usr/bin/rpmbuild; else echo rpm; fi)
-
-ifndef MYRPMDIR
-export MYRPMDIR=$(shell pwd)/../RPMTMP
-endif
-
-ifndef prefix
-export prefix=/usr/local
-endif
-
-ifndef MYCFLAGS
-export MYCFLAGS=-I. -I../interface -I/usr/include/httpd -I/usr/include/apr-0 -I/opt/glite/include
-endif
-
-ifndef OPENSSL_FLAGS
-export OPENSSL_FLAGS=-I/usr/include/openssl
-endif
-
-ifndef MYLDFLAGS
-export MYLDFLAGS=-L.
-# export MYLDFLAGS=-L. -L/opt/glite/lib -lvomsc
-endif
-
-ifndef OPENSSL_LIBS
-export OPENSSL_LIBS=-L/usr/lib/openssl
-endif
-
-#
-# Build
-#
-
-build: libgridsite.so.$(VERSION) libgridsite.a htcp mod_gridsite.so \
-       urlencode findproxyfile real-gridsite-admin.cgi \
-       # gridsite-delegation.cgi # htproxyput
-
-libgridsite.so.$(VERSION): grst_x509.o grst_gacl.o grst_http.o
-       gcc -shared -Wl,-soname,libgridsite.so.$(MINOR_VERSION) \
-         -o libgridsite.so.$(PATCH_VERSION) grst_x509.o grst_gacl.o grst_http.o
-
-libgridsite.a: grst_x509.o grst_gacl.o grst_http.o
-       ar src libgridsite.a grst_x509.o grst_gacl.o grst_http.o
-
-grst_x509.o: grst_x509.c ../interface/gridsite.h
-       gcc $(MYCFLAGS) $(OPENSSL_FLAGS) \
-            -I/usr/kerberos/include -c grst_x509.c
-
-grst_gacl.o: grst_gacl.c ../interface/gridsite.h
-       gcc $(MYCFLAGS) $(OPENSSL_FLAGS) \
-            -I/usr/kerberos/include `xml2-config --cflags` -c grst_gacl.c
-
-grst_http.o: grst_http.c ../interface/gridsite.h
-       gcc $(MYCFLAGS) $(OPENSSL_FLAGS) \
-                        -I/usr/kerberos/include -c grst_http.c
-
-urlencode: urlencode.c libgridsite.a
-       gcc -DVERSION=\"$(PATCH_VERSION)\" $(MYCFLAGS) \
-            -o urlencode urlencode.c -L. \
-             $(OPENSSL_FLAGS) -I/usr/kerberos/include -lgridsite
-
-htcp: htcp.c
-       gcc -DVERSION=\"$(PATCH_VERSION)\" -I. -o htcp htcp.c \
-          `curl-config --cflags` `curl-config --libs` 
-
-mod_gridsite.so: mod_gridsite.c mod_ssl-private.h libgridsite.a
-       gcc $(MYCFLAGS) -shared -Wl,-soname=gridsite_module \
-            $(OPENSSL_FLAGS) -I/usr/kerberos/include \
-           -I/usr/include/libxml2 \
-           -DVERSION=\"$(VERSION)\" -o mod_gridsite.so \
-           mod_gridsite.c $(MYLDFLAGS) -lxml2 -lm -lz -lgridsite
-
-real-gridsite-admin.cgi: grst_admin_main.c grst_admin_gacl.c \
-                         grst_admin_file.c grst_admin.h
-       gcc $(MYCFLAGS) $(MYLDFLAGS) -o real-gridsite-admin.cgi \
-            grst_admin_main.c \
-            grst_admin_gacl.c \
-            grst_admin_file.c \
-             $(OPENSSL_FLAGS) -I/usr/kerberos/include \
-            -DVERSION=\"$(VERSION)\" $(OPENSSL_LIBS) -lgridsite -lssl -lcrypto -lxml2 -lz -lm
-
-findproxyfile: findproxyfile.c libgridsite.a
-       gcc -DVERSION=\"$(PATCH_VERSION)\" $(MYCFLAGS) $(MYLDFLAGS) \
-            -o findproxyfile findproxyfile.c -L. \
-             $(OPENSSL_FLAGS) -I/usr/kerberos/include -lgridsite \
-             $(OPENSSL_LIBS) -lssl -lcrypto -lxml2 -lz -lm
-
-apidoc:
-       doxygen Doxyfile
-
-gaclexample: gaclexample.c libgridsite.a
-       gcc -o gaclexample gaclexample.c -I. -L. \
-             $(OPENSSL_FLAGS) -I/usr/kerberos/include -lgridsite \
-            -lssl -lcrypto -lxml2 -lz -lm 
-
-#
-# Delegation machinery, including SOAP delegation portType. To build this
-# you need to install gSOAP and set GSOAPDIR to the directory containing
-# soapcpp2 and stdsoap2.h (unless GSOAPDIR is set already)
-#
-
-ifndef GSOAPDIR
-export GSOAPDIR=/usr/local/lib/gsoap
-endif
-
-delegation.wsdl: delegation.h
-       ls -lR $(GSOAPDIR)
-       $(GSOAPDIR)/bin/soapcpp2 -c delegation.h
-
-libstdsoap2.a: $(GSOAPDIR)/stdsoap2.c
-       gcc -c -DWITH_OPENSSL $(GSOAPDIR)/stdsoap2.c
-       ar src libstdsoap2.a stdsoap2.o
-
-gridsite-delegation.cgi: grst-delegation.c delegation.h delegation.wsdl \
-                         soapC.c soapServer.c
-       gcc $(MYCFLAGS) $(MYLDFLAGS) -o gridsite-delegation.cgi \
-            grst-delegation.c \
-             $(OPENSSL_FLAGS) -I/usr/kerberos/include -I$(GSOAPDIR)/include \
-            -DVERSION=\"$(VERSION)\" -L$(GSOAPDIR)/lib \
-            soapC.c soapServer.c -lgsoap \
-            -lgridsite -lcurl -lz -lssl -lcrypto -lxml2 -lm
-
-htproxyput: htproxyput.c delegation.h delegation.wsdl \
-            soapC.c soapServer.c
-       gcc $(MYCFLAGS) $(MYLDFLAGS) -o htproxyput \
-            htproxyput.c \
-             $(OPENSSL_FLAGS) -I/usr/kerberos/include \
-            -g -DVERSION=\"$(VERSION)\" \
-            -I$(GSOAPDIR)/include -DWITH_OPENSSL -L$(GSOAPDIR)/lib \
-            soapC.c soapClient.c -lgsoap \
-            -lgridsite -lcurl -lz -lssl -lcrypto -lxml2 -lm
-
-proxyput-example: proxyput-example.c delegation.h delegation.wsdl \
-            soapC.c soapServer.c libstdsoap2.a
-       gcc $(MYCFLAGS) $(MYLDFLAGS) -o proxyput-example \
-            proxyput-example.c \
-             $(OPENSSL_FLAGS) -I/usr/kerberos/include \
-            -g -DVERSION=\"$(VERSION)\" \
-            -I$(GSOAPDIR) -DWITH_OPENSSL \
-            soapC.c soapClient.c libstdsoap2.a \
-            -lgridsite -lcurl -lz -lssl -lcrypto -lxml2 -lm
-
-clean:
-
-#
-# Install
-#
-
-install: apidoc
-       mkdir -p $(prefix)/include \
-                 $(prefix)/lib \
-                 $(prefix)/bin \
-                 $(prefix)/sbin \
-                 $(prefix)/share/man/man1 \
-                 $(prefix)/lib/httpd/modules \
-                 $(prefix)/share/doc/gridsite-$(PATCH_VERSION)
-       cp -f ../interface/gridsite.h $(prefix)/include
-       cp -f ../interface/gridsite-gacl.h $(prefix)/include
-       cp -f urlencode $(prefix)/bin
-       cp -f findproxyfile $(prefix)/bin
-       cp -f libgridsite.a $(prefix)/lib
-       cp -f real-gridsite-admin.cgi $(prefix)/sbin
-       cp -f  libgridsite.so.$(PATCH_VERSION) $(prefix)/lib
-       ln -sf libgridsite.so.$(PATCH_VERSION) \
-                                 $(prefix)/lib/libgridsite.so
-       ln -sf libgridsite.so.$(PATCH_VERSION) \
-                                 $(prefix)/lib/libgridsite.so.$(MAJOR_VERSION)
-       ln -sf libgridsite.so.$(PATCH_VERSION) \
-                                 $(prefix)/lib/libgridsite.so.$(MINOR_VERSION)
-       cp -f doxygen/index.html \
-              $(prefix)/share/doc/gridsite-$(PATCH_VERSION)/doxygen-index.html
-       cp -f doxygen/* $(prefix)/share/doc/gridsite-$(PATCH_VERSION)
-       cp -f ../CHANGES ../README ../INSTALL ../LICENSE ../VERSION \
-               $(prefix)/share/doc/gridsite-$(PATCH_VERSION)
-       cp -f ../doc/*.html ../doc/*.conf ../doc/*.1 ../doc/*.sh \
-               $(prefix)/share/doc/gridsite-$(VERSION)
-       cp -f ../doc/*.1 $(prefix)/share/man/man1
-       gzip -f $(prefix)/share/man/man1/*.1
-       cd ../doc ; for i in *.1 ; do ../src/roffit < $$i \
-          > $(prefix)/share/doc/gridsite-$(VERSION)/$$i.html ; done
-       cp -f htcp $(prefix)/bin
-       ln -sf htcp $(prefix)/bin/htls
-       ln -sf htcp $(prefix)/bin/htll
-       ln -sf htcp $(prefix)/bin/htrm
-       ln -sf htcp $(prefix)/bin/htmkdir
-       cp -f mod_gridsite.so $(prefix)/lib/httpd/modules
-
-#
-# Distributions
-#
-
-# source files tarball
-dist:
-       mkdir -p ../gridsite-$(PATCH_VERSION)/src \
-                 ../gridsite-$(PATCH_VERSION)/doc \
-                 ../gridsite-$(PATCH_VERSION)/interface
-       cp -f ../VERSION ../README ../LICENSE ../CHANGES ../INSTALL \
-                 ../gridsite-$(PATCH_VERSION)
-       cp -f Makefile grst*.c htproxyput.c proxyput-example.c htcp.c \
-                 urlencode.c findproxyfile.c gaclexample.c mod_gridsite.c \
-                 delegation.h grst_admin.h mod_ssl-private.h \
-                 roffit gridsite.spec \
-                 Doxyfile doxygen.css doxyheader.html \
-                 ../gridsite-$(PATCH_VERSION)/src
-       cp -f ../doc/*.html ../doc/*.1 ../doc/*.conf ../doc/*.sh \
-                 ../gridsite-$(PATCH_VERSION)/doc
-       cp -f ../interface/*.h \
-                 ../gridsite-$(PATCH_VERSION)/interface
-       cd .. ; tar zcvf gridsite-$(PATCH_VERSION).src.tar.gz \
-                 gridsite-$(PATCH_VERSION)
-       rm -Rf ../gridsite-$(PATCH_VERSION)
-
-
-# binary tarball distribution for htcp users
-htcp-bin: htcp
-       mkdir -p ../htcp-bin-$(PATCH_VERSION)/bin \
-                 ../htcp-bin-$(PATCH_VERSION)/man/man1
-       cp -f ../doc/README.htcp-bin ../htcp-bin-$(PATCH_VERSION)
-       cp -f htcp ../htcp-bin-$(PATCH_VERSION)/bin
-       cp -f ../doc/htcp.1 ../doc/htrm.1 ../doc/htls.1 ../doc/htll.1 \
-              ../doc/htmkdir.1 ../htcp-bin-$(PATCH_VERSION)/man/man1
-       ln -sf htcp ../htcp-bin-$(PATCH_VERSION)/bin/htls
-       ln -sf htcp ../htcp-bin-$(PATCH_VERSION)/bin/htll
-       ln -sf htcp ../htcp-bin-$(PATCH_VERSION)/bin/htrm
-       ln -sf htcp ../htcp-bin-$(PATCH_VERSION)/bin/htmkdir
-       cd ../htcp-bin-$(VERSION) ; tar zcvf ../htcp-$(VERSION).bin.tar.gz .
-       rm -Rf ../htcp-bin-$(PATCH_VERSION)
-
-# RPM targets: build and RPMs go into subdirectories of ../RPMTMP/
-rpm: dist gridsite.spec
-       rm -Rf $(MYRPMDIR)/BUILDROOT $(MYRPMDIR)/BUILD
-       mkdir -p $(MYRPMDIR)/SOURCES $(MYRPMDIR)/SPECS $(MYRPMDIR)/BUILD \
-             $(MYRPMDIR)/SRPMS $(MYRPMDIR)/RPMS/i386 $(MYRPMDIR)/BUILDROOT
-       cp -f ../gridsite-$(PATCH_VERSION).src.tar.gz $(MYRPMDIR)/SOURCES
-       cp -f gridsite.spec $(MYRPMDIR)/SPECS
-       export MYPREFIX=/usr ; export MYVERSION=$(PATCH_VERSION) ; \
-         $(RPMCMD) --define "_topdir $(MYRPMDIR)" \
-                  -ba --buildroot $(MYRPMDIR)/BUILDROOT gridsite.spec
-
-
-wtf: 
-       pwd
-       printenv
-       ls -l
-       ls -lR /usr/local/
-
diff --git a/org.gridsite.core/src/delegation.h b/org.gridsite.core/src/delegation.h
deleted file mode 100644 (file)
index e612498..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-//gsoap ns service name:       delegation
-//gsoap ns service style:      rpc
-//gsoap ns service encoding:   encoded
-//gsoap ns service namespace:  http://www.gridsite.org/ns/delegation.wsdl
-//gsoap ns service location:   http://localhost/delegserver.cgi
-
-struct ns__putProxyResponse { } ;
-
-//gsoap ns schema namespace: urn:delegation
-int ns__getProxyReq(char *delegationID, char **request);
-int ns__putProxy(char *delegationID, char *proxy, 
-                 struct ns__putProxyResponse *unused);
diff --git a/org.gridsite.core/src/doxygen.css b/org.gridsite.core/src/doxygen.css
deleted file mode 100644 (file)
index 97ebc25..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-H1 { text-align: center; }
-CAPTION { font-weight: bold }
-A.qindex {}
-A.qindexRef {}
-A.el { text-decoration: none; font-weight: bold }
-A.elRef { font-weight: bold }
-A.code { text-decoration: none; font-weight: normal; color: #4444ee }
-A.codeRef { font-weight: normal; color: #4444ee }
-A:hover { text-decoration: none; background-color: #f2f2ff }
-DL.el { margin-left: -1cm }
-DIV.fragment { width: 100%; border: none; background-color: #eeeeee }
-DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
-TD.md { background-color: #f2f2ff; font-weight: bold; }
-TD.mdname1 { background-color: #f2f2ff; font-weight: bold; color: #602020; }
-TD.mdname { background-color: #f2f2ff; font-weight: bold; color: #602020; width: 600px; }
-DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold }
-DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller }
-XXBODY { background: white }
-TD.indexkey { 
-   background-color: #eeeeff; 
-   font-weight: bold; 
-   padding-right  : 10px; 
-   padding-top    : 2px; 
-   padding-left   : 10px; 
-   padding-bottom : 2px; 
-   margin-left    : 0px; 
-   margin-right   : 0px; 
-   margin-top     : 2px; 
-   margin-bottom  : 2px  
-}
-TD.indexvalue { 
-   background-color: #eeeeff; 
-   font-style: italic; 
-   padding-right  : 10px; 
-   padding-top    : 2px; 
-   padding-left   : 10px; 
-   padding-bottom : 2px; 
-   margin-left    : 0px; 
-   margin-right   : 0px; 
-   margin-top     : 2px; 
-   margin-bottom  : 2px  
-}
-span.keyword       { color: #008000 }
-span.keywordtype   { color: #604020 }
-span.keywordflow   { color: #e08000 }
-span.comment       { color: #800000 }
-span.preprocessor  { color: #806020 }
-span.stringliteral { color: #002080 }
-span.charliteral   { color: #008080 }
diff --git a/org.gridsite.core/src/doxyheader.html b/org.gridsite.core/src/doxyheader.html
deleted file mode 100644 (file)
index af78b52..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<p><a href=http://www.gridsite.org/>GridSite</a> Version 1.1.x
diff --git a/org.gridsite.core/src/findproxyfile.c b/org.gridsite.core/src/findproxyfile.c
deleted file mode 100644 (file)
index 4485cc5..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
-   Copyright (c) 2002-4, Andrew McNab, University of Manchester
-   All rights reserved.
-
-   Redistribution and use in source and binary forms, with or
-   without modification, are permitted provided that the following
-   conditions are met:
-
-     o Redistributions of source code must retain the above
-       copyright notice, this list of conditions and the following
-       disclaimer. 
-     o 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. 
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-*/
-
-#ifndef VERSION
-#define VERSION "0.0.0"
-#endif
-
-#define _GNU_SOURCE
-
-#include <pwd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <getopt.h>
-
-#include "gridsite.h"
-  
-void printsyntax(char *argv0)
-{
-  char *p;
-
-  p = rindex(argv0, '/');
-  if (p != NULL) ++p;
-  else           p = argv0;
-
-  fprintf(stderr, "%s [--outsidecache] [--proxycache=PATH] "
-                  "[--delegation-id=DELEGATION-ID] [--user-dn=USER-DN]\n"
-                  "(Version: %s)\n", p, VERSION);
-}
-  
-#define GRST_PROXY_CACHE "/var/www/proxycache"
-  
-int main(int argc, char *argv[])
-{
-  char  *delegation_id = "_", *proxycache = "", *user_dn = "",
-        *proxyfile = NULL;        
-  int    c, outsidecache = 0, verbose = 0, option_index;
-  struct option long_options[] = {      {"verbose",            0, 0, 'v'},
-                                        {"outsidecache",       0, 0, 0},
-                                        {"proxycache",         1, 0, 0},
-                                        {"delegation-id",      1, 0, 0},
-                                        {"user-dn",            1, 0, 0},
-                                        {0, 0, 0, 0}  };
-
-  if (argc == 1)
-    {
-      printsyntax(argv[0]);
-      return 0;
-    }
-
-  while (1)
-       {
-         option_index = 0;
-                                                                                
-         c = getopt_long(argc, argv, "v", long_options, &option_index);
-
-         if      (c == -1) break;
-         else if (c == 0)
-           {
-             if      (option_index == 1) outsidecache  = 1;
-             else if (option_index == 2) proxycache    = optarg;
-             else if (option_index == 3) delegation_id = optarg;
-             else if (option_index == 4) user_dn       = optarg;
-           }
-         else if (c == 'v') ++verbose;
-       }
-       
-  if (*user_dn != '\0') /* try to find in proxy cache */
-    {
-      if ((proxycache == NULL) || (*proxycache == '\0'))
-        proxycache = getenv("GRST_PROXY_CACHE");
-
-      if ((proxycache == NULL) || (*proxycache == '\0'))
-        proxycache = GRST_PROXY_CACHE;
-
-      proxyfile = GRSTx509CachedProxyFind(proxycache, delegation_id, user_dn);
-    }
-    
-  if (((proxyfile == NULL) || (*proxyfile == '\0')) && outsidecache)
-    {
-      proxyfile = GRSTx509FindProxyFileName();
-    }
-
-  if ((proxyfile != NULL) && (*proxyfile != '\0'))
-    {
-      puts(proxyfile);
-      return 0;   
-    }
-    
-  fputs("No proxy file found\n", stderr);
-    
-  return 1;
-}
diff --git a/org.gridsite.core/src/gaclexample.c b/org.gridsite.core/src/gaclexample.c
deleted file mode 100644 (file)
index 5ad29b7..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
-   Copyright (c) 2002-3, Andrew McNab, University of Manchester
-   All rights reserved.
-
-   Redistribution and use in source and binary forms, with or
-   without modification, are permitted provided that the following
-   conditions are met:
-
-     o Redistributions of source code must retain the above
-       copyright notice, this list of conditions and the following
-       disclaimer. 
-     o 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. 
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-*/
-
-/*---------------------------------------------------------------*
- * For more about GridSite: http://www.gridsite.org/             *
- *---------------------------------------------------------------*/
-
-/*
-   Example program using GACL 
-
-   Build with:
-   
-    gcc -o gaclexample gaclexample.c -L. -I. -lgridsite -lxml2 -lz -lm
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <gridsite.h>
-
-int main()
-{
-  GRSTgaclCred  *cred, *usercred;
-  GRSTgaclEntry *entry;
-  GRSTgaclAcl   *acl1, *acl2;
-  GRSTgaclUser  *user;
-  GRSTgaclPerm   perm0, perm1, perm2;
-  FILE          *fp;
-
-  /* must initialise GACL before using it */
-  
-  GRSTgaclInit();
-
-  /* build up an ACL, starting with a credential */
-
-  cred = GRSTgaclCredNew("person");
-
-  GRSTgaclCredAddValue(cred, "dn", "/O=Grid/CN=Mr Grid Person");
-  
-  /* create an entry to put it in */ 
-   
-  entry = GRSTgaclEntryNew();
-  
-  /* add the credential to it */
-  
-  GRSTgaclEntryAddCred(entry, cred);
-
-  /* add another credential */
-  
-  cred = GRSTgaclCredNew("dn-list");
-  GRSTgaclCredAddValue(cred, "url", "example-dn-list");
-  GRSTgaclEntryAddCred(entry, cred);
-
-  fp = fopen("example-dn-list", "w");
-  fputs("/O=Grid/CN=Mr Grid Person\n", fp);
-  fclose(fp);  
-  /* associate some permissions and denials to the credential */  
-  
-  GRSTgaclEntryAllowPerm( entry, GRST_PERM_READ);
-  GRSTgaclEntryAllowPerm( entry, GRST_PERM_WRITE);
-  GRSTgaclEntryAllowPerm( entry, GRST_PERM_ADMIN);
-  GRSTgaclEntryDenyPerm(  entry, GRST_PERM_ADMIN);
-  GRSTgaclEntryDenyPerm(  entry, GRST_PERM_LIST);
-
-  perm0 = GRST_PERM_READ | GRST_PERM_WRITE;
-  
-  printf("test perm should be %d\n", perm0);
-
-  /* create a new ACL and add the entry to it */
-  
-  acl1 = GRSTgaclAclNew();
-  
-  GRSTgaclAclAddEntry(acl1, entry);
-
-  /* create a GRSTgaclUser to compare with the ACL */
-
-  usercred = GRSTgaclCredNew("person");
-  
-  GRSTgaclCredAddValue(usercred, "dn", "/O=Grid/CN=Mr Grid Person");
-   
-  user = GRSTgaclUserNew(usercred);
-  
-  GRSTgaclUserSetDNlists(user, getcwd(NULL, 0));
-  printf("DN Lists dir %s\n", getcwd(NULL, 0));
-  
-//  putenv("GRST_DN_LISTS=.");
-    
-  perm1 = GRSTgaclAclTestUser(acl1, user);
-
-  printf("test /O=Grid/CN=Mr Grid Person in acl = %d\n", perm1);
-
-  /* print and save the whole ACL */
-
-  GRSTgaclAclPrint(acl1, stdout);
-  
-  GRSTgaclAclSave(acl1, "example.gacl");
-
-  puts("gridacl.out saved");
-
-  puts("");
-
-  /* load the ACL back off the disk, print and test it */
-
-  acl2 = GRSTgaclAclLoadFile("example.gacl");
-
-  puts("gridacl.out loaded");
-  
-  if (acl2 != NULL) GRSTgaclAclPrint(acl2, stdout); else puts("acl2 is NULL");
-
-  perm2 = GRSTgaclAclTestUser(acl2, user);
-
-  printf("test /O=Grid/CN=Mr Grid Person in acl = %d\n", perm2);
-
-  if (perm1 != perm0) return 1;
-  if (perm2 != perm0) return 2;
-  
-  return 0;
-}
diff --git a/org.gridsite.core/src/gridsite.spec b/org.gridsite.core/src/gridsite.spec
deleted file mode 100644 (file)
index 877f25d..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-Name: gridsite
-Version: %(echo ${MYVERSION:-1.1.x})
-Release: 2
-Summary: GridSite
-Copyright: Modified BSD
-Group: System Environment/Daemons
-Source: %{name}-%{version}.src.tar.gz
-Prefix: %(echo ${MYPREFIX:-/usr})
-URL: http://www.gridsite.org/
-Vendor: GridPP
-#Requires: libxml2,curl-ssl,mod_ssl
-#Buildrequires: libxml2-devel,curl-ssl-devel,httpd-devel
-Packager: Andrew McNab <Andrew.McNab@man.ac.uk>
-
-%description
-GridSite adds GSI, VOMS and GACL support to Apache 2.0 (mod_gridsite),
-a library for manipulating these technologies (libgridsite), and CGI
-programs for interactive management of HTTP(S) servers (gridsite-admin.cgi)
-
-See %(echo ${MYPREFIX:-/usr})/share/doc/gridsite-%{version} and
-http://www.gridsite.org/ for details.
-
-%package -n htcp
-Group: Applications/Internet
-Summary: HTTP(S) read/write client
-#Requires: curl-ssl
-
-%description -n htcp
-htcp is a client to fetch files or directory listings from remote
-servers using HTTP or HTTPS, or to put or delete files or directories
-onto remote servers using HTTPS. htcp is similar to scp(1), but uses
-HTTP/HTTPS rather than ssh as its transfer protocol.
-
-%prep
-
-%setup
-
-%build
-cd src
-make prefix=$RPM_BUILD_ROOT/%(echo ${MYPREFIX:-/usr})
-
-%install
-cd src
-make install prefix=$RPM_BUILD_ROOT/%(echo ${MYPREFIX:-/usr})
-
-%post
-/sbin/ldconfig
-ln -sf %(echo ${MYPREFIX:-/usr})/share/doc/gridsite-%{version} \
- %(echo ${MYPREFIX:-/usr})/share/doc/gridsite
-
-%postun
-rm -f %(echo ${MYPREFIX:-/usr})/share/doc/gridsite
-
-%files
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/lib/libgridsite.so.%{version}
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/lib/libgridsite.so
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/bin/urlencode
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/bin/findproxyfile
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/share/doc/gridsite-%{version}
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/share/man/man1/urlencode.1.gz
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/share/man/man1/findproxyfile.1.gz
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/include/gridsite.h
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/include/gridsite-gacl.h
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/lib/libgridsite.a
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/lib/httpd/modules/mod_gridsite.so
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/sbin/real-gridsite-admin.cgi
-
-%files -n htcp
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/bin/htcp
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/bin/htls
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/bin/htll
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/bin/htrm
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/bin/htmkdir
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/share/man/man1/htcp.1.gz
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/share/man/man1/htrm.1.gz
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/share/man/man1/htls.1.gz
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/share/man/man1/htll.1.gz
-%attr(-, root, root) %(echo ${MYPREFIX:-/usr})/share/man/man1/htmkdir.1.gz
diff --git a/org.gridsite.core/src/grst-delegation.c b/org.gridsite.core/src/grst-delegation.c
deleted file mode 100644 (file)
index 2a8a9b2..0000000
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
-   Copyright (c) 2002-4, Andrew McNab, University of Manchester
-   All rights reserved.
-
-   Redistribution and use in source and binary forms, with or
-   without modification, are permitted provided that the following
-   conditions are met:
-
-     o Redistributions of source code must retain the above
-       copyright notice, this list of conditions and the following
-       disclaimer. 
-     o 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. 
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-*/
-
-/*---------------------------------------------------------------------------*
- * This program is part of GridSite: http://www.gridpp.ac.uk/authz/gridsite/ *
- *---------------------------------------------------------------------------*/
-
-#ifndef VERSION
-#define VERSION "0.0.1"
-#endif
-
-#define _GNU_SOURCE
-#include <stdio.h>
-
-#include <time.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <unistd.h>
-#include <dirent.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <openssl/rsa.h>
-#include <openssl/pem.h>
-#include <openssl/err.h>
-#include <openssl/evp.h>
-#include <openssl/bio.h>    
-#include <openssl/des.h>    
-#include <openssl/rand.h>
-
-#include <curl/curl.h>
-/* #include <gacl.h> */
-
-#include "gridsite.h"
-
-#include "soapH.h"
-#include "delegation.nsmap"
-
-#include <time.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <unistd.h>
-#include <dirent.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <openssl/rsa.h>
-#include <openssl/pem.h>
-#include <openssl/err.h>
-#include <openssl/evp.h>
-#include <openssl/bio.h>    
-#include <openssl/des.h>    
-#include <openssl/rand.h>
-
-#define GRST_KEYSIZE       512
-#define GRST_PROXYCACHE    "/../proxycache/"
-#define GRST_SUPPORT_G_HTTPS
-
-#ifdef GRST_SUPPORT_G_HTTPS
-void GRSThttpError(char *status)
-{
-  printf("Status: %s\n", status);
-  printf("Server-CGI: GridSite %s\n", VERSION);
-  printf("Content-Length: %d\n", 2 * strlen(status) + 58);
-  puts("Content-Type: text/html\n");
-   
-  printf("<head><title>%s</title></head>\n", status);
-  printf("<body><h1   >%s</h1   ></body>\n", status);
-   
-  exit(0);
-}
-
-int GRSTmethodPutProxy(char *delegation_id, char *user_dn)
-/* return 0 on success; non-zero on error */
-{
-  int   c, len = 0, i;
-  char *docroot, *contentlen, *contenttype, *proxychain, *proxydir;
-  FILE *fp;
-
-  if (((contenttype = getenv("CONTENT_TYPE")) == NULL) ||
-       (strcmp(contenttype, "application/x-x509-user-cert-chain") != 0))
-                               return 2;
-  
-  contentlen = getenv("CONTENT_LENGTH");
-  if (contentlen == NULL) return 2;
-  len = atoi(contentlen);
-  
-  if ((delegation_id == NULL) || (*delegation_id == '\0')) 
-                                                    delegation_id = "_";
-  
-  docroot = getenv("DOCUMENT_ROOT");
-  asprintf(&proxydir, "%s/%s", docroot, GRST_PROXYCACHE);
-
-  if ((user_dn == NULL) || (user_dn[0] == '\0') ||
-      (GRSTx509CacheProxy(proxydir, delegation_id, user_dn, proxychain) 
-                                                      != GRST_RET_OK))
-    {
-      return GRST_RET_FAILED;
-    }
-    
-  free(proxydir);
-      
-  return GRST_RET_OK;
-}
-#endif
-
-int main(int argn, char *argv[])
-{
-  char      *docroot, *method, *request, *p, *client_dn, *user_dn,
-            *delegation_id, *reqtxt, *proxydir;
-  struct soap soap;
-  
-  method  = getenv("REQUEST_METHOD");
-  if (strcmp(method, "POST") == 0)
-    {
-      soap_init(&soap);
-      soap_serve(&soap); /* CGI application */
-      return 0;
-    }
-    
-#ifdef GRST_SUPPORT_G_HTTPS
-  docroot = getenv("DOCUMENT_ROOT");
-
-  request = strdup(getenv("REQUEST_URI"));
-  p = index(request, '?');
-  if (p != NULL) *p = '\0';
-
-      
-  /* non HTTP POST methods - ie special G-HTTPS methods */
-
-  delegation_id = getenv("HTTP_DELEGATION_ID");
-  if ((delegation_id == NULL) || (*delegation_id == '\0')) delegation_id = "_";
-
-  user_dn = NULL;
-  client_dn = getenv("SSL_CLIENT_S_DN"); 
-  if (client_dn != NULL) 
-    {
-      user_dn = strdup(client_dn);
-
-      /* we assume here that mod_ssl has verified proxy chain already ... */
-
-      p = strstr(user_dn, "/CN=proxy");
-      if (p != NULL) *p = '\0';      
-
-      p = strstr(user_dn, "/CN=limited proxy");
-      if (p != NULL) *p = '\0';      
-    }
-  
-  if (user_dn == NULL) /* all methods require client auth */
-    {
-      GRSThttpError("403 Forbidden");
-    }  
-  else if (strcmp(method, "GET-PROXY-REQ") == 0)
-    {
-      docroot = getenv("DOCUMENT_ROOT");
-      asprintf(&proxydir, "%s/%s", docroot, GRST_PROXYCACHE);
-    
-      if (GRSTx509MakeProxyRequest(&reqtxt, proxydir,
-                                   delegation_id, user_dn) == 0)
-        {
-          puts("Status: 200 OK");
-          puts("Content-Type: application/x-x509-cert-request");
-          printf("Content-Length: %d\n\n", strlen(reqtxt));
-          fputs(reqtxt, stdout);
-          free(proxydir);
-          return 0;
-        }
-      
-      puts("Status: 500 Internal Server Error\n");
-      free(proxydir);
-      return 0;
-    }  
-  else if (strcmp(method, "PUT-PROXY-CERT") == 0)
-    {
-      if (GRSTmethodPutProxy(delegation_id, user_dn) == 0)
-        {
-          puts("Status: 200 OK\n");
-          return 0;
-        }
-        
-      puts("Status: 500 Internal Server Error\n");
-      return 0;
-    }  
-  else 
-    {
-      GRSThttpError("501 Method Not Implemented");
-    }
-#endif
-}
-
-int ns__getProxyReq(struct soap *soap, char *delegation_id,                                        
-                                       char **request)
-{ 
-  char *p, *client_dn, *user_dn, *docroot, *proxydir;
-  
-  user_dn = NULL;
-  client_dn = getenv("SSL_CLIENT_S_DN"); 
-  if (client_dn != NULL) 
-    {
-      user_dn = strdup(client_dn);
-
-      /* we assume here that mod_ssl has verified proxy chain already ... */
-
-      p = strstr(user_dn, "/CN=proxy");
-      if (p != NULL) *p = '\0';      
-
-      p = strstr(user_dn, "/CN=limited proxy");
-      if (p != NULL) *p = '\0';      
-    }
-
-  if ((delegation_id == NULL) || (*delegation_id == '\0')) delegation_id = "_";
-  
-  docroot = getenv("DOCUMENT_ROOT");
-  asprintf(&proxydir, "%s/%s", docroot, GRST_PROXYCACHE);
-
-  if ((user_dn != NULL) && (user_dn[0] != '\0') && 
-      (GRSTx509MakeProxyRequest(request, proxydir,  
-                                delegation_id, user_dn) == 0))
-    {
-      return SOAP_OK;
-    }
-      
-  return SOAP_ERR;
-} 
-
-int ns__putProxy(struct soap *soap, char *delegation_id, 
-                                    char *proxy,
-                                    struct ns__putProxyResponse *unused)
-{ 
-  int   fd, c, len = 0, i;
-  char *docroot, *proxydir, *p, *client_dn, *user_dn;
-  
-  user_dn = NULL;
-  client_dn = getenv("SSL_CLIENT_S_DN"); 
-  if (client_dn != NULL) 
-    {
-      user_dn = strdup(client_dn);
-
-      /* we assume here that mod_ssl has verified proxy chain already ... */
-
-      p = strstr(user_dn, "/CN=proxy");
-      if (p != NULL) *p = '\0';      
-
-      p = strstr(user_dn, "/CN=limited proxy");
-      if (p != NULL) *p = '\0';      
-    }
-  
-  if ((delegation_id == NULL) || (*delegation_id == '\0')) 
-                                                    delegation_id = "_";
-  
-  docroot = getenv("DOCUMENT_ROOT");
-  asprintf(&proxydir, "%s/%s", docroot, GRST_PROXYCACHE);
-
-  if ((user_dn == NULL) || (user_dn[0] == '\0') ||
-      (GRSTx509CacheProxy(proxydir, delegation_id, user_dn, proxy) 
-                                                      != GRST_RET_OK))
-    {
-      return SOAP_ERR;
-    }
-      
-  return SOAP_OK;
-} 
-
diff --git a/org.gridsite.core/src/grst_admin.h b/org.gridsite.core/src/grst_admin.h
deleted file mode 100644 (file)
index cddc415..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
-   Copyright (c) 2002-3, Andrew McNab and Shiv Kaushal, 
-   University of Manchester. All rights reserved.
-
-   Redistribution and use in source and binary forms, with or
-   without modification, are permitted provided that the following
-   conditions are met:
-
-     o Redistributions of source code must retain the above
-       copyright notice, this list of conditions and the following
-       disclaimer. 
-     o 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. 
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-*/
-
-/*------------------------------------------------------------------*
- * This program is part of GridSite: http://www.gridsite.org/       *
- *------------------------------------------------------------------*/
-
-void  GRSThttpError(char *);
-void  adminfooter(GRSThttpBody *, char *, char *, char *, char *);
-int   GRSTstrCmpShort(char *, char *);
-char *makevfilename(char *, size_t, char *);
-
-/*CGI GACL - Edit interface functions*/
-void show_acl(int admin, GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void new_entry_form(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void new_entry(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void del_entry(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void edit_entry_form(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void edit_entry(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void add_cred_form(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void add_cred(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void del_cred(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void del_entry_sure(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void del_cred_sure(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-
-/*Functions producing messages*/
-//void error(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void admin_continue(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file, GRSThttpBody *bp);
-
diff --git a/org.gridsite.core/src/grst_admin_file.c b/org.gridsite.core/src/grst_admin_file.c
deleted file mode 100644 (file)
index f89a004..0000000
+++ /dev/null
@@ -1,1571 +0,0 @@
-/*
-   Copyright (c) 2002-3, Andrew McNab, University of Manchester
-   All rights reserved.
-
-   Redistribution and use in source and binary forms, with or
-   without modification, are permitted provided that the following
-   conditions are met:
-
-     o Redistributions of source code must retain the above
-       copyright notice, this list of conditions and the following
-       disclaimer. 
-     o 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. 
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-*/
-
-/*------------------------------------------------------------------*
- * This program is part of GridSite: http://www.gridsite.org/       *
- *------------------------------------------------------------------*/
-
-#ifndef VERSION
-#define VERSION "x.x.x"
-#endif
-
-#include <stdio.h>
-#include <time.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <unistd.h>
-#include <dirent.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <fcntl.h>
-
-// when porting: remember that sendfile() is very OS-specific!
-#include <sys/sendfile.h>
-
-#include <gridsite.h>
-
-#include "grst_admin.h"
-
-char *storeuploadfile(char *boundary, int *bufferused)
-{
-// rewrite this to copy whole POSTed stdin HTTP body to disk then 
-// mmap() and pick apart? How to deal with 100MB uploaded files, say?
-
-  char *filebuffer = NULL;
-  int   bufferlen = 0, c, boundarylen;
-
-  *bufferused = 0;
-  boundarylen = strlen(boundary);
-
-  while ((c = getchar()) != EOF)
-       {
-         if (*bufferused > 1024*1024*100) return NULL;
-       
-         ++(*bufferused);
-   
-         if (*bufferused > bufferlen)
-           {
-             bufferlen = bufferlen + 1000;
-             filebuffer = realloc(filebuffer, (size_t) bufferlen);
-           }
-
-         filebuffer[*bufferused - 1] = c;         
-
-         if ( (*bufferused >= boundarylen + 4)    &&
-              (boundary[boundarylen-1] == c) && 
-              (boundary[boundarylen-2] == filebuffer[*bufferused - 2]) &&
-              (strncmp(boundary, &filebuffer[*bufferused - boundarylen],
-                                                       boundarylen) == 0))
-             {
-               *bufferused = *bufferused - boundarylen - 4;
-
-               if (filebuffer == NULL) return strdup("");
-               else return filebuffer;
-             }
-       }
-
-  return NULL;
-}
-
-void uploadfile(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, 
-                char *dir_uri, char *admin_file)
-{
-  char  *boundary, *p, oneline[200], *filename = NULL, 
-         tmpfilename[256], *filebuffer = NULL, *filepath,
-        *vfile, *dir_path_vfile;         
-  int    mimestate, bufferused = 0, itworked = 0;
-  FILE   *fp;
-  GRSThttpBody bp;
-
-#define MIMESTUNKNOWN  1
-#define MIMESTUPLOAD   2
-#define MIMESTFILENM   3
-
-  if (!GRSTgaclPermHasWrite(perm)) GRSThttpError("403 Forbidden");
-
-  p = getenv("CONTENT_TYPE");
-  boundary = &p[30];
-    
-  mimestate = MIMESTUNKNOWN;
-  
-  while (fgets(oneline, sizeof(oneline), stdin) != NULL)
-     {
-       if (*oneline == 13) // MIME has CR/LF line breaks, CR=13
-         {
-           if      (mimestate == MIMESTUPLOAD)
-             {
-               filebuffer = storeuploadfile(boundary, &bufferused);
-               mimestate = MIMESTUNKNOWN;
-             }
-           else if (mimestate == MIMESTFILENM)
-             {
-               fgets(tmpfilename, sizeof(tmpfilename), stdin);
-               if (*tmpfilename != 13)
-                 {
-                   p = index(tmpfilename, 13);
-                   *p = '\0';
-                   filename = strdup(tmpfilename);
-                 }
-               mimestate = MIMESTUNKNOWN;
-             }
-         }
-       else if (GRSTstrCmpShort(oneline,             
-            "Content-Disposition: form-data; name=\"uploadfile\"; filename=\"") 
-                == 0)
-         {
-           mimestate = MIMESTUPLOAD;
-           if (filename == NULL) 
-             {
-               filename = strdup(&oneline[61]);
-
-               p = rindex(&oneline[61], '\\');
-               if (p != NULL) { ++p ; filename = p; }
-
-               p = rindex(&oneline[61], '/');
-               if (p != NULL) { ++p ; filename = p; }
-                                  
-               p = index(filename, '"');
-               if (p != NULL) *p = '\0'; 
-             }
-         }
-       else if (GRSTstrCmpShort(oneline,
-                 "Content-Disposition: form-data; name=\"file\"") == 0)
-         {
-           mimestate = MIMESTFILENM;           
-         }      
-     }
-
-  if ((filebuffer != NULL) && (bufferused >= 0))
-    {
-      if (filename == NULL) GRSThttpError("403 Forbidden");
-      else if ((index(filename, '/') != NULL) ||
-               (strcmp(filename, GRST_ACL_FILE) == 0))
-        {
-          puts("Status: 403 Forbidden filename\nContent-Type: text/html");
-                                                                                
-          GRSThttpBodyInit(&bp);
-                                                                   
-          GRSThttpPrintf(&bp,"<title>Forbidden filename %s</title>\n", filename);
-          GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_HEADFILE);
-                                 
-          GRSThttpPrintf(&bp, "<h1 align=center>Forbidden filename %s</h1>\n",
-                         filename);
-                                                                                
-          GRSThttpPrintf(&bp,
-                      "<p align=center>New file names cannot include slashes "
-                      "or use the reserved ACL name, %s\n", GRST_ACL_FILE);
-                                                                                
-          GRSThttpPrintf(&bp,"<p align=center>"
-                     "<a href=\"%s%s?cmd=managedir\">Return to "
-                     "directory listing</a>\n", dir_uri, admin_file);
-                                                                                
-          adminfooter(&bp, dn, help_uri, dir_uri, admin_file);
-          GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE);
-                                                                                
-          GRSThttpWriteOut(&bp);
-          return;
-        }
-      else
-        {
-          vfile = makevfilename(filename, bufferused, dn);
-          asprintf(&dir_path_vfile, "%s/%s", dir_path, vfile);
-
-          fp = fopen(dir_path_vfile, "w");
-          if (fp != NULL)
-            {              
-              if ((fwrite(filebuffer, 
-                          sizeof(char), bufferused, fp) == bufferused) &&
-                  (fclose(fp) == 0)) 
-                {                  
-                  asprintf(&filepath, "%s/%s", dir_path, filename);
-          
-                  unlink(filepath); /* this can fail ok */
-          
-                  itworked = (link(dir_path_vfile, filepath) == 0);
-                }
-            }
-        }
-                 
-      free((void *) filebuffer);
-    }
-    
-  if (itworked) 
-    {
-      printf("Status: 302 Moved Temporarily\nContent-Length: 0\n"
-                  "Location: %s%s?cmd=managedir\n\n", dir_uri, admin_file);
-      return;
-    }
-
-  puts("Status: 500 Failed trying to upload\nContent-Type: text/html");
-  
-  GRSThttpBodyInit(&bp);
-
-  GRSThttpPrintf(&bp, "<title>Failed to upload</title>\n");
-
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_HEADFILE);
-
-  GRSThttpPrintf(&bp, "<h1 align=center>Failed to upload</h1>\n");
-  
-  GRSThttpPrintf(&bp, "<p align=center>GridSite considers you are authorized "
-                      "to upload the file, but the upload failed. This is "
-                      "probably a web server or operating system level "
-                      "misconfiguration. Consult the site administrator.");
-
-  GRSThttpPrintf(&bp,"<p align=center>"
-                     "<a href=\"%s%s?cmd=managedir\">Return to "
-                     "directory listing</a>\n", dir_uri, admin_file);
-  
-  adminfooter(&bp, dn, help_uri, dir_uri, admin_file);
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE);
-
-  GRSThttpWriteOut(&bp);
-}
-
-void deletefileaction(char *dn, GRSTgaclPerm perm, char *help_uri, 
-                      char *dir_path, char *file, char *dir_uri, 
-                      char *admin_file)
-{
-  int            fd, numfiles;
-  char          *dir_path_file, *dir_path_vfile, *p, *vfile, *dnlistsuri, 
-                *fulluri, *server_name, *realfile;
-  struct stat    statbuf;
-  GRSThttpBody   bp; 
-  struct dirent *subdirfile_ent;
-  DIR           *subDIR;
-
-  if (((strcmp(file, GRST_ACL_FILE) != 0) && !GRSTgaclPermHasWrite(perm)) ||
-      ((strcmp(file, GRST_ACL_FILE) == 0) && !GRSTgaclPermHasAdmin(perm)))
-                                               GRSThttpError("403 Forbidden");
-
-  dnlistsuri = getenv("GRST_DN_LISTS_URI");
-  if (dnlistsuri == NULL) dnlistsuri = getenv("REDIRECT_GRST_DN_LISTS_URI");
-
-  if ((dnlistsuri != NULL) && 
-      (strncmp(dnlistsuri, dir_uri, strlen(dnlistsuri)) == 0))
-       realfile = GRSThttpUrlEncode(file);
-  else if (index(file, '/') != NULL) GRSThttpError("403 Forbidden");
-  else realfile = file;
-
-  dir_path_file = malloc(strlen(dir_path) + strlen(realfile) + 2);
-  
-  strcpy(dir_path_file, dir_path);
-  strcat(dir_path_file, "/");
-  strcat(dir_path_file, realfile);
-
-  if ((stat(dir_path_file, &statbuf) == 0) && S_ISDIR(statbuf.st_mode))
-    {
-      subDIR = opendir(dir_path_file);
-      if (subDIR == NULL) numfiles = 99; /* stop deletion */
-      else
-        {
-          numfiles = 0; 
-          while ((subdirfile_ent = readdir(subDIR)) != NULL) 
-             if (subdirfile_ent->d_name[0] != '.') ++numfiles;
-             else if (strncmp(subdirfile_ent->d_name, 
-                              GRST_ACL_FILE,
-                              sizeof(GRST_ACL_FILE)) == 0) ++numfiles;
-          closedir(subDIR);
-        }
-                     
-      if (numfiles == 0)
-        {
-          vfile = makevfilename(file, 0, dn);
-          dir_path_vfile = malloc(strlen(dir_path) + strlen(vfile) + 2);  
-          strcpy(dir_path_vfile, dir_path);
-          strcat(dir_path_vfile, "/");
-          strcat(dir_path_vfile, vfile);
-          
-          if (rename(dir_path_file, dir_path_vfile) == 0)
-            {
-              printf("Status: 302 Moved Temporarily\nContent-Length: 0\n"
-                     "Location: %s%s?cmd=managedir\n\n", dir_uri, admin_file);
-              return; 
-            }
-        }
-    }
-  else if (unlink(dir_path_file) == 0)
-    {
-      if (strcmp(file, GRST_ACL_FILE) != 0)
-        {
-          vfile = makevfilename(file, 0, dn);
-          dir_path_file = malloc(strlen(dir_path) + strlen(vfile) + 2);  
-          strcpy(dir_path_file, dir_path);
-          strcat(dir_path_file, "/");
-          strcat(dir_path_file, vfile);
-
-          fd = open(dir_path_file, O_WRONLY | O_CREAT);
-          if (fd != -1) close(fd);           
-        }
-
-      printf("Status: 302 Moved Temporarily\nContent-Length: 0\n"
-             "Location: %s%s?cmd=managedir\n\n", dir_uri, admin_file);
-          
-      return;
-    }
-
-  puts("Status: 500 Failed trying to delete\nContent-Type: text/html");
-  
-  GRSThttpBodyInit(&bp);
-
-  GRSThttpPrintf(&bp, "<title>Error deleting %s%s</title>\n", dir_uri, file);
-
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_HEADFILE);
-
-  GRSThttpPrintf(&bp, "<h1 align=center>Error deleting %s%s</h1>\n", 
-                      dir_uri, file);
-  
-  GRSThttpPrintf(&bp, "<p align=center>GridSite considers you are authorized "
-                      "to delete %s, but the delete failed. This is "
-                      "probably a web server or operating system level "
-                      "misconfiguration. Consult the site administrator.",
-                      file);
-
-  GRSThttpPrintf(&bp,"<p align=center>"
-                     "<a href=\"%s%s?cmd=managedir\">Return to "
-                     "directory listing</a>\n", dir_uri, admin_file);
-  
-  adminfooter(&bp, dn, help_uri, dir_uri, admin_file);
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE);
-
-  GRSThttpWriteOut(&bp);
-}                    
-
-void deletefileform(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path,
-                    char *file, char *dir_uri, char *admin_file)
-{
-  GRSThttpBody bp; 
-
-  if (!GRSTgaclPermHasWrite(perm)) GRSThttpError("403 Forbidden");
-
-  puts("Status: 200 OK\nContent-Type: text/html");
-  
-  GRSThttpBodyInit(&bp);
-
-  GRSThttpPrintf(&bp, "<title>Delete %s</title>\n", file);
-
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_HEADFILE);
-
-  GRSThttpPrintf(&bp, "<h1 align=center>Delete %s</h1>\n", file);
-  
-  GRSThttpPrintf(&bp,"<form action=\"%s%s\" method=post>\n",dir_uri,admin_file);
-  GRSThttpPrintf(&bp,"<h2 align=center>Do you really want to delete %s?", file);
-  GRSThttpPrintf(&bp,"<p align=center><input type=submit value=\"Yes, delete %s\"></h2>\n", file);
-  GRSThttpPrintf(&bp,"<input type=hidden name=file value=\"%s\">\n", file);
-  GRSThttpPrintf(&bp,"<input type=hidden name=cmd value=deleteaction>\n");
-  GRSThttpPrintf(&bp,"</form>\n");
-
-  GRSThttpPrintf(&bp,"<p align=center>Or "
-                     "<a href=\"%s%s?cmd=managedir\">return to "
-                     "directory listing</a>\n", dir_uri, admin_file);
-  
-  adminfooter(&bp, dn, help_uri, dir_uri, admin_file);
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE);
-
-  GRSThttpWriteOut(&bp);
-}                    
-
-void renameform(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path,
-                    char *file, char *dir_uri, char *admin_file)
-{
-  GRSThttpBody bp; 
-
-  if (!GRSTgaclPermHasWrite(perm)) GRSThttpError("403 Forbidden");
-
-  puts("Status: 200 OK\nContent-Type: text/html");
-  
-  GRSThttpBodyInit(&bp);
-
-  GRSThttpPrintf(&bp, "<title>Rename %s</title>\n", file);
-
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_HEADFILE);
-
-  GRSThttpPrintf(&bp, "<h1 align=center>Rename %s%s</h1>\n", dir_uri, file);
-  
-  GRSThttpPrintf(&bp,"<form action=\"%s%s\" method=post>\n",dir_uri,admin_file);
-  GRSThttpPrintf(&bp,"<h2 align=center>What do you want to rename %s to?</h2>", file);
-  GRSThttpPrintf(&bp,"<input type=hidden name=file value=\"%s\">\n", file);
-  GRSThttpPrintf(&bp,"<p align=center>New name: <input type=text name=newfile value=\"%s\">\n", file);
-  GRSThttpPrintf(&bp,"<input type=submit value=\"Rename\">\n");
-  GRSThttpPrintf(&bp,"<input type=hidden name=cmd value=renameaction>\n");
-  GRSThttpPrintf(&bp,"</form>\n");
-
-  GRSThttpPrintf(&bp,"<p align=center>Or "
-                     "<a href=\"%s%s?cmd=managedir&diruri=%s\">return to "
-                     "directory listing</a>\n", dir_uri, admin_file, dir_uri);
-  
-  adminfooter(&bp, dn, help_uri, dir_uri, admin_file);
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE);
-
-  GRSThttpWriteOut(&bp);
-}                    
-
-void editfileaction(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path,
-                    char *file, char *dir_uri, char *admin_file)
-{
-  char         *pagetext, *dir_path_file, *vfile, *dir_path_vfile,
-               *dnlistsuri, *server_name, *fulluri, *realfile;
-  FILE         *fp;
-  GRSThttpBody  bp;
-  
-  if (!GRSTgaclPermHasWrite(perm) || (strcmp(file, GRST_ACL_FILE) == 0))
-                                               GRSThttpError("403 Forbidden");
-                                                 
-  dnlistsuri = getenv("GRST_DN_LISTS_URI");
-  if (dnlistsuri == NULL) dnlistsuri = getenv("REDIRECT_GRST_DN_LISTS_URI");
-
-  if ((dnlistsuri != NULL) && 
-      (strncmp(dnlistsuri, dir_uri, strlen(dnlistsuri)) == 0))
-    {
-      realfile = GRSThttpUrlEncode(file);
-      
-      if (realfile[0] == '.') GRSThttpError("403 Forbidden");
-    }
-  else if (index(file, '/') != NULL) GRSThttpError("403 Forbidden");
-  else realfile = file;
-
-  asprintf(&dir_path_file, "%s/%s", dir_path, realfile);
-
-  pagetext = GRSThttpGetCGI("pagetext");
-  vfile = makevfilename(file, strlen(pagetext), dn);
-  asprintf(&dir_path_vfile, "%s/%s", dir_path, vfile);
-      
-  fp = fopen(dir_path_vfile, "w");
-  if (fp == NULL)
-    {
-      puts("Status: 500 Failed trying to write\nContent-Type: text/html");
-  
-      GRSThttpBodyInit(&bp);
-
-      GRSThttpPrintf(&bp,"<title>Error writing %s%s</title>\n", dir_uri, file);
-      GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_HEADFILE);
-
-      GRSThttpPrintf(&bp, "<h1 align=center>Error writing %s%s</h1>\n", 
-                      dir_uri, file);
-  
-      GRSThttpPrintf(&bp, 
-                      "<p align=center>GridSite considers you are authorized "
-                      "to write the file, but the write failed. This is "
-                      "probably a web server or operating system level "
-                      "misconfiguration. Consult the site administrator.");
-
-      GRSThttpPrintf(&bp,"<p align=center>"
-                     "<a href=\"%s%s?cmd=managedir\">Return to "
-                     "directory listing</a>\n", dir_uri, admin_file);
-  
-      adminfooter(&bp, dn, help_uri, dir_uri, admin_file);
-      GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE);
-
-      GRSThttpWriteOut(&bp);
-      return;
-    }
-
-  fwrite(pagetext, strlen(pagetext), sizeof(char), fp);
-  
-  fclose(fp);
-  
-  unlink(dir_path_file);
-  
-  if (link(dir_path_vfile,dir_path_file) != 0) GRSThttpError("403 Forbidden");
-
-  if ((strlen(file) > 7) && (strcmp(&file[strlen(file) - 5], ".html") == 0))
-       printf("Status: 302 Moved Temporarily\nContent-Length: 0\n"
-              "Location: %s%s\n\n", dir_uri, file);      
-  else printf("Status: 302 Moved Temporarily\nContent-Length: 0\n"
-              "Location: %s%s?cmd=managedir\n\n", dir_uri, admin_file);
-}
-
-void create_acl(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path,
-                    char *file, char *dir_uri, char *admin_file)
-{
-  int           fd;
-  char         *tmpgacl, *newgacl;
-  GRSTgaclAcl  *acl;
-  FILE         *fp;
-  GRSThttpBody  bp;
-  
-  if (!GRSTgaclPermHasAdmin(perm)) GRSThttpError("403 Forbidden");
-
-  asprintf(&tmpgacl, "%s/.tmp.XXXXXX", dir_path);
-  asprintf(&newgacl, "%s/%s", dir_path, GRST_ACL_FILE);
-  
-  if (((acl = GRSTgaclAclLoadforFile(dir_path)) != NULL) &&
-      ((fd = mkstemp(tmpgacl)) != -1) && 
-      ((fp = fdopen(fd, "w+")) != NULL) &&
-      GRSTgaclAclPrint(acl, fp) &&
-      (fclose(fp) == 0) &&
-      (rename(tmpgacl, newgacl) == 0))
-    {
-      printf("Status: 302 Moved Temporarily\nContent-Length: 0\n"
-         "Location: %s%s?cmd=managedir\n\n", dir_uri, admin_file);
-
-      free(tmpgacl);
-      free(newgacl);
-      return;
-    }
-
-  puts("Status: 500 Failed trying to create\nContent-Type: text/html");
-  
-  GRSThttpBodyInit(&bp);
-
-  GRSThttpPrintf(&bp,"<title>Error creating %s%s</title>\n", dir_uri, 
-                                                             GRST_ACL_FILE);
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_HEADFILE);
-
-  GRSThttpPrintf(&bp, "<h1 align=center>Error creating %s%s</h1>\n", 
-                      dir_uri, GRST_ACL_FILE);
-  
-  GRSThttpPrintf(&bp, "<p align=center>GridSite considers you are authorized "
-                      "to create it, but the create failed. This is "
-                      "probably a web server or operating system level "
-                      "misconfiguration. Consult the site administrator.");
-
-  GRSThttpPrintf(&bp,"<p align=center>"
-                     "<a href=\"%s%s?cmd=managedir\">Return to "
-                     "directory listing</a>\n", dir_uri, admin_file);
-  
-  adminfooter(&bp, dn, help_uri, dir_uri, admin_file);
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE);
-
-  GRSThttpWriteOut(&bp);
-
-  free(tmpgacl);
-  free(newgacl);
-}
-
-void renameaction(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path,
-                  char *file, char *dir_uri, char *admin_file)
-{
-  int           len;
-  char         *dir_path_file, *vfile, *dir_path_vfile,
-               *dnlistsuri, *newfile, *dir_path_newfile;
-  struct stat   statbuf;
-  FILE         *fp;
-  GRSThttpBody  bp;
-  
-  if (!GRSTgaclPermHasWrite(perm) || (strcmp(file, GRST_ACL_FILE) == 0)) 
-                                              GRSThttpError("403 Forbidden");
-                                              
-  if (index(file, '/') != NULL) GRSThttpError("403 Forbidden");
-
-  dir_path_file = malloc(strlen(dir_path) + strlen(file) + 2);  
-  strcpy(dir_path_file, dir_path);
-  strcat(dir_path_file, "/");
-  strcat(dir_path_file, file);
-  
-  if (stat(dir_path_file, &statbuf) != 0) GRSThttpError("404 Not Found");
-
-  newfile = GRSThttpGetCGI("newfile");
-
-  if ((strcmp(newfile, GRST_ACL_FILE) == 0) ||
-      (strcmp(newfile, file) == 0)) GRSThttpError("403 Forbidden");
-
-  dir_path_newfile = malloc(strlen(dir_path) + strlen(newfile) + 2);  
-  strcpy(dir_path_newfile, dir_path);
-  strcat(dir_path_newfile, "/");
-  strcat(dir_path_newfile, newfile);
-
-  vfile = makevfilename(newfile, statbuf.st_size, dn);
-  dir_path_vfile = malloc(strlen(dir_path) + strlen(vfile) + 2);  
-  strcpy(dir_path_vfile, dir_path);
-  strcat(dir_path_vfile, "/");
-  strcat(dir_path_vfile, vfile);
-
-  unlink(dir_path_newfile); /* just in case */
-
-  if ((link(dir_path_file, dir_path_vfile  ) == 0) &&
-      (link(dir_path_file, dir_path_newfile) == 0) &&
-      (unlink(dir_path_file) == 0))
-    {
-      printf("Status: 302 Moved Temporarily\nContent-Length: 0\n"
-             "Location: %s\n\n", dir_uri);
-      return;
-    }
-
-  puts("Status: 500 Failed trying to rename\nContent-Type: text/html");
-  
-  GRSThttpBodyInit(&bp);
-
-  GRSThttpPrintf(&bp,"<title>Error renaming %s%s</title>\n", dir_uri, file);
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_HEADFILE);
-
-  GRSThttpPrintf(&bp, "<h1 align=center>Error renaming %s%s</h1>\n", 
-                      dir_uri, file);
-  
-  GRSThttpPrintf(&bp, "<p align=center>GridSite considers you are authorized "
-                      "to rename it, but the rename failed. This is "
-                      "probably a web server or operating system level "
-                      "misconfiguration. Consult the site administrator.");
-
-  GRSThttpPrintf(&bp,"<p align=center>"
-                     "<a href=\"%s%s?cmd=managedir\">Return to "
-                     "directory listing</a>\n", dir_uri, admin_file);
-  
-  adminfooter(&bp, dn, help_uri, dir_uri, admin_file);
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE);
-
-  GRSThttpWriteOut(&bp);
-}
-
-void newdirectory(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path,
-                    char *file, char *dir_uri, char *admin_file)
-{
-  int           len;
-  char         *dir_path_file, *vfile, *dir_path_vfile, *filedup;
-  FILE         *fp;
-  GRSThttpBody  bp;
-  
-  if ((file[0] == '\0') || 
-      !GRSTgaclPermHasWrite(perm) || (strcmp(file, GRST_ACL_FILE) == 0))
-                                                GRSThttpError("403 Forbidden");
-
-  filedup = strdup(file);
-  if (filedup[strlen(filedup)-1] == '/') filedup[strlen(filedup)-1] = '\0';
-  if (index(filedup, '/') != NULL) GRSThttpError("403 Forbidden");
-  
-  dir_path_file = malloc(strlen(dir_path) + strlen(file) + 2);  
-  strcpy(dir_path_file, dir_path);
-  strcat(dir_path_file, "/");
-  strcat(dir_path_file, file);
-
-  if (mkdir(dir_path_file, 0751) == 0)
-    {
-      printf("Status: 302 Moved Temporarily\nContent-Length: 0\n"
-             "Location: %s%s?cmd=managedir\n\n", dir_uri, admin_file);
-      return;    
-    }
-      
-  puts("Status: 500 Failed trying to create\nContent-Type: text/html");
-  
-  GRSThttpBodyInit(&bp);
-
-  GRSThttpPrintf(&bp,"<title>Error create %s%s</title>\n", dir_uri, file);
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_HEADFILE);
-
-  GRSThttpPrintf(&bp, "<h1 align=center>Error creating directory %s%s</h1>\n",
-                      dir_uri, file);
-  
-  GRSThttpPrintf(&bp, 
-                      "<p align=center>GridSite considers you are authorized "
-                      "to create the directory, but the creation failed. This "
-                      "is probably a web server or operating system level "
-                      "misconfiguration. Consult the site administrator.");
-
-  GRSThttpPrintf(&bp,"<p align=center>"
-                     "<a href=\"%s%s?cmd=managedir\">Return to "
-                     "parent directory listing</a>\n", dir_uri, admin_file);
-  
-  adminfooter(&bp, dn, help_uri, dir_uri, admin_file);
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE);
-
-  GRSThttpWriteOut(&bp);
-}
-
-void editdnlistaction(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path,
-                      char *file, char *dir_uri, char *admin_file)
-{
-  int           numdn = 0, ifd, ofd, numdnlines = 0, i, found;
-  char         *dir_path_file, *dir_path_tmpfile, *realfile,
-               *dnlistsuri, *server_name, *fulldiruri, *p, oneline[513],
-              **dnlines, name[81], *add;
-  FILE         *ofp;
-  struct stat   statbuf;
-  GRSThttpBody  bp;
-  
-  if (!GRSTgaclPermHasWrite(perm)) GRSThttpError("403 Forbidden");
-  
-  dnlistsuri = getenv("GRST_DN_LISTS_URI");
-  if (dnlistsuri == NULL) dnlistsuri = getenv("REDIRECT_GRST_DN_LISTS_URI");
-
-  server_name = getenv("SERVER_NAME");
-
-  if ((server_name == NULL) ||
-      (dnlistsuri == NULL) || 
-      (strncmp(dnlistsuri, dir_uri, strlen(dnlistsuri)) != 0))      
-                                         GRSThttpError("403 Forbidden");
-                                         
-  asprintf(&fulldiruri, "https://%s%s", server_name, dir_uri);
-  
-  if ((strncmp(fulldiruri, file, strlen(fulldiruri)) != 0) && 
-      ((strncmp(fulldiruri, file, strlen(fulldiruri) - 1) != 0) ||
-       (strlen(fulldiruri) - 1 != strlen(file))))
-    {
-      puts("Status: 403 Forbidden\nContent-Type: text/html");
-  
-      GRSThttpBodyInit(&bp);
-
-      GRSThttpPrintf(&bp,"<title>Error writing %s</title>\n", file);
-      GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_HEADFILE);
-
-      GRSThttpPrintf(&bp, "<h1 align=center>Error writing %s to %s</h1>\n", 
-                     file, dir_uri);
-  
-      GRSThttpPrintf(&bp, "<p align=center>You cannot create a DN List "
-                     "with that prefix in this directory. Please see the "
-                     "the GridSite User's Guide for an explanation."); 
-
-      GRSThttpPrintf(&bp,"<p align=center>"
-                     "<a href=\"%s%s?cmd=managedir\">Return to "
-                     "directory listing</a>\n", dir_uri, admin_file);
-  
-      adminfooter(&bp, dn, help_uri, dir_uri, admin_file);
-      GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE);
-
-      GRSThttpWriteOut(&bp);
-      return;    
-    }
-
-  p = GRSThttpGetCGI("numdn");
-  if ((p == NULL) || (sscanf(p, "%d", &numdn) != 1))
-                                         GRSThttpError("500 No number of DNs");
-
-  if (numdn > 0) 
-    {
-      dnlines = malloc(sizeof(char *) * numdn);
-      
-      for (i=1; i <= numdn; ++i)
-         {
-           sprintf(name, "dn%d", i);
-           p = GRSThttpGetCGI(name);
-           
-           if (*p != '\0') 
-             {
-               dnlines[numdnlines] = p;
-               ++numdnlines;
-             }           
-         } 
-    }
-    
-  add = GRSThttpGetCGI("add");
-
-  realfile = GRSThttpUrlEncode(file);
-
-  dir_path_file = malloc(strlen(dir_path) + strlen(realfile) + 2);  
-  strcpy(dir_path_file, dir_path);
-  strcat(dir_path_file, "/");
-  strcat(dir_path_file, realfile);
-      
-  dir_path_tmpfile = malloc(strlen(dir_path) + 13);  
-  strcpy(dir_path_tmpfile, dir_path);
-  strcat(dir_path_tmpfile, "/.tmp.XXXXXX");
-
-  if (((ofd = mkstemp(dir_path_tmpfile)) != -1) && 
-      ((ofp = fdopen(ofd, "w")) != NULL))
-    {
-      if (*add != '\0') 
-        {
-          fputs(add, ofp);
-          fputc('\n', ofp);
-        }
-
-      for (i=0; i < numdnlines; ++i)
-         {
-           fputs(dnlines[i], ofp);
-           fputc('\n', ofp);
-         }
-      if ((fclose(ofp) == 0) &&
-          ((stat(dir_path_file, &statbuf) != 0) || 
-           (unlink(dir_path_file) == 0)) &&
-          (rename(dir_path_tmpfile, dir_path_file) == 0))
-        {
-          printf("Status: 302 Moved Temporarily\nContent-Length: 0\n"
-                 "Location: %s%s?cmd=managedir\n\n", dir_uri, admin_file);
-          return;
-        }
-    }
-
-  puts("Status: 500 Failed trying to write\nContent-Type: text/html");
-  
-  GRSThttpBodyInit(&bp);
-
-  GRSThttpPrintf(&bp,"<title>Error writing %s%s</title>\n", dir_uri, file);
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_HEADFILE);
-
-  GRSThttpPrintf(&bp, "<h1 align=center>Error writing %s%s</h1>\n", 
-                      dir_uri, file);
-  
-  GRSThttpPrintf(&bp, "<p align=center>GridSite considers you are authorized "
-                      "to write the file, but the write failed. This is "
-                      "probably a web server or operating system level "
-                      "misconfiguration. Consult the site administrator.");
-
-  GRSThttpPrintf(&bp,"<p align=center>"
-                     "<a href=\"%s%s?cmd=managedir\">Return to "
-                     "directory listing</a>\n", dir_uri, admin_file);
-  
-  adminfooter(&bp, dn, help_uri, dir_uri, admin_file);
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE);
-
-  GRSThttpWriteOut(&bp);
-
-  /* try to clean up */
-  if (stat(dir_path_tmpfile, &statbuf) == 0) unlink(dir_path_tmpfile);    
-}
-
-void printfile(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, 
-                  char *file, char *dir_uri, char *admin_file)
-{
-  int   fd;
-  char *dir_path_file;
-  struct stat statbuf;
-  
-  if (!GRSTgaclPermHasRead(perm)) GRSThttpError("403 Forbidden");
-
-  if (index(file, '/') != NULL) GRSThttpError("403 Forbidden");
-  
-  dir_path_file = malloc(strlen(dir_path) + strlen(file) + 2);
-  
-  strcpy(dir_path_file, dir_path);
-  strcat(dir_path_file, "/");
-  strcat(dir_path_file, file);
-  
-  fd = open(dir_path_file, O_RDONLY);  
-  if (fd == -1) GRSThttpError("500 Internal server error");
-
-  if ((fstat(fd, &statbuf) != 0) ||
-        !S_ISREG(statbuf.st_mode)) GRSThttpError("403 Forbidden");
-       
-  printf("Status: 200 OK\nContent-Type: text/html\nContent-Length: %d\n\n",
-         statbuf.st_size);
-
-  fflush(stdout);
-
-  sendfile(1, fd, 0, statbuf.st_size);  
-}
-
-void filehistory(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path,
-                 char *file, char *dir_uri, char *admin_file)
-{
-  int             fd, n, i, j, enclen, num = 0;
-  char           *encodedfile, *p, *dndecoded, modified[99], *vfile, *q,
-                 *encdn;
-  time_t          file_time;
-  size_t          file_size;
-  struct stat     statbuf;
-  struct dirent **namelist;
-  struct tm       file_tm;
-  GRSThttpBody    bp;
-  
-  if (!GRSTgaclPermHasRead(perm)) GRSThttpError("403 Forbidden");
-
-  if (index(file, '/') != NULL) GRSThttpError("403 Forbidden");
-  
-  puts("Status: 200 OK\nContent-Type: text/html");
-                                                                                
-  GRSThttpBodyInit(&bp);
-  GRSThttpPrintf(&bp, "<title>History of %s%s</title>\n", dir_uri, file);
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_HEADFILE);
-  GRSThttpPrintf(&bp,
-   "<h1 align=center>History of <a href=\"%s%s\">%s%s</a></h1>\n",
-   dir_uri, file, dir_uri, file);
-
-  asprintf(&vfile, "%s/%s", dir_path, file);
-  if (stat(vfile, &statbuf) == 0)
-    {
-      localtime_r((const time_t *) &(statbuf.st_mtime), &file_tm);
-      strftime(modified, sizeof(modified), 
-               "%a&nbsp;%e&nbsp;%b&nbsp;%Y&nbsp;%k:%M", &file_tm);
-
-      GRSThttpPrintf(&bp, "<p align=center>Last modified: %s\n", modified);
-    }
-  free(vfile);
-  
-  encodedfile = GRSThttpUrlEncode(file);
-  for (p=encodedfile; *p != '\0'; ++p) if (*p == '%') *p = '=';
-  enclen = strlen(encodedfile);  
-  
-  n = scandir(dir_path, &namelist, 0, alphasort);
-  
-  if (n > 0)
-    {
-      for (i = n - 1; i >= 0; --i)
-         {
-           if ((strncmp(namelist[i]->d_name, GRST_HIST_PREFIX,
-                                        sizeof(GRST_HIST_PREFIX) - 1) == 0) &&
-               ((namelist[i]->d_name)[sizeof(GRST_HIST_PREFIX) - 1] == ':') &&
-               (strncmp(&((namelist[i]->d_name)[sizeof(GRST_HIST_PREFIX)]),
-                                                 encodedfile, enclen) == 0) &&
-               ((namelist[i]->d_name)[sizeof(GRST_HIST_PREFIX)+enclen] == ':'))
-             {
-               if (num == 0) GRSThttpPrintf(&bp, 
-                       "<p align=center><table border=1 cellpadding=5>\n"
-                       "<tr><td>Date</td><td>Size after</td>"
-                       "<td colspan=2>Changed by</td></tr>\n");
-                       
-               ++num;
-
-               p = index(namelist[i]->d_name, ':');
-               p = index(&p[1], ':');
-               sscanf(&p[1], "%X:", &file_time);
-               p = index(&p[1], ':'); /* skip over microseconds time */
-               p = index(&p[1], ':');
-               sscanf(&p[1], "%X:", &file_size);
-               p = index(&p[1], ':');
-
-               encdn = strdup(&p[1]);
-               q = index(encdn, ':');
-               if (q != NULL) *q = '\0';
-               
-               for (q=encdn; *q != '\0'; ++q) if (*q == '=') *q = '%';
-               dndecoded = GRSThttpUrlDecode(encdn);
-
-               localtime_r((const time_t *) &file_time, &file_tm);
-               strftime(modified, sizeof(modified), 
-                 "%a&nbsp;%e&nbsp;%b&nbsp;%Y&nbsp;%k:%M", &file_tm);
-
-               GRSThttpPrintf(&bp, 
-                 "<tr><td>%s</td><td align=right>%d</td><td>%s</td>\n",
-                 modified, file_size, dndecoded);
-
-               free(dndecoded);
-
-               asprintf(&vfile, "%s/%s", dir_path, namelist[i]->d_name);
-               if ((stat(vfile, &statbuf) == 0) && (statbuf.st_size > 0))
-               {
-                   GRSThttpPrintf(&bp, "<td><a href=\"");
-                    if (strcmp (file, GRST_ACL_FILE)==0)
-                        GRSThttpPrintf(&bp, "%s%s?cmd=acl_history&dir_uri=%s&file=%s\">View</a></td></tr>\n",
-                           dir_uri, admin_file, dir_uri, namelist[i]->d_name);
-                    else GRSThttpPrintf(&bp, "%s%s\">View</a></td></tr>\n",
-                       dir_uri, namelist[i]->d_name);
-               }
-               else GRSThttpPrintf(&bp, "<td>&nbsp;</td></tr>");
-                 
-               free(vfile);
-             }
-         }      
-    }
-  
-  if (num > 0) GRSThttpPrintf(&bp, "</table>\n");
-  else GRSThttpPrintf(&bp, "<p align=center>No history for this file\n");
-  
-  if (GRSTgaclPermHasList(perm))
-       adminfooter(&bp, dn, help_uri, dir_uri, admin_file);
-  else adminfooter(&bp, dn, help_uri, dir_uri, NULL);
-                                                                                
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE);
-  GRSThttpWriteOut(&bp);
-}
-
-void ziplist(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path,
-             char *file, char *dir_uri, char *admin_file)
-{
-  char           *shellcmd, *unzip, oneline[129];
-  FILE           *fp;
-  GRSThttpBody    bp;
-    
-  if (!GRSTgaclPermHasRead(perm)) GRSThttpError("403 Forbidden");
-
-  if (index(file, '/') != NULL) GRSThttpError("403 Forbidden");
-  
-  puts("Status: 200 OK\nContent-Type: text/html");
-                                                                                
-  GRSThttpBodyInit(&bp);
-  GRSThttpPrintf(&bp, "<title>Contents of %s%s</title>\n", dir_uri, file);
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_HEADFILE);
-  GRSThttpPrintf(&bp,
-   "<h1 align=center>Contents of ZIP file <a href=\"%s%s\">%s%s</a></h1>\n",
-   dir_uri, file, dir_uri, file);
-
-  unzip = getenv("GRST_UNZIP");
-  if (unzip == NULL) unzip = getenv("REDIRECT_GRST_UNZIP");
-
-  if (unzip != NULL)
-    {  
-      GRSThttpPrintf(&bp, "<center><table><tr><td><pre>\n");
-      asprintf(&shellcmd, "cd %s ; %s -Z %s", dir_path, unzip, file);
-      fp = popen(shellcmd, "r");
-  
-      while (fgets(oneline, sizeof(oneline), fp) != NULL)           
-                          GRSThttpPrintf(&bp, "%s", oneline);         
-      pclose(fp);
-      GRSThttpPrintf(&bp, "</pre></td></tr></table></center>\n");
-
-      if (GRSTgaclPermHasWrite(perm))
-           GRSThttpPrintf(&bp, 
-            "<p><center><form action=\"%s%s\" method=post>"
-            "<input type=submit value=\"Unzip this file\"> in %s"
-            "<input type=hidden name=cmd value=unzipfile>"
-            "<input type=hidden name=file value=\"%s\"></form>"
-            "<p>(All files are placed in the same directory and files "
-            "beginning with &quot;.&quot; are ignored.)</center>\n",
-            dir_uri, admin_file, dir_uri, file);
-    }
-  else GRSThttpPrintf(&bp, "<p align=center>unzip path not defined!\n");
-  
-  if (GRSTgaclPermHasList(perm))
-       adminfooter(&bp, dn, help_uri, dir_uri, admin_file);
-  else adminfooter(&bp, dn, help_uri, dir_uri, NULL);
-                                                                                
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE);
-  GRSThttpWriteOut(&bp);
-}
-
-void unzipfile(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, 
-               char *file, char *dir_uri, char *admin_file)
-{
-  char           *shellcmd, *unzip, oneline[129];
-  FILE           *fp;
-  GRSThttpBody    bp;
-    
-  if (!GRSTgaclPermHasWrite(perm)) GRSThttpError("403 Forbidden");
-  
-  if (index(file, '/') != NULL) GRSThttpError("403 Forbidden");
-  
-  puts("Status: 200 OK\nContent-Type: text/html");
-                                                                                
-  GRSThttpBodyInit(&bp);
-  GRSThttpPrintf(&bp, "<title>Unzipping %s%s</title>\n", dir_uri, file);
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_HEADFILE);
-  GRSThttpPrintf(&bp,
-   "<h1 align=center>Unzipping <a href=\"%s%s\">%s%s</a></h1>\n",
-   dir_uri, file, dir_uri, file);
-
-  unzip = getenv("GRST_UNZIP");
-  if (unzip == NULL) unzip = getenv("REDIRECT_GRST_UNZIP");
-
-  if (unzip != NULL)
-    {  
-      GRSThttpPrintf(&bp, "<center><table><tr><td><pre>\n");
-      asprintf(&shellcmd, "cd %s ; %s -jo %s -x '.*'", dir_path, unzip, file);
-      fp = popen(shellcmd, "r");
-  
-      while (fgets(oneline, sizeof(oneline), fp) != NULL)           
-                          GRSThttpPrintf(&bp, "%s", oneline);         
-      pclose(fp);
-      GRSThttpPrintf(&bp, "</pre></td></tr></table></center>\n");      
-
-      if (GRSTgaclPermHasList(perm))
-                GRSThttpPrintf(&bp, "<p align=center>"
-                                    "<b><a href=\"%s%s?cmd=managedir\">Back to "
-                                    "directory</a></b>", dir_uri, admin_file);
-    }
-  else GRSThttpPrintf(&bp, "<p align=center>unzip path not defined!\n");
-  
-  if (GRSTgaclPermHasList(perm))
-       adminfooter(&bp, dn, help_uri, dir_uri, admin_file);
-  else adminfooter(&bp, dn, help_uri, dir_uri, NULL);
-                                                                                
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE);
-  GRSThttpWriteOut(&bp);
-}
-
-void editfileform(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, 
-                  char *file, char *dir_uri, char *admin_file)
-{
-  int   fd, rawpagesize, i, c;
-  char *dir_path_file, *rawpage, *p;
-  FILE *fp = NULL;
-  struct stat statbuf;
-  GRSThttpBody    bp; 
-  
-  if (!GRSTgaclPermHasWrite(perm)) GRSThttpError("403 Forbidden");
-  
-  if (index(file, '/') != NULL) GRSThttpError("403 Forbidden");
-  
-  dir_path_file = malloc(strlen(dir_path) + strlen(file) + 2);
-  
-  strcpy(dir_path_file, dir_path);
-  strcat(dir_path_file, "/");
-  strcat(dir_path_file, file);
-  
-  fd = open(dir_path_file, O_RDONLY);      
-  if (fd != -1)
-    {
-      fp = fdopen(fd, "r");
-      if (fp == NULL) GRSThttpError("500 File open failed!");
-
-      if ((fstat(fd, &statbuf) != 0) ||
-        !S_ISREG(statbuf.st_mode)) GRSThttpError("500 Not a regular file!");
-    }
-       
-  puts("Status: 200 OK\nContent-Type: text/html");
-  
-  GRSThttpBodyInit(&bp);
-
-  GRSThttpPrintf(&bp, "<title>Edit file %s</title>\n", file);
-
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_HEADFILE);
-
-  GRSThttpPrintf(&bp, "<h1>Edit file %s</h1>\n", file);
-  
-  GRSThttpPrintf(&bp,"<form action=\"%s%s\" method=post>\n",dir_uri,admin_file);
-  GRSThttpPrintf(&bp,"<p><input type=submit value=\"Save changes\">\n");
-  GRSThttpPrintf(&bp,"<p>File name: <input type=text name=file value=\"%s\">\n", file);
-  GRSThttpPrintf(&bp,"<input type=hidden name=cmd value=editaction>\n");
-  GRSThttpPrintf(&bp,"<p><textarea name=pagetext cols=80 rows=22>");
-
-  if (fp != NULL)
-    {  
-      rawpagesize = statbuf.st_size + 1000;
-      rawpage = malloc(rawpagesize);
-  
-      i = 0;
-  
-      while ((c = fgetc(fp)) != EOF)
-           {
-             if (c == '<')      { strcpy(&rawpage[i], "&lt;");
-                                  i += 4; }
-             else if (c == '>') { strcpy(&rawpage[i], "&gt;");
-                                  i += 4; }
-             else if (c == '&') { strcpy(&rawpage[i], "&amp;");
-                                  i += 5; }
-             else if (c == '"') { strcpy(&rawpage[i], "&quot;");
-                                  i += 6; }
-             else               { rawpage[i] = c;
-                                  i += 1; }
-           
-             if (i >= rawpagesize - 7)
-               {
-                 rawpagesize += 1000;
-                 rawpage = realloc(rawpage, rawpagesize);           
-               }
-           }
-
-      rawpage[i] = '\0';
-  
-      GRSThttpPrintf(&bp, "%s", rawpage);
-    }
-    
-  GRSThttpPrintf(&bp, "</textarea>\n");  
-  GRSThttpPrintf(&bp, "<p><input type=submit value=\"Save changes\">\n");
-  GRSThttpPrintf(&bp, "</form>\n");
-
-  if (fp != NULL) fclose(fp);
-
-  adminfooter(&bp, dn, help_uri, dir_uri, admin_file);
-  
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE);
-  GRSThttpWriteOut(&bp);
-}
-
-void editdnlistform(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path,
-                    char *file, char *dir_uri, char *admin_file)
-{
-  int   fd, i, c, numdn = 0;
-  char *dir_path_file, *rawpage, *p, *dnlistsuri, *server_name, *fulluri,
-       *realfile, oneline[513];
-  FILE *fp = NULL;
-  struct stat statbuf;
-  GRSThttpBody    bp; 
-  
-  dnlistsuri = getenv("GRST_DN_LISTS_URI");
-  if (dnlistsuri == NULL) dnlistsuri = getenv("REDIRECT_GRST_DN_LISTS_URI");
-
-  if (!GRSTgaclPermHasWrite(perm) ||
-      (dnlistsuri == NULL) ||
-      (strncmp(dnlistsuri, dir_uri, strlen(dnlistsuri)) != 0)) 
-                                             GRSThttpError("403 Forbidden");
-  
-  realfile = GRSThttpUrlEncode(file);
-
-  dir_path_file = malloc(strlen(dir_path) + strlen(realfile) + 2);
-  
-  strcpy(dir_path_file, dir_path);
-  strcat(dir_path_file, "/");
-  strcat(dir_path_file, realfile);
-  
-  fd = open(dir_path_file, O_RDONLY);      
-  if (fd != -1) /* we dont mind open failing, but it must work if it doesnt */
-    {
-      fp = fdopen(fd, "r");
-      if (fp == NULL) GRSThttpError("500 File open failed!");
-
-      if ((fstat(fd, &statbuf) != 0) ||
-        !S_ISREG(statbuf.st_mode)) GRSThttpError("500 Not a regular file!");
-    }
-       
-  puts("Status: 200 OK\nContent-Type: text/html");
-  
-  GRSThttpBodyInit(&bp);
-
-  GRSThttpPrintf(&bp, "<title>Edit DN List %s</title>\n", file);
-
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_HEADFILE);
-
-  GRSThttpPrintf(&bp, "<h1>Edit DN List</h1>\n");
-  
-  GRSThttpPrintf(&bp,"<form action=\"%s%s\" method=post>\n",dir_uri,admin_file);
-  GRSThttpPrintf(&bp,"<p><input type=submit value=\"Update\">\n");
-  GRSThttpPrintf(&bp,"<p>List URL: <input type=text name=file value=\"%s\" "
-                     "size=%d>\n", file, strlen(file));
-  GRSThttpPrintf(&bp,"<input type=hidden name=cmd value=editdnlistaction>\n");
-
-  if (fp != NULL)
-    {
-      GRSThttpPrintf(&bp, "<p><table>\n<tr><th>Keep?</th>"
-                          "<th>Name</th></tr>\n");
-
-      while (fgets(oneline, sizeof(oneline), fp) != NULL)
-           {
-             ++numdn;
-         
-             p = rindex(oneline, '\n');
-             if (p != NULL) *p = '\0';
-         
-             GRSThttpPrintf(&bp, "<tr><td align=center><input type=checkbox "
-                             "name=\"dn%d\" value=\"%s\" checked></td>"
-                             "<td>%s</td></tr>\n", numdn, oneline, oneline);
-           }
-
-      GRSThttpPrintf(&bp,"</table>\n");
-    }
-    
-  GRSThttpPrintf(&bp,"<input type=hidden name=numdn value=\"%d\">\n", numdn);
-
-  GRSThttpPrintf(&bp, "<p>Add new DN: <input type=text name=add "
-                      "size=60 maxlength=512>\n");
-
-  GRSThttpPrintf(&bp,"<p><input type=submit value=\"Update\">\n");
-  GRSThttpPrintf(&bp, "</form>\n");
-
-  if (fp != NULL) fclose(fp);
-
-  adminfooter(&bp, dn, help_uri, dir_uri, admin_file);
-  
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE);
-  GRSThttpWriteOut(&bp);
-}
-
-void managedir(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path,
-               char *dir_uri, char *admin_file)
-{
-  int         n, is_dnlists_dir = 0, enclen, numfiles, encprefixlen;
-  char       *d_namepath, modified[99], *absaclpath, *editable, *p, *unzip,
-             *dnlistsuri, *d_name, *server_name, *fulluri, *encfulluri,
-             *encprefix, *dnlistsprefix;
-  GRSThttpBody    bp;
-  struct tm       mtime_tm;
-  struct stat     statbuf;
-  struct dirent **namelist, *subdirfile_ent;
-  DIR            *subDIR;
-
-  if (((!GRSTgaclPermHasWrite(perm)) &&
-       (!GRSTgaclPermHasList(perm))) ||
-      (stat(dir_path, &statbuf) != 0) || !S_ISDIR(statbuf.st_mode))
-                   GRSThttpError("403 Forbidden");
-
-  editable = getenv("GRST_EDITABLE");
-  if (editable == NULL) editable = getenv("REDIRECT_GRST_EDITABLE");
-  
-  unzip = getenv("GRST_UNZIP");
-  if (unzip == NULL) unzip = getenv("REDIRECT_GRST_UNZIP");
-  
-  dnlistsuri = getenv("GRST_DN_LISTS_URI");
-  if (dnlistsuri == NULL) dnlistsuri = getenv("REDIRECT_GRST_DN_LISTS_URI");
-
-  if (dnlistsuri && (strncmp(dnlistsuri, dir_uri, strlen(dnlistsuri)) == 0))
-    {
-      is_dnlists_dir = 1;
-      server_name = getenv("SERVER_NAME");
-
-      asprintf(&fulluri, "https://%s%s", server_name, dir_uri);
-      encfulluri = GRSThttpUrlEncode(fulluri);
-      enclen = strlen(encfulluri);
-
-      asprintf(&dnlistsprefix, "https://%s%s", server_name, dnlistsuri);
-      encprefix = GRSThttpUrlEncode(dnlistsprefix);
-      encprefixlen = strlen(encprefix);
-    }
-  
-  printf("Status: 200 OK\nContent-Type: text/html\n");
-
-  GRSThttpBodyInit(&bp);
-
-  GRSThttpPrintf(&bp,"<title>Manage directory %s</title>\n", dir_uri);
-
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_HEADFILE);
-    
-  GRSThttpPrintf(&bp, "<h1>Manage directory %s</h1>\n<table>\n", dir_uri);
-  
-  if (dir_uri[1] != '\0')
-     GRSThttpPrintf(&bp, 
-      "<tr><td colspan=3>[<a href=\"../%s?cmd=managedir\">Parent "
-       "directory</a>]</td></tr>\n", admin_file);
-
-  if (GRSTgaclPermHasList(perm) || GRSTgaclPermHasAdmin(perm))
-    {
-      absaclpath = malloc(strlen(dir_path) + sizeof(GRST_ACL_FILE) + 1);
-      strcpy(absaclpath, dir_path);
-      strcat(absaclpath, "/");
-      strcat(absaclpath, GRST_ACL_FILE);
-
-      if (stat(absaclpath, &statbuf) == 0) /* ACL exists in THIS directory */
-        {
-          localtime_r(&(statbuf.st_mtime), &mtime_tm);
-          strftime(modified, sizeof(modified), 
-           "<td align=right>%R</td><td align=right>%e&nbsp;%b&nbsp;%y</td>",
-                        &mtime_tm);    
-
-          if (!is_dnlists_dir)
-            {
-              GRSThttpPrintf(&bp,
-                      "<tr><td><a href=\"%s\">%s</a></td>"
-                      "<td align=right>%ld</td>%s\n",
-                      GRST_ACL_FILE,
-                      GRST_ACL_FILE,
-                      statbuf.st_size, modified);
-
-              GRSThttpPrintf(&bp,
-                   "<td><a href=\"%s%s?cmd=history&file=%s\">"
-                      "History</a></td>",
-                      dir_uri, admin_file, GRST_ACL_FILE);
-            }
-          else GRSThttpPrintf(&bp,
-                      "<tr><td>%s</td>"
-                      "<td align=right>%ld</td>%s\n",
-                      GRST_ACL_FILE,
-                      statbuf.st_size, modified);
-
-          if (GRSTgaclPermHasAdmin(perm)) 
-               GRSThttpPrintf(&bp,
-                   "<td><a href=\"%s%s?cmd=admin_acl\">Edit</a></td>"
-                   "<td><a href=\"%s%s?cmd=delete&file=%s\">Delete</a></td>",
-                   dir_uri, admin_file,
-                   dir_uri, admin_file, GRST_ACL_FILE);
-          else if (GRSTgaclPermHasRead(perm))
-               GRSThttpPrintf(&bp,
-                   "<td><a href=\"%s%s?cmd=show_acl\">View</a></td>"
-                   "<td>&nbsp;</td>", dir_uri, admin_file);
-          else GRSThttpPrintf(&bp, "<td>&nbsp;</td><td>&nbsp;</td>\n");
-
-          GRSThttpPrintf(&bp, "<td>&nbsp;</td></tr>\n");
-        }
-      else if (GRSTgaclPermHasAdmin(perm))
-          GRSThttpPrintf(&bp, "<form method=post action=\"%s%s\">\n"
-        "<tr><td colspan=8><input type=submit value=\"Create .gacl\"></td>\n"
-        "<input type=hidden name=cmd value=\"create_acl\"></tr></form>\n",
-        dir_uri, admin_file);
-    }
-
-  if (GRSTgaclPermHasList(perm))
-    {
-      n = scandir(dir_path, &namelist, 0, alphasort);
-      while (n--)
-       {
-         if (namelist[n]->d_name[0] != '.')
-           {
-               d_namepath = malloc(strlen(dir_path) + 
-                                   strlen(namelist[n]->d_name) + 2);
-               strcpy(d_namepath, dir_path);
-               strcat(d_namepath, "/");
-               strcat(d_namepath, namelist[n]->d_name);
-               stat(d_namepath, &statbuf);
-               
-               if (S_ISDIR(statbuf.st_mode))
-                 { 
-                   subDIR = opendir(d_namepath);
-                   
-                   if (subDIR == NULL) numfiles = 99; /* stop deletion */
-                   else
-                     {
-                       numfiles = 0; 
-                       while ((subdirfile_ent = readdir(subDIR)) != NULL) 
-                         if (subdirfile_ent->d_name[0] != '.') ++numfiles;
-                         else if (strncmp(subdirfile_ent->d_name, 
-                                     GRST_ACL_FILE,
-                                    sizeof(GRST_ACL_FILE)) == 0) ++numfiles;
-
-                       closedir(subDIR);
-                     }                     
-                 }
-                              
-               free(d_namepath);
-               
-               localtime_r(&(statbuf.st_mtime), &mtime_tm);
-               strftime(modified, sizeof(modified), 
-               "<td align=right>%R</td><td align=right>%e&nbsp;%b&nbsp;%y</td>",
-                        &mtime_tm);    
-                              
-               if (S_ISDIR(statbuf.st_mode)) 
-                 {
-                   GRSThttpPrintf(&bp,
-                      "<tr><td><a href=\"%s%s/%s?cmd=managedir\">"
-                      "%s/</a></td>"
-                      "<td align=right>%ld</td>%s\n<td colspan=2>&nbsp;</td>",
-                      dir_uri, namelist[n]->d_name, admin_file,
-                      namelist[n]->d_name,
-                      statbuf.st_size, modified);
-
-                   if (numfiles == 0)
-                        GRSThttpPrintf(&bp,
-                        "<td><a href=\"%s%s?cmd=delete&file=%s\">"
-                        "Delete</a></td>\n", 
-                        dir_uri, admin_file, namelist[n]->d_name);
-                   else GRSThttpPrintf(&bp, "<td>&nbsp;</td>\n");
-                      
-                   GRSThttpPrintf(&bp, "<td>&nbsp;</td></tr>\n");
-                 }
-               else if (is_dnlists_dir) 
-                 {        
-                   if ((strlen(namelist[n]->d_name) <= encprefixlen) ||
-                       (strncmp(namelist[n]->d_name, encprefix, 
-                                              encprefixlen) != 0)) continue;
-
-                   d_name = GRSThttpUrlDecode(namelist[n]->d_name);
-
-                   GRSThttpPrintf(&bp, "<tr><td><a href=\"%s\">%s</a></td>"
-                                       "<td align=right>%ld</td>%s"
-                                       "<td>&nbsp;</td>",
-                                       d_name, d_name,
-                                       statbuf.st_size, modified);
-
-                   if (GRSTgaclPermHasWrite(perm))
-                     GRSThttpPrintf(&bp, "<form action=\"%s%s\" method=post>"
-                        "<td><input type=submit value=Edit></td>"
-                        "<input type=hidden name=cmd value=editdnlist>"
-                        "<input type=hidden name=file value=\"%s\">"
-                        "</form>\n",
-                        dir_uri, admin_file, d_name);
-                   else GRSThttpPrintf(&bp, "<td>&nbsp;</td>\n");
-                   
-                   if (GRSTgaclPermHasWrite(perm))
-                     GRSThttpPrintf(&bp, "<form action=\"%s%s\" method=post>"
-                        "<td><input type=submit value=Delete></td>"
-                        "<input type=hidden name=cmd value=delete>"
-                        "<input type=hidden name=file value=\"%s\">"
-                        "</form>\n",
-                        dir_uri, admin_file, d_name);
-                   else GRSThttpPrintf(&bp, "<td>&nbsp;</td>\n");
-
-                   GRSThttpPrintf(&bp, "<td>&nbsp;</td></tr>");
-                 }
-               else /* regular directory, not DN Lists */
-                 {        
-                   d_name   = namelist[n]->d_name;
-
-                   GRSThttpPrintf(&bp,
-                          "<tr><td><a href=\"%s%s\">%s</a></td>"
-                          "<td align=right>%ld</td>%s",
-                          dir_uri, d_name, 
-                          d_name, 
-                          statbuf.st_size, modified);                                        
-
-                   GRSThttpPrintf(&bp,
-                     "<td><a href=\"%s%s?cmd=history&file=%s\">"
-                      "History</a></td>",
-                      dir_uri, admin_file, d_name);
-
-                   p = rindex(namelist[n]->d_name, '.');
-
-                   if      ((unzip != NULL) &&
-                            (p != NULL) && 
-                            (strcasecmp(&p[1], "zip") == 0) &&
-                            GRSTgaclPermHasRead(perm))
-                             GRSThttpPrintf(&bp,
-                               "<td><a href=\"%s%s?cmd=ziplist&file=%s\">"
-                               "List</a></td>\n",
-                               dir_uri, admin_file, d_name);                   
-                   else if ((p != NULL) && 
-                       (strstr(editable, &p[1]) != NULL) &&
-                       GRSTgaclPermHasWrite(perm))
-                         GRSThttpPrintf(&bp,
-                               "<td><a href=\"%s%s?cmd=edit&file=%s\">"
-                               "Edit</a></td>\n",
-                               dir_uri, admin_file, d_name);
-                   else  GRSThttpPrintf(&bp, "<td>&nbsp;</td>");
-
-                   if (GRSTgaclPermHasWrite(perm))
-                    GRSThttpPrintf(&bp,
-                     "<td><a href=\"%s%s?cmd=delete&file=%s\">"
-                     "Delete</a></td>\n", dir_uri, admin_file, d_name);
-                   else
-                    GRSThttpPrintf(&bp, "<td>&nbsp;</td>\n");
-
-                   if (GRSTgaclPermHasWrite(perm))
-                    GRSThttpPrintf(&bp,
-                     "<td><a href=\"%s%s?cmd=rename&file=%s\">"
-                     "Rename</a></td></tr>\n", dir_uri, admin_file, d_name);
-                   else
-                    GRSThttpPrintf(&bp, "<td>&nbsp;</td></tr>");
-                 }
-           }
-
-         free(namelist[n]);
-       }
-                    
-      free(namelist);
-    }
-
-  if (GRSTgaclPermHasWrite(perm))
-    {
-      if (is_dnlists_dir)
-        {
-          GRSThttpPrintf(&bp, "<form method=post action=\"%s%s\">\n"
-        "<tr><td colspan=4>New list name: "
-        "<input type=text name=file value=\"%sNEW_LIST\" size=%d>\n"
-        "<input type=hidden name=cmd value=editdnlist></td>"
-        "<td colspan=2 align=center><input type=submit value=Create></td>\n"
-        "</tr></form>\n",
-        dir_uri, admin_file, fulluri, strlen(fulluri)+8);
-
-          GRSThttpPrintf(&bp, "<form method=post action=\"%s%s\">\n"
-        "<tr><td colspan=4>New directory: "
-        "<input type=text name=file>\n"
-        "<td colspan=2 align=center><input type=submit name=button value=\"Create\"></td>\n"
-        "<input type=hidden name=cmd value=edit></td></tr></form>\n",
-        dir_uri, admin_file);      
-        }
-      else
-        {
-          GRSThttpPrintf(&bp, "<form method=post action=\"%s%s\">\n"
-        "<tr><td colspan=8><hr width=\"75%\"></td></tr>\n"
-        "<tr><td>New name:</td>"
-        "<td colspan=3><input type=text name=file size=25>\n"
-        "<td colspan=2 align=center><input type=submit name=button value=\"New file\"></td>\n"
-        "<td colspan=2 align=center><input type=submit name=button value=\"New directory\"></td>\n"
-        "<input type=hidden name=cmd value=edit></td></tr></form>\n",
-        dir_uri, admin_file);
-      
-          GRSThttpPrintf(&bp,
-        "<form method=post action=\"%s%s\" enctype=\"multipart/form-data\">\n"
-        "<tr><td colspan=8><hr width=\"75%\"></td></tr>\n"
-        "<tr><td rowspan=2>Upload file:</td>"
-        "<td colspan=2>New name:</td>"
-        "<td colspan=6><input type=text name=file size=25> "
-        "<input type=submit value=Upload></td></tr>\n"
-        "<tr><td colspan=2>Local name:</td>"
-        "<td colspan=6><input type=file name=uploadfile size=25></td></tr>\n"
-        "</form>\n", dir_uri, admin_file);
-        }
-    }
-
-  GRSThttpPrintf(&bp, "</table>\n");
-
-  if (!is_dnlists_dir) adminfooter(&bp, dn, help_uri, dir_uri, NULL);
-
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE);
-  GRSThttpWriteOut(&bp);
-}
-
diff --git a/org.gridsite.core/src/grst_admin_gacl.c b/org.gridsite.core/src/grst_admin_gacl.c
deleted file mode 100644 (file)
index 2a40b28..0000000
+++ /dev/null
@@ -1,968 +0,0 @@
-/*
-  Copyright (c) 2003, Shiv Kaushal, University of Manchester
-  All rights reserved.
-
-  Redistribution and use in source and binary forms, with or
-  without modification, are permitted provided that the following
-  conditions are met:
-
-  o Redistributions of source code must retain the above
-  copyright notice, this list of conditions and the following
-  disclaimer.
-  o 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.
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-*/
-
-/*-----------------------------------------------------------*
-* This program is part of GridSite: http://www.gridsite.org/ *
-*------------------------------------------------------------*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <gridsite.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-extern char *grst_perm_syms[];
-extern int grst_perm_vals[];
-
-#include "grst_admin.h"
-
-// CGI GACL Editor interface functions
-void show_acl(int admin, GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void new_entry_form(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void new_entry(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void del_entry(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void edit_entry_form(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void edit_entry(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void add_cred_form(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void add_cred(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void del_cred(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void del_entry_sure(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void del_cred_sure(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void admin_continue(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file, GRSThttpBody *bp);
-
-// Functions for producing HTML output
-void StartHTML(GRSThttpBody *bp, char *dir_uri, char* dir_path);
-void StartForm(GRSThttpBody *bp, char* dir_uri, char* dir_path, char* admin_file, int timestamp, char* target_function);
-void EndForm(GRSThttpBody *bp);
-void GRSTgaclCredTableStart(GRSThttpBody *bp);
-void GRSTgaclCredTableAdd(GRSTgaclUser *user, GRSTgaclEntry *entry, GRSTgaclCred *cred, GRSTgaclNamevalue *namevalue, int cred_no, int entry_no, int admin, int timestamp, GRSThttpBody *bp, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-void GRSTgaclCredTableEnd(GRSTgaclEntry* entry, int entry_no, int admin, int timestamp, GRSThttpBody *bp, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-
-// ACL Manipulation functions
-int GACLentriesInAcl(GRSTgaclAcl *acl);
-int GRSTgaclCredsInEntry(GRSTgaclEntry *entry);
-void check_acl_save(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file, GRSTgaclUser* user, GRSTgaclAcl *acl, GRSThttpBody *bp);
-void GACLeditGetPerms(GRSTgaclEntry *entry);
-GRSTgaclEntry *GACLreturnEntry(GRSTgaclAcl *acl, int entry_no);
-GRSTgaclCred *GACLreturnCred(GRSTgaclEntry *entry, int cred_no);
-
-void StringHTMLEncode (char* string, GRSThttpBody *bp);
-
-void revert_acl(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file);
-
-/*****************************************/
-/********** FUNCTIONS FOLLOW *************/
-/*****************************************/
-
-void show_acl(int admin, GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file){
-  // Shows the contents of the ACL. Gives edit 'buttons' if (int admin) == 1
-  GRSTgaclAcl *acl;
-  GRSTgaclEntry *entry;
-  GRSTgaclCred *cred;
-  GRSTgaclNamevalue *namevalue;
-  int entry_no, cred_no, allow, deny,timestamp;
-  GRSThttpBody bp;
-  char* AclFilename;
-  struct stat file_info;
-  int history_mode=0;
-
-  if (admin==2){
-    history_mode=1;
-    admin=0;
-  }
-
-  /*double-check access permision*/
-  if (!GRSTgaclPermHasAdmin(perm)) admin=0;
-
-  StartHTML(&bp, dir_uri, dir_path);
-
-  /* Load ACL from file and get timestamp*/
-  if (history_mode==1) {
-    AclFilename=malloc(strlen(dir_path)+strlen(file)+2);
-    strcpy(AclFilename, dir_path);
-    strcat(AclFilename, "/");
-    strcat(AclFilename, file);
-  }
-  else  AclFilename=GRSTgaclFileFindAclname(dir_path);
-  
-  if (AclFilename==NULL){
-    GRSThttpPrintf ( &bp,"The ACL was not found !!!<br>\n");
-    admin_continue(dn, perm, help_uri, dir_path, file, dir_uri, admin_file, &bp);
-    return;
-  }
-
-  stat(GRSTgaclFileFindAclname(dir_path), &file_info);
-  timestamp=file_info.st_mtime;
-  acl = GRSTgaclAclLoadFile(AclFilename);
-
-  if (acl==NULL){
-    GRSThttpPrintf ( &bp,"The ACL was found but could not be loaded - it could be incorrectly formatted<br>\n");
-    adminfooter(&bp, dn, help_uri, dir_uri, NULL);
-    GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE); 
-    GRSThttpWriteOut(&bp);
-    return;
-  }
-
-  if (admin) GRSThttpPrintf (&bp,"<a href=\"%s%s?cmd=new_entry_form&diruri=%s&timestamp=%d\">New&nbsp;Entry</a><br>\n", dir_uri, admin_file, dir_uri, timestamp );
-
-  // Start with the first entry in the list and work through
-  entry=acl->firstentry;
-  entry_no=1;
-  while (entry!=NULL){
-
-    GRSThttpPrintf (&bp,"<br>Entry %d:\n", entry_no);
-    if (admin){
-      GRSThttpPrintf (&bp,"<a href=\"%s%s?cmd=edit_entry_form&entry_no=%d&diruri=%s&timestamp=%d\">Edit&nbsp;Entry</a> ", dir_uri, admin_file, entry_no, dir_uri, timestamp );
-      GRSThttpPrintf (&bp,"<a href=\"%s%s?cmd=del_entry_sure&entry_no=%d&diruri=%s&timestamp=%d\">Delete&nbsp;Entry</a> ",dir_uri, admin_file, entry_no, dir_uri, timestamp );
-      GRSThttpPrintf (&bp,"<p>\n");
-    }
-
-    GRSTgaclCredTableStart(&bp);
-
-    // Start with the first credential in the entry and work through
-    cred=entry->firstcred;
-    cred_no=1;
-    while (cred!=NULL){
-      namevalue=cred->firstname;
-      GRSTgaclCredTableAdd(user, entry, cred, namevalue, cred_no, entry_no, admin, timestamp, &bp, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-      // Change to next credential
-      cred=cred->next;
-      cred_no++;
-    }
-
-    GRSTgaclCredTableEnd (entry, entry_no, admin, timestamp, &bp, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-    // Change to next entry
-    entry=entry->next;
-    entry_no++;
-  }
-
-  if (!admin && GRSTgaclPermHasAdmin(perm) && !history_mode) //Print a link for admin mode, if not in admin mode but the user has admin permissions
-    GRSThttpPrintf (&bp,"<a href=\"%s%s?cmd=admin_acl&diruri=%s&timestamp=%d\">Admin&nbsp;Mode</a>",  dir_uri, admin_file, dir_uri, timestamp );
-  if (history_mode==1 && GRSTgaclDNlistHasUser(getenv("REDIRECT_GRST_ADMIN_LIST"), user)){
-    StartForm(&bp, dir_uri, dir_path, admin_file, timestamp, "revert_acl");
-//GRSThttpPrintf (&bp,"<a href=\"%s%s?cmd=revert_acl&diruri=%s&timestamp=%d&file=%s\">Revert to this Version</a>",  dir_uri, admin_file, dir_uri, timestamp, file );
-    GRSThttpPrintf (&bp, "<input type=\"hidden\" name=\"file\" value=\"%s\">\n", file);
-    // Revert Button
-    GRSThttpPrintf (&bp, "<p align=center><input type=\"submit\" value=\"Revert to this ACL\" name=\"B1\"></p>\n</form>\n");
-  }
-
-  adminfooter(&bp, dn, help_uri, dir_uri, NULL);
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE); GRSThttpWriteOut(&bp); return;
-}
-
-
-void new_entry_form(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm,char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file){
-  // Presents the user with a form asking for details required to create a new entry
-  GRSThttpBody bp;
-  int timestamp=atol(GRSThttpGetCGI("timestamp"));
-  GRSTgaclCred* cred;
-  GRSTgaclEntry *entry;
-  GRSTgaclNamevalue* namevalue;
-
-  if (!GRSTgaclPermHasAdmin(perm)) GRSThttpError ("403 Forbidden");
-
-  StartHTML(&bp, dir_uri, dir_path);
-  StartForm(&bp, dir_uri, dir_path, admin_file, timestamp, "new_entry");
-  GRSThttpPrintf (&bp, "<font size=\"4\"><b>NEW ENTRY IN ACL FOR %s </b></font></p>\n", dir_uri);
-
-  GRSTgaclCredTableStart(&bp);
-  GRSTgaclCredTableAdd(user, entry,cred, namevalue, 0, 0, 0, timestamp, &bp, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  GRSTgaclCredTableEnd (entry, 0, 0, timestamp, &bp, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-
-  /*Submit and reset buttons -  submit button sends the data in the form back to the script & new_entry() to be called*/
-  EndForm(&bp);
-  admin_continue(dn, perm, help_uri, dir_path, file, dir_uri, admin_file, &bp);
-  return;
-}
-
-void new_entry(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file){
-  // Processes the information entered into the form from new_entry_form() and adds a new entry to the ACL
-  GRSTgaclAcl *acl;
-  GRSTgaclEntry *entry;
-  GRSTgaclCred *cred;
-  char *type, *value;
-  GRSThttpBody bp;
-  if (!GRSTgaclPermHasAdmin(perm)) GRSThttpError ("403 Forbidden");
-
-  // Get new credential info and perform checks
-  type=GRSThttpGetCGI("type");
-  value=GRSThttpGetCGI("cred0_value");
-
-  if (strcmp(type, "not_chosen")==0){
-    GRSThttpError ("500 Invalid input - credential type not chosen");
-    return;
-  }
-
-  // Create the credential
-  cred=GRSTgaclCredNew(type);
-  if (strcmp(type, "person")==0) GRSTgaclCredAddValue(cred,"dn", value);
-  else if (strcmp(type, "dn-list")==0) GRSTgaclCredAddValue(cred, "url", value);
-  else if (strcmp(type, "voms")==0) GRSTgaclCredAddValue(cred, "fqan", value);
-  else if (strcmp(type, "dns")==0) GRSTgaclCredAddValue(cred, "hostname", value);
-  else if (strcmp(type, "any-user")==0) {} // namevalue not entered for any-user credential
-  else{
-    GRSThttpError ("500 Invalid input - credential type not valid");
-    return;
-  }
-
-  // Create and empty entry, add the credential and get permissions
-  entry = GRSTgaclEntryNew();
-  GRSTgaclEntryAddCred(entry, cred);
-  GACLeditGetPerms(entry);
-
-  // Load the ACL, add the entry and save
-  acl = GRSTgaclAclLoadFile(GRSTgaclFileFindAclname(dir_path));
-  GRSTgaclAclAddEntry(acl, entry);
-  check_acl_save(dn, perm, help_uri, dir_path, file, dir_uri, admin_file, user, acl, &bp);
-  return;
-}
-
-void del_entry(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file){
-  // Deletes the entry denoted by the GCI variable "entry_no"*/
-  int entry_no;
-  GRSTgaclAcl *acl;
-  GRSTgaclEntry *previous, *entry;
-  GRSThttpBody bp;
-
-  if (!GRSTgaclPermHasAdmin(perm)) GRSThttpError ("403 Forbidden");
-
-  // Load the ACL
-  acl = GRSTgaclAclLoadFile(GRSTgaclFileFindAclname(dir_path));
-
-  // Get the number of the entry to be deleted and check okay to delete
-  entry_no=atol(GRSThttpGetCGI("entry_no"));
-  if(GACLentriesInAcl(acl)<=1){
-    StartHTML(&bp, dir_uri, dir_path);
-    GRSThttpPrintf (&bp, "ERROR: Cannot delete all entries from the ACL<br>\n");
-    admin_continue(dn, perm, help_uri, dir_path, file, dir_uri, admin_file, &bp);
-    return;
-  }
-
-  // Get pointer to entry and previous entry
-  entry = GACLreturnEntry(acl, entry_no);
-  if (entry_no!=1) previous = GACLreturnEntry(acl, entry_no-1);
-
-  if(entry==NULL || entry_no<1 || entry_no>GACLentriesInAcl(acl) ){
-    GRSThttpError ("500 Unable to read entry from ACL file");
-    return;
-  }
-
-  // Perform deletion from the list by changing pointers
-  if (entry_no==1) acl->firstentry=entry->next;
-  else if (entry_no==GACLentriesInAcl(acl)) previous->next=NULL;
-  else previous->next=entry->next;
-
-  // Save ACL and exit
-  check_acl_save(dn, perm, help_uri, dir_path, file, dir_uri, admin_file, user, acl, &bp);
-
-  return;
-}
-
-
-void edit_entry_form(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file){
-  // Presents the user with an editable form containing details of entry denoted by CGI variable entry_no*/
-  int entry_no, cred_no, i, admin=0, timestamp=atol(GRSThttpGetCGI("timestamp"));
-  GRSTgaclAcl *acl;
-  GRSTgaclEntry *entry;
-  GRSTgaclCred *cred;
-  GRSTgaclNamevalue *namevalue;
-  //  struct _GACLnamevalue *namevalue;
-  GRSThttpBody bp;
-
-  if (!GRSTgaclPermHasAdmin(perm)) GRSThttpError ("403 Forbidden");
-
-  // Load ACL from file
-  acl = GRSTgaclAclLoadFile(GRSTgaclFileFindAclname(dir_path));
-
-  // Get pointer to the entry and check okay
-  entry_no=atol(GRSThttpGetCGI("entry_no"));
-  entry = GACLreturnEntry(acl, entry_no);
-  if(entry==NULL || entry_no<1 || entry_no>GACLentriesInAcl(acl) ){
-    GRSThttpError ("500 Unable to read from ACL file");
-    return;
-  }
-
-  StartHTML(&bp, dir_uri, dir_path);
-  GRSThttpPrintf (&bp, "<b><font size=\"4\">EDITING ENTRY %d IN ACL FOR %s </font></b></p>\n", entry_no, dir_uri);
-
-  // Start with first credential in the entry and display them in order*/
-  cred=entry->firstcred;
-  cred_no=1;
-  StartForm(&bp, dir_uri, dir_path, admin_file, timestamp, "edit_entry");
-  GRSThttpPrintf (&bp, "<input type=\"hidden\" name=\"entry_no\" value=\"%d\">\n", entry_no);
-
-  GRSTgaclCredTableStart(&bp);
-
-  while (cred!=NULL){
-    // Start with the first namevalue in the credential
-    namevalue=cred->firstname;
-    GRSTgaclCredTableAdd(user, entry, cred, namevalue, cred_no, entry_no, admin, timestamp, &bp, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-    // Change to next credential
-    cred=cred->next;
-    cred_no++;
-  }
-  GRSTgaclCredTableEnd (entry, entry_no, admin, timestamp, &bp, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  EndForm(&bp);
-
-  admin_continue(dn, perm, help_uri, dir_path, file, dir_uri, admin_file, &bp);
-  return;
-}
-
-
-void edit_entry(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file){
-  //Processes the information entered into the form from edit_entry_form() and updates the entry corresponding to entry_no*/
-  int entry_no, cred_no, i;
-  GRSTgaclAcl *acl;
-  GRSTgaclEntry *entry;
-  GRSTgaclCred *cred;
-  GRSTgaclNamevalue *namevalue;
-  char variable[30];
-  GRSThttpBody bp;
-
-  if (!GRSTgaclPermHasAdmin(perm)) GRSThttpError ("403 Forbidden");
-
-  // Load the ACL
-  acl = GRSTgaclAclLoadFile(GRSTgaclFileFindAclname(dir_path));
-
-  // Get pointer to the entry and perform checks
-  entry_no=atol(GRSThttpGetCGI("entry_no"));
-  entry = GACLreturnEntry(acl, entry_no);
-  if(entry==NULL || entry_no<1 || entry_no>GACLentriesInAcl(acl) ){
-    GRSThttpError ("500 Unable to read from ACL file");
-    return;
-  }
-
-  // Start with the first credential and update each one
-  cred=entry->firstcred;
-  cred_no=1;
-
-  while (cred!=NULL){
-   if (strcmp(cred->type, "any-user")!=0){
-      namevalue=cred->firstname;
-      sprintf(variable, "cred%d_value", cred_no);
-      namevalue->value=GRSThttpGetCGI(variable);
-   }
-    //Change to next credential*/
-    cred=cred->next;
-    cred_no++;
-  }
-
-  // Update permissions
-  GACLeditGetPerms(entry);
-  check_acl_save(dn, perm, help_uri, dir_path, file, dir_uri, admin_file, user, acl, &bp);
-  return;
-}
-
-
-void add_cred_form(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file){
-  // Presents the user with a form asking for details required to create a new credential in the entry denoted by entry_no
-  GRSThttpBody bp;
-  int timestamp=atol(GRSThttpGetCGI("timestamp")), entry_no=atol(GRSThttpGetCGI("entry_no"));
-  GRSTgaclAcl *acl;
-  GRSTgaclEntry* entry;
-  GRSTgaclCred* cred;
-  GRSTgaclNamevalue* namevalue;
-  
-  if (!GRSTgaclPermHasAdmin(perm)) GRSThttpError ("403 Forbidden");
-
-  acl = GRSTgaclAclLoadFile(GRSTgaclFileFindAclname(dir_path)); // Load the ACL
-
-  //Get pointer to the entry  and perform checks
-  entry = GACLreturnEntry(acl, entry_no);
-  if(entry==NULL || entry_no<1 || entry_no>GACLentriesInAcl(acl) ){
-    GRSThttpError ("500 Unable to read from ACL file");
-    return;
-  }
-
-
-  if (strcmp(GRSThttpGetCGI("cmd"), "add_cred_form")==0){ //if not a new entry check to see if <any-user> cred exists
-    cred=entry->firstcred;
-    while (cred!=NULL) {
-      if (strcmp (cred->type, "any-user")==0) {
-        StartHTML(&bp, dir_uri, dir_path);
-        GRSThttpPrintf (&bp, "ERROR: AND-ing \"any-user\" credential with other credential does not make sense <br>\n");
-        admin_continue(dn, perm, help_uri, dir_path, file, dir_uri, admin_file, &bp);
-       return;
-      }
-     cred=cred->next;
-    }
-  }
-
-  StartHTML(&bp, dir_uri, dir_path);
-  GRSThttpPrintf (&bp, " <font size=\"4\"><b>NEW CREDENTIAL IN ENTRY %d OF ACL FOR %s</b></font></p>\n", entry_no, dir_uri);
-  StartForm(&bp, dir_uri, dir_path, admin_file, timestamp, "add_cred");
-
-  GRSThttpPrintf (&bp, " <input type=\"hidden\" name=\"entry_no\" value=\"%d\">\n", entry_no);
-
-  GRSTgaclCredTableStart(&bp);
-  GRSTgaclCredTableAdd(user, entry, cred, namevalue, 0, 0, 0, timestamp, &bp, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  GRSTgaclCredTableEnd (entry, 0, 0, timestamp, &bp, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-
-  EndForm(&bp);
-  admin_continue(dn, perm, help_uri, dir_path, file, dir_uri, admin_file, &bp);
-  return;
-}
-
-
-void add_cred(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file){
-  // Processes the information entered into the form [add_cred_form()]and adds a new credential to the entry corresponding to entry_no
-  int entry_no;
-  GRSTgaclAcl *acl;
-  GRSTgaclEntry *entry;
-  GRSTgaclCred *cred;
-  GRSThttpBody bp;
-  char *type, *value;
-
-  if (!GRSTgaclPermHasAdmin(perm)) GRSThttpError ("403 Forbidden");
-
-  acl = GRSTgaclAclLoadFile(GRSTgaclFileFindAclname(dir_path));// Load the ACL
-
-  // Get pointer to the entry  and perform checks
-  entry_no=atol(GRSThttpGetCGI("entry_no"));
-  entry = GACLreturnEntry(acl, entry_no);
-  if(entry==NULL || entry_no<1 || entry_no>GACLentriesInAcl(acl)){
-    GRSThttpError ("500 Unable to read from ACL file");
-    return;
-  }
-
-  // Create new credential and add it to entry
-  type=GRSThttpGetCGI("type");
-  value=GRSThttpGetCGI("cred0_value");
-  cred=GRSTgaclCredNew(type);
-  if      (strcmp(type, "person")  ==0) GRSTgaclCredAddValue(cred,"dn", value);
-  else if (strcmp(type, "dn-list") ==0) GRSTgaclCredAddValue(cred, "url", value);
-  else if (strcmp(type, "voms")    ==0) GRSTgaclCredAddValue(cred, "fqan", value);
-  else if (strcmp(type, "dns")     ==0) GRSTgaclCredAddValue(cred, "hostname", value);
-  else if (strcmp(type, "any-user")==0) {}// namevalue not entered for any-user credential
-  else{
-    GRSThttpError ("500 Credential type not valid");
-    return;
-  }
-  GRSTgaclEntryAddCred(entry, cred);
-
-  check_acl_save(dn, perm, help_uri, dir_path, file, dir_uri, admin_file, user, acl, &bp);
-  return;
-}
-
-
-void del_cred(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file){
-  // Deletes the credential denoted by the GCI variable "cred_no", in the entry denoted by "entry_no"
-  int entry_no, cred_no;
-  GRSTgaclAcl *acl;
-  GRSTgaclEntry *entry;
-  GRSTgaclCred *previous, *cred;
-  GRSThttpBody bp;
-
-  if (!GRSTgaclPermHasAdmin(perm)) GRSThttpError ("403 Forbidden");
-
-  acl = GRSTgaclAclLoadFile(GRSTgaclFileFindAclname(dir_path));
-
-  // Get pointer to the entry and perform checks
-  entry_no=atol(GRSThttpGetCGI("entry_no"));
-  entry = GACLreturnEntry(acl, entry_no);
-  if(entry==NULL || entry_no<1 || entry_no>GACLentriesInAcl(acl) ){
-    GRSThttpError ("500 Unable to read from ACL file");
-    return;
-  }
-  // Get pointer the the credential and perform checks
-  cred_no=atol(GRSThttpGetCGI("cred_no"));
-  cred=GACLreturnCred(entry, cred_no);
-  if(entry==NULL || entry_no<1 || cred_no>GRSTgaclCredsInEntry(entry)){
-    GRSThttpError ("500 Unable to read from ACL file");
-    return;
-  }
-  // Get pointer to previous credential - if needed
-  if (cred_no!=1) previous = GACLreturnCred(entry, cred_no-1);
-
-  // Perform deletion from the list by changing pointers
-  if (cred_no==1) entry->firstcred=cred->next;
-  else if (cred_no==GRSTgaclCredsInEntry(entry)) previous->next=NULL;
-  else previous->next=cred->next;
-
-  check_acl_save(dn, perm, help_uri, dir_path, file, dir_uri, admin_file, user, acl, &bp);
-  return;
-}
-
-void admin_continue(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file, GRSThttpBody *bp){
-  // Single line printed out to forward users back to show_acl in admin mode
-  // Should ALWAYS called from another function so no HTML header required
-  // Should ALWAYS be the end of a page
-  GRSThttpPrintf (bp, "\n<br><a href=\"%s%s?diruri=%s&cmd=admin_acl&timestamp=%d\">Click&nbsp;Here</a> to return to the editor", dir_uri,admin_file,dir_uri, time(NULL));
-  adminfooter(bp, dn, help_uri, dir_uri, NULL);
-  GRSThttpPrintHeaderFooter(bp, dir_path, GRST_FOOTFILE);
-  GRSThttpWriteOut(bp);
-  return;
-}
-
-
-void del_entry_sure(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file){
-  // Prints out entry denoted by entry_no and asks if the user really wants to delete it
-  GRSTgaclAcl *acl;
-  GRSTgaclEntry *entry;
-  GRSTgaclCred *cred;
-  GRSTgaclNamevalue *namevalue;
-  int entry_no, cred_no, allow, deny, i, timestamp;
-  GRSThttpBody bp;
-
-  if (!GRSTgaclPermHasAdmin(perm)) GRSThttpError ("403 Forbidden");
-
-  acl = GRSTgaclAclLoadFile(GRSTgaclFileFindAclname(dir_path));// Load ACL from file
-
-  if (acl==NULL){
-    GRSThttpError ("500 Unable to read from ACL file");
-    return;
-  }
-
-  // Get pointer to the entry and check okay
-  entry_no=atol(GRSThttpGetCGI("entry_no"));
-  entry = GACLreturnEntry(acl, entry_no);
-  if(entry==NULL || entry_no<1 || entry_no>GACLentriesInAcl(acl) ){
-    GRSThttpError ("500 Unable to read from ACL file");
-    return;
-  }
-
-  StartHTML(&bp, dir_uri, dir_path);
-  GRSThttpPrintf (&bp, "<h1 align=center>Do you really want to delete the following entry?</h1><br><br>\n");
-  GRSThttpPrintf (&bp,"<br>Entry %d:<br>\n", entry_no);
-
-  // Print the entry out
-  // Start with the first credential in the entry and work through
-  cred=entry->firstcred;
-  cred_no=1;
-
-  GRSTgaclCredTableStart(&bp);
-  while (cred!=NULL){
-    // Start with the first namevalue in the credential
-    namevalue=cred->firstname;
-    GRSTgaclCredTableAdd(user, entry, cred, namevalue, cred_no, entry_no, 0, 0, &bp, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-    // Change to next credential
-    cred=cred->next;
-    cred_no++;
-  }
-
-  GRSTgaclCredTableEnd (entry, entry_no, 0, 0, &bp, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-
-  StartForm(&bp, dir_uri, dir_path, admin_file, atol(GRSThttpGetCGI("timestamp")), "del_entry");
-  GRSThttpPrintf (&bp, "<input type=\"hidden\" name=\"entry_no\" value=\"%d\">\n", entry_no);
-  GRSThttpPrintf (&bp, " <p align=center><input type=\"submit\" value=\"Yes\" name=\"B1\"></p>\n</form>\n");
-
-  admin_continue(dn, perm, help_uri, dir_path, file, dir_uri, admin_file, &bp);
-  return;
-}
-
-void del_cred_sure(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file){
-  // Prints out credential denoted by entry_no/cred_no and asks if the user really wants to delete it
-  GRSTgaclAcl *acl;
-  GRSTgaclEntry *entry;
-  GRSTgaclCred *cred;
-  GRSTgaclNamevalue *namevalue;
-  int entry_no, cred_no, allow, deny, timestamp, i;
-  GRSThttpBody bp;
-
-  if (!GRSTgaclPermHasAdmin(perm)) GRSThttpError ("403 Forbidden");
-
-  acl = GRSTgaclAclLoadFile(GRSTgaclFileFindAclname(dir_path));// Load ACL from file
-
-  if (acl==NULL){
-    GRSThttpError ("500 Unable to read from ACL file");
-    return;
-  }
-
-  // Get pointer to the entry and check okay
-  entry_no=atol(GRSThttpGetCGI("entry_no"));
-  entry = GACLreturnEntry(acl, entry_no);
-  if(entry==NULL || entry_no<1 || entry_no>GACLentriesInAcl(acl) ){
-    GRSThttpError ("500 Unable to read from ACL file");
-    return;
-  }
-
-  // Get pointer to the credential and check okay
-  cred_no=atol(GRSThttpGetCGI("cred_no"));
-  cred=GACLreturnCred(entry, cred_no);
-  if(entry==NULL || entry_no<1 || cred_no>GRSTgaclCredsInEntry(entry)){
-    GRSThttpError ("500 Unable to read from ACL file");
-    return;
-  }
-
-  if(GRSTgaclCredsInEntry(entry)<=1){
-    del_entry_sure(user, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-    return;
-  }
-
-  StartHTML(&bp, dir_uri, dir_path);
-  GRSThttpPrintf (&bp, "<h1 align=center>Do you really want to delete the following credential from entry %d?</h1><br><br>", entry_no);
-
-  // Print the credential out
-  GRSTgaclCredTableStart(&bp);
-  GRSTgaclCredTableAdd(user, entry, cred, cred->firstname, cred_no, entry_no, 0, 0, &bp, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  GRSTgaclCredTableEnd (entry, entry_no, 0, 0, &bp, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  GRSThttpPrintf (&bp,"<br>\n");
-
-  // Yes Button
-  StartForm(&bp, dir_uri, dir_path, admin_file, atol(GRSThttpGetCGI("timestamp")), "del_cred");
-  GRSThttpPrintf (&bp, "<input type=\"hidden\" name=\"entry_no\" value=\"%d\">\n", entry_no);
-  GRSThttpPrintf (&bp, "<input type=\"hidden\" name=\"cred_no\" value=\"%d\">\n", cred_no);
-  GRSThttpPrintf (&bp, " <p align=center><input type=\"submit\" value=\"Yes\" name=\"B1\"></p>\n</form>\n");
-
-  admin_continue(dn, perm, help_uri, dir_path, file, dir_uri, admin_file, &bp);
-  return;
-}
-
-
-int GACLentriesInAcl(GRSTgaclAcl *acl){
-  // Returns the number of entries in acl
-  GRSTgaclEntry *entry;
-  int number;
-
-  entry=acl->firstentry;
-  number=0;
-
-  while (entry!=NULL)
-  {
-    number++;
-    entry=entry->next;
-  }
-
-  return number;
-}
-
-int GRSTgaclCredsInEntry(GRSTgaclEntry *entry){
-  // Returns the number of credentials in entry
-  int number;
-  GRSTgaclCred *cred;
-
-  cred=entry->firstcred;
-  number=0;
-
-  while (cred!=NULL)
-  {
-    number++;
-    cred=cred->next;
-  }
-
-  return number;
-}
-
-
-void GACLeditGetPerms(GRSTgaclEntry *entry){
-  // Updates the permissions entry using permissions from a form produced using GRSTgaclCredTableEnd
-  int i;
-  char buf[30];
-
-
-  for (i=0; grst_perm_syms[i]!=NULL; i++)  /* Print the list of allowed permissions*/
-  {
-    sprintf (buf, "allow_%s", grst_perm_syms[i]); // Update allowed
-    if (strcmp (GRSThttpGetCGI(buf), "ON") == 0 )  GRSTgaclEntryAllowPerm(entry, grst_perm_vals[i]);  else GRSTgaclEntryUnallowPerm(entry, grst_perm_vals[i]);
-
-    sprintf (buf, "deny_%s", grst_perm_syms[i]); // Update denied
-    if (strcmp (GRSThttpGetCGI(buf), "ON") == 0 )  GRSTgaclEntryDenyPerm(entry, grst_perm_vals[i]);  else GRSTgaclEntryUndenyPerm(entry, grst_perm_vals[i]);
-
-  }
-
-  return;
-}
-
-GRSTgaclEntry *GACLreturnEntry(GRSTgaclAcl *acl, int entry_no){
-  // Returns a pointer to entry in ACL denoted by entry_no, returns NULL if not found
-  int number;
-  GRSTgaclEntry *entry;
-
-  if (acl==NULL) return NULL;
-
-  entry=acl->firstentry;
-  number=1;
-
-  while (entry!=NULL)
-  {
-    if (number==entry_no) return entry;
-    number++;
-    entry=entry->next;
-  }
-
-  return NULL;
-}
-
-
-GRSTgaclCred *GACLreturnCred(GRSTgaclEntry *entry, int cred_no){
-  // Returns a pointer to credential denoted by cred_no in entry, returns NULL if not found
-  int number;
-  GRSTgaclCred *cred;
-
-  if (entry==NULL) return NULL;
-
-  cred=entry->firstcred;
-  number=1;
-
-  while (cred!=NULL)
-  {
-    if (number==cred_no) return cred;
-    number++;
-    cred=cred->next;
-  }
-
-  return NULL;
-}
-void StartHTML(GRSThttpBody *bp, char *dir_uri, char* dir_path){
-  //Start HTML output and insert page title
-  printf("Status: 200 OK\nContent-Type: text/html\n");
-  GRSThttpBodyInit(bp);
-  GRSThttpPrintf(bp, "<title>Access Control List for %s</title>\n", dir_uri);
-  GRSThttpPrintHeaderFooter(bp, dir_path, GRST_HEADFILE);
-  return;
-}
-void StartForm(GRSThttpBody *bp, char* dir_uri, char* dir_path, char* admin_file, int timestamp, char* target_function){
-  // Starts an HTML form with gridsite admin as the target and target_function as the value of cmd.
-  // Also inputs the dir_uri and the timestamp
-  GRSThttpPrintf (bp, "<form method=\"POST\" action=\"%s%s?diruri=%s\">\n", dir_uri, admin_file, dir_uri);
-  GRSThttpPrintf (bp, " <input type=\"hidden\" name=\"cmd\" value=\"%s\">\n", target_function);
-  GRSThttpPrintf (bp, " <input type=\"hidden\" name=\"timestamp\" value=\"%d\">\n", timestamp);
-  return;
-}
-
-void EndForm(GRSThttpBody *bp){
-  GRSThttpPrintf (bp, " <br><input type=\"submit\" value=\"Submit\" name=\"B1\"><input type=\"reset\" value=\"Reset\" name=\"B2\"></p>\n");
-  GRSThttpPrintf (bp, "</form>\n");
-  return;
-}
-
-void GRSTgaclCredTableStart(GRSThttpBody *bp){
-  //Starts an HTML table of credentials by setting the column widths and inputting the headings
-  GRSThttpPrintf (bp,"<table border=\"1\" cellpadding=\"2\" cellspacing=\"0\" style=\"border-collapse: collapse\" bordercolor=\"#111111\" width=\"100%\" id=\"CredentialTable\">");
-  GRSThttpPrintf (bp,"<tr><td align=center width=\"10%\"><b>Credential No.</td><td align=center width=\"15%\"><b>Type</td><td align=left width=\"75%\"><b>Value</td></tr>");
-  return;
-}
-
-void GRSTgaclCredTableAdd(GRSTgaclUser *user, GRSTgaclEntry *entry, GRSTgaclCred *cred, GRSTgaclNamevalue *namevalue, int cred_no, int entry_no, int admin, int timestamp, GRSThttpBody *bp, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file){
-  // Adds the credential "cred" to a table started byGRSTgaclCredTableStart allowing the user to edit if appropriate
-  char* cmd = GRSThttpGetCGI("cmd");
-  int edit_values=0, new_cred=0, allow_new_person=1;
-  int site_admin=GRSTgaclDNlistHasUser(getenv("REDIRECT_GRST_ADMIN_LIST"), user);
-
-  if (strcmp(cmd, "new_entry_form")==0 || strcmp(cmd, "add_cred_form")==0) new_cred=1;
-  if (new_cred || strcmp(cmd, "edit_entry_form")==0) edit_values=1;
-
-  if (new_cred) { /*Print out type and descriptor*/
-     if (strcmp(cmd, "add_cred_form")==0){ /*if not a new entry check to see if <person> cred exists.*/
-       cred=entry->firstcred;
-       while (cred!=NULL) {if (strcmp (cred->type, "person")==0) allow_new_person=0; cred=cred->next;}
-     }
-     //create dummy credential for the user to edit
-     cred=GRSTgaclCredNew("new");
-     GRSTgaclCredAddValue(cred, "", "");
-     namevalue=cred->firstname;
-     //Drop down list of types
-     GRSThttpPrintf(bp,"<tr><td align=center >New</td>");
-     GRSThttpPrintf(bp,"<td align=center >");
-     GRSThttpPrintf (bp, " <select size=\"1\" name=\"type\">\n");
-     GRSThttpPrintf (bp, " <option selected value=\"not_chosen\">(choose)</option>\n");
-     if (allow_new_person) GRSThttpPrintf (bp, " <option value=\"person\">Person &lt;dn&gt; &lt;/dn&gt;</option>\n");
-     GRSThttpPrintf (bp, " <option value=\"dn-list\">DN-List &lt;url&gt; &lt;/url&gt;</option>\n");
-     GRSThttpPrintf (bp, " <option value=\"dns\">DNS &lt;hostname&gt; &lt;/hostname&gt;</option>\n");
-     GRSThttpPrintf (bp, " <option value=\"voms\">VOMS &lt;fqan&gt; &lt;/fqan&gt;</option>\n");
-     // Only alow any-user credential to be chosen if it is  new entry
-     if (strcmp(cmd, "new_entry_form")==0) GRSThttpPrintf (bp, " <option value=\"any-user\">Any User</option>\n");
-     GRSThttpPrintf (bp, " </select></td>");
-   }
-
-  else { //Print out type and descriptor for existing cred
-
-    GRSThttpPrintf(bp,"<tr><td align=center >%d", cred_no);
-    if (admin) GRSThttpPrintf (bp,"<a href=\"%s%s?diruri=%s&cmd=del_cred_sure&entry_no=%d&cred_no=%d&timestamp=%d\">(Delete)</a>", dir_uri,admin_file,dir_uri, entry_no, cred_no, timestamp);
-    GRSThttpPrintf(bp, "</td><td align=center >%s ", cred->type);
-  }
-
-  if (strcmp(cred->type, "any-user")==0) GRSThttpPrintf (bp, "</td><td>&nbsp;"); /* Do not print out namevalue for any-user credential*/
-  else{
-    if (edit_values){ // Place namevalue in an editable box if appropriate
-      GRSThttpPrintf (bp, "<td align=left><input type=\"text\" name=\"cred%d_value\"\n", cred_no);
-      GRSThttpPrintf (bp, "size=\"50\" value=\"");
-      StringHTMLEncode(namevalue->value, bp);
-      GRSThttpPrintf (bp, "\">");
-    }
-    else if (strcmp(cred->type, "dn-list")==0){
-         GRSThttpPrintf(bp, "<td align=left ><a href=\"");
-        StringHTMLEncode(namevalue->value, bp);
-        GRSThttpPrintf(bp, " \">");
-        StringHTMLEncode(namevalue->value, bp);
-        GRSThttpPrintf(bp, "</a>");
-      }
-    else { GRSThttpPrintf(bp, "<td align=left> "); StringHTMLEncode(namevalue->value, bp);}
-
-  }
-  //Print out warning symbol if cred being printed relates to current user - but NOT for users in site admin list
-  if (GRSTgaclUserHasCred(user, cred) && !site_admin)  GRSThttpPrintf(bp, "<font color=red><b>&nbsp;&lt;--</b></font>");
-  GRSThttpPrintf(bp, "</td></tr>");
-}
-
-void GRSTgaclCredTableEnd(GRSTgaclEntry* entry, int entry_no, int admin, int timestamp, GRSThttpBody *bp, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file){
-  // Finishes off a table of credentials by inputting "Add Credential" link and a list of premissions in the final row
-  int i, blank_perms, edit_perms, show_perms;
-  char* cmd = GRSThttpGetCGI("cmd");
-
-  if (strcmp(cmd, "add_cred_form")==0 ||strcmp(cmd, "del_cred_sure")==0) show_perms=0; else show_perms=1;
-  if (strcmp(cmd, "edit_entry_form")==0 || strcmp(cmd, "new_entry_form")==0) edit_perms=1; else edit_perms=0;
-  if (strcmp(cmd, "new_entry_form")==0) blank_perms=1; else blank_perms=0;
-
-  // If showing the last row is not required then exit
-  if (show_perms==0){GRSThttpPrintf (bp,"</table><br>\n"); return;}
-
-  GRSThttpPrintf (bp,"<tr><td align=center>");
-
-  if (admin) GRSThttpPrintf (bp,"<a href=\"%s%s?diruri=%s&cmd=add_cred_form&entry_no=%d&timestamp=%d\">Add&nbsp;Credential</a>", dir_uri,admin_file,dir_uri, entry_no, timestamp);
-
-  GRSThttpPrintf (bp, "</td>\n<td>&nbsp;</td><td align=left>");
-
-  if (blank_perms) entry->allowed=entry->denied=GRST_PERM_NONE;
-
-  // Show Permissions - will produce a list or a list of check boxes depending on whether the permissions are to be edited or not
-  GRSThttpPrintf (bp, "<b>Allowed:</b>  ");
-  for (i=0; grst_perm_syms[i]!=NULL; i++)  /* Print the list of allowed permissions*/
-  {
-    if ( entry->allowed & grst_perm_vals[i]){
-      if (edit_perms) GRSThttpPrintf (bp, "%s<input type=\"checkbox\" name=\"allow_%s\" value=\"ON\" checked>&nbsp;&nbsp;&nbsp;\n", grst_perm_syms[i],grst_perm_syms[i]);
-      else GRSThttpPrintf(bp,"%s ", grst_perm_syms[i]); if (strcmp(grst_perm_syms[i], "none")==0) break;
-    }
-    else if (strcmp(grst_perm_syms[i], "none")!=0 && edit_perms) GRSThttpPrintf (bp, "%s<input type=\"checkbox\" name=\"allow_%s\" value=\"ON\" unchecked>&nbsp;&nbsp;&nbsp;\n", grst_perm_syms[i],grst_perm_syms[i]);
-  }
-
-  if (edit_perms) GRSThttpPrintf (bp, "<p>");
-  GRSThttpPrintf (bp, "<b>Denied:&nbsp;</b>");
-  for (i=0; grst_perm_syms[i]!=NULL; i++)  /* Print the list of denied permissions*/
-  {
-   if  ( entry->denied & grst_perm_vals[i])
-   {
-     if (edit_perms) GRSThttpPrintf (bp, "%s<input type=\"checkbox\" name=\"deny_%s\" value=\"ON\" checked>&nbsp;&nbsp;&nbsp;\n", grst_perm_syms[i],grst_perm_syms[i]);
-     else GRSThttpPrintf(bp,"%s ", grst_perm_syms[i]);
-     if (strcmp(grst_perm_syms[i], "none")==0) break;
-   }
-   else if (strcmp(grst_perm_syms[i], "none")!=0 && edit_perms) GRSThttpPrintf (bp, "%s<input type=\"checkbox\" name=\"deny_%s\" value=\"ON\" unchecked>&nbsp;&nbsp;&nbsp;\n", grst_perm_syms[i],grst_perm_syms[i]);
-  }
-
-  GRSThttpPrintf (bp, "</td></tr>");
-  GRSThttpPrintf (bp,"</table><br>\n");
-  GRSThttpPrintf (bp,"\n");
-}
-
-void check_acl_save(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file, GRSTgaclUser* user, GRSTgaclAcl *acl, GRSThttpBody *bp){
-  // Checks if the acl for the current directory has been changed, check the current user's permissions.
-  // If all is okay the ACl is saved -> returns 1 else returns 0
-  struct stat file_info;
-  GRSTgaclPerm new_perm;
-  char *vfile, *dir_path_vfile, *dir_path_file;
-  FILE *fp;
-
-
-  /*Check ACL has not been modified*/
-  stat(GRSTgaclFileFindAclname(dir_path), &file_info);
-  if (atol(GRSThttpGetCGI("timestamp"))!=file_info.st_mtime){
-    StartHTML(bp, dir_uri, dir_path);
-    GRSThttpPrintf (bp, "ERROR: CANNOT SAVE CHANGES<p><p> The ACL has been modified since it was last viewed\n<p>");
-    admin_continue(dn, perm, help_uri, dir_path, file, dir_uri, admin_file, bp);
-    return;
-  }
-
-  // check users permissions in the new ACL
-
-  if (!GRSTgaclDNlistHasUser(getenv("REDIRECT_GRST_ADMIN_LIST"), user))
-  {
-    new_perm = GRSTgaclAclTestUser(acl, user);
-    if (new_perm != perm){
-      StartHTML(bp, dir_uri, dir_path);
-      if (!GRSTgaclPermHasAdmin(new_perm)){//Check that user still has Admin permissions - if not then exit without saving the new ACL
-        GRSThttpPrintf (bp, "ERROR: CANNOT SAVE CHANGES\n\n<p><p> You cannot deny yourself admin access from within the editor\n");
-        admin_continue(dn, perm, help_uri, dir_path, file, dir_uri, admin_file, bp);
-        return;
-      }
-      //Functions to inform of other permission changes come next
-      GRSThttpPrintf (bp, "WARNING: OPERATION CHANGED YOUR PERMISSIONS!\n\n<p><p> You still have Admin permissions<p>\n");
-      admin_continue(dn, perm, help_uri, dir_path, file, dir_uri, admin_file, bp);
-      return;
-    }
-  }
-  // ACL not modified, notified of permission changes - can now save
-
-  dir_path_file=GRSTgaclFileFindAclname(dir_path);
-  vfile=makevfilename(".gacl", file_info.st_size, dn); // Make temporary file name
-  dir_path_vfile = malloc(strlen(dir_path) + strlen(vfile) + 2);
-  strcpy(dir_path_vfile, dir_path);
-  strcat(dir_path_vfile, "/");
-  strcat(dir_path_vfile, vfile);
-
-  GRSTgaclAclSave(acl, dir_path_vfile); // save the new ACL to the temporary file
-  unlink(dir_path_file);
-  if (link (dir_path_vfile,dir_path_file)!=0) GRSThttpError("403 Forbidden");
-
-  printf ("Status: 302 Moved Temporarily\n Content Length: 0\nLocation: %s%s?cmd=admin_acl\n\n", dir_uri, admin_file);
-  return;
-}
-
-void StringHTMLEncode (char* string, GRSThttpBody *bp){
-
-  char* current_char;
-  char* tmp;
-  int n;
-  tmp=malloc(2);
-
-  *(tmp+1)='\0';
-  current_char=string;
-  while(*current_char != '\0'){
-
-    if  (*current_char  == '<')     GRSThttpPrintf (bp,"&lt;");
-    else if (*current_char == '>')  GRSThttpPrintf (bp,"&gt;");
-    else if (*current_char == '&')  GRSThttpPrintf (bp,"&amp;");
-    else if (*current_char == '\'') GRSThttpPrintf (bp,"&apos;");
-    else if (*current_char == '"')  GRSThttpPrintf (bp,"&quot;");
-    else{
-       *tmp=*current_char;
-       GRSThttpPrintf(bp, "%s", tmp);
-
-    }
-    current_char++;
-  }
-  return;
-}
-
-void revert_acl(GRSTgaclUser *user, char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path, char *file, char *dir_uri, char *admin_file){
-  char *AclFilename;
-  GRSTgaclAcl *acl;
-  GRSThttpBody bp;
-  // Load the old ACL, add the entry and save
-  AclFilename=malloc(strlen(dir_path)+strlen(file)+2);
-  strcpy(AclFilename, dir_path);
-  strcat(AclFilename, "/");
-  strcat(AclFilename, file);
-
-  acl = GRSTgaclAclLoadFile(AclFilename);
-  check_acl_save(dn, perm, help_uri, dir_path, file, dir_uri, admin_file, user, acl, &bp);
-  return;
-}
diff --git a/org.gridsite.core/src/grst_admin_main.c b/org.gridsite.core/src/grst_admin_main.c
deleted file mode 100644 (file)
index d884bf5..0000000
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
-   Andrew McNab and Shiv Kaushal, University of Manchester. 
-   Copyright (c) 2002-3. All rights reserved.
-
-   Redistribution and use in source and binary forms, with or
-   without modification, are permitted provided that the following
-   conditions are met:
-
-     o Redistributions of source code must retain the above
-       copyright notice, this list of conditions and the following
-       disclaimer. 
-     o 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. 
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-*/
-
-/*------------------------------------------------------------------*
- * This program is part of GridSite: http://www.gridsite.org/       *
- *------------------------------------------------------------------*/
-
-#ifndef VERSION
-#define VERSION "x.x.x"
-#endif
-
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
-#include <stdio.h>
-#include <time.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <unistd.h>
-#include <dirent.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <fcntl.h>
-
-// when porting: remember that sendfile() is very OS-specific!
-#include <sys/sendfile.h>
-
-#include <gridsite.h>
-
-#include "grst_admin.h"
-
-/*
-
-   GridSite human/interactive management interface. This should produce
-   a CGI executable, usually ./sbin/real-gridsite-admin.cgi, which is
-   called from HTML forms either by GET or POST methods or both (ie input 
-   present in both QUERY_STRING and the stdin of the CGI process.)
-
-   The CGI name/value pairs used are: 
-    
-    cmd  = edit, managedir, print, history
-    file = short name of file, without path
-
-   If real-gridsite-admin.cgi is run by an internal redirection inside 
-   mod_gridsite (as should ALWAYS be the case) then the environment 
-   variable  REDIRECT_GRST_DIR_PATH  will be set to the full path of
-   the directory holding the file in question. This respects any complex
-   URI -> file path mapping done by Apache.
-
-*/
-
-void GRSThttpError(char *status)
-{
-  printf("Status: %s\n", status);
-  printf("Server-CGI: GridSite Admin %s\n", VERSION);
-  printf("Content-Length: %d\n", 2 * strlen(status) + 58);
-  puts("Content-Type: text/html\n");
-   
-  printf("<head><title>%s</title></head>\n", status);
-  printf("<body><h1   >%s</h1   ></body>\n", status);
-   
-  exit(0);
-}
-
-void adminfooter(GRSThttpBody *bp, char *dn, char *help_uri, char *dir_uri,
-                 char *admin_file)
-{
-  GRSThttpPrintf(bp, "<p><small>\n");  
-
-  if (dn != NULL) GRSThttpPrintf(bp, "<hr>You are %s<br>\n", dn);
-  else            GRSThttpPrintf(bp, "<hr>\n");
-
-  if (admin_file != NULL)
-       GRSThttpPrintf(bp, "<a href=\"%s%s?cmd=managedir\">"
-                      "Manage&nbsp;directory</a> .\n", 
-                      dir_uri, admin_file);
-  else GRSThttpPrintf(bp, "<a href=\"%s\">"
-                      "Back&nbsp;to&nbsp;directory</a> .\n", dir_uri);
-  
-  if (help_uri != NULL) 
-    GRSThttpPrintf(bp, "<a href=\"%s\">Website&nbsp;Help</a> .\n", help_uri);
-
-  if ((getenv("GRST_NO_LINK") == NULL) &&
-      (getenv("REDIRECT_GRST_NO_LINK") == NULL))
-    GRSThttpPrintf(bp, "Built with "
-     "<a href=\"http://www.gridsite.org/\">GridSite</a> %s\n",
-     VERSION);
-   
-  GRSThttpPrintf(bp, "</small>\n");
-}
-
-int GRSTstrCmpShort(char *long_s, char *short_s)
-{
-  while (*short_s != '\0')
-       {
-         if (*long_s > *short_s) return +1;
-         if (*long_s < *short_s) return -1;
-         
-         ++long_s;
-         ++short_s;
-       }
-
-  return 0;
-}
-
-char *makevfilename(char *publicname, size_t size, char *dn)
-{
-  int             i;
-  char           *ext, *vfilename, *encpublicname, *encdn, *p;
-  struct timeval  tv_now;
-  
-  gettimeofday(&tv_now, NULL);
-
-  ext = rindex(publicname, '.');
-  if (ext == NULL) ext = "";
-  
-  encpublicname = GRSThttpUrlEncode(publicname);  
-  for (p=encpublicname; *p != '\0'; ++p) if (*p == '%') *p = '=';
-  
-  encdn = GRSThttpUrlEncode(dn);  
-  for (p=encdn; *p != '\0'; ++p) if (*p == '%') *p = '=';
-
-  /* we used zero-padding for times so 
-     alphanumeric sorting will sort chronologically too */
-
-  asprintf(&vfilename, "%s:%s:%08X:%05X:%X:%s:%s", GRST_HIST_PREFIX,
-           encpublicname, tv_now.tv_sec, tv_now.tv_usec, size, encdn, ext);
-   
-  return vfilename;
-}
-
-void justheader(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path,
-                char *dir_uri, char *admin_file)
-{
-  GRSThttpBody bp;
-  puts("Status: 200 OK\nContent-Type: text/html");
-   
-  GRSThttpBodyInit(&bp);
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_HEADFILE);
-
-  GRSThttpWriteOut(&bp);
-}
-
-void justfooter(char *dn, GRSTgaclPerm perm, char *help_uri, char *dir_path,
-                char *dir_uri, char *admin_file)
-{
-  GRSThttpBody bp;
-  puts("Status: 200 OK\nContent-Type: text/html");
-   
-  GRSThttpBodyInit(&bp);
-  if (GRSTgaclPermHasList(perm) || GRSTgaclPermHasWrite(perm) 
-                                || GRSTgaclPermHasAdmin(perm)) 
-               adminfooter(&bp, dn, help_uri, dir_uri, admin_file);
-
-  GRSThttpPrintHeaderFooter(&bp, dir_path, GRST_FOOTFILE);
-                                                                                
-  GRSThttpWriteOut(&bp);
-}
-
-int main()
-{
-  int           gsiproxylimit_i = 1;
-  char         *cmd, *dir_uri, *file, *dir_path, *admin_file, *dn = NULL,
-               *help_uri, *p, *content_type, *request_uri, *button, 
-               *grst_cred_0, *gsiproxylimit, *dn_lists;
-  GRSTgaclCred *cred;
-  GRSTgaclUser *user = NULL;
-  GRSTgaclAcl  *acl;
-  GRSTgaclPerm  perm = GRST_PERM_NONE;
-
-  help_uri      = getenv("REDIRECT_GRST_HELP_URI"); /* can be NULL */
-  admin_file    = getenv("REDIRECT_GRST_ADMIN_FILE");
-  dir_path      = getenv("REDIRECT_GRST_DIR_PATH");
-  request_uri   = getenv("REQUEST_URI");
-  
-  if ((dir_path == NULL) || (admin_file == NULL) || (request_uri == NULL))
-    {
-      puts("Status: 500 Internal Server Error\nContent-type: text/plain\n\n"
-           "REDIRECT_GRST_DIR_PATH or REDIRECT_GRST_ADMIN_FILE "
-           "or REQUEST_URI missing");
-      return;
-    }
-
-  GRSTgaclInit();
-
-  grst_cred_0 = getenv("GRST_CRED_0");
-  
-  if ((grst_cred_0 != NULL) && (cred = GRSTx509CompactToCred(grst_cred_0)))
-    {
-      gsiproxylimit = getenv("REDIRECT_GRST_GSIPROXY_LIMIT");
-      if (gsiproxylimit != NULL) sscanf(gsiproxylimit, "%d", &gsiproxylimit_i);
-
-      if (GRSTgaclCredGetDelegation(cred) <= gsiproxylimit_i)
-        {
-          user = GRSTgaclUserNew(cred);
-
-          if ((p = index(grst_cred_0, ' ')) &&
-              (p = index(++p, ' ')) &&
-              (p = index(++p, ' ')) &&
-              (p = index(++p, ' '))) dn = &p[1];          
-        }                                               
-    }
-  else if ((dn = getenv("SSL_CLIENT_S_DN")) != NULL)
-    {      
-      cred = GRSTgaclCredNew("person");
-      GRSTgaclCredAddValue(cred, "dn", dn);
-      user = GRSTgaclUserNew(cred);
-    }
-
-  dn_lists = getenv("REDIRECT_GRST_DN_LISTS");
-  if (dn_lists == NULL) dn_lists = getenv("GRST_DN_LISTS");
-  if (dn_lists != NULL) GRSTgaclUserSetDNlists(user, dn_lists);
-
-  if (GRSTgaclDNlistHasUser(getenv("REDIRECT_GRST_ADMIN_LIST"), 
-                            user)) perm = GRST_PERM_ALL;
-  else
-    {
-      p = getenv("REMOTE_HOST");
-      if (p != NULL)
-        {
-          cred = GRSTgaclCredNew("dns");
-          GRSTgaclCredAddValue(cred, "hostname", p);
-  
-          if (user == NULL) user = GRSTgaclUserNew(cred);
-          else              GRSTgaclUserAddCred(user, cred);
-        }
-
-      acl = GRSTgaclAclLoadforFile(dir_path);
-      if (acl != NULL) perm = GRSTgaclAclTestUser(acl, user);
-    }
-    
-  /* we're relying on being a CGI with all this un-free()ed strdup()ing */
-
-  dir_uri  = strdup(request_uri);
-  p = rindex(dir_uri, '?');
-  if (p != NULL) *p = '\0';
-  p = rindex(dir_uri, '/');
-  if (p != NULL) p[1] = '\0';
-
-  content_type = getenv("CONTENT_TYPE");
-
-  if ((content_type != NULL) &&
-      (GRSTstrCmpShort(content_type, "multipart/form-data; boundary=") == 0))
-    {    
-      uploadfile(dn, perm, help_uri, dir_path, dir_uri, admin_file);
-      return 0;
-    }
-  
-  cmd    = GRSThttpGetCGI("cmd");
-  file   = GRSThttpGetCGI("file");
-  button = GRSThttpGetCGI("button");
-
-  /* file and directory functions in grst_admin_file.c */
-
-  if (strcmp(cmd, "header") == 0) 
-      justheader(dn, perm, help_uri, dir_path, dir_uri, admin_file);
-  else if (strcmp(cmd, "footer") == 0) 
-      justfooter(dn, perm, help_uri, dir_path, dir_uri, admin_file);
-  else if (strcmp(cmd, "managedir") == 0) 
-      managedir(dn, perm, help_uri, dir_path, dir_uri, admin_file);
-  else if (strcmp(cmd, "print") == 0) 
-      printfile(dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd, "history") == 0) 
-      filehistory(dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd, "editdnlist") == 0) 
-      editdnlistform(dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd, "edit") == 0)
-    { 
-      if ((strcasecmp(button, "new directory") == 0) ||
-          (strcasecmp(button, "Create") == 0))
-       newdirectory(dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-      else
-       editfileform(dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-    }
-  else if (strcmp(cmd, "editaction") == 0) 
-      editfileaction(dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd, "editdnlistaction") == 0) 
-      editdnlistaction(dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd, "delete") == 0) 
-      deletefileform(dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd, "deleteaction") == 0) 
-     deletefileaction(dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd, "rename") == 0) 
-     renameform(dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd, "renameaction") == 0) 
-     renameaction(dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd, "ziplist") == 0) 
-     ziplist(dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd, "unzipfile") == 0) 
-     unzipfile(dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd, "create_acl") == 0) 
-     create_acl(dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-
-  /* GACL functions in grst_admin_gacl.c */
-
-  else if (strcmp(cmd, "show_acl") == 0)
-     show_acl(0, user, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd, "admin_acl") == 0)
-     show_acl(1, user, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd, "acl_history") == 0)
-     show_acl(2, user, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd, "revert_acl") == 0)
-    revert_acl(user, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-    //show_acl(2, user, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd,"new_entry_form")==0)
-     new_entry_form(user, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd,"new_entry")==0)
-     new_entry(user, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd,"del_entry_sure")==0)
-     del_entry_sure(user, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd,"del_entry")==0)
-     del_entry(user, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd,"edit_entry_form")==0)
-     edit_entry_form(user, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd,"edit_entry")==0)
-     edit_entry(user, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd,"add_cred_form")==0)
-     add_cred_form(user, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd,"add_cred")==0)
-     add_cred(user, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd,"del_cred_sure")==0)
-     del_cred_sure(user, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-  else if (strcmp(cmd,"del_cred")==0)
-     del_cred(user, dn, perm, help_uri, dir_path, file, dir_uri, admin_file);
-
-  /* you what? */
-
-  else GRSThttpError("500 Internal Server Error");
-}
diff --git a/org.gridsite.core/src/grst_gacl.c b/org.gridsite.core/src/grst_gacl.c
deleted file mode 100644 (file)
index 13b46c8..0000000
+++ /dev/null
@@ -1,1154 +0,0 @@
-/*
-   Copyright (c) 2002-3, Andrew McNab, University of Manchester
-   All rights reserved.
-
-   Redistribution and use in source and binary forms, with or
-   without modification, are permitted provided that the following
-   conditions are met:
-
-     o Redistributions of source code must retain the above
-       copyright notice, this list of conditions and the following
-       disclaimer. 
-     o 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. 
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-*/
-/*---------------------------------------------------------------*
- * For more information about GridSite: http://www.gridsite.org/ *
- *---------------------------------------------------------------*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>              
-#include <string.h>
-#include <dirent.h>
-#include <ctype.h>
-
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#include <fnmatch.h>
-
-#include <libxml/xmlmemory.h>
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-
-#include "gridsite.h"
-
-/*                                                                      *
- * Global variables, shared by all GACL functions by private to libgacl *
- *                                                                      */
-char     *grst_perm_syms[] =  { "none",
-                                "read",
-                                "exec",
-                                "list",
-                                "write",
-                                "admin",
-                                NULL              };
-
-GRSTgaclPerm grst_perm_vals[] =  {   GRST_PERM_NONE,
-                                     GRST_PERM_READ,
-                                     GRST_PERM_EXEC,
-                                     GRST_PERM_LIST,
-                                     GRST_PERM_WRITE,
-                                     GRST_PERM_ADMIN,
-                                     -1                };
-                                 
-int GRSTgaclInit(void)
-{
-  xmlInitParser();
-
-  LIBXML_TEST_VERSION
-
-  xmlKeepBlanksDefault(0);
-
-  return 1;
-}                             
-
-/*                                             *
- * Functions to manipulate GRSTgaclCred structures *
- *                                             */
-
-GRSTgaclCred *GRSTgaclCredNew(char *type)
-/*
-    GRSTgaclCredNew - allocate a new GRSTgaclCred structure, and return
-                      it's pointer or NULL on (malloc) error.
-*/
-{
-  GRSTgaclCred *newcred; 
-
-  if (type == NULL) return NULL;
-
-  newcred = malloc(sizeof(GRSTgaclCred));
-  if (newcred == NULL) return NULL;
-  
-  newcred->type       = strdup(type);
-  newcred->delegation = 0;
-  newcred->firstname  = NULL;
-  newcred->next       = NULL;
-
-  return newcred;
-}
-
-int GRSTgaclCredAddValue(GRSTgaclCred *cred, char *rawname, char *rawvalue)
-/*
-    GRSTgaclCredAddValue - add a name/value pair to a GRSTgaclCred
-*/
-{
-  int                i;
-  char              *name, *value;
-  GRSTgaclNamevalue *p;
-
-  name  = strdup(rawname);
-
-  /* no leading or trailing space in value */
-
-  value = rawvalue; 
-  while ((*value != '\0') && isspace(*value)) ++value;
-
-  value = strdup(value);
-
-  for (i=strlen(value) - 1; (i >= 0) && isspace(value[i]); --i) value[i]='\0';
-  
-  if (cred->firstname == NULL) 
-    {
-      cred->firstname = malloc(sizeof (GRSTgaclNamevalue));
-      (cred->firstname)->name  = name;
-      (cred->firstname)->value = value;
-      (cred->firstname)->next  = NULL;
-    }
-  else
-    {
-      p = cred->firstname; 
-  
-      while (p->next != NULL) p = (GRSTgaclNamevalue *) p->next;
-  
-      p->next = malloc(sizeof(GRSTgaclNamevalue));
-      ((GRSTgaclNamevalue *) p->next)->name  = name;
-      ((GRSTgaclNamevalue *) p->next)->value = value;
-      ((GRSTgaclNamevalue *) p->next)->next  = NULL;
-    } 
-  
-  return 1;
-}
-
-static int GRSTgaclNamevalueFree(GRSTgaclNamevalue *p)
-{
-  if (p == NULL) return 1;
-  
-  if (p->next  != NULL) 
-        GRSTgaclNamevalueFree((GRSTgaclNamevalue *) p->next);
-  if (p->name  != NULL) free(p->name);
-  if (p->value != NULL) free(p->value);
-  free(p);
-  
-  return 1;
-}
-
-int GRSTgaclCredFree(GRSTgaclCred *cred)
-/*
-    GRSTgaclCredFree - free memory structures of a GRSTgaclCred, 
-    returning 1 always!
-*/
-{
-  if (cred == NULL) return 1;
-
-  GRSTgaclNamevalueFree(cred->firstname);  
-  if (cred->type != NULL) free(cred->type);
-  free(cred);
-  
-  return 1;
-}
-
-static int GRSTgaclCredsFree(GRSTgaclCred *firstcred)
-/*
-    GRSTgaclCredsFree - free a cred and all the creds in its *next chain
-*/
-{
-  if (firstcred == NULL) return 0;
-  
-  if (firstcred->next != NULL) GRSTgaclCredsFree(firstcred->next);
-  
-  return GRSTgaclCredFree(firstcred);
-}
-
-static int GRSTgaclCredInsert(GRSTgaclCred *firstcred, GRSTgaclCred *newcred)
-/* 
-    GRSTgaclCredInsert - insert a cred in the *next chain of firstcred
-
-    FOR THE MOMENT THIS JUST APPENDS!
-*/
-{
-  if (firstcred == NULL) return 0;
-  
-  if (firstcred->next == NULL)
-    {
-      firstcred->next = newcred;
-      return 1;
-    }
-
-  return GRSTgaclCredInsert(firstcred->next, newcred);     
-}
-
-int GRSTgaclEntryAddCred(GRSTgaclEntry *entry, GRSTgaclCred *cred)
-/*  
-    GRSTaddCred - add a new credential to an existing entry, returning 1
-    on success or 0 on error 
-*/ 
-{
-  if (entry == NULL) return 0;
-  if (entry->firstcred == NULL) 
-    {
-      entry->firstcred = cred;
-      return 1;
-    }
-  else return GRSTgaclCredInsert(entry->firstcred, cred);
-}
-
-static int GRSTgaclCredRemoveCred(GRSTgaclCred *firstcred, GRSTgaclCred *oldcred)
-/* 
-    (Private)
-
-    GRSTgaclCredRemoveCred - remove a cred in the *next chain of firstcred
-                     and relink the chain
-*/
-{
-  if (firstcred == NULL) return 0;
-
-// yeah, I know
-}
-
-int GRSTgaclEntryDelCred(GRSTgaclEntry *entry, GRSTgaclCred *cred)
-/*  
-    GRSTgaclEntryDelCred - remove a new cred from an entry, returning 1
-    on success (or absense) or 0 on error.
-*/ 
-{
-  if (entry == NULL) return 0;
-
-  return GRSTgaclCredRemoveCred(entry->firstcred, cred);
-}
-
-int GRSTgaclCredPrint(GRSTgaclCred *cred, FILE *fp)
-/* 
-   GRSTgaclCredPrint - print a credential and any name-value pairs is contains
-*/
-{
-  char              *q;
-  GRSTgaclNamevalue *p;
-
-  if (cred->firstname != NULL)
-    {
-      fprintf(fp, "<%s>\n", cred->type);
-    
-      p = cred->firstname;
-      
-      do { 
-           fprintf(fp, "<%s>", p->name);
-
-            for (q=p->value; *q != '\0'; ++q)
-              if      (*q == '<')  fputs("&lt;",   fp);
-              else if (*q == '>')  fputs("&gt;",   fp);
-              else if (*q == '&')  fputs("&amp;" , fp);
-              else if (*q == '\'') fputs("&apos;", fp);
-              else if (*q == '"')  fputs("&quot;", fp);
-              else                 fputc(*q, fp);
-
-           fprintf(fp, "</%s>\n", p->name);
-
-           p = (GRSTgaclNamevalue *) p->next;
-         
-         } while (p != NULL);
-
-      fprintf(fp, "</%s>\n", cred->type);
-    }
-  else fprintf(fp, "<%s/>\n", cred->type);
-  
-  return 1;  
-}
-
-/*                                              *
- * Functions to manipulate GRSTgaclEntry structures *
- *                                              */
-
-GRSTgaclEntry *GRSTgaclEntryNew(void)
-/*
-    GRSTgaclEntryNew - allocate space for a new entry, returning its pointer
-                   or NULL on failure.
-*/
-{
-  GRSTgaclEntry *newentry;
-  
-  newentry = (GRSTgaclEntry *) malloc(sizeof(GRSTgaclEntry));
-  if (newentry == NULL) return NULL;
-
-  newentry->firstcred    = NULL;
-  newentry->allowed      = 0;
-  newentry->denied       = 0;
-  newentry->next         = NULL;
-      
-  return newentry;
-}
-
-int GRSTgaclEntryFree(GRSTgaclEntry *entry)
-/* 
-    GRSTgaclEntryFree - free up space used by an entry (always returns 1)
-*/
-{
-  int i;
-  
-  if (entry == NULL) return 1;
-
-  GRSTgaclCredsFree(entry->firstcred);  
-
-  free(entry);
-  
-  return 1;
-}
-
-static int GRSTgaclEntriesFree(GRSTgaclEntry *entry)
-/*
-    GRSTgaclEntriesFree - free up entry and all entries linked to in its *next 
-                      chain
-*/
-{
-  if (entry == NULL) return 0;
-  
-  if (entry->next != NULL) GRSTgaclEntriesFree(entry->next);
-  
-  return GRSTgaclEntryFree(entry);  
-}
-
-static int GRSTgaclEntryInsert(GRSTgaclEntry *firstentry, GRSTgaclEntry *newentry)
-/* 
-    GRSTgaclEntryInsert - insert an entry in the *next chain of firstentry
-
-    FOR THE MOMENT THIS JUST APPENDS
-*/
-{
-  if (firstentry == NULL) return 0;
-  
-  if (firstentry->next == NULL)
-    {
-      firstentry->next = newentry;
-      return 1;
-    }
-
-  return GRSTgaclEntryInsert(firstentry->next, newentry);     
-}
-
-int GRSTgaclAclAddEntry(GRSTgaclAcl *acl, GRSTgaclEntry *entry)
-/*  
-    GRSTgaclAclAddEntry - add a new entry to an existing acl, returning 1
-    on success or 0 on error 
-*/ 
-{
-  if (acl == NULL) return 0;
-
-  if (acl->firstentry == NULL) 
-    { 
-      acl->firstentry = entry;
-      return 1;
-    }
-  else return GRSTgaclEntryInsert(acl->firstentry, entry);
-}
-
-int GRSTgaclEntryPrint(GRSTgaclEntry *entry, FILE *fp)
-{
-  GRSTgaclCred  *cred;
-  GRSTgaclPerm  i;
-  
-  fputs("<entry>\n", fp);
-  
-  for (cred = entry->firstcred; cred != NULL; cred = cred->next)
-                                            GRSTgaclCredPrint(cred, fp);
-
-  if (entry->allowed)
-    {
-      fputs("<allow>", fp);
-
-      for (i=GRST_PERM_READ; i <= GRST_PERM_ADMIN; ++i)
-       if ((entry->allowed) & i) GRSTgaclPermPrint(i, fp);
-
-      fputs("</allow>\n", fp);
-    }
-    
-
-  if (entry->denied)
-    {
-      fputs("<deny>", fp);
-
-      for (i=GRST_PERM_READ; i <= GRST_PERM_ADMIN; ++i)
-       if (entry->denied & i) GRSTgaclPermPrint(i, fp);
-
-      fputs("</deny>\n", fp);
-    }
-    
-  fputs("</entry>\n", fp);
-
-  return 1;
-}
-
-/*                                         *
- * Functions to manipulate GRSTgaclPerm items *
- *                                         */
-
-int GRSTgaclPermPrint(GRSTgaclPerm perm, FILE *fp)
-{
-  GRSTgaclPerm i;
-  
-  for (i=GRST_PERM_READ; grst_perm_syms[i] != NULL; ++i)
-       if (perm == grst_perm_vals[i]) 
-         {
-           fprintf(fp, "<%s/>", grst_perm_syms[i]);
-           return 1;
-         }
-         
-  return 0;
-}
-
-int GRSTgaclEntryAllowPerm(GRSTgaclEntry *entry, GRSTgaclPerm perm)
-{
-  entry->allowed = entry->allowed | perm;
-
-  return 1;
-}
-
-int GRSTgaclEntryUnallowPerm(GRSTgaclEntry *entry, GRSTgaclPerm perm)
-{
-  entry->allowed = entry->allowed & ~perm;
-
-  return 1;
-}
-
-int GRSTgaclEntryDenyPerm(GRSTgaclEntry *entry, GRSTgaclPerm perm)
-{
-  entry->denied = entry->denied | perm;
-
-  return 1;
-}
-
-int GRSTgaclEntryUndenyPerm(GRSTgaclEntry *entry, GRSTgaclPerm perm)
-{
-  entry->denied = entry->denied & ~perm;
-
-  return 1;
-}
-
-char *GRSTgaclPermToChar(GRSTgaclPerm perm)
-/*
-   GRSTgaclPermToChar - return char * or NULL corresponding to most significant
-                     set bit of perm.
-*/
-{
-  char      *p = NULL;
-  GRSTgaclPerm  i;
-  
-  for (i=0; grst_perm_syms[i] != NULL; ++i)
-       if (perm & grst_perm_vals[i]) p = grst_perm_syms[i];
-
-  return p;
-}
-
-GRSTgaclPerm GRSTgaclPermFromChar(char *s)
-/*
-   GRSTgaclPermToChar - return access perm corresponding to symbol s[]
-*/
-{
-  GRSTgaclPerm i;
-
-  for (i=0; grst_perm_syms[i] != NULL; ++i)
-       if (strcasecmp(grst_perm_syms[i], s) == 0) return grst_perm_vals[i];
-
-  return -1; 
-}
-
-/*                                            *
- * Functions to manipulate GRSTgaclAcl structures *
- *                                            */
-
-GRSTgaclAcl *GRSTgaclAclNew(void)
-/*  
-    GRSTgaclAclNew - allocate a new acl and return its pointer (or NULL 
-                 on failure.)
-*/
-{
-  GRSTgaclAcl *newacl;
-  
-  newacl = (GRSTgaclAcl *) malloc(sizeof(GRSTgaclAcl));
-  if (newacl == NULL) return NULL;
-  
-  newacl->firstentry = NULL;
-
-  return newacl;
-}
-
-int GRSTgaclAclFree(GRSTgaclAcl *acl)
-/*
-    GRSTgaclAclFree - free up space used by *acl. Always returns 1.
-*/
-{
-  if (acl == NULL) return 1;
-
-  GRSTgaclEntriesFree(acl->firstentry);  
-
-  return 1;
-}
-
-int GRSTgaclAclPrint(GRSTgaclAcl *acl, FILE *fp)
-{
-  GRSTgaclEntry *entry;
-  
-  fputs("<gacl version=\"0.0.1\">\n", fp);
-  
-  for (entry = acl->firstentry; entry != NULL; entry = entry->next)
-                                            GRSTgaclEntryPrint(entry, fp);
-
-  fputs("</gacl>\n", fp);
-
-  return 1;
-}
-
-int GRSTgaclAclSave(GRSTgaclAcl *acl, char *filename)
-{
-  int   ret;
-  FILE *fp;
-  
-  fp = fopen(filename, "w");
-  if (fp == NULL) return 0;
-  
-  fputs("<?xml version=\"1.0\"?>\n", fp);
-  
-  ret = GRSTgaclAclPrint(acl, fp);
-  
-  fclose(fp);
-  
-  return ret;
-}
-
-/*                                                    *
- * Functions for loading and parsing XML using libxml *
- *                                                    */
-// need to check these for libxml memory leaks? - what needs to be freed?
-
-static GRSTgaclCred *GRSTgaclCredParse(xmlNodePtr cur)
-/*
-    GRSTgaclCredParse - parse a credential stored in the libxml structure cur, 
-                    returning it as a pointer or NULL on error.
-*/
-{
-  xmlNodePtr  cur2;
-  GRSTgaclCred   *cred;
-  
-  cred = GRSTgaclCredNew((char *) cur->name);
-  
-  cred->firstname = NULL;
-  cred->next      = NULL;
-  
-  for (cur2 = cur->xmlChildrenNode; cur2 != NULL; cur2=cur2->next)
-     {
-       GRSTgaclCredAddValue(cred, (char *) cur2->name, 
-                           (char *) xmlNodeGetContent(cur2));     
-     }
-
-  return cred;
-}
-
-static GRSTgaclEntry *GRSTgaclEntryParse(xmlNodePtr cur)
-/*
-    GRSTgaclEntryParse - parse an entry stored in the libxml structure cur,
-                     returning it as a pointer or NULL on error.
-*/
-{
-  int        i;
-  xmlNodePtr cur2;
-  GRSTgaclEntry *entry;
-  GRSTgaclCred  *cred;
-  GRSTgaclPerm  perm;
-
-  if (xmlStrcmp(cur->name, (const xmlChar *) "entry") != 0) return NULL;
-  
-  cur = cur->xmlChildrenNode;
-  
-  entry = GRSTgaclEntryNew();
-  
-  while (cur != NULL)
-       {
-         if (xmlStrcmp(cur->name, (const xmlChar *) "allow") == 0)
-           {
-             for (cur2 = cur->xmlChildrenNode; cur2 != NULL; cur2=cur2->next)
-              for (i=0; grst_perm_syms[i] != NULL; ++i)
-               if (xmlStrcmp(cur2->name, 
-                             (const xmlChar *) grst_perm_syms[i]) == 0)
-                     GRSTgaclEntryAllowPerm(entry, grst_perm_vals[i]);
-           }
-         else if (xmlStrcmp(cur->name, (const xmlChar *) "deny") == 0)
-           {
-             for (cur2 = cur->xmlChildrenNode; cur2 != NULL; cur2=cur2->next)
-              for (i=0; grst_perm_syms[i] != NULL; ++i)
-               if (xmlStrcmp(cur2->name, 
-                             (const xmlChar *) grst_perm_syms[i]) == 0)
-                     GRSTgaclEntryDenyPerm(entry, grst_perm_vals[i]);
-           }
-         else if ((cred = GRSTgaclCredParse(cur)) != NULL) 
-           {
-             if (!GRSTgaclEntryAddCred(entry, cred))
-               { 
-                 GRSTgaclCredFree(cred);                
-                 GRSTgaclEntryFree(entry);
-                 return NULL;
-               }
-           }
-         else /* I cannot parse this - give up rather than get it wrong */
-           {
-             GRSTgaclEntryFree(entry);
-             return NULL;
-           }
-           
-         cur=cur->next;
-       } 
-       
-  return entry;
-}
-
-GRSTgaclAcl *GRSTgaclAclLoadFile(char *filename)
-{
-  xmlDocPtr   doc;
-  xmlNodePtr  cur;
-  GRSTgaclAcl    *acl;
-  GRSTgaclEntry  *entry;
-        
-  doc = xmlParseFile(filename);
-  if (doc == NULL) return NULL;
-    
-  cur = xmlDocGetRootElement(doc);
-  
-  if (xmlStrcmp(cur->name, (const xmlChar *) "gacl"))
-    {
-      free(doc);
-      free(cur);
-      return NULL;
-    }
-
-  cur = cur->xmlChildrenNode;
-
-  acl = GRSTgaclAclNew();
-  
-  while (cur != NULL)
-       {
-         entry = GRSTgaclEntryParse(cur);
-         if (entry == NULL)
-           {
-             GRSTgaclAclFree(acl);
-             xmlFreeDoc(doc);
-             return NULL;
-           }
-
-         GRSTgaclAclAddEntry(acl, entry);
-         
-         cur=cur->next;
-       }
-
-  xmlFreeDoc(doc);
-  return acl;
-}
-
-int GRSTgaclFileIsAcl(char *pathandfile)
-/* Return 1 if filename in *pathandfile starts GRST_ACL_FILE 
-   Return 0 otherwise. */
-{ 
-  char *filename;
-      
-  filename = rindex(pathandfile, '/');
-  if (filename == NULL) filename = pathandfile;
-  else                  filename++;
-            
-  return (strncmp(filename, GRST_ACL_FILE, sizeof(GRST_ACL_FILE) - 1) == 0);
-}
-
-char *GRSTgaclFileFindAclname(char *pathandfile)
-/* Return malloc()ed ACL filename that governs the given file or directory 
-   (for directories, the ACL file is in the directory itself), or NULL if none
-   can be found. */
-{
-  int          len;
-  char        *path, *file, *p;
-  struct stat  statbuf;
-   
-  len = strlen(pathandfile);
-  if (len == 0) return NULL;
-  
-  path = malloc(len + sizeof(GRST_ACL_FILE) + 2);
-  strcpy(path, pathandfile);
-
-  if ((stat(path, &statbuf) == 0)      && 
-       S_ISDIR(statbuf.st_mode)                &&
-      (path[len-1] != '/'))
-    {
-      strcat(path, "/");
-      ++len;
-    }
-    
-  if (path[len-1] != '/')
-    {
-      p = rindex(pathandfile, '/');
-      if (p != NULL)
-        {
-          file = &p[1];          
-          p = rindex(path, '/');          
-          sprintf(p, "/%s:%s", GRST_ACL_FILE, file);
-
-          if (stat(path, &statbuf) == 0) return path;
-
-          *p = '\0'; /* otherwise strip off any filename */
-        }
-    }
-
-  while (path[0] != '\0')
-       {
-         strcat(path, "/");
-         strcat(path, GRST_ACL_FILE);
-         
-         if (stat(path, &statbuf) == 0) return path;
-           
-         p = rindex(path, '/');
-         *p = '\0';     /* strip off the / we added for ACL */
-
-         p = rindex(path, '/');
-         if (p == NULL) break; /* must start without / and we there now ??? */
-
-         *p = '\0';     /* strip off another layer of / */                 
-       }
-       
-  free(path);
-  return NULL;
-}
-
-GRSTgaclAcl *GRSTgaclAclLoadforFile(char *pathandfile)
-/* Return ACL that governs the given file or directory (for directories,
-   the ACL file is in the directory itself.) */
-{
-  char        *path;
-  GRSTgaclAcl     *acl;
-
-  path = GRSTgaclFileFindAclname(pathandfile);
-  
-  if (path != NULL)
-    {
-      acl = GRSTgaclAclLoadFile(path);
-      free(path);
-      return acl;
-    }
-    
-  return NULL;
-}
-
-/*                                        *
- * Functions to create and query GACLuser *
- *                                        */
-
-GRSTgaclUser *GRSTgaclUserNew(GRSTgaclCred *cred)
-{
-  GRSTgaclUser *user;
-  
-  if (cred == NULL) return NULL;
-  
-  user = malloc(sizeof(GRSTgaclUser));
-  
-  if (user != NULL) user->firstcred = cred;
-  
-  user->dnlists = NULL;
-  
-  return user;
-}
-
-int GRSTgaclUserFree(GRSTgaclUser *user)
-{
-  if (user == NULL) return 1;
-  
-  if (user->firstcred != NULL) GRSTgaclCredsFree(user->firstcred);
-
-  if (user->dnlists != NULL) free(user->dnlists);
-  
-  free(user);
-  
-  return 1;
-}
-
-int GRSTgaclUserAddCred(GRSTgaclUser *user, GRSTgaclCred *cred)
-{
-  GRSTgaclCred *crediter;
-
-  if ((user == NULL) || (cred == NULL)) return 0;
-
-  if (user->firstcred == NULL) 
-    {
-      user->firstcred = cred;
-      cred->next = NULL; /* so cannot be used to add whole lists */
-      return 1;
-    }
-  
-  crediter = user->firstcred;  
-
-  while (crediter->next != NULL) crediter = crediter->next;
-
-  crediter->next = cred;
-  cred->next = NULL; /* so cannot be used to add whole lists */
-       
-  return 1;
-}
-
-int GRSTgaclUserHasCred(GRSTgaclUser *user, GRSTgaclCred *cred)
-/* test if the user has the given credential */
-{
-  GRSTgaclCred      *crediter;
-  GRSTgaclNamevalue *usernamevalue, *crednamevalue;
-
-  if (cred == NULL) return 0;
-
-  if (strcmp(cred->type, "any-user") == 0) return 1;
-  
-  if (user == NULL) return 0;
-  
-  if (strcmp(cred->type, "dn-list") == 0) 
-    {
-      if ((cred->firstname == NULL) ||
-          (strcmp((cred->firstname)->name, "url") != 0) ||
-          ((cred->firstname)->next != NULL))                 return 0;
-      
-      return GRSTgaclDNlistHasUser((cred->firstname)->value, user);
-    }
-    
-  if (strcmp(cred->type, "dns") == 0) 
-    {
-      if ((user->firstcred == NULL) ||
-          ((user->firstcred)->firstname == NULL) ||
-          (cred->firstname == NULL) ||
-          (strcmp((cred->firstname)->name, "hostname") != 0) ||
-          ((cred->firstname)->next != NULL)) return 0;
-      
-      for (crediter=user->firstcred; 
-           crediter != NULL; 
-           crediter = crediter->next)
-        if (strcmp(crediter->type, "dns") == 0) 
-          {            
-            if ((crediter->firstname == NULL) ||
-              (strcmp((crediter->firstname)->name, "hostname") != 0)) return 0;
-               
-            return (fnmatch((cred->firstname)->value, 
-                            (crediter->firstname)->value, FNM_CASEFOLD) == 0);
-          }
-                
-      return 0;    
-    }
-    
-  if (strcmp(cred->type, "auth-user") == 0)
-    {
-      if ((user->firstcred == NULL) ||
-          ((user->firstcred)->firstname == NULL)) return 0;
-      
-      for (crediter=user->firstcred; 
-           crediter != NULL; 
-           crediter = crediter->next)
-        if (strcmp(crediter->type, "person") == 0) return 1;
-                
-      return 0;    
-    }
-  
-  for (crediter=user->firstcred; crediter != NULL; crediter = crediter->next)
-       {
-         if (strcmp(crediter->type, cred->type) != 0) continue;
-         
-         if ((crediter->firstname == NULL) && 
-             (cred->firstname     == NULL)) return 1;
-         
-         if ((crediter->firstname == NULL) || 
-             (cred->firstname     == NULL)) continue;
-             
-         usernamevalue = crediter->firstname;
-         crednamevalue = cred->firstname;
-         
-         for (;;)
-            {
-              if (strcmp(usernamevalue->name,crednamevalue->name) != 0) break;
-
-              if (strcmp(cred->type, "person") == 0)
-                {
-                  if (GRSTx509NameCmp(usernamevalue->value, 
-                                      crednamevalue->value) != 0) break;
-                }
-              else if (strcmp(usernamevalue->value,
-                              crednamevalue->value) != 0) break;
-              
-              /* ok if cred list runs out before user's cred list */
-              if (crednamevalue->next == NULL) return 1;
-
-              /* but not ok if more names to match which user doesn't have */
-              if (usernamevalue->next == NULL) break;
-             
-              crednamevalue = (GRSTgaclNamevalue *) crednamevalue->next;
-              usernamevalue = (GRSTgaclNamevalue *) usernamevalue->next;
-            }
-       }
-       
-  return 0;
-}
-
-GRSTgaclCred *GRSTgaclUserFindCredtype(GRSTgaclUser *user, char *type)
-/* find the first credential of a given type for this user */
-{
-  GRSTgaclCred *cred;
-
-  if (user == NULL) return NULL;
-  
-  cred = user->firstcred;  
-
-  while (cred != NULL)
-       {
-         if (strcmp(cred->type, type) == 0) return cred;
-         
-         cred = cred->next;       
-       }
-       
-  return NULL;
-}
-
-int GRSTgaclUserSetDNlists(GRSTgaclUser *user, char *dnlists)
-{
-  if ((user == NULL) || (dnlists == NULL)) return 0;
-
-  if (user->dnlists != NULL) free(user->dnlists);
-
-  user->dnlists = strdup(dnlists);
-
-  return 1;
-}
-
-/*                                                     *
- * Functions to test for access perm of an individual  *
- *                                                     */
-
-static char *recurse4file(char *dir, char *file, int recurse_level)
-/* try to find file[] in dir[]. try subdirs if not found. 
-   return full path to first found version or NULL on failure */
-{
-  char          *fullfilename, *fulldirname;
-  struct stat    statbuf;
-  DIR           *dirDIR;
-  struct dirent *file_ent;
-
-  /* try to find in current directory */
-
-  asprintf(&fullfilename, "%s/%s", dir, file);  
-  if (stat(fullfilename, &statbuf) == 0) return fullfilename;
-  free(fullfilename);
-
-  /* maybe search in subdirectories */
-  
-  if (recurse_level >= GRST_RECURS_LIMIT) return NULL;
-
-  dirDIR = opendir(dir);
-  
-  if (dirDIR == NULL) return NULL;
-  
-  while ((file_ent = readdir(dirDIR)) != NULL)
-       {
-         if (file_ent->d_name[0] == '.') continue;
-       
-         asprintf(&fulldirname, "%s/%s", dir, file_ent->d_name);
-
-         if ((stat(fulldirname, &statbuf) == 0) &&
-             S_ISDIR(statbuf.st_mode) &&
-             ((fullfilename = recurse4file(fulldirname, file, 
-                                             recurse_level + 1)) != NULL))
-           {
-             closedir(dirDIR);             
-             return fullfilename;
-           }
-           
-         free(fulldirname);
-       }
-  
-  closedir(dirDIR);  
-
-  return NULL;
-}
-
-int GRSTgaclDNlistHasUser(char *listurl, GRSTgaclUser *user)
-{
-  char *dn_lists_dirs, *dn_list_ptr, *enclisturl, *filename, *dirname,
-        line[512], *p;
-  FILE *fp;
-  GRSTgaclCred  *cred;
-    
-  if ((listurl == NULL) || (user == NULL)) return 0;
-
-  enclisturl = GRSThttpUrlEncode(listurl);
-
-  if (user->dnlists != NULL) p = user->dnlists;
-  else p = getenv("GRST_DN_LISTS");
-
-  if (p == NULL) p = GRST_DN_LISTS;
-  dn_lists_dirs = strdup(p);     /* we need to keep this for free() later! */
-  dn_list_ptr   = dn_lists_dirs; /* copy, for naughty function strsep()    */
-
-  while ((dirname = strsep(&dn_list_ptr, ":")) != NULL)
-       {    
-         filename = recurse4file(dirname, enclisturl, 0);
-         if (filename == NULL) continue;
-  
-         fp = fopen(filename, "r");
-         free(filename);
-  
-         if (fp == NULL) continue;
-
-         while (fgets(line, sizeof(line), fp) != NULL)
-              {
-                p = index(line, '\n');
-                if (p != NULL) *p = '\0';
-
-                cred = user->firstcred;
-         
-                while (cred != NULL)                  
-                     {
-                       if ((strcmp(cred->type, "person") == 0)          && 
-                           (cred->firstname != NULL)                    &&
-                           (strcmp("dn", (cred->firstname)->name) == 0) &&
-                 (GRSTx509NameCmp(line, (cred->firstname)->value) == 0))
-                         {
-                           fclose(fp);
-                           free(dn_lists_dirs);
-                           free(enclisturl);
-                           return 1;
-                         }
-                  
-                       cred = cred->next;
-                     }
-              }
-       
-         fclose(fp);
-       }
-
-  free(dn_lists_dirs);
-  free(enclisturl);
-
-  return 0;
-}
-
-GRSTgaclPerm GRSTgaclAclTestUser(GRSTgaclAcl *acl, GRSTgaclUser *user)
-/*
-    GACLgaclAclTestUser - return bit fields depending on access perms user has
-                      for given acl. All zero for no access. If *user is
-                      NULL, matching to "any-user" will still work.
-*/
-{
-  int        flag, onlyanyuser;
-  GRSTgaclPerm   allowperms = 0, denyperms = 0, allowed;
-  GRSTgaclEntry *entry;
-  GRSTgaclCred  *cred, *usercred;
-  
-  if (acl == NULL) return 0;
-  
-  for (entry = acl->firstentry; entry != NULL; entry = entry->next)
-     {
-       flag = 1;        /* begin by assuming this entry applies to us */
-       onlyanyuser = 1; /* begin by assuming just <any-user/> */
-       
-       /* now go through creds, checking they all do apply to us */
-     
-       for (cred = entry->firstcred; cred != NULL; cred = cred->next)
-             if (!GRSTgaclUserHasCred(user, cred)) flag = 0;
-             else if (strcmp(cred->type, "any-user") != 0) onlyanyuser = 0;
-
-       if (!flag) continue; /* flag false if a subtest failed */
-
-       /* does apply to us, so we remember this entry's perms */
-       
-       /* we dont allow Write or Admin on the basis of any-user alone */
-
-       allowed = entry->allowed;
-
-       if (onlyanyuser)
-            allowed = entry->allowed & ~GRST_PERM_WRITE & ~GRST_PERM_ADMIN;
-       else allowed = entry->allowed;
-
-       allowperms = allowperms | allowed;
-       denyperms  = denyperms  | entry->denied;
-     }
-
-  return (allowperms & (~ denyperms)); 
-  /* for each perm type, any deny we saw kills any allow */
-}
-
-GRSTgaclPerm GRSTgaclAclTestexclUser(GRSTgaclAcl *acl, GRSTgaclUser *user)
-/*
-    GRSTgaclAclTestexclUser - 
-                      return bit fields depending on ALLOW perms OTHER users 
-                      have for given acl. All zero if they have no access.
-                      (used for testing if a user has exclusive access)
-*/
-{
-  int        flag;
-  GRSTgaclPerm  perm = 0;
-  GRSTgaclEntry *entry;
-  GRSTgaclCred  *cred;
-  
-  if (acl == NULL) return 0;
-  
-  for (entry = acl->firstentry; entry != NULL; entry = entry->next)
-     {
-       flag = 0; /* flag will be set if cred implies other users */
-     
-       for (cred = entry->firstcred; cred != NULL; cred = cred->next)
-          {
-            if (strcmp(cred->type, "person") != 0)
-             /* if we ever add support for other person-specific credentials,
-                they must also be recognised here */
-              {
-                flag = 1;
-                break; 
-              }
-
-            if (!GRSTgaclUserHasCred(user, cred))
-                 /* if user doesnt have this person credential, assume
-                    it refers to a different individual */
-              {
-                flag = 1;
-                break;
-              }
-          }
-
-       if (flag) perm = perm | entry->allowed;
-     }
-
-  return perm;     
-}
-
-/* 
-    Wrapper functions for gridsite-gacl.h support of legacy API
-*/
-
-GRSTgaclEntry *GACLparseEntry(xmlNodePtr cur)
-{
-  return GRSTgaclEntryParse(cur);
-}
diff --git a/org.gridsite.core/src/grst_http.c b/org.gridsite.core/src/grst_http.c
deleted file mode 100644 (file)
index c7b375e..0000000
+++ /dev/null
@@ -1,407 +0,0 @@
-/*
-   Copyright (c) 2002-3, Andrew McNab, University of Manchester
-   All rights reserved.
-
-   Redistribution and use in source and binary forms, with or
-   without modification, are permitted provided that the following
-   conditions are met:
-
-     o Redistributions of source code must retain the above
-       copyright notice, this list of conditions and the following
-       disclaimer. 
-     o 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. 
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-*/
-
-#ifndef VERSION
-#define VERSION "x.x.x"
-#endif
-
-#define _GNU_SOURCE
-#include <stdio.h>
-
-#include <time.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <unistd.h>
-#include <dirent.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include "gridsite.h"
-
-void GRSThttpBodyInit(GRSThttpBody *thisbody)
-{
-  thisbody->size = 0; /* simple, but we don't expose internals to callers */
-}
-
-void GRSThttpPrintf(GRSThttpBody *thisbody, char *fmt, ...)
-/* append printf() style format and arguments to *thisbody.
-   This requires vasprintf from glibc!! */
-{
-  char    *p;
-  size_t   size;
-  va_list  args;
-
-  va_start(args, fmt);
-  size = vasprintf(&p, fmt, args);  
-  va_end(args);
-
-  if      (size == 0) free(p); /* don't need to bother in this case */
-  else if (size >  0)
-    {
-      if (thisbody->size == 0) /* need to initialise */
-        {
-          thisbody->first = (GRSThttpCharsList *)malloc(sizeof(GRSThttpCharsList));
-          thisbody->first->text = p;
-          thisbody->first->next = NULL;
-      
-          thisbody->last = thisbody->first;          
-          thisbody->size = size;
-        }
-      else
-        {
-          thisbody->last->next = (GRSThttpCharsList *)
-                                               malloc(sizeof(GRSThttpCharsList));
-          ((GRSThttpCharsList *) thisbody->last->next)->text = p;
-          ((GRSThttpCharsList *) thisbody->last->next)->next = NULL;
-      
-          thisbody->last = thisbody->last->next;          
-          thisbody->size = thisbody->size + size;
-        }
-    }
-}
-
-int GRSThttpCopy(GRSThttpBody *thisbody, char *file)
-/* 
-   copy a whole file, named file[], into the body output buffer, returning
-   1 if file was found and copied ok, or 0 otherwise.
-*/
-{
-  int         fd, len;
-  char        c, *p;
-  struct stat statbuf;
-
-  fd = open(file, O_RDONLY);
-
-  if (fd == -1) return 0;
-
-  if (fstat(fd, &statbuf) != 0)
-    {
-      close(fd);
-      return 0;
-    }
-
-  p = malloc(statbuf.st_size + 1);
-
-  if (p == NULL)
-    {
-      close(fd);
-      return 0;
-    }
-
-  len = read(fd, p, statbuf.st_size);
-  p[len] = '\0';
-
-  close(fd);
-   
-  if (thisbody->size == 0) /* need to initialise */
-    {
-      thisbody->first = (GRSThttpCharsList *) malloc(sizeof(GRSThttpCharsList));
-      thisbody->first->text = p;
-      thisbody->first->next = NULL;
-      
-      thisbody->last = thisbody->first;
-      thisbody->size = len;
-    }
-  else
-    { 
-      thisbody->last->next=(GRSThttpCharsList *)malloc(sizeof(GRSThttpCharsList));
-      ((GRSThttpCharsList *) thisbody->last->next)->text = p;
-      ((GRSThttpCharsList *) thisbody->last->next)->next = NULL;
-      
-      thisbody->last = thisbody->last->next;
-      thisbody->size = thisbody->size + len;
-    }
-
-  return 1;      
-}
-
-void GRSThttpWriteOut(GRSThttpBody *thisbody)
-/* output Content-Length header, blank line then whole of the body to
-   standard output */
-{
-  GRSThttpCharsList *p;
-  
-  printf("Content-Length: %d\n\n", thisbody->size);
-
-  p = thisbody->first;
-  
-  while (p != NULL)
-    {
-      fputs(p->text, stdout);
-    
-      p = p->next;      
-    }
-}
-
-int GRSThttpPrintHeaderFooter(GRSThttpBody *bp, char *file, char *headfootname)
-/* 
-    try to print Header or Footer appropriate for absolute path file[],
-    returning 1 rather than 0 if found.
-*/
-{
-  int          found = 0;
-  char        *pathfile, *p;
-  struct stat  statbuf;
-
-  pathfile = malloc(strlen(file) + strlen(headfootname) + 2);
-  strcpy(pathfile, file);
-
-  if ((pathfile[strlen(pathfile) - 1] != '/') &&
-      (stat(pathfile, &statbuf) == 0) && 
-       S_ISDIR(statbuf.st_mode)) strcat(pathfile, "/");
-  
-  for (;;)
-     {
-       p = rindex(pathfile, '/');
-       if (p == NULL) break;
-       p[1] = '\0';
-       strcat(p, headfootname);
-
-       if (stat(pathfile, &statbuf) == 0)
-         {
-           found = GRSThttpCopy(bp, pathfile);
-           break;
-         }
-
-       p[0] = '\0';
-     }
-
-  free(pathfile);
-  return found;
-}
-
-char *GRSThttpGetCGI(char *name)
-/* 
-   Return a malloc()ed copy of CGI form parameter identified by name[],
-   either received by QUERY_STRING (via GET) or on stdin (via POST).
-   Caller must free() the returned string itself. If name[] is not found,
-   an empty NUL-terminated malloc()ed string is returned. name[] has any
-   URL-encoding reversed.
-*/
-{
-  char   *p, *namepattern, *valuestart, *returnvalue, *querystring;
-  int     c, i, j, n, contentlength = 0;
-  static char *cgiposted = NULL;
-  size_t  size_needed;
-
-  if (cgiposted == NULL) /* have to initialise cgiposted */
-    {
-      p = getenv("CONTENT_LENGTH");
-      if (p != NULL) sscanf(p, "%d", &contentlength);
-
-      querystring = getenv("REDIRECT_QUERY_STRING");
-      if (querystring == NULL) querystring = getenv("QUERY_STRING");
-      
-      if (querystring == NULL) cgiposted = malloc(contentlength + 3);
-      else cgiposted = malloc(contentlength + strlen(querystring) + 4);
-
-      cgiposted[0] = '&';
-
-      for (i = 1; i <= contentlength; ++i)
-         {
-           c = getchar();
-           if (c == EOF) break;
-           cgiposted[i] = c;           
-         }
-
-      cgiposted[i]   = '&';
-      cgiposted[i+1] = '\0';
-
-      if (querystring != NULL)
-        {
-          strcat(cgiposted, querystring);
-          strcat(cgiposted, "&");
-        }
-    }
-    
-  namepattern = malloc(strlen(name) + 3);
-  sprintf(namepattern, "&%s=", name);
-  
-  p = strstr(cgiposted, namepattern);
-  free(namepattern);
-  if (p == NULL) return strdup("");
-     
-  valuestart = &p[strlen(name) + 2];
-
-  for (n=0; valuestart[n] != '&'; ++n) ;
-  
-  returnvalue = malloc(n + 1);
-  
-  j=0;
-  
-  for (i=0; i < n; ++i) 
-     {
-       if ((i < n - 2) && (valuestart[i] == '%')) /* url encoded as %HH */
-         {
-           returnvalue[j] = 0;
-           
-           if (isdigit(valuestart[i+1])) 
-                 returnvalue[j] += 16 * (valuestart[i+1] - '0');
-           else if (isalpha(valuestart[i+1])) 
-                 returnvalue[j] += 16 * (10 + tolower(valuestart[i+1]) - 'a');
-                         
-           if (isdigit(valuestart[i+2])) 
-                 returnvalue[j] += valuestart[i+2] - '0';
-           else if (isalpha(valuestart[i+2])) 
-                 returnvalue[j] += 10 + tolower(valuestart[i+2]) - 'a';
-
-           i = i + 2;
-         }
-       else if (valuestart[i] == '+') returnvalue[j] = ' ';
-       else                           returnvalue[j] = valuestart[i];
-       
-       if (returnvalue[j] == '\r') continue; /* CR/LF -> LF */
-       ++j;
-     }
-
-  returnvalue[j] = '\0';
-
-  return returnvalue;
-}
-
-/*                   *
- * Utility functions *
- *                   */
-
-char *GRSThttpUrlDecode(char *in)
-{
-  int   i, j, n;
-  char *out;
-                                                                                
-  n = strlen(in);
-  out = malloc(n + 1);
-                                                                                
-  j=0;
-                                                                                
-  for (i=0; i < n; ++i)
-     {
-       if ((i < n - 2) && (in[i] == '%')) /* url encoded as %HH */
-         {
-           out[j] = 0;
-                                                                                
-           if (isdigit(in[i+1]))
-                 out[j] += 16 * (in[i+1] - '0');
-           else if (isalpha(in[i+1]))
-                 out[j] += 16 * (10 + tolower(in[i+1]) - 'a');
-                                                                                
-           if (isdigit(in[i+2]))
-                 out[j] += in[i+2] - '0';
-           else if (isalpha(in[i+2]))
-                 out[j] += 10 + tolower(in[i+2]) - 'a';
-                                                                                
-           i = i + 2;
-         }
-       else if (in[i] == '+') out[j] = ' ';
-       else                   out[j] = in[i];
-                                                                                
-       ++j;
-     }
-                                                                                
-  out[j] = '\0';
-                                                                                
-  return out;
-}
-
-char *GRSThttpUrlEncode(char *in)
-/* Return a pointer to a malloc'd string holding a URL-encoded (RFC 1738)
-   version of *in. Only A-Z a-z 0-9 . _ - are passed through unmodified.
-   (DN's processed by GRSThttpUrlEncode can be used as valid Unix filenames,
-   assuming they do not exceed restrictions on filename length.) */
-{
-  char *out, *p, *q;
-  
-  out = malloc(3*strlen(in) + 1);
-  
-  p = in;
-  q = out;
-  
-  while (*p != '\0')
-       {
-         if (isalnum(*p) || (*p == '.') || (*p == '_') || (*p == '-'))
-           {
-             *q = *p;
-             ++q;
-           }
-         else
-           {
-             sprintf(q, "%%%2X", *p);
-             q = &q[3];
-           }
-
-         ++p;
-       }
-  
-  *q = '\0';  
-  return out;
-}
-
-char *GRSThttpUrlMildencode(char *in)
-/* Return a pointer to a malloc'd string holding a partially URL-encoded
-   version of *in. "Partially" means that A-Z a-z 0-9 . = - _ @ and / 
-   are passed through unmodified. (DN's processed by GRSThttpUrlMildencode()
-   can be used as valid Unix paths+filenames if you are prepared to
-   create or simulate the resulting /X=xyz directories.) */
-{
-  char *out, *p, *q;
-  
-  out = malloc(3*strlen(in) + 1);
-  
-  p = in;
-  q = out;
-  
-  while (*p != '\0')
-       {
-         if (isalnum(*p) || (*p == '.') || (*p == '=') || (*p == '-') 
-                         || (*p == '/') || (*p == '@') || (*p == '_'))
-           {
-             *q = *p;
-             ++q;
-           }
-         else if (*p == ' ')
-           {
-             *q = '+';
-             ++q;
-           }
-         else
-           {
-             sprintf(q, "%%%2X", *p);
-             q = &q[3];
-           }
-
-         ++p;
-       }
-  
-  *q = '\0';  
-  return out;
-}
diff --git a/org.gridsite.core/src/grst_x509.c b/org.gridsite.core/src/grst_x509.c
deleted file mode 100644 (file)
index 37b60e6..0000000
+++ /dev/null
@@ -1,1398 +0,0 @@
-/*
-   Copyright (c) 2002-4, Andrew McNab, University of Manchester
-   All rights reserved.
-
-   Redistribution and use in source and binary forms, with or
-   without modification, are permitted provided that the following
-   conditions are met:
-
-   o Redistributions of source code must retain the above
-     copyright notice, this list of conditions and the following
-     disclaimer. 
-   o 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. 
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-
-   ---------------------------------------------------------------
-    For more information about GridSite: http://www.gridsite.org/
-   ---------------------------------------------------------------
-*/ 
-
-#define _GNU_SOURCE
-
-#include <stdio.h>
-#include <unistd.h>       
-#include <stdlib.h>
-#include <time.h>
-#include <stdarg.h>
-#include <dirent.h>
-#include <string.h>
-#include <pwd.h>
-#include <errno.h>
-#include <getopt.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <openssl/x509.h>
-#include <openssl/x509v3.h>
-#include <openssl/err.h>
-#include <openssl/pem.h>
-
-#include <openssl/rsa.h>
-#include <openssl/pem.h>
-#include <openssl/err.h>
-#include <openssl/evp.h>
-#include <openssl/bio.h>    
-#include <openssl/des.h>    
-#include <openssl/rand.h>
-
-#ifdef GRST_VOMS_SUPPORT
-#include <glite/security/voms/voms_apic.h>
-#endif
-
-#include "gridsite.h"
-
-#define GRST_KEYSIZE   512
-#define GRST_PROXYCACHE        "/../proxycache/"
-#define GRST_MAX_CHAIN_LEN 9
-
-/// Compare X509 Distinguished Name strings
-int GRSTx509NameCmp(char *a, char *b)
-/**
- *  This function attempts to do with string representations what
- *  would ideally be done with OIDs/values. In particular, we equate
- *  "/Email=" == "/emailAddress=" to deal with this important change
- *  between OpenSSL 0.9.6 and 0.9.7. 
- *  Other than that, it is currently the same as ordinary strcmp(3).
- */
-{
-   int   ret;
-   char *aa, *bb, *p;
-
-   aa = strdup(a);
-   while ((p = strstr(aa, "/emailAddress=")) != NULL)
-        {
-          memmove(&p[6], &p[13], strlen(&p[13]) + 1);
-          p[1] = 'E';
-        }
-
-   bb = strdup(b);
-   while ((p = strstr(bb, "/emailAddress=")) != NULL)
-        {
-          memmove(&p[6], &p[13], strlen(&p[13]) + 1);
-          p[1] = 'E';
-        }
-
-   ret = strcmp(aa, bb);
-
-   free(aa);
-   free(bb);
-                                                                                
-   return ret;
-}
-
-
-/// Check critical extensions
-/**
- *  Returning GRST_RET_OK if all of extensions are known to us or 
- *  OpenSSL; GRST_REF_FAILED otherwise.   
- *
- *  Since this function relies on functionality (X509_supported_extension)
- *  introduced in 0.9.7, then we do nothing and report an error 
- *  (GRST_RET_FAILED) if one of the associated defines 
- *  (X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION) is absent.
- */
-
-int GRSTx509KnownCriticalExts(X509 *cert)
-{
-   int  i;
-   char s[80];
-   X509_EXTENSION *ex;
-   
-#ifdef X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION        
-   for (i = 0; i < X509_get_ext_count(cert); ++i)
-      {
-        ex = X509_get_ext(cert, i);
-
-        if (X509_EXTENSION_get_critical(ex) &&
-                                 !X509_supported_extension(ex))
-          {
-            OBJ_obj2txt(s, sizeof(s), X509_EXTENSION_get_object(ex), 1);
-
-            if (strcmp(s, GRST_PROXYCERTINFO_OID) != 0) return GRST_RET_FAILED;
-          }
-      }
-
-   return GRST_RET_OK;
-#else
-   return GRST_RET_FAILED;
-#endif
-}
-
-/// ASN1 time string (in a char *) to time_t
-/** 
- *  (Use ASN1_STRING_data() to convert ASN1_GENERALIZEDTIME to char * if
- *   necessary)
- */
-time_t GRSTasn1TimeToTimeT(char *asn1time)
-{
-   char   zone;
-   struct tm time_tm;
-  
-   if ((sscanf(asn1time, "%02d%02d%02d%02d%02d%02d%c", 
-         &(time_tm.tm_year),
-         &(time_tm.tm_mon),
-         &(time_tm.tm_mday),
-         &(time_tm.tm_hour),
-         &(time_tm.tm_min),
-         &(time_tm.tm_sec),
-         &zone) != 7) || (zone != 'Z')) return 0; /* dont understand */
-         
-   /* time format fixups */
-  
-   if (time_tm.tm_year < 90) time_tm.tm_year += 100;
-   --(time_tm.tm_mon);
-  
-   return timegm(&time_tm);         
-}
-
-/// Check if certificate can be used as a CA to sign standard X509 certs
-/*
- *  Return GRST_RET_OK if true; GRST_RET_FAILED if not.
- */
-
-int GRSTx509IsCA(X509 *cert)
-{
-   int idret, purpose_id;
-
-   purpose_id = X509_PURPOSE_get_by_sname("sslclient");
-
-   /* final argument to X509_check_purpose() is whether to check for CAness */   
-
-   if (X509_check_purpose(cert, purpose_id + X509_PURPOSE_MIN, 1))
-        return GRST_RET_OK;
-   else return GRST_RET_FAILED;
-}   
-
-/// Check certificate chain for GSI proxy acceptability.
-/**
- *  Returns X509_V_OK/GRST_RET_OK if valid; OpenSSL X509 errors otherwise.
- *
- *  Inspired by GSIcheck written by Mike Jones, SVE, Manchester Computing,
- *  The University of Manchester.
- *
- *  The GridSite version handles old and new style Globus proxies, and
- *  proxies derived from user certificates issued with "X509v3 Basic
- *  Constraints: CA:FALSE" (eg UK e-Science CA)
- *
- *  We do not check chain links between certs here: this is done by
- *  GRST_check_issued/X509_check_issued in mod_ssl's ssl_engine_init.c
- *
- *  TODO: we do not yet check ProxyCertInfo and ProxyCertPolicy extensions
- *        (although via GRSTx509KnownCriticalExts() we can accept them.)
- */
-
-int GRSTx509CheckChain(int *first_non_ca, X509_STORE_CTX *ctx)
-{
-   STACK_OF(X509) *certstack;   /* Points to the client's cert chain */
-   X509 *cert;                  /* Points to the client's cert */
-   int depth;                   /* Depth of cert chain */
-   size_t len,len2;             /* Lengths of issuer and cert DN */
-   int IsCA;                    /* Holds whether cert is allowed to sign */
-   int prevIsCA;                /* Holds whether previous cert in chain is 
-                                   allowed to sign */
-   int prevIsLimited;          /* previous cert was proxy and limited */
-   int i,j;                     /* Iteration variables */
-   char *cert_DN;               /* Pointer to current-certificate-in-chain's 
-                                   DN */
-   char *issuer_DN;             /* Pointer to 
-                                   issuer-of-current-cert-in-chain's DN */
-   char *proxy_part_DN;         /* Pointer to end part of current-cert-in-chain
-                                   maybe eg "/CN=proxy" */
-   time_t now;
-   
-   time(&now);
-
-   *first_non_ca = 0; /* set to something predictable if things fail */
-
-   /* Check for context */
-   if (!ctx) return X509_V_ERR_INVALID_CA; 
-     /* Can't GSI-verify if there is no context. Here and throughout this
-        function we report all errors as X509_V_ERR_INVALID_CA. */
-   /* Set necessary preliminary values */
-   IsCA          = TRUE;           /* =prevIsCA - start from a CA */
-   prevIsLimited = 0;
-   /* Get the client cert chain */
-   certstack = X509_STORE_CTX_get_chain(ctx);     /* Get the client's chain  */
-   depth     = sk_X509_num(certstack);            /* How deep is that chain? */
-   /* Check the client chain */
-   for (i=depth-1; i >= 0; --i) 
-      /* loop through client-presented chain starting at CA end */
-      {
-        prevIsCA=IsCA;
-
-        /* Check for X509 certificate and point to it with 'cert' */
-        if (cert = sk_X509_value(certstack, i))
-          {
-            /* we check times and reject immediately if invalid */
-          
-            if (now <
-                GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(cert))))
-                  return X509_V_ERR_INVALID_CA;
-                
-            if (now > 
-                GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(cert))))
-                  return X509_V_ERR_INVALID_CA;
-
-            /* If any forebear certificate is not allowed to sign we must 
-               assume all decendents are proxies and cannot sign either */
-            if (prevIsCA)
-              {
-                /* always treat the first cert (from the CA files) as a CA */
-                if (i == depth-1) IsCA = TRUE;
-                /* check if this cert is valid CA for signing certs */
-                else IsCA = (GRSTx509IsCA(cert) == GRST_RET_OK);
-                
-                if (!IsCA) *first_non_ca = i;
-              } 
-            else 
-              {
-                IsCA = FALSE; 
-                /* Force proxy check next iteration. Important because I can
-                   sign any CA I create! */
-              }
-            cert_DN   = X509_NAME_oneline(X509_get_subject_name(cert),NULL,0);
-            issuer_DN = X509_NAME_oneline(X509_get_issuer_name(cert),NULL,0);
-            len       = strlen(cert_DN);
-            len2      = strlen(issuer_DN);
-
-            /* issuer didn't have CA status, so this is (at best) a proxy:
-               check for bad proxy extension*/
-
-            if (!prevIsCA)
-              {
-                if (prevIsLimited) /* we reject proxies of limited proxies! */
-                                return X509_V_ERR_INVALID_CA;
-              
-                /* User not allowed to sign shortened DN */
-                if (len2 > len) return X509_V_ERR_INVALID_CA;                           
-                  
-                /* Proxy subject must begin with issuer. */
-                if (strncmp(cert_DN, issuer_DN, len2) != 0) 
-                              return X509_V_ERR_INVALID_CA;
-
-                /* Set pointer to end of base DN in cert_DN */
-                proxy_part_DN = &cert_DN[len2];
-
-                /* First attempt at support for Old and New style GSI
-                   proxies: /CN=anything is ok for now */
-                if (strncmp(proxy_part_DN, "/CN=", 4) != 0)
-                                         return X509_V_ERR_INVALID_CA;
-                                         
-                if ((strncmp(proxy_part_DN, "/CN=limited proxy", 17) == 0) &&
-                    (i > 0)) prevIsLimited = 1; /* ready for next cert ... */
-              } 
-          }
-      }
-
-   /* Check cert whose private key is being used by client. If previous in 
-      chain is not allowed to be a CA then need to check this final cert for 
-      valid proxy-icity too */
-   if (!prevIsCA) 
-     { 
-       if (prevIsLimited) return X509_V_ERR_INVALID_CA;
-        /* we do not accept proxies signed by limited proxies */
-     
-       if (cert = sk_X509_value(certstack, 0)) 
-         {
-           /* Load DN & length of DN and either its issuer or the
-              first-bad-issuer-in-chain */
-           cert_DN = X509_NAME_oneline(X509_get_subject_name(cert), NULL, 0);
-           issuer_DN = X509_NAME_oneline(X509_get_issuer_name(cert),  NULL, 0);
-           len = strlen(cert_DN);
-           len2 = strlen(issuer_DN);
-           /* issuer didn't have CA status, check for bad proxy extension */
-
-           if (len2 > len) return X509_V_ERR_INVALID_CA;
-             /* User not allowed to sign shortened DN */
-
-           if (strncmp(cert_DN, issuer_DN, len2) != 0) 
-                           return X509_V_ERR_INVALID_CA;
-             /* Proxy subject must begin with issuer. */
-
-           proxy_part_DN = &cert_DN[len2];                         
-             /* Set pointer to end of DN base in cert_DN */
-             
-           /* Remander of subject must be either "/CN=proxy" or 
-              "/CN=limited proxy" (or /CN=XYZ for New style GSI) */
-              
-           /* First attempt at support for Old and New style GSI
-              proxies: /CN=anything is ok for now. */
-           if (strncmp(proxy_part_DN, "/CN=", 4) != 0)
-                                   return X509_V_ERR_INVALID_CA;
-         }
-     }
-   return X509_V_OK; /* this is also GRST_RET_OK, of course - by choice */
-}
-
-/// Example VerifyCallback routine
-
-/**
- *   
- */
-
-int GRSTx509VerifyCallback (int ok, X509_STORE_CTX *ctx)
-{
-   int errnum   = X509_STORE_CTX_get_error(ctx);
-   int errdepth = X509_STORE_CTX_get_error_depth(ctx);
-   int first_non_ca;
-
-#ifndef X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION
-#define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34
-#endif
-
-   if (errnum == X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION)
-     {
-       if (GRSTx509KnownCriticalExts(X509_STORE_CTX_get_current_cert(ctx))
-           == GRST_RET_OK)
-         {
-           ok = TRUE;
-           errnum = X509_V_OK;
-           X509_STORE_CTX_set_error(ctx, errnum);
-         }                               
-     }
-   else if ((errdepth == 0)       && 
-            (errnum == X509_V_OK) && 
-            (GRSTx509CheckChain(&first_non_ca, ctx) != X509_V_OK)) ok = FALSE;
-   
-   
-   return ok;
-  
-// check this 
-   
-//   if (ok) return GRST_RET_OK;
-//   else    return GRST_RET_FAILED;
-}
-
-/// Get the VOMS attributes in the extensions to the given cert
-/*
- *  Puts any VOMS credentials found into the Compact Creds string array
- *  starting at *creds. Always returns GRST_RET_OK.
- */
-
-int GRSTx509GetVomsCreds(int *lastcred, int maxcreds, size_t credlen, 
-                         char *creds, X509 *cert, STACK_OF(X509) *certstack,
-                         char *vomsdir)
-{
-#ifndef GRST_VOMS_SUPPORT
-   return GRST_RET_OK;
-}
-#else
-
-/*
-   int  j;   
-   unsigned int siglen=-1, datalength=-1, dataoffset = -1;
-   char s[80];
-   unsigned char *charstr, *p, *time1 = NULL, *time2 = NULL, *vo = NULL,
-                 *uri = NULL, *user = NULL, *group = "NULL", *role = "NULL", 
-                 *cap = "NULL", *server = NULL, *ucuser, *signature = NULL,
-                 *data = NULL, *datalen = NULL;
-   X509_EXTENSION *ex;
-   ASN1_STRING    *asn1str;
-   time_t          now, time1_time = 0, time2_time = 0, 
-                   uctime1_time, uctime2_time;
-*/
-
-
-   struct vomsdata *vd;
-   int    i, j, vomserror;
-
-   vd = VOMS_Init(NULL, NULL);
-
-   if (VOMS_Retrieve(cert, certstack, RECURSE_CHAIN, vd, &vomserror) &&
-       (vd->data != NULL))
-     {     
-       for (i = 0; vd->data[i] != NULL; ++i)
-          {
-            if (vd->data[i]->fqan != NULL)
-                for (j = 0; vd->data[i]->fqan[j] != NULL; ++j)
-                   {
-                     if (*lastcred >= maxcreds - 1)
-                       {
-                         VOMS_Destroy(vd);
-                         return GRST_RET_OK;
-                       }
-
-                     ++(*lastcred);
-            
-                     snprintf(&creds[*lastcred * (credlen + 1)], 
-                           credlen+1,
-                           "VOMS %010lu %010lu 0 %s",
-                           GRSTasn1TimeToTimeT(vd->data[i]->date1), 
-                           GRSTasn1TimeToTimeT(vd->data[i]->date2),
-                           vd->data[i]->fqan[j]);
-                   }
-          }
-     }
-   else
-     {
-       FILE *fp = fopen("/tmp/getvoms.log", "w");
-       fprintf(fp, "%d\n", vomserror);
-       fclose(fp);
-     }
-   
-   VOMS_Destroy(vd);   
-   return GRST_RET_OK;
-}
-
-#if 0
-
-   time(&now);
-
-   uctime1_time = 
-        GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(usercert)));
-   uctime2_time =       
-        GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(usercert)));
-   ucuser =
-        X509_NAME_oneline(X509_get_subject_name(usercert), NULL, 0);
-
-   for (i = 0; i < X509_get_ext_count(cert); ++i)
-      {
-        ex = X509_get_ext(cert, i);
-        
-        OBJ_obj2txt(s, sizeof(s), X509_EXTENSION_get_object(ex), 1);
-
-        if (strcmp(s, GRST_VOMS_OID) == 0) /* a VOMS extension */
-          {
-            asn1str = X509_EXTENSION_get_data(ex);
-            charstr = (char *) malloc(ASN1_STRING_length(asn1str) + 1);
-            memcpy(charstr, ASN1_STRING_data(asn1str), 
-                            ASN1_STRING_length(asn1str));
-            charstr[ASN1_STRING_length(asn1str)] = '\0';
-
-            siglen = -1;
-            
-            if ((sscanf(charstr, "SIGLEN:%u", &siglen) != 1) ||
-                (siglen == -1) ||
-                ((p = index(charstr, '\n')) == NULL))
-              {
-                free(charstr);
-                continue;
-              }
-                            
-            ++p;
-
-            if (strncmp(p, "SIGNATURE:", sizeof("SIGNATURE:") - 1) != 0)
-              {
-                free(charstr);
-                continue;
-              }
-
-            signature = &p[sizeof("SIGNATURE:") - 1];
-            
-            p = &p[siglen + sizeof("SIGNATURE:") - 1];
-            data = p;
-
-            /* nasty pointer arithmetic! */
-            dataoffset = (unsigned int) ((long) data - (long) charstr);
-            datalength = (unsigned int) 
-                            (ASN1_STRING_length(asn1str) - dataoffset);
-
-            if (datalength <= 0)
-              {
-                free(charstr);
-                continue;
-              }
-
-            while (1)
-             {
-               if (strncmp(p, "USER:", sizeof("USER:") - 1) == 0)
-                 {
-                   p = &p[sizeof("USER:") - 1];
-                   while ((*p != '\n') && (*p != '\0') && (*p <= ' ')) ++p;
-                   user = p;   
-                   p = index(p, '\n');
-                   if (p == NULL) break;
-                   *p = '\0';
-                   ++p;
-                 }
-               else if (strncmp(p, "TIME1:", sizeof("TIME1:") - 1) == 0)
-                 {
-                   p = &p[sizeof("TIME1:") - 1];
-                   while ((*p != '\n') && (*p != '\0') && (*p <= ' ')) ++p;
-                   time1 = p;                
-                   p = index(p, '\n');
-                   if (p != NULL) *p = '\0';
-                  
-                   time1_time = GRSTasn1TimeToTimeT(time1);                   
-                   if (time1_time < uctime1_time) time1_time = uctime1_time;
-                   if (p == NULL) break;
-                   ++p;
-                 }
-               else if (strncmp(p, "TIME2:", sizeof("TIME2:") - 1) == 0)
-                 {
-                   p = &p[sizeof("TIME2:") - 1];
-                   while ((*p != '\n') && (*p != '\0') && (*p <= ' ')) ++p;
-                   time2 = p;
-                   p = index(p, '\n');
-                   if (p != NULL) *p = '\0';
-
-                   time2_time = GRSTasn1TimeToTimeT(time2); 
-                   if (time2_time > uctime2_time) time2_time = uctime2_time;
-                   if (p == NULL) break;
-                   ++p;
-                 }
-               else if (strncmp(p, "VO:", sizeof("VO:") - 1) == 0)
-                 {
-                   p = &p[sizeof("VO:") - 1];
-                   while ((*p != '\n') && (*p != '\0') && (*p <= ' ')) ++p;
-                   vo = p;
-                
-                   p = index(p, '\n');
-                   if (p == NULL) break;
-                   *p = '\0';
-                   ++p;
-                 }
-               else if (strncmp(p, "SERVER:", sizeof("SERVER:") - 1) == 0)
-                 {
-                   p = &p[sizeof("SERVER:") - 1];
-                   while ((*p != '\n') && (*p != '\0') && (*p <= ' ')) ++p;
-                   server = p;
-
-                   p = index(p, '\n');
-                   if (p == NULL) break;
-                   *p = '\0';
-                   ++p;
-                 }
-               else if (strncmp(p, "DATALEN:", sizeof("DATALEN:") - 1) == 0)
-                 {
-                   p = &p[sizeof("DATALEN:") - 1];
-                   while ((*p != '\n') && (*p != '\0') && (*p <= ' ')) ++p;
-                   datalen = p;                
-                   p = index(p, '\n');
-                   if (p == NULL) break; 
-                   *p = '\0';
-                   ++p;
-                   break;
-                 }
-               else /* not something we use */
-                 {
-                   p = index(p, '\n');
-                   if (p == NULL) break;
-                   *p = '\0';
-                   ++p;
-                 }
-             }
-/*             
-            if ((now >= time1_time) &&
-                (now <= time2_time) &&
-                (signature != NULL) &&
-                (data != NULL) &&
-                (siglen > 0) &&
-                (user != NULL) &&
-                (ucuser != NULL) &&
-                (strcmp(user, ucuser) == 0) &&
-                (GRSTx509CheckVomsSig(signature, siglen, 
-                                    &((ASN1_STRING_data(asn1str))[dataoffset]),
-                                    datalength, vomsdir, vo, 
-                                    server) == GRST_RET_OK)) 
-                                    while (1)
-*/
-             {
-               if (strncmp(p, "GROUP:", sizeof("GROUP:") - 1) == 0)
-                 {
-                   p = &p[sizeof("GROUP:") - 1];
-                   while ((*p != '\n') && (*p != '\0') && (*p <= ' ')) ++p;
-                   group = p;
-                   role = "NULL";
-                   cap = "NULL";
-
-                   p = index(p, '\n');
-                   if (p == NULL) break;
-                   *p = '\0';
-                   ++p;
-                 }
-               else if (strncmp(p, "ROLE:", sizeof("ROLE:") - 1) == 0)
-                 {
-                   p = &p[sizeof("ROLE:") - 1];
-                   while ((*p != '\n') && (*p != '\0') && (*p <= ' ')) ++p;
-                   role = p;
-
-                   p = index(p, '\n');
-                   if (p == NULL) break;
-                   *p = '\0';
-                   ++p;
-                 }
-               else if (strncmp(p, "CAP:", sizeof("CAP:") - 1) == 0)
-                 {
-                   p = &p[sizeof("CAP:") - 1];
-                   while ((*p != '\n') && (*p != '\0') && (*p <= ' ')) ++p;
-                   cap = p;
-
-                   p = index(p, '\n');
-                   if (p != NULL) *p = '\0';
-
-                   if (*lastcred < maxcreds - 1)
-                     {
-                       ++(*lastcred);
-
-                       if ((strcmp(role, "NULL") == 0) &&
-                           (strcmp(cap , "NULL") == 0))                       
-                         snprintf(&creds[*lastcred * (credlen + 1)], credlen+1,
-                           "VOMS %010lu %010lu 0 /%s%s", 
-                           time1_time, time2_time, vo, group);
-                       else if ((strcmp(role, "NULL") != 0) &&
-                                (strcmp(cap , "NULL") == 0))  
-                         snprintf(&creds[*lastcred * (credlen + 1)], credlen+1,
-                           "VOMS %010lu %010lu 0 /%s%s/Role=%s", 
-                           time1_time, time2_time, vo, group, role);
-                       else if ((strcmp(role, "NULL") == 0) &&
-                                (strcmp(cap , "NULL") != 0))     
-                         snprintf(&creds[*lastcred * (credlen + 1)], credlen+1,
-                           "VOMS %010lu %010lu 0 /%s%s/Capability=%s", 
-                           time1_time, time2_time, vo, group, cap);
-                       else 
-                         snprintf(&creds[*lastcred * (credlen + 1)], credlen+1,
-                           "VOMS %010lu %010lu 0 /%s%s/Role=%s/Capability=%s", 
-                           time1_time, time2_time, vo, group, role, cap);
-                     }
-                      
-                   if (p == NULL) break;
-                   ++p;
-                 }
-               else /* not something we use */
-                 {
-                   p = index(p, '\n');
-                   if (p == NULL) break;
-                   *p = '\0';
-                   ++p;
-                 }
-             }
-             
-            free(charstr); 
-          }
-      }
-
-   return GRST_RET_OK;
-}
-#endif
-
-#endif
-
-/// Turn a Compact Cred line into a GRSTgaclCred object
-/**
- *  Returns pointer to created GRSTgaclCred or NULL or failure.
- */
-GRSTgaclCred *GRSTx509CompactToCred(char *grst_cred)
-{
-   int       delegation;
-   char     *p;
-   time_t    now, notbefore, notafter;
-   GRSTgaclCred *cred = NULL;
-
-   time(&now);
-
-   if (grst_cred == NULL) return NULL; /* just in case */
-
-   if (strncmp(grst_cred, "X509USER ", 9) == 0)
-     {
-       if ((sscanf(grst_cred, "X509USER %lu %lu %d", 
-                              &notbefore, &notafter, &delegation) == 3)
-            && (now >= notbefore)
-            && (now <= notafter)
-            && (p = index(grst_cred, ' '))
-            && (p = index(++p, ' '))
-            && (p = index(++p, ' '))
-            && (p = index(++p, ' ')))
-         {
-           cred = GRSTgaclCredNew("person");
-           GRSTgaclCredSetDelegation(cred, delegation);
-           GRSTgaclCredAddValue(cred, "dn", &p[1]);
-         }
-
-       return cred;
-     }
-
-   if (strncmp(grst_cred, "VOMS ", 5) == 0)
-     {
-       if ((sscanf(grst_cred, "VOMS %lu %lu", 
-                              &notbefore, &notafter, &delegation) == 3)
-            && (now >= notbefore)
-            && (now <= notafter)
-            && (p = index(grst_cred, ' '))
-            && (p = index(++p, ' '))
-            && (p = index(++p, ' '))
-            && (p = index(++p, ' ')))
-         {
-           /* include /VO/group/subgroup/Role=role/Capability=cap */
-
-           if (*p != '/') return NULL; /* must begin with / */
-
-           cred = GRSTgaclCredNew("voms");
-           GRSTgaclCredSetDelegation(cred, delegation);
-           GRSTgaclCredAddValue(cred, "fqan", p);
-         }
-
-       return cred;
-     }
-
-   return NULL; /* dont recognise this credential type */
-}
-
-/// Get the credentials in an X509 cert/GSI proxy, including any VOMS
-/**
- *  Credentials are placed in Compact Creds string array at *creds.
- * 
- *  Function returns GRST_RET_OK on success, or GRST_RET_FAILED if
- *  some inconsistency found in certificate.
- */
-int GRSTx509CompactCreds(int *lastcred, int maxcreds, size_t credlen, 
-                         char *creds, STACK_OF(X509) *certstack, char *vomsdir)
-{   
-   int   i, j, delegation = 0;
-   char  credtemp[credlen+1];
-   X509 *cert, *usercert = NULL, *gsiproxycert = NULL;
-
-   *lastcred = -1;
-
-   for (i = sk_X509_num(certstack) - 1; i >= 0; --i) 
-      {
-         cert = sk_X509_value(certstack, i);
-
-         if (usercert != NULL) 
-           {           /* found a (GSI proxy) cert after the user cert */
-             gsiproxycert = cert;
-             ++delegation;
-           }
-           
-         if ((usercert == NULL) && 
-             (i < sk_X509_num(certstack) - 1) &&
-             (GRSTx509IsCA(cert) != GRST_RET_OK)) usercert = cert;
-                                          /* found the 1st non-CA cert */
-      }
-
-   if ((usercert == NULL) /* if no usercert ("EEC"), we're not interested */
-       ||
-       (snprintf(credtemp, credlen+1, "X509USER %010lu %010lu %d %s",
-          GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(usercert))), 
-          GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(usercert))),
-          delegation,
-     X509_NAME_oneline(X509_get_subject_name(usercert), NULL, 0)) >= credlen+1)
-       || 
-       (*lastcred >= maxcreds-1))
-     {
-       *lastcred = -1;  /* just in case the caller looks at it */
-       return GRST_RET_FAILED; /* tell caller that things didn't work out */
-     }
-
-   ++(*lastcred);
-   strcpy(&creds[*lastcred * (credlen + 1)], credtemp);
-
-   if ((gsiproxycert != NULL) 
-       &&
-       (snprintf(credtemp, credlen+1, "GSIPROXY %010lu %010lu %d %s",
-     GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(gsiproxycert))), 
-     GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(gsiproxycert))),
-     delegation,
-  X509_NAME_oneline(X509_get_subject_name(gsiproxycert), NULL, 0)) < credlen+1)
-       &&
-       (*lastcred < maxcreds-1))
-     {
-       ++(*lastcred);
-       strcpy(&creds[*lastcred * (credlen + 1)], credtemp);
-       
-       GRSTx509GetVomsCreds(lastcred, maxcreds, credlen, creds, 
-                            gsiproxycert, certstack, vomsdir);
-     }
-         
-   return GRST_RET_OK;
-}
-
-/// Find proxy file name of the current user
-/**
- *  Return a string with the proxy file name or NULL if not present.
- *  This function does not check if the proxy has expired.
- */
-char *GRSTx509FindProxyFileName(void)
-{
-  char *p;
-  
-  p = getenv("X509_USER_PROXY");
-  
-  if (p != NULL) return strdup(p);
-  
-  p = malloc(sizeof("/tmp/x509up_uXYYYXXXYYY"));
-  
-  sprintf(p, "/tmp/x509up_u%d", getuid());  
-
-  return p;
-}
-
-static void mpcerror(FILE *debugfp, char *msg)
-{
-  if (debugfp != NULL)
-    {
-      fputs(msg, debugfp);
-      ERR_print_errors_fp(debugfp);
-    }
-}
-
-/// Make a GSI Proxy chain from a request, certificate and private key
-/**
- *  The proxy chain is returned in *proxychain. If debugfp is non-NULL,
- *  errors are output to that file pointer. The proxy will expired in
- *  the given number of minutes starting from the current time.
- */
-
-int GRSTx509MakeProxyCert(char **proxychain, FILE *debugfp, 
-                           char *reqtxt, char *cert, char *key, int minutes)
-{
-  char *ptr, *certchain;
-  int i, subjAltName_pos, ncerts;
-  long serial = 1, ptrlen;
-  EVP_PKEY *pkey, *CApkey;
-  const EVP_MD *digest;
-  X509 *certs[GRST_MAX_CHAIN_LEN];
-  X509_REQ *req;
-  X509_NAME *name, *CAsubject, *newsubject;
-  X509_NAME_ENTRY *ent;
-  X509V3_CTX ctx;
-  X509_EXTENSION *subjAltName;
-  STACK_OF (X509_EXTENSION) * req_exts;
-  FILE *fp;
-  BIO *reqmem, *certmem;
-
-  /* read in the request */
-  reqmem = BIO_new(BIO_s_mem());
-  BIO_puts(reqmem, reqtxt);
-    
-  if (!(req = PEM_read_bio_X509_REQ(reqmem, NULL, NULL, NULL)))
-    {
-      mpcerror(debugfp,
-              "GRSTx509MakeProxyCert(): error reading request from BIO memory\n");
-      BIO_free(reqmem);
-      return GRST_RET_FAILED;
-    }
-    
-  BIO_free(reqmem);
-
-  /* verify signature on the request */
-  if (!(pkey = X509_REQ_get_pubkey (req)))
-    {
-      mpcerror(debugfp,
-              "GRSTx509MakeProxyCert(): error getting public key from request\n");
-      return GRST_RET_FAILED;
-    }
-
-  if (X509_REQ_verify(req, pkey) != 1)
-    {
-      mpcerror(debugfp,
-            "GRSTx509MakeProxyCert(): error verifying signature on certificate\n");
-      return GRST_RET_FAILED;
-    }
-    
-  /* read in the signing certificate */
-  if (!(fp = fopen(cert, "r")))
-    {
-      mpcerror(debugfp,
-            "GRSTx509MakeProxyCert(): error opening signing certificate file\n");
-      return GRST_RET_FAILED;
-    }    
-
-  for (ncerts = 1; ncerts < GRST_MAX_CHAIN_LEN; ++ncerts)
-   if (!(certs[ncerts] = PEM_read_X509(fp, NULL, NULL, NULL))) break;
-
-  if (ncerts == 1) /* zeroth cert with be new proxy cert */
-    {
-      mpcerror(debugfp,
-            "GRSTx509MakeProxyCert(): error reading signing certificate file\n");
-      return GRST_RET_FAILED;
-    }    
-
-  fclose(fp);
-  
-  CAsubject = X509_get_subject_name(certs[1]);
-
-  /* read in the CA private key */
-  if (!(fp = fopen(key, "r")))
-    {
-      mpcerror(debugfp,
-            "GRSTx509MakeProxyCert(): error reading signing private key file\n");
-      return GRST_RET_FAILED;
-    }    
-
-  if (!(CApkey = PEM_read_PrivateKey (fp, NULL, NULL, NULL)))
-    {
-      mpcerror(debugfp,
-            "GRSTx509MakeProxyCert(): error reading signing private key in file\n");
-      return GRST_RET_FAILED;
-    }    
-
-  fclose(fp);
-  
-  /* get subject name */
-  if (!(name = X509_REQ_get_subject_name (req)))
-    {
-      mpcerror(debugfp,
-            "GRSTx509MakeProxyCert(): error getting subject name from request\n");
-      return GRST_RET_FAILED;
-    }    
-
-  /* create new certificate */
-  if (!(certs[0] = X509_new ()))
-    {
-      mpcerror(debugfp,
-            "GRSTx509MakeProxyCert(): error creating X509 object\n");
-      return GRST_RET_FAILED;
-    }    
-
-  /* set version number for the certificate (X509v3) and the serial number   
-     need 3 = v4 for GSI proxy?? */
-  if (X509_set_version (certs[0], 3L) != 1)
-    {
-      mpcerror(debugfp,
-            "GRSTx509MakeProxyCert(): error setting certificate version\n");
-      return GRST_RET_FAILED;
-    }    
-
-  ASN1_INTEGER_set (X509_get_serialNumber (certs[0]), serial++);
-
-  if (!(name = X509_get_subject_name(certs[1])))
-    {
-      mpcerror(debugfp,
-      "GRSTx509MakeProxyCert(): error getting subject name from CA certificate\n");
-      return GRST_RET_FAILED;
-    }    
-
-  if (X509_set_issuer_name (certs[0], name) != 1)
-    {
-      mpcerror(debugfp,
-      "GRSTx509MakeProxyCert(): error setting issuer name of certificate\n");
-      return GRST_RET_FAILED;
-    }    
-
-  /* set issuer and subject name of the cert from the req and the CA */
-  ent = X509_NAME_ENTRY_create_by_NID(NULL, OBJ_txt2nid("commonName"), 
-                                      MBSTRING_ASC, "proxy", -1);
-
-  newsubject = X509_NAME_dup(CAsubject);
-
-  X509_NAME_add_entry(newsubject, ent, -1, 0);
-
-  if (X509_set_subject_name(certs[0], newsubject) != 1)
-    {
-      mpcerror(debugfp,
-      "GRSTx509MakeProxyCert(): error setting subject name of certificate\n");
-      return GRST_RET_FAILED;
-    }    
-
-  /* set public key in the certificate */
-  if (X509_set_pubkey(certs[0], pkey) != 1)
-    {
-      mpcerror(debugfp,
-      "GRSTx509MakeProxyCert(): error setting public key of the certificate\n");
-      return GRST_RET_FAILED;
-    }    
-
-// need to set validity within limits of earlier certificates in the chain
-
-  /* set duration for the certificate */
-  if (!(X509_gmtime_adj (X509_get_notBefore(certs[0]), 0)))
-    {
-      mpcerror(debugfp,
-      "GRSTx509MakeProxyCert(): error setting beginning time of the certificate\n");
-      return GRST_RET_FAILED;
-    }    
-
-  if (!(X509_gmtime_adj (X509_get_notAfter(certs[0]), 60 * minutes)))
-    {
-      mpcerror(debugfp,
-      "GRSTx509MakeProxyCert(): error setting ending time of the certificate\n");
-      return GRST_RET_FAILED;
-    }    
-
-  /* sign the certificate with the signing private key */
-  if (EVP_PKEY_type (CApkey->type) == EVP_PKEY_RSA)
-    digest = EVP_md5();
-  else
-    {
-      mpcerror(debugfp,
-      "GRSTx509MakeProxyCert(): error checking signing private key for a valid digest\n");
-      return GRST_RET_FAILED;
-    }    
-
-  if (!(X509_sign (certs[0], CApkey, digest)))
-    {
-      mpcerror(debugfp,
-      "GRSTx509MakeProxyCert(): error signing certificate\n");
-      return GRST_RET_FAILED;
-    }    
-
-  /* store the completed certificate chain */
-
-  certchain = strdup("");
-
-  for (i=0; i < ncerts; ++i)
-     {
-       certmem = BIO_new(BIO_s_mem());
-
-       if (PEM_write_bio_X509(certmem, certs[i]) != 1)
-         {
-           mpcerror(debugfp,
-            "GRSTx509MakeProxyCert(): error writing certificate to memory BIO\n");            
-           return GRST_RET_FAILED;
-         }
-
-       ptrlen = BIO_get_mem_data(certmem, &ptr);
-  
-       certchain = realloc(certchain, strlen(certchain) + ptrlen + 1);
-       
-       strncat(certchain, ptr, ptrlen);
-    
-       BIO_free(certmem);
-     }
-    
-  *proxychain = certchain;
-    
-  return GRST_RET_OK;
-}
-
-/// Find a proxy file in the proxy cache
-/**
- *  Returns the full path and file name of proxy file associated
- *  with given delegation ID and user DN.
- */
-
-char *GRSTx509CachedProxyFind(char *proxydir, char *delegation_id, 
-                              char *user_dn)
-/* 
-    Return a pointer to a malloc'd string with the full path of the 
-    proxy file corresponding to the given delegation_id, or NULL
-    if not found.
-*/
-{
-  int   ret, len;
-  char *filename = NULL, *line, *p, *proxyfile = NULL;
-  DIR *proxyDIR;
-  FILE *fp;  
-  struct dirent *ent;
-  struct stat entstat;
-     
-  if ((proxyDIR = opendir(proxydir)) == NULL) return NULL;
-  len = strlen(delegation_id);
-  if (strlen(user_dn) > len) len = strlen(user_dn);
-  if ((line = malloc(len + 2)) == NULL) return NULL;
-  while ((ent = readdir(proxyDIR)) != NULL)
-       {
-         if (ent->d_name[0] != '.') /* private keys begin with . */
-           {       
-             if (asprintf(&filename, "%s/%s", proxydir, ent->d_name) == -1)
-                                                                      break;
-             if ((stat(filename, &entstat) != 0) 
-                 || !S_ISREG(entstat.st_mode))
-               {
-                 free(filename);
-                 continue;
-               }
-               
-             fp = fopen(filename, "r");
-             if (fp != NULL)
-               {
-                 if (fgets(line, len + 2, fp) != NULL)
-                   {
-                     p = index(line, '\n');
-                     
-                     if (p != NULL)
-                       {
-                         *p = '\0';
-                         if (strcmp(line, delegation_id) == 0)
-                           {
-                             if (fgets(line, len + 2, fp) != NULL)
-                               {
-                                 p = index(line, '\n');
-
-                                 if (p != NULL)
-                                   {
-                                     *p = '\0';
-                           
-                                     if (strcmp(line, user_dn) == 0)
-                                       {                           
-                                         proxyfile = filename;
-                                         fclose(fp);
-                                         break;
-                                       }
-                                   }
-                               }
-                           }
-                       }
-                   }
-               
-                 fclose(fp);
-               }
-               
-             free(filename);
-           }         
-       }
-  
-  closedir(proxyDIR);
-  free(line);
-  return proxyfile;
-}
-
-/// Find a temporary proxy private key file in the proxy cache
-/**
- *  Returns the full path and file name of the private key file associated
- *  with given delegation ID and user DN.
- */
-
-char *GRSTx509CachedProxyKeyFind(char *proxydir, char *delegation_id, 
-                                 char *user_dn)
-/* 
-    Return a pointer to a malloc'd string with the full path of the 
-    private proxy key corresponding to the given delegation_id, or NULL
-    if not found.
-*/
-{
-  int   ret, len;
-  char *filename = NULL, *line, *p, *keyfile = NULL;
-  DIR *proxyDIR;
-  FILE *fp;  
-  struct dirent *ent;
-  struct stat entstat;
-     
-  if ((proxyDIR = opendir(proxydir)) == NULL) return NULL;
-  len = strlen(delegation_id);
-  if (strlen(user_dn) > len) len = strlen(user_dn);
-  if ((line = malloc(len + 2)) == NULL) return NULL;
-  while ((ent = readdir(proxyDIR)) != NULL)
-       {
-         if (ent->d_name[0] == '.') /* private keys begin with . */
-           {       
-             if (asprintf(&filename, "%s/%s", proxydir, ent->d_name) == -1)
-                                                                      break;             
-             if ((stat(filename, &entstat) != 0) 
-                 || !S_ISREG(entstat.st_mode))
-               {
-                 free(filename);
-                 continue;
-               }
-               
-             fp = fopen(filename, "r");
-             if (fp != NULL)
-               {
-                 if (fgets(line, len + 2, fp) != NULL)
-                   {
-                     p = index(line, '\n');
-                     
-                     if (p != NULL)
-                       {
-                         *p = '\0';
-                         if (strcmp(line, delegation_id) == 0)
-                           {
-                             if (fgets(line, len + 2, fp) != NULL)
-                               {
-                                 p = index(line, '\n');
-
-                                 if (p != NULL)
-                                   {
-                                     *p = '\0';
-                           
-                                     if (strcmp(line, user_dn) == 0)
-                                       {                           
-                                         keyfile = filename;
-                                         fclose(fp);
-                                         break;
-                                       }
-                                   }
-                               }
-                           }
-                       }
-                   }
-               
-                 fclose(fp);
-               }
-               
-             free(filename);
-           }         
-       }
-  
-  closedir(proxyDIR);
-  free(line);
-  return keyfile;
-}
-
-/// Make and store a X.509 request for a GSI proxy
-/**
- *  Returns GRST_RET_OK on success, non-zero otherwise. Request string
- *  is PEM encoded, and the key is stored in proxydir as temporary file
- *  with a filename like .XXXXXX
- */ 
-
-int GRSTx509MakeProxyRequest(char **reqtxt, char *proxydir, 
-                             char *delegation_id, char *user_dn)
-{
-  int              i, fd;
-  char            *docroot, *reqfile, *prvkeyfile, *ptr;
-  size_t           ptrlen;
-  FILE            *fp;
-  RSA             *keypair;
-  X509_NAME       *subject;
-  X509_NAME_ENTRY *ent;
-  EVP_PKEY        *pkey;
-  X509_REQ        *certreq;
-  BIO             *reqmem;
-  const EVP_MD          *digest;
-  struct stat      statbuf;
-
-  if ((keypair = RSA_generate_key(GRST_KEYSIZE, 3, NULL, NULL)) == NULL)
-                                                               return 1;
-  asprintf(&prvkeyfile, "%s/.XXXXXX", proxydir);
-          
-  fd = mkstemp(prvkeyfile);
-    
-  if ((fp = fdopen(fd, "w")) == NULL) return 1;
-                               
-  fprintf(fp, "%s\n%s\n", delegation_id, user_dn);
-    
-  if (!PEM_write_RSAPrivateKey(fp, keypair, NULL, NULL, 0, NULL, NULL))
-                               return 1;
-  
-  if (fclose(fp) != 0) return 1;
-  
-  /* now create the certificate request */
-
-  certreq = X509_REQ_new();
-  if (certreq == NULL) return 1;
-
-  OpenSSL_add_all_algorithms();
-
-  pkey = EVP_PKEY_new();
-  EVP_PKEY_assign_RSA(pkey, keypair);
-
-  X509_REQ_set_pubkey(certreq, pkey);
-  
-  subject = X509_NAME_new();
-  ent = X509_NAME_ENTRY_create_by_NID(NULL, OBJ_txt2nid("organizationName"), 
-                                      MBSTRING_ASC, "Dummy", -1);
-  X509_NAME_add_entry (subject, ent, -1, 0);
-  X509_REQ_set_subject_name (certreq, subject);
-  
-  digest = EVP_md5();
-  X509_REQ_sign(certreq, pkey, digest);
-
-  reqmem = BIO_new(BIO_s_mem());
-  PEM_write_bio_X509_REQ(reqmem, certreq);
-  ptrlen = BIO_get_mem_data(reqmem, &ptr);
-  
-  *reqtxt = malloc(ptrlen + 1);
-  memcpy(*reqtxt, ptr, ptrlen);
-  (*reqtxt)[ptrlen] = '\0';
-
-  BIO_free(reqmem);
-
-  X509_REQ_free(certreq);
-  
-  return 0;
-}
-
-/// Store a GSI proxy chain in the proxy cache, along with the private key
-/**
- *  Returns GRST_RET_OK on success, non-zero otherwise. The existing
- *  private key with the same delegation ID and user DN is appended to
- *  make a valid proxy file, and the temporary private key file deleted.
- */
-
-int GRSTx509CacheProxy(char *proxydir, char *delegation_id, 
-                                       char *user_dn, char *proxychain)
-{
-  int   fd, c, len = 0, i;
-  char *cert, *upcertfile, *prvkeyfile, *p;
-  FILE *ifp, *ofp;
-    
-  prvkeyfile = GRSTx509CachedProxyKeyFind(proxydir, delegation_id, user_dn);
-
-  if (prvkeyfile == NULL)  
-    {
-      free(proxydir);
-      return GRST_RET_FAILED;
-    }
-        
-  if ((ifp = fopen(prvkeyfile, "r")) == NULL) 
-    {
-      free(prvkeyfile);
-      free(proxydir);
-      return GRST_RET_FAILED;
-    }
-
-  if (asprintf(&upcertfile, "%s/XXXXXX", proxydir) == -1) 
-                                                    return GRST_RET_FAILED;
-
-  if ((fd = mkstemp(upcertfile)) == -1)
-    {
-      fclose(ifp);
-      free(prvkeyfile);
-      free(upcertfile);
-      return GRST_RET_FAILED;
-    }
-    
-  if ((ofp = fdopen(fd, "w")) == NULL)
-    {
-      close(fd);
-      fclose(ifp);
-      free(prvkeyfile);
-      free(upcertfile);
-      return GRST_RET_FAILED;
-    }
-
-  fprintf(ofp, "%s\n%s\n", delegation_id, user_dn);
-  fputs(proxychain, ofp); /* write out certificates */
-  
-  while ((c = fgetc(ifp)) != EOF) fputc(c, ofp); /* append proxy private key */
-      
-  if (fclose(ifp) != 0) return GRST_RET_FAILED;
-  if (fclose(ofp) != 0) return GRST_RET_FAILED;
-  
-  unlink(prvkeyfile);
-  
-  free(prvkeyfile);
-  free(upcertfile);
-  
-/* should also check validity of proxy cert to avoid suprises? */
-      
-  return GRST_RET_OK;
-} 
diff --git a/org.gridsite.core/src/htcp b/org.gridsite.core/src/htcp
deleted file mode 100644 (file)
index ac0153b..0000000
Binary files a/org.gridsite.core/src/htcp and /dev/null differ
diff --git a/org.gridsite.core/src/htcp.c b/org.gridsite.core/src/htcp.c
deleted file mode 100644 (file)
index 3275806..0000000
+++ /dev/null
@@ -1,1237 +0,0 @@
-/*
-   Copyright (c) 2002-4, Andrew McNab, University of Manchester
-   All rights reserved.
-
-   Redistribution and use in source and binary forms, with or
-   without modification, are permitted provided that the following
-   conditions are met:
-
-     o Redistributions of source code must retain the above
-       copyright notice, this list of conditions and the following
-       disclaimer. 
-     o 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. 
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-*/
-
-/*---------------------------------------------------------------*
- * For more about GridSite: http://www.gridsite.org/             *
- *---------------------------------------------------------------*/
-
-#ifndef VERSION
-#define VERSION "0.0.0"
-#endif
-
-#define _GNU_SOURCE
-
-#include <pwd.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <string.h>
-#include <malloc.h>
-#include <dirent.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <curl/curl.h>
-
-/* deal with older versions of libcurl and curl.h */
-
-#ifndef CURLOPT_WRITEDATA
-#define CURLOPT_WRITEDATA CURLOPT_FILE
-#endif
-#ifndef CURLOPT_READDATA
-#define CURLOPT_READDATA CURLOPT_FILE
-#endif
-
-#ifndef CURLE_HTTP_RETURNED_ERROR
-#define CURLE_HTTP_RETURNED_ERROR CURLE_HTTP_NOT_FOUND
-#endif
-#define HTCP_GET       1
-#define HTCP_PUT       2
-#define HTCP_DELETE    3
-#define HTCP_LIST      4
-#define HTCP_LONGLIST  5
-#define HTCP_MKDIR     6
-
-struct grst_stream_data { char *source;
-                          char *destination;
-                          int   ishttps;
-                          int   method;
-                          FILE *fp;
-                          char *cert;
-                          char *key;
-                          char *capath;
-                          char *useragent;
-                          char *errorbuf;
-                          int   noverify;
-                          int   anonymous;
-                          long long downgrade;
-                          int   verbose;       } ;
-                          
-struct grst_index_blob { char   *text;
-                         size_t  used;
-                         size_t  allocated; } ;
-
-struct grst_dir_list { char   *filename;
-                       size_t  length;
-                       int     length_set;
-                       time_t  modified;
-                       int     modified_set; } ; 
-
-struct grst_header_data { int    retcode;                         
-                          char  *location;
-                          char  *gridauthonetime;
-                          size_t length;
-                          int    length_set;
-                          time_t modified;                           
-                          int    modified_set;
-                          struct grst_stream_data *common_data; } ;
-
-size_t headers_callback(void *ptr, size_t size, size_t nmemb, void *p)
-/* Find the values of the return code, Content-Length, Last-Modified
-   and Location headers */
-{
-  float f;
-  char  *s, *q;
-  size_t realsize;
-  struct tm modified_tm;
-  struct grst_header_data *header_data;
-   
-  header_data = (struct grst_header_data *) p;
-  realsize = size * nmemb;
-  s = malloc(realsize + 1);
-  memcpy(s, ptr, realsize);
-  s[realsize] = '\0';
-
-  if      (sscanf(s, "Content-Length: %d", &(header_data->length)) == 1) 
-            header_data->length_set = 1;
-  else if (sscanf(s, "HTTP/%f %d ", &f, &(header_data->retcode)) == 2) ;
-  else if (strncmp(s, "Location: ", 10) == 0) 
-      {
-        header_data->location = strdup(&s[10]);
-         
-        if (header_data->common_data->verbose > 0)
-             fprintf(stderr, "Received Location: %s\n", header_data->location);
-      }
-  else if (strncmp(s, "Set-Cookie: GRID_AUTH_ONETIME=", 30) == 0) 
-      {
-        header_data->gridauthonetime = strdup(&s[12]);
-        q = index(header_data->gridauthonetime, ';');
-        if (q != NULL) *q = '\0';       
-
-        if (header_data->common_data->verbose > 0)
-             fprintf(stderr, "Received Grid Auth Cookie: %s\n", 
-                             header_data->gridauthonetime);
-      }
-  else if (strncmp(s, "Last-Modified: ", 15) == 0)
-      {
-        /* follow RFC 2616: first try RFC 822 (kosher), then RFC 850 and 
-           asctime() formats too. Must be GMT whatever the format. */
-
-        if (strptime(&s[15], "%a, %d %b %Y %T GMT", &modified_tm) != NULL)
-          {
-            header_data->modified = mktime(&modified_tm);
-            header_data->modified_set = 1;
-          }
-        else if (strptime(&s[15], "%a, %d-%b-%y %T GMT", &modified_tm) != NULL)
-          {
-            header_data->modified = mktime(&modified_tm);
-            header_data->modified_set = 1;
-          }
-        else if (strptime(&s[15], "%a %b %d %T %Y", &modified_tm) != NULL)
-          {
-            header_data->modified = mktime(&modified_tm);
-            header_data->modified_set = 1;
-          }
-      }
-    
-  free(s);
-  return realsize;
-}
-
-int set_std_opts(CURL *easyhandle, struct grst_stream_data *common_data)
-{
-  struct stat statbuf;
-
-  curl_easy_setopt(easyhandle, CURLOPT_FOLLOWLOCATION, 0);
-
-  if ((common_data->cert != NULL) && (common_data->key != NULL))
-    {
-       curl_easy_setopt(easyhandle, CURLOPT_SSLENGINE,   NULL);
-       curl_easy_setopt(easyhandle, CURLOPT_SSLCERTTYPE, "PEM");
-       curl_easy_setopt(easyhandle, CURLOPT_SSLCERT,     common_data->cert);
-       curl_easy_setopt(easyhandle, CURLOPT_SSLKEY,      common_data->key);
-    }
-  else
-    {
-       curl_easy_setopt(easyhandle, CURLOPT_SSLENGINE,   "RSA");
-       curl_easy_setopt(easyhandle, CURLOPT_SSLCERTTYPE, "ENG");
-    }
-
-  if (common_data->capath != NULL)
-    {
-#if (LIBCURL_VERSION_NUM >= 0x070908)
-       if ((stat(common_data->capath, &statbuf) == 0) &&
-           S_ISDIR(statbuf.st_mode))
-            curl_easy_setopt(easyhandle, CURLOPT_CAPATH, common_data->capath);
-       else 
-#endif       
-            curl_easy_setopt(easyhandle, CURLOPT_CAINFO, common_data->capath);
-    }
-
-  if (common_data->noverify)
-       curl_easy_setopt(easyhandle, CURLOPT_SSL_VERIFYHOST, 0);
-  else curl_easy_setopt(easyhandle, CURLOPT_SSL_VERIFYHOST, 2);
-  
-  return 1;
-}
-
-int do_copies(char *sources[], char *destination,
-              struct grst_stream_data *common_data)
-{
-  char        *p, *thisdestination;
-  int          isrc, anyerror = 0, thiserror, isdirdest;
-  CURL        *easyhandle;
-  struct stat  statbuf;
-  struct       grst_header_data header_data;
-  struct curl_slist *dgheader_slist = NULL, *nodgheader_slist = NULL;
-  
-  easyhandle = curl_easy_init();
-  
-  if (common_data->downgrade >= (long long) 0)
-    {               
-      asprintf(&p, "HTTP-Downgrade-Size: %lld", common_data->downgrade);      
-      dgheader_slist = curl_slist_append(dgheader_slist, p);
-      free(p);
-      
-      nodgheader_slist = curl_slist_append(nodgheader_slist,
-                                           "HTTP-Downgrade-Size:");
-    }
-  
-  curl_easy_setopt(easyhandle, CURLOPT_USERAGENT, common_data->useragent);
-  if (common_data->verbose > 1)
-                   curl_easy_setopt(easyhandle, CURLOPT_VERBOSE, 1);
-
-  curl_easy_setopt(easyhandle, CURLOPT_HEADERFUNCTION, headers_callback);
-  curl_easy_setopt(easyhandle, CURLOPT_WRITEHEADER,   &header_data);
-
-  set_std_opts(easyhandle, common_data);
-
-  curl_easy_setopt(easyhandle, CURLOPT_ERRORBUFFER, common_data->errorbuf);
-
-  if (destination[strlen(destination) - 1] != '/') 
-    {
-      isdirdest = 0;
-      thisdestination = destination;
-    }
-  else isdirdest = 1;
-
-  for (isrc=0; sources[isrc] != NULL; ++isrc)
-     {
-       if (isdirdest)
-         {
-           p = rindex(sources[isrc], '/');
-           if (p == NULL) p = sources[isrc];
-           else           p++;
-
-           asprintf(&thisdestination, "%s%s", destination, p);
-         }
-       if (common_data->verbose > 0)
-            fprintf(stderr, "%s -> %s\n", sources[isrc], thisdestination);
-
-       if (common_data->method == HTCP_GET)
-         {
-           common_data->fp = fopen(thisdestination, "w");
-           if (common_data->fp == NULL)
-             {
-               fprintf(stderr,"... failed to open destination source file %s\n",
-                               thisdestination);
-               anyerror = 99;
-               if (isdirdest) free(thisdestination);
-               continue;
-             }
-
-           curl_easy_setopt(easyhandle, CURLOPT_WRITEDATA, common_data->fp);
-           curl_easy_setopt(easyhandle, CURLOPT_URL,       sources[isrc]);
-           
-           if ((common_data->downgrade >= (long long) 0) &&
-               (strncmp(sources[isrc], "https://", 8) == 0))
-             {
-               if (common_data->verbose > 0)
-                 fprintf(stderr, "Add  HTTP-Downgrade-Size: %lld  header\n",
-                         common_data->downgrade);
-                 
-               curl_easy_setopt(easyhandle,CURLOPT_HTTPHEADER,dgheader_slist);
-             }
-           else 
-             curl_easy_setopt(easyhandle,CURLOPT_HTTPHEADER,nodgheader_slist);
-         }
-       else if (common_data->method == HTCP_PUT)
-         {
-           if (stat(sources[isrc], &statbuf) != 0)
-             {
-               fprintf(stderr, "... source file %s not found\n", sources[isrc]);
-               anyerror = 99;
-               if (isdirdest) free(thisdestination);
-               continue;
-             }
-           
-           common_data->fp = fopen(sources[isrc], "r");
-           if (common_data->fp == NULL)
-             {
-               fprintf(stderr, "... failed to open source file %s\n",
-                               sources[isrc]);
-               anyerror = 99;
-               if (isdirdest) free(thisdestination);
-               continue;
-             }
-
-           curl_easy_setopt(easyhandle, CURLOPT_READDATA,   common_data->fp);
-           curl_easy_setopt(easyhandle, CURLOPT_URL,        thisdestination);
-           curl_easy_setopt(easyhandle, CURLOPT_INFILESIZE, statbuf.st_size);
-           curl_easy_setopt(easyhandle, CURLOPT_UPLOAD,   1);
-
-           if (((long long) statbuf.st_size >= common_data->downgrade) &&
-               (strncmp(thisdestination, "https://", 8) == 0))
-               curl_easy_setopt(easyhandle,CURLOPT_HTTPHEADER,dgheader_slist);
-           else 
-             curl_easy_setopt(easyhandle,CURLOPT_HTTPHEADER,nodgheader_slist);
-         }
-
-       header_data.retcode  = 0;
-       header_data.location = NULL;
-       header_data.gridauthonetime = NULL;
-       header_data.common_data = common_data;
-       thiserror = curl_easy_perform(easyhandle);
-       
-       fclose(common_data->fp);
-
-       if ((common_data->downgrade >= (long long) 0) &&
-           (thiserror == 0) &&
-           (header_data.retcode == 302) &&
-           (header_data.location != NULL) &&
-           (strncmp(header_data.location, "http://", 7) == 0) &&
-           (header_data.gridauthonetime != NULL))
-         {
-           if (common_data->verbose > 0)
-             fprintf(stderr, "... Found (%d)\nHTTP-Downgrade to %s\n", 
-                     header_data.retcode, header_data.location);
-
-           /* try again with new URL and all the previous CURL options */
-
-           if (common_data->method == HTCP_GET)
-             {
-               common_data->fp = fopen(thisdestination, "w");
-               if (common_data->fp == NULL)
-                 {
-                   fprintf(stderr, "... failed to open destination source "
-                                   "file %s\n", thisdestination);
-                   anyerror = 99;
-                   if (isdirdest) free(thisdestination);
-                   continue;
-                 }
-             }
-           else if (common_data->method == HTCP_PUT)
-             {
-               common_data->fp = fopen(sources[isrc], "r");
-               if (common_data->fp == NULL)
-                 {
-                   fprintf(stderr, "... failed to open source file %s\n",
-                               sources[isrc]);
-                   anyerror = 99;
-                   if (isdirdest) free(thisdestination);
-                   continue;
-                 }
-             }
-
-           header_data.retcode  = 0;           
-           curl_easy_setopt(easyhandle, CURLOPT_URL, header_data.location);
-           curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, nodgheader_slist);
-           curl_easy_setopt(easyhandle, CURLOPT_COOKIE, 
-                                                  header_data.gridauthonetime);
-           thiserror = curl_easy_perform(easyhandle);
-
-           fclose(common_data->fp);
-         }
-
-       if ((thiserror != 0) ||
-           (header_data.retcode <  200) ||
-           (header_data.retcode >= 300))
-         {
-           fprintf(stderr, "... curl error: %s (%d), HTTP error: %d\n",
-                   common_data->errorbuf, thiserror, header_data.retcode);
-                   
-           if (thiserror != 0) anyerror = thiserror;
-           else                anyerror = header_data.retcode;
-         }
-       else if (common_data->verbose > 0) 
-                  fprintf(stderr, "... OK (%d)\n", header_data.retcode);
-        
-       if (isdirdest) free(thisdestination);
-     }
-
-  curl_easy_cleanup(easyhandle);
-     
-  return anyerror;
-}
-
-int do_deletes(char *sources[], struct grst_stream_data *common_data)
-{
-  int    isrc, anyerror = 0, thiserror;
-  CURL  *easyhandle;
-  struct grst_header_data header_data;
-  
-  header_data.common_data = common_data;
-
-  easyhandle = curl_easy_init();
-  
-  curl_easy_setopt(easyhandle, CURLOPT_USERAGENT, common_data->useragent);
-  if (common_data->verbose > 1)
-                   curl_easy_setopt(easyhandle, CURLOPT_VERBOSE, 1);
-
-  curl_easy_setopt(easyhandle, CURLOPT_HEADERFUNCTION, headers_callback);
-  curl_easy_setopt(easyhandle, CURLOPT_WRITEHEADER,   &header_data);
-
-  curl_easy_setopt(easyhandle, CURLOPT_ERRORBUFFER,   common_data->errorbuf);
-  curl_easy_setopt(easyhandle, CURLOPT_CUSTOMREQUEST, "DELETE");
-  curl_easy_setopt(easyhandle, CURLOPT_NOBODY,        1);
-
-  set_std_opts(easyhandle, common_data);
-
-  for (isrc=0; sources[isrc] != NULL; ++isrc)
-     {
-       if (common_data->verbose > 0)
-            fprintf(stderr, "Deleting %s\n", sources[isrc]);
-
-       curl_easy_setopt(easyhandle, CURLOPT_URL, sources[isrc]);
-
-       header_data.retcode = 0;
-       thiserror = curl_easy_perform(easyhandle);
-       
-       if ((thiserror != 0) ||
-           (header_data.retcode <  200) ||
-           (header_data.retcode >= 300))
-         {
-           fprintf(stderr, "... curl error: %s (%d), HTTP error: %d\n",
-                   common_data->errorbuf, thiserror, header_data.retcode);
-           
-           if (thiserror != 0) anyerror = thiserror;
-           else                anyerror = header_data.retcode;
-         }
-       else if (common_data->verbose > 0) 
-                     fprintf(stderr, "... OK (%d)\n", header_data.retcode);
-     }
-
-  curl_easy_cleanup(easyhandle);
-     
-  return anyerror;
-}
-
-int do_mkdirs(char *sources[], struct grst_stream_data *common_data)
-{
-  int    isrc, anyerror = 0, thiserror;
-  CURL  *easyhandle;
-  struct grst_header_data header_data;
-  
-  header_data.common_data = common_data;
-
-  easyhandle = curl_easy_init();
-  
-  curl_easy_setopt(easyhandle, CURLOPT_USERAGENT, common_data->useragent);
-  if (common_data->verbose > 1)
-                   curl_easy_setopt(easyhandle, CURLOPT_VERBOSE, 1);
-
-  curl_easy_setopt(easyhandle, CURLOPT_HEADERFUNCTION, headers_callback);
-  curl_easy_setopt(easyhandle, CURLOPT_WRITEHEADER,   &header_data);
-
-  curl_easy_setopt(easyhandle, CURLOPT_ERRORBUFFER,   common_data->errorbuf);
-  curl_easy_setopt(easyhandle, CURLOPT_CUSTOMREQUEST, "PUT");
-  curl_easy_setopt(easyhandle, CURLOPT_NOBODY,        1);
-
-  set_std_opts(easyhandle, common_data);
-
-  for (isrc=0; sources[isrc] != NULL; ++isrc)
-     {
-       if (common_data->verbose > 0)
-            fprintf(stderr, "Make directory %s\n", sources[isrc]);
-
-       curl_easy_setopt(easyhandle, CURLOPT_URL, sources[isrc]);
-
-       header_data.retcode = 0;
-       thiserror = curl_easy_perform(easyhandle);
-       
-       if ((thiserror != 0) ||
-           (header_data.retcode <  200) ||
-           (header_data.retcode >= 300))
-         {
-           fprintf(stderr, "... curl error: %s (%d), HTTP error: %d\n",
-                   common_data->errorbuf, thiserror, header_data.retcode);
-           
-           if (thiserror != 0) anyerror = thiserror;
-           else                anyerror = header_data.retcode;
-         }
-       else if (common_data->verbose > 0)  
-                        fprintf(stderr, "... OK (%d)\n", header_data.retcode);
-     }
-
-  curl_easy_cleanup(easyhandle);
-     
-  return anyerror;
-}
-
-size_t rawindex_callback(void *ptr, size_t size, size_t nmemb, void *data)
-{
-  if ( ((struct grst_index_blob *) data)->used + size * nmemb >=
-                             ((struct grst_index_blob *) data)->allocated )
-    {
-      ((struct grst_index_blob *) data)->allocated = 
-        ((struct grst_index_blob *) data)->used + size * nmemb + 4096;
-
-      ((struct grst_index_blob *) data)->text = 
-         realloc( ((struct grst_index_blob *) data)->text,
-                  ((struct grst_index_blob *) data)->allocated );
-    }
-    
-  memcpy( &( ((struct grst_index_blob *) 
-                 data)->text[((struct grst_index_blob *) data)->used] ),
-          ptr, size * nmemb);
-          
-  ((struct grst_index_blob *) data)->used += size * nmemb;
-  
-  return size * nmemb;
-}
-
-char *canonicalise(char *link, char *source)
-{
-  int   i, j, srclen;
-  char *s;
-
-  srclen = strlen(source);
-
-  if ((strncmp(link, "https://", 8) == 0) ||
-      (strncmp(link, "http://", 7) == 0))
-    {
-      if (strncmp(link, source, srclen) != 0) return NULL; /* other site */
-      
-      if (link[srclen] == '\0') return NULL; /* we dont self-link! */
-      
-      for (i=0; link[srclen + i] != '\0'; ++i)
-        if (link[srclen + i] == '/')
-          { 
-            if (link[srclen + i + 1] != '\0') return NULL; /* no subdirs */
-            else return strdup(&link[srclen]); /* resolves to this dir */
-          }
-    }
-  else if (link[0] != '/') /* relative link - need to check for subsubdirs */
-    {
-      for (i=0; link[i] != '\0'; ++i) 
-        if ((link[i] == '/') && (link[i+1] != '\0')) return NULL;
-
-      s = strdup(link);
-      
-      for (i=0; s[i] != '\0'; ++i) 
-       if (s[i] == '#')
-         {
-           s[i] = '\0';
-           break;
-         }
-
-      return s;
-    }
-
-  /* absolute link on this server, starting / */
-
-  for (i=8; source[i] != '\0'; ++i) if (source[i] == '/') break;
-       
-  if (strncmp(link, &source[i], srclen - i) != 0) return NULL;
-
-  for (j = srclen - i; link[j] != '\0'; ++j) 
-        if ((link[j] == '/') && (link[j+1] != '\0')) return NULL;
-        
-  s = strdup(&link[srclen - i]);
-      
-  for (i=0; s[i] != '\0'; ++i) 
-       if (s[i] == '#')
-         {
-           s[i] = '\0';
-           break;
-         }
-
-  if (s[0] == '\0') /* on second thoughts... */
-    {
-      free(s);
-      return NULL;
-    }
-         
-  return s;      
-}
-
-int grst_dir_list_cmp(const void *a, const void *b)
-{
-  return strcmp( ((struct grst_dir_list *) a)->filename, 
-                 ((struct grst_dir_list *) b)->filename);
-}
-
-struct grst_dir_list *index_to_dir_list(char *text, char *source)
-{
-  int   taglevel = 0, wordnew = 1, i, namestart, used = 0, 
-        allocated = 256;
-  char *p, *s;
-  struct grst_dir_list *list;
-  
-  list = (struct grst_dir_list *)
-              malloc(allocated * sizeof(struct grst_dir_list));
-              
-  list[0].filename     = NULL;
-  list[0].length       = 0;
-  list[0].length_set   = 0;
-  list[0].modified     = 0;
-  list[0].modified_set = 0;
-    
-  for (p=text; *p != '\0'; ++p)
-     {
-       if (*p == '<') 
-         {
-           ++taglevel;
-           
-           if ((taglevel == 1) && (list[used].filename != NULL))
-             {
-               ++used;
-               if (used >= allocated) 
-                 {
-                   allocated += 256;
-                   list = (struct grst_dir_list *)
-                           realloc((void *) list,
-                                   allocated * sizeof(struct grst_dir_list));
-                 }
-                 
-               list[used].filename     = NULL;
-               list[used].length       = 0;
-               list[used].length_set   = 0;
-               list[used].modified     = 0;
-               list[used].modified_set = 0;
-             }
-
-           wordnew = 1;
-           continue;
-         }
-
-       if (*p == '>') 
-         {
-           --taglevel;
-           wordnew = 1;
-           continue;
-         }
-         
-       if (isspace(*p))
-         {
-           wordnew = 1;
-           continue;
-         }
-
-       if ((wordnew) && (taglevel == 1))
-         {        
-           if (((*p == 'h') || (*p == 'H')) && 
-               (strncasecmp(p, "href=", 5) == 0))
-             {
-               if (p[5] == '"') { namestart = 6;
-                                  for (i=namestart; (p[i] != '\0') &&
-                                                    (p[i] != '"' ) &&
-                                                    (p[i] != '\n') &&
-                                                    (p[i] != '\t') &&
-                                                    (p[i] != '>' ) ; ++i) ; }
-               else { namestart = 5;
-                      for (i=namestart; (p[i] != '\0') &&
-                                        (p[i] != '"' ) &&
-                                        (p[i] != ' ' ) &&
-                                        (p[i] != '\n') &&
-                                        (p[i] != '\t') &&
-                                        (p[i] != ')' ) &&
-                                        (p[i] != '>' ) ; ++i) ; }
-               if (i > namestart) 
-                 {
-                   s = malloc(1 + i - namestart);
-                   memcpy(s, &p[namestart], i - namestart);
-                   s[i - namestart] = '\0';
-
-                   list[used].filename = canonicalise(s, source);
-                   free(s);
-                 }
-                 
-               p = &p[i-1]; /* -1 since continue results in ++i */
-               continue;
-             }
-
-           if (((*p == 'c') || (*p == 'C')) && 
-               (strncasecmp(p, "content-length=", 15) == 0))
-             {
-               list[used].length     = 0;
-               list[used].length_set = 1;
-               
-               if (p[15] == '"') list[used].length = atoi(&p[16]);
-               else              list[used].length = atoi(&p[15]);
-
-               p = &p[15];
-               continue;
-             }
-
-           if (((*p == 'l') || (*p == 'L')) && 
-               (strncasecmp(p, "last-modified=", 14) == 0))
-             {
-               list[used].modified     = 0;
-               list[used].modified_set = 1;
-               
-               if (p[14] == '"') list[used].modified = atoi(&p[15]);
-               else              list[used].modified = atoi(&p[14]);
-
-               p = &p[14];
-               continue;
-             }
-         }
-         
-       wordnew = 0;
-     }  
-
-  qsort((void *) list, used, sizeof(struct grst_dir_list), grst_dir_list_cmp);
-
-  return list;  
-}
-
-int do_listings(char *sources[], struct grst_stream_data *common_data,
-                int islonglist)
-{
-  int          isrc, anyerror = 0, thiserror, i, isdir, ilast;
-  CURL        *easyhandle;
-  const char  *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", 
-                            "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
-  char        *s;
-  struct       grst_index_blob  rawindex;
-  struct       grst_dir_list   *list;
-  struct       grst_header_data header_data;
-  struct       tm               modified_tm;
-  time_t                        now;
-
-  time(&now);
-
-  header_data.common_data = common_data;
-
-  easyhandle = curl_easy_init();
-  
-  curl_easy_setopt(easyhandle, CURLOPT_USERAGENT, common_data->useragent);
-  if (common_data->verbose > 1)
-                   curl_easy_setopt(easyhandle, CURLOPT_VERBOSE, 1);
-
-  curl_easy_setopt(easyhandle, CURLOPT_WRITEHEADER,   &header_data);
-  curl_easy_setopt(easyhandle, CURLOPT_HEADERFUNCTION, headers_callback);
-
-  curl_easy_setopt(easyhandle, CURLOPT_ERRORBUFFER, common_data->errorbuf);
-
-  set_std_opts(easyhandle, common_data);
-
-  for (isrc=0; sources[isrc] != NULL; ++isrc)
-     {
-       if (common_data->verbose > 0)
-            fprintf(stderr, "Listing %s\n", sources[isrc]);
-            
-       if (sources[1] != NULL) printf("\n%s:\n", sources[isrc]);
-
-       curl_easy_setopt(easyhandle, CURLOPT_URL, sources[isrc]);
-
-       if (sources[isrc][strlen(sources[isrc])-1] == '/')
-         {
-           isdir = 1;
-           curl_easy_setopt(easyhandle,CURLOPT_WRITEFUNCTION,rawindex_callback);
-           curl_easy_setopt(easyhandle,CURLOPT_WRITEDATA,(void *) &rawindex);
-           curl_easy_setopt(easyhandle,CURLOPT_NOBODY,0);
-           rawindex.text      = NULL;
-           rawindex.used      = 0;
-           rawindex.allocated = 0;
-         }
-       else
-         {
-           isdir = 0;
-           curl_easy_setopt(easyhandle, CURLOPT_WRITEFUNCTION, NULL);
-           curl_easy_setopt(easyhandle, CURLOPT_WRITEDATA, NULL);
-           curl_easy_setopt(easyhandle, CURLOPT_NOBODY, 1);
-         }
-
-       header_data.gridauthonetime = NULL;
-       header_data.length_set   = 0;
-       header_data.modified_set = 0;
-       header_data.retcode      = 0;
-       thiserror = curl_easy_perform(easyhandle);
-       
-       if ((thiserror != 0) ||
-           (header_data.retcode <  200) ||
-           (header_data.retcode >= 300))
-         {
-           fprintf(stderr, "... curl error: %s (%d), HTTP error: %d\n",
-                   common_data->errorbuf, thiserror, header_data.retcode);
-           
-           if (thiserror != 0) anyerror = thiserror;
-           else                anyerror = header_data.retcode;
-         }
-       else if (isdir)
-         {
-           if (common_data->verbose > 0) 
-                  fprintf(stderr, "... OK (%d)\n", header_data.retcode);
-           
-           rawindex.text[rawindex.used] = '\0';
-
-           list  = index_to_dir_list(rawindex.text, sources[isrc]);
-           ilast = -1;
-
-           for (i=0; list[i].filename != NULL; ++i)
-              {
-                if (list[i].filename[0] == '.') continue;
-                
-                if (strncmp(list[i].filename, "mailto:", 7) == 0) continue;
-                
-                if ((ilast >= 0) && 
-                    (strcmp(list[i].filename, list[ilast].filename) == 0))
-                                                                 continue;
-                ilast=i;
-
-                if (islonglist)
-                  {
-                    if (!list[i].length_set || !list[i].modified_set)
-                      {
-                        curl_easy_setopt(easyhandle, CURLOPT_WRITEFUNCTION, 
-                                                                        NULL);
-                        curl_easy_setopt(easyhandle, CURLOPT_WRITEDATA, NULL);
-                        curl_easy_setopt(easyhandle, CURLOPT_NOBODY, 1);
-                        
-                        asprintf(&s, "%s%s", sources[isrc], list[i].filename);                        
-                        curl_easy_setopt(easyhandle, CURLOPT_URL, s);
-
-                        header_data.gridauthonetime = NULL;
-                        header_data.length_set   = 0;
-                        header_data.modified_set = 0;
-                        header_data.retcode = 0;
-                        thiserror = curl_easy_perform(easyhandle);                        
-                        free(s);
-                        
-                        if ((thiserror == 0) && 
-                            (header_data.retcode >= 200) &&
-                            (header_data.retcode <= 299))
-                          {
-                            if (header_data.length_set)
-                              {
-                                list[i].length_set = 1;
-                                list[i].length     = header_data.length;
-                              }
-                          
-                            if (header_data.modified_set)
-                              {
-                                list[i].modified_set = 1;
-                                list[i].modified     = header_data.modified;
-                              }
-                          }
-                      }
-
-                    if (list[i].length_set) printf("%10ld ", list[i].length);
-                    else fputs("         ? ", stdout);
-                    
-                    if (list[i].modified_set)
-                      {
-                        localtime_r(&(list[i].modified), &modified_tm);
-
-                        if (list[i].modified < now - 15552000)
-                             printf("%s %2d  %4d ", 
-                               months[modified_tm.tm_mon],
-                               modified_tm.tm_mday, 
-                               modified_tm.tm_year + 1900);
-                        else printf("%s %2d %02d:%02d ",
-                               months[modified_tm.tm_mon],
-                               modified_tm.tm_mday, 
-                               modified_tm.tm_hour,
-                               modified_tm.tm_min);
-                      }
-                    else fputs("  ?  ?     ? ", stdout);
-                  }
-
-                puts(list[i].filename);                  
-              }
-         }
-       else
-         {
-           if (islonglist)
-             {
-               printf("%10ld ", header_data.length);
-                    
-               localtime_r(&(header_data.modified), &modified_tm);
-
-               if (header_data.modified < now - 15552000)
-                         printf("%s %2d  %4d ", 
-                             months[modified_tm.tm_mon],
-                             modified_tm.tm_mday, 
-                             modified_tm.tm_year + 1900);
-               else printf("%s %2d %02d:%02d ",
-                             months[modified_tm.tm_mon],
-                             modified_tm.tm_mday, 
-                             modified_tm.tm_hour,
-                             modified_tm.tm_min);
-             }
-
-           puts(sources[isrc]);
-         }
-     }
-
-  curl_easy_cleanup(easyhandle);
-     
-  return anyerror;
-}
-
-#if (LIBCURL_VERSION_NUM < 0x070908)
-char *make_tmp_ca_roots(char *dir)
-/* libcurl before 7.9.8 doesnt support CURLOPT_CAPATH and the directory,
-   so we make a temporary file with the concatenated CA root certs: that
-   is, all the files in that directory which end in .0 */
-{
-  int    ofd, ifd, c;
-  size_t size;
-  char   tmp_ca_roots[] = "/tmp/.ca-roots-XXXXXX", buffer[4096], *s;
-  DIR   *rootsDIR;
-  struct dirent *root_ent;
-  
-  if ((rootsDIR = opendir(dir)) == NULL) return NULL;
-  
-  if ((ofd = mkstemp(tmp_ca_roots)) == -1)
-    {
-      closedir(rootsDIR);
-      return NULL;
-    }
-
-  while ((root_ent = readdir(rootsDIR)) != NULL)
-       {
-         if ((root_ent->d_name[0] != '.') &&
-             (strlen(root_ent->d_name) > 2) && 
-             (strncmp(&(root_ent->d_name[strlen(root_ent->d_name)-2]),
-                                                        ".0", 2) == 0))
-           {
-             asprintf(&s, "%s/%s", dir, root_ent->d_name);           
-             ifd = open(s, O_RDONLY);             
-             free(s);
-             
-             if (ifd != -1)
-               {
-                 while ((size = read(ifd, buffer, sizeof(buffer))) > 0)
-                                                 write(ofd, buffer, size);             
-                 close(ifd);
-               }
-           }
-       }
-
-  closedir(rootsDIR);
-  
-  if (close(ofd) == 0) return strdup(tmp_ca_roots);
-
-  unlink(tmp_ca_roots); /* try to clean up */
-  
-  return NULL;
-}
-#endif
-
-void printsyntax(char *argv0)
-{
-  char *p;
-  
-  p = rindex(argv0, '/');
-  if (p != NULL) ++p;
-  else           p = argv0;
-
-  fprintf(stderr, "%s [options]  Source-URL[s]  [Destination URL]\n"
-  "%s is one of a set of clients to fetch files or directory listings\n"
-"from remote servers using HTTP or HTTPS, or to put or delete files or\n"
-"directories onto remote servers using HTTPS. htcp is similar to scp(1)\n"
-"but uses HTTP/HTTPS rather than ssh as its transfer protocol.\n"
-"See the htcp(1) or http://www.gridsite.org/ for details.\n"
-"(Version: %s)\n", p, p, VERSION);
-}
-
-int main(int argc, char *argv[])
-{
-  char **sources, *destination = NULL, *executable, *p;
-  int    c, i, option_index, anyerror;
-  struct stat statbuf;
-  struct grst_stream_data common_data;
-  struct passwd *userpasswd;
-  struct option long_options[] = {     {"verbose",             0, 0, 'v'},
-                                       {"cert",                1, 0, 0},
-                                       {"key",                 1, 0, 0},
-                                       {"capath",              1, 0, 0},
-                                       {"delete",              0, 0, 0},
-                                       {"list",                0, 0, 0},
-                                       {"long-list",           0, 0, 0},
-                                       {"mkdir",               0, 0, 0},
-                                       {"no-verify",           0, 0, 0},
-                                       {"anon",                0, 0, 0},
-                                       {"downgrade-size",      1, 0, 0},
-//                                     {"streams",             1, 0, 0},
-//                                     {"blocksize",           1, 0, 0},
-//                                     {"recursive",           0, 0, 0},
-                                       {0, 0, 0, 0}  };
-
-#if (LIBCURL_VERSION_NUM < 0x070908)
-  char *tmp_ca_roots = NULL;
-#endif
-
-  if (argc == 1) 
-    {
-      printsyntax(argv[0]);
-      return 0;
-    }
-  common_data.cert      = NULL;
-  common_data.key       = NULL;
-  common_data.capath    = NULL;
-  common_data.method    = 0;
-  common_data.errorbuf  = malloc(CURL_ERROR_SIZE);
-  asprintf(&(common_data.useragent),
-                          "htcp/%s (http://www.gridsite.org/)", VERSION);
-  common_data.verbose   = 0;
-  common_data.noverify  = 0;
-  common_data.anonymous = 0;
-  common_data.downgrade = (long long) -1;
-  
-  while (1)
-       {
-         option_index = 0;
-
-         c = getopt_long(argc, argv, "v", long_options, &option_index);
-
-         if      (c == -1) break;
-         else if (c == 0)
-           {
-             if      (option_index == 1) common_data.cert      = optarg;
-             else if (option_index == 2) common_data.key       = optarg; 
-             else if (option_index == 3) common_data.capath    = optarg;
-             else if (option_index == 4) common_data.method    = HTCP_DELETE;
-             else if (option_index == 5) common_data.method    = HTCP_LIST;
-             else if (option_index == 6) common_data.method    = HTCP_LONGLIST;
-             else if (option_index == 7) common_data.method    = HTCP_MKDIR;
-             else if (option_index == 8) common_data.noverify  = 1;
-             else if (option_index == 9) common_data.anonymous = 1;
-             else if (option_index ==10) common_data.downgrade = atoll(optarg);
-           }
-         else if (c == 'v') ++(common_data.verbose);
-       }
-
-  if (common_data.verbose > 0) 
-    {
-      p = rindex(argv[0], '/');
-      if (p != NULL) ++p;
-      else           p = argv[0];
-      fprintf(stderr, "%s version %s\n", p, VERSION);
-    }
-
-  if (common_data.anonymous) /* prevent any use of user certs */
-    {
-      common_data.cert = NULL;
-      common_data.key  = NULL;
-    }  
-  else if ((common_data.cert == NULL) && (common_data.key != NULL)) 
-           common_data.cert = common_data.key;
-  else if ((common_data.cert != NULL) && (common_data.key == NULL))
-           common_data.key = common_data.cert;
-  else if ((common_data.cert == NULL) && (common_data.key == NULL))
-    {
-      common_data.cert = getenv("X509_USER_PROXY");
-      if (common_data.cert != NULL) common_data.key = common_data.cert;
-      else
-        {
-          asprintf(&(common_data.cert), "/tmp/x509up_u%d", geteuid());
-          
-          /* one fine day, we will check the proxy file for expiry too ... */
-          
-          if (stat(common_data.cert, &statbuf) == 0)
-                     common_data.key = common_data.cert;                     
-          else
-            {
-              common_data.cert = getenv("X509_USER_CERT");
-              common_data.key  = getenv("X509_USER_KEY");
-              
-              userpasswd = getpwuid(geteuid());
-              
-              if ((common_data.cert == NULL) &&
-                  (userpasswd != NULL) &&
-                  (userpasswd->pw_dir != NULL))
-                asprintf(&(common_data.cert), "%s/.globus/usercert.pem", 
-                                                    userpasswd->pw_dir);
-              
-              if ((common_data.key == NULL) &&
-                  (userpasswd != NULL) &&
-                  (userpasswd->pw_dir != NULL))
-                asprintf(&(common_data.key), "%s/.globus/userkey.pem", 
-                                                    userpasswd->pw_dir);              
-            }            
-        }    
-    }
-
-  if (common_data.capath == NULL) common_data.capath = getenv("X509_CERT_DIR");
-
-  if (common_data.capath == NULL) 
-                        common_data.capath = "/etc/grid-security/certificates";
-
-#if (LIBCURL_VERSION_NUM < 0x070908)
-  /* libcurl before 7.9.8 doesnt support CURLOPT_CAPATH and the directory */
-
-  if ((common_data.capath != NULL) && 
-      (stat(common_data.capath, &statbuf) == 0) && S_ISDIR(statbuf.st_mode))
-    {
-      tmp_ca_roots = make_tmp_ca_roots(common_data.capath);
-      common_data.capath = tmp_ca_roots;
-    }
-#endif
-
-  executable = rindex(argv[0], '/');
-  if (executable != NULL) executable++;
-  else                    executable = argv[0];
-  
-  if (common_data.method == 0) /* command-line options override exec name */
-    {
-      if      (strcmp(executable,"htls")==0) common_data.method=HTCP_LIST;
-      else if (strcmp(executable,"htll")==0) common_data.method=HTCP_LONGLIST;
-      else if (strcmp(executable,"htrm")==0) common_data.method=HTCP_DELETE;
-      else if (strcmp(executable,"htmkdir")==0) common_data.method=HTCP_MKDIR;
-    }
-
-  if ((common_data.method == HTCP_DELETE) || 
-      (common_data.method == HTCP_LIST)   ||
-      (common_data.method == HTCP_MKDIR)  ||
-      (common_data.method == HTCP_LONGLIST))
-    {
-      if (optind >= argc)
-          {
-            fprintf(stderr, "Must give at least 1 non-option argument\n\n"); 
-            printsyntax(argv[0]);
-            return CURLE_URL_MALFORMAT;
-          }
-          
-      sources = (char **) malloc(sizeof(char *) * (1 + argc - optind));  
-      for (i=0; i < argc - optind; ++i) 
-         {
-           sources[i] = argv[optind + i];
-           
-           if ((common_data.method == HTCP_MKDIR) &&
-               (sources[i][strlen(sources[i])-1] != '/'))
-             {
-               fprintf(stderr, "Argument \"%s\" is not a "
-                       "directory URL (no trailing /)\n\n", sources[i]);
-               printsyntax(argv[0]);
-               return CURLE_URL_MALFORMAT;
-             }
-         }
-
-      sources[i]  = NULL;  
-
-      if (common_data.method == HTCP_DELETE) 
-                            anyerror = do_deletes(sources, &common_data);
-      else if (common_data.method == HTCP_MKDIR) 
-                            anyerror = do_mkdirs(sources, &common_data);
-      else if (common_data.method == HTCP_LONGLIST) 
-                            anyerror = do_listings(sources, &common_data, 1);
-      else anyerror = do_listings(sources, &common_data, 0);
-
-      if (anyerror > 99) anyerror = CURLE_HTTP_RETURNED_ERROR;
-
-      return anyerror;
-    }
-
-  if (optind >= argc - 1) 
-    {
-      fputs("Must give at least 2 non-option arguments\n\n", stderr);
-      printsyntax(argv[0]);
-      return CURLE_URL_MALFORMAT;
-    }
-    
-  sources = (char **) malloc(sizeof(char *) * (argc - optind));
-  
-  for (i=0; i < (argc - optind - 1); ++i) 
-     {
-       if (strncmp(argv[optind + i], "file:", 5) == 0)
-            sources[i] = &argv[optind + i][5];
-       else sources[i] =  argv[optind + i];
-       
-       if (sources[i][0] == '\0') 
-         {
-           fprintf(stderr, "Source argument %d is empty\n\n", i + 1);
-           printsyntax(argv[0]);
-           return CURLE_URL_MALFORMAT;
-         }
-     }
-  
-  sources[i]  = NULL;  
-
-  if (strncmp(argv[optind + i], "file:", 5) == 0)
-       destination = &argv[optind + i][5];
-  else destination =  argv[optind + i];
-  
-  if (destination[0] == '\0')
-    {
-      fputs("Destination argument is empty\n\n", stderr);
-      printsyntax(argv[0]);
-      return CURLE_URL_MALFORMAT;
-    }
-
-  if ((argc - optind > 2) && (destination[strlen(destination)-1] != '/'))
-    {
-      fputs("For multiple sources, destination "
-            "must be a directory (end in /)\n\n", stderr);
-      printsyntax(argv[0]);
-      return CURLE_URL_MALFORMAT;
-    }
-  
-  if ((strncmp(destination, "http://",  7) == 0) ||
-      (strncmp(destination, "https://", 8) == 0)) 
-       common_data.method = HTCP_PUT;
-  else common_data.method = HTCP_GET;
-  
-  for (i=0; sources[i] != NULL; ++i)
-         {
-           if ((common_data.method == HTCP_PUT) && 
-               ((strncmp(sources[i], "http://",  7) == 0) ||
-                (strncmp(sources[i], "https://", 8) == 0)))
-             {
-               fputs("Cannot have both source and destination remote\n\n",stderr);
-               printsyntax(argv[0]);
-               return CURLE_URL_MALFORMAT;
-             }
-         
-           if ((common_data.method == HTCP_GET) && 
-               ((strncmp(sources[i], "http://",  7) != 0) &&
-                (strncmp(sources[i], "https://", 8) != 0)))
-             {
-               fputs("Cannot have both source and "
-                     "destination local (for now)\n\n",stderr);
-               printsyntax(argv[0]);
-               return CURLE_URL_MALFORMAT;
-             }
-         }
-         
-  anyerror = do_copies(sources, destination, &common_data);
-  if (anyerror > 99) anyerror = CURLE_HTTP_RETURNED_ERROR;
-  
-  return anyerror;
-}
diff --git a/org.gridsite.core/src/htproxyput.c b/org.gridsite.core/src/htproxyput.c
deleted file mode 100644 (file)
index 834bea2..0000000
+++ /dev/null
@@ -1,565 +0,0 @@
-/*
-   Copyright (c) 2002-4, Andrew McNab, University of Manchester
-   All rights reserved.
-
-   Redistribution and use in source and binary forms, with or
-   without modification, are permitted provided that the following
-   conditions are met:
-
-     o Redistributions of source code must retain the above
-       copyright notice, this list of conditions and the following
-       disclaimer. 
-     o 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. 
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-*/
-
-/*
-
-Build with:
-
-gcc -lcurl -lssl -lcrypto -o grst-proxy-put grst-proxy-put.c libgridsite.a
-
-http://www.gridpp.ac.uk/authz/gridsite/
-
-*/
-
-#ifndef VERSION
-#define VERSION "0.0.0"
-#endif
-
-#define _GNU_SOURCE
-
-#include <pwd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <curl/curl.h>
-#include <curl/types.h>
-#include <curl/easy.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#include <openssl/x509.h>
-#include <openssl/x509v3.h>
-#include <openssl/err.h>
-#include <openssl/pem.h>
-
-#include <curl/curl.h>
-#include <curl/types.h>
-#include <curl/easy.h>
-
-#include <getopt.h>
-
-#include "gridsite.h"
-
-#include "soapH.h"
-#include "delegation.nsmap"
-
-#define USE_SOAP               0
-#define USE_G_HTTPS            1
-#define HTPROXY_PUT            0
-
-int debugfunction(CURL *curl, curl_infotype type, char *s, size_t n, void *p)
-{
-  fwrite(s, sizeof(char), n, (FILE *) p);
-
-  return 0;
-}
-
-size_t parsegprheaders(void *ptr, size_t size, size_t nmemb, void *p)
-{
-  int   i;
-  
-  if ((size * nmemb > 15) && 
-      (strncmp((char *) ptr, "Delegation-ID: ", 15) == 0))
-    {
-      *((char **) p) = malloc( size * nmemb - 14 );
-      
-      memcpy(*((char **) p), &(((char *) ptr)[15]), size * nmemb - 15);
-  
-      for (i=0; i < size * nmemb - 15; ++i) 
-        if (((*((char **) p))[i] == '\n') || ((*((char **) p))[i] == '\r'))
-          {
-            (*((char **) p))[i] = '\0'; /* drop trailing newline */
-            break;
-          }
-          
-      (*((char **) p))[size * nmemb - 15] = '\0';
-    }
-    
-  return size * nmemb;
-}
-
-struct gprparams { char *req; size_t len; } ;
-
-size_t storegprbody(void *ptr, size_t size, size_t nmemb, void *p)
-{
-  ((struct gprparams *) p)->req = realloc( ((struct gprparams *) p)->req,
-                          ((struct gprparams *) p)->len + size * nmemb + 1);
-
-  memcpy( &((((struct gprparams *) p)->req)[((struct gprparams *) p)->len]),
-           ptr, size * nmemb);
-         
-  ((struct gprparams *) p)->len += size * nmemb;
-
-  return size * nmemb;
-}
-
-int GRSTgetProxyReq(CURL *curl, FILE *debugfp, char *delegid, char **reqtxt, 
-                    char *requrl, char *cert, char *key)
-{
-  char     *delheader;
-  struct    curl_slist *headerlist = NULL;
-  CURLcode  res;
-  struct    gprparams params;
-
-  params.req = NULL;
-  params.len = 0;
-
-  curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *) &params);
-  curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, storegprbody);
-
-  curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE,  "PEM");
-  curl_easy_setopt(curl, CURLOPT_SSLCERT,      cert);
-
-  curl_easy_setopt(curl, CURLOPT_SSLKEYTYPE,   "PEM");
-  curl_easy_setopt(curl, CURLOPT_SSLKEY,       key);    
-  curl_easy_setopt(curl, CURLOPT_SSLKEYPASSWD, NULL);
-
-//  curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, parsegprheaders);
-//  curl_easy_setopt(curl, CURLOPT_WRITEHEADER,    (void *) delegid);
-  
-  curl_easy_setopt(curl, CURLOPT_CAPATH, "/etc/grid-security/certificates/");
-
-  curl_easy_setopt(curl, CURLOPT_URL,           requrl);
-  curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET-PROXY-REQ");
-
-  curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER,0);
-  curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST,0);
-
-  asprintf(&delheader, "Delegation-ID: %s", delegid);
-  headerlist = curl_slist_append(headerlist, delheader);                                                                           
-  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
-
-  if (debugfp != NULL)
-    {
-      curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);       
-      curl_easy_setopt(curl, CURLOPT_DEBUGDATA,     debugfp);
-      curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, debugfunction);
-    }
-       
-  res = curl_easy_perform(curl);
-  
-  if (params.req != NULL)
-    {
-      params.req[params.len] = '\0';
-      *reqtxt = params.req;
-    }
-  else *reqtxt = NULL;
-  
-  return (int) res;
-}
-
-struct ppcparams{ char *cert; size_t len; };
-
-size_t getppcbody(void *ptr, size_t size, size_t nmemb, void *p)
-{
-  size_t i;
-  
-  if (((struct ppcparams *) p)->len == 0) return 0;
-  
-  if (size * nmemb < ((struct ppcparams *) p)->len) i = size * nmemb;
-  else                             i = ((struct ppcparams *) p)->len;
-  
-  memcpy(ptr, ((struct ppcparams *) p)->cert, i);
-  
-  ((struct ppcparams *) p)->len -= i;   
-  ((struct ppcparams *) p)->cert = &((((struct ppcparams *) p)->cert)[i+1]);
-     
-  return i;
-}
-
-int GRSTputProxyCerts(CURL *curl, FILE *debugfp, char *delegid, char *certtxt,
-                      char *requrl, char *cert, char *key)
-{
-  CURLcode    res;
-  char       *delheader;
-  long        httpcode;
-  struct curl_slist *headerlist = NULL;
-  struct ppcparams params;
-
-  params.cert = certtxt;
-  params.len  = strlen(certtxt);
-
-  curl_easy_setopt(curl, CURLOPT_READDATA,     &params);
-  curl_easy_setopt(curl, CURLOPT_READFUNCTION, getppcbody);
-  curl_easy_setopt(curl, CURLOPT_INFILESIZE,   strlen(certtxt));
-  curl_easy_setopt(curl, CURLOPT_UPLOAD,       1);
-
-  curl_easy_setopt(curl, CURLOPT_NOBODY,       1);  
-
-  curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE,  "PEM");
-  curl_easy_setopt(curl, CURLOPT_SSLCERT,      cert);
-
-  curl_easy_setopt(curl, CURLOPT_SSLKEYTYPE,   "PEM");
-  curl_easy_setopt(curl, CURLOPT_SSLKEY,       key);    
-//  curl_easy_setopt(curl, CURLOPT_SSLKEYPASSWD, NULL);
-
-  curl_easy_setopt(curl, CURLOPT_CAPATH, "/etc/grid-security/certificates/");
-
-  curl_easy_setopt(curl, CURLOPT_URL,           requrl);
-  curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT-PROXY-CERT");
-
-  headerlist = curl_slist_append(headerlist, 
-                 "Content-Type: application/x-x509-user-cert-chain");
-                                   
-  asprintf(&delheader, "Delegation-ID: %s", delegid);
-  headerlist = curl_slist_append(headerlist, delheader);
-  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
-  
-curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
-curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);
-
-  if (debugfp != NULL)
-    {
-      curl_easy_setopt(curl, CURLOPT_VERBOSE,       1);       
-      curl_easy_setopt(curl, CURLOPT_DEBUGDATA,     debugfp);
-      curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, debugfunction);
-    } 
-     
-  res = curl_easy_perform(curl);
-
-  curl_easy_getinfo(curl, CURLINFO_HTTP_CODE, &httpcode);
-  
-  curl_slist_free_all(headerlist);
-
-  free(delheader);
-  
-  return (int) res;
-}
-
-
-#if (LIBCURL_VERSION_NUM < 0x070908)
-char *make_tmp_ca_roots(char *dir)
-/* libcurl before 7.9.8 doesnt support CURLOPT_CAPATH and the directory,
-   so we make a temporary file with the concatenated CA root certs: that
-   is, all the files in that directory which end in .0 */
-{
-  int    ofd, ifd, c;
-  size_t size;
-  char   tmp_ca_roots[] = "/tmp/.ca-roots-XXXXXX", buffer[4096], *s;
-  DIR   *rootsDIR;
-  struct dirent *root_ent;
-
-  if ((rootsDIR = opendir(dir)) == NULL) return NULL;
-
-  if ((ofd = mkstemp(tmp_ca_roots)) == -1)
-    {
-      closedir(rootsDIR);
-      return NULL;
-    }
-
-  while ((root_ent = readdir(rootsDIR)) != NULL)
-       {
-         if ((root_ent->d_name[0] != '.') &&
-             (strlen(root_ent->d_name) > 2) &&
-             (strncmp(&(root_ent->d_name[strlen(root_ent->d_name)-2]),
-                                                        ".0", 2) == 0))
-           {
-             asprintf(&s, "%s/%s", dir, root_ent->d_name);
-             ifd = open(s, O_RDONLY);
-             free(s);
-
-             if (ifd != -1)
-               {
-                 while ((size = read(ifd, buffer, sizeof(buffer))) > 0)
-                                                 write(ofd, buffer, size);
-
-                 close(ifd);
-               }
-           }
-       }
-
-  closedir(rootsDIR);
-
-  if (close(ofd) == 0) return strdup(tmp_ca_roots);
-
-  unlink(tmp_ca_roots); /* try to clean up if errors */
-
-  return NULL;
-}
-#endif
-  
-void printsyntax(char *argv0)
-{
-  char *p;
-
-  p = rindex(argv0, '/');
-  if (p != NULL) ++p;
-  else           p = argv0;
-
-  fprintf(stderr, "%s [options] URL\n"
-          "(Version: %s)\n", p, VERSION);
-}
-  
-int main(int argc, char *argv[])
-{
-  char  *delegation_id = "", *reqtxt, *certtxt, *valid = NULL, 
-        *cert = NULL, *key = NULL, *capath = NULL, *keycert;
-  struct ns__putProxyResponse *unused;
-  int    option_index, c, protocol = USE_SOAP, noverify = 0, 
-         method = HTPROXY_PUT, verbose = 0, fd, minutes;
-  struct soap soap_get, soap_put;
-  FILE   *ifp, *ofp;
-  struct stat statbuf;
-  struct passwd *userpasswd; 
-  struct option long_options[] = {      {"verbose",     0, 0, 'v'},
-                                        {"cert",        1, 0, 0},
-                                        {"key",         1, 0, 0},
-                                        {"capath",      1, 0, 0},
-                                        {"soap",        0, 0, 0},
-                                        {"g-https",     0, 0, 0},
-                                        {"no-verify",   0, 0, 0},
-                                        {"valid",       1, 0, 0},
-                                        {"delegation-id",1, 0, 0},
-                                        {"put",         0, 0, 0},
-                                        {0, 0, 0, 0}  };
-  CURL *curl;
-
-  if (argc == 1)
-    {
-      printsyntax(argv[0]);
-      return 0;
-    }
-
-  while (1)
-       {
-         option_index = 0;
-                                                                                
-         c = getopt_long(argc, argv, "v", long_options, &option_index);
-
-         if      (c == -1) break;
-         else if (c == 0)
-           {
-             if      (option_index == 1) cert      = optarg;
-             else if (option_index == 2) key       = optarg;
-             else if (option_index == 3) capath    = optarg;
-             else if (option_index == 4) protocol  = USE_SOAP;
-             else if (option_index == 5) protocol  = USE_G_HTTPS;
-             else if (option_index == 6) noverify  = 1;
-             else if (option_index == 7) valid     = optarg;
-             else if (option_index == 8) delegation_id = optarg;
-             else if (option_index == 9) method    = HTPROXY_PUT;
-           }
-         else if (c == 'v') ++verbose;
-       }
-
-  if (optind + 1 != argc)
-    {
-      fprintf(stderr, "Must specify a target URL!\n");
-      return 1;
-    }
-    
-  if (valid == NULL) minutes = 60 * 12;
-  else minutes = atoi(valid);
-  
-  if (verbose) fprintf(stderr, "Proxy valid for %d minutes\n", minutes);
-  ERR_load_crypto_strings ();
-  OpenSSL_add_all_algorithms();
-
-  if      ((cert == NULL) && (key != NULL)) cert = key;
-  else if ((cert != NULL) && (key == NULL)) key = cert;
-  else if ((cert == NULL) && (key == NULL))
-    {
-      cert = getenv("X509_USER_PROXY");
-      if (cert != NULL) key = cert;
-      else
-        {
-          asprintf(&(cert), "/tmp/x509up_u%d", geteuid());
-                                                                                
-          /* one fine day, we will check the proxy file for 
-             expiry too to avoid suprises when we try to use it ... */
-
-          if (stat(cert, &statbuf) == 0) key = cert;
-          else
-            {
-              cert = getenv("X509_USER_CERT");
-              key  = getenv("X509_USER_KEY");
-                                                                                
-              userpasswd = getpwuid(geteuid());
-                                                                                
-              if ((cert == NULL) &&
-                  (userpasswd != NULL) &&
-                  (userpasswd->pw_dir != NULL))
-                asprintf(&(cert), "%s/.globus/usercert.pem",
-                                                    userpasswd->pw_dir);
-                                                                                
-              if ((key == NULL) &&
-                  (userpasswd != NULL) &&
-                  (userpasswd->pw_dir != NULL))
-                asprintf(&(key), "%s/.globus/userkey.pem",
-                                                    userpasswd->pw_dir);
-                                                                                
-            }
-        }
-    }
-                                                                                
-  if (capath == NULL) capath = getenv("X509_CERT_DIR");
-  if (capath == NULL) capath = "/etc/grid-security/certificates";
-
-  if (verbose) fprintf(stderr, "key=%s\ncert=%s\ncapath=%s\n",
-                       key, cert, capath);
-
-#if (LIBCURL_VERSION_NUM < 0x070908)
-  /* libcurl before 7.9.8 doesnt support CURLOPT_CAPATH and the directory */
-
-  if ((capath != NULL) &&
-      (stat(capath, &statbuf) == 0) && S_ISDIR(statbuf.st_mode))
-    {
-      tmp_ca_roots = make_tmp_ca_roots(capath);
-      capath = tmp_ca_roots;
-    }
-#endif
-
-  if (protocol == USE_G_HTTPS)
-    {
-      if (verbose) fprintf(stderr, "Using G-HTTPS delegation protocol\n");
-
-      if (verbose) fprintf(stderr, "Delegation-ID: %s\n", delegation_id);
-
-      curl_global_init(CURL_GLOBAL_DEFAULT);   
-      curl = curl_easy_init();
-      
-//  curl_easy_setopt(curl, CURLOPT_SSLKEYPASSWD, NULL);
-
-      GRSTgetProxyReq(curl, stderr, delegation_id, &reqtxt, 
-                      argv[optind], cert, key);
-  
-      if (GRSTx509MakeProxyCert(&certtxt, stderr, reqtxt, cert, key, minutes)
-          != GRST_RET_OK)     
-        {
-          return 1;
-        }
-
-      GRSTputProxyCerts(curl, stderr, delegation_id, certtxt, 
-                        argv[optind], cert, key);
-
-      curl_easy_cleanup(curl);  
-      curl_global_cleanup();
-  
-      return 0;
-    }
-  else if (protocol == USE_SOAP)
-    {
-      if (strcmp(key, cert) != 0) /* we have to concatenate for gSOAP */
-        {
-          keycert = strdup("/tmp/XXXXXX");
-        
-          fd = mkstemp(keycert);          
-          ofp = fdopen(fd, "w");
-          
-          ifp = fopen(key, "r");          
-          while ((c = fgetc(ifp)) != EOF) fputc(c, ofp);          
-          fclose(ifp);
-          
-          ifp = fopen(cert, "r");          
-          while ((c = fgetc(ifp)) != EOF) fputc(c, ofp);          
-          fclose(ifp);
-          
-          fclose(ofp);       
-          
-          if (verbose) fprintf(stderr, "Created %s key/cert file\n", keycert);            
-        }
-      else keycert = key;
-
-      if (verbose) 
-        {
-          fprintf(stderr, "Using SOAP delegation protocol\n");
-          fprintf(stderr, "Delegation-ID: %s\n", delegation_id);
-          fprintf(stderr, "Send getProxyReq to service\n");
-        }
-
-      soap_init(&soap_get);
-  
-      if (soap_ssl_client_context(&soap_get,
-                                  SOAP_SSL_DEFAULT,
-                                  keycert, 
-                                  "",
-                                  NULL,
-                                  capath,
-                                  NULL))
-        {
-          soap_print_fault(&soap_get, stderr);
-          return 1;
-        } 
-
-      soap_call_ns__getProxyReq(&soap_get, 
-                                argv[optind],  /* HTTPS url of service */
-                                "",            /* no password on proxy */
-                                delegation_id, 
-                                &reqtxt);
-      
-      if (soap_get.error)
-        {
-          soap_print_fault(&soap_get, stderr);
-          return 1;        
-        }
-        
-      if (verbose) fprintf(stderr, "reqtxt:\n%s", reqtxt);
-      
-      if (GRSTx509MakeProxyCert(&certtxt, stderr, reqtxt, cert, key, minutes) 
-          != GRST_RET_OK)
-        {
-          return 1;
-        }
-
-      soap_init(&soap_put);
-  
-      if (verbose) fprintf(stderr, "Send putProxy to service:\n%s\n", certtxt);
-
-      if (soap_ssl_client_context(&soap_put,
-                                  SOAP_SSL_DEFAULT,
-                                  keycert, 
-                                  "",
-                                  NULL,
-                                  capath,
-                                  NULL))
-        {
-          soap_print_fault(&soap_put, stderr);
-          return 1;
-        } 
-
-      soap_call_ns__putProxy(&soap_put, argv[optind], "", delegation_id, 
-                             certtxt, unused);      
-      if (soap_put.error)
-        {
-          soap_print_fault(&soap_put, stderr);
-          return 1;        
-        }
-
-      return 0;
-    }  
-
-  /* weirdness */
-}
-
diff --git a/org.gridsite.core/src/mod_gridsite.c b/org.gridsite.core/src/mod_gridsite.c
deleted file mode 100644 (file)
index 78d853c..0000000
+++ /dev/null
@@ -1,2357 +0,0 @@
-/*
-   Copyright (c) 2003-4, Andrew McNab, University of Manchester
-   All rights reserved.
-
-   Redistribution and use in source and binary forms, with or
-   without modification, are permitted provided that the following
-   conditions are met:
-
-     o Redistributions of source code must retain the above
-       copyright notice, this list of conditions and the following
-       disclaimer. 
-     o 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. 
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-*/
-
-/*------------------------------------------------------------------*
- * This program is part of GridSite: http://www.gridsite.org/       *
- *------------------------------------------------------------------*/
-
-#ifndef VERSION
-#define VERSION "x.x.x"
-#endif
-
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
-#include <apr_strings.h>
-
-#include <ap_config.h>
-#include <httpd.h>
-#include <http_config.h>
-#include <http_core.h>
-#include <http_log.h>
-#include <http_protocol.h>
-#include <http_request.h>
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>              
-#include <malloc.h>
-#include <stdlib.h>
-#include <string.h>
-#include <dirent.h>
-#include <ctype.h>
-#include <time.h>
-
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-
-
-#include "mod_ssl-private.h"
-
-#include "gridsite.h"
-
-#ifndef UNSET
-#define UNSET -1
-#endif
-
-module AP_MODULE_DECLARE_DATA gridsite_module;
-
-typedef struct
-{
-   int   auth;
-   int   envs;
-   int   format;
-   int   indexes;
-   char *indexheader;
-   int   gridsitelink;
-   char *adminfile;
-   char *adminuri;
-   char *helpuri;
-   char *dnlists;
-   char *dnlistsuri;
-   char *adminlist;
-   int   gsiproxylimit;
-   char *unzip;
-   char *methods;
-   char *editable;
-   char *headfile;
-   char *footfile;
-   int   downgrade;
-   char *authcookiesdir;
-   int   soap2cgi;
-}  mod_gridsite_cfg; /* per-directory config choices */
-
-
-typedef struct
-{
-  xmlDocPtr doc;
-//  char *outbuffer;
-} soap2cgi_ctx; /* store per-request context for Soap2cgi in/out filters */
-
-static const char Soap2cgiFilterName[]="Soap2cgiFilter";
-
-static void mod_gridsite_soap2cgi_insert(request_rec *r)
-{
-    mod_gridsite_cfg *conf;
-    soap2cgi_ctx     *ctx;
-    
-    conf = (mod_gridsite_cfg *) ap_get_module_config(r->per_dir_config,
-                                                      &gridsite_module);
-                                                      
-    if (conf->soap2cgi) 
-      {
-        ctx = (soap2cgi_ctx *) malloc(sizeof(soap2cgi_ctx));        
-        ctx->doc = NULL;
-        
-        ap_add_output_filter(Soap2cgiFilterName, ctx, r, r->connection);
-
-        ap_add_input_filter(Soap2cgiFilterName, NULL, r, r->connection);
-      }
-}
-
-xmlNodePtr find_one_child(xmlNodePtr parent_node, char *name)
-{
-    xmlNodePtr cur;
-
-    for (cur = parent_node->children; cur != NULL; cur = cur->next)
-       {
-         if ((cur->type == XML_ELEMENT_NODE) &&
-             (strcmp(cur->name, name) == 0)) return cur;
-       }
-
-    return NULL;
-}
-
-int add_one_node(xmlDocPtr doc, char *line)
-{
-    char *p, *name, *aftername, *attrname = NULL, *value = NULL;
-    xmlNodePtr cur, cur_child;
-
-    cur = xmlDocGetRootElement(doc);
-
-    p = index(line, '=');
-    if (p == NULL) return 1;
-
-    *p = '\0';
-    value = &p[1];
-
-    name = line;
-
-    while (1) /* go through each .-deliminated segment of line[] */
-         {
-           if ((p = index(name, '.')) != NULL)
-             {
-               *p = '\0';
-               aftername = &p[1];
-             }
-           else aftername = &name[strlen(name)];
-
-           if ((p = index(name, '_')) != NULL)
-             {
-               *p = '\0';
-               attrname = &p[1];
-             }
-
-           cur_child = find_one_child(cur, name);
-
-           if (cur_child == NULL)
-                    cur_child = xmlNewChild(cur, NULL, name, NULL);
-
-           cur = cur_child;
-
-           name = aftername;
-
-           if (attrname != NULL)
-             {
-               xmlSetProp(cur, attrname, value);
-               return 0;
-             }
-
-           if (*name == '\0')
-             {
-               xmlNodeSetContent(cur, value);
-               return 0;
-             }             
-         }
-}
-
-static apr_status_t mod_gridsite_soap2cgi_out(ap_filter_t *f,
-                                              apr_bucket_brigade *bbIn)
-{
-    char        *p, *name, *outbuffer;
-    request_rec *r = f->r;
-    conn_rec    *c = r->connection;
-    apr_bucket         *bucketIn, *pbktEOS;
-    apr_bucket_brigade *bbOut;
-
-    const char *data;
-    apr_size_t len;
-    char *buf;
-    apr_size_t n;
-    apr_bucket *pbktOut;
-
-    soap2cgi_ctx *ctx;
-    xmlNodePtr   root_node = NULL;
-    xmlBufferPtr buff;
-
-    ctx = (soap2cgi_ctx *) f->ctx;
-
-// LIBXML_TEST_VERSION;
-
-    bbOut = apr_brigade_create(r->pool, c->bucket_alloc);
-
-    if (ctx->doc == NULL)
-      {
-        ctx->doc = xmlNewDoc("1.0");
-             
-        root_node = xmlNewNode(NULL, "Envelope");
-        xmlDocSetRootElement(ctx->doc, root_node);
-                                                                                
-        xmlNewChild(root_node, NULL, "Header", NULL);
-        xmlNewChild(root_node, NULL, "Body",   NULL);
-      }
-    
-    apr_brigade_pflatten(bbIn, &outbuffer, &len, r->pool);
-       
-    /* split up buffer and feed each line to add_one_node() */
-    
-    name = outbuffer;
-    
-    while (*name != '\0')
-         {
-           p = index(name, '\n');
-           if (p != NULL) 
-             {
-               *p = '\0';
-               ++p;             
-             }
-           else p = &name[strlen(name)]; /* point to final NUL */
-           
-           add_one_node(ctx->doc, name);
-           
-           name = p;
-         }
-
-    APR_BRIGADE_FOREACH(bucketIn, bbIn)
-       {
-         if (APR_BUCKET_IS_EOS(bucketIn))
-           {
-             /* write out XML tree we have built */
-
-             buff = xmlBufferCreate();
-             xmlNodeDump(buff, ctx->doc, root_node, 0, 0);
-
-// TODO: simplify/reduce number of copies or libxml vs APR buffers?
-
-             buf = (char *) xmlBufferContent(buff);
-
-             pbktOut = apr_bucket_heap_create(buf, strlen(buf), NULL, 
-                                              c->bucket_alloc);
-
-             APR_BRIGADE_INSERT_TAIL(bbOut, pbktOut);
-       
-             xmlBufferFree(buff);
-
-             pbktEOS = apr_bucket_eos_create(c->bucket_alloc);
-             APR_BRIGADE_INSERT_TAIL(bbOut, pbktEOS);
-
-             continue;
-           }
-       }
-       
-    return ap_pass_brigade(f->next, bbOut);
-}
-
-static apr_status_t mod_gridsite_soap2cgi_in(ap_filter_t *f,
-                                             apr_bucket_brigade *pbbOut,
-                                             ap_input_mode_t eMode,
-                                             apr_read_type_e eBlock,
-                                             apr_off_t nBytes)
-{
-    request_rec *r = f->r;
-    conn_rec *c = r->connection;
-//    CaseFilterInContext *pCtx;
-    apr_status_t ret;
-
-#ifdef NEVERDEFINED
-
-    ret = ap_get_brigade(f->next, pCtx->pbbTmp, eMode, eBlock, nBytes);    
-    if (!(pCtx = f->ctx)) {
-        f->ctx = pCtx = apr_palloc(r->pool, sizeof *pCtx);
-        pCtx->pbbTmp = apr_brigade_create(r->pool, c->bucket_alloc);
-    }
-    if (APR_BRIGADE_EMPTY(pCtx->pbbTmp)) {
-        ret = ap_get_brigade(f->next, pCtx->pbbTmp, eMode, eBlock, nBytes);
-        if (eMode == AP_MODE_EATCRLF || ret != APR_SUCCESS)
-            return ret;
-    }
-    while(!APR_BRIGADE_EMPTY(pCtx->pbbTmp)) {
-        apr_bucket *pbktIn = APR_BRIGADE_FIRST(pCtx->pbbTmp);
-        apr_bucket *pbktOut;
-        const char *data;
-        apr_size_t len;
-        char *buf;
-        int n;
-        /* It is tempting to do this...
-         * APR_BUCKET_REMOVE(pB);
-         * APR_BRIGADE_INSERT_TAIL(pbbOut,pB);
-         * and change the case of the bucket data, but that would be wrong
-         * for a file or socket buffer, for example...
-         */
-                                                                                
-        if(APR_BUCKET_IS_EOS(pbktIn)) {
-            APR_BUCKET_REMOVE(pbktIn);
-            APR_BRIGADE_INSERT_TAIL(pbbOut, pbktIn);
-            break;
-        }
-                                                                                
-        ret=apr_bucket_read(pbktIn, &data, &len, eBlock);
-        if(ret != APR_SUCCESS)
-            return ret;
-                                                                                
-        buf = malloc(len);
-        for(n=0 ; n < len ; ++n)
-            buf[n] = apr_toupper(data[n]);
-                                                                                
-        pbktOut = apr_bucket_heap_create(buf, len, 0, c->bucket_alloc);
-        APR_BRIGADE_INSERT_TAIL(pbbOut, pbktOut);
-        apr_bucket_delete(pbktIn);
-    }
-#endif
-                                                                                
-    return APR_SUCCESS;
-}
-
-char *make_admin_footer(request_rec *r, mod_gridsite_cfg *conf,
-                        int isdirectory)
-/*
-    make string holding last modified text and admin links
-*/
-{
-    char     *out, *https, *p, *dn = NULL, *file = NULL, *permstr = NULL, 
-             *temp, modified[99], *dir_uri, *grst_cred_0 = NULL;
-    GRSTgaclPerm  perm = GRST_PERM_NONE;
-    struct tm mtime_tm;
-    time_t    mtime_time;
-
-    https = (char *) apr_table_get(r->subprocess_env, "HTTPS");
-
-    dir_uri = apr_pstrdup(r->pool, r->uri);
-    p = rindex(dir_uri, '/');
-
-    if (p == NULL) return "";
-    
-    file = apr_pstrdup(r->pool, &p[1]);
-    p[1] = '\0';
-    /* dir_uri always gets both a leading and a trailing slash */
-       
-    out = apr_pstrdup(r->pool, "<p><small>\n");
-
-    if (!isdirectory)
-      {
-        mtime_time = apr_time_sec(r->finfo.mtime);
-
-        localtime_r(&mtime_time, &mtime_tm);
-        strftime(modified, sizeof(modified), 
-                 "%a&nbsp;%e&nbsp;%B&nbsp;%Y", &mtime_tm);    
-        temp = apr_psprintf(r->pool,"<hr>Last modified %s\n", modified);
-        out = apr_pstrcat(r->pool, out, temp, NULL);
-
-        if ((conf->adminuri != NULL) &&
-            (conf->adminuri[0] != '\0') &&
-            (conf->adminfile != NULL) &&
-            (conf->adminfile[0] != '\0') &&
-            (strncmp(file, GRST_HIST_PREFIX, sizeof(GRST_HIST_PREFIX)-1) != 0))
-          {
-            temp = apr_psprintf(r->pool, 
-                            ". <a href=\"%s?cmd=history&file=%s\">"
-                            "View&nbsp;page&nbsp;history</a>\n",
-                            conf->adminfile, file);
-            out = apr_pstrcat(r->pool, out, temp, NULL);
-          }
-      }
-
-    out = apr_pstrcat(r->pool, out, "<hr>", NULL);
-
-    if (r->connection->notes != NULL)
-         grst_cred_0 = (char *) 
-                       apr_table_get(r->connection->notes, "GRST_CRED_0");
-
-    if ((grst_cred_0 != NULL) && 
-        (strncmp(grst_cred_0, "X509USER ", sizeof("X509USER")) == 0))
-      {
-         p = index(grst_cred_0, ' ');
-         if (p != NULL)
-           {
-             p = index(++p, ' ');
-             if (p != NULL)
-               {
-                 p = index(++p, ' ');
-                 if (p != NULL)
-                   {
-                     p = index(++p, ' ');
-                     if (p != NULL) dn = p;
-                   }
-               }
-           }
-      }
-  
-    if (dn != NULL) 
-      {
-        temp = apr_psprintf(r->pool, "You are %s<br>\n", dn);
-        out = apr_pstrcat(r->pool, out, temp, NULL);
-               
-        if (r->notes != NULL)
-                permstr = (char *) apr_table_get(r->notes, "GRST_PERM");
-
-        if ((permstr != NULL) &&
-            (conf->adminuri != NULL) &&
-            (conf->adminuri[0] != '\0') &&
-            (conf->adminfile != NULL) &&
-            (conf->adminfile[0] != '\0'))
-          {
-            sscanf(permstr, "%d", &perm);
-            
-            if (!isdirectory &&
-                GRSTgaclPermHasWrite(perm) &&
-                (strncmp(file, GRST_HIST_PREFIX,
-                         sizeof(GRST_HIST_PREFIX) - 1) != 0))
-              {
-                temp = apr_psprintf(r->pool, 
-                     "<a href=\"%s?cmd=edit&file=%s\">"
-                     "Edit&nbsp;page</a> .\n", conf->adminfile, file);
-                out = apr_pstrcat(r->pool, out, temp, NULL);
-              }
-                 
-            if (GRSTgaclPermHasList(perm) || GRSTgaclPermHasWrite(perm))
-              {
-                temp = apr_psprintf(r->pool, 
-                 "<a href=\"%s%s?cmd=managedir\">Manage&nbsp;directory</a> .\n",
-                 dir_uri, conf->adminfile);
-
-                out = apr_pstrcat(r->pool, out, temp, NULL);
-              }                 
-          }
-      }
-    
-    if ((https != NULL) && (strcasecmp(https, "on") == 0))
-         temp = apr_psprintf(r->pool,
-                   "<a href=\"http://%s%s\">Switch&nbsp;to&nbsp;HTTP</a> \n", 
-                   r->server->server_hostname, r->unparsed_uri);
-    else temp = apr_psprintf(r->pool,
-                   "<a href=\"https://%s%s\">Switch&nbsp;to&nbsp;HTTPS</a> \n",
-                   r->server->server_hostname, r->unparsed_uri);
-    
-    out = apr_pstrcat(r->pool, out, temp, NULL);
-
-    if ((conf->helpuri != NULL) && (conf->helpuri[0] != '\0'))
-      {
-        temp = apr_psprintf(r->pool,
-                   ". <a href=\"%s\">Website&nbsp;Help</a>\n", conf->helpuri);
-        out = apr_pstrcat(r->pool, out, temp, NULL);
-      }
-
-    if ((!isdirectory) &&
-        (conf->adminuri != NULL) &&
-        (conf->adminuri[0] != '\0') &&
-        (conf->adminfile != NULL) &&
-        (conf->adminfile[0] != '\0'))
-      {
-        temp = apr_psprintf(r->pool, ". <a href=\"%s?cmd=print&file=%s\">"
-               "Print&nbsp;View</a>\n", conf->adminfile, file);
-        out = apr_pstrcat(r->pool, out, temp, NULL);
-      }
-
-    if (conf->gridsitelink)
-      {
-        temp = apr_psprintf(r->pool,
-           ". Built with <a href=\"http://www.gridsite.org/\">"
-           "GridSite</a>&nbsp;%s\n", VERSION);
-        out = apr_pstrcat(r->pool, out, temp, NULL);
-      }
-                     
-    out = apr_pstrcat(r->pool, out, "\n</small>\n", NULL);
-
-    return out;
-}
-
-int html_format(request_rec *r, mod_gridsite_cfg *conf)
-/* 
-    try to do GridSite formatting of .html files (NOT .shtml etc)
-*/
-{
-    int    i, fd, errstatus;
-    char  *buf, *p, *file, *s, *head_formatted, *header_formatted,
-          *body_formatted, *admin_formatted, *footer_formatted;
-    size_t length;
-    struct stat statbuf;
-    apr_file_t *fp;
-    
-    if (r->finfo.filetype == APR_NOFILE) return HTTP_NOT_FOUND;
-    
-    if (apr_file_open(&fp, r->filename, APR_READ, 0, r->pool) != 0)
-                                     return HTTP_INTERNAL_SERVER_ERROR;
-        
-    file = rindex(r->uri, '/');
-    if (file != NULL) ++file; /* file points to name without path */
-
-    buf = apr_palloc(r->pool, (size_t)(r->finfo.size + 1));
-    length = r->finfo.size;
-    apr_file_read(fp, buf, &length);
-    buf[r->finfo.size] = '\0';
-    apr_file_close(fp);
-
-    /* **** try to find a header file in this or parent directories **** */
-
-    /* first make a buffer big enough to hold path names we want to try */
-    fd = -1;
-    s = malloc(strlen(r->filename) + strlen(conf->headfile) + 1);
-    strcpy(s, r->filename);
-    
-    for (;;)
-       {
-         p = rindex(s, '/');
-         if (p == NULL) break; /* failed to find one */
-         p[1] = '\0';
-         strcat(p, conf->headfile);
-
-         fd = open(s, O_RDONLY);
-         if (fd != -1) break; /* found one */
-
-         *p = '\0';
-       }
-            
-    free(s);
-
-    if (fd == -1) /* not found, so set up not to output one */
-      {
-        head_formatted   = apr_pstrdup(r->pool, "");
-        header_formatted = apr_pstrdup(r->pool, "");
-        body_formatted   = buf;
-      }
-    else /* found a header file, so set up head and body to surround it */
-      {
-        fstat(fd, &statbuf);
-        header_formatted = apr_palloc(r->pool, statbuf.st_size + 1);
-        read(fd, header_formatted, statbuf.st_size);
-        header_formatted[statbuf.st_size] = '\0';
-        close(fd);
-
-        p = strstr(buf, "<body");
-        if (p == NULL) p = strstr(buf, "<BODY");
-        if (p == NULL) p = strstr(buf, "<Body");
-
-        if (p == NULL) 
-          {
-            head_formatted = apr_pstrdup(r->pool, "");
-            body_formatted = buf;
-          }
-        else
-          {
-            *p = '\0';
-            head_formatted = buf;
-            ++p;
-        
-            while ((*p != '>') && (*p != '\0')) ++p;
-
-            if (*p == '\0')
-              {
-                body_formatted = p;
-              }
-            else
-              {
-                *p = '\0';
-                ++p;
-                body_formatted = p;
-              }        
-          }
-      }
-
-    /* **** remove closing </body> tag from body **** */
-
-    p = strstr(body_formatted, "</body");
-    if (p == NULL) p = strstr(body_formatted, "</BODY");
-    if (p == NULL) p = strstr(body_formatted, "</Body");
-    
-    if (p != NULL) *p = '\0';
-
-    /* **** set up dynamic part of footer to go at end of body **** */
-
-    admin_formatted = make_admin_footer(r, conf, FALSE);
-    
-    /* **** try to find a footer file in this or parent directories **** */
-
-    /* first make a buffer big enough to hold path names we want to try */
-    fd = -1;
-    s  = malloc(strlen(r->filename) + strlen(conf->footfile));
-    strcpy(s, r->filename);
-    
-    for (;;)
-       {
-         p = rindex(s, '/');
-         if (p == NULL) break; /* failed to find one */
-    
-         p[1] = '\0';
-         strcat(p, conf->footfile);
-    
-         fd = open(s, O_RDONLY);
-         if (fd != -1) break; /* found one */
-
-         *p = '\0';
-       }
-            
-    free(s);
-
-    if (fd == -1) /* failed to find a footer, so set up empty default */
-      { 
-        footer_formatted = apr_pstrdup(r->pool, "");
-      }
-    else /* found a footer, so set up to use it */
-      {
-        fstat(fd, &statbuf);
-        footer_formatted = apr_palloc(r->pool, statbuf.st_size + 1);
-        read(fd, footer_formatted, statbuf.st_size);
-        footer_formatted[statbuf.st_size] = '\0';
-        close(fd);
-      }
-
-    /* **** can now calculate the Content-Length and output headers **** */
-      
-    length = strlen(head_formatted) + strlen(header_formatted) + 
-             strlen(body_formatted) + strlen(admin_formatted)  +
-             strlen(footer_formatted);
-
-    ap_set_content_length(r, length);
-    ap_set_content_type(r, "text/html");
-
-    /* ** output the HTTP body (HTML Head+Body) ** */
-
-    ap_rputs(head_formatted,   r);
-    ap_rputs(header_formatted, r);
-    ap_rputs(body_formatted,   r);
-    ap_rputs(admin_formatted,  r);
-    ap_rputs(footer_formatted, r);
-
-    return OK;
-}
-
-int html_dir_list(request_rec *r, mod_gridsite_cfg *conf)
-/* 
-    output HTML directory listing, with level of formatting controlled
-    by GridSiteHtmlFormat/conf->format
-*/
-{
-    int    i, fd, n;
-    char  *buf, *p, *s, *head_formatted, *header_formatted,
-          *body_formatted, *admin_formatted, *footer_formatted, *temp,
-           modified[99], *d_namepath, *indexheaderpath, *indexheadertext;
-    size_t length;
-    struct stat statbuf;
-    struct tm   mtime_tm;
-    struct dirent **namelist;
-    
-    if (r->finfo.filetype == APR_NOFILE) return HTTP_NOT_FOUND;
-        
-    head_formatted = apr_psprintf(r->pool, 
-      "<head><title>Directory listing %s</title></head>\n", r->uri);
-
-    if (conf->format)
-      {
-        /* **** try to find a header file in this or parent directories **** */
-
-        /* first make a buffer big enough to hold path names we want to try */
-        fd = -1;
-        s = malloc(strlen(r->filename) + strlen(conf->headfile) + 1);
-        strcpy(s, r->filename);
-    
-        for (;;)
-           {
-             p = rindex(s, '/');
-             if (p == NULL) break; /* failed to find one */
-             p[1] = '\0';
-             strcat(p, conf->headfile);
-    
-             fd = open(s, O_RDONLY);
-             if (fd != -1) break; /* found one */
-
-             *p = '\0';
-           }
-            
-        free(s);
-
-        if (fd == -1) /* not found, so set up to output sensible default */
-          {
-            header_formatted = apr_pstrdup(r->pool, "<body bgcolor=white>");
-          }
-        else /* found a header file, so set up head and body to surround it */
-          {
-            fstat(fd, &statbuf);
-            header_formatted = apr_palloc(r->pool, statbuf.st_size + 1);
-            read(fd, header_formatted, statbuf.st_size);
-            header_formatted[statbuf.st_size] = '\0';
-            close(fd);
-          }
-      }
-    else header_formatted = apr_pstrdup(r->pool, "<body bgcolor=white>");
-            
-    body_formatted = apr_psprintf(r->pool, 
-      "<h1>Directory listing %s</h1>\n", r->uri);
-      
-    if (conf->indexheader != NULL)
-      {
-        indexheaderpath = apr_psprintf(r->pool, "%s/%s", r->filename, 
-                                                         conf->indexheader);
-        fd = open(indexheaderpath, O_RDONLY);
-        if (fd != -1)
-          {
-            fstat(fd, &statbuf);
-            indexheadertext = apr_palloc(r->pool, statbuf.st_size + 1);
-            read(fd, indexheadertext, statbuf.st_size);
-            indexheadertext[statbuf.st_size] = '\0';
-            close(fd);
-            
-            body_formatted = apr_pstrcat(r->pool, body_formatted,
-                                         indexheadertext, NULL);
-          }
-      }
-
-    body_formatted = apr_pstrcat(r->pool, body_formatted, "<p><table>\n", NULL);
-
-    if (r->unparsed_uri[1] != '\0')
-     body_formatted = apr_pstrcat(r->pool, body_formatted, 
-        "<tr><td colspan=3>[<a href=\"../\">Parent directory</a>]</td></tr>\n", 
-         NULL);
-      
-    n = scandir(r->filename, &namelist, 0, versionsort);
-    while (n--)
-         {
-           if ((namelist[n]->d_name[0] != '.') && 
-               ((conf->indexheader == NULL) || 
-                (strcmp(conf->indexheader, namelist[n]->d_name) != 0)))
-             {
-               d_namepath = apr_psprintf(r->pool, "%s/%s", r->filename,
-                                                  namelist[n]->d_name);
-               stat(d_namepath, &statbuf);
-               
-               localtime_r(&(statbuf.st_mtime), &mtime_tm);
-               strftime(modified, sizeof(modified), 
-              "<td align=right>%R</td><td align=right>%e&nbsp;%b&nbsp;%y</td>",
-                        &mtime_tm);    
-                              
-               if (S_ISDIR(statbuf.st_mode))
-                    temp = apr_psprintf(r->pool, 
-                      "<tr><td><a href=\"%s/\" content-length=\"%ld\" "
-                      "last-modified=\"%ld\">"
-                      "%s/</a></td>"
-                      "<td align=right>%ld</td>%s</tr>\n", 
-                      namelist[n]->d_name, statbuf.st_size, statbuf.st_mtime,
-                      namelist[n]->d_name, 
-                      statbuf.st_size, modified);
-               else temp = apr_psprintf(r->pool, 
-                      "<tr><td><a href=\"%s\" content-length=\"%ld\" "
-                      "last-modified=\"%ld\">"
-                      "%s</a></td>"
-                      "<td align=right>%ld</td>%s</tr>\n", 
-                      namelist[n]->d_name, statbuf.st_size, statbuf.st_mtime,
-                      namelist[n]->d_name, 
-                      statbuf.st_size, modified);
-
-               body_formatted = apr_pstrcat(r->pool,body_formatted,temp,NULL);
-             }
-
-           free(namelist[n]);
-         }
-                 
-    free(namelist);
-    
-    body_formatted = apr_pstrcat(r->pool, body_formatted, "</table>\n", NULL);
-
-    if (conf->format)
-      {
-        /* **** set up dynamic part of footer to go at end of body **** */
-
-        admin_formatted = make_admin_footer(r, conf, TRUE);
-    
-        /* **** try to find a footer file in this or parent directories **** */
-
-        /* first make a buffer big enough to hold path names we want to try */
-        fd = -1;
-        s  = malloc(strlen(r->filename) + strlen(conf->footfile));
-        strcpy(s, r->filename);
-    
-        for (;;)
-           {
-             p = rindex(s, '/');
-             if (p == NULL) break; /* failed to find one */
-    
-             p[1] = '\0';
-             strcat(p, conf->footfile);
-    
-             fd = open(s, O_RDONLY);
-             if (fd != -1) break; /* found one */
-
-             *p = '\0';
-           }
-            
-        free(s);
-
-        if (fd == -1) /* failed to find a footer, so use standard default */
-          {
-            footer_formatted = apr_pstrdup(r->pool, "</body>");
-          }
-        else /* found a footer, so set up to use it */
-          {
-            fstat(fd, &statbuf);
-            footer_formatted = apr_palloc(r->pool, statbuf.st_size + 1);
-            read(fd, footer_formatted, statbuf.st_size);
-            footer_formatted[statbuf.st_size] = '\0';
-            close(fd);
-          }
-      }
-    else
-      {
-        admin_formatted = apr_pstrdup(r->pool, "");
-        footer_formatted = apr_pstrdup(r->pool, "</body>");
-      }
-
-    /* **** can now calculate the Content-Length and output headers **** */
-      
-    length = strlen(head_formatted) + strlen(header_formatted) + 
-             strlen(body_formatted) + strlen(admin_formatted)  +
-             strlen(footer_formatted);
-
-    ap_set_content_length(r, length);
-    ap_set_content_type(r, "text/html");
-
-    /* ** output the HTTP body (HTML Head+Body) ** */
-
-    ap_rputs(head_formatted,   r);
-    ap_rputs(header_formatted, r);
-    ap_rputs(body_formatted,   r);
-    ap_rputs(admin_formatted,  r);
-    ap_rputs(footer_formatted, r);
-
-    return OK;
-}
-
-int http_downgrade(request_rec *r, mod_gridsite_cfg *conf)
-{ 
-    int          i;
-    char        *httpurl, *filetemplate, *cookievalue, *envname_i, 
-                *grst_cred_i, expires_str[APR_RFC822_DATE_LEN];
-    apr_uint64_t gridauthcookie;
-    apr_table_t *env;
-    apr_time_t   expires_time;
-    apr_file_t  *fp;
-
-    /* create random cookie and gridauthcookie file */
-
-    if (apr_generate_random_bytes((char *) &gridauthcookie, 
-                                  sizeof(gridauthcookie))
-         != APR_SUCCESS) return HTTP_INTERNAL_SERVER_ERROR;
-    
-    filetemplate = apr_psprintf(r->pool, "%s/%016llxXXXXXX", 
-                                ap_server_root_relative(r->pool,
-                                                        conf->authcookiesdir),
-                                gridauthcookie);
-                                    
-    if (apr_file_mktemp(&fp, 
-                        filetemplate, 
-                        APR_CREATE | APR_WRITE | APR_EXCL,
-                        r->pool)
-                      != APR_SUCCESS) return HTTP_INTERNAL_SERVER_ERROR;
-
-    expires_time = apr_time_now() + apr_time_from_sec(300); 
-    /* onetime cookies are valid for only 5 mins! */
-
-    apr_file_printf(fp, "expires=%lu\ndomain=%s\npath=%s\nonetime=yes\n", 
-                   (time_t) apr_time_sec(expires_time), r->hostname, r->uri);
-
-    for (i=0; ; ++i)
-       {
-         envname_i = apr_psprintf(r->pool, "GRST_CRED_%d", i);
-         if (grst_cred_i = (char *)
-                           apr_table_get(r->connection->notes, envname_i))
-           {
-             apr_file_printf(fp, "%s=%s\n", envname_i, grst_cred_i);
-           }
-         else break; /* GRST_CRED_i are numbered consecutively */
-       }
-
-    if (apr_file_close(fp) != APR_SUCCESS) 
-      {
-        apr_file_remove(filetemplate, r->pool); /* try to clean up */
-        return HTTP_INTERNAL_SERVER_ERROR;
-      }
-    
-    /* send redirection header back to client */
-       
-    cookievalue = rindex(filetemplate, '/');
-    if (cookievalue != NULL) ++cookievalue;
-    else cookievalue = filetemplate;
-       
-    apr_rfc822_date(expires_str, expires_time);
-
-    apr_table_add(r->headers_out, 
-                  apr_pstrdup(r->pool, "Set-Cookie"), 
-                  apr_psprintf(r->pool, 
-                  "GRID_AUTH_ONETIME=%s; "
-                  "expires=%s; "
-                  "domain=%s; "
-                  "path=%s",
-                  cookievalue, expires_str, r->hostname, r->uri));
-    
-    httpurl = apr_pstrcat(r->pool, "http://", r->hostname,
-                        ap_escape_uri(r->pool, r->uri), NULL);
-    apr_table_setn(r->headers_out, apr_pstrdup(r->pool, "Location"), httpurl);
-
-    r->status = HTTP_MOVED_TEMPORARILY;  
-    return OK;
-}
-
-int http_put_method(request_rec *r, mod_gridsite_cfg *conf)
-{
-  char        buf[2048];
-  size_t      length;
-  int         retcode;
-  apr_file_t *fp;
-    
-  /* ***  check if directory creation: PUT /.../  *** */
-
-  if ((r->unparsed_uri    != NULL) && 
-      (r->unparsed_uri[0] != '\0') &&
-      (r->unparsed_uri[strlen(r->unparsed_uri) - 1] == '/'))
-    {
-      if (apr_dir_make(r->filename, APR_UREAD | APR_UWRITE | APR_UEXECUTE, 
-                          r->pool) != 0) return HTTP_INTERNAL_SERVER_ERROR;
-
-      ap_set_content_length(r, 0);
-      ap_set_content_type(r, "text/html");
-      return OK;
-    }
-
-  /* ***  otherwise assume trying to create a regular file *** */
-
-  if (apr_file_open(&fp, r->filename, APR_WRITE | APR_CREATE | APR_BUFFERED,
-      APR_UREAD | APR_UWRITE, r->pool) != 0) return HTTP_INTERNAL_SERVER_ERROR;
-   
-// TODO: need to add Range: support at some point too
-
-  retcode = ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK);
-  if (retcode == OK)
-    {
-      if (ap_should_client_block(r))
-        while ((length = ap_get_client_block(r, buf, sizeof(buf))) > 0)
-               if (apr_file_write(fp, buf, &length) != 0) 
-                 {
-                   retcode = HTTP_INTERNAL_SERVER_ERROR;
-                   break;
-                 }
-
-      ap_set_content_length(r, 0);
-      ap_set_content_type(r, "text/html");
-    }
-
-  if (apr_file_close(fp) != 0) return HTTP_INTERNAL_SERVER_ERROR;
-
-  return retcode;
-}
-
-int http_delete_method(request_rec *r, mod_gridsite_cfg *conf)
-{
-  if (remove(r->filename) != 0) return HTTP_FORBIDDEN;
-       
-  ap_set_content_length(r, 0);
-  ap_set_content_type(r, "text/html");
-
-  return OK;
-}
-
-static int mod_gridsite_dir_handler(request_rec *r, mod_gridsite_cfg *conf)
-/*
-   handler switch for directories
-*/
-{
-    /* *** is this a write method? only possible if  GridSiteAuth on *** */
-
-    if (conf->auth)
-      {
-        if ((r->method_number == M_PUT) && 
-            (conf->methods != NULL) &&
-            (strstr(conf->methods, " PUT "   ) != NULL))
-                                           return http_put_method(r, conf);
-
-        if ((r->method_number == M_DELETE) &&
-            (conf->methods != NULL) &&
-            (strstr(conf->methods, " DELETE ") != NULL)) 
-                                           return http_delete_method(r, conf);
-      }
-      
-    /* *** directory listing? *** */
-    
-    if ((r->method_number == M_GET) && (conf->indexes))       
-                       return html_dir_list(r, conf); /* directory listing */
-    
-    return DECLINED; /* *** nothing to see here, move along *** */
-}
-
-static int mod_gridsite_nondir_handler(request_rec *r, mod_gridsite_cfg *conf)
-/*
-   one big handler switch for everything other than directories, since we 
-   might be responding to MIME * / * for local PUT, MOVE, COPY and DELETE, 
-   and GET inside ghost directories.
-*/
-{
-    char      *downgradesize;
-    apr_off_t  numericsize;
-
-    /* *** is this a write method or HTTP downgrade? 
-           only possible if  GridSiteAuth on *** */
-    
-    if (conf->auth)
-      {
-        if ((conf->downgrade) &&
-            ((downgradesize = (char *) apr_table_get(r->headers_in, 
-                                       "HTTP-Downgrade-Size")) != NULL) &&
-            ((numericsize = (apr_off_t) atoll(downgradesize)) >= 0) &&
-
-// TODO: what if we're pointing at a CGI or some dynamic content???
-            (((r->method_number == M_GET) && (r->finfo.size >= numericsize))
-             || (r->method_number == M_PUT)) &&
-
-            (strcasecmp(apr_table_get(r->subprocess_env, "HTTPS"), "on") == 0))
-            return http_downgrade(r, conf);
-      
-        if ((r->method_number == M_PUT) && 
-            (conf->methods != NULL) &&
-            (strstr(conf->methods, " PUT "   ) != NULL))
-                                           return http_put_method(r, conf);
-
-        if ((r->method_number == M_DELETE) &&
-            (conf->methods != NULL) &&
-            (strstr(conf->methods, " DELETE ") != NULL)) 
-                                           return http_delete_method(r, conf);
-      }
-
-    /* *** check if a special ghost admin CGI *** */
-      
-    if (conf->adminfile && conf->adminuri &&
-        (strlen(r->filename) > strlen(conf->adminfile) + 1) &&
-        (strcmp(&(r->filename[strlen(r->filename) - strlen(conf->adminfile)]),
-                                                    conf->adminfile) == 0) &&
-        (r->filename[strlen(r->filename)-strlen(conf->adminfile)-1] == '/') &&
-        ((r->method_number == M_POST) ||
-         (r->method_number == M_GET))) 
-      {
-        ap_internal_redirect(conf->adminuri, r);
-        return OK;
-      }
-      
-    /* *** finally look for .html files that we should format *** */
-
-    if ((conf->format) &&  /* conf->format set by  GridSiteHtmlFormat on */ 
-        (strlen(r->filename) > 5) &&
-        (strcmp(&(r->filename[strlen(r->filename)-5]), ".html") == 0) &&
-        (r->method_number == M_GET)) return html_format(r, conf);
-     
-    return DECLINED; /* *** nothing to see here, move along *** */
-}
-
-static void recurse4dirlist(char *dirname, time_t *dirs_time,
-                             char *fulluri, int fullurilen,
-                             char *encfulluri, int enclen,
-                             apr_pool_t *pool, char **body,
-                             int recurse_level)
-/* try to find DN Lists in dir[] and its subdirs that match the fulluri[]
-   prefix. add blobs of HTML to body as they are found. */
-{
-   char          *unencname, modified[99], *oneline, *d_namepath;
-   DIR           *oneDIR;
-   struct dirent *onedirent;
-   struct tm      mtime_tm;
-   size_t         length;
-   struct stat    statbuf;
-
-   if ((stat(dirname, &statbuf) != 0) ||
-       (!S_ISDIR(statbuf.st_mode)) ||
-       ((oneDIR = opendir(dirname)) == NULL)) return;
-
-   if (statbuf.st_mtime > *dirs_time) *dirs_time = statbuf.st_mtime;
-
-   while ((onedirent = readdir(oneDIR)) != NULL)
-        {
-          if (onedirent->d_name[0] == '.') continue;
-        
-          d_namepath = apr_psprintf(pool, "%s/%s", dirname, onedirent->d_name);
-          if (stat(d_namepath, &statbuf) != 0) continue;
-
-          if (S_ISDIR(statbuf.st_mode) && (recurse_level < GRST_RECURS_LIMIT)) 
-                 recurse4dirlist(d_namepath, dirs_time, fulluri,
-                                 fullurilen, encfulluri, enclen, 
-                                 pool, body, recurse_level + 1);
-          else if ((strncmp(onedirent->d_name, encfulluri, enclen) == 0) &&
-                   (onedirent->d_name[strlen(onedirent->d_name) - 1] != '~'))
-            {
-              unencname = GRSThttpUrlDecode(onedirent->d_name);
-                    
-              if (strncmp(unencname, fulluri, fullurilen) == 0)
-                {
-
-                  if (statbuf.st_mtime > *dirs_time) 
-                                                *dirs_time = statbuf.st_mtime;
-
-                  localtime_r(&(statbuf.st_mtime), &mtime_tm);
-                  strftime(modified, sizeof(modified), 
-              "<td align=right>%R</td><td align=right>%e&nbsp;%b&nbsp;%y</td>",
-                       &mtime_tm);
-
-                  oneline = apr_psprintf(pool,
-                                     "<tr><td><a href=\"%s\" "
-                                     "content-length=\"%ld\" "
-                                     "last-modified=\"%ld\">"
-                                     "%s</a></td>"
-                                     "<td align=right>%ld</td>%s</tr>\n", 
-                                     &unencname[fullurilen], statbuf.st_size, 
-                                     statbuf.st_mtime, unencname, 
-                                     statbuf.st_size, modified);
-
-                  *body = apr_pstrcat(pool, *body, oneline, NULL);
-                }      
-                      
-              free(unencname); /* libgridsite doesnt use pools */    
-            }
-        }
-        
-   closedir(oneDIR);
-}
-
-static int mod_gridsite_dnlistsuri_dir_handler(request_rec *r, 
-                                               mod_gridsite_cfg *conf)
-/*
-    virtual DN-list file lister: make all DN lists on the dn-lists
-    path of this server appear to be in the dn-lists directory itself
-    (ie where they appear in the DN lists path doesnt matter, as long
-    as their name matches)
-*/
-{
-    int            enclen, fullurilen, fd;
-    char          *fulluri, *encfulluri, *dn_list_ptr, *dirname, *unencname,
-                  *body, *oneline, *p, *s,
-                  *head_formatted, *header_formatted, *footer_formatted,
-                  *permstr = NULL;
-    struct stat    statbuf;
-    size_t         length;
-    time_t         dirs_time = 0;
-    GRSTgaclPerm   perm = GRST_PERM_NONE;
-        
-    if (r->notes != NULL)
-           permstr = (char *) apr_table_get(r->notes, "GRST_PERM");
-
-    if (permstr != NULL) sscanf(permstr, "%d", &perm);
-
-    fulluri = apr_psprintf(r->pool, "https://%s%s",
-                                    ap_get_server_name(r), conf->dnlistsuri);
-    fullurilen = strlen(fulluri);
-
-    encfulluri = GRSThttpUrlEncode(fulluri);
-    enclen     = strlen(encfulluri);
-
-    if (conf->dnlists != NULL) p = conf->dnlists;
-    else p = getenv("GRST_DN_LISTS");
-
-    if (p == NULL) p = GRST_DN_LISTS;
-    dn_list_ptr = apr_pstrdup(r->pool, p);
-
-    head_formatted = apr_psprintf(r->pool, 
-      "<head><title>Directory listing %s</title></head>\n", r->uri);
-
-    if (conf->format)
-      {
-        /* **** try to find a header file in this or parent directories **** */
-
-        /* first make a buffer big enough to hold path names we want to try */
-        fd = -1;
-        s = malloc(strlen(r->filename) + strlen(conf->headfile) + 1);
-        strcpy(s, r->filename);
-    
-        for (;;)
-           {
-             p = rindex(s, '/');
-             if (p == NULL) break; /* failed to find one */
-             p[1] = '\0';
-             strcat(p, conf->headfile);
-    
-             fd = open(s, O_RDONLY);
-             if (fd != -1) break; /* found one */
-
-             *p = '\0';
-           }
-            
-        free(s);
-
-        if (fd == -1) /* not found, so set up to output sensible default */
-          {
-            header_formatted = apr_pstrdup(r->pool, "<body bgcolor=white>");
-          }
-        else /* found a header file, so set up head and body to surround it */
-          {
-            fstat(fd, &statbuf);
-            header_formatted = apr_palloc(r->pool, statbuf.st_size + 1);
-            read(fd, header_formatted, statbuf.st_size);
-            header_formatted[statbuf.st_size] = '\0';
-            close(fd);
-          }
-      }
-    else header_formatted = apr_pstrdup(r->pool, "<body bgcolor=white>");
-            
-    body = apr_psprintf(r->pool, 
-      "<h1>Directory listing %s</h1>\n<table>", r->uri);
-
-    if ((r->uri)[1] != '\0')
-     body = apr_pstrcat(r->pool, body, 
-       "<tr><td>[<a href=\"../\">Parent directory</a>]</td></tr>\n",
-       NULL);
-
-    while ((dirname = strsep(&dn_list_ptr, ":")) != NULL)
-        recurse4dirlist(dirname, &dirs_time, fulluri, fullurilen,
-                                 encfulluri, enclen, r->pool, &body, 0);
-
-    if ((stat(r->filename, &statbuf) == 0) &&
-        S_ISDIR(statbuf.st_mode) && 
-        GRSTgaclPermHasWrite(perm))
-      {
-        oneline = apr_psprintf(r->pool,
-           "<form action=\"%s%s\" method=post>\n"
-           "<input type=hidden name=cmd value=managedir>"
-           "<tr><td colspan=4 align=center><small><input type=submit "
-           "value=\"Manage directory\"></small></td></tr></form>\n",
-           r->uri, conf->adminfile);
-          
-        body = apr_pstrcat(r->pool, body, oneline, NULL);
-      } 
-
-    body = apr_pstrcat(r->pool, body, "</table>\n", NULL);
-
-    free(encfulluri); /* libgridsite doesnt use pools */
-
-    if (conf->format)
-      {
-        /* **** try to find a footer file in this or parent directories **** */
-
-        /* first make a buffer big enough to hold path names we want to try */
-        fd = -1;
-        s  = malloc(strlen(r->filename) + strlen(conf->footfile));
-        strcpy(s, r->filename);
-    
-        for (;;)
-           {
-             p = rindex(s, '/');
-             if (p == NULL) break; /* failed to find one */
-    
-             p[1] = '\0';
-             strcat(p, conf->footfile);
-    
-             fd = open(s, O_RDONLY);
-             if (fd != -1) break; /* found one */
-
-             *p = '\0';
-           }
-            
-        free(s);
-
-        if (fd == -1) /* failed to find a footer, so use standard default */
-          {
-            footer_formatted = apr_pstrdup(r->pool, "</body>");
-          }
-        else /* found a footer, so set up to use it */
-          {
-            fstat(fd, &statbuf);
-            footer_formatted = apr_palloc(r->pool, statbuf.st_size + 1);
-            read(fd, footer_formatted, statbuf.st_size);
-            footer_formatted[statbuf.st_size] = '\0';
-            close(fd);
-          }
-      }
-    else footer_formatted = apr_pstrdup(r->pool, "</body>");
-
-    /* **** can now calculate the Content-Length and output headers **** */
-      
-    length = strlen(head_formatted) + strlen(header_formatted) + 
-             strlen(body) + strlen(footer_formatted);
-
-    ap_set_content_length(r, length);
-    r->mtime = apr_time_from_sec(dirs_time);
-    ap_set_last_modified(r);
-    ap_set_content_type(r, "text/html");
-
-    /* ** output the HTTP body (HTML Head+Body) ** */
-    ap_rputs(head_formatted,   r);
-    ap_rputs(header_formatted, r);
-    ap_rputs(body,                r);
-    ap_rputs(footer_formatted, r);
-
-    return OK;
-}
-
-static char *recurse4file(char *dir, char *file, apr_pool_t *pool, 
-                          int recurse_level)
-/* try to find file[] in dir[]. try subdirs if not found.
-   return full path to first found version or NULL on failure */
-{
-    char          *fullfilename, *fulldirname;
-    struct stat    statbuf;
-    DIR           *dirDIR;
-    struct dirent *file_ent;
-
-    /* try to find in current directory */
-
-    fullfilename = apr_psprintf(pool, "%s/%s", dir, file);
-
-    if (stat(fullfilename, &statbuf) == 0) return fullfilename;
-
-    /* maybe search in subdirectories */
-
-    if (recurse_level >= GRST_RECURS_LIMIT) return NULL;
-
-    dirDIR = opendir(dir);
-
-    if (dirDIR == NULL) return NULL;
-
-    while ((file_ent = readdir(dirDIR)) != NULL)
-       {
-         if (file_ent->d_name[0] == '.') continue;
-
-         fulldirname = apr_psprintf(pool, "%s/%s", dir, file_ent->d_name);
-         if ((stat(fulldirname, &statbuf) == 0) &&
-             S_ISDIR(statbuf.st_mode) &&
-             ((fullfilename = recurse4file(fulldirname, file,
-                                           pool, recurse_level + 1)) != NULL))
-           {
-             closedir(dirDIR);
-             return fullfilename;
-           }
-       }
-
-    closedir(dirDIR);
-
-    return NULL;
-}
-
-static int mod_gridsite_dnlistsuri_handler(request_rec *r, 
-                                           mod_gridsite_cfg *conf)
-/*
-    virtual DN-list file generator
-*/
-{
-    int          fd;
-    char        *fulluri, *encfulluri, *dn_list_ptr, *filename, *dirname, *p,
-                *buf;
-    struct stat  statbuf;
-    
-    /* *** check if a special ghost admin CGI *** */
-      
-    if (conf->adminfile && conf->adminuri &&
-        (strlen(r->filename) > strlen(conf->adminfile) + 1) &&
-        (strcmp(&(r->filename[strlen(r->filename) - strlen(conf->adminfile)]),
-                                                    conf->adminfile) == 0) &&
-        (r->filename[strlen(r->filename)-strlen(conf->adminfile)-1] == '/') &&
-        ((r->method_number == M_POST) ||
-         (r->method_number == M_GET))) 
-      {
-        ap_internal_redirect(conf->adminuri, r);
-        return OK;
-      }
-
-    fulluri = apr_psprintf(r->pool, "https://%s%s", 
-                                    ap_get_server_name(r), r->uri);
-
-    encfulluri = GRSThttpUrlEncode(fulluri);
-    
-    if (conf->dnlists != NULL) p = conf->dnlists;
-    else p = getenv("GRST_DN_LISTS");
-    if (p == NULL) p = GRST_DN_LISTS;
-    dn_list_ptr = apr_pstrdup(r->pool, p);
-
-    while ((dirname = strsep(&dn_list_ptr, ":")) != NULL)
-       {
-         filename = recurse4file(dirname, encfulluri, r->pool, 0);
-
-         if (filename == NULL) continue;
-    
-         fd = open(filename, O_RDONLY);
-
-         if (fd == -1) continue;
-
-         fstat(fd, &statbuf);         
-         ap_set_content_length(r, (apr_off_t) statbuf.st_size);
-         r->mtime = apr_time_from_sec(statbuf.st_mtime);
-         ap_set_content_type(r, "text/plain");
-         ap_set_last_modified(r);
-
-         buf = apr_palloc(r->pool, statbuf.st_size + 1);
-         read(fd, buf, statbuf.st_size);
-         buf[statbuf.st_size] = '\0';
-            
-         ap_rputs(buf, r);
-
-         close(fd);
-
-         return OK;
-       }
-
-    return HTTP_NOT_FOUND;
-}
-
-static void *create_gridsite_dir_config(apr_pool_t *p, char *path)
-{
-    mod_gridsite_cfg *conf = apr_palloc(p, sizeof(*conf));
-
-    if (path == NULL) /* set up server defaults */
-      { 
-        conf->auth          = 0;     /* GridSiteAuth          on/off       */
-        conf->envs          = 1;     /* GridSiteEnvs          on/off       */
-        conf->format        = 0;     /* GridSiteHtmlFormat    on/off       */
-        conf->indexes       = 0;     /* GridSiteIndexes       on/off       */
-        conf->indexheader   = NULL;  /* GridSiteIndexHeader   File-value   */
-        conf->gridsitelink  = 1;     /* GridSiteLink          on/off       */
-        conf->adminfile     = apr_pstrdup(p, GRST_ADMIN_FILE);
-                                /* GridSiteAdminFile      File-value   */
-        conf->adminuri      = NULL;  /* GridSiteAdminURI      URI-value    */
-        conf->helpuri       = NULL;  /* GridSiteHelpURI       URI-value    */
-        conf->dnlists       = NULL;  /* GridSiteDNlists       Search-path  */
-        conf->dnlistsuri    = NULL;  /* GridSiteDNlistsURI    URI-value    */
-        conf->adminlist     = NULL;  /* GridSiteAdminList     URI-value    */
-        conf->gsiproxylimit = 1;     /* GridSiteGSIProxyLimit number       */
-        conf->unzip         = NULL;  /* GridSiteUnzip         file-path    */
-
-        conf->methods    = apr_pstrdup(p, " GET ");
-                                        /* GridSiteMethods      methods   */
-                            
-        conf->editable = apr_pstrdup(p, " txt shtml html htm css js php jsp ");
-                                        /* GridSiteEditable     types   */
-     
-        conf->headfile = apr_pstrdup(p, GRST_HEADFILE);
-        conf->footfile = apr_pstrdup(p, GRST_FOOTFILE); 
-               /* GridSiteHeadFile and GridSiteFootFile  file name */
-
-        conf->downgrade     = 0;     /* GridSiteDowngrade     on/off       */
-        conf->authcookiesdir = apr_pstrdup(p, "gridauthcookies");
-                                     /* GridSiteAuthCookiesDir dir-path     */
-        conf->soap2cgi      = 0;     /* GridSiteSoap2cgi      on/off       */
-      }
-    else
-      {
-        conf->auth          = UNSET; /* GridSiteAuth          on/off       */
-        conf->envs          = UNSET; /* GridSiteEnvs          on/off       */
-        conf->format        = UNSET; /* GridSiteHtmlFormat    on/off       */
-        conf->indexes       = UNSET; /* GridSiteIndexes       on/off       */
-        conf->indexheader   = NULL;  /* GridSiteIndexHeader   File-value   */
-        conf->gridsitelink  = UNSET; /* GridSiteLink          on/off       */
-        conf->adminfile     = NULL;  /* GridSiteAdminFile     File-value   */
-        conf->adminuri      = NULL;  /* GridSiteAdminURI      URI-value    */
-        conf->helpuri       = NULL;  /* GridSiteHelpURI       URI-value    */
-        conf->dnlists       = NULL;  /* GridSiteDNlists       Search-path  */
-        conf->dnlistsuri    = NULL;  /* GridSiteDNlistsURI    URI-value    */
-        conf->adminlist     = NULL;  /* GridSiteAdminList     URI-value    */
-        conf->gsiproxylimit = UNSET; /* GridSiteGSIProxyLimit number       */
-        conf->unzip         = NULL;  /* GridSiteUnzip         file-path    */
-        conf->methods       = NULL;  /* GridSiteMethods       methods      */
-        conf->editable      = NULL;  /* GridSiteEditable      types        */
-        conf->headfile      = NULL;  /* GridSiteHeadFile      file name    */
-        conf->footfile      = NULL;  /* GridSiteFootFile      file name    */
-        conf->downgrade     = UNSET; /* GridSiteDowngrade     on/off       */
-        conf->authcookiesdir= NULL;  /* GridSiteAuthCookiesDir dir-path    */
-        conf->soap2cgi      = UNSET; /* GridSiteSoap2cgi      on/off       */
-      }
-      
-    return conf;
-}
-
-static void *merge_gridsite_dir_config(apr_pool_t *p, void *vserver, 
-                                                      void *vdirect)
-/* merge directory with server-wide directory configs */
-{
-    mod_gridsite_cfg *conf, *server, *direct;
-   
-    server = (mod_gridsite_cfg *) vserver;
-    direct = (mod_gridsite_cfg *) vdirect;
-    conf = apr_palloc(p, sizeof(*conf));
-    
-    if (direct->auth != UNSET) conf->auth = direct->auth;
-    else                       conf->auth = server->auth;
-    
-    if (direct->envs != UNSET) conf->envs = direct->envs;
-    else                       conf->envs = server->envs;
-        
-    if (direct->format != UNSET) conf->format = direct->format;
-    else                         conf->format = server->format;
-        
-    if (direct->indexes != UNSET) conf->indexes = direct->indexes;
-    else                          conf->indexes = server->indexes;
-        
-    if (direct->gridsitelink != UNSET) conf->gridsitelink=direct->gridsitelink;
-    else                               conf->gridsitelink=server->gridsitelink;
-
-    if (direct->indexheader != NULL) conf->indexheader = direct->indexheader;
-    else                             conf->indexheader = server->indexheader;
-        
-    if (direct->adminfile != NULL) conf->adminfile = direct->adminfile;
-    else                           conf->adminfile = server->adminfile;
-        
-    if (direct->adminuri != NULL) conf->adminuri = direct->adminuri;
-    else                          conf->adminuri = server->adminuri;
-        
-    if (direct->helpuri != NULL) conf->helpuri = direct->helpuri;
-    else                         conf->helpuri = server->helpuri;
-        
-    if (direct->dnlists != NULL) conf->dnlists = direct->dnlists;
-    else                         conf->dnlists = server->dnlists;
-        
-    if (direct->dnlistsuri != NULL) conf->dnlistsuri = direct->dnlistsuri;
-    else                            conf->dnlistsuri = server->dnlistsuri;
-        
-    if (direct->adminlist != NULL) conf->adminlist = direct->adminlist;
-    else                           conf->adminlist = server->adminlist;
-        
-    if (direct->gsiproxylimit != UNSET) 
-                         conf->gsiproxylimit = direct->gsiproxylimit;
-    else                 conf->gsiproxylimit = server->gsiproxylimit;
-        
-    if (direct->unzip != NULL) conf->unzip = direct->unzip;
-    else                       conf->unzip = server->unzip;
-        
-    if (direct->methods != NULL) conf->methods = direct->methods;
-    else                         conf->methods = server->methods;
-        
-    if (direct->editable != NULL) conf->editable = direct->editable;
-    else                          conf->editable = server->editable;
-        
-    if (direct->headfile != NULL) conf->headfile = direct->headfile;
-    else                          conf->headfile = server->headfile;
-        
-    if (direct->footfile != NULL) conf->footfile = direct->footfile;
-    else                          conf->footfile = server->footfile;
-        
-    if (direct->downgrade != UNSET) conf->downgrade = direct->downgrade;
-    else                            conf->downgrade = server->downgrade;
-        
-    if (direct->authcookiesdir != NULL)
-                                conf->authcookiesdir = direct->authcookiesdir;
-    else                        conf->authcookiesdir = server->authcookiesdir;
-        
-    if (direct->soap2cgi != UNSET) conf->soap2cgi = direct->soap2cgi;
-    else                           conf->soap2cgi = server->soap2cgi;
-        
-    return conf;
-}
-
-static const char *mod_gridsite_take1_cmds(cmd_parms *a, void *cfg,
-                                           const char *parm)
-{
-    int   n;
-    char *p;
-  
-    if      (strcasecmp(a->cmd->name, "GridSiteAdminFile") == 0)
-    {
-      if (index(parm, '/') != NULL) 
-           return "/ not permitted in GridSiteAdminFile";
-     
-      ((mod_gridsite_cfg *) cfg)->adminfile =
-        apr_pstrdup(a->pool, parm);
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteAdminURI") == 0)
-    {
-      if (*parm != '/') return "GridSiteAdminURI must begin with /";
-     
-      ((mod_gridsite_cfg *) cfg)->adminuri =
-        apr_pstrdup(a->pool, parm);
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteHelpURI") == 0)
-    {
-      if (*parm != '/') return "GridSiteHelpURI must begin with /";
-
-      ((mod_gridsite_cfg *) cfg)->helpuri =
-        apr_pstrdup(a->pool, parm);
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteDNlists") == 0)
-    {
-      ((mod_gridsite_cfg *) cfg)->dnlists =
-        apr_pstrdup(a->pool, parm);
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteDNlistsURI") == 0)
-    {
-      if (*parm != '/') return "GridSiteDNlistsURI must begin with /";
-
-      if ((*parm != '\0') && (parm[strlen(parm) - 1] == '/'))
-       ((mod_gridsite_cfg *) cfg)->dnlistsuri =
-        apr_pstrdup(a->pool, parm);
-      else
-       ((mod_gridsite_cfg *) cfg)->dnlistsuri =
-        apr_pstrcat(a->pool, parm, "/", NULL);
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteAdminList") == 0)
-    {
-      ((mod_gridsite_cfg *) cfg)->adminlist =
-        apr_pstrdup(a->pool, parm);
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteGSIProxyLimit") == 0)
-    {
-      n = -1;
-    
-      if ((sscanf(parm, "%d", &n) == 1) && (n >= 0))
-                  ((mod_gridsite_cfg *) cfg)->gsiproxylimit = n;
-      else return "GridSiteGSIProxyLimit must be a number >= 0";     
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteUnzip") == 0)
-    {
-      if (*parm != '/') return "GridSiteUnzip must begin with /";
-     
-      ((mod_gridsite_cfg *) cfg)->unzip =
-        apr_pstrdup(a->pool, parm);
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteMethods") == 0)
-    {
-      ((mod_gridsite_cfg *) cfg)->methods =
-        apr_psprintf(a->pool, " %s ", parm);
-       
-      for (p = ((mod_gridsite_cfg *) cfg)->methods;
-           *p != '\0';
-           ++p) if (*p == '\t') *p = ' ';
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteEditable") == 0)
-    {
-      ((mod_gridsite_cfg *) cfg)->editable =
-        apr_psprintf(a->pool, " %s ", parm);
-     
-      for (p = ((mod_gridsite_cfg *) cfg)->editable;
-           *p != '\0';
-           ++p) if (*p == '\t') *p = ' ';
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteHeadFile") == 0)
-    {
-      ((mod_gridsite_cfg *) cfg)->headfile =
-        apr_pstrdup(a->pool, parm);
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteFootFile") == 0)
-    {
-      ((mod_gridsite_cfg *) cfg)->footfile =
-        apr_pstrdup(a->pool, parm);
-    }  
-    else if (strcasecmp(a->cmd->name, "GridSiteIndexHeader") == 0)
-    {
-      if (index(parm, '/') != NULL) 
-           return "/ not permitted in GridSiteIndexHeader";
-
-      ((mod_gridsite_cfg *) cfg)->indexheader =
-        apr_pstrdup(a->pool, parm);
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteAuthCookiesDir") == 0)
-    {
-      if (index(parm, '/') != NULL) 
-           return "/ not permitted in GridSiteAuthCookiesDir";
-
-      ((mod_gridsite_cfg *) cfg)->authcookiesdir =
-        apr_pstrdup(a->pool, parm);
-    }
-        
-    return NULL;
-}
-
-static const char *mod_gridsite_flag_cmds(cmd_parms *a, void *cfg,
-                                      int flag)
-{
-    if      (strcasecmp(a->cmd->name, "GridSiteAuth") == 0)
-    {
-      ((mod_gridsite_cfg *) cfg)->auth = flag;
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteEnvs") == 0)
-    {
-      ((mod_gridsite_cfg *) cfg)->envs = flag;
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteHtmlFormat") == 0)
-    {
-      ((mod_gridsite_cfg *) cfg)->format = flag;
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteIndexes") == 0)
-    {
-      ((mod_gridsite_cfg *) cfg)->indexes = flag;
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteLink") == 0)
-    {
-      ((mod_gridsite_cfg *) cfg)->gridsitelink = flag;
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteDowngrade") == 0)
-    {
-// TODO: return error if try this on non-HTTPS virtual server
-
-      ((mod_gridsite_cfg *) cfg)->downgrade = flag;
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteSoap2cgi") == 0)
-    {
-      ((mod_gridsite_cfg *) cfg)->soap2cgi = flag;
-    }
-
-    return NULL;
-}
-
-static const command_rec mod_gridsite_cmds[] =
-{
-// TODO: need to check and document valid contexts for each command!
-
-    AP_INIT_FLAG("GridSiteAuth", mod_gridsite_flag_cmds, 
-                 NULL, OR_FILEINFO, "on or off"),
-    AP_INIT_FLAG("GridSiteEnvs", mod_gridsite_flag_cmds, 
-                 NULL, OR_FILEINFO, "on or off"),
-    AP_INIT_FLAG("GridSiteHtmlFormat", mod_gridsite_flag_cmds, 
-                 NULL, OR_FILEINFO, "on or off"),
-    AP_INIT_FLAG("GridSiteIndexes", mod_gridsite_flag_cmds, 
-                 NULL, OR_FILEINFO, "on or off"),
-    AP_INIT_FLAG("GridSiteLink", mod_gridsite_flag_cmds, 
-                 NULL, OR_FILEINFO, "on or off"),
-                 
-    AP_INIT_TAKE1("GridSiteAdminFile", mod_gridsite_take1_cmds,
-                   NULL, OR_FILEINFO, "Ghost per-directory admin CGI"),
-    AP_INIT_TAKE1("GridSiteAdminURI", mod_gridsite_take1_cmds,
-                   NULL, OR_FILEINFO, "URI of real gridsite-admin.cgi"),
-    AP_INIT_TAKE1("GridSiteHelpURI", mod_gridsite_take1_cmds,
-                   NULL, OR_FILEINFO, "URI of Website Help pages"),
-    AP_INIT_TAKE1("GridSiteDNlists", mod_gridsite_take1_cmds,
-                   NULL, OR_FILEINFO, "DN Lists directories search path"),
-    AP_INIT_TAKE1("GridSiteDNlistsURI", mod_gridsite_take1_cmds,
-                   NULL, OR_FILEINFO, "URI of published DN lists"),
-    AP_INIT_TAKE1("GridSiteAdminList", mod_gridsite_take1_cmds,
-                   NULL, OR_FILEINFO, "URI of admin DN List"),
-    AP_INIT_TAKE1("GridSiteGSIProxyLimit", mod_gridsite_take1_cmds,
-                   NULL, OR_FILEINFO, "Max level of GSI proxy validity"),
-    AP_INIT_TAKE1("GridSiteUnzip", mod_gridsite_take1_cmds,
-                   NULL, OR_FILEINFO, "Absolute path to unzip command"),
-
-    AP_INIT_RAW_ARGS("GridSiteMethods", mod_gridsite_take1_cmds,
-                   NULL, OR_FILEINFO, "permitted HTTP methods"),
-    AP_INIT_RAW_ARGS("GridSiteEditable", mod_gridsite_take1_cmds,
-                   NULL, OR_FILEINFO, "editable file extensions"),
-    AP_INIT_TAKE1("GridSiteHeadFile", mod_gridsite_take1_cmds,
-                   NULL, OR_FILEINFO, "filename of HTML header"),
-    AP_INIT_TAKE1("GridSiteFootFile", mod_gridsite_take1_cmds,
-                   NULL, OR_FILEINFO, "filename of HTML footer"),
-    AP_INIT_TAKE1("GridSiteIndexHeader", mod_gridsite_take1_cmds,
-                   NULL, OR_FILEINFO, "filename of directory header"),
-    
-    AP_INIT_FLAG("GridSiteDowngrade", mod_gridsite_flag_cmds, 
-                 NULL, OR_FILEINFO, "on or off"),
-    AP_INIT_TAKE1("GridSiteAuthCookiesDir", mod_gridsite_take1_cmds,
-                 NULL, OR_FILEINFO, "directory with Grid Auth Cookies"),
-
-    AP_INIT_FLAG("GridSiteSoap2cgi", mod_gridsite_flag_cmds,
-                 NULL, OR_FILEINFO, "on or off"),
-    {NULL}
-};
-
-static int mod_gridsite_first_fixups(request_rec *r)
-{
-    mod_gridsite_cfg *conf;
-
-    if (r->finfo.filetype != APR_DIR) return DECLINED;
-
-    conf = (mod_gridsite_cfg *)
-                    ap_get_module_config(r->per_dir_config, &gridsite_module);
-
-    /* we handle DN Lists as regular files, even if they also match
-       directory names  */
-
-    if ((conf != NULL) &&
-        (conf->dnlistsuri != NULL) &&
-        (strncmp(r->uri, conf->dnlistsuri, strlen(conf->dnlistsuri)) == 0) &&
-        (strcmp(r->uri, conf->dnlistsuri) != 0))
-      {
-        r->finfo.filetype = APR_REG; 
-      }
-
-    return DECLINED;
-}  
-
-static int mod_gridsite_perm_handler(request_rec *r)
-/*
-    Do authentication/authorization here rather than in the normal module
-    auth functions since the results of mod_ssl are available.
-
-    We also publish environment variables here if requested by GridSiteEnv.
-*/
-{
-    int          retcode = DECLINED, i, n;
-    char        *dn, *p, envname[14], *grst_cred_0 = NULL, *dir_path, 
-                *remotehost, s[99], *grst_cred_i, *file, *cookies,
-                *gridauthonetime, *cookiefile, oneline[1025], *key_i;
-    const char  *content_type;
-    time_t       now, notbefore, notafter;
-    apr_table_t *env;
-    apr_finfo_t  cookiefile_info;
-    apr_file_t  *fp;
-    GRSTgaclCred    *cred = NULL, *cred_0 = NULL;
-    GRSTgaclUser    *user = NULL;
-    GRSTgaclPerm     perm = GRST_PERM_NONE;
-    GRSTgaclAcl     *acl = NULL;
-    mod_gridsite_cfg *cfg;
-
-    cfg = (mod_gridsite_cfg *)
-                    ap_get_module_config(r->per_dir_config, &gridsite_module);
-
-    if (cfg == NULL) return DECLINED;
-
-    if ((cfg->auth == 0) &&
-        (cfg->envs == 0))
-               return DECLINED; /* if not turned on, look invisible */
-
-    env = r->subprocess_env;
-
-    if ((p = (char *) apr_table_get(r->headers_in, "Cookie")) != NULL)
-      {
-        cookies = apr_pstrcat(r->pool, " ", p, NULL);
-        gridauthonetime = strstr(cookies, " GRID_AUTH_ONETIME=");
-                
-        if (gridauthonetime != NULL)
-          {
-            for (p = &gridauthonetime[19]; (*p != '\0') && (*p != ';'); ++p)
-                                                if (!isalnum(*p)) *p = '_';
-        
-            cookiefile = apr_psprintf(r->pool, "%s/%s",
-                                      ap_server_root_relative(r->pool, 
-                                                   cfg->authcookiesdir),
-                                      &gridauthonetime[19]);
-                                      
-            if ((apr_stat(&cookiefile_info , cookiefile, 
-                          APR_FINFO_TYPE, r->pool) == APR_SUCCESS) &&
-                (cookiefile_info.filetype == APR_REG) &&
-                (apr_file_open(&fp, cookiefile, APR_READ, 0, r->pool)
-                                                         == APR_SUCCESS))
-              {
-                ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
-                             "Open Grid Auth Cookie file %s", cookiefile);
-              
-                while (apr_file_gets(oneline, 
-                                     sizeof(oneline), fp) == APR_SUCCESS)
-                     {
-                       p = index(oneline, '\n');
-                       if (p != NULL) *p = '\0';
-                       
-                       ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
-                                    "%s: %s", cookiefile, oneline);
-
-                       if ((strncmp(oneline, "expires=", 8) == 0) &&
-                           (apr_time_from_sec(atoll(&oneline[8])) < 
-                                                       apr_time_now()))
-                                  break;                
-                       else if ((strncmp(oneline, "domain=", 7) == 0) &&
-                                (strcmp(&oneline[7], r->hostname) != 0))
-                                  break; /* exact needed in the version */
-                       else if ((strncmp(oneline, "path=", 5) == 0) &&
-                                (strcmp(&oneline[5], r->uri) != 0))
-                                  break;
-                       else if  (strncmp(oneline, "onetime=yes", 11) == 0)
-                                  apr_file_remove(cookiefile, r->pool);
-                       else if  (strncmp(oneline, "GRST_CRED_", 10) == 0)
-                           {
-                             grst_cred_i = index(oneline, '=');
-                             if (grst_cred_i == NULL) continue;       
-                             *grst_cred_i = '\0';
-                             ++grst_cred_i;
-
-                             i = atoi(&oneline[10]);
-                             cred = GRSTx509CompactToCred(grst_cred_i);
-                             
-                             if (cred == NULL) continue;
-
-                             if ((i == 0) && (user == NULL))
-                               {           
-                                 if (GRSTgaclCredGetDelegation(cred) 
-                                   <= ((mod_gridsite_cfg *) cfg)->gsiproxylimit)
-                                   {
-                                     user = GRSTgaclUserNew(cred);
-                                   
-                                     ap_log_error(APLOG_MARK, APLOG_DEBUG, 
-                                                  0, r->server,
-                                                  "Using identity %s from "
-                                                  "GRID_AUTH_ONETIME", 
-                                                  grst_cred_i);
-
-                                     if (((mod_gridsite_cfg *) cfg)->envs)
-                                      apr_table_setn(env, oneline, grst_cred_i);
-                                   }
-                               }
-                             else if ((i > 0) && (user != NULL))
-                               {
-                                 GRSTgaclUserAddCred(user, cred);
-                                     
-                                 if (((mod_gridsite_cfg *) cfg)->envs)
-                                       apr_table_set(env,oneline,grst_cred_i);
-                               }                             
-                           }
-                     }
-
-                apr_file_close(fp);
-              }            
-          }
-      }
-    
-    /* do we need/have per-connection (SSL) cred variable(s)? */
-
-    if ((user == NULL) && 
-        (r->connection->notes != NULL) &&
-        ((grst_cred_0 = (char *) 
-            apr_table_get(r->connection->notes, "GRST_CRED_0")) != NULL))
-      {
-        if (((mod_gridsite_cfg *) cfg)->envs)
-                            apr_table_setn(env, "GRST_CRED_0", grst_cred_0);
-                                    
-        cred_0 = GRSTx509CompactToCred(grst_cred_0);
-        if ((cred_0 != NULL) &&
-            (GRSTgaclCredGetDelegation(cred_0) 
-                         <= ((mod_gridsite_cfg *) cfg)->gsiproxylimit))
-          {
-            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
-                         "Using identity %s from SSL/TLS", grst_cred_0);
-
-            user = GRSTgaclUserNew(cred_0);
-
-            /* check for VOMS GRST_CRED_i too */
-  
-            for (i=1; ; ++i)
-               {
-                 snprintf(envname, sizeof(envname), "GRST_CRED_%d", i);
-                 if (grst_cred_i = (char *) 
-                                   apr_table_get(r->connection->notes,envname))
-                   { 
-                     if (((mod_gridsite_cfg *) cfg)->envs)
-                              apr_table_setn(env,
-                                             apr_pstrdup(r->pool, envname),
-                                             grst_cred_i);
-                                    
-                     if (cred = GRSTx509CompactToCred(grst_cred_i))
-                                        GRSTgaclUserAddCred(user, cred);
-                   }
-                 else break; /* GRST_CRED_i are numbered consecutively */
-               }
-          }
-      }
-
-    if ((user != NULL) && ((mod_gridsite_cfg *) cfg)->dnlists)
-          GRSTgaclUserSetDNlists(user, ((mod_gridsite_cfg *) cfg)->dnlists);
-
-    /* this checks for NULL arguments itself */
-    if (GRSTgaclDNlistHasUser(((mod_gridsite_cfg *) cfg)->adminlist, user))
-                                                        perm = GRST_PERM_ALL;
-    else
-      {
-        remotehost = (char *) ap_get_remote_host(r->connection,
-                                  r->per_dir_config, REMOTE_DOUBLE_REV, NULL);
-        if ((remotehost != NULL) && (*remotehost != '\0'))
-          {            
-            cred = GRSTgaclCredNew("dns");
-            GRSTgaclCredAddValue(cred, "hostname", remotehost);
-
-            if (user == NULL) user = GRSTgaclUserNew(cred);
-            else              GRSTgaclUserAddCred(user, cred);
-          }
-
-        acl = GRSTgaclAclLoadforFile(r->filename);
-        if (acl != NULL) perm = GRSTgaclAclTestUser(acl, user);
-      }
-
-    apr_table_setn(r->notes, "GRST_PERM", apr_psprintf(r->pool, "%d", perm));
-
-    if (((mod_gridsite_cfg *) cfg)->envs)
-      {
-        apr_table_setn(env, "GRST_PERM", apr_psprintf(r->pool, "%d", perm));
-
-        if (((dir_path = apr_pstrdup(r->pool, r->filename)) != NULL) &&
-            ((p = rindex(dir_path, '/')) != NULL))
-          {
-            *p = '\0';
-            apr_table_setn(env, "GRST_DIR_PATH", dir_path);
-          }
-
-        if (((mod_gridsite_cfg *) cfg)->helpuri != NULL)
-                  apr_table_setn(env, "GRST_HELP_URI",
-                              ((mod_gridsite_cfg *) cfg)->helpuri);
-
-        if (((mod_gridsite_cfg *) cfg)->adminfile != NULL)
-                  apr_table_setn(env, "GRST_ADMIN_FILE",
-                              ((mod_gridsite_cfg *) cfg)->adminfile);
-
-        if (((mod_gridsite_cfg *) cfg)->editable != NULL)
-                 apr_table_setn(env, "GRST_EDITABLE",
-                              ((mod_gridsite_cfg *) cfg)->editable);
-
-        if (((mod_gridsite_cfg *) cfg)->headfile != NULL)
-                 apr_table_setn(env, "GRST_HEAD_FILE",
-                              ((mod_gridsite_cfg *) cfg)->headfile);
-
-        if (((mod_gridsite_cfg *) cfg)->footfile != NULL)
-                 apr_table_setn(env, "GRST_FOOT_FILE",
-                              ((mod_gridsite_cfg *) cfg)->footfile);
-
-        if (((mod_gridsite_cfg *) cfg)->dnlists != NULL)
-                 apr_table_setn(env, "GRST_DN_LISTS",
-                              ((mod_gridsite_cfg *) cfg)->dnlists);
-
-        if (((mod_gridsite_cfg *) cfg)->dnlistsuri != NULL)
-                 apr_table_setn(env, "GRST_DN_LISTS_URI",
-                              ((mod_gridsite_cfg *) cfg)->dnlistsuri);
-
-        if (((mod_gridsite_cfg *) cfg)->adminlist != NULL)
-                 apr_table_setn(env, "GRST_ADMIN_LIST",
-                              ((mod_gridsite_cfg *) cfg)->adminlist);
-
-       apr_table_setn(env, "GRST_GSIPROXY_LIMIT", 
-                            apr_psprintf(r->pool, "%d", 
-                                  ((mod_gridsite_cfg *)cfg)->gsiproxylimit));
-
-        if (((mod_gridsite_cfg *) cfg)->unzip != NULL)
-                 apr_table_setn(env, "GRST_UNZIP",
-                              ((mod_gridsite_cfg *) cfg)->unzip);
-
-        if (!(((mod_gridsite_cfg *) cfg)->gridsitelink))
-                  apr_table_setn(env, "GRST_NO_LINK", "1");
-      }
-     
-    if (((mod_gridsite_cfg *) cfg)->auth)
-      {
-        /* *** Check HTTP method to decide which perm bits to check *** */
-                                  
-        if (r->filename != NULL)
-          {
-            file = rindex(r->filename, '/');
-            if (file != NULL) ++file;
-            else file = r->filename;
-          }
-        else file = NULL;
-
-        content_type = r->content_type;
-        if ((content_type != NULL) && 
-            (strcmp(content_type, DIR_MAGIC_TYPE) == 0) &&
-            (((mod_gridsite_cfg *) cfg)->dnlistsuri != NULL) &&
-            (strncmp(r->uri,
-                     ((mod_gridsite_cfg *) cfg)->dnlistsuri,
-                     strlen(((mod_gridsite_cfg *) cfg)->dnlistsuri)) == 0) &&
-            (strlen(r->uri) > strlen(((mod_gridsite_cfg *) cfg)->dnlistsuri)))
-            content_type = "text/html";
-        
-        if ( GRSTgaclPermHasNone(perm) ||
-
-            /* first two M_GET conditions make the subtle distinction
-               between .../ that maps to .../index.html (governed by
-               Read perm) or to dir list (governed by List perm);
-               third M_GET condition deals with typeless CGI requests */
-
-            ((r->method_number == M_GET) && 
-             !GRSTgaclPermHasRead(perm)  &&
-             (content_type != NULL)   &&
-             (strcmp(content_type, DIR_MAGIC_TYPE) != 0)) ||
-
-            ((r->method_number == M_GET) && 
-             !GRSTgaclPermHasList(perm)  &&
-             (content_type != NULL)   &&
-             (strcmp(content_type, DIR_MAGIC_TYPE) == 0)) ||
-
-            ((r->method_number == M_GET) && 
-             !GRSTgaclPermHasRead(perm)  &&
-             (content_type == NULL))      ||
-                                                                           
-            ((r->method_number == M_POST) && !GRSTgaclPermHasRead(perm) ) ||
-
-            (((r->method_number == M_PUT) || (r->method_number == M_DELETE)) &&
-             !GRSTgaclPermHasWrite(perm) &&
-             ((file == NULL) || (strcmp(file, GRST_ACL_FILE) != 0)) ) ||
-
-            (((r->method_number == M_PUT) || (r->method_number == M_DELETE)) &&
-             !GRSTgaclPermHasAdmin(perm) &&
-             (file != NULL)              && 
-             (strcmp(file, GRST_ACL_FILE) == 0) ) ) retcode = HTTP_FORBIDDEN;
-      }
-
-    return retcode;
-}
-
-int GRST_X509_check_issued_wrapper(X509_STORE_CTX *ctx,X509 *x,X509 *issuer)
-/* We change the default callback to use our wrapper and discard errors
-   due to GSI proxy chains (ie where users certs act as CAs) */
-{
-    int ret;
-    ret = X509_check_issued(issuer, x);
-    if (ret == X509_V_OK)
-                return 1;
-         
-    /* Non self-signed certs without signing are ok if they passed
-           the other checks inside X509_check_issued. Is this enough? */
-    if ((ret == X509_V_ERR_KEYUSAGE_NO_CERTSIGN) &&
-        (X509_NAME_cmp(X509_get_subject_name(issuer),
-                           X509_get_subject_name(x)) != 0)) return 1;
-    /* If we haven't asked for issuer errors don't set ctx */
-    if (!(ctx->flags & X509_V_FLAG_CB_ISSUER_CHECK)) return 0;
-  
-    ctx->error = ret;
-    ctx->current_cert = x;
-    ctx->current_issuer = issuer;
-    return ctx->verify_cb(0, ctx);
-}
-
-/* Later OpenSSL versions add a second pointer ... */
-int GRST_verify_cert_wrapper(X509_STORE_CTX *ctx, void *p)
-
-/* Earlier ones have a single argument ... */
-// int GRST_verify_cert_wrapper(X509_STORE_CTX *ctx)
-
-/* Before 0.9.7 we cannot change the check_issued callback directly in
-   the X509_STORE, so we must insert it in another callback that gets
-   called early enough */
-{
-   ctx->check_issued = GRST_X509_check_issued_wrapper;
-
-   return X509_verify_cert(ctx);
-}
-
-int GRST_callback_SSLVerify_wrapper(int ok, X509_STORE_CTX *ctx)
-{
-   SSL *ssl            = (SSL *) X509_STORE_CTX_get_app_data(ctx);
-   conn_rec *conn      = (conn_rec *) SSL_get_app_data(ssl);
-   server_rec *s       = conn->base_server;
-   SSLConnRec *sslconn = 
-         (SSLConnRec *) ap_get_module_config(conn->conn_config, &ssl_module);
-   int errnum          = X509_STORE_CTX_get_error(ctx);
-   int errdepth        = X509_STORE_CTX_get_error_depth(ctx);
-   int returned_ok;
-   int first_non_ca;
-
-   /*
-    * GSI Proxy user-cert-as-CA handling:
-    * we skip Invalid CA errors at this stage, since we will check this
-    * again at errdepth=0 for the full chain using GRSTx509CheckChain
-    */
-   if (errnum == X509_V_ERR_INVALID_CA)
-     {
-        ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
-                    "Skip Invalid CA error in case a GSI Proxy");
-
-        sslconn->verify_error = NULL;
-        ok = TRUE;
-        errnum = X509_V_OK;
-        X509_STORE_CTX_set_error(ctx, errnum);
-     }
-
-   /*
-    * New style GSI Proxy handling, with critical ProxyCertInfo
-    * extension: we use GRSTx509KnownCriticalExts() to check this
-    */
-#ifndef X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION
-#define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34
-#endif
-   if (errnum == X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION)
-     {
-       if (GRSTx509KnownCriticalExts(X509_STORE_CTX_get_current_cert(ctx))
-                                                              == GRST_RET_OK)
-         {
-            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
-                     "GRSTx509KnownCriticalExts() accepts previously "
-                     "Unhandled Critical Extension (GSI Proxy?)");
-
-            sslconn->verify_error = NULL;
-            ok = TRUE;
-            errnum = X509_V_OK;
-            X509_STORE_CTX_set_error(ctx, errnum);
-         }
-     }
-
-   returned_ok = ssl_callback_SSLVerify(ok, ctx);
-
-   /* in case ssl_callback_SSLVerify changed it */
-   errnum = X509_STORE_CTX_get_error(ctx); 
-
-   if ((errdepth == 0) && (errnum == X509_V_OK))
-   /*
-    * We've now got the last certificate - the identity being used for
-    * this connection. At this point we check the whole chain for valid
-    * CAs or, failing that, GSI-proxy validity using GRSTx509CheckChain.
-    */
-     {
-        errnum = GRSTx509CheckChain(&first_non_ca, ctx);
-
-        if (errnum != X509_V_OK)
-          {
-            ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
-                     "Invalid certificate chain reported by "
-                     "GRSTx509CheckChain()");
-
-            sslconn->verify_error = X509_verify_cert_error_string(errnum);
-            ok = FALSE;
-          }
-        else 
-          {
-            int i, lastcred;
-            STACK_OF(X509) *peer_certs;
-            const int maxcreds = 99;
-            const size_t credlen = 1024;
-            char creds[maxcreds][credlen+1], envname[14];
-
-            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, "Valid certificate"
-                                   " chain reported by GRSTx509CheckChain()");
-
-            /*
-             * Always put result of GRSTx509CompactCreds() into environment
-             */
-            if (peer_certs = (STACK_OF(X509) *) X509_STORE_CTX_get_chain(ctx))
-              {    
-                if (GRSTx509CompactCreds(&lastcred, maxcreds, credlen,
-                    (char *) creds, peer_certs, GRST_VOMS_DIR) == GRST_RET_OK)
-                  {
-                    for (i=0; i <= lastcred; ++i)
-                       {
-                         apr_table_setn(conn->notes,
-                                 apr_psprintf(conn->pool, "GRST_CRED_%d", i),
-                                 apr_pstrdup(conn->pool, creds[i]));
-
-                         ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
-                                      "store GRST_CRED_%d=%s", i, creds[i]);
-                       }
-                  }
-            /* free remaining dup'd certs? */
-              }                                   
-          }
-     }
-
-   return returned_ok;
-}
-
-static int mod_gridsite_server_post_config(apr_pool_t *pPool,
-                  apr_pool_t *pLog, apr_pool_t *pTemp, server_rec *main_server)
-{
-   SSL_CTX         *ctx;
-   SSLSrvConfigRec *sc;
-   server_rec      *this_server;
-
-   ap_add_version_component(pPool,
-                            apr_psprintf(pPool, "mod_gridsite/%s", VERSION));
-
-   for (this_server = main_server; 
-        this_server != NULL; 
-        this_server = this_server->next)
-      {
-        sc = ap_get_module_config(this_server->module_config, &ssl_module);
-
-        if ((sc                  != NULL)  &&
-            (sc->enabled)                  &&
-            (sc->server          != NULL)  &&
-            (sc->server->ssl_ctx != NULL))
-          {
-            ctx = sc->server->ssl_ctx;
-
-            /* in 0.9.7 we could set the issuer-checking callback directly */
-//          ctx->cert_store->check_issued = GRST_X509_check_issued_wrapper;
-     
-            /* but in case 0.9.6 we do it indirectly with another wrapper */
-            SSL_CTX_set_cert_verify_callback(ctx, 
-                                             GRST_verify_cert_wrapper,
-                                             (void *) NULL);
-
-            /* whatever version, we can set the SSLVerify wrapper properly */
-            SSL_CTX_set_verify(ctx, ctx->verify_mode, 
-                               GRST_callback_SSLVerify_wrapper);
-
-            if (main_server->loglevel >= APLOG_DEBUG)
-                 ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, main_server,
-                      "Set mod_ssl verify callbacks to GridSite wrappers");
-          }
-      }
-      
-   return OK;
-}
-      
-static void mod_gridsite_child_init(apr_pool_t *pPool, server_rec *pServer)
-{
-   GRSTgaclInit();
-}
-
-static int mod_gridsite_handler(request_rec *r)
-{
-   mod_gridsite_cfg *conf;
-    
-   conf = (mod_gridsite_cfg *)
-                    ap_get_module_config(r->per_dir_config, &gridsite_module);
-
-   if ((conf->dnlistsuri != NULL) &&
-       (strncmp(r->uri, conf->dnlistsuri, strlen(conf->dnlistsuri)) == 0))
-     {
-       if (strcmp(r->uri, conf->dnlistsuri) == 0)
-              return mod_gridsite_dnlistsuri_dir_handler(r, conf);
-
-       return mod_gridsite_dnlistsuri_handler(r, conf);
-    }
-
-   if (strcmp(r->handler, DIR_MAGIC_TYPE) == 0)
-                   return mod_gridsite_dir_handler(r, conf);
-   
-   return mod_gridsite_nondir_handler(r, conf);
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    /* set up the Soap2cgi input and output filters */
-
-    ap_hook_insert_filter(mod_gridsite_soap2cgi_insert, NULL, NULL,
-                          APR_HOOK_MIDDLE);
-
-    ap_register_output_filter(Soap2cgiFilterName, mod_gridsite_soap2cgi_out,
-                              NULL, AP_FTYPE_RESOURCE);
-
-//    ap_register_input_filter(Soap2cgiFilterName, mod_gridsite_soap2cgi_in,
-//                              NULL, AP_FTYPE_RESOURCE);
-
-    /* config and handler stuff */
-
-    ap_hook_post_config(mod_gridsite_server_post_config, NULL, NULL, 
-                                                              APR_HOOK_LAST);
-    ap_hook_child_init(mod_gridsite_child_init, NULL, NULL, APR_HOOK_MIDDLE);
-
-    ap_hook_fixups(mod_gridsite_first_fixups,NULL,NULL,APR_HOOK_FIRST);
-    
-    ap_hook_fixups(mod_gridsite_perm_handler,NULL,NULL,APR_HOOK_REALLY_LAST);
-    
-    ap_hook_handler(mod_gridsite_handler, NULL, NULL, APR_HOOK_FIRST);    
-}
-
-module AP_MODULE_DECLARE_DATA gridsite_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_gridsite_dir_config, /* dir config creater */
-    merge_gridsite_dir_config,  /* dir merger */
-    NULL,                       /* server config */
-    NULL,                       /* merge server config */
-    mod_gridsite_cmds,          /* command apr_table_t */
-    register_hooks              /* register hooks */
-};
diff --git a/org.gridsite.core/src/mod_ssl-private.h b/org.gridsite.core/src/mod_ssl-private.h
deleted file mode 100644 (file)
index 7b0b784..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-   Copyright (c) 2003-4, Andrew McNab, University of Manchester
-   All rights reserved.
-
-   Redistribution and use in source and binary forms, with or
-   without modification, are permitted provided that the following
-   conditions are met:
-
-     o Redistributions of source code must retain the above
-       copyright notice, this list of conditions and the following
-       disclaimer. 
-     o 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. 
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-*/
-
-/*
-
- Portions of this code are derived from Apache mod_ssl, and are covered
- by the Apache Software License:
-
- * Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*------------------------------------------------------------------*
- * This program is part of GridSite: http://www.gridsite.org/       *
- *------------------------------------------------------------------*/
-
-
-/*
- * After 2.0.49, Apache mod_ssl has most of the mod_ssl structures defined
- * in ssl_private.h, which is not installed along with httpd-devel (eg in
- * the FC2 RPM.) This include file provides SIMPLIFIED structures for use
- * by mod_gridsite: for example, pointers to unused structures are replaced
- * by  void *  and some of the structures are truncated when only the early
- * members are used.
- *
- * CLEARLY, THIS WILL BREAK IF THERE ARE MAJOR CHANGES TO ssl_private.h!!!
- */
-
-#include <openssl/ssl.h>
-
-typedef enum {
-    SSL_SHUTDOWN_TYPE_UNSET,
-    SSL_SHUTDOWN_TYPE_STANDARD,
-    SSL_SHUTDOWN_TYPE_UNCLEAN,
-    SSL_SHUTDOWN_TYPE_ACCURATE
-} ssl_shutdown_type_e;
-
-typedef struct {
-  SSL *ssl;
-  const char *client_dn;
-  X509 *client_cert;
-  ssl_shutdown_type_e shutdown_type;
-  const char *verify_info;
-  const char *verify_error;
-  int verify_depth;
-  int is_proxy;
-  int disabled;
-  int non_ssl_request;
-} SSLConnRec;
-
-typedef struct {
-  void    *sc; /* pointer back to server config */
-  SSL_CTX *ssl_ctx;
-} modssl_ctx_t;
-
-typedef struct {
-  void            *mc;
-  unsigned int     enabled;
-  unsigned int     proxy_enabled;
-  const char      *vhost_id;
-  int              vhost_id_len;
-  int              session_cache_timeout;
-  modssl_ctx_t    *server;
-  modssl_ctx_t    *proxy;
-} SSLSrvConfigRec;
-
-extern module AP_MODULE_DECLARE_DATA ssl_module;
diff --git a/org.gridsite.core/src/proxyput-example.c b/org.gridsite.core/src/proxyput-example.c
deleted file mode 100644 (file)
index f0fe834..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-   Copyright (c) 2002-4, Andrew McNab, University of Manchester
-   All rights reserved.
-
-   Redistribution and use in source and binary forms, with or
-   without modification, are permitted provided that the following
-   conditions are met:
-
-     o Redistributions of source code must retain the above
-       copyright notice, this list of conditions and the following
-       disclaimer. 
-     o 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. 
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-*/
-
-/* 
-    Change the hard-coded defaults below to your set up. 
-*/
-
-#define LOCALPROXY     "/tmp/x509up"
-#define DELEGATIONURL  "https://testing.hep.man.ac.uk/gridsite-delegation.cgi"
-#define CAPATH         "/etc/grid-security/certificates"
-#define DELEGATIONID    "1234567890"
-#define EXPIREMINUTES  60 
-  
-#ifndef VERSION
-#define VERSION "0.0.0"
-#endif
-
-#define _GNU_SOURCE
-
-#include <stdio.h>
-#include <string.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#include <openssl/x509.h>
-#include <openssl/x509v3.h>
-#include <openssl/err.h>
-#include <openssl/pem.h>
-
-#include "gridsite.h"
-
-#include "soapH.h"
-#include "delegation.nsmap"
-
-int main(int argc, char *argv[])
-{
-  char *reqtxt, *certtxt;
-  struct ns__putProxyResponse *unused;
-  struct soap soap_get, soap_put;
-  ERR_load_crypto_strings ();
-  OpenSSL_add_all_algorithms();
-
-  soap_init(&soap_get);
-  
-  if (soap_ssl_client_context(&soap_get,
-                                  SOAP_SSL_DEFAULT,
-                                  LOCALPROXY, 
-                                  "",
-                                  NULL,
-                                  CAPATH,
-                                  NULL))
-        {
-          soap_print_fault(&soap_get, stderr);
-          return 1;
-        } 
-
-  soap_call_ns__getProxyReq(&soap_get, 
-                                DELEGATIONURL, /* HTTPS url of service */
-                                "",            /* no password on proxy */
-                                DELEGATIONID, 
-                                &reqtxt);
-      
-  if (soap_get.error)
-    {
-          soap_print_fault(&soap_get, stderr);
-          return 1;        
-    }
-        
-  if (GRSTx509MakeProxyCert(&certtxt, stderr, reqtxt, 
-                            LOCALPROXY, LOCALPROXY, EXPIREMINUTES) 
-          != GRST_RET_OK)
-    {
-          return 1;
-    }
-
-  soap_init(&soap_put);
-  
-  if (soap_ssl_client_context(&soap_put,
-                                  SOAP_SSL_DEFAULT,
-                                  LOCALPROXY, 
-                                  "",
-                                  NULL,
-                                  CAPATH,
-                                  NULL))
-        {
-          soap_print_fault(&soap_put, stderr);
-          return 1;
-        } 
-
-  soap_call_ns__putProxy(&soap_put, DELEGATIONURL, "", DELEGATIONID, 
-                             certtxt, unused);      
-  if (soap_put.error)
-    {
-          soap_print_fault(&soap_put, stderr);
-          return 1;        
-    }
-
-  return 0;
-}
-
diff --git a/org.gridsite.core/src/real-gridsite-admin.cgi b/org.gridsite.core/src/real-gridsite-admin.cgi
deleted file mode 100644 (file)
index 74a0010..0000000
Binary files a/org.gridsite.core/src/real-gridsite-admin.cgi and /dev/null differ
diff --git a/org.gridsite.core/src/roffit b/org.gridsite.core/src/roffit
deleted file mode 100755 (executable)
index d1c7263..0000000
+++ /dev/null
@@ -1,370 +0,0 @@
-#!/usr/bin/env perl 
-#
-# roffit: convert man page source files to HTML
-#
-# Read an nroff file. Output a HTML file.
-#
-# This is a very simple script, but I use it on very simple man pages and I've
-# found no other script that makes beautiful web pages.
-#
-my $version = "0.3"; # (14 November 2003)
-# Author:  Daniel Stenberg <daniel@haxx.se>
-# Please email me improvements.
-#
-# You're free to do whatever you want with this script.
-#
-# Changes:
-#
-# 0.3 - Daniel Fandrich brought:
-#     o deal with .lp lines
-#     o .TH needs no section portion anymore
-#     o added generator meta tag in the header
-#
-# 0.2 - fixed the <a name> name for the SH section
-#     - added <a href> links from all words within \fIthis\fP or \fBthis\fP
-#       that has the same text as a .SH or .IP.
-#
-
-use strict;
-#use warnings;
-
-my $InFH = \*STDIN;
-my $OutFH = \*STDOUT;
-my $debugFH = \*STDERR;
-
-my %manpage;
-my @out;
-
-my $indentlevel=0; # logical levels, not columns
-my @p;
-my $within_tp;
-my $standalone=1; # by default we make stand-alone HTML pages
-my $pre;
-my %anchor; # hash with all anchors
-
-while($ARGV[0]) {
-    if($ARGV[0] eq "--bare") {
-        # don't include headers and stuff
-        $standalone=0;
-        shift @ARGV;
-    }
-    else {
-        printf $debugFH "unknown option: %s\n", $ARGV[0] if($ARGV[0] ne "-h");
-        print $debugFH "Usage: roffit [options] < infile > outfile\n",
-        "Options:\n",
-        "  --bare   Do not put in HTML, HEAD, BODY tags\n";
-        exit;
-    }
-}
-
-sub showp {
-    my @p = @_;
-    push @out, "\n<p class=\"level$indentlevel\">", @p;
-}
-
-sub defaultcss {
-    print $OutFH <<ENDOFCSS
-<STYLE type="text/css">
-P.level0 {
- padding-left: 2em;
-}
-
-P.level1 {
- padding-left: 4em;
-}
-
-P.level2 {
- padding-left: 6em;
-}
-
-span.emphasis {
- font-style: italic;
-}
-
-span.bold {
- font-weight: bold;
-}
-
-span.manpage {
- font-weight: bold;
-}
-
-h2.nroffsh {
- background-color: #e0e0e0;
-}
-
-span.nroffip {
- font-weight: bold;
- font-size: 120%;
- font-family: monospace;
-}
-
-p.roffit {
- text-align: center;
- font-size: 80%;
-}
-</STYLE>
-ENDOFCSS
-    ;
-}
-
-sub text2name {
-    my ($text) = @_;
-    $text =~ s/^ *([^ ]*).*/$1/g;
-    $text =~ s/[^a-zA-Z0-9-]//g;
-    return $text;
-}
-
-# scan through the file and check for <span> sections we should convert
-# to proper links
-sub linkfile {
-    my @new;
-    for(@out) {
-        my $line=$_;
-        my $l;
-        while($line =~ s/<span class=\"(emphasis|bold)\">([^<]*)<\/span>/[]/) {
-            my ($style, $name)=($1, $2);
-            
-            $l = text2name($name);
-
-            #printf $debugFH "$style - $name - %s - %d\n",
-            #$l, $anchor{$l};
-
-            my $link;
-            if($anchor{$l}) {
-                $link="<a class=\"$style\" href=\"#$l\">$name</a>";
-            }
-            else {
-                $link="<span Class=\"$style\">$name</span>";
-            }
-            $line =~ s/\[\]/$link/;
-        }
-        push @new, $line;
-    }
-    return @new;
-}
-
-sub parsefile {
-
-    while(<$InFH>) {
-        my $in = $_;
-        my $out;
-  #     print $debugFH "DEBUG IN: $_";
-
-        $in =~ s/[\r\n]//g if(!$pre); # tear off newlines
-
-        if($in =~ /^\.([^ \n]*)(.*)/) {
-            # this is a line starting with a dot, that means it is special
-            my ($keyword, $rest) = ($1, $2);
-            $out = "";
-            
-            # cut off initial spaces
-            $rest =~ s/^ +//g;
-            
-            if($keyword eq "\\\"") {
-                # this is a comment, skip this line
-            }
-            elsif($keyword =~ /^TH$/i) {
-                # man page header:
-                # curl 1 "22 Oct 2003" "Curl 7.10.8" "Curl Manual"
-                # NAME SECTION DATE VERSION MANUAL
-                if($rest =~ /([^ ]*) (\d+) \"([^\"]*)\" \"([^\"]*)\"(\"([^\"]*)\")?/) {
-                    # strict matching only so far
-                    $manpage{'name'} = $1;
-                    $manpage{'section'} = $2;
-                    $manpage{'date'} = $3;
-                    $manpage{'version'} = $4;
-                    $manpage{'manual'} = $6;
-                }
-            }
-            elsif($keyword =~ /^SH$/i) {
-                # Section Header
-                showp(@p);
-                @p="";
-                if($pre) {
-                    push @out, "</pre>\n";
-                    $pre = 0;
-                }
-
-                my $name = text2name($rest);
-                $anchor{$name}=1;
-
-                $rest =~ s/\"//g; # cut off quotes
-                $rest =~ s/</&lt;/g;
-                $rest =~ s/>/&gt;/g;
-                $out = "<a name=\"$name\"></a><h2 class=\"nroffsh\">$rest</h2>";
-                $indentlevel=0;
-                $within_tp=0;
-            }
-            elsif(($keyword =~ /^B$/i) || ($keyword =~ /^BI$/i)) {
-                # Make B and BI the same for simplicity
-                $rest =~ s/\"//g; # cut off quotes
-                $rest =~ s/</&lt;/g;
-                $rest =~ s/>/&gt;/g;
-                push @p, "<span class=\"bold\">$rest</span> ";
-            }
-            elsif($keyword =~ /^I$/i) {
-                $rest =~ s/\"//g; # cut off quotes
-                $rest =~ s/</&lt;/g;
-                $rest =~ s/>/&gt;/g;
-                push @p, "<span class=\"emphasis\">$rest</span> ";
-            }
-            elsif($keyword =~ /^RS$/i) {
-                # the start of another indent-level. for inlined tables
-                # within an "IP"
-                showp(@p);
-                @p="";
-                $indentlevel++;
-            }
-            elsif($keyword =~ /^RE$/i) {
-                # end of the RS section
-                showp(@p);
-                @p="";
-                $indentlevel--;
-            }
-            elsif($keyword =~ /^NF$/i) {
-                # We let nf start a <pre> section
-                showp(@p);
-                @p="";
-                push @out, "<pre>\n";
-                $pre=1
-            }
-            elsif($keyword =~ /^TP$/i) {
-                # Used within an "RS" section to make a new line. The first
-                # TP as a column indicator, but we decide to do that
-                # controlling in the CSS instead.
-                $within_tp=1;
-                showp(@p);
-                @p="";                
-            }
-            elsif($keyword =~ /^IP$/i) {
-                # start of a new paragraph coming up
-                showp(@p);
-                @p="";
-
-                my $name= text2name($rest);
-                $anchor{$name}=1;
-
-                $rest =~ s/\"//g; # cut off quotes
-                $rest =~ s/</&lt;/g;
-                $rest =~ s/>/&gt;/g;
-                
-                $indentlevel-- if ($indentlevel);
-                push @p, "<a name=\"$name\"></a><span class=\"nroffip\">$rest</span> ";
-                # make this a single-line title
-                showp(@p);
-                @p="";
-                $indentlevel++;
-                $within_tp=0;
-            }
-            elsif($keyword =~ /^ad$/i) {
-                showp(@p);
-                @p="";
-            }
-            elsif($keyword =~ /^sp$/i) {
-                showp(@p);
-                @p="";
-            }
-            elsif($keyword =~ /^lp$/i) {
-                # marks end of a paragraph
-                showp(@p);
-                @p="";
-            }
-            elsif($keyword =~ /^pp$/i) {
-                # PP ends a TP section, but some TP sections don't use it
-                $within_tp=0;
-            }
-            elsif($keyword =~ /^so$/i) {
-                # This keyword refers to a different man page, named in the
-                # $rest.
-                # We don't support this
-                push @out, "See the $rest man page.\n";
-            }
-            elsif($keyword =~ /^BR$/i) {
-                # I'm not sure what this does exactly, but this is commonly
-                # used to include pointers to other man pages. Let's assume
-                # it only does that for now.
-                # blabla (3)
-                # or "blabla (3)"
-                # or strcmp "(3), " strcasecmp "(3)"
-                # etc
-                
-                $rest =~ s/\"//g; # cut off quotes
-                my @all = split /,/, $rest;
-                for(@all) {
-                    if(/([^ ]*) *\((\d+)\)/) {
-                        # TODO: this looks like a man page, check if there's a
-                        # HTML file for it and if so make a link to it
-                    }
-
-                    push @p, "<span class=\"manpage\">$_</span> ";
-                }
-            }
-            else {
-                showp(@p);
-                print $debugFH "ALERT: unknown keyword \"$keyword\"\n";
-            }
-        }
-        else {
-            # text line, decode \-stuff
-            my $txt = $in;
-
-            $txt =~ s/</&lt;/g;
-            $txt =~ s/>/&gt;/g;
-            $txt =~ s/\\&//g; # cut off \&
-            $txt =~ s/\\fI/<span class=\"emphasis\">/g;
-            $txt =~ s/\\fB/<span class=\"bold\">/g;
-            $txt =~ s/\\fP/<\/span>/g;
-            $txt =~ s/\\//g;
-
-            if($txt =~ /^[ \t\r\n]*$/) {
-                # no contents, marks end of a paragraph
-                showp(@p);
-                @p="";
-            }
-            else {
-                $txt =~ s/^ /\&nbsp\;/g;
-                push @p, "$txt ";
-            }
-            $out ="";
-        }
-
-        if($out) {
-            push @out, $out;
-   #         print $debugFH "DEBUG OUT: $out\n";
-        }
-        else {
-   #         print $debugFH "DEBUG OUT: [withheld]\n";
-        }
-    }
-    showp(@p);
-}
-
-parsefile();
-
-my @conv = linkfile();
-
-my $title=sprintf("%s man page",
-                  $manpage{'name'}?$manpage{'name'}:"secret");
-
-if($standalone) {
-    print $OutFH <<MOO
-<html><head>
-<title>$title</title>
-<meta name="generator" content="roffit $version">
-MOO
-    ;
-    defaultcss();
-    print "</head><body>\n";
-}
-
-print $OutFH @conv;
-print $OutFH <<ROFFIT
-<p class="roffit">
- This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
-ROFFIT
-    ;
-
-if($standalone) {
-    print "</body></html>\n";
-}
diff --git a/org.gridsite.core/src/urlencode.c b/org.gridsite.core/src/urlencode.c
deleted file mode 100644 (file)
index bea36a9..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-   Copyright (c) 2002-3, Andrew McNab, University of Manchester
-   All rights reserved.
-
-   Redistribution and use in source and binary forms, with or
-   without modification, are permitted provided that the following
-   conditions are met:
-
-     o Redistributions of source code must retain the above
-       copyright notice, this list of conditions and the following
-       disclaimer. 
-     o 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. 
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-   CONTRIBUTORS "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 COPYRIGHT OWNER 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.
-*/
-
-/*---------------------------------------------------------------*
- * For more about GridSite: http://www.gridsite.org/             *
- *---------------------------------------------------------------*/
-
-#include <stdio.h>
-#include <string.h>
-
-#include "gridsite.h"
-
-int main(int argn, char *argv[])
-{
-  int    i;
-
-  if (argn == 1)
-    {
-      puts("urlencode [-m|-d] string-to-encode-or-decode");
-      return 0;
-    }
-
-  if      (strcmp(argv[1], "-d") == 0) /* decode */
-   for (i = 2; i < argn; ++i) 
-      {
-        if (i > 2) fputs(" ", stdout);
-        fputs(GRSThttpUrlDecode(argv[i]), stdout);
-      }
-  else if (strcmp(argv[1], "-m") == 0) /* mild encode */
-   for (i = 2; i < argn; ++i) 
-      {
-        if (i > 2) fputs("%20", stdout);
-        fputs(GRSThttpUrlMildencode(argv[i]), stdout);
-      }
-  else /* standard encode */
-   for (i = 1; i < argn; ++i) 
-      {
-        if (i > 1) fputs("%20", stdout);
-        fputs(GRSThttpUrlEncode(argv[i]), stdout);
-      }
-
-  puts("");
-
-  return 0;
-}