This commit was manufactured by cvs2svn to create tag 'merge_31_head_src'. merge_31_head_src
authorcvs2svn <admin@example.com>
Thu, 22 Mar 2007 10:42:41 +0000 (10:42 +0000)
committercvs2svn <admin@example.com>
Thu, 22 Mar 2007 10:42:41 +0000 (10:42 +0000)
Sprout from master 2006-09-21 09:53:05 UTC Jan Pospíšil <honik@ntc.zcu.cz> 'dualreg (work in progress)'
Cherrypick from master 2006-03-19 11:42:48 UTC Jiří Sitera <sitera@civ.zcu.cz> 'Install guide (Latex) with first version of LB-JP interaction description.':
    org.glite.jp.client/doc/README.jpimporter
    org.glite.jp.client/examples/jpps_upload_files.c
    org.glite.jp.index/src/bones_server.c
    org.glite.jp.index/src/common_server.c
    org.glite.jp.index/src/ws_is_typeref.h
    org.glite.jp.index/src/ws_typemap.h
    org.glite.jp.primary/src/backend.h
    org.glite.jp.ws-interface/src/JobProvenanceIS.xml
    org.glite.jp/build.xml
    org.glite.jp/doc/install-guide/JP-install-guide.tex
Cherrypick from master 2006-03-31 13:27:41 UTC Jiří Sitera <sitera@civ.zcu.cz> 'Added first version of overview and IS CLI description':
    org.glite.jp/doc/users-quide/JP-users-guide.tex
Cherrypick from glite-jp_branch_1_3_0_RC31 2006-09-21 11:58:42 UTC Aleš Křenek <ljocha@ics.muni.cz> 'restored':
    org.glite.jp/doc/install-guide/LB-JP-interaction-guide.tex
    org.glite.jp/doc/install-guide/glite_installation_guide_LB.doc
    org.glite.jp/doc/testplan.tex
    org.glite.jp/examples/pch06/align.sh
    org.glite.jp/examples/pch06/align_warp
    org.glite.jp/examples/pch06/cheat.pl
    org.glite.jp/examples/pch06/convert
    org.glite.jp/examples/pch06/convert.sh
    org.glite.jp/examples/pch06/delegates.xml
    org.glite.jp/examples/pch06/dump1
    org.glite.jp/examples/pch06/dump2
    org.glite.jp/examples/pch06/dump3
    org.glite.jp/examples/pch06/dump4
    org.glite.jp/examples/pch06/pch06.jdl-template
    org.glite.jp/examples/pch06/pch06.jdl-template2
    org.glite.jp/examples/pch06/pch06.runme
    org.glite.jp/examples/pch06/pch06.runme2
    org.glite.jp/examples/pch06/pgmtoppm
    org.glite.jp/examples/pch06/pgmtoppm.sh
    org.glite.jp/examples/pch06/pnmtojpeg
    org.glite.jp/examples/pch06/pnmtojpeg.sh
    org.glite.jp/examples/pch06/reslice
    org.glite.jp/examples/pch06/reslice.sh
    org.glite.jp/examples/pch06/scanheader
    org.glite.jp/examples/pch06/slicer
    org.glite.jp/examples/pch06/slicer.sh
    org.glite.jp/examples/pch06/softmean
    org.glite.jp/examples/pch06/softmean.sh
    org.glite.jp/project/dependencies.properties
    org.glite.jp/project/version.properties
Cherrypick from glite-jp-index_branch_1_2_0_RC31 2006-09-21 11:55:00 UTC Aleš Křenek <ljocha@ics.muni.cz> 'push version':
    org.glite.jp.index/Makefile
    org.glite.jp.index/examples/jpis-client.c
    org.glite.jp.index/examples/jpis-test.c
    org.glite.jp.index/examples/pch06/pch.pm
    org.glite.jp.index/examples/pch06/query1.pl
    org.glite.jp.index/examples/pch06/query2.pl
    org.glite.jp.index/examples/pch06/query3.pl
    org.glite.jp.index/examples/pch06/query4.pl
    org.glite.jp.index/examples/pch06/query5.pl
    org.glite.jp.index/examples/pch06/query6.pl
    org.glite.jp.index/examples/query-tests/authz.out
    org.glite.jp.index/examples/query-tests/complex_query.out
    org.glite.jp.index/examples/query-tests/run-test.sh
    org.glite.jp.index/examples/query-tests/simple_query.out
    org.glite.jp.index/project/version.properties
    org.glite.jp.index/src/common.c
    org.glite.jp.index/src/common.h
    org.glite.jp.index/src/conf.c
    org.glite.jp.index/src/soap_ops.c
    org.glite.jp.index/src/ws_is_typeref.c
Cherrypick from glite-lb-server_branch_1_4_3_RC31_2 2007-03-21 12:27:42 UTC František Dvořák <valtri@civ.zcu.cz> 'Small code cleanup (due to gSoap compatibility changes).':
    org.glite.lb.server/Makefile
    org.glite.lb.server/config/startup
    org.glite.lb.server/examples/ws_joblog.c
    org.glite.lb.server/examples/ws_jobstat.c
    org.glite.lb.server/examples/ws_query_ex.c
    org.glite.lb.server/interface/job-record.xsd
    org.glite.lb.server/project/version.properties
    org.glite.lb.server/src/bkserverd.c
    org.glite.lb.server/src/jobstat.c
    org.glite.lb.server/src/lb_plugin.c
    org.glite.lb.server/src/query.c
    org.glite.lb.server/src/ws_fault.c
    org.glite.lb.server/src/ws_query.c
    org.glite.lb.server/src/ws_typeref.c.T
    org.glite.lb.server/src/ws_typeref.h
    org.glite.lb.server/test/test_soap_conv.cpp
Cherrypick from glite-security-gsoap-plugin_branch_1_4_0 2007-03-21 12:18:11 UTC František Dvořák <valtri@civ.zcu.cz> 'New feature needed for JP, build fix with gSoap 2.7.0f.':
    org.glite.security.gsoap-plugin/Makefile
    org.glite.security.gsoap-plugin/build.xml
    org.glite.security.gsoap-plugin/interface/glite_gscompat.h
    org.glite.security.gsoap-plugin/project/version.properties
    org.glite.security.gsoap-plugin/src/glite_gsplugin.c
    org.glite.security.gsoap-plugin/src/glite_gss.c
    org.glite.security.gsoap-plugin/src/stdsoap2_2.7.0f.c
    org.glite.security.gsoap-plugin/src/stdsoap2_2.7.0f.h
    org.glite.security.gsoap-plugin/src/stdsoap2_2.7.6b.c
    org.glite.security.gsoap-plugin/src/stdsoap2_2.7.6b.h
    org.glite.security.gsoap-plugin/src/stdsoap2_2.7.9b.c
    org.glite.security.gsoap-plugin/src/stdsoap2_2.7.9b.h
Cherrypick from glite-jp-primary_branch_1_2_0_RC31 2006-09-21 11:55:59 UTC Aleš Křenek <ljocha@ics.muni.cz> 'push version':
    org.glite.jp.primary/Makefile
    org.glite.jp.primary/examples/dag-deps.c
    org.glite.jp.primary/project/configure.properties.xml
    org.glite.jp.primary/project/version.properties
    org.glite.jp.primary/src/attrs.c
    org.glite.jp.primary/src/authz.c
    org.glite.jp.primary/src/bones_server.c
    org.glite.jp.primary/src/new_ftp_backend.c
    org.glite.jp.primary/src/soap_ops.c
Cherrypick from glite-lb-logger_branch_1_3_3_RC31_2 2007-03-22 10:42:39 UTC Aleš Křenek <ljocha@ics.muni.cz> 'push version':
    org.glite.lb.logger/Makefile
    org.glite.lb.logger/project/version.properties
    org.glite.lb.logger/src/event_store.c
    org.glite.lb.logger/src/il_error.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/send_event.c
Cherrypick from glite-lb-client_branch_2_2_3_RC31_2 2007-03-22 09:49:11 UTC Aleš Křenek <ljocha@ics.muni.cz> 'missing declaration':
    org.glite.lb.client/Makefile
    org.glite.lb.client/build.xml
    org.glite.lb.client/examples/gen_begin
    org.glite.lb.client/examples/job_status.c
    org.glite.lb.client/project/configure.properties.xml
    org.glite.lb.client/project/version.properties
    org.glite.lb.client/src/prod_proto.c
Cherrypick from glite-jp-client_branch_1_1_0_RC31 2006-09-21 11:56:53 UTC Aleš Křenek <ljocha@ics.muni.cz> 'push version':
    org.glite.jp.client/config/startup
    org.glite.jp.client/examples/glite-jp-importer.sh
    org.glite.jp.client/project/version.properties
    org.glite.jp.client/src/jpimporter.c
Cherrypick from glite-lb-common_branch_4_0_0_RC31_2 2007-03-22 10:28:14 UTC Aleš Křenek <ljocha@ics.muni.cz> 'push version':
    org.glite.lb.common/Makefile
    org.glite.lb.common/build.xml
    org.glite.lb.common/project/version.properties
    org.glite.lb.common/src/log_msg.c
Cherrypick from glite-jp-common_branch_1_2_0_RC31 2006-09-21 11:53:20 UTC Aleš Křenek <ljocha@ics.muni.cz> 'push version':
    org.glite.jp.common/interface/known_attr.h
    org.glite.jp.common/interface/types.h
    org.glite.jp.common/project/version.properties
Cherrypick from glite-lb-client-interface_branch_2_2_1_RC31_2 2007-03-01 16:01:03 UTC František Dvořák <valtri@civ.zcu.cz> 'Call make doc explicitly from make install.':
    org.glite.lb.client-interface/Makefile
    org.glite.lb.client-interface/doc/C.dox
    org.glite.lb.client-interface/doc/CPP.dox
Cherrypick from glite-lb-server-bones_branch_2_2_2_RC31_2 2007-03-02 13:30:09 UTC František Dvořák <valtri@civ.zcu.cz> 'Cleanup.':
    org.glite.lb.server-bones/Makefile
    org.glite.lb.server-bones/project/version.properties
    org.glite.lb.server-bones/src/srvbones.c
Cherrypick from glite-lb-ws-interface_branch_2_2_1_RC31_2 2007-03-12 15:07:56 UTC Aleš Křenek <ljocha@ics.muni.cz> 'push age':
    org.glite.lb.ws-interface/Makefile
    org.glite.lb.ws-interface/project/version.properties
    org.glite.lb.ws-interface/src/doc.xml
Cherrypick from glite-lb-utils_branch_1_1_1_RC31_2 2007-03-15 13:12:24 UTC Aleš Křenek <ljocha@ics.muni.cz> 'push age':
    org.glite.lb.utils/Makefile
    org.glite.lb.utils/project/version.properties
Cherrypick from glite-jp-ws-interface_branch_1_2_0_RC31 2007-03-21 18:53:44 UTC František Dvořák <valtri@civ.zcu.cz> 'Detect not compatible clients (based on gSoap < 2.7.9b when using 2.7.9b)':
    org.glite.jp.ws-interface/src/ws_fault.c
Cherrypick from glite-lb-proxy_branch_1_3_3_RC31_2 2006-11-21 17:47:33 UTC Aleš Křenek <ljocha@ics.muni.cz> 'push version':
    org.glite.lb.proxy/project/version.properties
Delete:
    org.glite.deployment.jpis/build.xml
    org.glite.deployment.jpis/config/scripts/glite-jpis-config.py
    org.glite.deployment.jpis/config/templates/glite-jpis.cfg.xml
    org.glite.deployment.jpis/project/build.number
    org.glite.deployment.jpis/project/build.properties
    org.glite.deployment.jpis/project/glite-jp.sdf.xml.template
    org.glite.deployment.jpis/project/glite-jpis.sdf.xml.template
    org.glite.deployment.jpis/project/lxscript-rpm.xsl
    org.glite.deployment.jpis/project/lxscript-tgz.xsl
    org.glite.deployment.jpis/project/properties.xml
    org.glite.deployment.jpis/project/quattor-template.xsl
    org.glite.deployment.jpis/project/version.properties
    org.glite.deployment.jpps/build.xml
    org.glite.deployment.jpps/config/scripts/glite-jpps-config.py
    org.glite.deployment.jpps/config/templates/glite-jpps.cfg.xml
    org.glite.deployment.jpps/project/build.number
    org.glite.deployment.jpps/project/build.properties
    org.glite.deployment.jpps/project/glite-jpps.sdf.xml.template
    org.glite.deployment.jpps/project/lxscript-rpm.xsl
    org.glite.deployment.jpps/project/lxscript-tgz.xsl
    org.glite.deployment.jpps/project/properties.xml
    org.glite.deployment.jpps/project/quattor-template.xsl
    org.glite.deployment.jpps/project/version.properties
    org.glite.deployment.lb/.cvsignore
    org.glite.deployment.lb/CHANGELOG
    org.glite.deployment.lb/LICENSE
    org.glite.deployment.lb/build.xml
    org.glite.deployment.lb/config/scripts/glite-lb-config.py
    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.number
    org.glite.deployment.lb/project/build.properties
    org.glite.deployment.lb/project/glite-lb.sdf.xml.template
    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.index/config/glite-jpis-config.xml
    org.glite.jp.primary/src/ftp_backend.c
    org.glite.lb-utils.context/.cvsignore
    org.glite.lb-utils.context/LICENSE
    org.glite.lb-utils.context/build.xml
    org.glite.lb-utils.context/project/build.number
    org.glite.lb-utils.context/project/build.properties
    org.glite.lb-utils.context/project/configure.properties.xml
    org.glite.lb-utils.context/project/properties.xml
    org.glite.lb-utils.context/project/version.properties
    org.glite.lb-utils.db/.cvsignore
    org.glite.lb-utils.db/LICENSE
    org.glite.lb-utils.db/Makefile
    org.glite.lb-utils.db/build.xml
    org.glite.lb-utils.db/examples/db_test.c
    org.glite.lb-utils.db/interface/db.h
    org.glite.lb-utils.db/project/build.number
    org.glite.lb-utils.db/project/build.properties
    org.glite.lb-utils.db/project/configure.properties.xml
    org.glite.lb-utils.db/project/properties.xml
    org.glite.lb-utils.db/project/tar_exclude
    org.glite.lb-utils.db/project/version.properties
    org.glite.lb-utils.db/src/db.c
    org.glite.lb-utils.jobid/.cvsignore
    org.glite.lb-utils.jobid/LICENSE
    org.glite.lb-utils.jobid/Makefile
    org.glite.lb-utils.jobid/build.xml
    org.glite.lb-utils.jobid/interface/cjobid.h
    org.glite.lb-utils.jobid/interface/strmd5.h
    org.glite.lb-utils.jobid/project/build.number
    org.glite.lb-utils.jobid/project/build.properties
    org.glite.lb-utils.jobid/project/configure.properties.xml
    org.glite.lb-utils.jobid/project/properties.xml
    org.glite.lb-utils.jobid/project/tar_exclude
    org.glite.lb-utils.jobid/project/version.properties
    org.glite.lb-utils.jobid/src/cjobid.c
    org.glite.lb-utils.jobid/src/strmd5.c
    org.glite.lb-utils.server-bones/.cvsignore
    org.glite.lb-utils.server-bones/LICENSE
    org.glite.lb-utils.server-bones/build.xml
    org.glite.lb-utils.server-bones/project/build.number
    org.glite.lb-utils.server-bones/project/build.properties
    org.glite.lb-utils.server-bones/project/configure.properties.xml
    org.glite.lb-utils.server-bones/project/properties.xml
    org.glite.lb-utils.server-bones/project/version.properties
    org.glite.lb-utils.trio/.cvsignore
    org.glite.lb-utils.trio/LICENSE
    org.glite.lb-utils.trio/Makefile
    org.glite.lb-utils.trio/build.xml
    org.glite.lb-utils.trio/interface/escape.h
    org.glite.lb-utils.trio/interface/trio.h
    org.glite.lb-utils.trio/project/build.number
    org.glite.lb-utils.trio/project/build.properties
    org.glite.lb-utils.trio/project/configure.properties.xml
    org.glite.lb-utils.trio/project/properties.xml
    org.glite.lb-utils.trio/project/version.properties
    org.glite.lb-utils.trio/src/escape.c
    org.glite.lb-utils.trio/src/strio.c
    org.glite.lb-utils.trio/src/strio.h
    org.glite.lb-utils.trio/src/trio.c
    org.glite.lb-utils.trio/src/triop.h
    org.glite.lb-utils.trio/test/trio_test.cpp
    org.glite.lb-utils/.cvsignore
    org.glite.lb-utils/LICENSE
    org.glite.lb-utils/build.xml
    org.glite.lb-utils/project/build.number
    org.glite.lb-utils/project/build.properties
    org.glite.lb-utils/project/dependencies.properties
    org.glite.lb-utils/project/glite.lb-utils.csf.xml
    org.glite.lb-utils/project/properties.xml
    org.glite.lb-utils/project/taskdefs.xml
    org.glite.lb-utils/project/version.properties
    org.glite.lb/.cvsignore
    org.glite.lb/LICENSE
    org.glite.lb/build.xml
    org.glite.lb/deployment/README
    org.glite.lb/deployment/deploy_all.diff
    org.glite.lb/deployment/deploy_jp.diff
    org.glite.lb/deployment/deploy_lb.diff
    org.glite.lb/doc/README.lb4vdt
    org.glite.lb/doc/copyright.tex
    org.glite.lb/doc/frontmatter.tex
    org.glite.lb/doc/perf_clear_proxy
    org.glite.lb/doc/perf_purge
    org.glite.lb/doc/perf_reg_jobs
    org.glite.lb/doc/perf_results/il_sci_09062006.txt
    org.glite.lb/doc/perf_results/il_sci_09062006_01.txt
    org.glite.lb/doc/perf_results/il_sci_12062006.txt
    org.glite.lb/doc/perf_results/ll_michal_21062006.txt
    org.glite.lb/doc/perf_results/proxy2serv_umbar2sci_22062006.txt
    org.glite.lb/doc/perf_results/proxy2serv_umbar2sci_23062006.txt
    org.glite.lb/doc/perf_results/proxy_sci_09062006.txt
    org.glite.lb/doc/perf_run_interlogd
    org.glite.lb/doc/perf_run_proxy
    org.glite.lb/doc/perf_run_server
    org.glite.lb/doc/perf_run_test
    org.glite.lb/doc/perftest.tex
    org.glite.lb/doc/testplan.tex
    org.glite.lb/lb4vdt/LB_install.sh
    org.glite.lb/lb4vdt/Makefile.inc
    org.glite.lb/lb4vdt/scripts/org.gridsite.core.build
    org.glite.lb/project/MultiStruct.pm
    org.glite.lb/project/StructField.pm
    org.glite.lb/project/at3
    org.glite.lb/project/build.number
    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/examples/renew_core.c
    org.glite.security.proxyrenewal/interface/renewal.h
    org.glite.security.proxyrenewal/interface/renewal_core.h
    org.glite.security.proxyrenewal/project/build.number
    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_core.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.security.proxyrenewal/src/voms.c
    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.number
    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.exception/test/Makefile.am
    org.glite.wms-utils.exception/test/exception_cu_main.cpp
    org.glite.wms-utils.exception/test/exception_cu_suite.cpp
    org.glite.wms-utils.exception/test/exception_cu_suite.h
    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.number
    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.glite.wms-utils.jobid/test/Makefile.am
    org.glite.wms-utils.jobid/test/jobid_cu_main.cpp
    org.glite.wms-utils.jobid/test/jobid_cu_suite.cpp
    org.glite.wms-utils.jobid/test/jobid_cu_suite.h
    org.glite.wms-utils.jobid/test/manipulation_cu_main.cpp
    org.glite.wms-utils.jobid/test/manipulation_cu_suite.cpp
    org.glite.wms-utils.jobid/test/manipulation_cu_suite.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/build-apache2.sh
    org.gridsite.core/doc/delegation-1.1.0.wsdl
    org.gridsite.core/doc/findproxyfile.1
    org.gridsite.core/doc/fuse.spec
    org.gridsite.core/doc/gridsite-delegation.8
    org.gridsite.core/doc/gsexec.8
    org.gridsite.core/doc/htcp.1
    org.gridsite.core/doc/htfind.1
    org.gridsite.core/doc/htll.1
    org.gridsite.core/doc/htls.1
    org.gridsite.core/doc/htmkdir.1
    org.gridsite.core/doc/htmv.1
    org.gridsite.core/doc/htping.1
    org.gridsite.core/doc/htproxydestroy.1
    org.gridsite.core/doc/htproxyput.1
    org.gridsite.core/doc/htproxyrenew.1
    org.gridsite.core/doc/htproxytime.1
    org.gridsite.core/doc/htproxyunixtime.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/mod_gridsite.8
    org.gridsite.core/doc/urlencode.1
    org.gridsite.core/interface/gridsite-gacl.h
    org.gridsite.core/interface/gridsite.h
    org.gridsite.core/project/build.number
    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-copy.c
    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_asn1.c
    org.gridsite.core/src/grst_err.c
    org.gridsite.core/src/grst_gacl.c
    org.gridsite.core/src/grst_htcp.c
    org.gridsite.core/src/grst_http.c
    org.gridsite.core/src/grst_x509.c
    org.gridsite.core/src/grst_xacml.c
    org.gridsite.core/src/gsexec.c
    org.gridsite.core/src/gsexec.h
    org.gridsite.core/src/htcp.c
    org.gridsite.core/src/htproxyput.c
    org.gridsite.core/src/make-gridsite-spec
    org.gridsite.core/src/mod_gridsite.c
    org.gridsite.core/src/mod_ssl-private.h
    org.gridsite.core/src/roffit
    org.gridsite.core/src/showx509exts.c
    org.gridsite.core/src/slashgrid.c
    org.gridsite.core/src/slashgrid.init
    org.gridsite.core/src/urlencode.c
    org.gridsite.core/src/xacmlexample.c

443 files changed:
org.glite.deployment.jpis/build.xml [deleted file]
org.glite.deployment.jpis/config/scripts/glite-jpis-config.py [deleted file]
org.glite.deployment.jpis/config/templates/glite-jpis.cfg.xml [deleted file]
org.glite.deployment.jpis/project/build.number [deleted file]
org.glite.deployment.jpis/project/build.properties [deleted file]
org.glite.deployment.jpis/project/glite-jp.sdf.xml.template [deleted file]
org.glite.deployment.jpis/project/glite-jpis.sdf.xml.template [deleted file]
org.glite.deployment.jpis/project/lxscript-rpm.xsl [deleted file]
org.glite.deployment.jpis/project/lxscript-tgz.xsl [deleted file]
org.glite.deployment.jpis/project/properties.xml [deleted file]
org.glite.deployment.jpis/project/quattor-template.xsl [deleted file]
org.glite.deployment.jpis/project/version.properties [deleted file]
org.glite.deployment.jpps/build.xml [deleted file]
org.glite.deployment.jpps/config/scripts/glite-jpps-config.py [deleted file]
org.glite.deployment.jpps/config/templates/glite-jpps.cfg.xml [deleted file]
org.glite.deployment.jpps/project/build.number [deleted file]
org.glite.deployment.jpps/project/build.properties [deleted file]
org.glite.deployment.jpps/project/glite-jpps.sdf.xml.template [deleted file]
org.glite.deployment.jpps/project/lxscript-rpm.xsl [deleted file]
org.glite.deployment.jpps/project/lxscript-tgz.xsl [deleted file]
org.glite.deployment.jpps/project/properties.xml [deleted file]
org.glite.deployment.jpps/project/quattor-template.xsl [deleted file]
org.glite.deployment.jpps/project/version.properties [deleted file]
org.glite.deployment.lb/.cvsignore [deleted file]
org.glite.deployment.lb/CHANGELOG [deleted file]
org.glite.deployment.lb/LICENSE [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/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.number [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/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.client/config/startup
org.glite.jp.client/doc/README.jpimporter
org.glite.jp.client/examples/glite-jp-importer.sh
org.glite.jp.client/examples/jpps_upload_files.c
org.glite.jp.client/project/version.properties
org.glite.jp.client/src/jpimporter.c
org.glite.jp.common/interface/known_attr.h
org.glite.jp.common/interface/types.h
org.glite.jp.common/project/version.properties
org.glite.jp.index/Makefile
org.glite.jp.index/config/glite-jpis-config.xml [deleted file]
org.glite.jp.index/examples/jpis-test.c
org.glite.jp.index/examples/pch06/pch.pm [new file with mode: 0644]
org.glite.jp.index/examples/pch06/query1.pl [new file with mode: 0644]
org.glite.jp.index/examples/pch06/query2.pl [new file with mode: 0644]
org.glite.jp.index/examples/pch06/query3.pl [new file with mode: 0644]
org.glite.jp.index/examples/pch06/query4.pl [new file with mode: 0644]
org.glite.jp.index/examples/pch06/query5.pl [new file with mode: 0644]
org.glite.jp.index/examples/pch06/query6.pl [new file with mode: 0644]
org.glite.jp.index/examples/query-tests/authz.out
org.glite.jp.index/examples/query-tests/complex_query.out
org.glite.jp.index/examples/query-tests/run-test.sh
org.glite.jp.index/examples/query-tests/simple_query.out
org.glite.jp.index/project/version.properties
org.glite.jp.index/src/bones_server.c
org.glite.jp.index/src/common_server.c
org.glite.jp.index/src/conf.c
org.glite.jp.index/src/soap_ops.c
org.glite.jp.index/src/ws_is_typeref.c
org.glite.jp.index/src/ws_is_typeref.h
org.glite.jp.index/src/ws_typemap.h
org.glite.jp.primary/Makefile
org.glite.jp.primary/examples/dag-deps.c [new file with mode: 0644]
org.glite.jp.primary/project/configure.properties.xml
org.glite.jp.primary/project/version.properties
org.glite.jp.primary/src/attrs.c
org.glite.jp.primary/src/authz.c
org.glite.jp.primary/src/backend.h
org.glite.jp.primary/src/bones_server.c
org.glite.jp.primary/src/ftp_backend.c [deleted file]
org.glite.jp.primary/src/new_ftp_backend.c
org.glite.jp.primary/src/soap_ops.c
org.glite.jp.ws-interface/src/JobProvenanceIS.xml
org.glite.jp.ws-interface/src/ws_fault.c [new file with mode: 0644]
org.glite.jp/build.xml
org.glite.jp/doc/install-guide/JP-install-guide.tex [new file with mode: 0644]
org.glite.jp/doc/install-guide/LB-JP-interaction-guide.tex
org.glite.jp/doc/install-guide/glite_installation_guide_LB.doc
org.glite.jp/doc/testplan.tex
org.glite.jp/doc/users-quide/JP-users-guide.tex
org.glite.jp/examples/pch06/align.sh [new file with mode: 0644]
org.glite.jp/examples/pch06/align_warp [new file with mode: 0644]
org.glite.jp/examples/pch06/cheat.pl [new file with mode: 0644]
org.glite.jp/examples/pch06/convert [new file with mode: 0644]
org.glite.jp/examples/pch06/convert.sh [new file with mode: 0644]
org.glite.jp/examples/pch06/delegates.xml [new file with mode: 0644]
org.glite.jp/examples/pch06/dump1 [new file with mode: 0644]
org.glite.jp/examples/pch06/dump2 [new file with mode: 0644]
org.glite.jp/examples/pch06/dump3 [new file with mode: 0644]
org.glite.jp/examples/pch06/dump4 [new file with mode: 0644]
org.glite.jp/examples/pch06/pch06.jdl-template [new file with mode: 0644]
org.glite.jp/examples/pch06/pch06.jdl-template2 [new file with mode: 0644]
org.glite.jp/examples/pch06/pch06.runme [new file with mode: 0644]
org.glite.jp/examples/pch06/pch06.runme2 [new file with mode: 0644]
org.glite.jp/examples/pch06/pgmtoppm [new file with mode: 0644]
org.glite.jp/examples/pch06/pgmtoppm.sh [new file with mode: 0644]
org.glite.jp/examples/pch06/pnmtojpeg [new file with mode: 0644]
org.glite.jp/examples/pch06/pnmtojpeg.sh [new file with mode: 0644]
org.glite.jp/examples/pch06/reslice [new file with mode: 0644]
org.glite.jp/examples/pch06/reslice.sh [new file with mode: 0644]
org.glite.jp/examples/pch06/scanheader [new file with mode: 0644]
org.glite.jp/examples/pch06/slicer [new file with mode: 0644]
org.glite.jp/examples/pch06/slicer.sh [new file with mode: 0644]
org.glite.jp/examples/pch06/softmean [new file with mode: 0644]
org.glite.jp/examples/pch06/softmean.sh [new file with mode: 0644]
org.glite.jp/project/dependencies.properties
org.glite.jp/project/version.properties
org.glite.lb-utils.context/.cvsignore [deleted file]
org.glite.lb-utils.context/LICENSE [deleted file]
org.glite.lb-utils.context/build.xml [deleted file]
org.glite.lb-utils.context/project/build.number [deleted file]
org.glite.lb-utils.context/project/build.properties [deleted file]
org.glite.lb-utils.context/project/configure.properties.xml [deleted file]
org.glite.lb-utils.context/project/properties.xml [deleted file]
org.glite.lb-utils.context/project/version.properties [deleted file]
org.glite.lb-utils.db/.cvsignore [deleted file]
org.glite.lb-utils.db/LICENSE [deleted file]
org.glite.lb-utils.db/Makefile [deleted file]
org.glite.lb-utils.db/build.xml [deleted file]
org.glite.lb-utils.db/examples/db_test.c [deleted file]
org.glite.lb-utils.db/interface/db.h [deleted file]
org.glite.lb-utils.db/project/build.number [deleted file]
org.glite.lb-utils.db/project/build.properties [deleted file]
org.glite.lb-utils.db/project/configure.properties.xml [deleted file]
org.glite.lb-utils.db/project/properties.xml [deleted file]
org.glite.lb-utils.db/project/tar_exclude [deleted file]
org.glite.lb-utils.db/project/version.properties [deleted file]
org.glite.lb-utils.db/src/db.c [deleted file]
org.glite.lb-utils.jobid/.cvsignore [deleted file]
org.glite.lb-utils.jobid/LICENSE [deleted file]
org.glite.lb-utils.jobid/Makefile [deleted file]
org.glite.lb-utils.jobid/build.xml [deleted file]
org.glite.lb-utils.jobid/interface/cjobid.h [deleted file]
org.glite.lb-utils.jobid/interface/strmd5.h [deleted file]
org.glite.lb-utils.jobid/project/build.number [deleted file]
org.glite.lb-utils.jobid/project/build.properties [deleted file]
org.glite.lb-utils.jobid/project/configure.properties.xml [deleted file]
org.glite.lb-utils.jobid/project/properties.xml [deleted file]
org.glite.lb-utils.jobid/project/tar_exclude [deleted file]
org.glite.lb-utils.jobid/project/version.properties [deleted file]
org.glite.lb-utils.jobid/src/cjobid.c [deleted file]
org.glite.lb-utils.jobid/src/strmd5.c [deleted file]
org.glite.lb-utils.server-bones/.cvsignore [deleted file]
org.glite.lb-utils.server-bones/LICENSE [deleted file]
org.glite.lb-utils.server-bones/build.xml [deleted file]
org.glite.lb-utils.server-bones/project/build.number [deleted file]
org.glite.lb-utils.server-bones/project/build.properties [deleted file]
org.glite.lb-utils.server-bones/project/configure.properties.xml [deleted file]
org.glite.lb-utils.server-bones/project/properties.xml [deleted file]
org.glite.lb-utils.server-bones/project/version.properties [deleted file]
org.glite.lb-utils.trio/.cvsignore [deleted file]
org.glite.lb-utils.trio/LICENSE [deleted file]
org.glite.lb-utils.trio/Makefile [deleted file]
org.glite.lb-utils.trio/build.xml [deleted file]
org.glite.lb-utils.trio/interface/escape.h [deleted file]
org.glite.lb-utils.trio/interface/trio.h [deleted file]
org.glite.lb-utils.trio/project/build.number [deleted file]
org.glite.lb-utils.trio/project/build.properties [deleted file]
org.glite.lb-utils.trio/project/configure.properties.xml [deleted file]
org.glite.lb-utils.trio/project/properties.xml [deleted file]
org.glite.lb-utils.trio/project/version.properties [deleted file]
org.glite.lb-utils.trio/src/escape.c [deleted file]
org.glite.lb-utils.trio/src/strio.c [deleted file]
org.glite.lb-utils.trio/src/strio.h [deleted file]
org.glite.lb-utils.trio/src/trio.c [deleted file]
org.glite.lb-utils.trio/src/triop.h [deleted file]
org.glite.lb-utils.trio/test/trio_test.cpp [deleted file]
org.glite.lb-utils/.cvsignore [deleted file]
org.glite.lb-utils/LICENSE [deleted file]
org.glite.lb-utils/build.xml [deleted file]
org.glite.lb-utils/project/build.number [deleted file]
org.glite.lb-utils/project/build.properties [deleted file]
org.glite.lb-utils/project/dependencies.properties [deleted file]
org.glite.lb-utils/project/glite.lb-utils.csf.xml [deleted file]
org.glite.lb-utils/project/properties.xml [deleted file]
org.glite.lb-utils/project/taskdefs.xml [deleted file]
org.glite.lb-utils/project/version.properties [deleted file]
org.glite.lb.client-interface/Makefile
org.glite.lb.client-interface/doc/C.dox [new file with mode: 0644]
org.glite.lb.client-interface/doc/CPP.dox [new file with mode: 0644]
org.glite.lb.client/Makefile
org.glite.lb.client/build.xml
org.glite.lb.client/examples/gen_begin
org.glite.lb.client/examples/job_status.c
org.glite.lb.client/project/configure.properties.xml
org.glite.lb.client/project/version.properties
org.glite.lb.client/src/prod_proto.c
org.glite.lb.common/Makefile
org.glite.lb.common/build.xml
org.glite.lb.common/project/version.properties
org.glite.lb.common/src/log_msg.c
org.glite.lb.logger/Makefile
org.glite.lb.logger/project/version.properties
org.glite.lb.logger/src/event_store.c
org.glite.lb.logger/src/il_error.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/send_event.c
org.glite.lb.proxy/project/version.properties
org.glite.lb.server-bones/Makefile
org.glite.lb.server-bones/project/version.properties
org.glite.lb.server-bones/src/srvbones.c
org.glite.lb.server/Makefile
org.glite.lb.server/config/startup
org.glite.lb.server/examples/ws_joblog.c
org.glite.lb.server/examples/ws_jobstat.c
org.glite.lb.server/examples/ws_query_ex.c
org.glite.lb.server/interface/job-record.xsd
org.glite.lb.server/project/version.properties
org.glite.lb.server/src/bkserverd.c
org.glite.lb.server/src/jobstat.c
org.glite.lb.server/src/lb_plugin.c
org.glite.lb.server/src/query.c
org.glite.lb.server/src/ws_fault.c
org.glite.lb.server/src/ws_query.c
org.glite.lb.server/src/ws_typeref.c.T
org.glite.lb.server/src/ws_typeref.h
org.glite.lb.server/test/test_soap_conv.cpp
org.glite.lb.utils/Makefile
org.glite.lb.utils/project/version.properties
org.glite.lb.ws-interface/Makefile
org.glite.lb.ws-interface/project/version.properties
org.glite.lb.ws-interface/src/doc.xml
org.glite.lb/.cvsignore [deleted file]
org.glite.lb/LICENSE [deleted file]
org.glite.lb/build.xml [deleted file]
org.glite.lb/deployment/README [deleted file]
org.glite.lb/deployment/deploy_all.diff [deleted file]
org.glite.lb/deployment/deploy_jp.diff [deleted file]
org.glite.lb/deployment/deploy_lb.diff [deleted file]
org.glite.lb/doc/README.lb4vdt [deleted file]
org.glite.lb/doc/copyright.tex [deleted file]
org.glite.lb/doc/frontmatter.tex [deleted file]
org.glite.lb/doc/perf_clear_proxy [deleted file]
org.glite.lb/doc/perf_purge [deleted file]
org.glite.lb/doc/perf_reg_jobs [deleted file]
org.glite.lb/doc/perf_results/il_sci_09062006.txt [deleted file]
org.glite.lb/doc/perf_results/il_sci_09062006_01.txt [deleted file]
org.glite.lb/doc/perf_results/il_sci_12062006.txt [deleted file]
org.glite.lb/doc/perf_results/ll_michal_21062006.txt [deleted file]
org.glite.lb/doc/perf_results/proxy2serv_umbar2sci_22062006.txt [deleted file]
org.glite.lb/doc/perf_results/proxy2serv_umbar2sci_23062006.txt [deleted file]
org.glite.lb/doc/perf_results/proxy_sci_09062006.txt [deleted file]
org.glite.lb/doc/perf_run_interlogd [deleted file]
org.glite.lb/doc/perf_run_proxy [deleted file]
org.glite.lb/doc/perf_run_server [deleted file]
org.glite.lb/doc/perf_run_test [deleted file]
org.glite.lb/doc/perftest.tex [deleted file]
org.glite.lb/doc/testplan.tex [deleted file]
org.glite.lb/lb4vdt/LB_install.sh [deleted file]
org.glite.lb/lb4vdt/Makefile.inc [deleted file]
org.glite.lb/lb4vdt/scripts/org.gridsite.core.build [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.number [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.gsoap-plugin/Makefile
org.glite.security.gsoap-plugin/build.xml
org.glite.security.gsoap-plugin/interface/glite_gscompat.h [new file with mode: 0644]
org.glite.security.gsoap-plugin/project/version.properties
org.glite.security.gsoap-plugin/src/glite_gsplugin.c
org.glite.security.gsoap-plugin/src/glite_gss.c
org.glite.security.gsoap-plugin/src/stdsoap2_2.7.0f.c [new file with mode: 0644]
org.glite.security.gsoap-plugin/src/stdsoap2_2.7.0f.h [new file with mode: 0644]
org.glite.security.gsoap-plugin/src/stdsoap2_2.7.6b.c [new file with mode: 0644]
org.glite.security.gsoap-plugin/src/stdsoap2_2.7.6b.h [new file with mode: 0644]
org.glite.security.gsoap-plugin/src/stdsoap2_2.7.9b.c [new file with mode: 0644]
org.glite.security.gsoap-plugin/src/stdsoap2_2.7.9b.h [new file with mode: 0644]
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/examples/renew_core.c [deleted file]
org.glite.security.proxyrenewal/interface/renewal.h [deleted file]
org.glite.security.proxyrenewal/interface/renewal_core.h [deleted file]
org.glite.security.proxyrenewal/project/build.number [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_core.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.security.proxyrenewal/src/voms.c [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.number [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.exception/test/Makefile.am [deleted file]
org.glite.wms-utils.exception/test/exception_cu_main.cpp [deleted file]
org.glite.wms-utils.exception/test/exception_cu_suite.cpp [deleted file]
org.glite.wms-utils.exception/test/exception_cu_suite.h [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.number [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.glite.wms-utils.jobid/test/Makefile.am [deleted file]
org.glite.wms-utils.jobid/test/jobid_cu_main.cpp [deleted file]
org.glite.wms-utils.jobid/test/jobid_cu_suite.cpp [deleted file]
org.glite.wms-utils.jobid/test/jobid_cu_suite.h [deleted file]
org.glite.wms-utils.jobid/test/manipulation_cu_main.cpp [deleted file]
org.glite.wms-utils.jobid/test/manipulation_cu_suite.cpp [deleted file]
org.glite.wms-utils.jobid/test/manipulation_cu_suite.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/build-apache2.sh [deleted file]
org.gridsite.core/doc/delegation-1.1.0.wsdl [deleted file]
org.gridsite.core/doc/findproxyfile.1 [deleted file]
org.gridsite.core/doc/fuse.spec [deleted file]
org.gridsite.core/doc/gridsite-delegation.8 [deleted file]
org.gridsite.core/doc/gsexec.8 [deleted file]
org.gridsite.core/doc/htcp.1 [deleted file]
org.gridsite.core/doc/htfind.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/htmv.1 [deleted file]
org.gridsite.core/doc/htping.1 [deleted file]
org.gridsite.core/doc/htproxydestroy.1 [deleted file]
org.gridsite.core/doc/htproxyput.1 [deleted file]
org.gridsite.core/doc/htproxyrenew.1 [deleted file]
org.gridsite.core/doc/htproxytime.1 [deleted file]
org.gridsite.core/doc/htproxyunixtime.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/mod_gridsite.8 [deleted file]
org.gridsite.core/doc/urlencode.1 [deleted file]
org.gridsite.core/interface/gridsite-gacl.h [deleted file]
org.gridsite.core/interface/gridsite.h [deleted file]
org.gridsite.core/project/build.number [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-copy.c [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_asn1.c [deleted file]
org.gridsite.core/src/grst_err.c [deleted file]
org.gridsite.core/src/grst_gacl.c [deleted file]
org.gridsite.core/src/grst_htcp.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/grst_xacml.c [deleted file]
org.gridsite.core/src/gsexec.c [deleted file]
org.gridsite.core/src/gsexec.h [deleted file]
org.gridsite.core/src/htcp.c [deleted file]
org.gridsite.core/src/htproxyput.c [deleted file]
org.gridsite.core/src/make-gridsite-spec [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/roffit [deleted file]
org.gridsite.core/src/showx509exts.c [deleted file]
org.gridsite.core/src/slashgrid.c [deleted file]
org.gridsite.core/src/slashgrid.init [deleted file]
org.gridsite.core/src/urlencode.c [deleted file]
org.gridsite.core/src/xacmlexample.c [deleted file]

diff --git a/org.glite.deployment.jpis/build.xml b/org.glite.deployment.jpis/build.xml
deleted file mode 100644 (file)
index c2bf066..0000000
+++ /dev/null
@@ -1,94 +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 Server Deployment Unit
-       
-    Authors: Alberto Di Meglio <alberto.di.meglio@cern.ch>     
-
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       
--->
-
-<project name="deployment-lb" default="dist">
-
-       <!-- =========================================
-                Builds the gLite JP 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}"/>
-               <property file="${module.build.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.jpis/config/scripts/glite-jpis-config.py b/org.glite.deployment.jpis/config/scripts/glite-jpis-config.py
deleted file mode 100755 (executable)
index eb75155..0000000
+++ /dev/null
@@ -1,492 +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-jpis-config v. 1.0.0
-#
-# Post-installation script for configuring the gLite Job Provenance Servers
-# Robert Harakaly < mmulac@cern.ch >
-#
-# Version info: $Id$
-#
-# Usage: python glite-jpis-config [-c|-v|-h|--help]
-#        -c, --checkconf         print configuration
-#        -v, --version           print version
-#        -h,--help   print usage info
-#        --configure             configure the service
-#        --start                 start the service
-#        --stop                  stop the service
-#        --status                show service status
-#
-# Return codes: 0 - Ok
-#               1 - Configuration failed
-#
-################################################################################
-
-import os,string,pwd
-import sys, posix, getopt,time
-
-sys.path.append(".")
-from gLiteInstallerLib import gLib 
-from gLiteInstallerLib import ConfigParams
-import mysql as MySQL
-
-# Set global variables here 
-global params                         # all config values from the XML file
-
-class glite_jpis:
-
-    def __init__(self):
-        self.mysql = MySQL.Mysql()
-        self.verbose = 0
-        self.version = "1.0.0"
-        self.name = "glite-jpis"
-        self.friendly_name = "gLite Job Provenance Index Server"
-        
-    #-------------------------------------------------------------------------------
-    # 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 '    --configure         configure the service'
-        print '    --start             start the service'
-        print '    --stop              stop the service'
-        print '    --status            check service status'
-        print '\n'
-
-    #-------------------------------------------------------------------------------
-    # All the configuration code goes here
-    #-------------------------------------------------------------------------------
-
-    def start(self):
-
-        self.mysql.start()
-        time.sleep(5)
-
-        if not os.path.exists('/tmp/mysql.sock'):
-            os.symlink('/var/lib/mysql/mysql.sock', '/tmp/mysql.sock')
-            
-        #-------------------------------------------------------------------
-        # Start Index Server
-        #-------------------------------------------------------------------
-
-        pid = glib.getPID('indexd')
-        if pid != 0:
-            print 'The gLite JP Index Server service is already running. Restarting...'
-            os.system('%s/etc/init.d/glite-jp-indexd stop' % os.environ['GLITE_LOCATION'])
-        else:
-            print 'Starting the gLite JP Index Server service...'
-
-        os.system('%s/etc/init.d/glite-jp-indexd start' % os.environ['GLITE_LOCATION'])
-
-        pid = glib.getPID('indexd')
-
-        if (pid != 0):
-            print "The gLite JP Index Server service has been started               ",
-            glib.printOkMessage()
-        else:
-            glib.printErrorMessage("Could not start the gLite JP Index Server service")
-            glib.printErrorMessage("Please verify and re-run the script                        "),
-            glib.printFailedMessage()
-            return 1
-        
-       return 0
-        
-    def stop(self):
-
-       error_level = 0
-
-        #-------------------------------------------------------------------
-        # Stop Index Server
-        #-------------------------------------------------------------------
-
-        pid = glib.getPID('indexd')
-        if (pid != 0):
-            os.system('%s/etc/init.d/glite-jp-indexd stop' % os.environ['GLITE_LOCATION'])
-
-        pid = glib.getPID('indexd')
-        if (pid != 0):
-            print 'Could not stop the JP Index Server service            ',
-            glib.printFailedMessage()
-            error_level = 1
-        else:
-            print 'JP Index Server service has been stopped            ',
-            glib.printOkMessage()
-        
-        #-------------------------------------------------------------------
-        # MySQL
-        #-------------------------------------------------------------------
-
-        self.mysql.stop()
-
-        return error_level
-        
-    def status(self):
-
-        error_level = 0
-
-        retval = os.system('%s/etc/init.d/glite-jp-indexd status' % os.environ['GLITE_LOCATION'])
-        if retval != 0:
-            error_level = 1
-
-        return error_level
-        
-    def configure(self):
-        
-        #--------------------------------------------------------
-        # Installs the Security Utilities
-        #--------------------------------------------------------
-        
-        if os.system("python %s/glite-security-utils-config.py --subservice" % glib.getScriptPath()):
-            print "\nConfiguring gLite Security Utilities                   ",
-            glib.printFailedMessage()
-        else:
-            print "\nConfiguring gLite Security Utilities                   ",
-            glib.printOkMessage()
-        
-        # Create the GLITE_USER if it doesn't exists
-        print "\nCreating/Verifying the GLITE_USER account %s" % os.environ['GLITE_USER']
-        (uid,gid) = glib.get_user_info(os.environ['GLITE_USER'])
-        glib.check_dir(os.environ['GLITE_LOCATION_VAR'],0755, uid, gid)
-        jpis_cert_path = pwd.getpwnam(os.environ['GLITE_USER'])[5] + "/" + params['user.certificate.path']
-        glib.check_dir(jpis_cert_path ,0755, uid, gid)
-        glib.printOkMessage()
-
-        # Create all directories needed
-        glib.check_dir(os.environ['GLITE_CERT_DIR'])
-        print "\nVerify CA certificates directory            ",
-        glib.printOkMessage()
-         
-        # Copy certificates
-        print "\nCopy host certificates to GLITE_USER home directory as service certificates",
-        os.system("cp %s %s %s/" % (params['host.certificate.file'], params['host.key.file'], jpis_cert_path))
-        os.chown("%s/hostcert.pem" % jpis_cert_path, uid,gid)
-        os.chmod("%s/hostcert.pem" % jpis_cert_path, 0644)
-        os.chown("%s/hostkey.pem" % jpis_cert_path, uid,gid)
-        os.chmod("%s/hostkey.pem" % jpis_cert_path, 0400)
-        glib.printOkMessage()
-
-        #--------------------------------------------------------
-        # Configure MySQL
-        #--------------------------------------------------------
-
-       # Set mysql parameters
-        #self.mysql.setConfiguration('client','max_allowed_packet',params['mysql.max_allowed_packet'])
-        self.mysql.setConfiguration('mysqld','max_allowed_packet',params['mysql.max_allowed_packet'])
-        
-        # start MySQL
-        self.mysql.stop()
-        time.sleep(5)
-        self.mysql.start()
-        
-        if not os.path.exists('/tmp/mysql.sock'):
-            os.symlink('/var/lib/mysql/mysql.sock', '/tmp/mysql.sock')
-
-        # ------------------------------------------------------------
-        # Check password of MySQL
-        # ------------------------------------------------------------
-        
-        self.mysql_root_password = params['mysql.root.password']
-        if not params.has_key('set.mysql.root.password'):
-            params['set.mysql.root.password'] = 'false'
-        setempty = params['set.mysql.root.password']
-        if self.mysql.checkMySQLConfiguration(self.mysql_root_password,setempty):
-            return 1
-        
-        # Create the MySQL database
-        print "\nCreate/Verify the %s database" % params['jpis.database.name']
-        
-        # Check if database exists
-        if self.mysql.existsDB(params['jpis.database.name'],self.mysql_root_password) != 0:
-            # Create database
-            print ('\n==> Creating MySQL %s database\n' % params['jpis.database.name'])
-    
-            if os.path.exists('/bin/rm /tmp/mysql_ct'):
-                os.remove('/tmp/mysql_ct')
-            
-            file = open('/tmp/mysql_ct', 'w')
-
-            self.mysql.add_user(params['jpis.database.name'],params['jpis.database.username'],"",self.mysql_root_password)
-            text = ['USE %s;\n' % params['jpis.database.name'],
-                    '\. %s/etc/glite-jp-index-dbsetup.sql\n' % os.environ['GLITE_LOCATION']]
-    
-            file.writelines(text)
-            file.close()
-            os.system('/usr/bin/mysql -p%s < /tmp/mysql_ct' % self.mysql_root_password)
-            os.system('/bin/rm /tmp/mysql_ct')
-            
-            #Starting and stopping the database before the index creation
-            self.mysql.stop()
-            time.sleep(5)
-            self.mysql.start()
-
-        else:
-            print "\n==> MySQL database %s already exist\n" % params['jpis.database.name']
-            
-        self.mysql.stop()
-    
-        return 0
-        
-#-------------------------------------------------------------------------------
-# Set all environment variables
-#-------------------------------------------------------------------------------
-
-def loadDefaults(params):
-
-    params['GLITE_LOCATION'] = "/opt/glite"
-    params['mysql.root.password'] = ""
-    params['mysql.max_allowed_packet'] = "17"
-    params['jpis.serviceName'] = 'JP IS Server service at %s' % glib.fq_hostname
-    params['jpis.serviceType'] = 'org.glite.jp.index'
-    params['jpis.statusScript'] = '%s/etc/init.d/glite-jp-indexd status' % params['GLITE_LOCATION']
-    params['jpis.endpoint'] = 'not available'
-
-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)
-
-    if not params.has_key('glite.user.group'):
-        params['glite.user.group'] = ''
-    (uid,gid) = glib.add_user(params['glite.user.name'],params['glite.user.group'])
-    glib.export('GLITE_USER',params['glite.user.name'])
-    jpis_cert_path = pwd.getpwnam(os.environ['GLITE_USER'])[5] + "/" + params['user.certificate.path']
-    glib.export('GLITE_HOST_CERT',"%s/hostcert.pem" % jpis_cert_path)
-    glib.export('GLITE_HOST_KEY',"%s/hostkey.pem" % jpis_cert_path)
-    glib.export('GLITE_CERT_DIR',params['ca.certificates.dir'])
-
-    glib.export('GLOBUS_LOCATION',params['GLOBUS_LOCATION'])
-    glib.export('GPT_LOCATION',params['GPT_LOCATION'])
-    
-    glib.export('JAVA_HOME')
-
-    # bin and lib paths
-    glib.addEnvPath("PATH","/usr/bin/:%s/bin:%s/bin:%s/externals/bin:%s/bin" \
-        % (os.environ['JAVA_HOME'],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']))
-
-    # Perl
-    glib.addEnvPath("PERL5LIB", "%s/lib/perl:%s/lib/perl5" % (os.environ['GPT_LOCATION'],os.environ['GLITE_LOCATION']))
-
-    # JP IS configuration
-    glib.export('GLITE_JPIS_PS',params['jpis.ps'])    
-    glib.export('GLITE_JPIS_DEBUG',params['jpis.debug'])    
-    glib.export('GLITE_JPIS_QT',params['jpis.qt'])    
-    glib.export('GLITE_JPIS_AUTH',params['jpis.auth'])    
-    glib.export('GLITE_JPIS_DB',"%s/@localhost:%s" % (params['jpis.database.username'], params['jpis.database.name']) )
-    glib.export('GLITE_JPIS_PORT',params['jpis.port'])    
-    glib.export('GLITE_JPIS_PIDFILE',params['jpis.pid.file'])    
-    glib.export('GLITE_JPIS_LOGFILE',params['jpis.log.file'])
-
-    # Set environment
-    glib.setUserEnv()
-    
-#-------------------------------------------------------------------------------
-#  Main program begins here 
-#-------------------------------------------------------------------------------
-
-if __name__ == '__main__':
-
-    # 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 ConfigParams class
-    params = ConfigParams()
-
-    # Get an instance of the library class
-    glib = gLib()
-    
-    # Load parameters
-    loadDefaults(params)
-    try:
-        opts, args = glib.getopt(sys.argv[1:], '', ['siteconfig='])
-        for o, a in opts:
-            if o == "--siteconfig":
-                params['site.config.url'] = a
-                break
-    except getopt.GetoptError:
-        pass
-    if glib.loadConfiguration("%s/../glite-jpis.cfg.xml" % glib.getScriptPath(),params):
-        print "An error occurred while configuring the service"
-        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_jpis()
-    service.verbose = verbose
-    
-    # Command line opts if any
-    try:
-        opts, args = glib.getopt(sys.argv[1:], 'chv', ['checkconf', 'help', 'version','configure','stop','start','status','siteconfig='])
-    except getopt.GetoptError:
-        service.usage(msg = "Unknown options(s)")
-        sys.exit(1)
-
-    if len(opts) == 0:
-        service.usage()
-        sys.exit(0)
-    
-    # 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 == "--configure":
-       
-
-           # Check certificates
-           if params.has_key('glite.installer.checkcerts'):
-               if params['glite.installer.checkcerts'] == "true":
-                   if glib.check_certs(params) != 0:
-                       print "An error occurred while configuring the %s service" \
-                           % service.friendly_name
-                       sys.exit(1)
-           
-           # Print configuration parameters
-           if verbose:
-               glib.print_params(params)
-
-           service.copyright()
-           service.showVersion()
-           service.banner()
-        
-            # Stop all services
-            glib.printInfoMessage("\n\nStopping all running JP IS services...")
-            service.stop()
-            
-    # Configure the service
-            return_result = service.configure()
-
-            if return_result == 0:
-
-                # Stop all services
-                glib.printInfoMessage("\n\nStopping all running JP IS services...")
-                service.stop()
-                
-                print "\n\nThe %s configuration was successfully completed\n" % service.friendly_name
-                print "You can now start the service using the --start option of this script\n\n"
-               glib.registerService()
-
-                sys.exit(0)
-
-            elif return_result == 2:
-
-                # Stop all services
-                glib.printInfoMessage("\n\nStopping all running JP IS services...")
-                service.stop()
-                
-                print "\n\nThe %s configuration was completed,\n" % service.friendly_name
-                print "but warnings were issued. Please revise them and re-run the script\n"
-                print "or configure JP IS manually\n"
-
-                sys.exit(2)
-
-           else:
-                print "\n\nAn unrecoverable error occurred while configuring the %s" \
-                    % service.friendly_name
-
-               sys.exit(1)
-        
-       if o in ("start", "--start"):
-           # Start the service
-           if service.start() == 0:
-                print "\n\nThe %s was successfully started           " % service.friendly_name,
-               glib.printOkMessage()
-                sys.exit(0)
-           else:
-                print "\n\nAn error occurred while starting the %s            " % service.friendly_name,
-               glib.printFailedMessage()
-               sys.exit(1)
-
-        if o in ("stop", "--stop"): 
-            # Stop the service
-            if service.stop() == 0:
-                print "\n\nThe %s was successfully stopped           " % service.friendly_name,
-                glib.printOkMessage()
-                sys.exit(0)
-            else:
-                print "\n\nAn unrecoverable error occurred while stopping the %s " % service.friendly_name,
-                glib.printFailedMessage()
-                sys.exit(1)
-        if o == "--status":
-            sys.exit(service.status())
-                
diff --git a/org.glite.deployment.jpis/config/templates/glite-jpis.cfg.xml b/org.glite.deployment.jpis/config/templates/glite-jpis.cfg.xml
deleted file mode 100644 (file)
index cd56a80..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-<!--  Parameters for  configuring the org.glite.data.io-daemon service -->
-<config>
-       <parameters>
-
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-               <!-- User-defined parameters - Please change them -->
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-
-               <!--  gLite services user accounts  -->
-               <glite.user.name 
-                       description="Name of the user account used to run the gLite services
-                       on this JP node"
-                       value="changeme"/>
-
-               <glite.user.group
-                       description="Group of the user specified in the 'glite.user.name'
-                       parameter. Leave it empty of comment it out to use the same as 'glite.user.name'"
-                       value="changeme"/>
-               
-               <mysql.root.password
-                       description="The mysql root password"
-                       value="changeme"/>
-
-               <!-- JP Index Server configuration -->
-               <jpis.ps
-                       description="URL of JP Index Server, typically https://localhost:jpps.port"
-                       value="changeme"/>
-               
-                               
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-               <!-- Advanced parameters - Change them if you know what you're doing -->
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-
-               <!-- Installer configuration -->
-               <glite.installer.verbose
-                       description="Enable verbose output"
-                       value="true"/>
-                       
-               <glite.installer.checkcerts
-                       description="Enable check of host certificates"
-                       value="true"/>
-
-               <!-- mysql configuration -->
-               <set.mysql.root.password
-                       description="If this parameter is true, then the root password of the mysql database
-                       is set to the value specified in mysql.root.password if it not yet set. This parameter has
-                       no effect if the database root password is already set. It can be used to ease automated
-                       installation and configuration of the service, if mysql is not managed in some other way"
-                       value="false"/>
-
-               <!-- JP Index Server configuration -->
-               <jpis.debug
-                       description="enables to pass various debug options to JP IS"
-                       value=""/>
-
-               <jpis.qt
-                       description="enables to set query type - one of hist/cont/both"
-                       value="both"/>
-
-               <jpis.auth
-                       description="setting to '-n' switches off authorization"
-                       value=""/>
-
-               <jpis.database.name
-                       description="JP IS DB name"
-                       value="jpis"/>
-
-               <jpis.database.username
-                       description="JP IS DB user"
-                       value="jpis"/>
-
-               <jpis.port
-                       description="default JP IS port"
-                       value="8902"/>
-
-               <jpis.pid.file
-                       description="path to non-default pidfile"
-                       value=""/>
-
-               <jpis.log.file
-                       description="path to non-default logfile"
-                       value=""/>
-
-
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-               <!-- System parameters - You should leave these alone -->
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->               
-       
-                       
-       </parameters>
-
-</config>
diff --git a/org.glite.deployment.jpis/project/build.number b/org.glite.deployment.jpis/project/build.number
deleted file mode 100644 (file)
index 58569c4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#Wed Apr 13 09:36:57 CEST 2005
-module.build=232
diff --git a/org.glite.deployment.jpis/project/build.properties b/org.glite.deployment.jpis/project/build.properties
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.glite.deployment.jpis/project/glite-jp.sdf.xml.template b/org.glite.deployment.jpis/project/glite-jp.sdf.xml.template
deleted file mode 100644 (file)
index d27cdec..0000000
+++ /dev/null
@@ -1,117 +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-jpis-node" version="@module.version@">
-       <services>
-               <service name="glite-jpis-service">
-                       <components>
-                           <component name="glite-config"
-                                       version="@org.glite.deployment.config.info.version@"
-                                       age="@org.glite.deployment.config.info.age@"
-                                       build="@org.glite.deployment.config.info.build@"
-                                       arch="noarch"/>
-                                       
-                               <component name="glite-jpis-config"
-                                       version="@module.version@"
-                                       age="@module.age@"
-                                       build="@module.build@"
-                                       arch="noarch"/>
-
-                               <component name="glite-jp-ws-interface"
-                                       version="@org.glite.jp.ws-interface.info.version@"
-                                       age="@org.glite.jp.ws-interface.info.age@"
-                                       build="@org.glite.jp.ws-interface.info.build@"
-                                       arch="i386"/>
-                       
-                               <component name="glite-jp-common"
-                                       version="@org.glite.jp.common.info.version@"
-                                       age="@org.glite.jp.common.info.age@"
-                                       build="@org.glite.jp.common.info.build@"
-                                       arch="i386"/>
-       
-                               <component name="glite-jp-index"
-                                       version="@org.glite.jp.index.info.version@"
-                                       age="@org.glite.jp.index.info.age@"
-                                       build="@org.glite.jp.index.info.build@"
-                                       arch="i386"/>
-                                          
-                               <component name="glite-jp-server-common"
-                                       version="@org.glite.jp.server-common.info.version@"
-                                       age="@org.glite.jp.server-common.info.age@"
-                                       build="@org.glite.jp.server-common.info.build@"
-                                       arch="i386"/>
-
-                               <component name="glite-wms-utils-jobid"
-                                       version="@org.glite.wms-utils.jobid.info.version@"
-                                       age="@org.glite.wms-utils.jobid.info.age@"
-                                       build="@org.glite.wms-utils.jobid.info.build@"
-                                       arch="i386"/>
-       
-                               <component name="glite-wms-utils-exception"
-                                       version="@org.glite.wms-utils.exception.info.version@"
-                                       age="@org.glite.wms-utils.exception.info.age@"
-                                       build="@org.glite.wms-utils.exception.info.build@"
-                                       arch="i386"/>
-                               
-                               <component name="glite-security-gsoap-plugin"
-                                       version="@org.glite.security.gsoap-plugin.info.version@"
-                                       age="@org.glite.security.gsoap-plugin.info.age@"
-                                       build="@org.glite.security.gsoap-plugin.info.build@"
-                                       arch="i386"/>
-                               
-                               <component name="glite-security-voms-api-c"
-                                   version="@org.glite.security.voms-api-c.info.version@"
-                                   age="@org.glite.security.voms-api-c.info.age@"
-                                   build="@org.glite.security.voms-api-c.info.build@"
-                                   arch="i386"/>
-
-                               <component name="gridsite"
-                                   version="@org.gridsite.core.info.version@"
-                                   age="@org.gridsite.core.info.age@"
-                                                       build="@org.gridsite.core.info.build@"
-                                   arch="i386"/>
-                       </components>
-                       <dependencies>
-                               <external name="@ext.mysql-server.rpm.name@"
-                                         version="@ext.mysql-server.version@"
-                                         age="@ext.mysql-server.rpm.age@"
-                                         arch="@ext.mysql-server.platform@"/>                            
-                               <external name="@ext.mysql-client.rpm.name@"
-                                         version="@ext.mysql-client.version@"
-                                         age="@ext.mysql-client.rpm.age@"
-                                         arch="@ext.mysql-client.platform@"/>                            
-                               <external name="@ext.c-ares.rpm.name@"
-                                       version="@ext.c-ares.version@"
-                                       age="@ext.c-ares.rpm.age@"
-                                       arch="@ext.c-ares.platform@"/>
-                               <external name="@ext.globus-essentials.rpm.name@"
-                                       version="@ext.globus-essentials.rpm.version@"
-                                       age="@ext.globus-essentials.rpm.age@"
-                                       arch="@ext.globus-essentials.platform@"/>
-                               <external name="@ext.gpt.rpm.name@"
-                                       version="@ext.gpt.rpm.version@"
-                                       age="@ext.gpt.rpm.age@"
-                                       arch="@ext.gpt.platform@"/>
-                               <external name="@ext.myproxy.rpm.name@"
-                                       version="@ext.myproxy.version@"
-                                       age="@ext.myproxy.rpm.age@"
-                                       arch="@ext.myproxy.platform@"/>
-                               <external name="@ext.perl-expect-pm.rpm.name@"
-                                       version="@ext.perl-expect-pm.version@"
-                                       age="@ext.perl-expect-pm.rpm.age@"
-                                       arch="@ext.perl-expect-pm.platform@"/>
-                       </dependencies>
-               </service>
-
-               <!-- Security Utilities -->
-        <service name="glite-security-utils">
-                <subservice name="glite-security-utils"/>
-        </service>
-       </services>
-       <dependencies>
-       </dependencies>
-</node>
diff --git a/org.glite.deployment.jpis/project/glite-jpis.sdf.xml.template b/org.glite.deployment.jpis/project/glite-jpis.sdf.xml.template
deleted file mode 100644 (file)
index d27cdec..0000000
+++ /dev/null
@@ -1,117 +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-jpis-node" version="@module.version@">
-       <services>
-               <service name="glite-jpis-service">
-                       <components>
-                           <component name="glite-config"
-                                       version="@org.glite.deployment.config.info.version@"
-                                       age="@org.glite.deployment.config.info.age@"
-                                       build="@org.glite.deployment.config.info.build@"
-                                       arch="noarch"/>
-                                       
-                               <component name="glite-jpis-config"
-                                       version="@module.version@"
-                                       age="@module.age@"
-                                       build="@module.build@"
-                                       arch="noarch"/>
-
-                               <component name="glite-jp-ws-interface"
-                                       version="@org.glite.jp.ws-interface.info.version@"
-                                       age="@org.glite.jp.ws-interface.info.age@"
-                                       build="@org.glite.jp.ws-interface.info.build@"
-                                       arch="i386"/>
-                       
-                               <component name="glite-jp-common"
-                                       version="@org.glite.jp.common.info.version@"
-                                       age="@org.glite.jp.common.info.age@"
-                                       build="@org.glite.jp.common.info.build@"
-                                       arch="i386"/>
-       
-                               <component name="glite-jp-index"
-                                       version="@org.glite.jp.index.info.version@"
-                                       age="@org.glite.jp.index.info.age@"
-                                       build="@org.glite.jp.index.info.build@"
-                                       arch="i386"/>
-                                          
-                               <component name="glite-jp-server-common"
-                                       version="@org.glite.jp.server-common.info.version@"
-                                       age="@org.glite.jp.server-common.info.age@"
-                                       build="@org.glite.jp.server-common.info.build@"
-                                       arch="i386"/>
-
-                               <component name="glite-wms-utils-jobid"
-                                       version="@org.glite.wms-utils.jobid.info.version@"
-                                       age="@org.glite.wms-utils.jobid.info.age@"
-                                       build="@org.glite.wms-utils.jobid.info.build@"
-                                       arch="i386"/>
-       
-                               <component name="glite-wms-utils-exception"
-                                       version="@org.glite.wms-utils.exception.info.version@"
-                                       age="@org.glite.wms-utils.exception.info.age@"
-                                       build="@org.glite.wms-utils.exception.info.build@"
-                                       arch="i386"/>
-                               
-                               <component name="glite-security-gsoap-plugin"
-                                       version="@org.glite.security.gsoap-plugin.info.version@"
-                                       age="@org.glite.security.gsoap-plugin.info.age@"
-                                       build="@org.glite.security.gsoap-plugin.info.build@"
-                                       arch="i386"/>
-                               
-                               <component name="glite-security-voms-api-c"
-                                   version="@org.glite.security.voms-api-c.info.version@"
-                                   age="@org.glite.security.voms-api-c.info.age@"
-                                   build="@org.glite.security.voms-api-c.info.build@"
-                                   arch="i386"/>
-
-                               <component name="gridsite"
-                                   version="@org.gridsite.core.info.version@"
-                                   age="@org.gridsite.core.info.age@"
-                                                       build="@org.gridsite.core.info.build@"
-                                   arch="i386"/>
-                       </components>
-                       <dependencies>
-                               <external name="@ext.mysql-server.rpm.name@"
-                                         version="@ext.mysql-server.version@"
-                                         age="@ext.mysql-server.rpm.age@"
-                                         arch="@ext.mysql-server.platform@"/>                            
-                               <external name="@ext.mysql-client.rpm.name@"
-                                         version="@ext.mysql-client.version@"
-                                         age="@ext.mysql-client.rpm.age@"
-                                         arch="@ext.mysql-client.platform@"/>                            
-                               <external name="@ext.c-ares.rpm.name@"
-                                       version="@ext.c-ares.version@"
-                                       age="@ext.c-ares.rpm.age@"
-                                       arch="@ext.c-ares.platform@"/>
-                               <external name="@ext.globus-essentials.rpm.name@"
-                                       version="@ext.globus-essentials.rpm.version@"
-                                       age="@ext.globus-essentials.rpm.age@"
-                                       arch="@ext.globus-essentials.platform@"/>
-                               <external name="@ext.gpt.rpm.name@"
-                                       version="@ext.gpt.rpm.version@"
-                                       age="@ext.gpt.rpm.age@"
-                                       arch="@ext.gpt.platform@"/>
-                               <external name="@ext.myproxy.rpm.name@"
-                                       version="@ext.myproxy.version@"
-                                       age="@ext.myproxy.rpm.age@"
-                                       arch="@ext.myproxy.platform@"/>
-                               <external name="@ext.perl-expect-pm.rpm.name@"
-                                       version="@ext.perl-expect-pm.version@"
-                                       age="@ext.perl-expect-pm.rpm.age@"
-                                       arch="@ext.perl-expect-pm.platform@"/>
-                       </dependencies>
-               </service>
-
-               <!-- Security Utilities -->
-        <service name="glite-security-utils">
-                <subservice name="glite-security-utils"/>
-        </service>
-       </services>
-       <dependencies>
-       </dependencies>
-</node>
diff --git a/org.glite.deployment.jpis/project/lxscript-rpm.xsl b/org.glite.deployment.jpis/project/lxscript-rpm.xsl
deleted file mode 100644 (file)
index 7b6c6e3..0000000
+++ /dev/null
@@ -1,336 +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="installers"/>
-       <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-jpis_installer v. <xsl:value-of select="/node/@version"/>
-#
-# The glite-jpis_installer installs the gLite Job Provenance Index Server
-#
-# Usage: glite-jpis_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
-}
-
-#Parse the SCRIPTLIST to execute all scripts
-function parseScriptList()
-{
-        for i in $SCRIPTLIST
-        do
-               if [ "$INSTALL" = "true" ]; then
-                        $i
-               else
-                        $i -u
-               fi
-        done
-}
-
-#Downloads and install the module RPMS
-function install()
-{
-
-       INSTALL=true
-       version
-       echo
-       echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-       echo x Please wait, downloading the gLite Job Provenance Index Server... x
-       echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-       echo
-
-        mkdir -p glite-jpis
-        cd glite-jpis
-
-       # 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"/> scripts from repository
-                <xsl:for-each select=".">
-                        <xsl:apply-templates select="subservice">
-                                <xsl:with-param name="install">true</xsl:with-param>
-                        </xsl:apply-templates>
-                </xsl:for-each>
-
-
-       # 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>
-
-       # Download and install subservices
-        parseScriptList
-
-               
-       # Install all RPMS
-       echo
-       echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-       echo x Please wait, installing the gLite Job Provenance Index Server... x
-       echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-       echo
-       parseRPMList
-       if [ ! -z "$RPMLIST" ]; then
-               rpm -Uvh $RPMLIST
-               rpm_return=$?
-       else
-               echo All required RPMS are already installed
-               rpm_return=0
-       fi
-       if [ "$rpm_return" == "0" ]; then
-               echo
-               echo Done!
-               echo
-               echo Before using the gLite JP, please create or update the configuration
-               echo files /opt/glite/etc/config/glite-jpis.cfg.xml
-               echo and /opt/glite/etc/config/glite-global.cfg.xml
-               echo and run the configuration script
-               echo /opt/glite/etc/config/scripts/glite-jpis-config.py.
-               echo A template is provided in
-               echo /opt/glite/etc/config/templates/glite-jpis.cfg.xml
-               echo Alternatively site configuration files can be used
-       else
-               echo
-               echo An error occurred while installing the JP RPMS.
-               echo Most likely one or more of the RPMS to be installed require
-               echo additional dependencies or are older than already installed packages.
-               echo Please refer to the rpm error message above for more details.
-       fi
-       echo
-       echo For more information refer to the gLite Installation and User Guides
-       echo or to the gLite web site \(http:\/\/www.glite.org\)
-       echo Please report problems and comments to the gLite Team at
-       echo glite-bugs@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 Job Provenance Index Server... x
-       echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-       echo
-       rpm -ev $RPMLIST
-       if [ "$?" == "0" ]; then
-               echo
-               echo Done!
-       else
-               echo
-               echo An error occurred while removing the JP RPMS.
-               echo Most likely one or more of the RPMS to be removed have
-               echo dependent packages.
-               echo Please refer to the rpm error message above for more details.
-       fi
-}
-
-###############################################################################
-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-jpis_installer v. <xsl:value-of select="/node/@version"/>
-       echo 
-       echo The glite-jpis_installer installs the gLite Job Provenance Index Server
-       echo 
-       echo Usage: glite-jpis_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-jpis_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="subservices" match="subservice">
-                <xsl:param name="install"/>
-                <xsl:variable name="package"><xsl:value-of select="@name"/>_installer.sh</xsl:variable>
-                <xsl:choose>
-                        <xsl:when test="$install = 'true'">
-wget -N -nv <xsl:value-of select="$installers"/><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
-chmod u+x <xsl:value-of select="$package"/>
-SCRIPTLIST="$SCRIPTLIST ./<xsl:value-of select="$package"/>"
-                        </xsl:when>
-                        <xsl:otherwise>
-SCRIPTLISTUn="$SCRIPTLISTUn ./<xsl:value-of select="$package"/> -u "
-                        </xsl:otherwise>
-                </xsl:choose>
-        </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 -nv <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 -nv <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.jpis/project/lxscript-tgz.xsl b/org.glite.deployment.jpis/project/lxscript-tgz.xsl
deleted file mode 100644 (file)
index 8b1e0c0..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-jpis_tgz_installer
-# usage: glite-jpis_tgz_installer [-u]
-#               -u             uninstall
-#
-# glite-jpis_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.jpis/project/properties.xml b/org.glite.deployment.jpis/project/properties.xml
deleted file mode 100644 (file)
index 072dd67..0000000
+++ /dev/null
@@ -1,63 +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 Server Node Deployment Unit
-       
-       Author: Alberto Di Meglio <alberto.di.meglio@cern.ch>
-       Version info: $Id$
-       Release: $Name$ 
-       
-       Revision history:
-       $Log$
-       Revision 1.2  2005/07/08 13:18:40  dimeglio
-       Merged from branch 1.2.2
-       
-       Revision 1.1  2004/10/06 09:19:24  dimeglio
-       First version of this file
-       
--->
-
-<project name="gLite JP Index 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="jpis" />
-                       
-       <!-- ======================================================
-          Define general component properties
-                ====================================================== -->
-       
-       <import file="${component.general.properties.file}" />
-                                               
-       <!-- ======================================================
-                Define extra properties here ...
-                ====================================================== -->
-                
-       <property name="build.package.summary" value="gLite Job Provenance Index Server node configuration files" />
-       <property name="build.package.description" value="gLite Job Provenance Index Server node configuration files" />
-       <property name="build.package.files" value="
-%attr(755,root,root) %{prefix}/etc/config/scripts/glite-jpis-config.py\n
-%attr(644,root,root) %{prefix}/etc/config/templates/glite-jpis.cfg.xml\n"
-       />
-
-</project>
diff --git a/org.glite.deployment.jpis/project/quattor-template.xsl b/org.glite.deployment.jpis/project/quattor-template.xsl
deleted file mode 100644 (file)
index d960582..0000000
+++ /dev/null
@@ -1,64 +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_jpis;
-
-#
-# 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-jpis Quattor template v. <xsl:value-of select="/node/@version"/>
-#
-
-## CAs 
-               
-include pro_software_glite_CA;
-               
-               
-
-# 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 select="subservice">
-include pro_software_<xsl:value-of select="translate(@name, '-', '_')"/>;
-               </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.jpis/project/version.properties b/org.glite.deployment.jpis/project/version.properties
deleted file mode 100644 (file)
index 809be8c..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-
-module.version = 2.2.0
-module.age = 2
-                               
diff --git a/org.glite.deployment.jpps/build.xml b/org.glite.deployment.jpps/build.xml
deleted file mode 100644 (file)
index c2bf066..0000000
+++ /dev/null
@@ -1,94 +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 Server Deployment Unit
-       
-    Authors: Alberto Di Meglio <alberto.di.meglio@cern.ch>     
-
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       
--->
-
-<project name="deployment-lb" default="dist">
-
-       <!-- =========================================
-                Builds the gLite JP 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}"/>
-               <property file="${module.build.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.jpps/config/scripts/glite-jpps-config.py b/org.glite.deployment.jpps/config/scripts/glite-jpps-config.py
deleted file mode 100755 (executable)
index 3612d6b..0000000
+++ /dev/null
@@ -1,500 +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-jpps-config v. 1.0.0
-#
-# Post-installation script for configuring the gLite Job Provenance Servers
-# Robert Harakaly < mmulac@cern.ch >
-#
-# Version info: $Id$
-#
-# Usage: python glite-jpps-config [-c|-v|-h|--help]
-#        -c, --checkconf         print configuration
-#        -v, --version           print version
-#        -h,--help   print usage info
-#        --configure             configure the service
-#        --start                 start the service
-#        --stop                  stop the service
-#        --status                show service status
-#
-# Return codes: 0 - Ok
-#               1 - Configuration failed
-#
-################################################################################
-
-import os,string,pwd
-import sys, posix, getopt,time
-
-sys.path.append(".")
-from gLiteInstallerLib import gLib 
-from gLiteInstallerLib import ConfigParams
-import mysql as MySQL
-
-# Set global variables here 
-global params                         # all config values from the XML file
-
-class glite_jpps:
-
-    def __init__(self):
-        self.mysql = MySQL.Mysql()
-        self.verbose = 0
-        self.version = "1.0.0"
-        self.name = "glite-jpps"
-        self.friendly_name = "gLite Job Provenance Primary Storage"
-        
-    #-------------------------------------------------------------------------------
-    # 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 '    --configure         configure the service'
-        print '    --start             start the service'
-        print '    --stop              stop the service'
-        print '    --status            check service status'
-        print '\n'
-
-    #-------------------------------------------------------------------------------
-    # All the configuration code goes here
-    #-------------------------------------------------------------------------------
-
-    def start(self):
-
-        self.mysql.start()
-        time.sleep(5)
-
-        if not os.path.exists('/tmp/mysql.sock'):
-            os.symlink('/var/lib/mysql/mysql.sock', '/tmp/mysql.sock')
-            
-        #-------------------------------------------------------------------
-        # Start Primary Storage
-        #-------------------------------------------------------------------
-
-        pid = glib.getPID('primarystoraged')
-        if pid != 0:
-            print 'The gLite JP Primary Storage service is already running. Restarting...'
-            os.system('%s/etc/init.d/glite-jp-primary stop' % os.environ['GLITE_LOCATION'])
-        else:
-            print 'Starting the gLite JP Primary Storage service...'
-
-        os.system('%s/etc/init.d/glite-jp-primary start' % os.environ['GLITE_LOCATION'])
-
-        pid = glib.getPID('primarystoraged')
-
-        if (pid != 0):
-            print "The gLite JP Primary Storage service has been started               ",
-            glib.printOkMessage()
-        else:
-            glib.printErrorMessage("Could not start the gLite JP Primary Storage service")
-            glib.printErrorMessage("Please verify and re-run the script                        "),
-            glib.printFailedMessage()
-            return 1
-        
-       return 0
-        
-    def stop(self):
-
-       error_level = 0
-
-        #-------------------------------------------------------------------
-        # Stop Primary Storage
-        #-------------------------------------------------------------------
-
-        pid = glib.getPID('primarystoraged')
-        if (pid != 0):
-            os.system('%s/etc/init.d/glite-jp-primary stop' % os.environ['GLITE_LOCATION'])
-
-        pid = glib.getPID('primarystoraged')
-        if (pid != 0):
-            print 'Could not stop the JP Primary Storage service            ',
-            glib.printFailedMessage()
-            error_level = 1
-        else:
-            print 'JP Primary Storage service has been stopped            ',
-            glib.printOkMessage()
-        
-        #-------------------------------------------------------------------
-        # MySQL
-        #-------------------------------------------------------------------
-
-        self.mysql.stop()
-
-        return error_level
-        
-    def status(self):
-
-        error_level = 0
-
-        retval = os.system('%s/etc/init.d/glite-jp-primary status' % os.environ['GLITE_LOCATION'])
-        if retval != 0:
-            error_level = 1
-
-        return error_level
-        
-    def configure(self):
-        
-        #--------------------------------------------------------
-        # Installs the Security Utilities
-        #--------------------------------------------------------
-        
-        if os.system("python %s/glite-security-utils-config.py --subservice" % glib.getScriptPath()):
-            print "\nConfiguring gLite Security Utilities                   ",
-            glib.printFailedMessage()
-        else:
-            print "\nConfiguring gLite Security Utilities                   ",
-            glib.printOkMessage()
-        
-        # Create the GLITE_USER if it doesn't exists
-        print "\nCreating/Verifying the GLITE_USER account %s" % os.environ['GLITE_USER']
-        (uid,gid) = glib.get_user_info(os.environ['GLITE_USER'])
-        glib.check_dir(os.environ['GLITE_LOCATION_VAR'],0755, uid, gid)
-        jpps_cert_path = pwd.getpwnam(os.environ['GLITE_USER'])[5] + "/" + params['user.certificate.path']
-        glib.check_dir(jpps_cert_path ,0755, uid, gid)
-        glib.printOkMessage()
-
-        # Create all directories needed
-        glib.check_dir(os.environ['GLITE_CERT_DIR'])
-        print "\nVerify CA certificates directory            ",
-        glib.printOkMessage()
-         
-        # Copy certificates
-        print "\nCopy host certificates to GLITE_USER home directory as service certificates",
-        os.system("cp %s %s %s/" % (params['host.certificate.file'], params['host.key.file'], jpps_cert_path))
-        os.chown("%s/hostcert.pem" % jpps_cert_path, uid,gid)
-        os.chmod("%s/hostcert.pem" % jpps_cert_path, 0644)
-        os.chown("%s/hostkey.pem" % jpps_cert_path, uid,gid)
-        os.chmod("%s/hostkey.pem" % jpps_cert_path, 0400)
-        glib.printOkMessage()
-
-        #--------------------------------------------------------
-        # Configure MySQL
-        #--------------------------------------------------------
-
-       # Set mysql parameters
-        #self.mysql.setConfiguration('client','max_allowed_packet',params['mysql.max_allowed_packet'])
-        self.mysql.setConfiguration('mysqld','max_allowed_packet',params['mysql.max_allowed_packet'])
-        
-        # start MySQL
-        self.mysql.stop()
-        time.sleep(5)
-        self.mysql.start()
-        
-        if not os.path.exists('/tmp/mysql.sock'):
-            os.symlink('/var/lib/mysql/mysql.sock', '/tmp/mysql.sock')
-
-        # ------------------------------------------------------------
-        # Check password of MySQL
-        # ------------------------------------------------------------
-        
-        self.mysql_root_password = params['mysql.root.password']
-        if not params.has_key('set.mysql.root.password'):
-            params['set.mysql.root.password'] = 'false'
-        setempty = params['set.mysql.root.password']
-        if self.mysql.checkMySQLConfiguration(self.mysql_root_password,setempty):
-            return 1
-        
-        # Create the MySQL database
-        print "\nCreate/Verify the %s database" % params['jpps.database.name']
-        
-        # Check if database exists
-        if self.mysql.existsDB(params['jpps.database.name'],self.mysql_root_password) != 0:
-            # Create database
-            print ('\n==> Creating MySQL %s database\n' % params['jpps.database.name'])
-    
-            if os.path.exists('/bin/rm /tmp/mysql_ct'):
-                os.remove('/tmp/mysql_ct')
-            
-            file = open('/tmp/mysql_ct', 'w')
-
-            self.mysql.add_user(params['jpps.database.name'],params['jpps.database.username'],"",self.mysql_root_password)
-            text = ['USE %s;\n' % params['jpps.database.name'],
-                    '\. %s/etc/glite-jp-primary-dbsetup.sql\n' % os.environ['GLITE_LOCATION']]
-    
-            file.writelines(text)
-            file.close()
-            os.system('/usr/bin/mysql -p%s < /tmp/mysql_ct' % self.mysql_root_password)
-            os.system('/bin/rm /tmp/mysql_ct')
-            
-            #Starting and stopping the database before the index creation
-            self.mysql.stop()
-            time.sleep(5)
-            self.mysql.start()
-
-        else:
-            print "\n==> MySQL database %s already exist\n" % params['jpps.database.name']
-            
-        self.mysql.stop()
-    
-        return 0
-        
-#-------------------------------------------------------------------------------
-# Set all environment variables
-#-------------------------------------------------------------------------------
-
-def loadDefaults(params):
-
-    params['GLITE_LOCATION'] = "/opt/glite"
-    params['mysql.root.password'] = ""
-    params['mysql.max_allowed_packet'] = "17"
-    params['jpps.serviceName'] = 'JP PS Server service at %s' % glib.fq_hostname
-    params['jpps.serviceType'] = 'org.glite.jp.primary'
-    params['jpps.statusScript'] = '%s/etc/init.d/glite-jp-primary status' % params['GLITE_LOCATION']
-    params['jpps.endpoint'] = 'not available'
-
-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)
-
-    if not params.has_key('glite.user.group'):
-        params['glite.user.group'] = ''
-    (uid,gid) = glib.add_user(params['glite.user.name'],params['glite.user.group'])
-    glib.export('GLITE_USER',params['glite.user.name'])
-    jpps_cert_path = pwd.getpwnam(os.environ['GLITE_USER'])[5] + "/" + params['user.certificate.path']
-    glib.export('GLITE_HOST_CERT',"%s/hostcert.pem" % jpps_cert_path)
-    glib.export('GLITE_HOST_KEY',"%s/hostkey.pem" % jpps_cert_path)
-    glib.export('GLITE_CERT_DIR',params['ca.certificates.dir'])
-
-    glib.export('GLOBUS_LOCATION',params['GLOBUS_LOCATION'])
-    glib.export('GPT_LOCATION',params['GPT_LOCATION'])
-    
-    glib.export('JAVA_HOME')
-
-    # bin and lib paths
-    glib.addEnvPath("PATH","/usr/bin/:%s/bin:%s/bin:%s/externals/bin:%s/bin" \
-        % (os.environ['JAVA_HOME'],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']))
-
-    # Perl
-    glib.addEnvPath("PERL5LIB", "%s/lib/perl:%s/lib/perl5" % (os.environ['GPT_LOCATION'],os.environ['GLITE_LOCATION']))
-
-    # JP PS configuration
-    glib.export('GLITE_JP_PRIMARY_PEERS',params['jpps.peers'])    
-    glib.export('GLITE_JP_PRIMARY_FTP_PORT',params['jpps.ftp.port'])    
-    glib.export('GLITE_JP_PRIMARY_INTERNAL',params['jpps.internal'])    
-    if not os.path.exists(os.environ['GLITE_JP_PRIMARY_INTERNAL']):
-        os.mkdir(os.environ['GLITE_JP_PRIMARY_INTERNAL'],0755)
-    import socket
-    glib.export('GLITE_JP_PRIMARY_EXTERNAL',"gsiftp://%s:%s%s" % (socket.getfqdn(socket.gethostname()), params['jpps.ftp.port'], params['jpps.internal']) )    
-    if not os.path.exists(params['jpps.internal']):
-        os.mkdir(params['jpps.internal'],0755)
-    #glite_setenv.sh does not like variables with spaces, 
-    #and su don't like variables with "  
-    #glib.export('GLITE_JP_DEBUG',params['jpps.debug'])    
-    os.environ['GLITE_JP_DEBUG']='%s' % params['jpps.debug']
-    glib.export('GLITE_JP_PRIMARY_PORT',params['jpps.port'])    
-    glib.export('GLITE_JP_PRIMARY_DBCS',"%s/@localhost:%s" % (params['jpps.database.username'], params['jpps.database.name']) )    
-    glib.export('GLITE_JP_PRIMARY_PIDFILE',params['jpps.pid.file'])    
-
-    # Set environment
-    glib.setUserEnv()
-    
-#-------------------------------------------------------------------------------
-#  Main program begins here 
-#-------------------------------------------------------------------------------
-
-if __name__ == '__main__':
-
-    # 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 ConfigParams class
-    params = ConfigParams()
-
-    # Get an instance of the library class
-    glib = gLib()
-    
-    # Load parameters
-    loadDefaults(params)
-    try:
-        opts, args = glib.getopt(sys.argv[1:], '', ['siteconfig='])
-        for o, a in opts:
-            if o == "--siteconfig":
-                params['site.config.url'] = a
-                break
-    except getopt.GetoptError:
-        pass
-    if glib.loadConfiguration("%s/../glite-jpps.cfg.xml" % glib.getScriptPath(),params):
-        print "An error occurred while configuring the service"
-        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_jpps()
-    service.verbose = verbose
-    
-    # Command line opts if any
-    try:
-        opts, args = glib.getopt(sys.argv[1:], 'chv', ['checkconf', 'help', 'version','configure','stop','start','status','siteconfig='])
-    except getopt.GetoptError:
-        service.usage(msg = "Unknown options(s)")
-        sys.exit(1)
-
-    if len(opts) == 0:
-        service.usage()
-        sys.exit(0)
-    
-    # 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 == "--configure":
-       
-
-           # Check certificates
-           if params.has_key('glite.installer.checkcerts'):
-               if params['glite.installer.checkcerts'] == "true":
-                   if glib.check_certs(params) != 0:
-                       print "An error occurred while configuring the %s service" \
-                           % service.friendly_name
-                       sys.exit(1)
-           
-           # Print configuration parameters
-           if verbose:
-               glib.print_params(params)
-
-           service.copyright()
-           service.showVersion()
-           service.banner()
-        
-            # Stop all services
-            glib.printInfoMessage("\n\nStopping all running JP PS services...")
-            service.stop()
-            
-    # Configure the service
-            return_result = service.configure()
-
-            if return_result == 0:
-
-                # Stop all services
-                glib.printInfoMessage("\n\nStopping all running JP PS services...")
-                service.stop()
-                
-                print "\n\nThe %s configuration was successfully completed\n" % service.friendly_name
-                print "You can now start the service using the --start option of this script\n\n"
-               glib.registerService()
-
-                sys.exit(0)
-
-            elif return_result == 2:
-
-                # Stop all services
-                glib.printInfoMessage("\n\nStopping all running JP PS services...")
-                service.stop()
-                
-                print "\n\nThe %s configuration was completed,\n" % service.friendly_name
-                print "but warnings were issued. Please revise them and re-run the script\n"
-                print "or configure JP PS manually\n"
-
-                sys.exit(2)
-
-           else:
-                print "\n\nAn unrecoverable error occurred while configuring the %s" \
-                    % service.friendly_name
-
-               sys.exit(1)
-        
-       if o in ("start", "--start"):
-           # Start the service
-           if service.start() == 0:
-                print "\n\nThe %s was successfully started           " % service.friendly_name,
-               glib.printOkMessage()
-                sys.exit(0)
-           else:
-                print "\n\nAn error occurred while starting the %s            " % service.friendly_name,
-               glib.printFailedMessage()
-               sys.exit(1)
-
-        if o in ("stop", "--stop"): 
-            # Stop the service
-            if service.stop() == 0:
-                print "\n\nThe %s was successfully stopped           " % service.friendly_name,
-                glib.printOkMessage()
-                sys.exit(0)
-            else:
-                print "\n\nAn unrecoverable error occurred while stopping the %s " % service.friendly_name,
-                glib.printFailedMessage()
-                sys.exit(1)
-        if o == "--status":
-            sys.exit(service.status())
-                
diff --git a/org.glite.deployment.jpps/config/templates/glite-jpps.cfg.xml b/org.glite.deployment.jpps/config/templates/glite-jpps.cfg.xml
deleted file mode 100644 (file)
index ef13a02..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-<!--  Parameters for  configuring the org.glite.data.io-daemon service -->
-<config>
-       <parameters>
-
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-               <!-- User-defined parameters - Please change them -->
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-
-               <!--  gLite services user accounts  -->
-               <glite.user.name 
-                       description="Name of the user account used to run the gLite services
-                       on this JP node"
-                       value="changeme"/>
-
-               <glite.user.group
-                       description="Group of the user specified in the 'glite.user.name'
-                       parameter. Leave it empty of comment it out to use the same as 'glite.user.name'"
-                       value="changeme"/>
-               
-               <mysql.root.password
-                       description="The mysql root password"
-                       value="changeme"/>
-
-               <!-- JP primary server configuration -->
-               <jpps.peers
-                       description="file with list (one per line) of X509 certificate subjects of 'trusted peers', i.e. LB servers which may upload data to this JPPS"
-                       value="changeme"/>
-
-               <jpps.internal
-                       description="directory where the JPPS files are stored (local path)"
-                       value="changeme"/>
-
-                               
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-               <!-- Advanced parameters - Change them if you know what you're doing -->
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-
-               <!-- Installer configuration -->
-               <glite.installer.verbose
-                       description="Enable verbose output"
-                       value="true"/>
-                       
-               <glite.installer.checkcerts
-                       description="Enable check of host certificates"
-                       value="true"/>
-
-               <!-- mysql configuration -->
-               <set.mysql.root.password
-                       description="If this parameter is true, then the root password of the mysql database
-                       is set to the value specified in mysql.root.password if it not yet set. This parameter has
-                       no effect if the database root password is already set. It can be used to ease automated
-                       installation and configuration of the service, if mysql is not managed in some other way"
-                       value="false"/>
-
-               <!-- JP primary server configuration -->
-               <jpps.debug
-                       description="enables to pass various debug options to JP PS
-                       (e.g. -l path_to_log_file; -s XX number of forked slaves;....)"
-                       value=""/>
-
-               <jpps.port
-                       description="default JP PS port"
-                       value="8901"/>
-               
-               <jpps.ftp.port
-                       description="default port for the ftp JPPS interface (bulk file transfers)
-                       WARNING: changing this value will cause that files previously uploaded
-                               to PS will be unaccessable!"
-                       value="8950"/>
-
-
-               <jpps.database.username
-                       description="JP PS database user
-                       default: jpps"
-                       value="jpps"/>
-
-               <jpps.database.name
-                       description="JP PS database name
-                       default: jpps"
-                       value="jpps"/>
-
-               <jpps.pid.file
-                       description="non-default JP PS pidfile ($GLITE_LOCATION_VAR/glite-jp-primarystoraged.pid)"
-                       value=""/>
-
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-               <!-- System parameters - You should leave these alone -->
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->               
-       
-                       
-       </parameters>
-
-</config>
diff --git a/org.glite.deployment.jpps/project/build.number b/org.glite.deployment.jpps/project/build.number
deleted file mode 100644 (file)
index 58569c4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#Wed Apr 13 09:36:57 CEST 2005
-module.build=232
diff --git a/org.glite.deployment.jpps/project/build.properties b/org.glite.deployment.jpps/project/build.properties
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.glite.deployment.jpps/project/glite-jpps.sdf.xml.template b/org.glite.deployment.jpps/project/glite-jpps.sdf.xml.template
deleted file mode 100644 (file)
index ec2b692..0000000
+++ /dev/null
@@ -1,127 +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-jpps-node" version="@module.version@">
-       <services>
-               <service name="glite-jpps-service">
-                       <components>
-                           <component name="glite-config"
-                                       version="@org.glite.deployment.config.info.version@"
-                                       age="@org.glite.deployment.config.info.age@"
-                                       build="@org.glite.deployment.config.info.build@"
-                                       arch="noarch"/>
-                                       
-                               <component name="glite-jpps-config"
-                                       version="@module.version@"
-                                       age="@module.age@"
-                                       build="@module.build@"
-                                       arch="noarch"/>
-
-                               <component name="glite-jp-ws-interface"
-                                       version="@org.glite.jp.ws-interface.info.version@"
-                                       age="@org.glite.jp.ws-interface.info.age@"
-                                       build="@org.glite.jp.ws-interface.info.build@"
-                                       arch="i386"/>
-                       
-                               <component name="glite-jp-common"
-                                       version="@org.glite.jp.common.info.version@"
-                                       age="@org.glite.jp.common.info.age@"
-                                       build="@org.glite.jp.common.info.build@"
-                                       arch="i386"/>
-       
-                               <component name="glite-jp-primary"
-                                       version="@org.glite.jp.primary.info.version@"
-                                       age="@org.glite.jp.primary.info.age@"
-                                       build="@org.glite.jp.primary.info.build@"
-                                       arch="i386"/>
-                                          
-                               <component name="glite-jp-server-common"
-                                       version="@org.glite.jp.server-common.info.version@"
-                                       age="@org.glite.jp.server-common.info.age@"
-                                       build="@org.glite.jp.server-common.info.build@"
-                                       arch="i386"/>
-
-                               <component name="glite-lb-server"
-                                       version="@org.glite.lb.server.info.version@"
-                                       age="@org.glite.lb.server.info.age@"
-                                       build="@org.glite.lb.server.info.build@"
-                                       arch="i386"/>
-                                          
-                               <component name="glite-wms-utils-jobid"
-                                       version="@org.glite.wms-utils.jobid.info.version@"
-                                       age="@org.glite.wms-utils.jobid.info.age@"
-                                       build="@org.glite.wms-utils.jobid.info.build@"
-                                       arch="i386"/>
-       
-                               <component name="glite-wms-utils-exception"
-                                       version="@org.glite.wms-utils.exception.info.version@"
-                                       age="@org.glite.wms-utils.exception.info.age@"
-                                       build="@org.glite.wms-utils.exception.info.build@"
-                                       arch="i386"/>
-                               
-                               <component name="glite-security-gsoap-plugin"
-                                       version="@org.glite.security.gsoap-plugin.info.version@"
-                                       age="@org.glite.security.gsoap-plugin.info.age@"
-                                       build="@org.glite.security.gsoap-plugin.info.build@"
-                                       arch="i386"/>
-                               
-                               <component name="glite-security-voms-api-c"
-                                   version="@org.glite.security.voms-api-c.info.version@"
-                                   age="@org.glite.security.voms-api-c.info.age@"
-                                   build="@org.glite.security.voms-api-c.info.build@"
-                                   arch="i386"/>
-
-                               <component name="gridsite"
-                                   version="@org.gridsite.core.info.version@"
-                                   age="@org.gridsite.core.info.age@"
-                                                       build="@org.gridsite.core.info.build@"
-                                   arch="i386"/>
-                       </components>
-                       <dependencies>
-                               <external name="@ext.mysql-server.rpm.name@"
-                                         version="@ext.mysql-server.version@"
-                                         age="@ext.mysql-server.rpm.age@"
-                                         arch="@ext.mysql-server.platform@"/>                            
-                               <external name="@ext.mysql-client.rpm.name@"
-                                         version="@ext.mysql-client.version@"
-                                         age="@ext.mysql-client.rpm.age@"
-                                         arch="@ext.mysql-client.platform@"/>                            
-                               <external name="@ext.c-ares.rpm.name@"
-                                       version="@ext.c-ares.version@"
-                                       age="@ext.c-ares.rpm.age@"
-                                       arch="@ext.c-ares.platform@"/>
-                               <external name="@ext.globus-essentials.rpm.name@"
-                                       version="@ext.globus-essentials.rpm.version@"
-                                       age="@ext.globus-essentials.rpm.age@"
-                                       arch="@ext.globus-essentials.platform@"/>
-                               <external name="@ext.globus-data-server.rpm.name@"
-                                       version="@ext.globus-data-server.rpm.version@"
-                                       age="@ext.globus-data-server.rpm.age@"
-                                       arch="@ext.globus-data-server.platform@"/>
-                               <external name="@ext.gpt.rpm.name@"
-                                       version="@ext.gpt.rpm.version@"
-                                       age="@ext.gpt.rpm.age@"
-                                       arch="@ext.gpt.platform@"/>
-                               <external name="@ext.myproxy.rpm.name@"
-                                       version="@ext.myproxy.version@"
-                                       age="@ext.myproxy.rpm.age@"
-                                       arch="@ext.myproxy.platform@"/>
-                               <external name="@ext.perl-expect-pm.rpm.name@"
-                                       version="@ext.perl-expect-pm.version@"
-                                       age="@ext.perl-expect-pm.rpm.age@"
-                                       arch="@ext.perl-expect-pm.platform@"/>
-                       </dependencies>
-               </service>
-
-               <!-- Security Utilities -->
-        <service name="glite-security-utils">
-                <subservice name="glite-security-utils"/>
-        </service>
-       </services>
-       <dependencies>
-       </dependencies>
-</node>
diff --git a/org.glite.deployment.jpps/project/lxscript-rpm.xsl b/org.glite.deployment.jpps/project/lxscript-rpm.xsl
deleted file mode 100644 (file)
index c9bec9a..0000000
+++ /dev/null
@@ -1,336 +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="installers"/>
-       <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-jpps_installer v. <xsl:value-of select="/node/@version"/>
-#
-# The glite-jpps_installer installs the gLite Job Provenance Primary Storage
-#
-# Usage: glite-jpps_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
-}
-
-#Parse the SCRIPTLIST to execute all scripts
-function parseScriptList()
-{
-        for i in $SCRIPTLIST
-        do
-               if [ "$INSTALL" = "true" ]; then
-                        $i
-               else
-                        $i -u
-               fi
-        done
-}
-
-#Downloads and install the module RPMS
-function install()
-{
-
-       INSTALL=true
-       version
-       echo
-       echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-       echo x Please wait, downloading the gLite Job Provenance Primary Storage... x
-       echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-       echo
-
-        mkdir -p glite-jpps
-        cd glite-jpps
-
-       # 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"/> scripts from repository
-                <xsl:for-each select=".">
-                        <xsl:apply-templates select="subservice">
-                                <xsl:with-param name="install">true</xsl:with-param>
-                        </xsl:apply-templates>
-                </xsl:for-each>
-
-
-       # 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>
-
-       # Download and install subservices
-        parseScriptList
-
-               
-       # Install all RPMS
-       echo
-       echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-       echo x Please wait, installing the gLite Job Provenance Primary Storage... x
-       echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-       echo
-       parseRPMList
-       if [ ! -z "$RPMLIST" ]; then
-               rpm -Uvh $RPMLIST
-               rpm_return=$?
-       else
-               echo All required RPMS are already installed
-               rpm_return=0
-       fi
-       if [ "$rpm_return" == "0" ]; then
-               echo
-               echo Done!
-               echo
-               echo Before using the gLite JP PS, please create or update the configuration
-               echo files /opt/glite/etc/config/glite-jpps.cfg.xml
-               echo and /opt/glite/etc/config/glite-global.cfg.xml
-               echo and run the configuration script
-               echo /opt/glite/etc/config/scripts/glite-jpps-config.py.
-               echo A template is provided in
-               echo /opt/glite/etc/config/templates/glite-jpps.cfg.xml
-               echo Alternatively site configuration files can be used
-       else
-               echo
-               echo An error occurred while installing the JP PS RPMS.
-               echo Most likely one or more of the RPMS to be installed require
-               echo additional dependencies or are older than already installed packages.
-               echo Please refer to the rpm error message above for more details.
-       fi
-       echo
-       echo For more information refer to the gLite Installation and User Guides
-       echo or to the gLite web site \(http:\/\/www.glite.org\)
-       echo Please report problems and comments to the gLite Team at
-       echo glite-bugs@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 Job Provenance Primary Storage... x
-       echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-       echo
-       rpm -ev $RPMLIST
-       if [ "$?" == "0" ]; then
-               echo
-               echo Done!
-       else
-               echo
-               echo An error occurred while removing the JP PS RPMS.
-               echo Most likely one or more of the RPMS to be removed have
-               echo dependent packages.
-               echo Please refer to the rpm error message above for more details.
-       fi
-}
-
-###############################################################################
-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-jpps_installer v. <xsl:value-of select="/node/@version"/>
-       echo 
-       echo The glite-jpps_installer installs the gLite Job Provenance Primary Storage
-       echo 
-       echo Usage: glite-jpps_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-jpps_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="subservices" match="subservice">
-                <xsl:param name="install"/>
-                <xsl:variable name="package"><xsl:value-of select="@name"/>_installer.sh</xsl:variable>
-                <xsl:choose>
-                        <xsl:when test="$install = 'true'">
-wget -N -nv <xsl:value-of select="$installers"/><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
-chmod u+x <xsl:value-of select="$package"/>
-SCRIPTLIST="$SCRIPTLIST ./<xsl:value-of select="$package"/>"
-                        </xsl:when>
-                        <xsl:otherwise>
-SCRIPTLISTUn="$SCRIPTLISTUn ./<xsl:value-of select="$package"/> -u "
-                        </xsl:otherwise>
-                </xsl:choose>
-        </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 -nv <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 -nv <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.jpps/project/lxscript-tgz.xsl b/org.glite.deployment.jpps/project/lxscript-tgz.xsl
deleted file mode 100644 (file)
index 4589cf6..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-jpps_tgz_installer
-# usage: glite-jpps_tgz_installer [-u]
-#               -u             uninstall
-#
-# glite-jpps_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.jpps/project/properties.xml b/org.glite.deployment.jpps/project/properties.xml
deleted file mode 100644 (file)
index 41d9f99..0000000
+++ /dev/null
@@ -1,63 +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 Storage Node Deployment Unit
-       
-       Author: Alberto Di Meglio <alberto.di.meglio@cern.ch>
-       Version info: $Id$
-       Release: $Name$ 
-       
-       Revision history:
-       $Log$
-       Revision 1.2  2005/07/08 13:18:40  dimeglio
-       Merged from branch 1.2.2
-       
-       Revision 1.1  2004/10/06 09:19:24  dimeglio
-       First version of this file
-       
--->
-
-<project name="gLite JP Primary Storage 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="jpps" />
-                       
-       <!-- ======================================================
-          Define general component properties
-                ====================================================== -->
-       
-       <import file="${component.general.properties.file}" />
-                                               
-       <!-- ======================================================
-                Define extra properties here ...
-                ====================================================== -->
-                
-       <property name="build.package.summary" value="gLite Job Provenance Primary Storage node configuration files" />
-       <property name="build.package.description" value="gLite Job Provenance Primary Storage node configuration files" />
-       <property name="build.package.files" value="
-%attr(755,root,root) %{prefix}/etc/config/scripts/glite-jpps-config.py\n
-%attr(644,root,root) %{prefix}/etc/config/templates/glite-jpps.cfg.xml\n"
-       />
-
-</project>
diff --git a/org.glite.deployment.jpps/project/quattor-template.xsl b/org.glite.deployment.jpps/project/quattor-template.xsl
deleted file mode 100644 (file)
index d4dc67b..0000000
+++ /dev/null
@@ -1,64 +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_jpps;
-
-#
-# 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-jpps Quattor template v. <xsl:value-of select="/node/@version"/>
-#
-
-## CAs 
-               
-include pro_software_glite_CA;
-               
-               
-
-# 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 select="subservice">
-include pro_software_<xsl:value-of select="translate(@name, '-', '_')"/>;
-               </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.jpps/project/version.properties b/org.glite.deployment.jpps/project/version.properties
deleted file mode 100644 (file)
index 809be8c..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-
-module.version = 2.2.0
-module.age = 2
-                               
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/CHANGELOG b/org.glite.deployment.lb/CHANGELOG
deleted file mode 100644 (file)
index 882b0d8..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-DATE: 13-03-2006 16:20\r
-[flammer] Increased version to 2.3.0 after branching.\r
-\r
-DATE: 13-03-2006 16:15\r
-[flammer] Merge of HEAD with branch 2.1.0\r
-[flammer] Increased version to 2.2.0\r
-\r
-DATE: 04-12-2005 21:15\r
-[dimeglio] Added configuration parameter for setting mysql max_allowed_packet\r
-\r
-DATE: 23-11-2005 23:50\r
-[dimeglio] Use ConfigParams class\r
-[dimeglio] Removed servietool instabce config params, put instance creation in script\r
-\r
-DATE: 08-07-2005 15:20\r
-[dimeglio] Merged from branch 1.2.2\r
-\r
-DATE: 25-05-2005 20:00\r
-[dimeglio] Merged from branch 1.2.2\r
-\r
-DATE: 21-03-2005 17:21\r
-[dimeglio] Implemented status method\r
-\r
-DATE: 21-03-2005 00:32\r
-[dimeglio] Added PERL5LIB env var\r
-\r
-DATE: 17-03-2005 17:33\r
-[gdiez] Stopping and starting the database before the index creation (just after the database is created and the user granted)\r
-\r
-DATE: 09-03-2005 23:05\r
-[dimeglio] Moved creation of indices inside database creation (if database\r
-                  exists indices are not recreated)\r
-\r
-DATE: 02-03-2005 11:05\r
-[dimeglio] Started CHANGELOG\r
-[dimeglio] Fixed formatting, improved display of message using glib.printXxxMessage functions\r
-[dimeglio] Fixed some problems when starting/stopping services\r
-[dimeglio] GLITE_USER parameter not exposed anymore in config file, use same user parameters\r
-                  as WMS to allow installation on same node\r
-[dimeglio] Increased module version number to 1.2.0
\ No newline at end of file
diff --git a/org.glite.deployment.lb/LICENSE b/org.glite.deployment.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.deployment.lb/build.xml b/org.glite.deployment.lb/build.xml
deleted file mode 100644 (file)
index 874c661..0000000
+++ /dev/null
@@ -1,110 +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.5  2004/10/17 22:34:39  dimeglio
-       Use new installer script format
-       Use global filters
-       Use RH standard expat rpm in sdf template
-       
-       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}"/>
-               <property file="${module.build.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 c0158ea..0000000
+++ /dev/null
@@ -1,574 +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. 2.3.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, --checkconf         print configuration
-#        -v, --version           print version
-#        -h,--help   print usage info
-#        --configure             configure the service
-#        --start                 start the service
-#        --stop                  stop the service
-#        --status                show service status
-#
-# Return codes: 0 - Ok
-#               1 - Configuration failed
-#
-################################################################################
-
-import os,string,pwd
-import sys, posix, getopt,time
-
-sys.path.append(".")
-from gLiteInstallerLib import gLib 
-from gLiteInstallerLib import ConfigParams
-from gliteRgmaServicetool import gliteRgmaServicetoolInstance
-from gliteRgmaServicetool import gliteRgmaServicetool
-import mysql as MySQL
-
-# Set global variables here 
-global params                         # all config values from the XML file
-global rgmaServicetool
-
-class glite_lb:
-
-    def __init__(self):
-        self.mysql = MySQL.Mysql()
-        self.verbose = 0
-        self.version = "2.3.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 '    --configure         configure the service'
-        print '    --start             start the service'
-        print '    --stop              stop the service'
-        print '    --status            check service status'
-        print '\n'
-
-    #-------------------------------------------------------------------------------
-    # All the configuration code goes here
-    #-------------------------------------------------------------------------------
-
-    def start(self):
-
-        self.mysql.start()
-        time.sleep(5)
-
-        if not os.path.exists('/tmp/mysql.sock'):
-            os.symlink('/var/lib/mysql/mysql.sock', '/tmp/mysql.sock')
-            
-        pid = glib.getPID('bkserverd')
-        if pid != 0:
-            print 'The gLite LB Server service is already running. Restarting...'
-            os.system('%s/etc/init.d/glite-lb-bkserverd stop' % os.environ['GLITE_LOCATION'])
-        else:
-            print 'Starting the gLite LB Server service...'
-
-        os.system('%s/etc/init.d/glite-lb-bkserverd start' % os.environ['GLITE_LOCATION'])
-
-        pid = glib.getPID('bkserverd')
-
-        if (pid != 0):
-            print "The gLite LB Server service has been started               ",
-            glib.printOkMessage()
-        else:
-            glib.printErrorMessage("Could not start the gLite LB Server service")
-            glib.printErrorMessage("Please verify and re-run the script                        "),
-            glib.printFailedMessage()
-            return 1
-        
-        #-------------------------------------------------------------------
-        # Start Servicetool
-        #-------------------------------------------------------------------
-
-        if params['rgma.servicetool.activate'] == "true":
-        
-            errorcode = rgmaServicetool.start()
-            if (errorcode != 0):
-                return 1
-        
-        return 0
-        
-    def stop(self):
-
-        error_level = 0
-        
-        pid = glib.getPID('bkserverd')
-        if (pid != 0):
-            os.system('%s/etc/init.d/glite-lb-bkserverd stop' % os.environ['GLITE_LOCATION'])
-
-        pid = glib.getPID('bkserverd')
-        if (pid != 0):
-            print 'Could not stop the LB Server service            ',
-            glib.printFailedMessage()
-            error_level = 1
-        else:
-            print 'The LB Server service has been stopped            ',
-            glib.printOkMessage()
-        
-        #-------------------------------------------------------------------
-        # MySQL
-        #-------------------------------------------------------------------
-
-        self.mysql.stop()
-
-        #-------------------------------------------------------------------
-        # Servicetool
-        #-------------------------------------------------------------------
-
-        if params['rgma.servicetool.activate'] == "true":
-            
-            if rgmaServicetool.stop():
-                error_level = 1
-    
-        return error_level
-        
-    def status(self):
-
-        error_level = 0
-
-        retval = os.system('%s/etc/init.d/glite-lb-bkserverd status' % os.environ['GLITE_LOCATION'])
-        if retval != 0:
-            error_level = 1
-
-        #-------------------------------------------------------------------
-        # Servicetool
-        #-------------------------------------------------------------------
-
-        if params['rgma.servicetool.activate'] == "true":
-            
-            if rgmaServicetool.status() != 0:
-                error_level = 1
-    
-        return error_level
-        
-    def configure(self):
-        
-        #--------------------------------------------------------
-        # Installs the Security Utilities
-        #--------------------------------------------------------
-        
-        if os.system("python %s/glite-security-utils-config.py --subservice" % glib.getScriptPath()):
-            print "\nConfiguring gLite Security Utilities                      ",
-            glib.printFailedMessage()
-        else:
-            print "\nConfiguring gLite Security Utilities                      ",
-            glib.printOkMessage()
-        
-        # Create the GLITE_USER if it doesn't exists
-        print "\nCreating/Verifying the GLITE_USER account %s" % os.environ['GLITE_USER']
-        (uid,gid) = glib.get_user_info(os.environ['GLITE_USER'])
-        glib.check_dir(os.environ['GLITE_LOCATION_VAR'],0755, uid, gid)
-        lb_cert_path = pwd.getpwnam(os.environ['GLITE_USER'])[5] + "/" + params['user.certificate.path']
-        glib.check_dir(lb_cert_path ,0755, uid, gid)
-        glib.printOkMessage()
-
-        # Create all directories needed
-        glib.check_dir(os.environ['GLITE_CERT_DIR'])
-        print "\nVerify CA certificates directory                          ",
-        glib.printOkMessage()
-         
-        # Copy certificates
-        print "\nCopy host certificates to GLITE_USER home directory as service certificates",
-        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.chmod("%s/hostcert.pem" % lb_cert_path, 0644)
-        os.chown("%s/hostkey.pem" % lb_cert_path, uid,gid)
-        os.chmod("%s/hostkey.pem" % lb_cert_path, 0400)
-        glib.printOkMessage()
-
-        #--------------------------------------------------------
-        # Configure MySQL
-        #--------------------------------------------------------
-
-        # Set mysql parameters
-        #self.mysql.setConfiguration('mysql','loose-max_allowed_packet',params['mysql.max_allowed_packet'])
-        self.mysql.setConfiguration('mysqld','max_allowed_packet',params['mysql.max_allowed_packet'])
-        
-        # start MySQL
-        self.mysql.stop()
-        time.sleep(5)
-        self.mysql.start()                
-
-        if not os.path.exists('/tmp/mysql.sock'):
-            os.symlink('/var/lib/mysql/mysql.sock', '/tmp/mysql.sock')
-
-        # ------------------------------------------------------------
-        # Check password of MySQL
-        # ------------------------------------------------------------
-        
-        self.mysql_root_password = params['mysql.root.password']
-        if not params.has_key('set.mysql.root.password'):
-            params['set.mysql.root.password'] = 'false'
-        setempty = params['set.mysql.root.password']
-        if self.mysql.checkMySQLConfiguration(self.mysql_root_password,setempty):
-            return 1
-        
-        # Create the MySQL database
-        print "\nCreate/Verify the %s database" % params['lb.database.name']
-        
-        # Check if database exists
-        if self.mysql.existsDB(params['lb.database.name'],self.mysql_root_password) != 0:
-            # Create database
-            print ('\n==> Creating MySQL %s database\n' % params['lb.database.name'])
-    
-            if os.path.exists('/bin/rm /tmp/mysql_ct'):
-                os.remove('/tmp/mysql_ct')
-            
-            file = open('/tmp/mysql_ct', 'w')
-
-            self.mysql.add_user(params['lb.database.name'],params['lb.database.username'],"",self.mysql_root_password)
-            text = ['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 -p%s < /tmp/mysql_ct' % self.mysql_root_password)
-            os.system('/bin/rm /tmp/mysql_ct')
-            
-            #Starting and stopping the database before the index creation
-            self.mysql.stop()
-            time.sleep(5)
-            self.mysql.start()
-
-            #Creating the indexes
-            print 'Creating the index configuration file %s/etc/glite-lb-index.conf            ' % os.environ['GLITE_LOCATION'],
-            path = "%s/etc/glite-lb-index.conf" % os.environ['GLITE_LOCATION']
-            pathBak = "%s/etc/glite-lb-index.conf.bak" % os.environ['GLITE_LOCATION']
-        
-            if os.path.exists(pathBak):
-                os.remove(pathBak)
-            if os.path.exists(path):
-                os.rename(path,pathBak)
-            file = open(path, 'w')
-            file.write("[\n")
-            file.write("        JobIndices = {\n")
-            for index in params['lb.index.list']:
-                file.write("                [ type = \"system\"; name = \"%s\" ],\n" % index)
-            file.write("        }\n")
-            file.write("]\n")
-            file.close()
-            glib.printOkMessage()
-            
-            print "Running glite-lb-bkindex                    ",    
-            if os.system('%s/bin/glite-lb-bkindex -r %s/etc/glite-lb-index.conf' % (os.environ['GLITE_LOCATION'],os.environ['GLITE_LOCATION'])):
-                glib.printFailedMessage()
-                return 1
-            else:
-                glib.printOkMessage()
-        
-        else:
-            print "\n==> MySQL database %s already exist\n" % params['lb.database.name']
-            
-        self.mysql.stop()
-    
-        #-------------------------------------------------------------------
-        # RGMA servicetool: configure servicetool
-        #-------------------------------------------------------------------
-
-        if params['rgma.servicetool.activate'] == "true":
-            
-            # Instantiate the rgma-servicetool class
-            rgmaServicetool = gliteRgmaServicetool()
-            rgmaServicetool.verbose = self.verbose
-            
-            # Create Local Logger instance
-            serviceId = "%s_%s" % (glib.fq_hostname, params['lbserver.serviceType'])
-            servicetoolInstance = gliteRgmaServicetoolInstance(glib, serviceId)
-            
-            # set params
-            servicetoolInstance.setServiceName(params['lbserver.serviceName'])
-            servicetoolInstance.setServiceType(params['lbserver.serviceType'])
-            servicetoolInstance.setServiceVersion(self.version)
-            servicetoolInstance.setStatusScript(params['lbserver.statusScript'])
-            servicetoolInstance.setEndpoint(params['lbserver.endpoint'])
-            
-            # add instance to the gLite configuration
-            if servicetoolInstance.add() == 1:
-                return 1
-            
-            # Configure servicetool
-            if rgmaServicetool.configure(glib):
-                # error in configuring servicetool
-                return 1
-            
-        return 0
-        
-#-------------------------------------------------------------------------------
-# Set all environment variables
-#-------------------------------------------------------------------------------
-
-def loadDefaults(params):
-
-    params['GLITE_LOCATION'] = "/opt/glite"
-    params['mysql.root.password'] = ""
-    params['lb.database.name'] = "lbserver20"
-    params['lb.database.username'] = "lbserver"
-    params['mysql.max_allowed_packet'] = "17"
-    
-    params['lbserver.serviceName'] = 'LB Server service at %s' % glib.fq_hostname
-    params['lbserver.serviceType'] = 'org.glite.lb.server'
-    params['lbserver.statusScript'] = '%s/etc/init.d/glite-lb-bkserverd status' % params['GLITE_LOCATION']
-    params['lbserver.endpoint'] = 'not available'
-    
-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)
-
-    if not params.has_key('glite.user.group'):
-        params['glite.user.group'] = ''
-    (uid,gid) = glib.add_user(params['glite.user.name'],params['glite.user.group'])
-    glib.export('GLITE_USER',params['glite.user.name'])
-    lb_cert_path = pwd.getpwnam(os.environ['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('GLITE_CERT_DIR',params['ca.certificates.dir'])
-
-    glib.export('GLOBUS_LOCATION',params['GLOBUS_LOCATION'])
-    glib.export('GPT_LOCATION',params['GPT_LOCATION'])
-    
-    glib.export('JAVA_HOME')
-
-    # bin and lib paths
-    glib.addEnvPath("PATH","/usr/bin/:%s/bin:%s/bin:%s/externals/bin:%s/bin" \
-        % (os.environ['JAVA_HOME'],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']))
-
-    # Perl
-    glib.addEnvPath("PERL5LIB", "%s/lib/perl:%s/lib/perl5" % (os.environ['GPT_LOCATION'],os.environ['GLITE_LOCATION']))
-
-    # Set environment
-    glib.setUserEnv()
-    
-#-------------------------------------------------------------------------------
-#  Main program begins here 
-#-------------------------------------------------------------------------------
-
-if __name__ == '__main__':
-
-    # 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 ConfigParams class
-    params = ConfigParams()
-    
-    # Get an instance of the library class
-    glib = gLib()
-    
-    # Load parameters
-    loadDefaults(params)
-    try:
-        opts, args = glib.getopt(sys.argv[1:], '', ['siteconfig='])
-        for o, a in opts:
-            if o == "--siteconfig":
-                params['site.config.url'] = a
-                break
-    except getopt.GetoptError:
-        pass
-    if glib.loadConfiguration(["%s/../glite-lb.cfg.xml" % glib.getScriptPath(), \
-            "%s/../glite-rgma-servicetool.cfg.xml" % glib.getScriptPath()],params):
-        print "An error occurred while configuring the service"
-        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
-    # Instantiate the rgma servicetool class
-    rgmaServicetool = gliteRgmaServicetool()
-    rgmaServicetool.verbose = verbose  
-    
-    # Command line opts if any
-    try:
-        opts, args = glib.getopt(sys.argv[1:], 'chv', ['checkconf', 'help', 'version','configure','stop','start','status','siteconfig='])
-    except getopt.GetoptError:
-        service.usage(msg = "Unknown options(s)")
-        sys.exit(1)
-
-    if len(opts) == 0:
-        service.usage()
-        sys.exit(0)
-    
-    # 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)
-            print
-            rgmaServicetool.showServices()
-            sys.exit(0)
-
-        if o == "--configure":
-
-            # Check certificates
-            if params.has_key('glite.installer.checkcerts'):
-                if params['glite.installer.checkcerts'] == "true":
-                    if glib.check_certs(params) != 0:
-                        print "An error occurred while configuring the %s service" \
-                            % service.friendly_name
-                        sys.exit(1)
-            
-            # Print configuration parameters
-            if verbose:
-                glib.print_params(params)
-        
-            service.copyright()
-            service.showVersion()
-            service.banner()
-                
-            # Stop all services
-            glib.printInfoMessage("\n\nStopping all running LB services...")
-            service.stop()
-            
-            # Configure the service
-            return_result = service.configure()
-
-            if return_result == 0:
-
-                # Stop all services
-                glib.printInfoMessage("\n\nStopping all running LB services...")
-                service.stop()
-                
-                print "\n\nThe %s configuration was successfully completed\n" % service.friendly_name
-                print "You can now start the service using the --start option of this script\n\n"
-                glib.registerService()
-
-                sys.exit(0)
-
-            elif return_result == 2:
-
-                # Stop all services
-                glib.printInfoMessage("\n\nStopping all running LB services...")
-                service.stop()
-                
-                print "\n\nThe %s configuration was completed,\n" % service.friendly_name
-                print "but warnings were issued. Please revise them and re-run the script\n"
-                print "or configure LB manually\n"
-
-                sys.exit(2)
-
-            else:
-                print "\n\nAn unrecoverable error occurred while configuring the %s" \
-                    % service.friendly_name
-
-                sys.exit(1)
-            
-        if o in ("start", "--start"):
-            # Start the service
-            if service.start() == 0:
-                print "\n\nThe %s was successfully started           " % service.friendly_name,
-                glib.printOkMessage()
-                sys.exit(0)
-            else:
-                print "\n\nAn error occurred while starting the %s            " % service.friendly_name,
-                glib.printFailedMessage()
-                sys.exit(1)
-            
-        if o in ("stop", "--stop"): 
-            # Stop the service
-            if service.stop() == 0:
-                print "\n\nThe %s was successfully stopped           " % service.friendly_name,
-                glib.printOkMessage()
-                sys.exit(0)
-            else:
-                print "\n\nAn unrecoverable error occurred while stopping the %s " % service.friendly_name,
-                glib.printFailedMessage()
-                sys.exit(1)
-        
-        if o == "--status":
-            sys.exit(service.status())
-                
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 4e11e33..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-<!--  Parameters for  configuring the LB Server service -->
-<config>
-       <parameters>
-
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-               <!-- User-defined parameters - Please change them -->
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-
-               <!--  gLite services user accounts  -->
-               <glite.user.name 
-                       description="Name of the user account used to run the gLite services
-                       on this LB node"
-                       value="changeme"/>
-
-               <glite.user.group
-                       description="Group of the user specified in the 'glite.user.name'
-                       parameter. Leave it empty of comment it out to use the same as 'glite.user.name'"
-                       value="changeme"/>
-               
-           <mysql.root.password
-               description="The mysql root password"
-               value="changeme"/>
-       
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-               <!-- Advanced parameters - Change them if you know what you're doing -->
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-
-               <!-- Installer configuration -->
-               <glite.installer.verbose
-                       description="Enable verbose output"
-                       value="true"/>
-                       
-               <glite.installer.checkcerts
-                       description="Enable check of host certificates"
-                       value="true"/>
-
-               <rgma.servicetool.activate
-                       description="Turn on/off servicetool for the node.
-                               [Example: true ] [Type: 'boolean']"
-                       value="true"/>                  
-
-               <!-- mysql configuration -->
-               <set.mysql.root.password
-                       description="If this parameter is true, then the root password of the mysql database
-                               is set to the value specified in mysql.root.password if it not yet set. This parameter has
-                               no effect if the database root password is already set. It can be used to ease automated
-                               installation and configuration of the service, if mysql is not managed in some other way.
-                               [Example: false] [Type: boolean]"
-                       value="false"/>
-
-               <mysql.max_allowed_packet
-                       description="This parameter allows to set the max_allowed_packet parameter in the mysql
-                               configuration file /etc/my.cnf. The default recommended value for the LB server is 17MB
-                               It must be a number followed by a unit symbol, like M for megabytes or G for gigabytes.
-                               [Example: 17M][Type: Integer][Unit: MB]"
-                       value="17M"/>
-
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-               <!-- System parameters - You should leave these alone -->
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->               
-       
-               <lb.index.list
-                       description="Definitions of indices on all the currently supported indexed system attributes">
-                       
-                       <value>owner</value>
-                       <value>location</value>
-                       <value>destination</value>
-
-               </lb.index.list>
-                       
-       </parameters>
-
-</config>
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 2ad2d4d..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 01ee3f4..0000000
+++ /dev/null
@@ -1,2712 +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:ZWAdobeF;
-       panose-1:0 0 0 0 0 0 0 0 0 0;}
-@font-face
-       {font-family:"Univers \(W1\)";}
- /* 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.MsoIndex2, li.MsoIndex2, div.MsoIndex2
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:22.0pt;
-       text-align:justify;
-       text-indent:-11.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoIndex3, li.MsoIndex3, div.MsoIndex3
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:33.0pt;
-       text-align:justify;
-       text-indent:-11.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoIndex4, li.MsoIndex4, div.MsoIndex4
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:44.0pt;
-       text-align:justify;
-       text-indent:-11.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoIndex5, li.MsoIndex5, div.MsoIndex5
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:55.0pt;
-       text-align:justify;
-       text-indent:-11.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoIndex6, li.MsoIndex6, div.MsoIndex6
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:66.0pt;
-       text-align:justify;
-       text-indent:-11.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoIndex7, li.MsoIndex7, div.MsoIndex7
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:77.0pt;
-       text-align:justify;
-       text-indent:-11.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoIndex8, li.MsoIndex8, div.MsoIndex8
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:88.0pt;
-       text-align:justify;
-       text-indent:-11.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoIndex9, li.MsoIndex9, div.MsoIndex9
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:99.0pt;
-       text-align:justify;
-       text-indent:-11.0pt;
-       font-size:11.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.MsoIndexHeading, li.MsoIndexHeading, div.MsoIndexHeading
-       {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.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;}
-p.MsoTof, li.MsoTof, div.MsoTof
-       {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.MsoEnvelopeAddress, li.MsoEnvelopeAddress, div.MsoEnvelopeAddress
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:144.0pt;
-       text-align:justify;
-       font-size:12.0pt;
-       font-family:Arial;}
-p.MsoEnvelopeReturn, li.MsoEnvelopeReturn, div.MsoEnvelopeReturn
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:10.0pt;
-       font-family:Arial;}
-span.MsoFootnoteReference
-       {vertical-align:super;}
-p.MsoEndnoteText, li.MsoEndnoteText, div.MsoEndnoteText
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:10.0pt;
-       font-family:"Times New Roman";}
-p.MsoToa, li.MsoToa, div.MsoToa
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:11.0pt;
-       text-align:justify;
-       text-indent:-11.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoMacroText, li.MsoMacroText, div.MsoMacroText
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:10.0pt;
-       font-family:"Courier New";}
-p.MsoToaHeading, li.MsoToaHeading, div.MsoToaHeading
-       {margin-top:6.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:12.0pt;
-       font-family:Arial;
-       font-weight:bold;}
-p.MsoList, li.MsoList, div.MsoList
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:18.0pt;
-       text-align:justify;
-       text-indent:-18.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoListBullet, li.MsoListBullet, div.MsoListBullet
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:18.0pt;
-       text-align:justify;
-       text-indent:-18.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoListNumber, li.MsoListNumber, div.MsoListNumber
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:18.0pt;
-       text-align:justify;
-       text-indent:-18.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoList2, li.MsoList2, div.MsoList2
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:36.0pt;
-       text-align:justify;
-       text-indent:-18.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoList3, li.MsoList3, div.MsoList3
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:54.0pt;
-       text-align:justify;
-       text-indent:-18.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoList4, li.MsoList4, div.MsoList4
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:72.0pt;
-       text-align:justify;
-       text-indent:-18.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoList5, li.MsoList5, div.MsoList5
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:90.0pt;
-       text-align:justify;
-       text-indent:-18.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoListBullet2, li.MsoListBullet2, div.MsoListBullet2
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:36.0pt;
-       text-align:justify;
-       text-indent:-18.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoListBullet3, li.MsoListBullet3, div.MsoListBullet3
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:54.0pt;
-       text-align:justify;
-       text-indent:-18.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoListBullet4, li.MsoListBullet4, div.MsoListBullet4
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:72.0pt;
-       text-align:justify;
-       text-indent:-18.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoListBullet5, li.MsoListBullet5, div.MsoListBullet5
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:90.0pt;
-       text-align:justify;
-       text-indent:-18.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoListNumber2, li.MsoListNumber2, div.MsoListNumber2
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:36.0pt;
-       text-align:justify;
-       text-indent:-18.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoListNumber3, li.MsoListNumber3, div.MsoListNumber3
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:54.0pt;
-       text-align:justify;
-       text-indent:-18.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoListNumber4, li.MsoListNumber4, div.MsoListNumber4
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:72.0pt;
-       text-align:justify;
-       text-indent:-18.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoListNumber5, li.MsoListNumber5, div.MsoListNumber5
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:90.0pt;
-       text-align:justify;
-       text-indent:-18.0pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoTitle, li.MsoTitle, div.MsoTitle
-       {margin-top:12.0pt;
-       margin-right:0mm;
-       margin-bottom:3.0pt;
-       margin-left:0mm;
-       text-align:center;
-       font-size:16.0pt;
-       font-family:Arial;
-       font-weight:bold;}
-p.MsoClosing, li.MsoClosing, div.MsoClosing
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:216.0pt;
-       text-align:justify;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoSignature, li.MsoSignature, div.MsoSignature
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:216.0pt;
-       text-align:justify;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-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.MsoBodyTextIndent, li.MsoBodyTextIndent, div.MsoBodyTextIndent
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:6.0pt;
-       margin-left:18.0pt;
-       text-align:justify;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoListContinue, li.MsoListContinue, div.MsoListContinue
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:6.0pt;
-       margin-left:18.0pt;
-       text-align:justify;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoListContinue2, li.MsoListContinue2, div.MsoListContinue2
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:6.0pt;
-       margin-left:36.0pt;
-       text-align:justify;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoListContinue3, li.MsoListContinue3, div.MsoListContinue3
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:6.0pt;
-       margin-left:54.0pt;
-       text-align:justify;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoListContinue4, li.MsoListContinue4, div.MsoListContinue4
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:6.0pt;
-       margin-left:72.0pt;
-       text-align:justify;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoListContinue5, li.MsoListContinue5, div.MsoListContinue5
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:6.0pt;
-       margin-left:90.0pt;
-       text-align:justify;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoMessageHeader, li.MsoMessageHeader, div.MsoMessageHeader
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:54.0pt;
-       text-align:justify;
-       text-indent:-54.0pt;
-       background:#CCCCCC;
-       border:none;
-       padding:0mm;
-       font-size:12.0pt;
-       font-family:Arial;}
-p.MsoSubtitle, li.MsoSubtitle, div.MsoSubtitle
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:3.0pt;
-       margin-left:0mm;
-       text-align:center;
-       font-size:12.0pt;
-       font-family:Arial;}
-p.MsoSalutation, li.MsoSalutation, div.MsoSalutation
-       {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.MsoDate, li.MsoDate, div.MsoDate
-       {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.MsoBodyTextFirstIndent, li.MsoBodyTextFirstIndent, div.MsoBodyTextFirstIndent
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:6.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       text-indent:10.5pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoBodyTextFirstIndent2, li.MsoBodyTextFirstIndent2, div.MsoBodyTextFirstIndent2
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:6.0pt;
-       margin-left:18.0pt;
-       text-align:justify;
-       text-indent:10.5pt;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoNoteHeading, li.MsoNoteHeading, div.MsoNoteHeading
-       {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.MsoBodyText2, li.MsoBodyText2, div.MsoBodyText2
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:6.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       line-height:200%;
-       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.MsoBodyTextIndent2, li.MsoBodyTextIndent2, div.MsoBodyTextIndent2
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:6.0pt;
-       margin-left:18.0pt;
-       text-align:justify;
-       line-height:200%;
-       font-size:11.0pt;
-       font-family:"Times New Roman";}
-p.MsoBodyTextIndent3, li.MsoBodyTextIndent3, div.MsoBodyTextIndent3
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:6.0pt;
-       margin-left:18.0pt;
-       text-align:justify;
-       font-size:8.0pt;
-       font-family:"Times New Roman";}
-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.MsoPlainText, li.MsoPlainText, div.MsoPlainText
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:10.0pt;
-       font-family:"Courier New";}
-p.MsoAutoSig, li.MsoAutoSig, div.MsoAutoSig
-       {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
-       {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";}
-address
-       {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";
-       font-style:italic;}
-pre
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:10.0pt;
-       font-family:"Courier New";}
-tt
-       {font-family:"Courier New";}
-p.MsoCommentSubject, li.MsoCommentSubject, div.MsoCommentSubject
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:10.0pt;
-       font-family:"Times New Roman";
-       font-weight:bold;}
-p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
-       {margin-top:2.0pt;
-       margin-right:0mm;
-       margin-bottom:2.0pt;
-       margin-left:0mm;
-       text-align:justify;
-       font-size:8.0pt;
-       font-family:Tahoma;}
-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. 2.1.1. 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 style='margin-left:0mm;text-indent:0mm'><span lang=FR>2. </span><span
-lang=FR>Changes in this release</span></h1>
-
-<h2><span lang=FR>2.1. </span><span lang=FR>Changes in functionality</span></h2>
-
-<p class=MsoNormal><span lang=EN-US>There are no functional changes in this
-release.</span></p>
-
-<h2>2.2. Changes in Configuration</h2>
-
-<p class=MsoNormal><span lang=EN-US>The following new parameters have been
-added to the glite-lb.cfg.xml file:</span></p>
-
-<p class=MsoNormal><span lang=EN-US>&nbsp;</span></p>
-
-<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
- style='border-collapse:collapse;border:none'>
- <tr>
-  <td width=185 valign=top style='width:138.8pt;border:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><b><span lang=EN-US>Parameter name</span></b></p>
-  </td>
-  <td width=101 valign=top style='width:75.9pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><b><span lang=EN-US>Default value</span></b></p>
-  </td>
-  <td width=333 valign=top style='width:249.7pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><b><span lang=EN-US>Description</span></b></p>
-  </td>
- </tr>
- <tr>
-  <td width=185 valign=top style='width:138.8pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US>rgma.servicetool.activate</span></p>
-  </td>
-  <td width=101 valign=top style='width:75.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>true</span></p>
-  </td>
-  <td width=333 valign=top style='width:249.7pt;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>Turn on/off servicetool for the node.</span></p>
-  <p class=MsoNormal><span lang=EN-US>[Example: true ] [Type: 'boolean']</span></p>
-  </td>
- </tr>
- <tr>
-  <td width=185 valign=top style='width:138.8pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US>set.mysql.root.password</span></p>
-  </td>
-  <td width=101 valign=top style='width:75.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>false</span></p>
-  </td>
-  <td width=333 valign=top style='width:249.7pt;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>If this parameter is true, then the root
-  password of the mysql database is set to the value specified in
-  mysql.root.password if it not yet set. This parameter has       no effect if
-  the database root password is already set. It can be used to ease automated installation
-  and configuration of the service, if mysql is not managed in some other way.</span></p>
-  <p class=MsoNormal><span lang=EN-US>[Example: false][Type: boolean]</span></p>
-  </td>
- </tr>
- <tr>
-  <td width=185 valign=top style='width:138.8pt;border:solid windowtext 1.0pt;
-  border-top:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span lang=EN-US>mysql.max_allowed_packet</span></p>
-  </td>
-  <td width=101 valign=top style='width:75.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>17</span></p>
-  </td>
-  <td width=333 valign=top style='width:249.7pt;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>This parameter allows to set the
-  max_allowed_packet parameter in the mysql configuration file /etc/my.cnf. The
-  default recommended value for the LB server is 17MB.</span></p>
-  <p class=MsoNormal><span lang=EN-US>[Example: 17][Type: Integer][Unit: MB]</span></p>
-  </td>
- </tr>
-</table>
-
-<p class=MsoNormal><span lang=EN-US>&nbsp;</span></p>
-
-<p class=MsoNormal><span lang=EN-US>The R-GMA Service Publisher (aka R-GMA
-servicetool) parameters are now automatically handled by the configuration
-script and do not need to be explicitly set anymore in the configuration file.
-The parameters can be set in the configuration file to override the default
-values.</span></p>
-
-<p class=MsoNormal><span lang=EN-US>&nbsp;</span></p>
-
-<h1>3. Release contents</h1>
-
-<h2><a name="_Ref114562685">3.1. Glite sub-deployment modules</a></h2>
-
-<p class=MsoNormal>The gLite Logging and Bookkeeping module requires the
-following sub-modules:</p>
-
-<p class=MsoNormal>&nbsp;</p>
-
-<p class=MsoNormal style='margin-left:36.0pt;text-indent:-18.0pt'>-<span
-style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-</span>gLite Security Utilities</p>
-
-<p class=MsoNormal style='margin-left:36.0pt;text-indent:-18.0pt'>-<span
-style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-</span>gLite R-GMA Servicetool</p>
-
-<p class=MsoNormal>&nbsp;</p>
-
-<p class=MsoNormal>The sub-modules are automatically installed with the LB
-module. For more information about these sub-modules please refer to the
-specific release notes and installation instructions.</p>
-
-<h2>3.2. Glite RPMS</h2>
-
-<p class=MsoNormal>The gLite Logging &amp; Bookkeeping Server v. 2.1.1 is
-composed of the following gLite components:</p>
-
-<p class=MsoNormal>&nbsp;</p>
-
-<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0 width="100%"
- style='width:100.36%;border-collapse:collapse;border:none'>
- <tr>
-  <td width="20%" valign=top style='width:20.92%;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:
-  8.0pt'>Component name</span></p>
-  </td>
-  <td width="22%" valign=top style='width:22.8%;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  8.0pt'>Description</span></p>
-  </td>
-  <td width="10%" valign=top style='width:10.66%;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  8.0pt'>Version</span></p>
-  </td>
-  <td width="45%" valign=top style='width:45.62%;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  8.0pt'>File</span></p>
-  </td>
- </tr>
- <tr>
-  <td width="20%" valign=top style='width:20.92%;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:
-  8.0pt'>glite-config</span></p>
-  </td>
-  <td width="22%" valign=top style='width:22.8%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>gLite configuration scripts</span></p>
-  </td>
-  <td width="10%" valign=top style='width:10.66%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>1.6.22</span></p>
-  </td>
-  <td width="45%" valign=top style='width:45.62%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/noarch/RPMS/glite-config-1.6.22-1.noarch.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/noarch/RPMS/glite-config-1.6.22-1.noarch.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width="20%" valign=top style='width:20.92%;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:
-  8.0pt'>glite-jp-common</span></p>
-  </td>
-  <td width="22%" valign=top style='width:22.8%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>&nbsp;</span></p>
-  </td>
-  <td width="10%" valign=top style='width:10.66%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>1.1.0</span></p>
-  </td>
-  <td width="45%" valign=top style='width:45.62%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-jp-common-1.1.0-1.i386.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-jp-common-1.1.0-1.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width="20%" valign=top style='width:20.92%;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:
-  8.0pt'>glite-jp-primary</span></p>
-  </td>
-  <td width="22%" valign=top style='width:22.8%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>&nbsp;</span></p>
-  </td>
-  <td width="10%" valign=top style='width:10.66%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>1.1.1</span></p>
-  </td>
-  <td width="45%" valign=top style='width:45.62%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-jp-primary-1.1.1-1.i386.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-jp-primary-1.1.1-1.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width="20%" valign=top style='width:20.92%;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:
-  8.0pt'>glite-jp-server-common</span></p>
-  </td>
-  <td width="22%" valign=top style='width:22.8%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>&nbsp;</span></p>
-  </td>
-  <td width="10%" valign=top style='width:10.66%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>1.0.0</span></p>
-  </td>
-  <td width="45%" valign=top style='width:45.62%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-jp-server-common-1.0.0-1.i386.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-jp-server-common-1.0.0-1.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width="20%" valign=top style='width:20.92%;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:
-  8.0pt'>glite-jp-ws-interface</span></p>
-  </td>
-  <td width="22%" valign=top style='width:22.8%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>&nbsp;</span></p>
-  </td>
-  <td width="10%" valign=top style='width:10.66%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>1.1.0</span></p>
-  </td>
-  <td width="45%" valign=top style='width:45.62%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-jp-ws-interface-1.1.0-0.i386.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-jp-ws-interface-1.1.0-0.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width="20%" valign=top style='width:20.92%;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:
-  8.0pt'>glite-lb-client-interface</span></p>
-  </td>
-  <td width="22%" valign=top style='width:22.8%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>L&amp;B client library header files</span></p>
-  </td>
-  <td width="10%" valign=top style='width:10.66%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>2.1.0</span></p>
-  </td>
-  <td width="45%" valign=top style='width:45.62%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-client-interface-2.1.0-1.i386.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-client-interface-2.1.0-1.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width="20%" valign=top style='width:20.92%;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:
-  8.0pt'>glite-lb-config</span></p>
-  </td>
-  <td width="22%" valign=top style='width:22.8%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>gLite LB Configuration files</span></p>
-  </td>
-  <td width="10%" valign=top style='width:10.66%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>2.1.1</span></p>
-  </td>
-  <td width="45%" valign=top style='width:45.62%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-config-2.1.1-1.i386.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-config-2.1.1-1.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width="20%" valign=top style='width:20.92%;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:
-  8.0pt'>glite-lb-common</span></p>
-  </td>
-  <td width="22%" valign=top style='width:22.8%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>L&amp;B common subroutines library</span></p>
-  </td>
-  <td width="10%" valign=top style='width:10.66%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>3.0.1</span></p>
-  </td>
-  <td width="45%" valign=top style='width:45.62%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-common-3.0.1-1.i386.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-common-3.0.1-1.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width="20%" valign=top style='width:20.92%;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:
-  8.0pt'>glite-lb-logger</span></p>
-  </td>
-  <td width="22%" valign=top style='width:22.8%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>L&amp;B local logger</span></p>
-  </td>
-  <td width="10%" valign=top style='width:10.66%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>1.2.1</span></p>
-  </td>
-  <td width="45%" valign=top style='width:45.62%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-logger-1.2.1-1.i386.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-logger-1.2.1-1.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width="20%" valign=top style='width:20.92%;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:
-  8.0pt'>glite-lb-server</span></p>
-  </td>
-  <td width="22%" valign=top style='width:22.8%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>L&amp;B bookkeeping server</span></p>
-  </td>
-  <td width="10%" valign=top style='width:10.66%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>1.3.3</span></p>
-  </td>
-  <td width="45%" valign=top style='width:45.62%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-server-1.3.3-1.i386.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-server-1.3.3-1.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width="20%" valign=top style='width:20.92%;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:
-  8.0pt'>glite-lb-server-bones</span></p>
-  </td>
-  <td width="22%" valign=top style='width:22.8%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>L&amp;B server bones</span></p>
-  </td>
-  <td width="10%" valign=top style='width:10.66%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>2.1.1</span></p>
-  </td>
-  <td width="45%" valign=top style='width:45.62%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-server-bones-2.1.1-1.i386.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-server-bones-2.1.1-1.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width="20%" valign=top style='width:20.92%;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:
-  8.0pt'>glite-lb-ws-interface</span></p>
-  </td>
-  <td width="22%" valign=top style='width:22.8%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>&nbsp;</span></p>
-  </td>
-  <td width="10%" valign=top style='width:10.66%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>2.1.0</span></p>
-  </td>
-  <td width="45%" valign=top style='width:45.62%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-ws-interface-2.1.0-1.i386.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-ws-interface-2.1.0-1.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width="20%" valign=top style='width:20.92%;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:
-  8.0pt'>glite-rgma-servicetool-config</span></p>
-  </td>
-  <td width="22%" valign=top style='width:22.8%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>gLite R-GMA servicetool installation</span></p>
-  </td>
-  <td width="10%" valign=top style='width:10.66%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>5.2.2</span></p>
-  </td>
-  <td width="45%" valign=top style='width:45.62%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/noarch/RPMS/glite-rgma-servicetool-config-5.2.2-1.noarch.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/noarch/RPMS/glite-rgma-servicetool-config-5.2.2-1.noarch.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width="20%" valign=top style='width:20.92%;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:
-  8.0pt'>glite-security-gsoap-plugin</span></p>
-  </td>
-  <td width="22%" valign=top style='width:22.8%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>gSOAP plugin and gss libraries</span></p>
-  </td>
-  <td width="10%" valign=top style='width:10.66%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>1.2.1</span></p>
-  </td>
-  <td width="45%" valign=top style='width:45.62%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-security-gsoap-plugin-1.2.1-0.i386.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-security-gsoap-plugin-1.2.1-0.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width="20%" valign=top style='width:20.92%;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:
-  8.0pt'>glite-security-utils-config</span></p>
-  </td>
-  <td width="22%" valign=top style='width:22.8%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>gLite Security Utilities configuration files</span></p>
-  </td>
-  <td width="10%" valign=top style='width:10.66%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>1.2.1</span></p>
-  </td>
-  <td width="45%" valign=top style='width:45.62%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/noarch/RPMS/glite-security-utils-config-1.2.1-1.noarch.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/noarch/RPMS/glite-security-utils-config-1.2.1-1.noarch.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width="20%" valign=top style='width:20.92%;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:
-  8.0pt'>glite-security-voms-api-c</span></p>
-  </td>
-  <td width="22%" valign=top style='width:22.8%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>&nbsp;</span></p>
-  </td>
-  <td width="10%" valign=top style='width:10.66%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>1.6.10</span></p>
-  </td>
-  <td width="45%" valign=top style='width:45.62%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-security-voms-api-c-1.6.10-0.i386.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-security-voms-api-c-1.6.10-0.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width="20%" valign=top style='width:20.92%;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:
-  8.0pt'>glite-wms-utils-exception</span></p>
-  </td>
-  <td width="22%" valign=top style='width:22.8%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>&nbsp;</span></p>
-  </td>
-  <td width="10%" valign=top style='width:10.66%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>1.0.3</span></p>
-  </td>
-  <td width="45%" valign=top style='width:45.62%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-wms-utils-exception-1.0.3-1.i386.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-wms-utils-exception-1.0.3-1.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width="20%" valign=top style='width:20.92%;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:
-  8.0pt'>glite-wms-utils-jobid</span></p>
-  </td>
-  <td width="22%" valign=top style='width:22.8%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>&nbsp;</span></p>
-  </td>
-  <td width="10%" valign=top style='width:10.66%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>1.0.2</span></p>
-  </td>
-  <td width="45%" valign=top style='width:45.62%;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-wms-utils-jobid-1.0.2-1.i386.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-wms-utils-jobid-1.0.2-1.i386.rpm</a></span></p>
-  </td>
- </tr>
-</table>
-
-<h1>4. Dependencies</h1>
-
-<p class=MsoNormal>The gLite Logging &amp; Bookkeeping Server v. 2.1.1 module
-has the following dependencies:</p>
-
-<p class=MsoNormal>&nbsp;</p>
-
-<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0 width=621
- style='width:466.1pt;border-collapse:collapse;border:none'>
- <tr>
-  <td width=130 valign=top style='width:97.55pt;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:
-  8.0pt'>Component name</span></p>
-  </td>
-  <td width=142 valign=top style='width:106.3pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><span style='font-size:
-  8.0pt'>Description</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.65pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:8.0pt'>Version</span></p>
-  </td>
-  <td width=283 valign=top style='width:212.6pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><span style='font-size:8.0pt'>RPM file name</span></p>
-  </td>
- </tr>
- <tr>
-  <td width=130 valign=top style='width:97.55pt;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:
-  8.0pt'>c-ares</span></p>
-  </td>
-  <td width=142 valign=top style='width:106.3pt;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>A library that performs asynchronous DNS operations</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.65pt;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>1.3.0</span></p>
-  </td>
-  <td width=283 valign=top style='width:212.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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/c-ares-1.3.0-1.slc3.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/c-ares-1.3.0-1.slc3.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=130 valign=top style='width:97.55pt;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:
-  8.0pt'>gpt</span></p>
-  </td>
-  <td width=142 valign=top style='width:106.3pt;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>The Grid Packaging Toolkit (GPT)</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.65pt;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>VDT1.2.2rh9</span></p>
-  </td>
-  <td width=283 valign=top style='width:212.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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/gpt-VDT1.2.2rh9-1.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/gpt-VDT1.2.2rh9-1.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=130 valign=top style='width:97.5pt;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:
-  8.0pt'>gridsite</span></p>
-  </td>
-  <td width=142 valign=top style='width:106.25pt;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>GridSite</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.7pt;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>1.1.15</span></p>
-  </td>
-  <td width=283 valign=top style='width:212.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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/gridsite-1.1.15-1.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/gridsite-1.1.15-1.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=130 valign=top style='width:97.55pt;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:
-  8.0pt'>j2re</span></p>
-  </td>
-  <td width=142 valign=top style='width:106.3pt;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:8.0pt'>Java </span><span lang=PL
-  style='font-size:8.0pt'>JR</span><span style='font-size:8.0pt'>E</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.65pt;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:8.0pt'>1.4.2</span></p>
-  </td>
-  <td width=283 valign=top style='width:212.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:8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/j2re-1_4_2_08-linux-i586.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/<span
-  lang=EN-US>j2re-1_4_2_08-linux-i586.rpm</span></a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=130 valign=top style='width:97.55pt;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:
-  8.0pt'>myproxy</span></p>
-  </td>
-  <td width=142 valign=top style='width:106.3pt;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>Credential repository for the Grid.</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.65pt;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>1.14</span></p>
-  </td>
-  <td width=283 valign=top style='width:212.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 align=left style='text-align:left'><span style='font-size:
-  8.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-1.14-EGEE.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=130 valign=top style='width:97.55pt;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:
-  8.0pt'>MySQL-client</span></p>
-  </td>
-  <td width=142 valign=top style='width:106.3pt;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>MySQL - Client</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.65pt;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>4.1.11</span></p>
-  </td>
-  <td width=283 valign=top style='width:212.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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/MySQL-client-4.1.11-0.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/MySQL-client-4.1.11-0.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=130 valign=top style='width:97.55pt;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:
-  8.0pt'>MySQL-server</span></p>
-  </td>
-  <td width=142 valign=top style='width:106.3pt;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>MySQL</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.65pt;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>4.1.11</span></p>
-  </td>
-  <td width=283 valign=top style='width:212.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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/MySQL-server-4.1.11-0.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/MySQL-server-4.1.11-0.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=130 valign=top style='width:97.55pt;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:
-  8.0pt'>perl-Expect.pm</span></p>
-  </td>
-  <td width=142 valign=top style='width:106.3pt;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>Expect.pm module for perl (./id/A/AU/AUSCHUTZ)</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.65pt;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>1.01</span></p>
-  </td>
-  <td width=283 valign=top style='width:212.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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/perl-Expect.pm-1.01-9.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/perl-Expect.pm-1.01-9.i386.rpm</a></span></p>
-  </td>
- </tr>
- <tr>
-  <td width=130 valign=top style='width:97.55pt;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:
-  8.0pt'>vdt_globus_essentials</span></p>
-  </td>
-  <td width=142 valign=top style='width:106.3pt;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>Virtual Data Toolkit</span></p>
-  </td>
-  <td width=66 valign=top style='width:49.65pt;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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'>VDT1.2.2rh9</span></p>
-  </td>
-  <td width=283 valign=top style='width:212.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 align=left style='text-align:left'><span style='font-size:
-  8.0pt'><a
-  href="http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/vdt_globus_essentials-VDT1.2.2rh9-1.i386.rpm">http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/vdt_globus_essentials-VDT1.2.2rh9-1.i386.rpm</a></span></p>
-  </td>
- </tr>
-</table>
-
-<p class=MsoNormal>&nbsp;</p>
-
-<h1>5. Known bugs and issues</h1>
-
-<p class=MsoNormal align=left style='text-align:left;text-autospace:ideograph-numeric'>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 <span
-style='font-size:1.0pt;font-family:ZWAdobeF'>H</span><a
-href="https://savannah.cern.ch/bugs/?group=jra1mdw">https://savannah.cern.ch/bugs/?group=jra1mdw</a><span
-style='font-size:1.0pt;font-family:ZWAdobeF'>H</span> .</p>
-
-<p class=MsoNormal align=left style='text-align:left'>&nbsp;</p>
-
-<ul style='margin-top:0mm' type=disc>
- <li class=MsoNormal style='text-align:left'>There is an infinite loop during
-     the initialization of the LB_Events data structure</li>
- <li class=MsoNormal 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.</li>
-</ul>
-
-<p class=MsoNormal align=left style='text-align:left'>&nbsp;</p>
-
-<p class=MsoNormal align=left style='text-align:left'>Known open bugs:</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=62 valign=top style='width:46.8pt;border:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><b><span style='font-size:10.0pt'>Bug number</span></b></p>
-  </td>
-  <td width=540 valign=top style='width:405.15pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><b><span style='font-size:10.0pt'>Description</span></b></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><b><span style='font-size:10.0pt'>&nbsp;</span></b></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=7324"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#7324</span></a></span></p>
-  </td>
-  <td width=540 valign=top style='width:405.15pt;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=7324"><span
-  style='color:windowtext;text-decoration:none'>lb-bkserver is running with no
-  pid</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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'>&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=9701"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#9701</span></a></span></p>
-  </td>
-  <td width=540 valign=top style='width:405.15pt;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=9701"><span
-  style='color:windowtext;text-decoration:none'>erroneous rpath in several
-  shared objects</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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'>&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=9777"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#9777</span></a></span></p>
-  </td>
-  <td width=540 valign=top style='width:405.15pt;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=9777"><span
-  style='color:windowtext;text-decoration:none'>unable to get logging-info -2
-  info for 1000 jobs</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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'>&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=10781"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#10781</span></a></span></p>
-  </td>
-  <td width=540 valign=top style='width:405.15pt;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=10781"><span
-  style='color:windowtext;text-decoration:none'>Missing the timestamps of
-  'Scheduled' and 'Running' status</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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'>&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=11535"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#11535</span></a></span></p>
-  </td>
-  <td width=540 valign=top style='width:405.15pt;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=11535"><span
-  style='color:windowtext;text-decoration:none'>Job submission extremely slow</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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'>&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=13418"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#13418</span></a></span></p>
-  </td>
-  <td width=540 valign=top style='width:405.15pt;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=13418"><span
-  style='color:windowtext;text-decoration:none'>problem in computing status (of
-  resubmitted jobs)</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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'>&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=13492"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#13492</span></a></span></p>
-  </td>
-  <td width=540 valign=top style='width:405.15pt;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=13492"><span
-  style='color:windowtext;text-decoration:none'>Job State Information Log File</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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'>&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=13832"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#13832</span></a></span></p>
-  </td>
-  <td width=540 valign=top style='width:405.15pt;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=13832"><span
-  style='color:windowtext;text-decoration:none'>Default mysql configuration
-  imposes unnecessary limits on LB server</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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'>&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=13879"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#13879</span></a></span></p>
-  </td>
-  <td width=540 valign=top style='width:405.15pt;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=13879"><span
-  style='color:windowtext;text-decoration:none'>Some data do not propagate from
-  lbproxy to bkserver...</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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'>&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=13929"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#13929</span></a></span></p>
-  </td>
-  <td width=540 valign=top style='width:405.15pt;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=13929"><span
-  style='color:windowtext;text-decoration:none'>The glite-lb-bkserverd has
-  wrong default for var directory</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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'>&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=13951"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#13951</span></a></span></p>
-  </td>
-  <td width=540 valign=top style='width:405.15pt;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=13951"><span
-  style='color:windowtext;text-decoration:none'>lb proxy sends garbage response
-  on error </span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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'>&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=13988"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#13988</span></a></span></p>
-  </td>
-  <td width=540 valign=top style='width:405.15pt;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=13988"><span
-  style='color:windowtext;text-decoration:none'>Failed to start
-  glite-lb-locallogger on glite 1.4.1</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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'>&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=14247"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#14247</span></a></span></p>
-  </td>
-  <td width=540 valign=top style='width:405.15pt;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=14247"><span
-  style='color:windowtext;text-decoration:none'>No events are found querying LB
-  for events satisfying jobid and source instance</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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'>&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=14339"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#14339</span></a></span></p>
-  </td>
-  <td width=540 valign=top style='width:405.15pt;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=14339"><span
-  style='color:windowtext;text-decoration:none'>Wrong computing state when
-  proxy expires</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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'>&nbsp;</span></p>
-  </td>
- </tr>
-</table>
-
-<p class=MsoNormal>&nbsp;</p>
-
-<p class=MsoNormal>Bugs fixed in this or previous releases, but not yet officially
-tested:</p>
-
-<p class=MsoNormal>&nbsp;</p>
-
-<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
- style='border-collapse:collapse;border:none'>
- <tr>
-  <td width=61 valign=top style='width:45.4pt;border:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><b><span
-  style='font-size:10.0pt;color:#333333'>Bug number</span></b></p>
-  </td>
-  <td width=542 valign=top style='width:406.55pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><b><span
-  style='font-size:10.0pt;color:#333333'>Description</span></b></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal align=left style='text-align:left'><b><span
-  style='font-size:10.0pt;color:#333333'>&nbsp;</span></b></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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=7307"><span
-  style='color:#333333;text-decoration:none'>&nbsp;#7307</span></a></span></p>
-  </td>
-  <td width=542 valign=top style='width:406.55pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=7307"><span
-  style='color:#333333;text-decoration:none'>lb config script does _not_ fail
-  if mysql root password is set</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'>&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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=7305"><span
-  style='color:#333333;text-decoration:none'>&nbsp;#7305</span></a></span></p>
-  </td>
-  <td width=542 valign=top style='width:406.55pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=7305"><span
-  style='color:#333333;text-decoration:none'>lb.database.username paramenter in
-  config file</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'>&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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=7300"><span
-  style='color:#333333;text-decoration:none'>&nbsp;#7300</span></a></span></p>
-  </td>
-  <td width=542 valign=top style='width:406.55pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=7300"><span
-  style='color:#333333;text-decoration:none'>update of the lb instructions at
-  the end of the installer script </span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'>&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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=7053"><span
-  style='color:#333333;text-decoration:none'>&nbsp;#7053</span></a></span></p>
-  </td>
-  <td width=542 valign=top style='width:406.55pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=7053"><span
-  style='color:#333333;text-decoration:none'>LB configuration fails if the
-  mysql root pwd is set</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'>&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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=13928"><span
-  style='color:#333333;text-decoration:none'>&nbsp;#13928</span></a></span></p>
-  </td>
-  <td width=542 valign=top style='width:406.55pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=13928"><span
-  style='color:#333333;text-decoration:none'>org.glite.lb.server depends on
-  full VOMS package instead of individual APIs packages</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'>&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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=13048"><span
-  style='color:#333333;text-decoration:none'>&nbsp;#13048</span></a></span></p>
-  </td>
-  <td width=542 valign=top style='width:406.55pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=13048"><span
-  style='color:#333333;text-decoration:none'>interlogger does not handle errors
-  from bookkeeping server</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'>&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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=12648"><span
-  style='color:#333333;text-decoration:none'>&nbsp;#12648</span></a></span></p>
-  </td>
-  <td width=542 valign=top style='width:406.55pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=12648"><span
-  style='color:#333333;text-decoration:none'>The memory usage of one LB process
-  keeps growing</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'>&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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=11387"><span
-  style='color:#333333;text-decoration:none'>&nbsp;#11387</span></a></span></p>
-  </td>
-  <td width=542 valign=top style='width:406.55pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=11387"><span
-  style='color:#333333;text-decoration:none'>LBProxy SIGSEGV</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'>&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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=11050"><span
-  style='color:#333333;text-decoration:none'>&nbsp;#11050</span></a></span></p>
-  </td>
-  <td width=542 valign=top style='width:406.55pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=11050"><span
-  style='color:#333333;text-decoration:none'>Too heavy locallogger retry
-  strategy</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'>&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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=9183"><span
-  style='color:#333333;text-decoration:none'>&nbsp;#9183</span></a></span></p>
-  </td>
-  <td width=542 valign=top style='width:406.55pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=9183"><span
-  style='color:#333333;text-decoration:none'>Broken connections in LB contect
-  connection pool</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'>&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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=9135"><span
-  style='color:#333333;text-decoration:none'>&nbsp;#9135</span></a></span></p>
-  </td>
-  <td width=542 valign=top style='width:406.55pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=9135"><span
-  style='color:#333333;text-decoration:none'>The interlogd has problem sending
-  event to the LB server</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'>&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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=8630"><span
-  style='color:#333333;text-decoration:none'>&nbsp;#8630</span></a></span></p>
-  </td>
-  <td width=542 valign=top style='width:406.55pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=8630"><span
-  style='color:#333333;text-decoration:none'>EDG_WL_* variables in LB library</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'>&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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=7910"><span
-  style='color:#333333;text-decoration:none'>&nbsp;#7910</span></a></span></p>
-  </td>
-  <td width=542 valign=top style='width:406.55pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=7910"><span
-  style='color:#333333;text-decoration:none'>Duplicate apostroph in MySQL calls</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'>&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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=11509"><span
-  style='color:#333333;text-decoration:none'>&nbsp;#11509</span></a></span></p>
-  </td>
-  <td width=542 valign=top style='width:406.55pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=11509"><span
-  style='color:#333333;text-decoration:none'>glite-lb-config.py overwrites
-  HOSTNAME_org.glite.wms.workloadmanager.service with the wrong WMS version</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'>&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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=10686"><span
-  style='color:#333333;text-decoration:none'>&nbsp;#10686</span></a></span></p>
-  </td>
-  <td width=542 valign=top style='width:406.55pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'><a
-  href="https://savannah.cern.ch/bugs/?func=detailitem&amp;item_id=10686"><span
-  style='color:#333333;text-decoration:none'>MySQL library fails on hostnames
-  containing dashes</span></a></span></p>
-  </td>
-  <td width=17 valign=top style='width:12.45pt;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 align=left style='text-align:left'><span style='font-size:
-  10.0pt;color:#333333'>&nbsp;</span></p>
-  </td>
- </tr>
-</table>
-
-<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>6. Bugs closed since last release</h1>
-
-<p class=MsoNormal align=left style='text-align:left;text-autospace:ideograph-numeric'>This
-release fixes the following bugs and issues. Bug numbers refer to the gLite Bug
-Tracking system database hosted on the CERN Savannah system at <span
-style='font-size:1.0pt;font-family:ZWAdobeF'>H</span><a
-href="https://savannah.cern.ch/bugs/?group=jra1mdw">https://savannah.cern.ch/bugs/?group=jra1mdw</a><span
-style='font-size:1.0pt;font-family:ZWAdobeF'>H</span>  </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=64 valign=top style='width:47.8pt;border:solid windowtext 1.0pt;
-  padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><b><span style='font-size:10.0pt'>Bug number</span></b></p>
-  </td>
-  <td width=529 valign=top style='width:397.05pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><b><span style='font-size:10.0pt'>Description</span></b></p>
-  </td>
-  <td width=26 valign=top style='width:19.55pt;border:solid windowtext 1.0pt;
-  border-left:none;padding:0mm 5.4pt 0mm 5.4pt'>
-  <p class=MsoNormal><b><span style='font-size:10.0pt'>&nbsp;</span></b></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=6722"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#6722</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=6722"><span
-  style='color:windowtext;text-decoration:none'>glite-job-status -all doesn't
-  work</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'>&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=7237"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#7237</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=7237"><span
-  style='color:windowtext;text-decoration:none'>Intermittent errors with job
-  submission</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'>&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=9148"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#9148</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=9148"><span
-  style='color:windowtext;text-decoration:none'>Job stays 'Submitted' forever</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'>&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=10730"><span
-  style='color:windowtext;text-decoration:none'>&nbsp;#10730</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=10730"><span
-  style='color:windowtext;text-decoration:none'>Error on glite-job-submit</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'>&nbsp;</span></p>
-  </td>
- </tr>
-</table>
-
-<p class=MsoNormal align=left style='text-align:left'>&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 c512e91..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.number b/org.glite.deployment.lb/project/build.number
deleted file mode 100644 (file)
index 306b97f..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Mar 13 07:52:27 CET 2006
-module.build=0326
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 48d94a7..0000000
+++ /dev/null
@@ -1,157 +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="@org.glite.deployment.config.info.version@"
-                                       age="@org.glite.deployment.config.info.age@"
-                                       build="@org.glite.deployment.config.info.build@"
-                                       arch="noarch"/>
-                                       
-                               <component name="glite-LB"
-                                       version="@module.version@"
-                                       age="@module.age@"
-                                       build="@module.build@"
-                                       arch="noarch"/>
-
-                               <component name="glite-lb-client-interface"
-                                       version="@org.glite.lb.client-interface.info.version@"
-                                       age="@org.glite.lb.client-interface.info.age@"
-                                       build="@org.glite.lb.client-interface.info.build@"
-                                       arch="i386"/>
-
-                               <component name="glite-lb-ws-interface"
-                                       version="@org.glite.lb.ws-interface.info.version@"
-                                       age="@org.glite.lb.ws-interface.info.age@"
-                                       build="@org.glite.lb.ws-interface.info.build@"
-                                       arch="i386"/>
-                       
-                               <component name="glite-lb-logger"
-                                       version="@org.glite.lb.logger.info.version@"
-                                       age="@org.glite.lb.logger.info.age@"
-                                       build="@org.glite.lb.logger.info.build@"
-                                       arch="i386"/>
-               
-                               <component name="glite-lb-common"
-                                       version="@org.glite.lb.common.info.version@"
-                                       age="@org.glite.lb.common.info.age@"
-                                       build="@org.glite.lb.common.info.build@"
-                                       arch="i386"/>
-       
-                               <component name="glite-lb-server"
-                                       version="@org.glite.lb.server.info.version@"
-                                       age="@org.glite.lb.server.info.age@"
-                                       build="@org.glite.lb.server.info.build@"
-                                       arch="i386"/>
-                                          
-                               <component name="glite-lb-server-bones"
-                                       version="@org.glite.lb.server-bones.info.version@"
-                                       age="@org.glite.lb.server-bones.info.age@"
-                                       build="@org.glite.lb.server-bones.info.build@"
-                                       arch="i386"/>
-                                          
-                               <component name="glite-wms-utils-jobid"
-                                       version="@org.glite.wms-utils.jobid.info.version@"
-                                       age="@org.glite.wms-utils.jobid.info.age@"
-                                       build="@org.glite.wms-utils.jobid.info.build@"
-                                       arch="i386"/>
-       
-                               <component name="glite-wms-utils-exception"
-                                       version="@org.glite.wms-utils.exception.info.version@"
-                                       age="@org.glite.wms-utils.exception.info.age@"
-                                       build="@org.glite.wms-utils.exception.info.build@"
-                                       arch="i386"/>
-                               
-                               <component name="glite-security-gsoap-plugin"
-                                       version="@org.glite.security.gsoap-plugin.info.version@"
-                                       age="@org.glite.security.gsoap-plugin.info.age@"
-                                       build="@org.glite.security.gsoap-plugin.info.build@"
-                                       arch="i386"/>
-                               
-                               <component name="glite-security-voms-api-c"
-                    version="@org.glite.security.voms-api-c.info.version@"
-                    age="@org.glite.security.voms-api-c.info.age@"
-                    build="@org.glite.security.voms-api-c.info.build@"
-                    arch="i386"/>
-
-                               <component name="glite-jp-primary"
-                    version="@org.glite.jp.primary.info.version@"
-                    age="@org.glite.jp.primary.info.age@"
-                    build="@org.glite.jp.primary.info.build@"
-                    arch="i386"/>
-
-                               <component name="glite-jp-common"
-                    version="@org.glite.jp.common.info.version@"
-                    age="@org.glite.jp.common.info.age@"
-                    build="@org.glite.jp.common.info.build@"
-                    arch="i386"/>
-
-                               <component name="glite-jp-server-common"
-                    version="@org.glite.jp.server-common.info.version@"
-                    age="@org.glite.jp.server-common.info.age@"
-                    build="@org.glite.jp.server-common.info.build@"
-                    arch="i386"/>
-
-                               <component name="glite-jp-ws-interface"
-                    version="@org.glite.jp.ws-interface.info.version@"
-                    age="@org.glite.jp.ws-interface.info.age@"
-                    build="@org.glite.jp.ws-interface.info.build@"
-                    arch="i386"/>
-
-                <component name="gridsite"
-                    version="@org.gridsite.core.info.version@"
-                    age="@org.gridsite.core.info.age@"
-                                       build="@org.gridsite.core.info.build@"
-                    arch="i386"/>
-                       </components>
-                       <dependencies>
-                               <external name="@ext.mysql-server.rpm.name@"
-                                         version="@ext.mysql-server.version@"
-                                         age="@ext.mysql-server.rpm.age@"
-                                         arch="@ext.mysql-server.platform@"/>                            
-                               <external name="@ext.mysql-client.rpm.name@"
-                                         version="@ext.mysql-client.version@"
-                                         age="@ext.mysql-client.rpm.age@"
-                                         arch="@ext.mysql-client.platform@"/>                            
-                               <external name="@ext.c-ares.rpm.name@"
-                                       version="@ext.c-ares.version@"
-                                       age="@ext.c-ares.rpm.age@"
-                                       arch="@ext.c-ares.platform@"/>
-                               <external name="@ext.globus-essentials.rpm.name@"
-                                       version="@ext.globus-essentials.rpm.version@"
-                                       age="@ext.globus-essentials.rpm.age@"
-                                       arch="@ext.globus-essentials.platform@"/>
-                               <external name="@ext.gpt.rpm.name@"
-                                       version="@ext.gpt.rpm.version@"
-                                       age="@ext.gpt.rpm.age@"
-                                       arch="@ext.gpt.platform@"/>
-                               <external name="@ext.myproxy.rpm.name@"
-                                       version="@ext.myproxy.version@"
-                                       age="@ext.myproxy.rpm.age@"
-                                       arch="@ext.myproxy.platform@"/>
-                               <external name="@ext.perl-expect-pm.rpm.name@"
-                                       version="@ext.perl-expect-pm.version@"
-                                       age="@ext.perl-expect-pm.rpm.age@"
-                                       arch="@ext.perl-expect-pm.platform@"/>
-                       </dependencies>
-               </service>
-
-               <!-- Security Utilities -->
-        <service name="glite-security-utils">
-                <subservice name="glite-security-utils"/>
-        </service>
-               <!-- RGMA servicetool -->
-        <service name="glite-rgma-servicetool">
-                <subservice name="glite-rgma-servicetool"/>
-        </service>
-       </services>
-       <dependencies>
-       </dependencies>
-</node>
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 c661ad7..0000000
+++ /dev/null
@@ -1,336 +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="installers"/>
-       <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
-}
-
-#Parse the SCRIPTLIST to execute all scripts
-function parseScriptList()
-{
-        for i in $SCRIPTLIST
-        do
-               if [ "$INSTALL" = "true" ]; then
-                        $i
-               else
-                        $i -u
-               fi
-        done
-}
-
-#Downloads and install the module RPMS
-function install()
-{
-
-       INSTALL=true
-       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"/> scripts from repository
-                <xsl:for-each select=".">
-                        <xsl:apply-templates select="subservice">
-                                <xsl:with-param name="install">true</xsl:with-param>
-                        </xsl:apply-templates>
-                </xsl:for-each>
-
-
-       # 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>
-
-       # Download and install subservices
-        parseScriptList
-
-               
-       # Install all RPMS
-       echo
-       echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-       echo x Please wait, installing the gLite Logging and Bookkeeping Server... x
-       echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-       echo
-       parseRPMList
-       if [ ! -z "$RPMLIST" ]; then
-               rpm -Uvh $RPMLIST
-               rpm_return=$?
-       else
-               echo All required RPMS are already installed
-               rpm_return=0
-       fi
-       if [ "$rpm_return" == "0" ]; then
-               echo
-               echo Done!
-               echo
-               echo Before using the gLite LB, please create or update the configuration
-               echo files /opt/glite/etc/config/glite-lb.cfg.xml
-               echo and /opt/glite/etc/config/glite-global.cfg.xml
-               echo and run the configuration script
-               echo /opt/glite/etc/config/scripts/glite-lb-config.py.
-               echo A template is provided in
-               echo /opt/glite/etc/config/templates/glite-lb.cfg.xml
-               echo Alternatively site configuration files can be used
-       else
-               echo
-               echo An error occurred while installing the LB RPMS.
-               echo Most likely one or more of the RPMS to be installed require
-               echo additional dependencies or are older than already installed packages.
-               echo Please refer to the rpm error message above for more details.
-       fi
-       echo
-       echo For more information refer to the gLite Installation and User Guides
-       echo or to the gLite web site \(http:\/\/www.glite.org\)
-       echo Please report problems and comments to the gLite Team at
-       echo glite-bugs@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
-       if [ "$?" == "0" ]; then
-               echo
-               echo Done!
-       else
-               echo
-               echo An error occurred while removing the LB RPMS.
-               echo Most likely one or more of the RPMS to be removed have
-               echo dependent packages.
-               echo Please refer to the rpm error message above for more details.
-       fi
-}
-
-###############################################################################
-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="subservices" match="subservice">
-                <xsl:param name="install"/>
-                <xsl:variable name="package"><xsl:value-of select="@name"/>_installer.sh</xsl:variable>
-                <xsl:choose>
-                        <xsl:when test="$install = 'true'">
-wget -N -nv <xsl:value-of select="$installers"/><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
-chmod u+x <xsl:value-of select="$package"/>
-SCRIPTLIST="$SCRIPTLIST ./<xsl:value-of select="$package"/>"
-                        </xsl:when>
-                        <xsl:otherwise>
-SCRIPTLISTUn="$SCRIPTLISTUn ./<xsl:value-of select="$package"/> -u "
-                        </xsl:otherwise>
-                </xsl:choose>
-        </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 -nv <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 -nv <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 ef87369..0000000
+++ /dev/null
@@ -1,73 +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$
-       Revision 1.2.4.2  2006/03/13 15:04:06  flammer
-       Changed name of rpm to glite-LB.
-       
-       Revision 1.2.4.1  2005/11/27 16:16:17  dimeglio
-       Restrict config file to root
-       
-       Revision 1.2  2005/07/08 13:18:40  dimeglio
-       Merged from branch 1.2.2
-       
-       Revision 1.1  2004/10/06 09:19:24  dimeglio
-       First version of this file
-       
--->
-
-<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 ...
-                ====================================================== -->
-                
-       <property name="build.package.name" value="glite-LB"/>
-       <property name="build.package.summary" value="gLite Logging and Bookkeeping node configuration files" />
-       <property name="build.package.description" value="gLite Logging and Bookkeeping node configuration files" />
-       <property name="build.package.files" value="
-%attr(755,root,root) %{prefix}/etc/config/scripts/glite-lb-config.py\n
-%attr(600,root,root) %{prefix}/etc/config/templates/glite-lb.cfg.xml\n
-%attr(644,root,root) %{prefix}/share/doc/glite-LB/release_notes/release_notes.doc\n
-%attr(644,root,root) %{prefix}/share/doc/glite-LB/release_notes/release_notes.pdf\n
-%attr(644,root,root) %{prefix}/share/doc/glite-LB/release_notes/release_notes.html\n"/>
-       <property name="build.package.obsolete" value="glite-lb-config"/>
-
-</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 74f841d..0000000
+++ /dev/null
@@ -1,64 +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"/>
-#
-
-## CAs 
-               
-include pro_software_glite_CA;
-               
-               
-
-# 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 select="subservice">
-include pro_software_<xsl:value-of select="translate(@name, '-', '_')"/>;
-               </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 bb1d337..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-
-module.version = 2.3.0
-module.age = 0
-                               
\ No newline at end of file
index 6e498fd..0c2c9a0 100755 (executable)
@@ -41,11 +41,14 @@ start()
        jpdump_maildir="--dump-mdir $GLITE_LB_EXPORT_JPDUMP_MAILDIR "
        [ -d "$GLITE_LB_EXPORT_JPDUMP_MAILDIR" ] || mkdir "$GLITE_LB_EXPORT_JPDUMP_MAILDIR" && chown $GLITE_USER:$GLITE_GROUP "$GLITE_LB_EXPORT_JPDUMP_MAILDIR"
        [ -n "$GLITE_LB_EXPORT_JPPS" ] && jpps="--jpps $GLITE_LB_EXPORT_JPPS "
-       [ -n "$GLITE_LB_EXPORT_SANDBOX_MAILDIR" ] && sandbox_maildir="--sandbox-mdir $GLITE_LB_EXPORT_SANDBOX_MAILDIR "
+       if [ -n "$GLITE_LB_EXPORT_JOBSDIR_KEEP" ]; then
+               keep_jobs="--store ${GLITE_LB_EXPORT_JOBSDIR_KEEP} "
+               [ -d $GLITE_LB_EXPORT_JOBSDIR_KEEP ] || mkdir -p $GLITE_LB_EXPORT_JOBSDIR_KEEP
+       fi
 
        echo -n Starting glite-jp-importer ...
        su - $GLITE_USER -c "$GLITE_LOCATION/bin/glite-jp-importer \
-               -i $pidfile $jpreg_maildir $jpdump_maildir $jpps $sandbox_maildir $creds" \
+               -i $pidfile $jpreg_maildir $jpdump_maildir $jpps $keep_jobs $creds" \
        && echo " done" || echo " FAILED"
 }
 
index 3e8bb2d..5041ca6 100644 (file)
@@ -49,7 +49,6 @@ jpimporter daemon usage: glite-jp-importer [option]
                            messages.
         -d, --dump-mdir    path to the 'LB maildir' subtree for LB dumps
                            This directory is scanned for the file upload msgs.
-        -s, --sandbox-mdir path to the 'LB maildir' subtree for input/output sandboxes
         -i, --pidfile      file to store master pid
         -t, --poll         maildir polling interval (in seconds)
                            Specifies the time interval for which the process
index ef94018..0be7205 100644 (file)
@@ -21,11 +21,9 @@ if [ -z "$GLITE_LB_EXPORT_JPPS" ]; then
   echo "Please specify the Job Provanance Primary Storage server."
   exit 1
 fi
-# bookkeeping server
-if [ -z "$GLITE_LB_EXPORT_BKSERVER" ]; then
-  echo "Please specify the Book Keeping server."
-  exit 1
-fi
+# book keeping server
+GLITE_LB_SERVER_PORT=${GLITE_LB_SERVER_PORT:-9000}
+GLITE_LB_EXPORT_BKSERVER=${GLITE_LB_EXPORT_BKSERVER:-localhost:$GLITE_LB_SERVER_PORT}
 # certificates
 if [ -z "$X509_USER_CERT" -o -z "$X509_USER_KEY" ]; then
   echo "Please set X509_USER_CERT and X509_USER_KEY."
@@ -41,27 +39,30 @@ if [ -z "$GLITE_LB_EXPORT_JPREG_MAILDIR" ]; then
   GLITE_LB_EXPORT_JPREG_MAILDIR=/tmp/jpreg
   echo "GLITE_LB_EXPORT_JPREG_MAILDIR not specified (-J arguent of the bkserver), used $GLITE_LB_EXPORT_JPREG_MAILDIR"
 fi
+# pidfile
+[ -n "$GLITE_JP_IMPORTER_PIDFILE" ] && pidfile="-i $GLITE_JP_IMPORTER_PIDFILE "
 
 CERT_ARGS="-c $X509_USER_CERT -k $X509_USER_KEY"
 GLITE_LB_EXPORT_JPDUMP_MAILDIR=${GLITE_LB_EXPORT_JPDUMP_MAILDIR:-/tmp/jpdump}
-GLITE_LB_EXPORT_DUMPDIR_OLD=${GLITE_LB_EXPORT_DUMPDIR_OLD:-$GLITE_LB_EXPORT_DUMPDIR.old}
-GLITE_LB_EXPORT_EXPORTDIR=${GLITE_LB_EXPORT_EXPORTDIR:-/tmp/lbexport}
-GLITE_LB_EXPORT_SANDBOX_MAILDIR=${GLITE_LB_EXPORT_SANDBOX_MAILDIR:-/tmp/jpsandbox}
+GLITE_LB_EXPORT_JOBSDIR=${GLITE_LB_EXPORT_JOBSDIR:-/tmp/lbexport}
 PREFIX=${PREFIX:-`dirname $0`/..}
 LOGDIR=$GLITE_LOCATION_VAR
-GLITE_LB_EXPORT_PURGE_ARGS=${GLITE_LB_EXPORT_PURGE_ARGS:--a 1h -c 1h -n 1h -o 1d}
+GLITE_LB_EXPORT_PURGE_ARGS=${GLITE_LB_EXPORT_PURGE_ARGS:---cleared 2d --aborted 2w --cancelled 2w --other 2m}
 
 
 [ -d $GLITE_LB_EXPORT_JPDUMP_MAILDIR ] || mkdir -p $GLITE_LB_EXPORT_JPDUMP_MAILDIR
 [ -d $GLITE_LB_EXPORT_DUMPDIR ] || mkdir -p $GLITE_LB_EXPORT_DUMPDIR
-[ -d $GLITE_LB_EXPORT_DUMPDIR_OLD ] || mkdir -p $GLITE_LB_EXPORT_DUMPDIR_OLD
-[ -d $GLITE_LB_EXPORT_EXPORTDIR ] || mkdir -p $GLITE_LB_EXPORT_EXPORTDIR
-[ -d $GLITE_LB_EXPORT_SANDBOX_MAILDIR ] || mkdir -p $GLITE_LB_EXPORT_SANDBOX_MAILDIR
+[ -n "$GLITE_LB_EXPORT_DUMPDIR_KEEP" -a ! -d $GLITE_LB_EXPORT_DUMPDIR_KEEP ] && mkdir -p $GLITE_LB_EXPORT_DUMPDIR_KEEP
+[ -d $GLITE_LB_EXPORT_JOBSDIR ] || mkdir -p $GLITE_LB_EXPORT_JOBSDIR
+if [ -n "$GLITE_LB_EXPORT_JOBSDIR_KEEP" ]; then
+  keep_jobs="--store ${GLITE_LB_EXPORT_JOBSDIR_KEEP} "
+  [ -d $GLITE_LB_EXPORT_JOBSDIR_KEEP ] || mkdir -p $GLITE_LB_EXPORT_JOBSDIR_KEEP
+fi
 [ -d $LOGDIR ] || mkdir -p $LOGDIR
 
 echo "Using cert args $CERT_ARGS"
 
-$PREFIX/bin/glite-jp-importer --reg-mdir $GLITE_LB_EXPORT_JPREG_MAILDIR --dump-mdir $GLITE_LB_EXPORT_JPDUMP_MAILDIR $CERT_ARGS --sandbox-mdir $GLITE_LB_EXPORT_SANDBOX_MAILDIR -g --jpps $GLITE_LB_EXPORT_JPPS $pidfile$keep_jobs> $LOGDIR/jp-importer.log 2>&1 &
+$PREFIX/bin/glite-jp-importer --reg-mdir $GLITE_LB_EXPORT_JPREG_MAILDIR --dump-mdir $GLITE_LB_EXPORT_JPDUMP_MAILDIR $CERT_ARGS -g --jpps $GLITE_LB_EXPORT_JPPS $pidfile$keep_jobs> $LOGDIR/jp-importer.log 2>&1 &
 JP_PID=$!
 trap "kill $JP_PID; exit 0" SIGINT
 
@@ -70,8 +71,12 @@ while [ 1 ]; do
 
   for file in $GLITE_LB_EXPORT_DUMPDIR/*; do
     if [ -s $file ]; then
-      $PREFIX/sbin/glite-lb-lb_dump_exporter -d $file -s $GLITE_LB_EXPORT_EXPORTDIR -m $GLITE_LB_EXPORT_JPDUMP_MAILDIR
-      mv $file $GLITE_LB_EXPORT_DUMPDIR_OLD
+      $PREFIX/sbin/glite-lb-lb_dump_exporter -d $file -s $GLITE_LB_EXPORT_JOBSDIR -m $GLITE_LB_EXPORT_JPDUMP_MAILDIR
+      if [ -n "$GLITE_LB_EXPORT_DUMPDIR_KEEP" ]; then
+        mv $file $GLITE_LB_EXPORT_DUMPDIR_KEEP
+      else
+        rm $file
+      fi
     else
       rm $file
     fi
index f33b656..3e5da0b 100644 (file)
@@ -23,8 +23,8 @@ int main(int argc, char **argv)
 {
        glite_jpcl_context_t    ctx;
        char                              **files,
-                                                  *jobid = NULL,
-                                                  *proxy = NULL,
+                                                  *jobid,
+                                                  *proxy,
                                                   *lbmd = NULL,
                                                   *jpps = NULL;
        int                                             i, j;
@@ -46,11 +46,6 @@ int main(int argc, char **argv)
 
        if ( i >= argc ) { usage(); return 1; }
 
-       if ( !proxy && !(proxy = getenv("X509_USER_PROXY")) ) {
-               perror("-p or X509_USER_PROXY must be set!\n");
-               return 1;
-       }
-
        if ( !(files = calloc(argc-i+1, sizeof(*files))) ) {
                perror("calloc()");
                return 1;
index 71173e5..b18cb31 100644 (file)
@@ -12,6 +12,7 @@
 #include <errno.h>
 #include <syslog.h>
 #include <fcntl.h>
+#include <libgen.h>
 
 #include "glite/lb/lb_maildir.h"
 #include "glite/security/glite_gsplugin.h"
@@ -51,10 +52,6 @@ typedef struct {
 #define GLITE_DUMP_IMPORTER_MDIR       "/tmp/jpdump"
 #endif 
 
-#ifndef GLITE_SANDBOX_IMPORTER_MDIR
-#define GLITE_SANDBOX_IMPORTER_MDIR    "/tmp/jpsandbox"
-#endif 
-
 #ifndef GLITE_JPPS
 #define GLITE_JPPS                                     "http://localhost:8901"
 #endif 
@@ -62,23 +59,23 @@ typedef struct {
 
 #define        MAX_REG_CONNS                           500
 
-static int             debug = 0;
-static int             die = 0;
-static int             child_died = 0;
-static int             poll = 2;
-static char            *name;
-static char            *jpps = GLITE_JPPS;
-static char            reg_mdir[PATH_MAX] = GLITE_REG_IMPORTER_MDIR;
-static char            dump_mdir[PATH_MAX] = GLITE_DUMP_IMPORTER_MDIR;
-static char            sandbox_mdir[PATH_MAX] = GLITE_SANDBOX_IMPORTER_MDIR;
-static struct soap     *soap;
-
-static time_t          cert_mtime;
-static char            *server_cert = NULL,
-                       *server_key = NULL,
-                       *cadir = NULL;
+static int                             debug = 0;
+static int                             die = 0;
+static int                             child_died = 0;
+static int                             poll = 2;
+static char                       *name;
+static char                       *jpps = GLITE_JPPS;
+static char                            reg_mdir[PATH_MAX] = GLITE_REG_IMPORTER_MDIR;
+static char                            dump_mdir[PATH_MAX] = GLITE_DUMP_IMPORTER_MDIR;
+static char                            *store = NULL;
+static struct soap        *soap;
+
+static time_t                  cert_mtime;
+static char                       *server_cert = NULL,
+                                          *server_key = NULL,
+                                          *cadir;
 static gss_cred_id_t   mycred = GSS_C_NO_CREDENTIAL;
-static char            *mysubj;
+static char                       *mysubj;
 
 
 static struct option opts[] = {
@@ -90,13 +87,13 @@ static struct option opts[] = {
        { "jpps",        1, NULL,    'p'},
        { "reg-mdir",    1, NULL,    'r'},
        { "dump-mdir",   1, NULL,    'd'},
-       { "sandbox-mdir",1, NULL,    's'},
        { "pidfile",     1, NULL,    'i'},
        { "poll",        1, NULL,    't'},
+       { "store",       1, NULL,    's'},
        { NULL,          0, NULL,     0}
 };
 
-static const char *get_opt_string = "hgp:r:d:s:i:t:c:k:C:";
+static const char *get_opt_string = "hgp:r:d:i:t:c:k:C:";
 
 static void usage(char *me)
 {
@@ -109,9 +106,9 @@ static void usage(char *me)
                "\t-p, --jpps         JP primary service server\n"
                "\t-r, --reg-mdir     path to the 'LB maildir' subtree for registrations\n"
                "\t-d, --dump-mdir    path to the 'LB maildir' subtree for LB dumps\n"
-               "\t-s, --sandbox-mdir path to the 'LB maildir' subtree for input/output sandboxes\n"
                "\t-i, --pidfile      file to store master pid\n"
                "\t-t, --poll         maildir polling interval (in seconds)\n",
+               "\t-s, --store        keep uploaded jobs in this directory\n",
                me);
 }
 
@@ -130,7 +127,6 @@ static int slave(int (*)(void), const char *);
 static int check_soap_fault(struct soap *, int);
 static int reg_importer(void);
 static int dump_importer(void);
-static int sandbox_importer(void);
 static int parse_msg(char *, msg_pattern_t []);
 static int gftp_put_file(const char *, int);
 
@@ -140,12 +136,13 @@ int main(int argc, char *argv[])
 {
        edg_wll_GssStatus       gss_code;
        struct sigaction        sa;
-       sigset_t                sset;
-       FILE                    *fpid;
-       pid_t                   reg_pid, dump_pid, sandbox_pid;
-       int                     opt;
-       char                    *name,
-                               pidfile[PATH_MAX] = GLITE_JPIMPORTER_PIDFILE;
+       sigset_t                        sset;
+       FILE                       *fpid;
+       pid_t                           reg_pid, dump_pid;
+       int                                     opt;
+       char                       *name,
+                                               pidfile[PATH_MAX] = GLITE_JPIMPORTER_PIDFILE;
+
        glite_gsplugin_Context  plugin_ctx;
 
 
@@ -164,9 +161,9 @@ int main(int argc, char *argv[])
                case 'C': cadir = optarg; break;
                case 'p': jpps = optarg; break;
                case 't': poll = atoi(optarg); break;
+               case 's': store = optarg; break;
                case 'r': strcpy(reg_mdir, optarg); break;
                case 'd': strcpy(dump_mdir, optarg); break;
-               case 's': strcpy(sandbox_mdir, optarg); break;
                case 'i': strcpy(pidfile, optarg); break;
                case '?': usage(name); return 1;
        }
@@ -195,7 +192,12 @@ int main(int argc, char *argv[])
                
        edg_wll_MaildirInit(reg_mdir);
        edg_wll_MaildirInit(dump_mdir);
-       edg_wll_MaildirInit(sandbox_mdir);
+       if (store && *store) {
+               if (mkdir(store, 0750) != 0 && errno != EEXIST) {
+                       fprintf(stderr, "Can't create directory %s: %s\n", store, strerror(errno));
+                       store = NULL;
+               }
+       }
 
        if ( !debug ) {
                if ( daemon(1,0) == -1 ) { perror("deamon()"); exit(1); }
@@ -265,10 +267,6 @@ int main(int argc, char *argv[])
                perror("starting dump importer slave");
                exit(1);
        }
-       if ( (sandbox_pid = slave(sandbox_importer, "sandbox-imp")) < 0 ) {
-               perror("starting sandbox importer slave");
-               exit(1);
-       }
 
        while ( !die ) {
 
@@ -299,17 +297,7 @@ int main(int argc, char *argv[])
                                                        exit(1);
                                                }
                                                dprintf(("[master] dump importer slave restarted [%d]\n", dump_pid));
-                                       } else if ( pid == sandbox_pid ) {
-                                               dprintf(("[master] sandbox importer slave died [%d]\n", pid));
-                                               if (!debug) syslog(LOG_INFO, "sandbox importer slave died [%d]\n", die);
-                                               if ( (sandbox_pid = slave(sandbox_importer, "sandbox-imp")) < 0 ) {
-                                                       perror("starting sandbox importer slave");
-                                                       kill(0, SIGINT);
-                                                       exit(1);
-                                               }
-                                               dprintf(("[master] sandbox importer slave restarted [%d]\n", sandbox_pid));
                                        }
-
                                }
                        }
                        child_died = 0;
@@ -330,9 +318,9 @@ int main(int argc, char *argv[])
 static int slave(int (*fn)(void), const char *nm)
 {
        struct sigaction        sa;
-       sigset_t                sset;
-       int                     pid,
-                               conn_cnt = 0;
+       sigset_t                        sset;
+       int                                     pid,
+                                               conn_cnt = 0;
 
 
        if ( (pid = fork()) ) return pid;
@@ -424,7 +412,9 @@ static int dump_importer(void)
        static int              readnew = 1;
        char               *msg = NULL,
                                   *fname = NULL,
-                                  *aux;
+                                  *aux,
+                                  *bname;
+       char                        fspec[PATH_MAX];
        int                             ret;
        int                             fhnd;
        msg_pattern_t   tab[] = {
@@ -440,13 +430,13 @@ static int dump_importer(void)
 
 
        if ( readnew ) ret = edg_wll_MaildirTransStart(dump_mdir, &msg, &fname);
-       else ret = edg_wll_MaildirRetryTransStart(dump_mdir, (time_t)60, &msg, &fname);
+       else ret = edg_wll_MaildirRetryTransStart(dump_mdir, (time_t)60, (time_t)600, &msg, &fname);
        if ( !ret ) { 
-               readnew = ~readnew;
+               readnew = !readnew;
                if ( readnew ) ret = edg_wll_MaildirTransStart(dump_mdir, &msg, &fname);
-               else ret = edg_wll_MaildirRetryTransStart(dump_mdir, (time_t)60, &msg, &fname);
+               else ret = edg_wll_MaildirRetryTransStart(dump_mdir, (time_t)60, (time_t)600, &msg, &fname);
                if ( !ret ) {
-                       readnew = ~readnew;
+                       readnew = !readnew;
                        return 0;
                }
        }
@@ -474,10 +464,13 @@ static int dump_importer(void)
                dprintf(("[%s] Importing LB dump file '%s'\n", name, tab[_file].val));
                if ( !debug ) syslog(LOG_INFO, "Importing LB dump file '%s'\n", msg);
                ret = soap_call___jpsrv__StartUpload(soap, tab[_jpps].val?:jpps, "", &su_in, &su_out);
-               ret = check_soap_fault(soap, ret);
-               /* XXX: grrrrrrr! test it!!!*/
-//             if ( (ret = check_soap_fault(soap, ret)) ) break;
+               if ( (ret = check_soap_fault(soap, ret)) ) break;
                dprintf(("[%s] Destination: %s\n\tCommit before: %s\n", name, su_out.destination, ctime(&su_out.commitBefore)));
+               if (su_out.destination == NULL) {
+                       dprintf(("[%s] StartUpload returned NULL destination\n", name));
+                       if ( !debug ) syslog(LOG_ERR, "StartUpload returned NULL destination");
+                       break;
+               }
 
                if ( (fhnd = open(tab[_file].val, O_RDONLY)) < 0 ) {
                        dprintf(("[%s] Can't open dump file: %s\n", name, tab[_file].val));
@@ -492,101 +485,23 @@ static int dump_importer(void)
                ret = soap_call___jpsrv__CommitUpload(soap, tab[_jpps].val?:jpps, "", &cu_in, &empty);
                if ( (ret = check_soap_fault(soap, ret)) ) break;
                dprintf(("[%s] Dump upload succesfull\n", name));
-       } while (0);
-
-       edg_wll_MaildirTransEnd(dump_mdir, fname, ret? LBMD_TRANS_FAILED_RETRY: LBMD_TRANS_OK);
-       free(fname);
-       free(msg);
-
-       return 1;
-}
-
-
-
-static int sandbox_importer(void)
-{
-       struct _jpelem__StartUpload             su_in;
-       struct _jpelem__StartUploadResponse     su_out;
-       struct _jpelem__CommitUpload            cu_in;
-       struct _jpelem__CommitUploadResponse    empty;
-       static int      readnew = 1;
-       char            *msg = NULL,
-                       *fname = NULL,
-                       *aux;
-       int             ret;
-       int             fhnd;
-       msg_pattern_t   tab[] = {
-                               {"jobid", NULL},
-                               {"file", NULL},
-                               {"jpps", NULL},
-                               {"proxy", NULL},
-                               {NULL, NULL}};
-
-#define                        _job   0
-#define                        _file  1
-#define                        _jpps  2
-#define                        _proxy 3
-
-
-       if ( readnew ) ret = edg_wll_MaildirTransStart(sandbox_mdir, &msg, &fname);
-       else ret = edg_wll_MaildirRetryTransStart(sandbox_mdir, (time_t)60, &msg, &fname);
-       if ( !ret ) { 
-               readnew = ~readnew;
-               if ( readnew ) ret = edg_wll_MaildirTransStart(sandbox_mdir, &msg, &fname);
-               else ret = edg_wll_MaildirRetryTransStart(sandbox_mdir, (time_t)60, &msg, &fname);
-               if ( !ret ) {
-                       readnew = ~readnew;
-                       return 0;
-               }
-       }
-
-       if ( ret < 0 ) {
-               dprintf(("[%s] edg_wll_MaildirTransStart: %s (%s)\n", name, strerror(errno), lbm_errdesc));
-               if ( !debug ) syslog(LOG_ERR, "edg_wll_MaildirTransStart: %s (%s)", strerror(errno), lbm_errdesc);
-               return -1;
-       }
-
-       dprintf(("[%s] sandbox JP import request received\n", name));
-       if ( !debug ) syslog(LOG_INFO, "sandbox JP import request received");
-
-       ret = 0;
-       if ( parse_msg(msg, tab) < 0 ) {
-               dprintf(("[%s] Wrong format of message!\n", name));
-               if ( !debug ) syslog(LOG_ERR, "Wrong format of message");
-               ret = 0;
-       } else do {
-               su_in.job = tab[_job].val;
-               // XXX: defined in org.glite.jp.primary/src/builtin_plugins.h
-               // shloud use symbolic const...
-               // do not distinquish between ibs and obs now 
-               su_in.class_ = "urn:org.glite.jp.primary:isb";
-               su_in.name = NULL;
-               su_in.commitBefore = 1000 + time(NULL);
-               su_in.contentType = "tar/lb";
-               dprintf(("[%s] Importing LB sandbox tar file '%s'\n", name, tab[_file].val));
-               if ( !debug ) syslog(LOG_INFO, "Importing LB sandbox tar file '%s'\n", msg);
-               ret = soap_call___jpsrv__StartUpload(soap, tab[_jpps].val?:jpps, "", &su_in, &su_out);
-               ret = check_soap_fault(soap, ret);
-               /* XXX: grrrrrrr! test it!!!*/
-//             if ( (ret = check_soap_fault(soap, ret)) ) break;
-               dprintf(("[%s] Destination: %s\n\tCommit before: %s\n", name, su_out.destination, ctime(&su_out.commitBefore)));
-
-               if ( (fhnd = open(tab[_file].val, O_RDONLY)) < 0 ) {
-                       dprintf(("[%s] Can't open sandbox tar file: %s\n", name, tab[_file].val));
-                       if ( !debug ) syslog(LOG_ERR, "Can't open sandbox tar file: %s", tab[_file].val);
-                       ret = 1;
-                       break;
+               if (store && *store) {
+                       bname = strdup(tab[_file].val);
+                       snprintf(fspec, sizeof fspec, "%s/%s", store, basename(bname));
+                       free(bname);
+                       if (rename(tab[_file].val, fspec) != 0) 
+                               fprintf(stderr, "moving %s to %s failed: %s\n", tab[_file].val, fspec, strerror(errno));
+                       else
+                               dprintf(("[%s] moving %s to %s OK\n", name, tab[_file].val, fspec));
+               } else {
+                       if (unlink(tab[_file].val) != 0)
+                               fprintf(stderr, "removing %s failed: %s\n", tab[_file].val, strerror(errno));
+                       else
+                               dprintf(("[%s] %s removed\n", name, tab[_file].val));
                }
-               if ( (ret = gftp_put_file(su_out.destination, fhnd)) ) break;
-               close(fhnd);
-               dprintf(("[%s] File sent, commiting the upload\n", name));
-               cu_in.destination = su_out.destination;
-               ret = soap_call___jpsrv__CommitUpload(soap, tab[_jpps].val?:jpps, "", &cu_in, &empty);
-               if ( (ret = check_soap_fault(soap, ret)) ) break;
-               dprintf(("[%s] Dump upload succesfull\n", name));
        } while (0);
 
-       edg_wll_MaildirTransEnd(sandbox_mdir, fname, ret? LBMD_TRANS_FAILED_RETRY: LBMD_TRANS_OK);
+       edg_wll_MaildirTransEnd(dump_mdir, fname, ret? LBMD_TRANS_FAILED_RETRY: LBMD_TRANS_OK);
        free(fname);
        free(msg);
 
@@ -594,7 +509,6 @@ static int sandbox_importer(void)
 }
 
 
-
 static int check_soap_fault(struct soap *soap, int err)
 {
        struct SOAP_ENV__Detail            *detail;
@@ -764,6 +678,7 @@ static int gftp_put_file(const char *url, int fhnd)
        globus_cond_init(&gCond, GLOBUS_NULL);
 
        gDone = GLOBUS_FALSE;
+       gError = GLOBUS_FALSE;
 
        /* do the op */
        if ( globus_ftp_client_put(
index d53c792..fafeb82 100644 (file)
@@ -3,6 +3,7 @@
 
 /** Namespace of JP system attributes */
 #define GLITE_JP_SYSTEM_NS     "http://egee.cesnet.cz/en/Schema/JP/System"
+#define GLITE_JP_WORKFLOW_NS   "http://egee.cesnet.cz/en/Schema/JP/Workflow"
 
 /** Job owner, as specified with RegisterJob JPPS operation */
 #define GLITE_JP_ATTR_OWNER    GLITE_JP_SYSTEM_NS ":owner" 
  * Should be almost the same time as registration with LB. */
 #define GLITE_JP_ATTR_REGTIME  GLITE_JP_SYSTEM_NS ":regtime" 
 
+/** Workflow node relationships. */
+#define GLITE_JP_ATTR_WF_ANCESTOR GLITE_JP_WORKFLOW_NS ":ancestor"
+#define GLITE_JP_ATTR_WF_SUCCESSOR GLITE_JP_WORKFLOW_NS ":successor"
+
 /** Attributes derived from LB system data
  * \see jp_job_attrs.h */
 
index e86d4c9..e4208c1 100644 (file)
@@ -22,6 +22,7 @@ typedef struct _glite_jp_context {
        void    *dbhandle;
        char    **trusted_peers;
        char    *myURL;
+       int     noauth;
 } *glite_jp_context_t;
 
 typedef enum {
index 87a7776..0886580 100644 (file)
@@ -22,7 +22,7 @@ CC=gcc
 -include Makefile.inc
 
 
-VPATH=${top_srcdir}/src:${top_srcdir}/examples:${top_srcdir}/examples/query-tests:${top_srcdir}/tests:${top_srcdir}/test:${top_srcdir}/project:${top_srcdir}/doc:${jpproject}:${stagedir}/interface
+VPATH=${top_srcdir}/src:${top_srcdir}/examples:${top_srcdir}/project:${top_srcdir}/doc:${jpproject}:${stagedir}/interface
 
 GLOBUS_LIBS:=-L${globus_prefix}/lib \
        -lglobus_common_${nothrflavour} \
@@ -60,11 +60,11 @@ ps_prefix:=jpps_
 
 SRCS:= conf.c bones_server.c soap_ops.c soap_ps_calls.c \
        ws_ps_typeref.c ws_is_typeref.c db_ops.c context.c common_server.c \
-       ${is_prefix}Server.c ${is_prefix}C.c\
-       ${ps_prefix}ClientLib.c
+       ${is_prefix}ServerLib.c \
+       ${ps_prefix}ClientLib.c ${ps_prefix}C.c
 
-EXA_TEST_SRCS:=jpis-test.c ${is_prefix}C.c ${is_prefix}Client.c context.c db_ops.c conf.c ws_is_typeref.c
-EXA_DB_SRCS:=jpis-db-internal.c db_ops.c conf.c context.c ws_is_typeref.c
+EXA_TEST_SRCS:=jpis-test.c ${is_prefix}C.c ${is_prefix}Client.c context.c db_ops.c conf.c
+EXA_DB_SRCS:=jpis-db-internal.c db_ops.c conf.c context.c
 EXA_CLIENT_SRCS:=jpis-client.c common.c \
        ${is_client_prefix}C.c ${is_client_prefix}Client.c
 #                ${is_prefix}C.c
@@ -97,7 +97,9 @@ glite-jpis-client: ${EXA_CLIENT_OBJS}
        ${LINK} -o $@ $+ ${GSOAPLIB}
 
 copy_tests: ${test} ${test_files}
-       -for i in $?; do cp $$i  ${top_srcdir}/build; done
+
+${test} ${test_files}:
+       for i in $@; do cp ${top_srcdir}/examples/query-tests/$$i  ${top_srcdir}/build; done
 
 JobProvenanceIS.xh: JobProvenanceIS.wsdl JobProvenanceTypes.wsdl typemap.dat
        cp  ${stagedir}/interface/JobProvenanceTypes.wsdl .
@@ -170,7 +172,6 @@ install:
        ${INSTALL} -m 755 ${examples} ${PREFIX}/examples
        ${INSTALL} -m 755 ${top_srcdir}/config/startup ${PREFIX}/etc/init.d/glite-jp-indexd
        ${INSTALL} -m 755 ${top_srcdir}/config/glite-jp-index-dbsetup.sql ${PREFIX}/etc
-       ${INSTALL} -m 755 ${top_srcdir}/config/glite-jpis-config.xml ${PREFIX}/etc
        ${INSTALL} -m 644 ${top_srcdir}/doc/README ${HTMLS} ${PREFIX}/share/doc/${package}-${version}
        ${INSTALL} -m 644 ${MANS1} ${PREFIX}/share/man/man1
        ${INSTALL} -m 644 ${MANS8} ${PREFIX}/share/man/man8
@@ -199,7 +200,6 @@ ws_ps_typeref.o: ws_ps_typeref.c jpis_H.h ws_typemap.h ws_ps_typeref.h
 ws_is_typeref.o: ws_is_typeref.c jpis_H.h ws_typemap.h ws_is_typeref.h
 comon_server.o: common_server.c common_server.h
 jpis-client.o: jpis-client.c ${is_client_prefix}H.h soap_version.h
-conf.o: conf.c ${is_prefix}H.h soap_version.h
 
 %.1: %.sgml
        docbook2man $<
diff --git a/org.glite.jp.index/config/glite-jpis-config.xml b/org.glite.jp.index/config/glite-jpis-config.xml
deleted file mode 100644 (file)
index 176a470..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<jpelem:ServerConfiguration 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:jptype="http://glite.org/wsdl/types/jp" xmlns:jpsrv="http://glite.org/wsdl/services/jp" xmlns:jpelem="http://glite.org/wsdl/elements/jp">
-       
-       <!-- List of attributes IS want to receive from PS's -->
-       <attrs>http://egee.cesnet.cz/en/Schema/JP/System:owner</attrs>
-       <attrs>http://egee.cesnet.cz/en/Schema/JP/System:jobId</attrs>
-       <attrs>http://egee.cesnet.cz/en/Schema/JP/System:regtime</attrs>
-       <attrs>http://egee.cesnet.cz/en/Schema/LB/Attributes:user</attrs>
-       <attrs>http://egee.cesnet.cz/en/Schema/LB/Attributes:aTag</attrs>
-       <attrs>http://egee.cesnet.cz/en/Schema/LB/Attributes:eNodes</attrs>
-       <attrs>http://egee.cesnet.cz/en/Schema/LB/Attributes:RB</attrs>
-       <attrs>http://egee.cesnet.cz/en/Schema/LB/Attributes:CE</attrs>
-       <attrs>http://egee.cesnet.cz/en/Schema/LB/Attributes:UIHost</attrs>
-       <attrs>http://egee.cesnet.cz/en/Schema/LB/Attributes:CPUTime</attrs>
-       <attrs>http://egee.cesnet.cz/en/Schema/LB/Attributes:NProc</attrs>
-       <attrs>http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatus</attrs>
-       <attrs>http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatusDate</attrs>
-       <attrs>http://egee.cesnet.cz/en/Schema/LB/Attributes:retryCount</attrs>
-       <attrs>http://egee.cesnet.cz/en/Schema/LB/Attributes:jobType</attrs>
-       <attrs>http://egee.cesnet.cz/en/Schema/LB/Attributes:nsubjobs</attrs>
-       <attrs>http://egee.cesnet.cz/en/Schema/LB/Attributes:lastStatusHistory</attrs>
-       <attrs>http://egee.cesnet.cz/en/Schema/LB/Attributes:fullStatusHistory</attrs>
-
-
-       <!-- List of attributes IS will index -->
-       <indexedAttrs>http://egee.cesnet.cz/en/Schema/JP/System:owner</indexedAttrs>
-       <indexedAttrs>http://egee.cesnet.cz/en/Schema/JP/System:jobId</indexedAttrs>
-       <indexedAttrs>http://egee.cesnet.cz/en/Schema/LB/Attributes:user</indexedAttrs>
-       <indexedAttrs>http://egee.cesnet.cz/en/Schema/LB/Attributes:CE</indexedAttrs>
-
-       <!-- List of type plugins -->
-       <plugins></plugins>
-
-       <!-- List of feeds IS wants to receive from PS's-->
-       <feeds>
-               <primaryServer>https://localhost:8901</primaryServer>
-               <!-- List of conditions triggering attrs sending -->
-               <condition>
-                       <attr>http://egee.cesnet.cz/en/Schema/JP/System:owner</attr>
-                       <op>EQUAL</op>
-                       <value>
-                               <string>/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac</string>
-                       </value>
-               </condition>
-               <history>1</history>
-               <continuous>1</continuous>
-       </feeds>
-</jpelem:ServerConfiguration>
index b0a2783..ef926dd 100644 (file)
@@ -47,7 +47,7 @@ int main(int argc,char *argv[])
                
 
                glite_jp_init_context(&ctx);
-               glite_jp_get_conf(0, NULL, NULL, &conf);
+               glite_jp_get_conf(argc, argv, NULL, &conf);
                if (default_server) strcpy(server, default_server);
                else snprintf(server, sizeof(server), "http://localhost:%s", conf->port ? conf->port : GLITE_JPIS_DEFAULT_PORT_STR);
                printf("JP index server: %s\n", server);
diff --git a/org.glite.jp.index/examples/pch06/pch.pm b/org.glite.jp.index/examples/pch06/pch.pm
new file mode 100644 (file)
index 0000000..e8bf688
--- /dev/null
@@ -0,0 +1,219 @@
+#
+# Job Provenance queries wrapper (Primary and Index queries)
+#
+# $debug - trace calls
+# $err - error status from last query
+#
+
+package pch;
+
+use strict;
+use warnings;
+use XML::Twig;
+use Data::Dumper;
+
+our $lbattr='http://egee.cesnet.cz/en/Schema/LB/Attributes';
+our $jpsys='http://egee.cesnet.cz/en/Schema/JP/System';
+our $jpwf='http://egee.cesnet.cz/en/Schema/JP/Workflow';
+our $jplbtag='http://egee.cesnet.cz/en/WSDL/jp-lbtag';
+
+our @view_attributes=("$pch::jplbtag:IPAW_STAGE", "$pch::jplbtag:IPAW_PROGRAM", "$pch::jplbtag:IPAW_PARAM", "$pch::jplbtag:IPAW_INPUT", "$pch::jplbtag:IPAW_OUTPUT", "$pch::lbattr:CE", "$pch::lbattr:parent", "$pch::lbattr:host", "$pch::jpsys:regtime");
+
+
+our $debug = 0;
+our $err = 0;
+
+my $jpis_client_program = "./glite-jpis-client";
+my $jpps_client_program = "./glite-jp-primary-test";
+my @default_is_attributes = (
+       "http://egee.cesnet.cz/en/Schema/JP/System:owner",
+       "http://egee.cesnet.cz/en/Schema/JP/System:jobId",
+       "http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatus",
+       "http://egee.cesnet.cz/en/Schema/LB/Attributes:user",
+       "http://egee.cesnet.cz/en/WSDL/jp-lbtag:IPAW_PROGRAM",
+       "http://egee.cesnet.cz/en/Schema/JP/Workflow:ancestor"
+);
+my @isquery = (
+'<?xml version="1.0" encoding="UTF-8"?>
+<jpisclient:QueryJobs 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:jptype="http://glite.org/wsdl/types/jp" xmlns:jpsrv="http://glite.org/wsdl/services/jp" xmlns:jpelem="http://glite.org/wsdl/elements/jp" xmlns:jpisclient="http://glite.org/xsd/types/jpisclient">
+',
+'</jpisclient:QueryJobs>
+'
+);
+
+
+my @jobs;
+
+
+#
+# query to Job Provenance Index Server
+#
+sub isquery {
+       my ($server, $queries, $attributes) = @_;
+       my ($s, @jobs);
+       my $args = '';
+       my @attributes;
+       my $fh;
+
+       $err = 0;
+       if ($attributes) { @attributes = @$attributes; }
+       else { @attributes = @default_is_attributes; }
+
+       $s = $isquery[0];
+       foreach my $query (@$queries) {
+               my @query = @$query;
+               my $i = 1;
+               $s .= "<conditions>\n";
+               $s .= "\t<attr>$query[0]</attr>\n";
+               while ($i <= $#query) {
+                       my @record = @{$query[$i]};
+                       $s .= "\t<record>\n";
+                       $s .= "\t\t<op>$record[0]</op>\n";
+                       $s .= "\t\t<value>$record[1]</value>\n";
+                       $s .= "\t\t<value2>$record[2]</value2>\n" if ($record[2]);
+                       $s .= "\t</record>\n";
+                       $i++;
+               }
+               $s .= "</conditions>\n";
+       }
+
+       foreach my $attribute (@attributes) {
+               $s .= "<attributes>$attribute</attributes>\n";
+       }
+       $s .= $isquery[1];
+
+       $args .= "-i $server " if ($server);
+       $args .= '-q -';
+
+       if ($debug) {
+               print STDERR "calling 'echo '$s' | $jpis_client_program $args |'\n";
+       }
+       if (!open($fh, "echo '$s' | $jpis_client_program $args |")) {
+               print STDERR "Can't execute '$jpis_client_program $args'\n";
+               $err = 1;
+               return ();
+       }
+       @jobs = parse_is($fh);
+#      print STDERR <$fh>; print STDERR "\n";
+       close $fh;
+       if ($?) {
+               print STDERR "Error returned from $jpis_client_program $args\n";
+               $err = 1;
+               return ();
+       }
+
+       return @jobs;
+}
+
+
+sub parse_is {
+       my ($fh) = @_;
+       my $twig;
+
+       @jobs = ();
+       
+       $twig = new XML::Twig(TwigHandlers => { jobs => \&jobs_handler });
+       if (!$twig->safe_parse($fh)) { $err = 1; return (); }
+       else { return @jobs; }
+}
+
+
+sub jobs_handler {
+       my($twig, $xmljobs)= @_;
+       my (%attributes, $xmljobid, $xmlattribute, %job);
+       %attributes = ();
+
+       $xmljobid = $xmljobs->first_child('jobid');
+       die "No jobid on '".$xmljobs->text."'" if (!$xmljobid);
+       $job{jobid} = $xmljobid->text;
+
+       $xmlattribute = $xmljobs->first_child('attributes');
+       while ($xmlattribute) {
+               my ($xmlname, $xmlvalue);
+               my @values = ();
+               my %attribute = ();
+
+               $xmlname = $xmlattribute->first_child('name');
+               die "No name on '".$xmlattribute->text."'" if (!$xmlname);
+#print $xmljobid->text.": ".$xmlname->text.":\n";
+               if (exists $attributes{$xmlname->text}) {
+                       %attribute = %{$attributes{$xmlname->text}};
+               }
+#print "  prev attr: ".Dumper(%attribute)."\n";
+               if (exists $attribute{value}) {
+                       @values = @{$attribute{value}};
+               }
+#print "  prev values: ".Dumper(@values)."\n";
+               $xmlvalue = $xmlattribute->first_child('value');
+               while ($xmlvalue) {
+#print "  to add: ".$xmlvalue->text."\n";
+                       push @values, $xmlvalue->text;
+                       $xmlvalue = $xmlvalue->next_sibling('value');
+               }
+               @{$attribute{value}} = @values;
+#print "  new values: ".Dumper($attribute{value})."\n";
+               $attribute{timestamp} = $xmlattribute->first_child('timestamp')->text;
+               $xmlattribute = $xmlattribute->next_sibling('attributes');
+
+               $attributes{$xmlname->text} = \%attribute;
+       }
+       $job{attributes} = \%attributes;
+
+       push @jobs, \%job;
+}
+
+#
+# query to Job Provenance Primary Storage
+# ==> array of string
+#
+sub psquery {
+       my ($server, $jobid, $attribute) = @_;
+       my $args = '';
+       my @attrs = ();
+       my $fh;
+
+       $err = 0;
+       $args .= "-s $server " if ($server);
+       $args .= "GetJobAttr $jobid $attribute";
+       if ($debug) {
+               print STDERR "calling '$jpps_client_program $args |'\n";
+       }
+       if (!open($fh, "$jpps_client_program $args |")) {
+               print STDERR "Can't execute '$jpps_client_program $args'\n";
+               $err = 1;
+               return ();
+       }
+       @attrs = parse_ps($fh);
+       close $fh;
+       if ($?) {
+               print STDERR "Error returned from $jpps_client_program $args\n";
+               $err = 1;
+               return ();
+       }
+
+       return @attrs;
+}
+
+
+sub parse_ps {
+       my ($fh) = @_;
+       my @attrs = ();
+       my $attr;
+
+       while (<$fh>) {
+               chomp;
+               next if (!$_);
+               next if (/^OK$/);
+               next if (/^Attribute values:$/);
+#              print STDERR "$_\n";
+               $attr = $_;
+               $attr =~ s/\t*//;
+               $attr =~ s/\t.*//;
+               push @attrs, $attr;
+       }
+
+       return @attrs;
+}
+
+
+1;
diff --git a/org.glite.jp.index/examples/pch06/query1.pl b/org.glite.jp.index/examples/pch06/query1.pl
new file mode 100644 (file)
index 0000000..9b155b1
--- /dev/null
@@ -0,0 +1,116 @@
+#! /usr/bin/perl
+
+#
+# 1. query:
+# 
+# Find the process that led to Atlas X Graphic / everything that caused Atlas X
+# Graphic to be as it is. This should tell us the new brain images from which
+# the averaged atlas was generated, the warping performed etc.
+#
+# call:
+#   ./query1.pl OUTPUT_FILE_NAME 2>/dev/null
+#
+
+use strict;
+use pch;
+use Data::Dumper;
+
+my $ps='https://skurut1.cesnet.cz:8901';
+my $is='https://skurut1.cesnet.cz:8902';
+
+my @according_jobs = (); # sequencially jobid list
+my %according_jobs = (); # hash jobid list
+my $according_count = 0;
+my $output;
+
+
+if ($#ARGV + 1 != 1) {
+       print STDERR "Usage: $0 OUTPUT_FILE\n";
+       exit 1
+}
+$output = $ARGV[0];
+
+# debug calls
+$pch::debug = 0;
+my $debug = 0;
+
+#
+# find out processes with given output
+#
+my @jobs = pch::isquery($is, [
+       ["$pch::jplbtag:IPAW_OUTPUT", ['EQUAL', "<string>$output</string>"]],
+], ["$pch::jpsys:jobId", "$pch::jpwf:ancestor"]);
+print Dumper(@jobs) if ($debug);
+die "...so exit on error" if ($pch::err);
+
+#
+# initial set from index server
+#
+foreach my $job (@jobs) {
+       my %job = %$job;
+       my %attributes = %{$job{attributes}};
+
+       if (!exists $according_jobs{$job{jobid}}) {
+               push @according_jobs, $job{jobid};
+               $according_jobs{$job{jobid}} = 1;
+       }
+}
+undef @jobs;
+
+
+#
+# collect all jobids (tree browsing)
+#
+# better implementation will be: using children attribute on LB:parent
+#
+$according_count = 0;
+foreach my $jobid (@according_jobs) {
+       my @attrs;
+
+       print "Handling $jobid (position $according_count)\n" if ($debug);
+       @attrs = pch::psquery($ps, $jobid, "$pch::jpwf:ancestor");
+
+       for my $anc_jobid (@attrs) {
+               print "Considered: $anc_jobid\n" if ($debug);
+               if (!exists $according_jobs{$anc_jobid}) {
+                       $according_jobs{$anc_jobid} = 1;
+                       push @according_jobs, $anc_jobid;
+                       print "Added $anc_jobid to $#according_jobs\n" if ($debug);
+               }
+               else {
+                       print "Already existing $anc_jobid\n" if ($debug);
+               }
+       }
+       $according_count++;
+}
+
+foreach my $jobid (@according_jobs) {
+       my @attrs2 = pch::psquery($ps, $jobid, "$pch::jplbtag:IPAW_STAGE");
+       $according_jobs{$jobid} = $attrs2[0];
+}
+
+#
+# queries on result set
+#
+print "Results\n";
+print "=======\n";
+print "\n";
+foreach my $jobid (sort { $according_jobs{$b} <=> $according_jobs{$a} } keys %according_jobs) {
+       print "jobid $jobid:\n";
+
+       # query & output all desired atributes
+       foreach my $attr (@pch::view_attributes) {
+               my @attrs;
+               my $attr_name = $attr; $attr_name =~ s/.*://;
+
+               @attrs = pch::psquery($ps, $jobid, $attr);
+               print "  attr $attr_name: "; 
+               if ($attr eq "$pch::jpsys:regtime") {
+                       print gmtime(@attrs[0])." (".join(", ", @attrs).")\n";
+               } else {
+                       print join(", ", @attrs)."\n";
+               }
+       }
+
+       print "\n";
+}
diff --git a/org.glite.jp.index/examples/pch06/query2.pl b/org.glite.jp.index/examples/pch06/query2.pl
new file mode 100644 (file)
index 0000000..e189b59
--- /dev/null
@@ -0,0 +1,125 @@
+#! /usr/bin/perl
+
+#
+# 2. query:
+#
+# Find the process that led to Atlas X Graphic, excluding everything prior to
+# the averaging of images with softmean.
+#
+# call:
+#   ./query2.pl OUTPUT_FILE_NAME 2>/dev/null
+#
+
+use strict;
+use pch;
+use Data::Dumper;
+
+my $ps='https://skurut1.cesnet.cz:8901';
+my $is='https://skurut1.cesnet.cz:8902';
+my $program_name = "softmean";
+
+my @according_jobs = (); # sequencially jobid list
+my %according_jobs = (); # hash jobid list
+my $according_count = 0;
+my $output;
+
+
+if ($#ARGV + 1 != 1) {
+       print STDERR "Usage: $0 OUTPUT_FILE\n";
+       exit 1
+}
+$output = $ARGV[0];
+
+# debug calls
+$pch::debug = 0;
+my $debug = 0;
+
+#
+# find out processes with given output
+#
+my @jobs = pch::isquery($is, [
+       ["$pch::jplbtag:IPAW_OUTPUT", ['EQUAL', "<string>$output</string>"]],
+], ["$pch::jpsys:jobId", "$pch::jpwf:ancestor"]);
+print Dumper(@jobs) if ($debug);
+die "...so exit on error" if ($pch::err);
+
+#
+# initial set from index server
+#
+foreach my $job (@jobs) {
+       my %job = %$job;
+       my %attributes = %{$job{attributes}};
+
+       if (!exists $according_jobs{$job{jobid}}) {
+               push @according_jobs, $job{jobid};
+               $according_jobs{$job{jobid}} = 1;
+       }
+}
+undef @jobs;
+
+
+#
+# collect all jobids (tree browsing), stop on softmean program
+#
+# note, the browsing tree is really needed here since we explore the workflow
+#
+$according_count = 0;
+foreach my $jobid (@according_jobs) {
+       my (@attrs, @program);
+
+       print "Handling $jobid (position $according_count)\n" if ($debug);
+
+       # stop on given program name
+       @program = pch::psquery($ps, $jobid, "$pch::jplbtag:IPAW_PROGRAM");
+       die "More program names of $jobid?" if ($#program > 0);
+       if ($program[0] eq $program_name) { 
+               print "$jobid is $program_name, stop here\n" if $debug;
+               next;
+       }
+
+       # else browse up
+       @attrs = pch::psquery($ps, $jobid, "$pch::jpwf:ancestor");
+       for my $anc_jobid (@attrs) {
+               print "Considered: $anc_jobid\n" if ($debug);
+               if (!exists $according_jobs{$anc_jobid}) {
+                       $according_jobs{$anc_jobid} = 1;
+                       push @according_jobs, $anc_jobid;
+                       print "Added $anc_jobid to $#according_jobs\n" if ($debug);
+               }
+               else {
+                       print "Already existing $anc_jobid\n" if ($debug);
+               }
+       }
+       $according_count++;
+}
+
+foreach my $jobid (@according_jobs) {
+       my @attrs2 = pch::psquery($ps, $jobid, "$pch::jplbtag:IPAW_STAGE");
+       $according_jobs{$jobid} = $attrs2[0];
+}
+
+#
+# queries on result set
+#
+print "Results\n";
+print "=======\n";
+print "\n";
+foreach my $jobid (sort { $according_jobs{$b} <=> $according_jobs{$a} } keys %according_jobs) {
+       print "jobid $jobid:\n";
+
+       # query & output all desired atributes
+       foreach my $attr (@pch::view_attributes) {
+               my @attrs;
+               my $attr_name = $attr; $attr_name =~ s/.*://;
+
+               @attrs = pch::psquery($ps, $jobid, $attr);
+               print "  attr $attr_name: ";
+               if ($attr eq "$pch::jpsys:regtime") {
+                       print gmtime(@attrs[0])." (".join(", ", @attrs).")\n";
+               } else {
+                       print join(", ", @attrs)."\n";
+               }
+       }
+
+       print "\n";
+}
diff --git a/org.glite.jp.index/examples/pch06/query3.pl b/org.glite.jp.index/examples/pch06/query3.pl
new file mode 100644 (file)
index 0000000..7182679
--- /dev/null
@@ -0,0 +1,123 @@
+#! /usr/bin/perl
+
+#
+# 3. query:
+# 
+# Find the Stage 3, 4 and 5 details of the process that led to Atlas X Graphic.
+#
+# call:
+#   ./query3.pl OUTPUT_FILE_NAME 2>/dev/null
+#
+
+use strict;
+use pch;
+use Data::Dumper;
+
+my $ps='https://skurut1.cesnet.cz:8901';
+my $is='https://skurut1.cesnet.cz:8902';
+my @attributes = ("$pch::jpsys:jobId", "$pch::jpwf:ancestor", @pch::view_attributes);
+
+my @according_jobs = (); # sequencially jobid list
+my %according_jobs = (); # hash jobid list
+my $according_count = 0;
+my $output;
+
+
+if ($#ARGV + 1 != 1) {
+       print STDERR "Usage: $0 OUTPUT_FILE\n";
+       exit 1
+}
+$output = $ARGV[0];
+
+# debug calls
+$pch::debug = 0;
+my $debug = 0;
+
+#
+# find out processes with given output
+#
+my @jobs = pch::isquery($is, [
+       ["$pch::jplbtag:IPAW_OUTPUT", ['EQUAL', "<string>$output</string>"]],
+], \@attributes);
+die "...so exit on error" if ($pch::err);
+print Dumper(@jobs) if ($debug);
+
+#
+# initial set from index server
+#
+foreach my $job (@jobs) {
+       my %job = %$job;
+       my %attributes = %{$job{attributes}};
+
+       if (!exists $according_jobs{$job{jobid}}) {
+               push @according_jobs, $job{jobid};
+               $according_jobs{$job{jobid}} = \%job;
+       }
+}
+undef @jobs;
+
+
+#
+# collect all jobs (tree browsing)
+#
+$according_count = 0;
+foreach my $jobid (@according_jobs) {
+       my @ancs;
+
+       print "Handling $jobid (position $according_count)\n" if ($debug);
+       @ancs = pch::isquery($is, [["$pch::jpwf:successor", ['EQUAL', "<string>$jobid</string>"]]], \@attributes);
+       die "...so exit on error" if ($pch::err);
+
+       for my $anc (@ancs) {
+               my %anc = %$anc;
+               print "Considered: $anc{jobid}\n" if ($debug);
+               if (!exists $according_jobs{$anc{jobid}}) {
+                       $according_jobs{$anc{jobid}} = \%anc;
+                       push @according_jobs, $anc{jobid};
+                       print "Added $anc{jobid} to $#according_jobs\n" if ($debug);
+               }
+               else {
+                       print "Already existing $anc{jobid}\n" if ($debug);
+               }
+       }
+       $according_count++;
+}
+
+
+#
+# queries on result set
+#
+print "Results\n";
+print "=======\n";
+print "\n";
+foreach my $jobid (sort { $according_jobs{$b}{attributes}{"$pch::jplbtag:IPAW_STAGE"}{value}[0] <=> $according_jobs{$a}{attributes}{"$pch::jplbtag:IPAW_STAGE"}{value}[0] } keys %according_jobs) {
+       my %job = %{$according_jobs{$jobid}};
+       my %attributes = %{$job{attributes}};
+       my $stage = $attributes{"$pch::jplbtag:IPAW_STAGE"}{value}[0];
+
+       if ( $stage == 3 || $stage == 4 || $stage == 5) {
+               print "jobid $jobid:\n";
+
+               # query & output all desired atributes
+               foreach my $attr (@pch::view_attributes) {
+                       my $attr_name = $attr; $attr_name =~ s/.*://;
+
+                       print "  attr $attr_name: ";
+                       if (exists $attributes{$attr}) {
+                               my %attr = %{$attributes{$attr}};
+
+                               if ($attr eq "$pch::jpsys:regtime") {
+                                       print gmtime($attr{value}[0])." (".join(", ", @{$attr{value}}).")\n";
+                               } else {
+                                       print join(", ", @{$attr{value}})."\n";
+                               }
+                       } else {
+                               print "N/A\n";
+                       }
+               }
+
+               print "\n";
+       } else {
+               print "(ignored $jobid with stage $stage)\n" if $debug;
+       }
+}
diff --git a/org.glite.jp.index/examples/pch06/query4.pl b/org.glite.jp.index/examples/pch06/query4.pl
new file mode 100644 (file)
index 0000000..467c2fd
--- /dev/null
@@ -0,0 +1,104 @@
+#! /usr/bin/perl
+
+#
+# 4. query:
+# 
+# Find all invocations of procedure align_warp using a twelfth order nonlinear
+# 1365 parameter model (see model menu describing possible values of parameter
+# "-m 12" of align_warp) that ran on a Monday.
+#
+# call:
+#   ./query4.pl 2>/dev/null
+#
+
+use strict;
+use pch;
+use Data::Dumper;
+
+my $ps='https://skurut1.cesnet.cz:8901';
+my $is='https://skurut1.cesnet.cz:8902';
+my $program_name='align_warp';
+my $program_params='-m 12';
+my $runday=1;
+#my $runday=4;
+my @attributes = ("$pch::jpsys:jobId", @pch::view_attributes);
+
+my %according_jobs = (); # hash jobid list
+my $according_count = 0;
+
+
+# debug calls
+$pch::debug = 0;
+my $debug = 0;
+
+#
+# find out processes with given name ant parameters
+#
+my @jobs = pch::isquery($is, [
+       ["$pch::jplbtag:IPAW_PROGRAM", ['EQUAL', "<string>$program_name</string>"]],
+       ["$pch::jplbtag:IPAW_PARAM", ['EQUAL', "<string>$program_params</string>"]],
+], \@attributes);
+print Dumper(@jobs) if ($debug);
+die "...so exit on error" if ($pch::err);
+
+
+#
+# check found all jobs
+#
+$according_count = 0;
+foreach my $job (@jobs) {
+       my %job = %$job;
+       my @time;
+
+       print "Handling $job{jobid} ($according_count.)\n" if ($debug);
+
+       @time =@{ $job{attributes}{"$pch::jpsys:regtime"}{value}};
+       my @timesep = gmtime($time[0]);
+       if ($timesep[6] == $runday) {
+               if (!exists $according_jobs{$job{jobid}}) {
+                       $according_jobs{$job{jobid}} = \%job;
+                       print "Added $job{jobid}\n" if $debug;
+               } else {
+                       print "Already existing $job{jobid}\n" if $debug;
+               }
+       } else {
+               print "Job $job{jobid} ran at day $timesep[6] (0=Sun, ...): ".gmtime($time[0])."\n" if $debug;
+       }
+
+       $according_count++;
+}
+undef @jobs;
+
+
+#
+# print the result set
+#
+print "Results\n";
+print "=======\n";
+print "\n";
+foreach my $jobid (sort { $according_jobs{$b}{attributes}{"$pch::jplbtag:IPAW_STAGE"}{value}[0] <=> $according_jobs{$a}{attributes}{"$pch::jplbtag:IPAW_STAGE"}{value}[0] } keys %according_jobs) {
+       my %job = %{$according_jobs{$jobid}};
+       my %attributes = %{$job{attributes}};
+
+       print "jobid $jobid:\n";
+
+       # output all desired atributes
+       foreach my $attr (@pch::view_attributes) {
+               my $attr_name = $attr; $attr_name =~ s/.*://;
+
+               print "  attr $attr_name: ";
+               if (exists $attributes{$attr}) {
+                       my %attr = %{$attributes{$attr}};
+
+                       if ($attr eq "$pch::jpsys:regtime") {
+                               print gmtime($attr{value}[0])." (".join(", ", @{$attr{value}}).")\n";
+                       } else {
+                               print join(", ", @{$attr{value}})."\n";
+                       }
+               } else {
+                       print "N/A\n";
+               }
+       }
+
+       print "\n";
+}
diff --git a/org.glite.jp.index/examples/pch06/query5.pl b/org.glite.jp.index/examples/pch06/query5.pl
new file mode 100644 (file)
index 0000000..c9f05b7
--- /dev/null
@@ -0,0 +1,134 @@
+#! /usr/bin/perl
+
+#
+# 5. query:
+# 
+# Find all Atlas Graphic images outputted from workflows where at least one of
+# the input Anatomy Headers had an entry global maximum=4095. The contents of
+# a header file can be extracted as text using the scanheader AIR utility.
+#
+# call:
+#   ./query5.pl 2>/dev/null
+#
+
+use strict;
+use pch;
+use Data::Dumper;
+
+my $ps='https://skurut1.cesnet.cz:8901';
+my $is='https://skurut1.cesnet.cz:8902';
+my $program_name='align_warp';
+my $end_program_name='convert';
+my $header="GLOBAL_MAXIMUM=4095"; # test for exact equal (scripts already prepared it)
+
+my @according_jobs = (); # sequencially jobid list
+my %according_jobs = (); # hash jobid list
+my $according_count = 0;
+
+
+# debug calls
+$pch::debug = 0;
+my $debug = 0;
+
+#
+# find out processes with given name and parameters
+#
+my @jobs = pch::isquery($is, [
+       ["$pch::jplbtag:IPAW_PROGRAM", ['EQUAL', "<string>$program_name</string>"]],
+       ["$pch::jplbtag:IPAW_HEADER", ['EQUAL', "<string>$header</string>"]],
+], \@pch::view_attributes);
+print Dumper(@jobs) if ($debug);
+die "...so exit on error" if ($pch::err);
+
+#
+# initial set of DAGs from index server
+#
+foreach my $job (@jobs) {
+       my %job = %$job;
+       my %attributes = %{$job{attributes}};
+       my $dagjobid = $attributes{"$pch::lbattr:parent"}{value}[0];
+
+       print "Consider DAG $dagjobid\n" if $debug;
+       if (!exists $according_jobs{$dagjobid}) {
+               %job = ();
+               push @according_jobs, $dagjobid;
+               # query to primary storage when searching by jobid
+               $job{jobid} = $dagjobid;
+               foreach my $attr (@pch::view_attributes) {
+                       my @value;
+
+                       @value = pch::psquery($ps, $dagjobid, $attr);
+                       if (defined @value) { @{$job{attributes}{$attr}{value}} = @value; }
+               }
+               $according_jobs{$dagjobid} = \%job;
+               print "Added DAG $dagjobid\n" if $debug;
+       }
+}
+undef @jobs;
+
+
+#
+# collect all jobs (tree browsing down)
+#
+$according_count = 0;
+foreach my $jobid (@according_jobs) {
+       my @succs;
+
+       print "Handling $jobid (position $according_count)\n" if ($debug);
+
+       if ($according_jobs{$jobid}{attributes}{"$pch::IPAW_PROGRAM"}{value}[0] eq $end_program_name) {
+               print "It's $end_program_name\n" if $debug;
+               next;
+       }
+
+       @succs = pch::isquery($is, [["$pch::jpwf:ancestor", ['EQUAL', "<string>$jobid</string>"]]], \@pch::view_attributes);
+       die "...so exit on error" if ($pch::err);
+
+       for my $succ (@succs) {
+               my %succ = %$succ;
+               print "Considered: $succ{jobid}\n" if ($debug);
+               if (!exists $according_jobs{$succ{jobid}}) {
+                       $according_jobs{$succ{jobid}} = \%succ;
+                       push @according_jobs, $succ{jobid};
+                       print "Added $succ{jobid} to $#according_jobs\n" if ($debug);
+               }
+               else {
+                       print "Already existing $succ{jobid}\n" if ($debug);
+               }
+       }
+       $according_count++;
+}
+
+
+#
+# print the result set
+#
+print "Results\n";
+print "=======\n";
+print "\n";
+foreach my $jobid (sort { $according_jobs{$b}{attributes}{"$pch::jplbtag:IPAW_STAGE"}{value}[0] <=> $according_jobs{$a}{attributes}{"$pch::jplbtag:IPAW_STAGE"}{value}[0] } keys %according_jobs) {
+       my %job = %{$according_jobs{$jobid}};
+       my %attributes = %{$job{attributes}};
+
+       print "jobid $jobid:\n";
+
+       # output all desired atributes
+       foreach my $attr (@pch::view_attributes) {
+               my $attr_name = $attr; $attr_name =~ s/.*://;
+
+               print "  attr $attr_name: ";
+               if (exists $attributes{$attr}) {
+                       my %attr = %{$attributes{$attr}};
+
+                       if ($attr eq "$pch::jpsys:regtime") {
+                               print gmtime($attr{value}[0])." (".join(", ", @{$attr{value}}).")\n";
+                       } else {
+                               print join(", ", @{$attr{value}})."\n";
+                       }
+               } else {
+                       print "N/A\n";
+               }
+       }
+
+       print "\n";
+}
diff --git a/org.glite.jp.index/examples/pch06/query6.pl b/org.glite.jp.index/examples/pch06/query6.pl
new file mode 100644 (file)
index 0000000..21521e8
--- /dev/null
@@ -0,0 +1,133 @@
+#! /usr/bin/perl
+
+#
+# 6. query:
+#
+# Find all output averaged images of softmean (average) procedures, where the
+# warped images taken as input were align_warped using a twelfth order
+# nonlinear 1365 parameter model, i.e. "where softmean was preceded in the
+# workflow, directly or indirectly, by an align_warp procedure with argument
+# -m 12. 
+#
+# call:
+#   ./query6.pl 2>/dev/null
+#
+
+use strict;
+use pch;
+use Data::Dumper;
+
+my $ps='https://skurut1.cesnet.cz:8901';
+my $is='https://skurut1.cesnet.cz:8902';
+my $program_name='align_warp';
+my $program_param='-m 12';
+my $end_program_name='softmean';
+
+#my %jobs = ();          # just information cache
+my @workflow_jobs = (); # sequencially jobid list
+my %workflow_jobs = (); # hash jobid list
+my @according_jobs = (); # sequencially jobid list
+my %according_jobs = (); # hash jobid list
+my $workflow_count = 0;
+
+
+# debug calls
+$pch::debug = 0;
+my $debug = 0;
+
+#
+# find out processes with given name and parameters
+#
+my @jobs = pch::isquery($is, [
+       ["$pch::jplbtag:IPAW_PROGRAM", ['EQUAL', "<string>$program_name</string>"]],
+       ["$pch::jplbtag:IPAW_PARAM", ['EQUAL', "<string>$program_param</string>"]],
+], ["$pch::jpwf:successor", @pch::view_attributes]);
+print Dumper(@jobs) if ($debug);
+die "...so exit on error" if ($pch::err);
+
+#
+# initial set of starting jobs from index server
+# (root jobs)
+#
+foreach my $job (@jobs) {
+       my %job = %$job;
+       my %attributes = %{$job{attributes}};
+       my $jobid = $job{jobid};
+
+       if (!exists $workflow_jobs{$jobid}) {
+               push @workflow_jobs, $jobid;
+               $workflow_jobs{$jobid} = \%job;
+       }
+}
+undef @jobs;
+
+
+#
+# collect all jobs (tree browsing down)
+#
+$workflow_count = 0;
+foreach my $jobid (@workflow_jobs) {
+       my @succs;
+
+       print "Handling $jobid (position $workflow_count)\n" if ($debug);
+       print "  progname: ".$workflow_jobs{$jobid}{attributes}{"$pch::jplbtag:IPAW_PROGRAM"}{value}[0]."\n" if ($debug);
+
+       if ($workflow_jobs{$jobid}{attributes}{"$pch::jplbtag:IPAW_PROGRAM"}{value}[0] eq $end_program_name) {
+               print "It's $end_program_name, adding\n" if $debug;
+               $according_jobs{$jobid} = \%{$workflow_jobs{$jobid}};
+               next;
+       }
+
+       @succs = pch::isquery($is, [["$pch::jpwf:ancestor", ['EQUAL', "<string>$jobid</string>"]]], \@pch::view_attributes);
+       die "...so exit on error" if ($pch::err);
+
+       for my $succ (@succs) {
+               my %succ = %$succ;
+               print "Considered: $succ{jobid}\n" if ($debug);
+               if (!exists $workflow_jobs{$succ{jobid}}) {
+                       $workflow_jobs{$succ{jobid}} = \%succ;
+                       push @workflow_jobs, $succ{jobid};
+                       print "Added $succ{jobid} to $#workflow_jobs\n" if ($debug);
+               }
+               else {
+                       print "Already existing $succ{jobid}\n" if ($debug);
+               }
+       }
+       $workflow_count++;
+}
+undef @workflow_jobs;
+undef %workflow_jobs;
+
+
+#
+# print the result set
+#
+print "Results\n";
+print "=======\n";
+print "\n";
+foreach my $jobid (sort { $according_jobs{$b}{attributes}{"$pch::jplbtag:IPAW_STAGE"}{value}[0] <=> $according_jobs{$a}{attributes}{"$pch::jplbtag:IPAW_STAGE"}{value}[0] } keys %according_jobs) {
+       my %job = %{$according_jobs{$jobid}};
+       my %attributes = %{$job{attributes}};
+
+       print "jobid $jobid:\n";
+
+       # output all desired atributes
+       foreach my $attr (@pch::view_attributes) {
+               my $attr_name = $attr; $attr_name =~ s/.*://;
+
+               print "  attr $attr_name: ";
+               if (exists $attributes{$attr}) {
+                       my %attr = %{$attributes{$attr}};
+
+                       if ($attr eq "$pch::jpsys:regtime") {
+                               print gmtime($attr{value}[0])." (".join(", ", @{$attr{value}}).")\n";
+                       } else {
+                               print join(", ", @{$attr{value}})."\n";
+                       }
+               } else {
+                       print "N/A\n";
+               }
+       }
+
+       print "\n";
+}
index 18e2d30..21458e0 100644 (file)
@@ -10,5 +10,4 @@ Attributes:
        http://egee.cesnet.cz/en/Schema/LB/Attributes:user
 
 OK
-Result 0 jobs:
 <?xml version="1.0" encoding="UTF-8"?><jpisclient:QueryJobsResponse 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:jptype="http://glite.org/wsdl/types/jp" xmlns:jpsrv="http://glite.org/wsdl/services/jp" xmlns:jpelem="http://glite.org/wsdl/elements/jp" xmlns:jpisclient="http://glite.org/xsd/types/jpisclient"></jpisclient:QueryJobsResponse>
\ No newline at end of file
index 65e14e9..bc11975 100644 (file)
@@ -13,23 +13,4 @@ Attributes:
        http://egee.cesnet.cz/en/Schema/LB/Attributes:user
 
 OK
-Result 2 jobs:
-       jobid = https://localhost:7846/pokus1, owner = (null)
-               http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatus
-                       value = Done
-                       origin = 0, (null)
-                       time = Thu Jan  1 01:00:00 1970
-               http://egee.cesnet.cz/en/Schema/LB/Attributes:user
-                       value = CertSubj
-                       origin = 0, (null)
-                       time = Thu Jan  1 01:00:00 1970
-       jobid = https://localhost:7846/pokus2, owner = (null)
-               http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatus
-                       value = Ready
-                       origin = 0, (null)
-                       time = Thu Jan  1 01:00:00 1970
-               http://egee.cesnet.cz/en/Schema/LB/Attributes:user
-                       value = CertSubj
-                       origin = 0, (null)
-                       time = Thu Jan  1 01:00:00 1970
-<?xml version="1.0" encoding="UTF-8"?><jpisclient:QueryJobsResponse 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:jptype="http://glite.org/wsdl/types/jp" xmlns:jpsrv="http://glite.org/wsdl/services/jp" xmlns:jpelem="http://glite.org/wsdl/elements/jp" xmlns:jpisclient="http://glite.org/xsd/types/jpisclient"><jobs><jobid>https://localhost:7846/pokus1</jobid><attributes><name>http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatus</name><value><string>Done</string></value><timestamp>1970-01-01T00:00:00Z</timestamp><origin>SYSTEM</origin></attributes><attributes><name>http://egee.cesnet.cz/en/Schema/LB/Attributes:user</name><value><string>CertSubj</string></value><timestamp>1970-01-01T00:00:00Z</timestamp><origin>SYSTEM</origin></attributes><primaryStorage>http://localhost:8901</primaryStorage></jobs><jobs><jobid>https://localhost:7846/pokus2</jobid><attributes><name>http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatus</name><value><string>Ready</string></value><timestamp>1970-01-01T00:00:00Z</timestamp><origin>SYSTEM</origin></attributes><attributes><name>http://egee.cesnet.cz/en/Schema/LB/Attributes:user</name><value><string>CertSubj</string></value><timestamp>1970-01-01T00:00:00Z</timestamp><origin>SYSTEM</origin></attributes><primaryStorage>http://localhost:8901</primaryStorage></jobs></jpisclient:QueryJobsResponse>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><jpisclient:QueryJobsResponse 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:jptype="http://glite.org/wsdl/types/jp" xmlns:jpsrv="http://glite.org/wsdl/services/jp" xmlns:jpelem="http://glite.org/wsdl/elements/jp" xmlns:jpisclient="http://glite.org/xsd/types/jpisclient"><jobs><jobid>https://localhost:7846/pokus1</jobid><owner>/O=CESNET/O=Masaryk University/CN=Milos Mulac</owner><attributes><name>http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatus</name><value><string>Done</string></value><timestamp>1969-12-31T23:00:00Z</timestamp><origin>SYSTEM</origin></attributes><attributes><name>http://egee.cesnet.cz/en/Schema/LB/Attributes:user</name><value><string>CertSubj</string></value><timestamp>1969-12-31T23:00:00Z</timestamp><origin>SYSTEM</origin></attributes><primaryStorage>http://localhost:8901</primaryStorage></jobs><jobs><jobid>https://localhost:7846/pokus2</jobid><owner>OwnerName</owner><attributes><name>http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatus</name><value><string>Ready</string></value><timestamp>1969-12-31T23:00:00Z</timestamp><origin>SYSTEM</origin></attributes><attributes><name>http://egee.cesnet.cz/en/Schema/LB/Attributes:user</name><value><string>CertSubj</string></value><timestamp>1969-12-31T23:00:00Z</timestamp><origin>SYSTEM</origin></attributes><primaryStorage>http://localhost:8901</primaryStorage></jobs></jpisclient:QueryJobsResponse>
\ No newline at end of file
index e8fda6d..2e27c08 100755 (executable)
@@ -59,7 +59,7 @@ init() {
 
        # handle the configuration
        ARGS="-u ${GLITE_JPIS_TEST_ROOT_USER:-root}"
-       [ -z "$GLITE_JPIS_TEST_ROOT_PASSWORD" ] || ARGS="-${GLITE_JPIS_TEST_ROOT_PASSWORD} $ARGS"
+       [ -z "$GLITE_JPIS_TEST_ROOT_PASSWORD" ] || ARGS="--password=${GLITE_JPIS_TEST_ROOT_PASSWORD} $ARGS"
        GLITE_JPIS_TEST_PORT=${GLITE_JPIS_TEST_PORT:-"10000"}
        GLITE_JPIS_TEST_PIDFILE=${GLITE_JPIS_TEST_PIDFILE:-"/tmp/glite-jp-indexd.pid"}
        GLITE_JPIS_TEST_LOGFILE=${GLITE_JPIS_TEST_LOGFILE:-"/tmp/glite-jp-indexd.log"}
@@ -80,7 +80,7 @@ create_db() {
        if [ "x$need_new_db" = "x1" ]; then
                mysqladmin -f $ARGS drop $DB_NAME > /dev/null 2>&1
                mysqladmin -f $ARGS create $DB_NAME && \
-               mysql $ARGS -e 'GRANT ALL on $DB_NAME.* to jpis@localhost' && \
+               mysql $ARGS -e "GRANT ALL on $DB_NAME.* to jpis@localhost" && \
                mysql -u $DB_USER $DB_NAME < $GLITE_LOCATION/etc/glite-jp-index-dbsetup.sql || exit 1
                db_created="1"
        fi
@@ -142,7 +142,7 @@ kill_is() {
 
 run_test_query() {
        X509_USER_KEY=${X509_USER_KEY} X509_USER_CERT=${X509_USER_CERT} \
-       $GLITE_LOCATION/examples/glite-jpis-client -q $1 \
+       $GLITE_LOCATION/examples/glite-jpis-client -f xml -q $1 \
                 -i http://localhost:$GLITE_JPIS_TEST_PORT &>/tmp/result
        DIFF=`diff --ignore-matching-lines="query: using JPIS" $2 /tmp/result`
        if [ -z "$DIFF" -a "$?" -eq "0" ] ; then
@@ -151,11 +151,17 @@ run_test_query() {
        else
                echo "FAILED!"
                echo
-               echo "Expected result:"
+               echo "Expected result (using query $1):"
+               echo ------------------------------------------------------------------------------
                cat $2
+               echo
+               echo ---------------------------------------------------------------------------------------------------
+               echo
                echo "Obtained result (in /tmp/result):"
+               echo ---------------------------------
                cat /tmp/result
                echo
+               echo ---------------------------------------------------------------------------------------------------
                drop_db;
                kill_is;
                exit 1
@@ -165,9 +171,7 @@ run_test_query() {
 run_test_feed() {
        # run the example
        numok=`X509_USER_KEY=${X509_USER_KEY} X509_USER_CERT=${X509_USER_CERT}\
-               GLITE_JPIS_DB=$GLITE_JPIS_TEST_DB \
-               GLITE_JPIS_PORT=$GLITE_JPIS_TEST_PORT \
-               $GLITE_LOCATION/examples/glite-jpis-test 2>/dev/null| grep "OK" | wc -l`
+               $GLITE_LOCATION/examples/glite-jpis-test -p $GLITE_JPIS_TEST_PORT -m $GLITE_JPIS_TEST_DB `
        if [ "$numok" -eq "2" ]; then
                echo OK.
        else
@@ -187,16 +191,16 @@ echo
 echo -n "Simple query test.... "
 create_db;
 run_is "-n";
-import_db $GLITE_LOCATION/examples/dump1.sql;
-run_test_query $GLITE_LOCATION/examples/simple_query.in $GLITE_LOCATION/examples/simple_query.out;
+import_db $GLITE_LOCATION/examples/query-tests/dump1.sql;
+run_test_query $GLITE_LOCATION/examples/query-tests/simple_query.in $GLITE_LOCATION/examples/query-tests/simple_query.out;
 drop_db;
 kill_is;
 
 echo -n "Complex query test... "
 create_db;
 run_is "-n";
-import_db $GLITE_LOCATION/examples/dump1.sql;
-run_test_query $GLITE_LOCATION/examples/complex_query.in $GLITE_LOCATION/examples/complex_query.out;
+import_db $GLITE_LOCATION/examples/query-tests/dump1.sql;
+run_test_query $GLITE_LOCATION/examples/query-tests/complex_query.in $GLITE_LOCATION/examples/query-tests/complex_query.out;
 drop_db;
 kill_is;
 
@@ -210,8 +214,8 @@ kill_is;
 echo -n "Authz test........... "
 create_db;
 run_is;
-import_db $GLITE_LOCATION/examples/dump1.sql;
-run_test_query $GLITE_LOCATION/examples/simple_query.in $GLITE_LOCATION/examples/authz.out;
+import_db $GLITE_LOCATION/examples/query-tests/dump1.sql;
+run_test_query $GLITE_LOCATION/examples/query-tests/simple_query.in $GLITE_LOCATION/examples/query-tests/authz.out;
 drop_db;
 kill_is;
 
index f63adf2..c3edb73 100644 (file)
@@ -10,14 +10,4 @@ Attributes:
        http://egee.cesnet.cz/en/Schema/LB/Attributes:user
 
 OK
-Result 1 jobs:
-       jobid = https://localhost:7846/pokus2, owner = (null)
-               http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatus
-                       value = Ready
-                       origin = 0, (null)
-                       time = Thu Jan  1 01:00:00 1970
-               http://egee.cesnet.cz/en/Schema/LB/Attributes:user
-                       value = CertSubj
-                       origin = 0, (null)
-                       time = Thu Jan  1 01:00:00 1970
-<?xml version="1.0" encoding="UTF-8"?><jpisclient:QueryJobsResponse 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:jptype="http://glite.org/wsdl/types/jp" xmlns:jpsrv="http://glite.org/wsdl/services/jp" xmlns:jpelem="http://glite.org/wsdl/elements/jp" xmlns:jpisclient="http://glite.org/xsd/types/jpisclient"><jobs><jobid>https://localhost:7846/pokus2</jobid><attributes><name>http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatus</name><value><string>Ready</string></value><timestamp>1970-01-01T00:00:00Z</timestamp><origin>SYSTEM</origin></attributes><attributes><name>http://egee.cesnet.cz/en/Schema/LB/Attributes:user</name><value><string>CertSubj</string></value><timestamp>1970-01-01T00:00:00Z</timestamp><origin>SYSTEM</origin></attributes><primaryStorage>http://localhost:8901</primaryStorage></jobs></jpisclient:QueryJobsResponse>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><jpisclient:QueryJobsResponse 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:jptype="http://glite.org/wsdl/types/jp" xmlns:jpsrv="http://glite.org/wsdl/services/jp" xmlns:jpelem="http://glite.org/wsdl/elements/jp" xmlns:jpisclient="http://glite.org/xsd/types/jpisclient"><jobs><jobid>https://localhost:7846/pokus2</jobid><owner>OwnerName</owner><attributes><name>http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatus</name><value><string>Ready</string></value><timestamp>1969-12-31T23:00:00Z</timestamp><origin>SYSTEM</origin></attributes><attributes><name>http://egee.cesnet.cz/en/Schema/LB/Attributes:user</name><value><string>CertSubj</string></value><timestamp>1969-12-31T23:00:00Z</timestamp><origin>SYSTEM</origin></attributes><primaryStorage>http://localhost:8901</primaryStorage></jobs></jpisclient:QueryJobsResponse>
\ No newline at end of file
index 71cdf6f..e5ae981 100644 (file)
@@ -77,15 +77,16 @@ int main(int argc, char *argv[])
        int                     one = 1,i;
        edg_wll_GssStatus       gss_code;
        struct sockaddr_in      a;
+       char                    *config_file;
        glite_jpis_context_t    isctx;
 
 
        glite_jp_init_context(&ctx);
 
-       if (glite_jp_get_conf(argc, argv, NULL, &conf)) {
-               glite_jp_free_context(ctx);
-               exit(1);
-       }
+       /* Read config options/file */
+       // XXX: need add something meaningfull to src/conf.c !
+       config_file = NULL;
+       glite_jp_get_conf(argc, argv, config_file, &conf);
        glite_jpis_init_context(&isctx, ctx, conf);
 
        /* connect to DB */
@@ -184,6 +185,7 @@ int main(int argc, char *argv[])
        /* for dbg - one slave OK */ glite_srvbones_set_param(GLITE_SBPARAM_SLAVES_COUNT,1);
        glite_srvbones_run(data_init,&stab,1 /* XXX: entries in stab */,debug);
 
+
        glite_jpis_free_db(isctx);
        glite_jp_free_conf(conf);
        glite_jpis_free_context(isctx);
@@ -365,7 +367,7 @@ int request(int conn,struct timeval *to,void *data)
        }
 
        glite_jp_run_deferred(ctx);
-       return ENOTCONN;
+       return 0;
 }
 
 static int reject(int conn)
index a815293..63052b4 100644 (file)
@@ -40,12 +40,12 @@ int glite_jpis_daemonize(const char *servername, const char *custom_pidfile, con
        if (!custom_pidfile) {
                asprintf(&pidfile, "%s/%s.pid", geteuid() == 0 ? "/var/run" : getenv("HOME"), servername);
        } else {
-               pidfile = strdup(custom_pidfile);
+               pidfile = NULL;
        }
 //     printf("pidfile: %s\n", pidfile ? pidfile : custom_pidfile);
        setpgrp(); /* needs for signalling */
        master = getpid();
-       fpid = fopen(pidfile,"r");
+       fpid = fopen(pidfile ? pidfile : custom_pidfile,"r");
        if ( fpid )
        {
                opid = -1;
@@ -60,16 +60,13 @@ int glite_jpis_daemonize(const char *servername, const char *custom_pidfile, con
                        else if (errno != ESRCH) { perror("kill()"); return 0; }
                }
                fclose(fpid);
-       } else if (errno != ENOENT) { perror(pidfile); free(pidfile); return 0; }
-
-       if (((fpid = fopen(pidfile, "w")) == NULL) || 
-           (fprintf(fpid, "%d", getpid()) <= 0) ||
-           (fclose(fpid) != 0)) { 
-               perror(pidfile); 
-               free(pidfile); 
-               return 0;
-       }
+       } else if (errno != ENOENT) { perror(pidfile ? pidfile : custom_pidfile); free(pidfile); return 0; }
 
+       fpid = fopen(pidfile ? pidfile : custom_pidfile, "w");
+       if (!fpid) { perror(pidfile ? pidfile : custom_pidfile); free(pidfile); return 0; }
        free(pidfile);
+       fprintf(fpid, "%d", getpid());
+       fclose(fpid);
+
        return 1;
 }
index 27ee84a..2c58c2c 100644 (file)
 #include <glite/jp/context.h>
 #include "conf.h"
 #include "db_ops.h"
-#include "ws_is_typeref.h"
 
-#include <stdsoap2.h>
-#include "soap_version.h"
-#include "jpis_H.h"
 
-extern SOAP_NMAC struct Namespace jpis__namespaces[];
-
-static const char *get_opt_string = "dq:c:k:C:V:nm:p:i:o:x:";
+static const char *get_opt_string = "s:dq:c:k:C:V:nm:p:i:o:";
 
 static struct option opts[] = {
+       {"is-server",   1, NULL,        's'},
        {"debug",       0, NULL,        'd'},
        {"query-type",  1, NULL,        'q'},
        {"cert",        1, NULL,        'c'},
@@ -36,16 +31,15 @@ static struct option opts[] = {
        {"port",        1, NULL,        'p'},
        {"pidfile",     1, NULL,        'i'},
        {"logfile",     1, NULL,        'o'},
-       {"config",      1, NULL,        'x'},
        {NULL,          0, NULL,        0}
 };
 
-static int read_conf(glite_jp_is_conf *conf, char *conf_file);
-static int dump_conf(void);
+
 
 static void usage(char *me) 
 {
        fprintf(stderr,"usage: %s [option]\n"
+               "\t-s, --ps-server\t primary storage server address (http://hostname:port)\n"
                "\t-d, --debug\t don't run as daemon, additional diagnostics\n"
                "\t-q, --query-type hist/cont/both (default history)\n"
                "\t-k, --key\t private key file\n" 
@@ -57,7 +51,6 @@ static void usage(char *me)
                "\t-p, --port\t port to listen\n"
                "\t-i, --pidfile\t file to store master pid\n"
                "\t-o, --logfile\t file to store logs\n"
-               "\t-x, --config\t file with server configuration\n"
                "\n"
        ,me);
 }
@@ -65,7 +58,7 @@ static void usage(char *me)
 
 int glite_jp_get_conf(int argc, char **argv, char *config_file, glite_jp_is_conf **configuration)
 {
-       char                    *ps = NULL, *qt = NULL, *conf_file = NULL;
+       char                    *env, *ps = NULL, *qt = NULL;;
        int                     opt;
        glite_jp_is_conf        *conf;
 
@@ -74,6 +67,7 @@ int glite_jp_get_conf(int argc, char **argv, char *config_file, glite_jp_is_conf
 
 
        while ((opt = getopt_long(argc,argv,get_opt_string,opts,NULL)) != EOF) switch (opt) {
+               case 's': ps = optarg; break;
                case 'd': conf->debug = 1; break;
                case 'q': qt = optarg; break;
                case 'c': conf->server_cert = optarg; break;
@@ -85,10 +79,12 @@ int glite_jp_get_conf(int argc, char **argv, char *config_file, glite_jp_is_conf
                case 'p': conf->port = optarg; break;
                case 'i': conf->pidfile = optarg; break;
                case 'o': conf->logfile = optarg; break;
-               case 'x': conf_file = optarg; break;
                default : usage(argv[0]); exit(0); break;
        }
 
+       if (!ps) {
+                       fprintf(stderr,"No JP PrimaryStrorage server specified, default feeds skipped. (not fatal)\n");
+       }
        if (!conf->cs) {
                        fprintf(stderr,"DB contact string not specified! "\
                         "Using build-in default:  %s \n", GLITE_JP_IS_DEFAULTCS);
@@ -98,15 +94,95 @@ int glite_jp_get_conf(int argc, char **argv, char *config_file, glite_jp_is_conf
                        "Using build-in default:  %s \n", GLITE_JPIS_DEFAULT_PORT_STR);
        }
 
-       if (!conf_file) {
-               fprintf(stderr,"JP IS configuration file must be specified! "\
-                       "Exiting.\n");
-               return 1;
+       // prefixes & attributes defined in:
+       // lb.server/build/jp_job_attrs.h (created when build plugin)
+       // jp.common/interface/known_attr.h
+
+       conf->attrs = calloc(29, sizeof(*conf->attrs));
+       conf->attrs[0] = strdup("http://egee.cesnet.cz/en/Schema/JP/System:owner");
+       conf->attrs[1] = strdup("http://egee.cesnet.cz/en/Schema/JP/System:jobId");
+       conf->attrs[2] = strdup("http://egee.cesnet.cz/en/Schema/JP/System:regtime");
+       conf->attrs[3] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:user");
+       conf->attrs[4] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:aTag");
+       conf->attrs[5] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:eNodes");
+       conf->attrs[6] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:RB");
+       conf->attrs[7] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:CE");
+       conf->attrs[8] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:UIHost");
+       conf->attrs[9] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:CPUTime");
+       conf->attrs[10] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:NProc");
+       conf->attrs[11] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatus");
+       conf->attrs[12] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatusDate");
+       conf->attrs[13] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:retryCount");
+       conf->attrs[14] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:jobType");
+       conf->attrs[15] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:nsubjobs");
+       conf->attrs[16] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:lastStatusHistory");
+       conf->attrs[17] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:fullStatusHistory");
+       conf->attrs[18] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:parent");
+       conf->attrs[19] = strdup("http://egee.cesnet.cz/en/WSDL/jp-lbtag:IPAW_STAGE");
+       conf->attrs[20] = strdup("http://egee.cesnet.cz/en/WSDL/jp-lbtag:IPAW_PROGRAM");
+       conf->attrs[21] = strdup("http://egee.cesnet.cz/en/WSDL/jp-lbtag:IPAW_INPUT");
+       conf->attrs[22] = strdup("http://egee.cesnet.cz/en/WSDL/jp-lbtag:IPAW_OUTPUT");
+       conf->attrs[23] = strdup("http://egee.cesnet.cz/en/WSDL/jp-lbtag:IPAW_PARAM");
+       conf->attrs[24] = strdup("http://egee.cesnet.cz/en/WSDL/jp-lbtag:IPAW_HEADER");
+       conf->attrs[25] = strdup("http://egee.cesnet.cz/en/Schema/JP/Workflow:ancestor");
+       conf->attrs[26] = strdup("http://egee.cesnet.cz/en/Schema/JP/Workflow:successor");
+       conf->attrs[27] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:host");
+
+       conf->indexed_attrs = calloc(12, sizeof(*conf->indexed_attrs));
+       conf->indexed_attrs[0] = strdup("http://egee.cesnet.cz/en/Schema/JP/System:owner");
+       conf->indexed_attrs[1] = strdup("http://egee.cesnet.cz/en/Schema/JP/System:jobId");
+       conf->indexed_attrs[2] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:user");
+       conf->indexed_attrs[3] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatus");
+       conf->indexed_attrs[4] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:UIHost");
+       conf->indexed_attrs[5] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:CE");
+       conf->indexed_attrs[6] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:RB");
+       conf->indexed_attrs[7] = strdup("http://egee.cesnet.cz/en/WSDL/jp-lbtag:IPAW_PROGRAM");
+       conf->indexed_attrs[8] = strdup("http://egee.cesnet.cz/en/WSDL/jp-lbtag:IPAW_OUTPUT");
+       conf->indexed_attrs[9] = strdup("http://egee.cesnet.cz/en/Schema/JP/Workflow:successor");
+       conf->indexed_attrs[10] = strdup("http://egee.cesnet.cz/en/Schema/JP/Workflow:ancestor");
+
+       // XXX: some plugin names should come here in future
+       conf->plugins = NULL;
+
+       if (!ps) {
+               // No JP PrimaryStrorage server specified in $GLITE_JPIS_PS -> skip feeds
+               conf->feeds = calloc(1, sizeof(*(conf->feeds)));
+               *configuration = conf;
+               return 0;
+       }
+
+       /* ask for one feed */
+       conf->feeds = calloc(2, sizeof(*(conf->feeds)));
+       
+       conf->feeds[0] = calloc(1, sizeof(**(conf->feeds)));
+       conf->feeds[0]->PS_URL = strdup(ps);
+
+       // all job since Epoche
+       conf->feeds[0]->query = calloc(2,sizeof(*conf->feeds[0]->query));
+       conf->feeds[0]->query[0] = calloc(2,sizeof(**conf->feeds[0]->query));
+       conf->feeds[0]->query[0][0].attr = strdup("http://egee.cesnet.cz/en/Schema/JP/System:regtime");
+       conf->feeds[0]->query[0][0].op = GLITE_JP_QUERYOP_GREATER;
+       conf->feeds[0]->query[0][0].value = strdup("0");
+
+       if (qt && !strcmp(qt,"both")) {
+               conf->feeds[0]->history = 1;
+               conf->feeds[0]->continuous = 1;
+       }
+       else if ( qt && (!strcmp(qt,"continuous") || !strcmp(qt,"cont")) ) {
+               conf->feeds[0]->history = 0;
+               conf->feeds[0]->continuous = 1;
+       }
+       else if ( qt && (!strcmp(qt,"history") || !strcmp(qt,"hist")) ) {
+               conf->feeds[0]->history = 1;
+               conf->feeds[0]->continuous = 0;
        }
        else {
-               read_conf(conf, conf_file);
+               usage(argv[0]);
+               exit(0);
        }
 
+       conf->feeds[1] = NULL;
+
        *configuration = conf;
 
         return 0; 
@@ -149,131 +225,3 @@ void glite_jp_lprintf(const char *source, const char *fmt, ...) {
        vprintf(fmt, ap);
        va_end(ap);
 }
-
-/*
- * Reads configuration from XML conf. file
- */
-static int read_conf(glite_jp_is_conf *conf, char *conf_file)
-{
-       struct soap                                     soap;
-       struct  _jpelem__ServerConfigurationResponse    out;
-       int                                             fd, i;
-
-
-       if ((fd = open(conf_file, 0)) < 0) {
-                       fprintf(stderr, "error opening %s: %s\n", conf_file, strerror(errno));
-                return 1;
-        }
-
-       soap_init(&soap);
-       soap_set_namespaces(&soap, jpis__namespaces);
-
-       soap_begin(&soap);
-       soap.recvfd = fd;
-       soap_begin_recv(&soap);
-       memset(&out, 0, sizeof(out));
-                                       
-       if (!soap_get__jpelem__ServerConfigurationResponse(&soap, &out, "ServerConfiguration", NULL)) {
-                soap_end_recv(&soap);
-                soap_end(&soap);
-                return EINVAL;
-        }
-       soap_end_recv(&soap);
-
-       if (out.__sizeattrs) {
-               conf->attrs = calloc(out.__sizeattrs + 1, sizeof(*conf->attrs));
-               for (i=0; i < out.__sizeattrs; i++) {
-                       conf->attrs[i] = strdup(out.attrs[i]);
-               }
-       }
-       if (out.__sizeindexedAttrs) {
-               conf->indexed_attrs = calloc(out.__sizeindexedAttrs + 1, sizeof(*conf->indexed_attrs));
-               for (i=0; i < out.__sizeindexedAttrs; i++) {
-                       conf->indexed_attrs[i] = strdup(out.indexedAttrs[i]);
-               }
-       }
-       if (out.__sizeplugins) {
-               conf->plugins = calloc(out.__sizeplugins + 1, sizeof(*conf->plugins));
-               for (i=0; i < out.__sizeplugins; i++) {
-                       conf->plugins[i] = strdup(out.plugins[i]);
-               }
-       }
-       if (out.__sizefeeds) {
-               conf->feeds = calloc(out.__sizefeeds + 1, sizeof(*conf->feeds));
-               for (i=0; i < out.__sizefeeds; i++) {
-                       conf->feeds[i] = calloc(1, sizeof(*conf->feeds[i]));
-                       conf->feeds[i]->PS_URL=strdup(out.feeds[i]->primaryServer);
-
-                       if (out.feeds[i]->__sizecondition) {
-                               glite_jpis_SoapToPrimaryQueryConds(&soap, out.feeds[i]->__sizecondition,
-                                       out.feeds[i]->condition, &conf->feeds[i]->query);
-                       }
-                       
-                       conf->feeds[i]->history = out.feeds[0]->history;
-                       conf->feeds[i]->continuous = out.feeds[0]->continuous;
-               }
-       }
-
-       soap_destroy(&soap);
-       soap_end(&soap);
-       soap_done(&soap);
-
-       return 0;
-}
-
-/*
- * Just helper function - used only once for first generation
- * of XML example configuration (which was then reedited in hand)
- */
-static int dump_conf(void) {
-        int retval;
-       struct  _jpelem__ServerConfigurationResponse    out;
-       struct soap                                     soap;
-       
-
-       soap_init(&soap);
-        soap_set_namespaces(&soap, jpis__namespaces);
-
-        soap.sendfd = STDOUT_FILENO;
-        soap_begin_send(&soap);
-       soap_default__jpelem__ServerConfigurationResponse(&soap, &out);
-
-       out.__sizeattrs = 2;
-       out.attrs = calloc(2, sizeof(*out.attrs));
-       out.attrs[0] = strdup("atrr1"); 
-       out.attrs[1] = strdup("atrr2"); 
-
-       out.__sizeindexedAttrs = 2;
-       out.indexedAttrs = calloc(2, sizeof(*out.indexedAttrs));
-       out.indexedAttrs[0] = strdup("idxAtrr1"); 
-       out.indexedAttrs[1] = strdup("idxAtrr2"); 
-
-       out.__sizeplugins = 2;
-        out.plugins = calloc(2, sizeof(*out.plugins));
-        out.plugins[0] = strdup("plugin1");
-        out.plugins[1] = strdup("plugin2");
-
-       out.__sizefeeds = 1;
-        out.feeds = calloc(1, sizeof(*out.feeds));
-       out.feeds[0] = calloc(1, sizeof(*out.feeds[0]));
-        out.feeds[0]->primaryServer = strdup("PrimaryServer");
-       out.feeds[0]->__sizecondition = 1;
-       out.feeds[0]->condition = calloc(1, sizeof(*(out.feeds[0]->condition)) );
-       out.feeds[0]->condition[0] = calloc(1, sizeof(*(out.feeds[0]->condition[0])) );
-       out.feeds[0]->condition[0]->attr = strdup("queryAttr");
-       out.feeds[0]->condition[0]->op = jptype__queryOp__EQUAL;
-       out.feeds[0]->condition[0]->origin = jptype__attrOrig__SYSTEM;
-       out.feeds[0]->condition[0]->value = calloc(1, sizeof(*(out.feeds[0]->condition[0]->value)) );
-       out.feeds[0]->condition[0]->value->string = strdup("attrValue");
-       out.feeds[0]->history = 1;
-       out.feeds[0]->continuous = 0; 
-
-        soap_serialize__jpelem__ServerConfigurationResponse(&soap, &out);
-        retval = soap_put__jpelem__ServerConfigurationResponse(&soap, &out, "jpelem:ServerConfiguration", NULL);
-        soap_end_send(&soap);
-       soap_free(&soap);
-       soap_end(&soap);
-
-        return retval;
-}
-
index 28d4a42..d4ace40 100644 (file)
@@ -249,43 +249,66 @@ static int get_jobids(struct soap *soap, glite_jpis_context_t ctx, struct _jpele
        
        qwhere = strdup("");
        for (i=0; i < in->__sizeconditions; i++) {
-               attr_md5 = str2md5(in->conditions[i]->attr);
-               trio_asprintf(&qa,"%s jobs.jobid = attr_%|Ss.jobid AND (", 
-                       (i ? "AND" : ""), attr_md5);
-       
-               for (j=0; j < in->conditions[i]->__sizerecord; j++) { 
-                       if (get_op(in->conditions[i]->record[j]->op, &qop)) goto err;
-                       add_attr_table(attr_md5, &attr_tables);
+/* XXX: deal with jobIds diferently (they are not in attr_X table, but in jobs)
+               if (strcmp(in->conditions[i]->attr,GLITE_JP_ATTR_JOBID)) {
+                       trio_asprintf(&qa,"%s  (", (i ? "AND" : "") );
+
+                       for (j=0; j < in->conditions[i]->__sizerecord; j++) {
+                               if (get_op(in->conditions[i]->record[j]->op, &qop)) goto err;
 
-                       if (in->conditions[i]->record[j]->value->string) {
                                attr.name = in->conditions[i]->attr;
                                attr.value = in->conditions[i]->record[j]->value->string;
                                attr.binary = 0;
                                glite_jpis_SoapToAttrOrig(soap,
                                        in->conditions[i]->origin, &(attr.origin));
-                               trio_asprintf(&qb,"%s%sattr_%|Ss.value %s \"%|Ss\"",
+                               trio_asprintf(&qb,"%s%sjobs.dg_jobid %s \"%|Ss\"",
                                        qa, (j ? " OR " : ""), attr_md5, qop,
                                        glite_jp_attrval_to_db_index(ctx->jpctx, &attr, 255));
                                free(qop);
                                free(qa); qa = qb; qb = NULL;
+                       
+               }
+               else
+*/
+               {
+                       attr_md5 = str2md5(in->conditions[i]->attr);
+                       trio_asprintf(&qa,"%s jobs.jobid = attr_%|Ss.jobid AND (", 
+                               (i ? "AND" : ""), attr_md5);
+               
+                       for (j=0; j < in->conditions[i]->__sizerecord; j++) { 
+                               if (get_op(in->conditions[i]->record[j]->op, &qop)) goto err;
+                               add_attr_table(attr_md5, &attr_tables);
+
+                               if (in->conditions[i]->record[j]->value->string) {
+                                       attr.name = in->conditions[i]->attr;
+                                       attr.value = in->conditions[i]->record[j]->value->string;
+                                       attr.binary = 0;
+                                       glite_jpis_SoapToAttrOrig(soap,
+                                               in->conditions[i]->origin, &(attr.origin));
+                                       trio_asprintf(&qb,"%s%sattr_%|Ss.value %s \"%|Ss\"",
+                                               qa, (j ? " OR " : ""), attr_md5, qop,
+                                               glite_jp_attrval_to_db_index(ctx->jpctx, &attr, 255));
+                                       free(qop);
+                                       free(qa); qa = qb; qb = NULL;
+                               }
+                               else {
+                                       attr.name = in->conditions[i]->attr;
+                                       attr.value = in->conditions[i]->record[j]->value->blob->__ptr;
+                                       attr.binary = 1;
+                                       attr.size = in->conditions[i]->record[j]->value->blob->__size;
+                                       glite_jpis_SoapToAttrOrig(soap,
+                                               in->conditions[i]->origin, &(attr.origin));
+                                       trio_asprintf(&qb,"%s %s attr_%|Ss.value %s \"%|Ss\"",
+                                               qa, (j ? "OR" : ""), attr_md5, qop,
+                                               glite_jp_attrval_to_db_index(ctx->jpctx, &attr, 255));
+                                       free(qop);
+                                       free(qa); qa = qb; qb = NULL; 
+                               }
                        }
-                       else {
-                               attr.name = in->conditions[i]->attr;
-                               attr.value = in->conditions[i]->record[j]->value->blob->__ptr;
-                               attr.binary = 1;
-                               attr.size = in->conditions[i]->record[j]->value->blob->__size;
-                               glite_jpis_SoapToAttrOrig(soap,
-                                       in->conditions[i]->origin, &(attr.origin));
-                               trio_asprintf(&qb,"%s %s attr_%|Ss.value %s \"%|Ss\"",
-                                       qa, (j ? "OR" : ""), attr_md5, qop,
-                                       glite_jp_attrval_to_db_index(ctx->jpctx, &attr, 255));
-                               free(qop);
-                               free(qa); qa = qb; qb = NULL; 
-                       }
+                       trio_asprintf(&qb,"%s %s)", qwhere, qa);
+                       free(qa); qwhere = qb; qb = NULL; qa = NULL;
+                       free(attr_md5);
                }
-               trio_asprintf(&qb,"%s %s)", qwhere, qa);
-               free(qa); qwhere = qb; qb = NULL; qa = NULL;
-               free(attr_md5);
        }
 
        qa = strdup("");
@@ -373,6 +396,7 @@ static int get_attr(struct soap *soap, glite_jpis_context_t ctx, char *jobid, ch
        glite_jp_db_stmt_t              stmt;
 
 
+       memset(&jav,0,sizeof(jav));
        jobid_md5 = str2md5(jobid);
        attr_md5 = str2md5(attr_name);
        trio_asprintf(&query,"SELECT full_value FROM attr_%|Ss WHERE jobid = \"%s\"",
@@ -380,7 +404,10 @@ static int get_attr(struct soap *soap, glite_jpis_context_t ctx, char *jobid, ch
        free(attr_md5);
        free(jobid_md5);
 
-       if ((ret = glite_jp_db_execstmt(ctx->jpctx, query, &stmt)) < 0) goto err;
+       if ((ret = glite_jp_db_execstmt(ctx->jpctx, query, &stmt)) < 0) 
+               // unknown attribute
+               // XXX: propagate the error to client
+               goto err; 
        free(query);
 
        i = 0;
@@ -596,14 +623,3 @@ SOAP_FMAC5 int SOAP_FMAC6 __jpsrv__DeleteFeed(
         return SOAP_OK;
 }
 
-
-SOAP_FMAC5 int SOAP_FMAC6 __jpsrv__ServerConfiguration(
-        struct soap *soap,
-        struct _jpelem__ServerConfiguration *in,
-        struct _jpelem__ServerConfigurationResponse *out)
-{
-       // empty, just for deserializer generation
-        puts(__FUNCTION__);
-        return SOAP_OK;
-}
-
index c51c98c..7f2a50c 100644 (file)
@@ -80,11 +80,11 @@ static int SoapToQueryCond(
         glite_jp_query_rec_t           **out)
 {
        glite_jp_query_rec_t    *qr;    
-       int                     i;
+       int                     i;
 
 
        assert(in); assert(out);
-       qr = calloc(in->__sizerecord + 1, sizeof(*qr)); 
+       qr = calloc(in->__sizerecord, sizeof(*qr));     
 
        for (i=0; i < in->__sizerecord; i++) {
                qr[i].attr = strdup(in->attr);
@@ -116,7 +116,7 @@ static int SoapToQueryCond(
 }
 
 /**
- * Translate JP index query conditions from soap to C query_rec 
+ * Translate JP query conditions from soap to C query_rec 
  *
  * \param IN Soap structure
  * \param OUT array of glite_jp_query_rec_t query records
@@ -144,74 +144,3 @@ int glite_jpis_SoapToQueryConds(
        
        return 0;
 }
-
-
-static int SoapToPrimaryQueryCond(
-        struct soap                    *soap,
-        struct jptype__primaryQuery    *in,
-        glite_jp_query_rec_t           **out)
-{
-       glite_jp_query_rec_t    *qr;    
-
-
-       assert(in); assert(out);
-       qr = calloc(2, sizeof(*qr));    
-
-       qr[0].attr = strdup(in->attr);
-       glite_jpis_SoapToQueryOp(in->op, &(qr[0].op));
-
-       switch (qr[0].op) {
-       case GLITE_JP_QUERYOP_EXISTS:
-               break;
-
-       case GLITE_JP_QUERYOP_WITHIN:
-               SoapToQueryRecordVal(soap, in->value2, &(qr[0].binary), 
-                       &(qr[0].size2), &(qr[0].value2));
-               // fall through
-       default:
-               if ( SoapToQueryRecordVal(soap, in->value, &(qr[0].binary), 
-                               &(qr[0].size),  &(qr[0].value)) ) {
-                       *out = NULL;
-                       return 1;
-               }
-               break;
-       }
-       
-       glite_jpis_SoapToAttrOrig(soap, in->origin, &(qr[0].origin) );
-       
-       *out = qr;
-
-       return 0;
-}
-
-
-
-/**
- * Translate JP primary query conditions from soap to C query_rec 
- *
- * \param IN Soap structure
- * \param OUT array of glite_jp_query_rec_t query records
- */
-int glite_jpis_SoapToPrimaryQueryConds(
-        struct soap                    *soap,
-       int                             size,
-        struct jptype__primaryQuery    **in,
-        glite_jp_query_rec_t           ***out)
-{
-       glite_jp_query_rec_t    **qr;
-       int                     i;
-
-       assert(in); assert(out);
-        qr = calloc(size+1, sizeof(*qr));
-
-       for (i=0; i<size; i++) {
-               if ( SoapToPrimaryQueryCond(soap, in[i], &(qr[i])) ) {
-                       *out = NULL;
-                       return 1;
-               }
-       }
-
-       *out = qr;
-       
-       return 0;
-}
index b141781..880b7e4 100644 (file)
@@ -1,11 +1,8 @@
 #ifndef GLITE_JPIS_IS_TYPEREF_H
 #define GLITE_JPIS_IS_TYPEREF_H
 
-#include "jpis_H.h"
-
 void glite_jpis_SoapToQueryOp(const enum jptype__queryOp in, glite_jp_queryop_t *out);
 void glite_jpis_SoapToAttrOrig(struct soap *soap, const enum jptype__attrOrig *in, glite_jp_attr_orig_t *out);
 int glite_jpis_SoapToQueryConds(struct soap *soap, int size, struct jptype__indexQuery **in, glite_jp_query_rec_t ***out);
-int glite_jpis_SoapToPrimaryQueryConds(struct soap *soap, int size, struct jptype__primaryQuery **in, glite_jp_query_rec_t ***out);
 
 #endif
index f8b8670..a75ed3d 100644 (file)
@@ -22,7 +22,6 @@
 #define __jpsrv__AddFeed __ns1__AddFeed
 #define __jpsrv__GetFeeds __ns1__getFeedIDs
 #define __jpsrv__DeleteFeed __ns1__DeleteFeed
-#define __jpsrv__ServerConfiguration __ns1__ServerConfiguration
 
 #endif
 
index 822a0c4..5b8f29d 100644 (file)
@@ -32,7 +32,7 @@ GLOBUS_CFLAGS:=-I${globus_prefix}/include/${nothrflavour}
 
 DEBUG:=-g -O0  -DDEBUG
 
-CFLAGS:=${DEBUG} -I. -I${top_srcdir}/interface -I${top_srcdir}/src -I${gsoap_prefix}/include -I${gsoap_prefix} -I${stagedir}/include ${GLOBUS_CFLAGS} -I${mysql_prefix}/include -I${mysql_prefix}/include/mysql
+CFLAGS:=${DEBUG} -I. -I${top_srcdir}/interface -I${top_srcdir}/src -I${gsoap_prefix}/include -I${gsoap_prefix} -I${stagedir}/include ${GLOBUS_CFLAGS} -I${mysql_prefix}/include -I${mysql_prefix}/include/mysql -I${classads_prefix}/include
 LDFLAGS:=-L${stagedir}/lib
 
 LINK:=libtool --mode=link ${CC} ${LDFLAGS} 
@@ -41,8 +41,12 @@ SOLINK:=libtool --mode=link ${CC} -module ${LDFLAGS} -rpath ${stagedir}/lib
 LINKXX:=libtool --mode=link ${CXX} ${LDFLAGS} 
 INSTALL:=libtool --mode=install install
 
+ifneq (${classads_prefix},/usr)
+       classadslib := -L${classads_prefix}/lib -lclassad
+endif
+
 daemon:=glite-jp-primarystoraged
-example:=jpps-test
+example:=jpps-test dag-deps
 ps_prefix:=jpps_
 is_prefix:=jpis_
 sample_jobs:=sample_job_aborted  sample_job_cleared  sample_job_tagged_done  sample_job_waiting
@@ -50,7 +54,7 @@ sample_jobs:=sample_job_aborted  sample_job_cleared  sample_job_tagged_done  sam
 plugins:=glite-jp-tags.la glite-jp-ftpdauth.la
 
 HDRS_I=file_plugin.h
-HDRS_S=builtin_plugins.h backend.h feed.h
+HDRS_S=builtin_plugins.h backend.h
 
 SRCS:= bones_server.c soap_ops.c \
        new_ftp_backend.c mysql.c file_plugin.c \
@@ -61,12 +65,14 @@ SRCS:= bones_server.c soap_ops.c \
 #      ${ps_prefix}ServerLib.c \
 #      ${is_prefix}ClientLib.c jpps_C.c
 
-EXA_SRCS:=jpps-test.c ${ps_prefix}C.c ${ps_prefix}Client.c
+TEST_SRCS:=jpps-test.c ${ps_prefix}C.c ${ps_prefix}Client.c
+DAG_SRCS:=dag-deps.c ${ps_prefix}C.c ${ps_prefix}Client.c
 
 gsoap_bin_prefix:=${shell if [ -x  ${gsoap_prefix}/bin/soapcpp2 ]; then echo ${gsoap_prefix}/bin; else echo ${gsoap_prefix}; fi }
 
 OBJS:=${SRCS:.c=.o}
-EXA_OBJS:=${EXA_SRCS:.c=.o}
+TEST_OBJS:=${TEST_SRCS:.c=.o}
+DAG_OBJS:=${DAG_SRCS:.c=.o}
 
 dotless_soap_ver:=${shell echo ${gsoap_version} | tr -d . }
 COMMONLIB:=-lglite_jp_common
@@ -91,8 +97,12 @@ compile: ${daemon} ${example} ${plugins}
 ${daemon}: ${OBJS}
        ${LINK} -o $@ -export-dynamic ${OBJS} ${BONESLIB} ${TRIOLIB} ${COMMONLIB} ${GSOAPLIB} ${GLOBUS_LIBS} ${MYSQLIB} 
 
-${example}: ${EXA_OBJS}
-       ${LINK} -o $@ ${EXA_OBJS} ${GSOAPLIB} ${GLOBUS_LIBS}
+jpps-test: ${TEST_OBJS}
+       ${LINK} -o $@ ${TEST_OBJS} ${GSOAPLIB}
+
+dag-deps: ${DAG_OBJS}
+       ${LINKXX} -o $@ ${DAG_OBJS} ${classadslib} ${GSOAPLIB}
+
 
 JobProvenancePS.xh: %.xh: %.wsdl JobProvenanceTypes.wsdl typemap.dat
        cp  ${stagedir}/interface/JobProvenanceTypes.wsdl .
diff --git a/org.glite.jp.primary/examples/dag-deps.c b/org.glite.jp.primary/examples/dag-deps.c
new file mode 100644 (file)
index 0000000..c68c13b
--- /dev/null
@@ -0,0 +1,215 @@
+#define _GNU_SOURCE    /* strndup */
+
+#include <stdio.h>
+#include <sysexits.h>
+
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+#include <cclassad.h>
+
+#include "glite/security/glite_gsplugin.h"
+#include "glite/jp/known_attr.h"
+
+#include "jpps_H.h"
+#include "jpps_.nsmap"
+
+#include "jptype_map.h"
+
+#include "soap_version.h"
+#if GSOAP_VERSION <= 20602
+#define soap_call___jpsrv__RegisterJob soap_call___ns1__RegisterJob
+#define soap_call___jpsrv__StartUpload soap_call___ns1__StartUpload
+#define soap_call___jpsrv__CommitUpload soap_call___ns1__CommitUpload
+#define soap_call___jpsrv__RecordTag soap_call___ns1__RecordTag
+#define soap_call___jpsrv__FeedIndex soap_call___ns1__FeedIndex
+#define soap_call___jpsrv__FeedIndexRefresh soap_call___ns1__FeedIndexRefresh
+#define soap_call___jpsrv__GetJob soap_call___ns1__GetJob
+#endif
+
+
+static void usage(const char *me)
+{
+       fprintf(stderr,"%s: [-s server-url] jobid\n",me);
+
+       exit (EX_USAGE);
+}
+       
+static int check_fault(struct soap *soap,int err) {
+       struct SOAP_ENV__Detail *detail;
+       struct jptype__genericFault     *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__genericFault);
+#if GSOAP_VERSION >=20700
+                       f = ((struct _genericFault *) detail->fault)
+#else
+                       f = ((struct _genericFault *) detail->value)
+#endif
+                               -> jpelem__genericFault;
+
+                       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 const char *orig2str(enum jptype__attrOrig orig)
+{
+       switch (orig) {
+               case jptype__attrOrig__SYSTEM: return "SYSTEM";
+               case jptype__attrOrig__USER: return "USER";
+               case jptype__attrOrig__FILE_: return "FILE";
+               default: return "unknown";
+       }
+}
+
+
+int main(int argc,char *argv[])
+{
+       char    *server = NULL;
+       int     opt,ret = 0,i;
+       struct soap     *soap = soap_new();
+       struct _jpelem__GetJobAttributes        in;
+       struct _jpelem__GetJobAttributesResponse        out;
+       char    *aname = "http://egee.cesnet.cz/en/Schema/LB/Attributes:JDL";
+       struct cclassad *ad;
+       struct { char *a,*s; } *deps = calloc(1,sizeof *deps);
+       int     ndeps = 0;
+       char    *dep_s,*where,*end,*tmp_a,*tmp_s,*wa,*wa_r,*ws,*ws_r;
+
+       if (argc < 2) usage(argv[0]); 
+
+       soap_init(soap);
+       soap_set_namespaces(soap, jpps__namespaces);
+
+       soap_register_plugin(soap,glite_gsplugin);
+
+       while ((opt = getopt(argc,argv,"s:")) >= 0) switch (opt) {
+               case 's': server = optarg;
+                       break;
+               case '?': usage(argv[0]);
+       }
+
+       if (server) {
+               argv += 2;
+               argc -= 2;
+       }
+       else server = "http://localhost:8901";
+
+
+               
+       in.jobid = argv[1];
+       in.__sizeattributes = 1;
+       in.attributes = &aname;
+
+       puts("Retrieving JDL ...");
+       if ((ret = check_fault(soap,soap_call___jpsrv__GetJobAttributes(soap,server,"",&in,&out))))
+               return 1;
+
+               ad = cclassad_create(out.attrValues[0]->value->string);
+       if (!ad) {
+               fputs("Can't parse JDL\n",stderr);
+               return 1;
+       }
+
+       // cclassad_evaluate_to_string(ad,"dependencies",&dep_s);
+       cclassad_evaluate_to_expr(ad,"dependencies",&dep_s);
+
+       /* XXX: assumes syntacticly correct dependencies = { ... } */
+       where = strchr(dep_s,'{'); assert(where);
+       where++;
+
+       while ((where = strchr(where, '{'))) {  /* 2nd level */
+               for (where++; isspace(*where); where++);
+
+               if (*where == '{') end = strchr(where, '}')+1;  /* more ancestors */
+               else for (end = where; !isspace(*end) && *end != ','; end++);
+               tmp_a = strndup(where,end - where);
+               where = end++;
+
+               while(isspace(*where)) where++;
+               where++;        /* comma */
+               while(isspace(*where)) where++;
+
+               if (*where == '{') end = strchr(where, '}')+1;    /* more successors */
+               else for (end = where; !isspace(*end) && *end != ','; end++);
+               tmp_s = strndup(where,end - where); 
+               where = strchr(end+1,'}');
+               
+#define DELIM "{} ,\t\n"
+               for (ws = strtok_r(tmp_s,DELIM,&ws_r); ws; ws = strtok_r(NULL,DELIM,&ws_r)) 
+                       for (wa = strtok_r(tmp_a,DELIM,&wa_r); wa; wa = strtok_r(NULL,DELIM,&wa_r)) {
+                               deps[ndeps].a = strdup(wa);
+                               deps[ndeps].s = strdup(ws);
+                               deps = realloc(deps, (ndeps+2) * sizeof *deps);
+                               ndeps++;
+                               deps[ndeps].a = deps[ndeps].s = NULL;
+                       }
+               free(tmp_a); free(tmp_s); 
+       }
+
+       for (i=0; deps[i].a; i++) {
+               char    attr[1000],*ja,*js;
+               int     have_a,have_s;
+
+               printf("node: %s -> %s\n",deps[i].a,deps[i].s);
+               sprintf(attr,"nodes.%s.description.edg_jobid",deps[i].a);
+               have_a = cclassad_evaluate_to_string(ad,attr,&ja);
+
+               sprintf(attr,"nodes.%s.description.edg_jobid",deps[i].s);
+               have_s = cclassad_evaluate_to_string(ad,attr,&js);
+
+               printf("jobid: %s -> %s\n",ja,js);
+
+               if (have_a && have_s) {
+                       struct _jpelem__RecordTag       in;
+                       struct _jpelem__RecordTagResponse       empty;
+                       struct jptype__tagValue tagval;
+                       struct jptype__stringOrBlob val;
+
+                       in.jobid = ja;
+                       in.tag = &tagval;
+                       tagval.name = GLITE_JP_ATTR_WF_SUCCESSOR;
+                       tagval.value = &val;
+                       val.string = js;
+                       val.blob = NULL;
+
+                       printf("Register successor ...\n");
+                       ret = check_fault(soap,soap_call___jpsrv__RecordTag(soap, server, "",&in, &empty));
+                       in.jobid = js;
+                       tagval.name = GLITE_JP_ATTR_WF_ANCESTOR;
+                       val.string = ja;
+
+                       printf("Register ancestor ...\n");
+                       ret = check_fault(soap,soap_call___jpsrv__RecordTag(soap, server, "",&in, &empty));
+                       putchar(10);
+               }
+       }
+
+       return ret;
+}
index be55b62..57cb9e4 100644 (file)
 
        Revision history:
        $Log$
+       Revision 1.6  2006/01/16 17:20:27  mmulac
+       merge from RC15 branch
+        - compiles
+       
        Revision 1.5.2.1  2005/11/03 17:46:53  mmulac
        ares to c-ares migration
         - use dynamic library of c-ares, instead of ares static lib
@@ -68,6 +72,7 @@ nothrflavour=${with.globus.nothr.flavor}
 cppunit=${with.cppunit.prefix}
 jpproject=${subsystem.project.dir}
 project=${component.project.dir}
+classads_prefix=${with.classads.prefix}
                        </echo>
            </target>
        </project>
index 044b610..7099dd1 100644 (file)
@@ -1,6 +1,7 @@
 #include <errno.h>
 #include <string.h>
 #include <stdlib.h>
+#include <stdio.h>
 #include <fcntl.h>
 
 #include "glite/jp/types.h"
@@ -161,10 +162,22 @@ glite_jpps_get_attrs(glite_jp_context_t ctx,const char *job,char **attr,int natt
                                        }
                                        p->ops.close(p->fpctx,ph);
                                }
+                               else {
+                                       char    *e;
+                                       fprintf(stderr,"[%d] %s: %s\n",getpid(),known_classes[ci].class,
+                                                       e = glite_jp_error_chain(ctx));
+                                       free(e);
+                               }
                        }
 
                        glite_jppsbe_close_file(ctx,beh);
                }
+               else {
+                       char    *e;
+                       fprintf(stderr,"[%d] %s: %s\n",getpid(),known_classes[ci].class,
+                                       e = glite_jp_error_chain(ctx));
+                       free(e);
+               }
        }
 
        nout = merge_attrvals(&out,nout,meta);
index 3ceba02..39451d4 100644 (file)
@@ -31,8 +31,14 @@ int glite_jpps_authz(glite_jp_context_t ctx,int op,const char *job,const char *o
 
                case SOAP_TYPE___jpsrv__GetJobFiles:
                case SOAP_TYPE___jpsrv__GetJobAttributes:
+               case SOAP_TYPE___jpsrv__RecordTag:
                        assert(owner);
-                       return strcmp(owner,ctx->peer) ? glite_jp_stack_error(ctx,&err) : 0;
+                       if (!ctx->noauth && strcmp(owner,ctx->peer)) {
+                               err.desc = "you are not a job owner";
+                               glite_jp_stack_error(ctx,&err);
+                               return 1;
+                       }
+                       return 0;
                        break;
 
                default:
@@ -76,3 +82,4 @@ int glite_jpps_readauth(glite_jp_context_t ctx,const char *file)
        fclose(f);
        return 0;
 }
+
index e3ec8a0..ad6605d 100644 (file)
@@ -4,8 +4,6 @@
 #include <sys/types.h>
 #include <unistd.h>
 
-#include "feed.h"
-
 int glite_jppsbe_init(
        glite_jp_context_t ctx,
        int argc,
index 9bfe779..dd7b4b4 100644 (file)
@@ -71,7 +71,7 @@ int main(int argc, char *argv[])
 
        b_argc = p_argc = 1;
 
-       while ((opt = getopt(argc,argv,"B:P:a:p:s:dl:i:c:k:")) != EOF) switch (opt) {
+       while ((opt = getopt(argc,argv,"B:P:a:p:s:dl:i:c:k:n")) != EOF) switch (opt) {
                case 'B':
                        assert(b_argc < 20);
                        if (com = strchr(optarg,',')) *com = 0;
@@ -106,6 +106,7 @@ int main(int argc, char *argv[])
                case 'i': strncpy(pidfile,optarg,PATH_MAX); pidfile[PATH_MAX-1] = 0; break;
                case 'c': server_cert = optarg; break;
                case 'k': server_key = optarg; break;
+               case 'n': ctx->noauth = 1; break;
                case '?': fprintf(stderr,"usage: %s: -Bb,val ... -Pplugin.so ...\n"
                                          "b is backend option\n",argv[0]);
                          exit (1);
@@ -367,7 +368,7 @@ static int request(int conn,struct timeval *to,void *data)
                fprintf(stderr,"[%d] %s\n",getpid(),e = glite_jp_error_chain(ctx));
                free(e);
        }
-       return ENOTCONN;
+       return 0;
 }
 
 static int reject(int conn)
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 8bf523b..0000000
+++ /dev/null
@@ -1,1744 +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  }
-};
-
-/* obsolete */
-#if 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;
-}
-#endif
-
-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,
-       const char *class,
-       const char *name,       /* TODO */
-       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 *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);
-
-       assert(class!=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, class) == -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, class) == -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,
-       char **class,
-       char **name
-)
-{
-       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);
-       assert(name != 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 = strdup(classname);
-
-/* XXX: do we need similar check? 
-       if (!class == GLITE_JP_FILECLASS_UNDEF) {
-               err.code = EINVAL;
-               err.desc = "Forged destination path";
-               goto error_out;
-       }
-*/
-
-       /* TODO: */
-       *name = NULL;
-
-       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,
-       const char *class,
-       const char *name,       /* TODO */
-       char **url_out
-)
-{
-       FILE *regfile = 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(url_out != NULL);
-
-       assert(class!=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, class) == -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,
-       const char *class,
-       const char *name,       /* TODO */
-       char **fname_out
-)
-{
-       FILE *regfile = 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(fname_out != NULL);
-
-       assert(class!=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, class) == -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,
-       const char *class,
-       const char *name,       /* TODO */
-       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, name, &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:
-
-/* must be implemented via filetype plugin
-               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;
-
-/* must be implemented via filetype plugin
-               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;
-
-/* must be implemented via filetype plugin
-               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;
-}
-
-
-/* FIXME: disabled -- clarification wrt. filetype plugin needed */
-
-#if 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);
-}
-
-#else 
-
-/* placeholder instead */
-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[]
-       )
-)
-{
-       glite_jp_error_t        err;
-       err.code = ENOSYS;
-       err.desc = "not implemented";
-       return glite_jp_stack_error(ctx,&err);
-}
-
-#endif
-
-/* 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
-*/
index 5774b51..27da176 100644 (file)
@@ -1784,7 +1784,10 @@ int glite_jppsbe_query(
        memset(metadata,0, sizeof metadata);
 
        /* XXX: const discarding is OK */
-       for (i=0;attrs[i]; i++) metadata[i].name = (char *) attrs[i];
+       for (i=0;attrs[i]; i++) {
+               assert(i<2);
+               metadata[i].name = (char *) attrs[i];
+       }
 
        for (i=0; query[i].attr; i++) {
                char    *qitem;
index 97db1b1..e2bceaa 100644 (file)
@@ -91,7 +91,6 @@ SOAP_FMAC5 int SOAP_FMAC6 __jpsrv__RegisterJob(
                return SOAP_FAULT;
        }
 
-       memset(owner_val, 0, 2 * sizeof(glite_jp_attrval_t));
        owner_val[0].name = GLITE_JP_ATTR_OWNER;
        owner_val[0].value = in->owner;
        owner_val[0].origin = GLITE_JP_ATTR_ORIG_SYSTEM;
@@ -195,11 +194,22 @@ SOAP_FMAC5 int SOAP_FMAC6 __jpsrv__RecordTag(
        CONTEXT_FROM_SOAP(soap,ctx);
        void    *file_be,*file_p;
        glite_jpps_fplug_data_t **pd = NULL;
-       glite_jp_attrval_t      attr[2];
+       glite_jp_attrval_t      attr[2], meta[2];
+
 
        file_be = file_p = NULL;
 
-       memset(attr, 0, 2 * sizeof(glite_jp_attrval_t));
+       memset(meta,0,sizeof meta);
+        meta[0].name = strdup(GLITE_JP_ATTR_OWNER);
+
+       if (glite_jppsbe_get_job_metadata(ctx,in->jobid,meta)) {
+               goto err;
+       }
+       
+       if (glite_jpps_authz(ctx,SOAP_TYPE___jpsrv__RecordTag,in->jobid,meta[0].value)) {
+               goto err;
+       }
+
        attr[0].name = in->tag->name;
        if (in->tag->value->string) {
                attr[0].value = in->tag->value->string;
@@ -252,6 +262,10 @@ SOAP_FMAC5 int SOAP_FMAC6 __jpsrv__RecordTag(
 
        free(pd);
        return SOAP_OK;
+err:
+       glite_jp_attrval_free(meta,0);
+       err2fault(ctx,soap);
+       return SOAP_FAULT;
 }
 
 static void s2jp_qval(const struct jptype__stringOrBlob *in, char **value, int *binary, size_t *size)
@@ -407,10 +421,22 @@ SOAP_FMAC5 int SOAP_FMAC6 __jpsrv__GetJobFiles(
        glite_jp_error_t        err;
        void    **pd;
        struct jptype__jppsFile         **f = NULL;
+       glite_jp_attrval_t      meta[2];
 
        memset(&err,0,sizeof err);
        out->__sizefiles = 0;
 
+       memset(meta,0,sizeof meta);
+        meta[0].name = strdup(GLITE_JP_ATTR_OWNER);
+
+       if (glite_jppsbe_get_job_metadata(ctx,in->jobid,meta)) {
+               goto err;
+       }
+       
+       if (glite_jpps_authz(ctx,SOAP_TYPE___jpsrv__GetJobFiles,in->jobid,meta[0].value)) {
+               goto err;
+       }
+
        for (pd = ctx->plugins; *pd; pd++) {
                glite_jpps_fplug_data_t *plugin = *pd;
 
@@ -454,6 +480,10 @@ SOAP_FMAC5 int SOAP_FMAC6 __jpsrv__GetJobFiles(
        memcpy(out->files,f,out->__sizefiles * sizeof *f);
 
        return SOAP_OK;
+err:
+       glite_jp_attrval_free(meta,0);
+       err2fault(ctx,soap);
+       return SOAP_FAULT;
 }
 
 SOAP_FMAC5 int SOAP_FMAC6 __jpsrv__GetJobAttributes(
@@ -461,11 +491,22 @@ SOAP_FMAC5 int SOAP_FMAC6 __jpsrv__GetJobAttributes(
                struct _jpelem__GetJobAttributes *in,
                struct _jpelem__GetJobAttributesResponse *out)
 {
-       glite_jp_attrval_t      *attr;
+       glite_jp_attrval_t      *attr, meta[2];
        int     i,n;
 
        CONTEXT_FROM_SOAP(soap,ctx);
 
+       memset(meta,0,sizeof meta);
+        meta[0].name = strdup(GLITE_JP_ATTR_OWNER);
+
+       if (glite_jppsbe_get_job_metadata(ctx,in->jobid,meta)) {
+               goto err;
+       }
+       
+       if (glite_jpps_authz(ctx,SOAP_TYPE___jpsrv__GetJobAttributes,in->jobid,meta[0].value)) {
+               goto err;
+       }
+
        if (glite_jpps_get_attrs(ctx,in->jobid,
                        in->attributes,
                        in->__sizeattributes,&attr)) {
@@ -477,4 +518,8 @@ SOAP_FMAC5 int SOAP_FMAC6 __jpsrv__GetJobAttributes(
        out->__sizeattrValues = jp2s_attrValues(soap,attr,&out->attrValues,1);
 
        return SOAP_OK;
+err:
+       glite_jp_attrval_free(meta,0);
+       err2fault(ctx,soap);
+       return SOAP_FAULT;
 }
index c811e69..702b127 100644 (file)
                        </input>
                        <fault name="genericFault" type="genericFault">Any error.</fault>
                 </op>
-
-               <!-- Config operations -->
-               <op name="ServerConfiguration">
-                       Internal operation used for parsing XML config file.
-                       Not called at all, only forcing gSoap to generate XML parsers.
-                       <output name="attrs" type="xsd:string" list="yes">
-                                List of attributes which will JPPS send to JPIS.
-                        </output>
-                        <output name="indexedAttrs" type="xsd:string" list="yes">
-                                List of indexed attributes which will JPPS send to JPIS.
-                        </output>
-                        <output name="plugins" type="xsd:string" optional="yes" list="yes">
-                                List of type plugins.
-                        </output>
-                        <output name="feeds" type="feedSession" list="yes">
-                                List of requested feeds.
-                        </output>
-                       <fault name="genericFault" type="genericFault">Any error.</fault>
-                </op>
-
        </operations>
 </service>
diff --git a/org.glite.jp.ws-interface/src/ws_fault.c b/org.glite.jp.ws-interface/src/ws_fault.c
new file mode 100644 (file)
index 0000000..2623ae9
--- /dev/null
@@ -0,0 +1,125 @@
+#ident "$Header: "
+
+#include <syslog.h>
+#include <glite/jp/types.h>
+#include <glite/security/glite_gscompat.h>
+
+#define GSOAP_STRING(CHOICE) GLITE_SECURITY_GSOAP_CHOICE_GET(CHOICE, string, stringOrBlob, 1)
+#define GSOAP_BLOB(CHOICE) GLITE_SECURITY_GSOAP_CHOICE_GET(CHOICE, blob, stringOrBlob, 1)
+#define GSOAP_SETSTRING(CHOICE, VALUE) GLITE_SECURITY_GSOAP_CHOICE_SET(CHOICE, string, jptype, stringOrBlob, 1, VALUE)
+#define GSOAP_SETBLOB(CHOICE, VALUE) GLITE_SECURITY_GSOAP_CHOICE_SET(CHOICE, blob, jptype, stringOrBlob, 1, VALUE)
+#define GSOAP_ISSTRING(CHOICE) GLITE_SECURITY_GSOAP_CHOICE_ISTYPE(CHOICE, string, jptype, stringOrBlob, 1)
+#define GSOAP_ISBLOB(CHOICE) GLITE_SECURITY_GSOAP_CHOICE_ISTYPE(CHOICE, blob, jptype, stringOrBlob, 1)
+
+#if GSOAP_VERSION >= 20709
+  #define GFNUM SOAP_TYPE_jptype__genericFault
+#else
+  #define GFNUM SOAP_TYPE__genericFault
+#endif
+
+#ifndef dprintf
+#define dprintf(FMT, ARGS...) printf(FMT, ##ARGS)
+#endif
+
+static int glite_jp_clientCheckFault(struct soap *soap, int err, const char *name, int toSyslog) {
+       struct SOAP_ENV__Detail *detail;
+       struct jptype__genericFault     *f;
+       char    *reason,indent[200] = "  ";
+       char *prefix;
+       int retval;
+
+       if (name) asprintf(&prefix, "[%s] ", name);
+       else prefix = strdup("");
+       retval = 0;
+
+       switch(err) {
+       case SOAP_OK:
+               dprintf("%sOK\n", prefix);
+               break;
+
+       case SOAP_FAULT:
+       case SOAP_SVR_FAULT:
+               detail = GLITE_SECURITY_GSOAP_DETAIL(soap);
+               reason = GLITE_SECURITY_GSOAP_REASON(soap);
+               dprintf("%s%s\n", prefix, reason);
+               if (toSyslog) syslog(LOG_ERR, "%s", reason);
+
+               if (detail->__type != GFNUM && detail->__any) {
+               // compatibility with clients gSoaps < 2.7.9b
+                       dprintf("%s%s%s\n", prefix, indent, detail->__any);
+                       if (toSyslog) syslog(LOG_ERR, "%s", detail->__any);
+
+                       f = NULL;
+               } else {
+               // client is based on gSoap 2.7.9b
+                       assert(detail->__type == GFNUM);
+#if GSOAP_VERSION >= 20709
+                       f = (struct jptype__genericFault *)detail->fault;
+#elif GSOAP_VERSION >= 20700
+                       f = ((struct _genericFault *)detail->fault)->jpelem__genericFault;
+#else
+                       f = ((struct _genericFault *)detail->value)->jpelem__genericFault;
+#endif
+               }
+
+               while (f) {
+                       dprintf("%s%s%s: %s (%s)\n",
+                                       prefix, indent,
+                                       f->source, f->text, f->description);
+                       if (toSyslog) syslog(LOG_ERR, "%s%s: %s (%s)",
+                                       reason, f->source, f->text, f->description);
+                       f = f->reason;
+                       strcat(indent,"  ");
+               }
+               retval = -1;
+               break;
+
+       default:
+               soap_print_fault(soap,stderr);
+               retval = -1;
+       }
+
+       free(prefix);
+       return retval;
+}
+
+
+static struct jptype__genericFault* jp2s_error(struct soap *soap, const glite_jp_error_t *err)
+{
+       struct jptype__genericFault *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 glite_jp_server_err2fault(const glite_jp_context_t ctx,struct soap *soap)
+{
+       struct SOAP_ENV__Detail *detail = soap_malloc(soap,sizeof *detail);
+#if GSOAP_VERSION >= 20709
+       struct jptype__genericFault *f;
+       f = jp2s_error(soap,ctx->error);
+#else
+       struct _genericFault *f = soap_malloc(soap, sizeof *f);
+       f->jpelem__genericFault = jp2s_error(soap,ctx->error);
+#endif
+       memset(detail, 0, sizeof(*detail));
+#if GSOAP_VERSION >= 20700
+       detail->fault = (void *)f;
+#else
+       detail->value = (void *)f;
+#endif
+       detail->__type = GFNUM;
+       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;
+}
index 3c54843..925b449 100644 (file)
 
        Revision history:
        $Log$
-       Revision 1.11  2006/01/16 17:20:25  mmulac
-       merge from RC15 branch
-        - compiles
-       
        Revision 1.10.2.1  2005/10/20 06:55:15  zsalvet
        Add libtar and mysql external dependencies.
        
 
        <!-- component targets definitions tag = do not remove = -->
 
-       <target name="security.gsoap-plugin" unless="jponly" depends="envset">
+       <target name="security.gsoap-plugin" unless="setenvonly" depends="envset">
                <if>
                        <isset property="small.memory"/>
                        <then>
                </if>
        </target>
 
-       <target name="lb.server-bones" unless="jponly" depends="envset">
+       <target name="lb.server-bones" unless="setenvonly" depends="envset">
                <if>
                        <isset property="small.memory"/>
                        <then>
                </if>
        </target>
 
-       <if>
-               <isset property="setenvonly"/>
-       <then>
-               <property name="jponly" value="yes"/>
-               </then>           
-       </if>                   
-
        <target name="ws-interface" unless="setenvonly" depends="envset" >
                <if>
                        <isset property="small.memory" />
diff --git a/org.glite.jp/doc/install-guide/JP-install-guide.tex b/org.glite.jp/doc/install-guide/JP-install-guide.tex
new file mode 100644 (file)
index 0000000..5e20c39
--- /dev/null
@@ -0,0 +1,107 @@
+\documentclass{egee}
+\usepackage{comment,alltt}
+
+\def\LB{L\&B}
+
+\title{gLite Job Provenance Install Guide}
+\author{CESNET EGEE JRA1 team}
+\DocIdentifier{EGEE-JRA1-??}
+\Date{\today}
+\Activity{JRA1: Middleware Engineering and Integration}
+\DocStatus{DRAFT}
+\Dissemination{PUBLIC}
+\DocumentLink{}
+\Abstract{This install guide of the Job Provenance (JP) service is
+  intended as a detailed technical guide to the JP deployment process
+  (including all configuration tasks on related services). 
+  For description of deployment modules please refer to the "gLite
+  install guide" document. 
+  Currently this document contains only description of LB-JP
+  interaction internals. 
+}
+
+
+\def\todo#1{\textbf{TODO:} #1}
+
+\begin{document}
+
+
+%\input{frontmatter}
+%\newpage
+\tableofcontents
+\newpage
+
+\section{Logging and Bookeeping (LB) and Job Provenance (JP)}
+On fig.~\ref{fig:LB-JP-interactions} are depicted data flows between
+LB and JP services. These flows are numbered and you can use this
+numbers to find additional information about each flow in
+table~\ref{tab:LB-JP-interactions}.
+
+\begin{figure}[htpb]
+  \centering
+  \includegraphics[width=0.9\hsize]{LB-JP-interaction-details}
+  \caption{LB to JP interactions detail overview}
+  \label{fig:LB-JP-interactions}
+\end{figure}
+
+\begin{table}[htpb]
+ \centering
+  \begin{tabular}{|c|l|l|p{9cm}|}
+    \hline
+    &spool directory&initiated by&description\\
+    \hline
+    \hline
+    1&lb.export.dump&lb-exporter&Export of LB job records into spool 
+    directory. It use glite-lb-purge utility. LB-exporter reads this
+    spool directory
+    in a regular manner and implement next processing of LB dumps.\\
+    \hline
+    2&lb.export.jpreg&LB server&When new job come to the LB server 
+    it stores its
+    registration into the spool directory. It is responsibility of
+    JP-importer process to handle such registrations.\\
+    \hline
+    3&lb.export.jpdump&lb-exporter&LB-exporter do its processing of 
+    LB dumps and passes
+    on it to the JP-importer using the spool directory.\\
+    \hline
+    4&none&jp-importer&JP importer handles registrations received from LB
+    server and sends it to the JP primary server front-end (using its WS
+    interface).\\
+    \hline
+    5&none&jp-importer&JP importer handles LB dumps received from LB
+    exporter and sends it to the JP primary server back-end using its
+    gridftp interface.\\
+    \hline
+  \end{tabular}
+  \caption{LB to JP data flows description}
+  \label{tab:LB-JP-interactions}
+\end{table}
+
+
+Notes:
+\begin{itemize}
+ \item Only JP Primary Storage (JPPS) server is involved in described
+   data flows. JP Index Servers are not part of this picture (they are
+   feeded via corresponding JPPS).
+ \item Only flows number 4 and 5 are designed to be inter-host. All
+   the other interactions assume the components are on the same host and
+   do use access to a shared filesystem.
+ \item Data flow number 1 use glite-lb-purge utility (see its
+   documentation) and passes to it argument from lb.export.purgeargs
+   clause of the deployment configuration file. This argument contain
+   the timeouts controlling after how long period of time a job
+   staying in a terminal state is to be purged from the LB server.
+ \item The LB exporter have a feature to store LB job event dumps in a
+   directory for further handling (e.g. for job statistic tool). This behaviour
+   is controled by lb.export.jobs deployment config file clause (leave
+   this clause empty if you don't use dumps for futher handling).
+ \item The LB exporter also have a feature to keep all handled LB
+   dumps (in glite-lb-purge format) in filesystem. This feature is
+   controlled by lb.export.dump.keep.
+ \item LB exporter is not a deamon, it's periodic invocation is
+   provided by cron deamon.
+\end{itemize}
+
+\end{document}
index 14534fd..dc27de7 100644 (file)
@@ -45,24 +45,24 @@ table~\ref{tab:LB-JP-interactions}.
 
 \begin{table}[htpb]
  \centering
-  \begin{tabular}{|c|l|l|p{9cm}|}
+  \begin{tabular}{|c|p{3cm}|l|p{9cm}|}
     \hline
     &spool directory&initiated by&description\\
     \hline
     \hline
-    1&lb.export.dump&lb-exporter&Export of LB job records into spool 
-    directory. It use glite-lb-purge utility. LB-exporter reads this
-    spool directory
-    in a regular manner and implement next processing of LB dumps.\\
+    1&lb.export.dump,
+      lb.export.dump.keep&lb-exporter&
+      Export of LB job records into spool directory. It uses glite-lb-purge utility. LB-exporter reads this spool directory in a regular manner and implement next processing of LB dumps. Optionally it can keep handled dumps in lb.export.dump.keep.\\
     \hline
     2&lb.export.jpreg&LB server&When new job come to the LB server 
     it stores its
     registration into the spool directory. It is responsibility of
     JP-importer process to handle such registrations.\\
     \hline
-    3&lb.export.jpdump&lb-exporter&LB-exporter do its processing of 
-    LB dumps and passes
-    on it to the JP-importer using the spool directory.\\
+    3&lb.export.jpdump,
+      lb.export.jobs,
+      lb.export.jobs.keep&lb-exporter&
+      LB-exporter do its processing of LB dumps (they are in per job form) and passes on it to the JP-importer using the spool directory lb.export.jpdump and temporary storage lb.export.jobs. It can keep the job files for futher usage.\\
     \hline
     4&none&jp-importer&JP importer handles registrations received from LB
     server and sends it to the JP primary server front-end (using its WS
@@ -93,7 +93,7 @@ Notes:
    staying in a terminal state is to be purged from the LB server.
  \item The LB exporter have a feature to store LB job event dumps in a
    directory for further handling (e.g. for job statistic tool). This behaviour
-   is controled by lb.export.jobs deployment config file clause (leave
+   is controled by lb.export.jobs.keep deployment config file clause (leave
    this clause empty if you don't use dumps for futher handling).
  \item The LB exporter also have a feature to keep all handled LB
    dumps (in glite-lb-purge format) in filesystem. This feature is
index 42eb2e8..8dcc464 100755 (executable)
Binary files a/org.glite.jp/doc/install-guide/glite_installation_guide_LB.doc and b/org.glite.jp/doc/install-guide/glite_installation_guide_LB.doc differ
index 8dea285..b4a73d3 100644 (file)
 \Dissemination{PUBLIC}
 \DocumentLink{}
 
-\def\req{\noindent\textbf{Prerequisities: }}
-\def\how{\noindent\textbf{How to run: }}
-\def\result{\noindent\textbf{Expected result: }}
-\def\jpps{\noindent\textbf{JP PS log should contain: }}
-\def\jpis{\noindent\textbf{JP IS log should contain: }}
+\def\req{\noindent\textbf{Prerequisities:}}
+\def\how{\noindent\textbf{How to run:}}
+\def\result{\noindent\textbf{Expected result:}}
+\def\jpps{\noindent\textbf{JP PS log should contain:}}
+\def\jpis{\noindent\textbf{JP IS log should contain:}}
 
 \def\path#1{{\normalfont\textsf{#1}}}
 \def\code#1{\texttt{#1}}
 \item JPIS -- Job Provenance Index Server
 \end{itemize}
 
-\todo{}
 
 \section{Test Coverage}
-\todo{}
+\todo{TBD}
 
 %\chapter{Test Cases}
 
@@ -56,7 +55,7 @@
 
 \subsubsection{Basic functionality}
 \label{regjob}
-\req Running JPPS
+\req\ Running JPPS
 
 \how
 \begin{itemize}
@@ -74,16 +73,22 @@ $ jpps-test GetJobAttr JOBID http://egee.cesnet.cz/en/Schema/JP/System:owner
 \end{itemize}
 \result Should print the OWNER value supplied.
 
-
 \subsubsection{AuthZ check}
-\req JPPS running, a~job registered with the procedure in~\ref{regjob}
-\how
+\req\ JPPS running, a~job registered with the procedure in~\ref{regjob}
+
+\how\ 
 Call GetJobAttributes using different user credentials 
-\result 
+
+\result\ 
 Should fail with ``Permission denied'' error
 
 \subsection{Tag recording}
-\req JPPS running, a~job registered with the procedure in~\ref{regjob}
+\label{tagreg}
+
+\subsubsection{Basic functionality}
+\req\
+JPPS running, a~job registered with the procedure in~\ref{regjob}
+
 \how 
 \begin{itemize}
 \item Call RecordTag operation:
@@ -98,86 +103,81 @@ $ jpps-test  GetJobAttr JOBID TAGNAME
 \result
 The recorded value should be returned.
 
-- record and retrieve more values of the same tag
-\subsection{File upload}
+\how\ Record another values(s) of the same tag by repeating the RecordTag call
 
-\subsubsection{Basic functionality}
-- call StartUpload, LB dump file type
-* check with GetJobFiles -- shoud return nothing
-- upload via ftp
-- call CommitUpload
-* check with GetJobFiles -- should return URL
-- retrieve and check the file
-
-\subsubsection{AuthZ checks}
-(should fail)
-* call GetJobFiles with different credentials
+\result\ GetJobAttr should return all the recorded values
 
-* StartUpload with different credentials
 
-- StartUpload
-* ftp upload with different credentials
-
-* ftp GET with different credentials
+\subsubsection{AuthZ check}
+\req\ JPPS running, a~job registered with the procedure in~\ref{tagreg} \\
+\how\ Call RecordTag using different user credentials \\
+\result\ Should fail with ``Permission denied'' error \\
 
-\subsubsection{Cleanup}
-(Foreseen test for feature which is not implemented yet)
-- call StartUpload, short timeout
-- upload via ftp
-(don't call CommitUpload)
-* uploaded file should be purged after timeout
 
-\section{\LB\ plugin}
-%\todo{honik}
-\LB\ plugin is a component integrating the \LB\ functionality into JP.
+\subsection{File upload}
 
 
-\subsection{Standalone tests}
-\LB\ plugin as a standalone component is used for example in the \texttt{glite-lb-statistics} 
-program (part of org.glite.lb.utils). This program reads a dump file of events related to
-one particular job and using the \LB\ plugin it computes the job state and many other job 
-statistics. See the \LB\ testplan for more details.
+\subsubsection{Basic functionality}
+\req\ JPPS running, my certificate subject amont JPPS trusted peers, 
+\verb'globus-url-copy' in PATH
 
-\subsection{Integrated tests}
-\req JPPS running with the \texttt{-P/path/to/the/glite\_lb\_plugin.so}
+\how
+Run the aggregate test script from \verb'org.glite.jp.primary/build'
 
-\how 
-\begin{itemize}
-\item call GetJobAttributes to get the LB attributes
 \begin{verbatim}
-$ jpps-test GetJobAttr JOBID ATTRIBUTE
-
-where ATTRIBUTE is one of the 
-http://egee.cesnet.cz/en/Schema/LB/Attributes:jobId
-http://egee.cesnet.cz/en/Schema/LB/Attributes:user
-http://egee.cesnet.cz/en/Schema/LB/Attributes:VO
-http://egee.cesnet.cz/en/Schema/LB/Attributes:eNodes
-http://egee.cesnet.cz/en/Schema/LB/Attributes:eProc
-http://egee.cesnet.cz/en/Schema/LB/Attributes:RB
-http://egee.cesnet.cz/en/Schema/LB/Attributes:CE
-http://egee.cesnet.cz/en/Schema/LB/Attributes:host
-http://egee.cesnet.cz/en/Schema/LB/Attributes:UIHost
-http://egee.cesnet.cz/en/Schema/LB/Attributes:CPUTime
-http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatus
-http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatusDate
-http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatusReason
-http://egee.cesnet.cz/en/Schema/LB/Attributes:LRMSDoneStatus
-http://egee.cesnet.cz/en/Schema/LB/Attributes:LRMSStatusReason
-http://egee.cesnet.cz/en/Schema/LB/Attributes:retryCount
-http://egee.cesnet.cz/en/Schema/LB/Attributes:additionalReason
-http://egee.cesnet.cz/en/Schema/LB/Attributes:jobType
-http://egee.cesnet.cz/en/Schema/LB/Attributes:nsubjobs
-http://egee.cesnet.cz/en/Schema/LB/Attributes:lastStatusHistory
-http://egee.cesnet.cz/en/Schema/LB/Attributes:fullStatusHistory
+$ ../examples/jpps_store_test -o 'OWNER' -d ../examples/job_template
 \end{verbatim}
-\end{itemize}
+(substitute real cert.\ subject for OWNER)
+
+\result\ 
+The script calls JPPS operations RegisterJob and StartUpload, 
+uploads an \LB\ job log generated from the template file,
+calls CommitUpload.
+
+Finally, the upload is checked by retrieving two attribute
+values: LB/Attributes:user and LB/Attributes:finalStatusk via the GetJobAttr
+call. 
+Both calls should return OK and print reasonable values.
+
+%- call StartUpload, LB dump file type
+%* check with GetJobFiles -- shoud return nothing
+%- upload via ftp
+%- call CommitUpload
+%* check with GetJobFiles -- should return URL
+%- retrieve and check the file
+
+\subsubsection{Phase checks}
+\todo{salvet}
+% soubor nelze zapsat pred otevrenim operaci StartUpload
+% nelze cist pred Commitem
+% nelze zapsat po Commitu
 
-\result Should print the corresponding LB attributes
+\subsubsection{AuthZ checks}
+(should fail)
 
+\todo{salvet}
+%* call GetJobFiles with different credentials
+%
+%* StartUpload with different credentials
+%
+%- StartUpload
+%* ftp upload with different credentials
+%
+%* ftp GET with different credentials
+
+
+\subsubsection{Cleanup}
+(Foreseen test for feature which is not implemented yet)
+%- call StartUpload, short timeout
+%- upload via ftp
+%(don't call CommitUpload)
+%* uploaded file should be purged after timeout
+
+\section{LB plugin}
+\todo{honik}
 
 \section{JPPS-JPIS interaction (feeds)}
 
-\todo{import this chapter from testplan.txt}
 
 %set of queries (how many?) with different "triggering conditions":
 %- on job registration
@@ -405,7 +405,7 @@ Mulac
 \result{} Expected database INSERTs in the JP-IS (last two steps).
 
 \subsection{Multiple feeds at time}
-TODO
+\todo{TBD}
 
 \subsection{Advanced feed features (to be implemented)}
 - remove (not implemented in PS yet)
@@ -414,10 +414,9 @@ TODO
 
 
 \subsection{PS-IS AuthZ}
-TODO, if any
+\todo{Not implemented yet}
 
 \section{IS queries}
-\todo{Import from org.glite.jp.index/doc/README file}
 
 
 %TBD: insert job sets via JP-IS interaction or directly?
@@ -517,7 +516,7 @@ There are 3 scenarios to be verified:
 
 
 \section{IS standalone advanced features}
-\todo{To be implemented}
+\todo{Not implemented yet}
 
 \subsection{Server startup}
 
index db9317f..3d8fc9c 100644 (file)
 \Dissemination{PUBLIC}
 \DocumentLink{}
 
-\Abstract{
-
-  Job Provenance (JP) service provides long-term storage of data
-  related to job live in a Grid. JP provides a query interface
-  allowing to perform data-mining. The possibility to annotate jobs
-  stored in JP is also provided.
-
-  There is a overview of the service architecture followed by main JP
-  use case scenarios in this document. Technical reference
+\Abstract{This user's guide is intended for a user of the Job
+  Provenance (JP) service. The service architecture characteristic is
+  followed by description of main JP use case scenarios. Technical
   documentation for both JP user and JP administrator is included in
-  this document too.  This user's guide also contains release notes
-  describing current JP implementation.
-
-  For actual version of this document see
-  \texttt{http://egee.cesnet.cz/en/JRA1/} web page.
-}
+  this document too.  This version of user's guide is part of the
+  first release of JP and it also contains release notes describing
+  corrent limitations of JP implementation.}
 
 \def\todo#1{\textbf{TODO:} #1}
 
@@ -63,7 +54,7 @@ their interaction with the Job Provenance.
 
 \begin{figure}[htpb]
   \centering
-  \includegraphics[scale=0.7]{JP-interactions}
+  \includegraphics[scale=0.5]{JP-interactions}
   \caption{Data flow into gLite Job Provenance}
   \label{fig:psinter}
 \end{figure}
@@ -83,7 +74,7 @@ queries. A user query part of JP is shown in Fig.~\ref{fig:query}.
 
 \begin{figure}[htpb]
   \centering
-  \includegraphics[scale=0.8]{JP-query}
+  \includegraphics[scale=0.5]{JP-query}
   \caption{Index Server interactions}
   \label{fig:query}
 \end{figure}
@@ -97,194 +88,21 @@ Primary Storages and vice versa.
 
 The interface exposed by JPIS to the end user is described in the
 chapter~\ref{reference}. Command line interface tool for end-user
-interface to the JPIS is described in the chapter~\ref{CLI}.  See the
-next chapter (use cases) for futher description of JP to user
-interactions.
-
-\section{Job Provenance use cases}
-
-\subsection{Prerequisities}
-
-\subsubsection{LB/JP relationship}
-When JP deployed, any job in a terminal state will disappear from LB
-after preconfigured timeout (one week for example). If a user wants
-any information about such a job before this timeout (or before it
-reach a terminal state) he must use the LB service (please refer to LB
-user's guide). After that timeout he must use the JP service.
-
-For LB configuration please see gLite installation guide. For a
-technical description of LB-JP interactions please see
-\texttt{http://egee.cesnet.cz/en/JRA1/LB-JP-interaction-guide.pdf}.
-
-\subsubsection{JP service location}
-To call JP you need to know JP services address. There are two services:
-\begin{itemize}
-\item JP primary storage (JPPS)\\
-  From JP design point of view there are only few PS in the
-  grid. Expected implementation is that these JPPS locations
-  are preconfigured in a UI instance while one of them is configured as
-  default JPPS.
-\item JP index server (JPIS)\\
-  Each index server is build (configured and started) by site/VO/user
-  group administrator (or even "senior user") based on given
-  community needs (expected queries and its optimization). So in
-  principle the index server location for a given query is to be
-  provided by the user. We expect that the UI instance will provide
-  mechanism allowing selection from preconfigured JPIS servers list.
-\end{itemize}
-
-\subsection{JP use case 1 -- get job info}
-
-The scenario:
-\begin{itemize}
-\item The user wants information about a particular job. He knows a
-  job id. Job isn't longer in the LB. Procedure: Ask the JPPS to get all
-  or selected attributes of job.
-\end{itemize}
-
-The implementation:
-\begin{itemize}
- \item Let a user to specify attributes to be returned. See section
-  \ref{attributes}.
- \item Call GetJobAttributes operation of a JPPS and display the values
-  returned.
-\end{itemize}
-
-Examples and hints:
-\begin{itemize}
- \item \texttt{org.glite.jp.primary/examples/jpps-test.c}\\
-  This utility is used for all JPPS operations. Some hints how to use it
-  can be find in the test plan document.
-\end{itemize}
-
-\subsection{JP use case 2 -- get job files}
-
-The scenario:
-\begin{itemize}
- \item The user knows a job id, job is in a terminal state. The user wants
-  all files (LB event dump, sandbox) stored by JP for futher processing.
-\end{itemize}
-
-The implementation:
-\begin{itemize}
- \item Call GetJobFiles operation of a JPPS. You will get a list of URLs
-  which can be used to download the files.
-\end{itemize}
-
-Examples and hints:
-\begin{itemize}
- \item The same as use case 1.
-\end{itemize}
+interface to the JPIS is described in the chapter~\ref{CLI}.
 
-\subsection{JP use case 3 -- job lookup}
-
-The scenario:
-\begin{itemize}
- \item The user is looking for jobs with specific properties. In this case
-  (no job id known) a JPIS must be used. There are the same query interface
-  provided by any JPIS but if a particular query can be answered by
-  the given JPIS depends on its configuration (configuration
-  determines which attributes are uploaded by PS to IS, and which of
-  them are indexed).
- \item The user should know the proper JPIS to use for its particular
-  needs.
- \item The scenario can continue by the JP use cases number 1 and 2 described
-  above (JPIS answer will contain job ids and identification of JPPSs
-  to ask for all available JP data about the jobs).
-\end{itemize}
-
-The implementation:
-\begin{itemize}
- \item The user will select a JPIS and provide query. The JPIS operation
-  QueryJobs is called and list of jobs matching the query is returned.
-\end{itemize}
-
-Examples and hints:
-\begin{itemize}
- \item JPIS CLI tool\\
-   org.glite.jp.index/examples/jpis-client.c
-
- \item example in org.glite.jp.index/examples/jpis-test.c (starting
-   from line 161)
-\end{itemize}
-
-\subsection{JP use case 4 -- job annotation}
-
-The scenario:
-\begin{itemize}
- \item The user wants to add a user tag (annotation) to a job. He must know
-  the job id(s) (or use the JP use case number 3 to find it).
-\end{itemize}
-
-The implementation:
-\begin{itemize}
- \item Call RecordTag operation of JPPS for the job(s) to add requested
-  user tag.
-\end{itemize}
-
-Examples and hints:
-\begin{itemize}
- \item The same as use case 1.
-\end{itemize}
-
-
-\subsection{Job attributes}
-\label{attributes}
-Job attributes are referenced by its names. Each attribute belongs to
-one namespace (represented by a prefix in the attribute name).
-
-A namespace is defined by a service (currently we have one for LB and
-one for JP) providing its data to the JP or a user group/experiment
-who wants to attach its own data to the job.
-
-It is expected that UI have preconfigured list of available namespaces
-and XML schema for each namespace (the schema can be automatically
-retrieved based on the namespace name). A list of available attributes
-is generated from these schemas when user have to select attributes to
-be retrieved from JP.
-
-\begin{itemize}
- \item The namespaces (schema is available at the URL representing namespace):\\
-  http://egee.cesnet.cz/en/Schema/LB/Attributes\\
-  http://egee.cesnet.cz/en/Schema/JP/System   <<<<<<<(NOT YET)\\
- \item There are header files with known names of attributes generated from
-  these schema files in our build procedure:\\
-  org.glite.lb.server/build/jp\_job\_attrs.h\\
-  org.glite.jp.common/interface/known\_attr.h  <<<<<<<\\
-\end{itemize}
-
-\subsection{Authentication and authorization}
-All the calls must be authenticated by user credentials. In the
-current JP release only implicit ACLs are available -- the job
-information is available for job owner only.
 
+\section{Job Provenance use cases}
+\todo{In next release}
 
 \section{Release notes}
 \todo{TBD}
 
-\section{References}
+\section{Documentation for JP users}
 
 %\subsection{Role of the JP administrator}
 % Podle Ljochy sem nepatøí. Podle mne musí u¾ivatel vìdìt kdy a s èím
 % otravovat administratora (zejména IS).
 
-\begin{itemize}
- \item In general, the page \texttt{http://egee.cesnet.cz/en/JRA1} should
-  contain actual versions of JP documentation.
-
-\item Interfaces (WS):
- \begin{itemize}
-  \item In source code tree the WSDLs are located in these files:\\
-   \texttt{org.glite.jp.ws-interface/src/JobProvenanceIS.xml,\\
-   org.glite.jp.ws-interface/src/JobProvenancePS.xml,\\
-   org.glite.jp.ws-interface/src/JobProvenanceTypes.xml
-   } 
- \end{itemize}
- \item Namespaces of attributes -- see section \ref{attributes}
- \item Job provenance test plan\\
- \texttt{http://egee.cesnet.cz/en/JRA1/testplan.pdf}
-\end{itemize}
-
 \subsection{Command line interface (CLI)}
 \label{CLI}
 {
diff --git a/org.glite.jp/examples/pch06/align.sh b/org.glite.jp/examples/pch06/align.sh
new file mode 100644 (file)
index 0000000..4f6a452
--- /dev/null
@@ -0,0 +1,60 @@
+#!/bin/sh
+
+log_event() #1 - attr.name #2 attr.value
+{
+  GLITE_WMS_SEQUENCE_CODE=`$lb_logevent\
+    --jobid="$GLITE_WMS_JOBID"\
+    --source="Application"\
+    --sequence="$GLITE_WMS_SEQUENCE_CODE"\
+    --event="UserTag"\
+    --node=$host\
+    --name="$1"\
+    --value="$2"\
+  || echo $GLITE_WMS_SEQUENCE_CODE`
+}
+
+init_log_event()
+{
+  lb_logevent=${GLITE_WMS_LOCATION}/bin/glite-lb-logevent
+  if [ ! -x "$lb_logevent" ]; then
+    lb_logevent="${EDG_WL_LOCATION}/bin/edg-wl-logev"
+  fi
+  host=`hostname -f`
+}
+
+
+exec 2>$$.err >&2
+set -x
+
+
+hostname -f
+date
+echo $0 $*
+
+chmod +x align_warp scanheader
+
+globus-url-copy $1.img file://$PWD/anatomy.img
+globus-url-copy $1.hdr file://$PWD/anatomy.hdr
+globus-url-copy $2.img file://$PWD/reference.img
+globus-url-copy $2.hdr file://$PWD/reference.hdr
+
+./align_warp reference.img anatomy.img warp -m 12 -q
+GLOBAL_MAXIMUM=`./scanheader anatomy.img | grep '^global maximum=' | sed 's/global maximum=//'`
+echo $GLOBAL_MAXIMUM
+
+globus-url-copy file://$PWD/warp $1.warp
+
+
+# Log LB user_tags
+init_log_event
+log_event "IPAW_STAGE" "1"
+log_event "IPAW_PROGRAM" "align_warp"
+log_event "IPAW_INPUT" "$1.img"
+log_event "IPAW_INPUT" "$2.img"
+log_event "IPAW_OUTPUT" "$1.warp"
+log_event "IPAW_PARAM" "-m 12"
+log_event "IPAW_PARAM" "-q"
+log_event "IPAW_HEADER" "GLOBAL_MAXIMUM=$GLOBAL_MAXIMUM"
+
+
+globus-url-copy file://$PWD/$$.err $1.align-err
diff --git a/org.glite.jp/examples/pch06/align_warp b/org.glite.jp/examples/pch06/align_warp
new file mode 100644 (file)
index 0000000..5ba7bc1
Binary files /dev/null and b/org.glite.jp/examples/pch06/align_warp differ
diff --git a/org.glite.jp/examples/pch06/cheat.pl b/org.glite.jp/examples/pch06/cheat.pl
new file mode 100644 (file)
index 0000000..f917cbf
--- /dev/null
@@ -0,0 +1,201 @@
+#!/usr/bin/perl 
+
+use Getopt::Std;
+
+getopt('g:s:f:');
+$glite = $opt_g ? $opt_g : "$ENV{HOME}/glite/stage";
+$dagids = "$glite/examples/glite-lb-dagids";
+$regjob = "$glite/examples/glite-lb-job_reg";
+$logevent = "$glite/bin/glite-lb-logevent -I";
+
+die "usage: $0 -s bkserver -f file_prefix [ -g glite_install_dir ] dump \n" unless $opt_s && $opt_f && $#ARGV == 0;
+$server = $opt_s;
+$fprefix = $opt_f;
+
+%omap = 
+(
+#      common => {
+               'DG.SOURCE' => 'source',
+               'DG.SRC_INSTANCE' => 'source-instance',
+               'DG.SEQCODE' => 'sequence',
+#              
+#      },
+#      UserTag => {
+#              'DG.USERTAG.NAME' => '',
+#              'DG.USERTAG.VALUE' => '',
+#      },
+#      Accepted => {
+#              'DG.ACCEPTED.FROM' => ''
+##             DG.ACCEPTED.FROM_HOST
+#      },
+#      EnQueued => {
+#              DG.ENQUEUED.QUEUE
+#              DG.ENQUEUED.JOB
+#              DG.ENQUEUED.RESULT
+#      },
+);
+
+%smap =
+(
+       'HOST' => 1,
+       'DATE' => 1,
+       'LVL' => 1,
+       'PROG' => 1,
+       'DG.ARRIVED' => 1,
+       'DG.PRIORITY' => 1,
+       'DG.EVNT' => 1,
+       'DG.JOBID' => 1,
+       'DG.USER' => 1,
+);
+
+while ($_ = <>) {
+       next if /^\s*$/;
+       
+       chomp;
+       @F = split / /;
+       
+       undef $prev;
+       undef %f;
+       
+       for $f (@F) {
+               if ($f =~ /^[.A-Z_]+="/) {
+       #               print $prev,"\n" if $prev;
+                       @P = split /=/,$prev,2;
+                       $P[0] =~ s/^\s*//; $P[0] =~ s/\s*$//;
+                       $P[1] =~ s/^\s*\"//; $P[1] =~ s/\"\s*$//;
+                       $f{$P[0]} = $P[1];
+                       $prev = $f;
+               }
+               else { $prev .= ' '.$f; }
+       }
+       
+       # print $prev,"\n";
+       @P = split /=/,$prev,2;
+       $P[0] =~ s/^\s*//; $P[0] =~ s/\s*$//;
+       $P[1] =~ s/^\s*\"//; $P[1] =~ s/\"\s*$//;
+       $f{$P[0]} = $P[1];
+
+       push @events,{%f};
+}
+
+for (@events) {
+#      print $_->{'DG.JOBID'},"\n";
+       push @{$jobs{$_->{'DG.JOBID'}}},$_;
+
+       if ($_->{'DG.EVNT'} eq 'UserTag' &&
+               $_->{'DG.USERTAG.NAME'} eq 'ipaw_stage')
+       {
+               my $s = $_->{'DG.USERTAG.VALUE'};
+               push @{$stage{$s}},$_->{'DG.JOBID'};
+       }
+}
+
+$odag = $events[0]->{'DG.JOBID'};
+print "dag: $odag\n";
+
+for (keys %jobs) {
+       next if $_ eq $odag;
+       push @onode,$_;
+       $index{$_} = $#onode;
+}
+
+for (sort { $a <=> $b } keys %stage) {
+       local $"="\n\t";
+       print "stage $_\n\t@{$stage{$_}}\n";
+}
+
+$nodes = $#onode + 1;
+open REG,"$dagids -m $server -n $nodes -s $$|" or die "$dagids: $!\n";
+
+while ($_ = <REG>) {
+#      print $_;
+       eval "\$$_";
+}
+close REG;
+
+$jdl = $jobs{$odag}->[0]->{'DG.REGJOB.JDL'};
+
+print "substituting edg_jobid ...\n";
+print "$odag -> $dag\n";
+$jdl =~ s|edg_jobid = \\"$odag\\"|edg_jobid = \\"$dag\\"|;
+for (0..$nodes-1) {
+       print "$onode[$_] -> $node[$_]\n";
+       $jdl =~ s|edg_jobid = \\"$onode[$_]\\"|edg_jobid = \\"$node[$_]\\"|;
+}
+
+$jdlf="/tmp/cheat.$$";
+open JDL,">$jdlf" or die "$jdlf: $!";
+print JDL $jdl;
+close JDL;
+
+print "$regjob -j $dag -s NetworkServer -e $seed -n $nodes -l $jdlf\n";
+system "$regjob -j $dag -s NetworkServer -e $seed -n $nodes -l $jdlf"; # XXX: or die "$regjob\n";
+
+sub logit {
+       local $_ = shift;
+       my $job = shift;
+       my @opt = ();
+       my $ev = $_->{'DG.EVNT'};
+
+       for my $k (keys %$_) {
+               next if $smap{$k};
+
+               if ($omap{$k}) {
+                       push @opt,"--$omap{$k}";
+                       push @opt,"'$_->{$k}'";
+               }
+               else {
+                       $k =~ /^DG\.([A-Z]+)\.([A-Z_]+)$/;
+                       die "$k: unexpected in $ev\n" unless $1 eq uc $ev;
+                       push @opt,'--'.lc $2;
+                       if ($ev eq 'UserTag' && $2 eq 'VALUE' && 
+                               ($_->{'DG.USERTAG.NAME'} eq 'ipaw_input' || $_->{'DG.USERTAG.NAME'} eq 'ipaw_output')
+                       ) {
+                               my $val = $_->{$k};
+                               $val =~ s|.*/|$fprefix|;
+                               push @opt,"'$val'";
+                       } 
+                       else {
+                               push @opt,"'$_->{$k}'";
+                       }
+               }
+
+       }
+       print "\n#####\n$logevent -j $job -e $_->{'DG.EVNT'} @opt\n\n#####\n";
+       system "$logevent -j $job -e $_->{'DG.EVNT'} @opt\n";
+}
+
+print "DAG events up to Running ...\n";
+for (sort { $a->{'DG.SEQCODE'} cmp $b->{'DG.SEQCODE'} } @{$jobs{$odag}}) {
+       my $ev = $_->{'DG.EVNT'};
+       next if $ev eq 'RegJob';
+       logit $_,$dag;
+       last if $ev eq 'Running';
+}
+
+
+for my $s (sort { $a <=> $b } keys %stage) {
+       print "\n### stage $s ###\n";
+       for my $ojob (@{$stage{$s}}) {
+               for (sort { $a->{'DG.SEQCODE'} cmp $b->{'DG.SEQCODE'} } @{$jobs{$ojob}}) {
+                       my $ev = $_->{'DG.EVNT'};
+                       next if $ev eq 'RegJob';
+
+                       logit $_,$node[$index{$ojob}];
+               }
+       }
+}
+
+
+print "Final DAG events ...\n";
+undef $gotrun;
+for (sort { $a->{'DG.SEQCODE'} cmp $b->{'DG.SEQCODE'} } @{$jobs{$odag}}) {
+       my $ev = $_->{'DG.EVNT'};
+       next unless $gotrun || $ev eq 'Running';
+       $gotrun = 1;
+       next if $ev eq 'Running';
+
+       logit $_,$dag;
+}
+
+
diff --git a/org.glite.jp/examples/pch06/convert b/org.glite.jp/examples/pch06/convert
new file mode 100644 (file)
index 0000000..432407f
Binary files /dev/null and b/org.glite.jp/examples/pch06/convert differ
diff --git a/org.glite.jp/examples/pch06/convert.sh b/org.glite.jp/examples/pch06/convert.sh
new file mode 100644 (file)
index 0000000..70b4511
--- /dev/null
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+log_event() #1 - attr.name #2 attr.value
+{
+  GLITE_WMS_SEQUENCE_CODE=`$lb_logevent\
+    --jobid="$GLITE_WMS_JOBID"\
+    --source="Application"\
+    --sequence="$GLITE_WMS_SEQUENCE_CODE"\
+    --event="UserTag"\
+    --node=$host\
+    --name="$1"\
+    --value="$2"\
+  || echo $GLITE_WMS_SEQUENCE_CODE`
+}
+
+init_log_event()
+{
+  lb_logevent=${GLITE_WMS_LOCATION}/bin/glite-lb-logevent
+  if [ ! -x "$lb_logevent" ]; then
+    lb_logevent="${EDG_WL_LOCATION}/bin/edg-wl-logev"
+  fi
+  host=`hostname -f`
+}
+
+
+set -ex
+
+hostname -f
+date
+echo $0 $*
+
+globus-url-copy $1-$2.pgm file://$PWD/atlas.pgm
+
+chmod +x convert
+./convert atlas.pgm atlas.gif
+
+globus-url-copy file://$PWD/atlas.gif $1-$2.gif
+
+
+# Log LB user_tags
+init_log_event
+log_event "IPAW_STAGE" "5"
+log_event "IPAW_PROGRAM" "convert"
+log_event "IPAW_INPUT" "$1-$2.pgm"
+log_event "IPAW_OUTPUT" "$1-$2.gif"
+
diff --git a/org.glite.jp/examples/pch06/delegates.xml b/org.glite.jp/examples/pch06/delegates.xml
new file mode 100644 (file)
index 0000000..d73c17a
--- /dev/null
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE delegatemap [
+  <!ELEMENT delegatemap (delegate+)>
+  <!ELEMENT delegate (#PCDATA)>
+  <!ATTLIST delegate decode CDATA #IMPLIED>
+  <!ATTLIST delegate encode CDATA #IMPLIED>
+  <!ATTLIST delegate mode CDATA #IMPLIED>
+  <!ATTLIST delegate spawn CDATA #IMPLIED>
+  <!ATTLIST delegate stealth CDATA #IMPLIED>
+  <!ATTLIST delegate command CDATA #REQUIRED>
+]>
+<!--
+  Delegate command file.
+
+  Commands which specify
+
+    decode="in_format" encode="out_format"
+
+  specify the rules for converting from in_format to out_format These
+  rules may be used to translate directly between formats.
+
+  Commands which specify only
+
+    decode="in_format"
+
+  specify the rules for converting from in_format to some format that
+  ImageMagick will automatically recognize. These rules are used to
+  decode formats.
+
+  Commands which specify only
+
+   encode="out_format"
+
+  specify the rules for an "encoder" which may accept any input format.
+
+  For delegates other than ps:alpha, ps:color, ps:cmyk, ps:mono, pcl-color,
+  pcl-cmyk, pcl-mono, and mpeg-encode the substitution rules are as follows:
+
+    %i  input image filename
+    %o  output image filename
+    %u  unique temporary filename
+    %z  secondary unique temporary filename
+
+    %#  input image signature
+    %b  image file size
+    %c  input image comment
+    %g  window group
+    %h  image rows (height)
+    %k  input image number colors
+    %m  input image format
+    %p  page number
+    %q  input image depth
+    %s  scene number
+    %w  image columns (width)
+    %x  input image x resolution
+    %y  input image y resolution
+
+-->
+<delegatemap>
+  <delegate decode="autotrace" stealth="True" command='"autotrace" -output-format svg -output-file "%o" "%i"' />
+  <delegate decode="browse" stealth="True" spawn="True" command='"htmlview" http://www.imagemagick.org/'  />
+  <delegate decode="cgm" thread-support="False" command='"ralcgm" -d ps -oC &lt; "%i" &gt; "%o" 2>/dev/null' />
+  <delegate decode="cr2" thread-support="False" command='"dcraw" -3 -w -c "%i" &gt; "%o"' />
+  <delegate decode="crw" thread-support="False" command='"dcraw" -3 -w -c "%i" &gt; "%o"' />
+  <delegate decode="dcr" thread-support="False" command='"dcraw" -3 -w -c "%i" &gt; "%o"' />
+  <delegate decode="mrw" thread-support="False" command='"dcraw" -3 -w -c "%i" &gt; "%o"' />
+  <delegate decode="nef" thread-support="False" command='"dcraw" -3 -w -c "%i" &gt; "%o"' />
+  <delegate decode="orf" thread-support="False" command='"dcraw" -3 -w -c "%i" &gt; "%o"' />
+  <delegate decode="raf" thread-support="False" command='"dcraw" -3 -w -c "%i" &gt; "%o"' />
+  <delegate decode="x3f" thread-support="False" command='"dcraw" -3 -w -c "%i" &gt; "%o"' />
+  <delegate decode="dvi" command='"dvips" -R -q -o "%o" "%i"' />
+  <delegate decode="edit" stealth="True" command='"xterm" -title "Edit Image Comment" -e vi "%o"' />
+  <delegate decode="eps" encode="pdf" mode="bi" command='"gs" -q -dBATCH -dSAFER -dMaxBitmap=500000000 -dNOPAUSE -dAlignToPixels=0 -dEPSCrop -sDEVICE="pdfwrite" -sOutputFile="%o" -f"%i"' />
+  <delegate decode="eps" encode="ps" mode="bi" command='"gs" -q -dBATCH -dSAFER -dMaxBitmap=500000000 -dNOPAUSE -dAlignToPixels=0 -dEPSCrop -sDEVICE="pswrite" -sOutputFile="%o" -f"%i"' />
+  <delegate decode="fig" command='"fig2dev" -L ps "%i" "%o"' />
+  <delegate decode="gplt" command='"echo" "set size 1.25,0.62
+    set terminal postscript portrait color solid; set output "%o"; load "%i"" &gt; "%u";"gnuplot" "%u"' />
+  <delegate decode="ps:alpha" stealth="True" command='"gs" -q -dBATCH -dSAFER -dMaxBitmap=500000000 -dNOPAUSE -dAlignToPixels=0 -dEPSCrop "-sDEVICE=pnmraw" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-g%s" "-r%s" %s "-sOutputFile=%s" "-f%s" "-f%s"' />
+  <delegate decode="ps:color" stealth="True" command='"gs" -q -dBATCH -dSAFER -dMaxBitmap=500000000 -dNOPAUSE -dAlignToPixels=0 -dEPSCrop "-sDEVICE=pnmraw" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-g%s" "-r%s" %s "-sOutputFile=%s" "-f%s" "-f%s"' />
+  <delegate decode="ps:cmyk" stealth="True" command='"gs" -q -dBATCH -dSAFER -dMaxBitmap=500000000 -dNOPAUSE -dAlignToPixels=0 -dEPSCrop "-sDEVICE=bmpsep8" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-g%s" "-r%s" %s "-sOutputFile=%s" "-f%s" "-f%s"' />
+  <delegate decode="ps:mono" stealth="True" command='"gs" -q -dBATCH -dSAFER -dMaxBitmap=500000000 -dNOPAUSE -dAlignToPixels=0 -dEPSCrop "-sDEVICE=pbmraw" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-g%s" "-r%s" %s "-sOutputFile=%s" "-f%s" "-f%s"' />
+  <delegate decode="hpg" command='"hp2xx" -q -m eps -f `basename "%o"` "%i"
+    mv -f `basename "%o"` "%o"' />
+  <delegate decode="hpgl" command='if [ -e hp2xx -o -e /usr/bin/hp2xx ]; then
+    hp2xx -q -m eps -f `basename "%o"` "%i"
+    mv -f `basename "%o"` "%o
+  else
+    echo "You need to install hp2xx to use HPGL files with ImageMagick."
+    exit 1
+  fi' />
+  <delegate decode="htm" command='"html2ps" -U -o "%o" "%i"' />
+  <delegate decode="html" command='"html2ps" -U -o "%o" "%i"' />
+  <delegate decode="https" command='"wget" -q -O "%o" "https:%M"' />
+  <delegate decode="ilbm" command='"ilbmtoppm" "%i" &gt; "%o"' />
+  <delegate decode="man" command='"groff" -man -Tps "%i" &gt; "%o"' />
+  <delegate decode="mpeg-decode" stealth="True" command='"mpeg2decode" -q -b "%i" -f -r -o3 "%u%%d"' />
+  <delegate encode="mpeg-encode" stealth="True" command='"mpeg2encode" "%i" "%o"' />
+  <delegate decode="pcl-color" stealth="True" command='"pcl6" -dBATCH -dSAFER -dMaxBitmap=500000000 -dNOPAUSE -dAlignToPixels=0 -dEPSCrop "-sDEVICE=ppmraw" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-g%s" "-r%s" %s "-sOutputFile=%s" "%s"' />
+  <delegate decode="pcl-cmyk" stealth="True" command='"pcl6" -dBATCH -dSAFER -dMaxBitmap=500000000 -dNOPAUSE -dAlignToPixels=0 -dEPSCrop "-sDEVICE=bmpsep8" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-g%s" "-r%s" %s "-sOutputFile=%s" "%s"' />
+  <delegate decode="pcl-mono" stealth="True" command='"pcl6" -dBATCH -dSAFER -dMaxBitmap=500000000 -dNOPAUSE -dAlignToPixels=0 -dEPSCrop "-sDEVICE=pbmraw" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-g%s" "-r%s" %s "-sOutputFile=%s" "%s"' />
+  <delegate decode="pdf" encode="eps" mode="bi" command='"gs" -q -dBATCH -dSAFER -dMaxBitmap=500000000 -dNOPAUSE -dAlignToPixels=0 -dEPSCrop -sDEVICE="epswrite" -sOutputFile="%o" -f"%i"' />
+  <delegate decode="pdf" encode="ps" mode="bi" command='"gs" -q -dBATCH -dSAFER -dMaxBitmap=500000000 -dNOPAUSE -dAlignToPixels=0 -dEPSCrop -sDEVICE="pswrite" -sOutputFile="%o" -f"%i"' />
+  <delegate decode="pnm" encode="ilbm" mode="encode" command='"ppmtoilbm" -24if "%i" &gt; "%o"' />
+  <delegate decode="pnm" encode="launch" mode="encode" command='"gimp" "%i"' />
+  <delegate decode="miff" encode="win" mode="encode" command='"/usr/local/bin/display" -immutable "%i"' />
+  <delegate decode="pov" command='"povray" "+i"%i"" -D0 +o"%o" +fn%q +w%w +h%h +a -q9 -kfi"%s" -kff"%n"
+    "convert" -concatenate "%o*.png" "%o"' />
+  <delegate decode="ps" encode="eps" mode="bi" command='"gs" -q -dBATCH -dSAFER -dMaxBitmap=500000000 -dNOPAUSE -dAlignToPixels=0 -dEPSCrop -sDEVICE="epswrite" -sOutputFile="%o" -f"%i"' />
+  <delegate decode="ps" encode="pdf" mode="bi" command='"gs" -q -dBATCH -dSAFER -dMaxBitmap=500000000 -dNOPAUSE -dAlignToPixels=0 -dEPSCrop -sDEVICE="pdfwrite" -sOutputFile="%o" -f"%i"' />
+  <delegate decode="ps" encode="print" mode="encode" command='lpr "%i"' />
+  <delegate decode="rad" command='"ra_ppm" -g 1.0 "%i" "%o"' />
+  <delegate decode="rgba" encode="rle" mode="encode" command='"modify" -flip -size %wx%h "rgba:%i"
+    "rawtorle" -w %w -h %h -n 4 -o "%o" "%i"' />
+  <delegate decode="scan" command='"scanimage" -d "%i" &gt; "%o"' />
+  <delegate decode="shtml" command='"html2ps" -U -o "%o" "%i"' />
+  <delegate decode="svg" command='"wmf2svg" -o "%o" "%i"' />
+  <delegate decode="txt" encode="ps" mode="bi" command='"enscript" -o "%o" "%i"' />
+  <delegate decode="wmf" command='"wmf2svg" -o "%o" "%i"' />
+  <delegate encode="show" stealth="True" spawn="True" command='"/usr/local/bin/display" -immutable -delay 0 -window_group %g -title "%l of %f" "tmp:%i"' />
+</delegatemap>
diff --git a/org.glite.jp/examples/pch06/dump1 b/org.glite.jp/examples/pch06/dump1
new file mode 100644 (file)
index 0000000..12f83e9
--- /dev/null
@@ -0,0 +1,312 @@
+DG.ARRIVED=20060831134044.000000 DATE=20060831134044.215599 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="[ Requirements = other.GlueCEInfoHostname == \"skurut17.cesnet.cz\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig\"; nodes = [ slicery = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; converty = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; softmean = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; AllowZippedISB = true; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; CertificateSubject = \"/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera\"; X509UserProxy = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/user.proxy\"; VOMS_FQAN = \"/voce/Role=NULL/Capability=NULL\"; LB_sequence_code = \"UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; InputSandboxPath = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/input\"; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="" DG.REGJOB.JOBTYPE="DAG" DG.REGJOB.NSUBJOBS="15" DG.REGJOB.SEED="WMPROXY" 
+DG.ARRIVED=20060831134122.000000 DATE=20060831134115.302161 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="[ Requirements = other.GlueCEInfoHostname == \"skurut17.cesnet.cz\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig\"; nodes = [ slicery = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; converty = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; softmean = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; AllowZippedISB = true; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; CertificateSubject = \"/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera\"; X509UserProxy = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/user.proxy\"; VOMS_FQAN = \"/voce/Role=NULL/Capability=NULL\"; LB_sequence_code = \"UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; InputSandboxPath = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/input\"; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="" DG.REGJOB.JOBTYPE="DAG" DG.REGJOB.NSUBJOBS="15" DG.REGJOB.SEED="WMPROXY" 
+DG.ARRIVED=20060831134214.000000 DATE=20060831134133.825791 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.SEQCODE="UI=000000:NS=0000000003:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="(null)" DG.USERTAG.NAME="delegation_id" DG.USERTAG.VALUE="JEd3B7HE3Ki76xlE93tNXg" 
+DG.ARRIVED=20060831134216.000000 DATE=20060831134134.156434 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.SEQCODE="UI=000000:NS=0000000004:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="(null)" DG.USERTAG.NAME="jdl_original" DG.USERTAG.VALUE="[ Requirements = other.GlueCEInfoHostname == \"skurut17.cesnet.cz\"; nodes = [ slicery = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla y\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; slicerx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla x\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; reslice4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; converty = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla y\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; align1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; reslice3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; convertx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla x\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; softmean = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; align2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; reslice2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; align3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; reslice1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; align4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; convertz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla z\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; slicerz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla z\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; AllowZippedISB = true; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" 
+DG.ARRIVED=20060831134217.000000 DATE=20060831134134.675834 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.SEQCODE="UI=000000:NS=0000000005:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="(null)" DG.USERTAG.NAME="lb_sequence_code" DG.USERTAG.VALUE="UI=000000:NS=0000000005:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" 
+DG.ARRIVED=20060831134220.000000 DATE=20060831134135.487909 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.SEQCODE="UI=000000:NS=0000000006:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.ACCEPTED.FROM="NetworkServer" DG.ACCEPTED.FROM_HOST="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.ACCEPTED.FROM_INSTANCE="" DG.ACCEPTED.LOCAL_JOBID="" 
+DG.ARRIVED=20060831134221.000000 DATE=20060831134135.841337 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="EnQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.SEQCODE="UI=000000:NS=0000000007:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.ENQUEUED.QUEUE="/var/glite/workload_manager/input.fl" DG.ENQUEUED.JOB="[ Requirements = other.GlueCEInfoHostname == \"skurut17.cesnet.cz\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig\"; nodes = [ slicery = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; converty = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; softmean = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; AllowZippedISB = true; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; CertificateSubject = \"/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera\"; X509UserProxy = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/user.proxy\"; VOMS_FQAN = \"/voce/Role=NULL/Capability=NULL\"; LB_sequence_code = \"UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; InputSandboxPath = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/input\"; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" DG.ENQUEUED.RESULT="START" DG.ENQUEUED.REASON="" 
+DG.ARRIVED=20060831134223.000000 DATE=20060831134136.439997 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="EnQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.SEQCODE="UI=000000:NS=0000000008:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.ENQUEUED.QUEUE="/var/glite/workload_manager/input.fl" DG.ENQUEUED.JOB="[ Requirements = other.GlueCEInfoHostname == \"skurut17.cesnet.cz\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig\"; nodes = [ slicery = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; converty = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; softmean = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; AllowZippedISB = true; CertificateSubject = \"/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera\"; X509UserProxy = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/user.proxy\"; VOMS_FQAN = \"/voce/Role=NULL/Capability=NULL\"; InputSandboxPath = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/input\"; LB_sequence_code = \"UI=000000:NS=0000000008:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" DG.ENQUEUED.RESULT="OK" DG.ENQUEUED.REASON="" 
+DG.ARRIVED=20060831134225.000000 DATE=20060831134137.337853 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="27876" DG.EVNT="DeQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.SEQCODE="UI=000000:NS=0000000008:WM=000001:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.DEQUEUED.QUEUE="/var/glite/workload_manager/input.fl" DG.DEQUEUED.LOCAL_JOBID="" 
+DG.ARRIVED=20060831134303.000000 DATE=20060831134302.473834 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="27876" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.SEQCODE="UI=000000:NS=0000000008:WM=000002:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="dagman" 
+DG.ARRIVED=20060831134305.000000 DATE=20060831134302.838146 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="27876" DG.EVNT="EnQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.SEQCODE="UI=000000:NS=0000000008:WM=000003:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.ENQUEUED.QUEUE="/var/glite/jobcontrol/queue.fl" DG.ENQUEUED.JOB="" DG.ENQUEUED.RESULT="START" DG.ENQUEUED.REASON="unavailable" 
+DG.ARRIVED=20060831134306.000000 DATE=20060831134303.199901 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="27876" DG.EVNT="EnQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.ENQUEUED.QUEUE="/var/glite/jobcontrol/queue.fl" DG.ENQUEUED.JOB="[ Arguments = [ JobAd = [ edg_jobid = \"https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig\"; Arguments = \"-f -l /var/glite/jobcontrol/submit/3f/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig -NoEventChecks -Debug 0 -Lockfile dag_description.con.lock -Dag /var/glite/jobcontrol/submit/3f/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/dag_description.con -Rescue /var/glite/jobcontrol/submit/3f/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/dag_description.con.rescue -maxpre 10 -Condorlog /var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log\"; environment = \"_CONDOR_DAGMAN_LOG=/var/glite/jobcontrol/condorio/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/dag.dagman.out;_CONDOR_MAX_DAGMAN_LOG=0\"; ce_id = \"dagman\"; Output = \"/var/glite/jobcontrol/condorio/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/dag.lib.out\"; Executable = \"/opt/condor-6.7.10/bin/condor_dagman\"; Getenv = true; X509UserProxy = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/user.proxy\"; Error_ = \"/var/glite/jobcontrol/condorio/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/dag.lib.out\"; LB_sequence_code = \"UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; Type = \"dag\"; Universe = \"scheduler\"; Remove_Kill_Sig = \"SIGUSR1\" ] ]; Command = \"Submit\"; Source = 2; Protocol = \"1.0.0\" ]" DG.ENQUEUED.RESULT="OK" DG.ENQUEUED.REASON="unavailable" 
+DG.ARRIVED=20060831134308.000000 DATE=20060831134304.949623 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="JobController" DG.SRC_INSTANCE="unique" DG.EVNT="DeQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000001:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.DEQUEUED.QUEUE="/var/glite/jobcontrol/queue.fl" DG.DEQUEUED.LOCAL_JOBID="unavailable" 
+DG.ARRIVED=20060831134309.000000 DATE=20060831134305.336039 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="JobController" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000002:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.TRANSFER.DESTINATION="LogMonitor" DG.TRANSFER.DEST_HOST="localhost" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log" DG.TRANSFER.JOB="unavailable" DG.TRANSFER.RESULT="START" DG.TRANSFER.REASON="unavailable" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831134312.000000 DATE=20060831134307.661117 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="JobController" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.TRANSFER.DESTINATION="LogMonitor" DG.TRANSFER.DEST_HOST="localhost" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log" DG.TRANSFER.JOB="+edg_jobid = \"https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig\"\nArguments = -f -l /var/glite/jobcontrol/submit/3f/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig -NoEventChecks -Debug 0 -Lockfile dag_description.con.lock -Dag /var/glite/jobcontrol/submit/3f/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/dag_description.con -Rescue /var/glite/jobcontrol/submit/3f/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/dag_description.con.rescue -maxpre 10 -Condorlog /var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log\nenvironment = _CONDOR_DAGMAN_LOG=/var/glite/jobcontrol/condorio/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/dag.dagman.out;_CONDOR_MAX_DAGMAN_LOG=0\n+ce_id = \"dagman\"\nOutput = /var/glite/jobcontrol/condorio/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/dag.lib.out\nSubmit_Event_Notes = DAG job: (https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig) (UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000000:LRMS=000000:APP=000000)\nExecutable = /opt/condor-6.7.10/bin/condor_dagman\nGetenv = True\nX509UserProxy = /var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/user.proxy\nerror = /var/glite/jobcontrol/condorio/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig/dag.lib.out\n+LB_sequence_code = \"UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000000:LRMS=000000:APP=000000\"\n+Type = \"dag\"\nUniverse = scheduler\nRemove_Kill_Sig = SIGUSR1\nLog = /var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log\n+CondorSubmitFile = \"/var/glite/jobcontrol/submit/3f/Condor.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.submit\"\nQueue 1\n" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="unavailable" DG.TRANSFER.DEST_JOBID="9757" 
+DG.ARRIVED=20060831134319.000000 DATE=20060831134313.404204 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000001:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9757" 
+DG.ARRIVED=20060831134322.000000 DATE=20060831134313.700052 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000003:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.RUNNING.NODE="<195.113.219.12:20194>" 
+DG.ARRIVED=20060831143019.000000 DATE=20060831143019.146435 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000005:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831134049.000000 DATE=20060831134045.680474 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134126.000000 DATE=20060831134123.575263 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134209.000000 DATE=20060831134126.304876 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/4f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f4f30RahamYHsmvuvX501Mw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831140021.000000 DATE=20060831140017.608502 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="14201" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831140032.000000 DATE=20060831140031.761777 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="14201" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060831140133.000000 DATE=20060831140032.019788 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="14201" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831140133.000000 DATE=20060831140040.406440 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9764" 
+DG.ARRIVED=20060831140134.000000 DATE=20060831140058.653829 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831140352.000000 DATE=20060831140351.727362 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060831140406.000000 DATE=20060831140207.335428 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060831140407.000000 DATE=20060831140250.200325 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="2" 
+DG.ARRIVED=20060831140408.000000 DATE=20060831140250.533859 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="reslice" 
+DG.ARRIVED=20060831140409.000000 DATE=20060831140250.809459 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4.warp" 
+DG.ARRIVED=20060831140411.000000 DATE=20060831140251.163968 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4.img" 
+DG.ARRIVED=20060831140412.000000 DATE=20060831140251.666129 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4.hdr" 
+DG.ARRIVED=20060831140413.000000 DATE=20060831140252.212529 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4-resliced.img" 
+DG.ARRIVED=20060831140415.000000 DATE=20060831140252.516077 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4-resliced.img" 
+DG.ARRIVED=20060831140417.000000 DATE=20060831140252.951718 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831140613.000000 DATE=20060831140613.585181 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060831140615.000000 DATE=20060831140613.833818 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/4f30RahamYHsmvuvX501Mw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831134045.000000 DATE=20060831134045.680474 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134123.000000 DATE=20060831134123.575263 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134213.000000 DATE=20060831134127.048575 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/G8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fG8IWJ3SB4bmG3Y-kkbx9vg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831141700.000000 DATE=20060831141700.180432 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="21444" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831141725.000000 DATE=20060831141724.616105 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="21444" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060831141725.000000 DATE=20060831141724.929130 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="21444" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831141733.000000 DATE=20060831141731.883747 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9770" 
+DG.ARRIVED=20060831141751.000000 DATE=20060831141750.174981 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831142105.000000 DATE=20060831141916.514165 HOST="skurut9.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.RUNNING.NODE="skurut9.cesnet.cz" 
+DG.ARRIVED=20060831142115.000000 DATE=20060831141952.038993 HOST="skurut9.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="4" 
+DG.ARRIVED=20060831142116.000000 DATE=20060831141952.763383 HOST="skurut9.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="slicer" 
+DG.ARRIVED=20060831142117.000000 DATE=20060831141953.109945 HOST="skurut9.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla.hdr" 
+DG.ARRIVED=20060831142118.000000 DATE=20060831141953.415257 HOST="skurut9.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla.img" 
+DG.ARRIVED=20060831142119.000000 DATE=20060831141953.695565 HOST="skurut9.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla-y.pgm" 
+DG.ARRIVED=20060831142121.000000 DATE=20060831141954.089777 HOST="skurut9.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831142200.000000 DATE=20060831142158.703291 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060831142323.000000 DATE=20060831142323.159626 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060831142324.000000 DATE=20060831142323.406105 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/G8IWJ3SB4bmG3Y-kkbx9vg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831134057.000000 DATE=20060831134045.680474 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134134.000000 DATE=20060831134123.575263 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134157.000000 DATE=20060831134124.084513 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Go/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fGo1mU5-6TK6Xv4kHBMQh_5fQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831134315.000000 DATE=20060831134307.962467 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6588" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831134333.000000 DATE=20060831134333.185399 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6588" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060831134334.000000 DATE=20060831134333.622177 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6588" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831134339.000000 DATE=20060831134338.973524 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9759" 
+DG.ARRIVED=20060831134358.000000 DATE=20060831134357.778584 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831135846.000000 DATE=20060831135650.503368 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060831135847.000000 DATE=20060831135728.347031 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="1" 
+DG.ARRIVED=20060831135848.000000 DATE=20060831135729.031486 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="align_warp" 
+DG.ARRIVED=20060831135850.000000 DATE=20060831135849.814774 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060831135852.000000 DATE=20060831135729.401351 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2.img" 
+DG.ARRIVED=20060831135855.000000 DATE=20060831135729.710618 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference.img" 
+DG.ARRIVED=20060831135857.000000 DATE=20060831135730.000217 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2.warp" 
+DG.ARRIVED=20060831135858.000000 DATE=20060831135730.434629 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-m 12" 
+DG.ARRIVED=20060831135900.000000 DATE=20060831135730.900178 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-q" 
+DG.ARRIVED=20060831135901.000000 DATE=20060831135731.523197 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000015" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_header" DG.USERTAG.VALUE="GLOBAL_MAXIMUM=" 
+DG.ARRIVED=20060831135904.000000 DATE=20060831135732.143125 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831140138.000000 DATE=20060831140123.392312 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060831140141.000000 DATE=20060831140123.685647 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/Go1mU5-6TK6Xv4kHBMQh_Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831134059.000000 DATE=20060831134045.680474 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134135.000000 DATE=20060831134123.575263 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134154.000000 DATE=20060831134123.726086 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/I0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fI0Jh1NYt4VYVBpzcXmkU2A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831140136.000000 DATE=20060831140123.056666 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="14682" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831140153.000000 DATE=20060831140137.176267 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="14682" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060831140154.000000 DATE=20060831140137.425748 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="14682" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831140157.000000 DATE=20060831140148.720169 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9765" 
+DG.ARRIVED=20060831140208.000000 DATE=20060831140207.664985 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831140420.000000 DATE=20060831140314.038296 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060831140421.000000 DATE=20060831140400.711454 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="2" 
+DG.ARRIVED=20060831140422.000000 DATE=20060831140401.073850 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="reslice" 
+DG.ARRIVED=20060831140424.000000 DATE=20060831140401.402241 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2.warp" 
+DG.ARRIVED=20060831140425.000000 DATE=20060831140401.679455 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2.img" 
+DG.ARRIVED=20060831140426.000000 DATE=20060831140402.060125 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2.hdr" 
+DG.ARRIVED=20060831140427.000000 DATE=20060831140402.373467 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2-resliced.img" 
+DG.ARRIVED=20060831140429.000000 DATE=20060831140402.690396 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2-resliced.img" 
+DG.ARRIVED=20060831140431.000000 DATE=20060831140403.399549 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831140453.000000 DATE=20060831140453.439969 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060831140809.000000 DATE=20060831140809.259995 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060831140811.000000 DATE=20060831140809.498118 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/I0Jh1NYt4VYVBpzcXmkU2A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831134101.000000 DATE=20060831134045.680474 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134136.000000 DATE=20060831134123.575263 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134152.000000 DATE=20060831134123.178909 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/In/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fInJJ60jN0wDygHUfueSwCw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831134318.000000 DATE=20060831134307.987863 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6589" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831134414.000000 DATE=20060831134413.357998 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6589" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060831134414.000000 DATE=20060831134413.886040 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6589" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831134417.000000 DATE=20060831134416.557353 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9760" 
+DG.ARRIVED=20060831134443.000000 DATE=20060831134441.720322 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831135922.000000 DATE=20060831135758.793578 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060831135922.000000 DATE=20060831135836.007691 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="1" 
+DG.ARRIVED=20060831135923.000000 DATE=20060831135836.361695 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="align_warp" 
+DG.ARRIVED=20060831135925.000000 DATE=20060831135836.951954 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3.img" 
+DG.ARRIVED=20060831135927.000000 DATE=20060831135837.449522 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference.img" 
+DG.ARRIVED=20060831135929.000000 DATE=20060831135838.010449 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3.warp" 
+DG.ARRIVED=20060831135930.000000 DATE=20060831135838.292254 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-m 12" 
+DG.ARRIVED=20060831135932.000000 DATE=20060831135838.596728 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-q" 
+DG.ARRIVED=20060831135933.000000 DATE=20060831135841.090419 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000015" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_header" DG.USERTAG.VALUE="GLOBAL_MAXIMUM=" 
+DG.ARRIVED=20060831135935.000000 DATE=20060831135842.197544 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831135951.000000 DATE=20060831135950.577097 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060831140214.000000 DATE=20060831140213.989508 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060831140216.000000 DATE=20060831140214.282320 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/InJJ60jN0wDygHUfueSwCw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831134106.000000 DATE=20060831134045.680474 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134137.000000 DATE=20060831134123.575263 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134150.000000 DATE=20060831134122.780787 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/KQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKQi8TcC2wGKo5k2Qpt0I8A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831140137.000000 DATE=20060831140123.115398 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="14683" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831140159.000000 DATE=20060831140148.744611 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="14683" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060831140204.000000 DATE=20060831140149.158384 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="14683" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831140205.000000 DATE=20060831140155.379842 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9766" 
+DG.ARRIVED=20060831140217.000000 DATE=20060831140214.599231 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831140421.000000 DATE=20060831140331.951828 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060831140433.000000 DATE=20060831140417.552080 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="2" 
+DG.ARRIVED=20060831140434.000000 DATE=20060831140418.679791 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="reslice" 
+DG.ARRIVED=20060831140435.000000 DATE=20060831140419.044665 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1.warp" 
+DG.ARRIVED=20060831140436.000000 DATE=20060831140419.347205 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1.img" 
+DG.ARRIVED=20060831140437.000000 DATE=20060831140419.704948 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1.hdr" 
+DG.ARRIVED=20060831140439.000000 DATE=20060831140419.987370 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1-resliced.img" 
+DG.ARRIVED=20060831140440.000000 DATE=20060831140420.228647 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1-resliced.img" 
+DG.ARRIVED=20060831140442.000000 DATE=20060831140420.570874 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831140549.000000 DATE=20060831140548.952363 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060831140714.000000 DATE=20060831140714.197107 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060831140716.000000 DATE=20060831140714.602662 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/KQi8TcC2wGKo5k2Qpt0I8A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831134053.000000 DATE=20060831134045.680474 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134129.000000 DATE=20060831134123.575263 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134203.000000 DATE=20060831134125.131082 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/QC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQCnhv-qd6YVYy7Ct15isCA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831140219.000000 DATE=20060831140214.672615 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="15000" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831140227.000000 DATE=20060831140226.938569 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="15000" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060831140228.000000 DATE=20060831140227.200962 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="15000" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831140233.000000 DATE=20060831140233.001754 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9767" 
+DG.ARRIVED=20060831140245.000000 DATE=20060831140245.346447 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831140444.000000 DATE=20060831140432.367997 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060831140550.000000 DATE=20060831140549.245803 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060831140646.000000 DATE=20060831140516.623924 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="2" 
+DG.ARRIVED=20060831140647.000000 DATE=20060831140517.031973 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="reslice" 
+DG.ARRIVED=20060831140648.000000 DATE=20060831140517.314902 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3.warp" 
+DG.ARRIVED=20060831140649.000000 DATE=20060831140517.555135 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3.img" 
+DG.ARRIVED=20060831140651.000000 DATE=20060831140517.844631 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3.hdr" 
+DG.ARRIVED=20060831140652.000000 DATE=20060831140518.166567 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3-resliced.img" 
+DG.ARRIVED=20060831140654.000000 DATE=20060831140518.470829 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3-resliced.img" 
+DG.ARRIVED=20060831140656.000000 DATE=20060831140519.094552 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831140910.000000 DATE=20060831140910.012112 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060831140912.000000 DATE=20060831140910.238923 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/QCnhv-qd6YVYy7Ct15isCA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831134111.000000 DATE=20060831134045.680474 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134141.000000 DATE=20060831134123.575263 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134144.000000 DATE=20060831134121.267976 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/QJ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQJZ4QRet6oWBglggm-0TOg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831141703.000000 DATE=20060831141700.220213 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="21445" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831141711.000000 DATE=20060831141710.877962 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="21445" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060831141712.000000 DATE=20060831141711.233710 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="21445" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831141719.000000 DATE=20060831141719.019302 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9769" 
+DG.ARRIVED=20060831141732.000000 DATE=20060831141731.384424 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831141903.000000 DATE=20060831141903.266054 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060831142058.000000 DATE=20060831142058.130877 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060831142106.000000 DATE=20060831141936.346501 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="4" 
+DG.ARRIVED=20060831142107.000000 DATE=20060831141936.773822 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="slicer" 
+DG.ARRIVED=20060831142108.000000 DATE=20060831141937.077522 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla.hdr" 
+DG.ARRIVED=20060831142111.000000 DATE=20060831141937.441055 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla.img" 
+DG.ARRIVED=20060831142112.000000 DATE=20060831141937.763201 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla-z.pgm" 
+DG.ARRIVED=20060831142113.000000 DATE=20060831141938.382060 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831142326.000000 DATE=20060831142323.698884 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060831142328.000000 DATE=20060831142323.998797 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/QJZ4QRet6oWBglggm-0TOg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831134054.000000 DATE=20060831134045.680474 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134132.000000 DATE=20060831134123.575263 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134201.000000 DATE=20060831134124.804732 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Qc/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQc_5fQKKVAjdJchxjIOkia9A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831142424.000000 DATE=20060831142420.697645 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="24477" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831142453.000000 DATE=20060831142453.230558 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="24477" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060831142454.000000 DATE=20060831142453.519786 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="24477" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831142457.000000 DATE=20060831142456.588653 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9774" 
+DG.ARRIVED=20060831142515.000000 DATE=20060831142514.913697 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831142722.000000 DATE=20060831142603.567810 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060831142723.000000 DATE=20060831142619.846123 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="5" 
+DG.ARRIVED=20060831142724.000000 DATE=20060831142620.112848 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="convert" 
+DG.ARRIVED=20060831142725.000000 DATE=20060831142620.419079 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla-x.pgm" 
+DG.ARRIVED=20060831142727.000000 DATE=20060831142620.696265 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla-x.gif" 
+DG.ARRIVED=20060831142729.000000 DATE=20060831142620.991186 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831142759.000000 DATE=20060831142758.190030 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060831143012.000000 DATE=20060831143012.496418 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060831143014.000000 DATE=20060831143012.801435 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/Qc_QKKVAjdJchxjIOkia9A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831134107.000000 DATE=20060831134045.680474 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134138.000000 DATE=20060831134123.575263 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134148.000000 DATE=20060831134122.441223 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/bw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbwFcsOFZWTt0KIm7FKMThw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831134317.000000 DATE=20060831134307.994889 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6590" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831134323.000000 DATE=20060831134317.088815 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6590" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060831134324.000000 DATE=20060831134317.367883 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6590" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831134326.000000 DATE=20060831134326.023027 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9758" 
+DG.ARRIVED=20060831134351.000000 DATE=20060831134351.438262 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831135628.000000 DATE=20060831135601.019358 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060831135749.000000 DATE=20060831135748.841954 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060831135829.000000 DATE=20060831135637.124074 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="1" 
+DG.ARRIVED=20060831135831.000000 DATE=20060831135637.701352 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="align_warp" 
+DG.ARRIVED=20060831135832.000000 DATE=20060831135639.388261 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4.img" 
+DG.ARRIVED=20060831135833.000000 DATE=20060831135640.896619 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference.img" 
+DG.ARRIVED=20060831135835.000000 DATE=20060831135641.399583 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4.warp" 
+DG.ARRIVED=20060831135838.000000 DATE=20060831135641.864256 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-m 12" 
+DG.ARRIVED=20060831135841.000000 DATE=20060831135642.211217 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-q" 
+DG.ARRIVED=20060831135843.000000 DATE=20060831135642.571914 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000015" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_header" DG.USERTAG.VALUE="GLOBAL_MAXIMUM=" 
+DG.ARRIVED=20060831135844.000000 DATE=20060831135642.930015 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831140016.000000 DATE=20060831140015.839442 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060831140018.000000 DATE=20060831140016.115412 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/bwFcsOFZWTt0KIm7FKMThw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831134047.000000 DATE=20060831134045.680474 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134124.000000 DATE=20060831134123.575263 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134211.000000 DATE=20060831134126.705397 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/du/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdui3MDOw4XfkJIXPOr-5Nw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831141702.000000 DATE=20060831141700.080799 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="21443" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831141750.000000 DATE=20060831141749.828632 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="21443" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060831141752.000000 DATE=20060831141750.627412 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="21443" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831141757.000000 DATE=20060831141757.041207 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9771" 
+DG.ARRIVED=20060831141815.000000 DATE=20060831141815.385896 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831142124.000000 DATE=20060831142000.085299 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060831142124.000000 DATE=20060831142031.794678 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="4" 
+DG.ARRIVED=20060831142125.000000 DATE=20060831142032.320867 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="slicer" 
+DG.ARRIVED=20060831142126.000000 DATE=20060831142032.602419 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla.hdr" 
+DG.ARRIVED=20060831142127.000000 DATE=20060831142032.882737 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla.img" 
+DG.ARRIVED=20060831142128.000000 DATE=20060831142033.157911 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla-x.pgm" 
+DG.ARRIVED=20060831142130.000000 DATE=20060831142033.454502 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831142158.000000 DATE=20060831142158.473370 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060831142419.000000 DATE=20060831142419.290579 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060831142421.000000 DATE=20060831142419.643594 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/dui3MDOw4XfkJIXPOr-5Nw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831134051.000000 DATE=20060831134045.680474 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134128.000000 DATE=20060831134123.575263 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134204.000000 DATE=20060831134125.483073 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/kV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fkVP2hUiLSSRrQVwSrzhrTA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831134316.000000 DATE=20060831134307.991116 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6587" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831134422.000000 DATE=20060831134422.152141 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6587" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060831134423.000000 DATE=20060831134422.403899 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6587" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831134429.000000 DATE=20060831134429.455719 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9761" 
+DG.ARRIVED=20060831134501.000000 DATE=20060831134500.401334 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831135847.000000 DATE=20060831135709.726003 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060831135853.000000 DATE=20060831135850.051710 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060831135906.000000 DATE=20060831135748.836053 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="1" 
+DG.ARRIVED=20060831135907.000000 DATE=20060831135749.161686 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="align_warp" 
+DG.ARRIVED=20060831135909.000000 DATE=20060831135749.453242 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1.img" 
+DG.ARRIVED=20060831135911.000000 DATE=20060831135749.756730 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reference.img" 
+DG.ARRIVED=20060831135912.000000 DATE=20060831135750.050006 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1.warp" 
+DG.ARRIVED=20060831135914.000000 DATE=20060831135750.364100 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-m 12" 
+DG.ARRIVED=20060831135917.000000 DATE=20060831135750.664521 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-q" 
+DG.ARRIVED=20060831135918.000000 DATE=20060831135750.952830 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000015" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_header" DG.USERTAG.VALUE="GLOBAL_MAXIMUM=" 
+DG.ARRIVED=20060831135920.000000 DATE=20060831135751.364544 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831140145.000000 DATE=20060831140123.969743 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060831140149.000000 DATE=20060831140124.185645 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/kVP2hUiLSSRrQVwSrzhrTA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831134056.000000 DATE=20060831134045.680474 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134133.000000 DATE=20060831134123.575263 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134159.000000 DATE=20060831134124.415316 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/pr/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fprP3QCwFm5dVADx5DfFl-A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831140910.000000 DATE=20060831140909.688968 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="17955" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831140947.000000 DATE=20060831140946.685273 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="17955" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060831140948.000000 DATE=20060831140946.912256 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="17955" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831140953.000000 DATE=20060831140952.560100 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9768" 
+DG.ARRIVED=20060831141005.000000 DATE=20060831141004.885027 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831141104.000000 DATE=20060831141104.415009 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060831141229.000000 DATE=20060831141229.459299 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060831141306.000000 DATE=20060831141216.148730 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="3" 
+DG.ARRIVED=20060831141307.000000 DATE=20060831141216.736665 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="softmean" 
+DG.ARRIVED=20060831141308.000000 DATE=20060831141217.251160 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1-resliced.img" 
+DG.ARRIVED=20060831141309.000000 DATE=20060831141217.528612 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy1-resliced.hdr" 
+DG.ARRIVED=20060831141311.000000 DATE=20060831141217.847286 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2-resliced.img" 
+DG.ARRIVED=20060831141312.000000 DATE=20060831141218.157616 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy2-resliced.hdr" 
+DG.ARRIVED=20060831141313.000000 DATE=20060831141218.434054 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3-resliced.img" 
+DG.ARRIVED=20060831141315.000000 DATE=20060831141218.707522 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000015" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy3-resliced.hdr" 
+DG.ARRIVED=20060831141317.000000 DATE=20060831141218.980416 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000017" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4-resliced.img" 
+DG.ARRIVED=20060831141318.000000 DATE=20060831141219.506677 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000019" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/anatomy4-resliced.hdr" 
+DG.ARRIVED=20060831141320.000000 DATE=20060831141219.817536 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000021" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla.img" 
+DG.ARRIVED=20060831141322.000000 DATE=20060831141220.054639 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000023" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla.hdr" 
+DG.ARRIVED=20060831141324.000000 DATE=20060831141220.494210 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831141701.000000 DATE=20060831141700.141916 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060831141704.000000 DATE=20060831141700.566816 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/prP3QCwFm5dVADx5DfFl-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831134109.000000 DATE=20060831134045.680474 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134140.000000 DATE=20060831134123.575263 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134146.000000 DATE=20060831134122.056014 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/s-/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs-WytXDHrOeHMRjuOOzY-A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831142329.000000 DATE=20060831142327.308332 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="24165" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831142357.000000 DATE=20060831142357.165295 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="24165" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060831142358.000000 DATE=20060831142357.485892 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="24165" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831142401.000000 DATE=20060831142400.666095 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9773" 
+DG.ARRIVED=20060831142422.000000 DATE=20060831142419.967218 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831142712.000000 DATE=20060831142522.474091 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060831142713.000000 DATE=20060831142539.235433 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="5" 
+DG.ARRIVED=20060831142714.000000 DATE=20060831142539.728283 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="convert" 
+DG.ARRIVED=20060831142715.000000 DATE=20060831142540.072394 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla-z.pgm" 
+DG.ARRIVED=20060831142717.000000 DATE=20060831142540.355770 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla-z.gif" 
+DG.ARRIVED=20060831142720.000000 DATE=20060831142540.658403 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831142758.000000 DATE=20060831142757.918710 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060831142917.000000 DATE=20060831142916.743859 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060831142919.000000 DATE=20060831142917.098127 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/s-WytXDHrOeHMRjuOOzY-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831134050.000000 DATE=20060831134045.680474 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134127.000000 DATE=20060831134123.575263 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831134206.000000 DATE=20060831134125.780713 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/t2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ft2YolMHYAHOtHsosU21yGw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/3fYyqqzjuOHbinsk9pWbig" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831142330.000000 DATE=20060831142327.290056 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="24164" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831142342.000000 DATE=20060831142340.887052 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="24164" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060831142343.000000 DATE=20060831142342.283829 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="24164" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831142348.000000 DATE=20060831142348.365514 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9772" 
+DG.ARRIVED=20060831142407.000000 DATE=20060831142406.940861 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fYyqqzjuOHbinsk9pWbig.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831142504.000000 DATE=20060831142503.244036 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060831142657.000000 DATE=20060831142657.376514 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060831142706.000000 DATE=20060831142519.487320 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="5" 
+DG.ARRIVED=20060831142707.000000 DATE=20060831142519.808302 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="convert" 
+DG.ARRIVED=20060831142708.000000 DATE=20060831142520.146083 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla-y.pgm" 
+DG.ARRIVED=20060831142710.000000 DATE=20060831142520.445475 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/sitera/pch06/blabla-y.gif" 
+DG.ARRIVED=20060831142711.000000 DATE=20060831142520.787596 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=University of West Bohemia/CN=Jiri Sitera" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831142924.000000 DATE=20060831142923.774893 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060831142925.000000 DATE=20060831142924.086335 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/t2YolMHYAHOtHsosU21yGw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
diff --git a/org.glite.jp/examples/pch06/dump2 b/org.glite.jp/examples/pch06/dump2
new file mode 100644 (file)
index 0000000..6fb362e
--- /dev/null
@@ -0,0 +1,312 @@
+DG.ARRIVED=20060829154002.000000 DATE=20060829154002.327119 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ Requirements = other.GlueCEInfoHostname == \"skurut17.cesnet.cz\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw\"; nodes = [ slicery = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; converty = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; softmean = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; AllowZippedISB = true; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; CertificateSubject = \"/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac\"; X509UserProxy = \"/var/glite/SandboxDir/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/user.proxy\"; VOMS_FQAN = \"/voce/Role=NULL/Capability=NULL\"; LB_sequence_code = \"UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; InputSandboxPath = \"/var/glite/SandboxDir/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/input\"; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="" DG.REGJOB.JOBTYPE="DAG" DG.REGJOB.NSUBJOBS="15" DG.REGJOB.SEED="WMPROXY" 
+DG.ARRIVED=20060829154011.000000 DATE=20060829154009.506194 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ Requirements = other.GlueCEInfoHostname == \"skurut17.cesnet.cz\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw\"; nodes = [ slicery = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; converty = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; softmean = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; AllowZippedISB = true; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; CertificateSubject = \"/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac\"; X509UserProxy = \"/var/glite/SandboxDir/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/user.proxy\"; VOMS_FQAN = \"/voce/Role=NULL/Capability=NULL\"; LB_sequence_code = \"UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; InputSandboxPath = \"/var/glite/SandboxDir/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/input\"; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="" DG.REGJOB.JOBTYPE="DAG" DG.REGJOB.NSUBJOBS="15" DG.REGJOB.SEED="WMPROXY" 
+DG.ARRIVED=20060829154039.000000 DATE=20060829154022.601283 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.SEQCODE="UI=000000:NS=0000000003:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="(null)" DG.USERTAG.NAME="delegation_id" DG.USERTAG.VALUE="m7Y_Js4wjzVZuumcLkiE6A" 
+DG.ARRIVED=20060829154040.000000 DATE=20060829154022.921295 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.SEQCODE="UI=000000:NS=0000000004:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="(null)" DG.USERTAG.NAME="jdl_original" DG.USERTAG.VALUE="[ Requirements = other.GlueCEInfoHostname == \"skurut17.cesnet.cz\"; nodes = [ slicery = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; slicerx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; reslice4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; converty = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; align1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; reslice3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; convertx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; softmean = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; align2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; reslice2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; align3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; reslice1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; align4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; convertz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; slicerz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; AllowZippedISB = true; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" 
+DG.ARRIVED=20060829154040.000000 DATE=20060829154023.340987 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.SEQCODE="UI=000000:NS=0000000005:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="(null)" DG.USERTAG.NAME="lb_sequence_code" DG.USERTAG.VALUE="UI=000000:NS=0000000005:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" 
+DG.ARRIVED=20060829154040.000000 DATE=20060829154024.228054 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.SEQCODE="UI=000000:NS=0000000006:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.ACCEPTED.FROM="NetworkServer" DG.ACCEPTED.FROM_HOST="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.ACCEPTED.FROM_INSTANCE="" DG.ACCEPTED.LOCAL_JOBID="" 
+DG.ARRIVED=20060829154041.000000 DATE=20060829154024.812628 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="EnQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.SEQCODE="UI=000000:NS=0000000007:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.ENQUEUED.QUEUE="/var/glite/workload_manager/input.fl" DG.ENQUEUED.JOB="[ Requirements = other.GlueCEInfoHostname == \"skurut17.cesnet.cz\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw\"; nodes = [ slicery = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; converty = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; softmean = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; AllowZippedISB = true; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; CertificateSubject = \"/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac\"; X509UserProxy = \"/var/glite/SandboxDir/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/user.proxy\"; VOMS_FQAN = \"/voce/Role=NULL/Capability=NULL\"; LB_sequence_code = \"UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; InputSandboxPath = \"/var/glite/SandboxDir/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/input\"; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" DG.ENQUEUED.RESULT="START" DG.ENQUEUED.REASON="" 
+DG.ARRIVED=20060829154042.000000 DATE=20060829154025.535465 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="EnQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.SEQCODE="UI=000000:NS=0000000008:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.ENQUEUED.QUEUE="/var/glite/workload_manager/input.fl" DG.ENQUEUED.JOB="[ Requirements = other.GlueCEInfoHostname == \"skurut17.cesnet.cz\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw\"; nodes = [ slicery = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; converty = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; softmean = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; AllowZippedISB = true; CertificateSubject = \"/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac\"; X509UserProxy = \"/var/glite/SandboxDir/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/user.proxy\"; VOMS_FQAN = \"/voce/Role=NULL/Capability=NULL\"; InputSandboxPath = \"/var/glite/SandboxDir/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/input\"; LB_sequence_code = \"UI=000000:NS=0000000008:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" DG.ENQUEUED.RESULT="OK" DG.ENQUEUED.REASON="" 
+DG.ARRIVED=20060829154042.000000 DATE=20060829154026.416652 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="27876" DG.EVNT="DeQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.SEQCODE="UI=000000:NS=0000000008:WM=000001:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.DEQUEUED.QUEUE="/var/glite/workload_manager/input.fl" DG.DEQUEUED.LOCAL_JOBID="" 
+DG.ARRIVED=20060829154043.000000 DATE=20060829154027.251161 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="27876" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.SEQCODE="UI=000000:NS=0000000008:WM=000002:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="dagman" 
+DG.ARRIVED=20060829154043.000000 DATE=20060829154027.631828 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="27876" DG.EVNT="EnQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.SEQCODE="UI=000000:NS=0000000008:WM=000003:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.ENQUEUED.QUEUE="/var/glite/jobcontrol/queue.fl" DG.ENQUEUED.JOB="" DG.ENQUEUED.RESULT="START" DG.ENQUEUED.REASON="unavailable" 
+DG.ARRIVED=20060829154044.000000 DATE=20060829154028.000359 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="27876" DG.EVNT="EnQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.ENQUEUED.QUEUE="/var/glite/jobcontrol/queue.fl" DG.ENQUEUED.JOB="[ Arguments = [ JobAd = [ edg_jobid = \"https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw\"; Arguments = \"-f -l /var/glite/jobcontrol/submit/QV/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw -NoEventChecks -Debug 0 -Lockfile dag_description.con.lock -Dag /var/glite/jobcontrol/submit/QV/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/dag_description.con -Rescue /var/glite/jobcontrol/submit/QV/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/dag_description.con.rescue -maxpre 10 -Condorlog /var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log\"; environment = \"_CONDOR_DAGMAN_LOG=/var/glite/jobcontrol/condorio/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/dag.dagman.out;_CONDOR_MAX_DAGMAN_LOG=0\"; ce_id = \"dagman\"; Output = \"/var/glite/jobcontrol/condorio/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/dag.lib.out\"; Executable = \"/opt/condor-6.7.10/bin/condor_dagman\"; Getenv = true; X509UserProxy = \"/var/glite/SandboxDir/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/user.proxy\"; Error_ = \"/var/glite/jobcontrol/condorio/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/dag.lib.out\"; LB_sequence_code = \"UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; Type = \"dag\"; Universe = \"scheduler\"; Remove_Kill_Sig = \"SIGUSR1\" ] ]; Command = \"Submit\"; Source = 2; Protocol = \"1.0.0\" ]" DG.ENQUEUED.RESULT="OK" DG.ENQUEUED.REASON="unavailable" 
+DG.ARRIVED=20060829154045.000000 DATE=20060829154029.849237 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="JobController" DG.SRC_INSTANCE="unique" DG.EVNT="DeQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000001:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.DEQUEUED.QUEUE="/var/glite/jobcontrol/queue.fl" DG.DEQUEUED.LOCAL_JOBID="unavailable" 
+DG.ARRIVED=20060829154046.000000 DATE=20060829154030.254633 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="JobController" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000002:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.TRANSFER.DESTINATION="LogMonitor" DG.TRANSFER.DEST_HOST="localhost" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log" DG.TRANSFER.JOB="unavailable" DG.TRANSFER.RESULT="START" DG.TRANSFER.REASON="unavailable" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060829154046.000000 DATE=20060829154031.945378 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="JobController" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.TRANSFER.DESTINATION="LogMonitor" DG.TRANSFER.DEST_HOST="localhost" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log" DG.TRANSFER.JOB="+edg_jobid = \"https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw\"\nArguments = -f -l /var/glite/jobcontrol/submit/QV/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw -NoEventChecks -Debug 0 -Lockfile dag_description.con.lock -Dag /var/glite/jobcontrol/submit/QV/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/dag_description.con -Rescue /var/glite/jobcontrol/submit/QV/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/dag_description.con.rescue -maxpre 10 -Condorlog /var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log\nenvironment = _CONDOR_DAGMAN_LOG=/var/glite/jobcontrol/condorio/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/dag.dagman.out;_CONDOR_MAX_DAGMAN_LOG=0\n+ce_id = \"dagman\"\nOutput = /var/glite/jobcontrol/condorio/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/dag.lib.out\nSubmit_Event_Notes = DAG job: (https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw) (UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000000:LRMS=000000:APP=000000)\nExecutable = /opt/condor-6.7.10/bin/condor_dagman\nGetenv = True\nX509UserProxy = /var/glite/SandboxDir/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/user.proxy\nerror = /var/glite/jobcontrol/condorio/QV/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw/dag.lib.out\n+LB_sequence_code = \"UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000000:LRMS=000000:APP=000000\"\n+Type = \"dag\"\nUniverse = scheduler\nRemove_Kill_Sig = SIGUSR1\nLog = /var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log\n+CondorSubmitFile = \"/var/glite/jobcontrol/submit/QV/Condor.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.submit\"\nQueue 1\n" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="unavailable" DG.TRANSFER.DEST_JOBID="8860" 
+DG.ARRIVED=20060829154048.000000 DATE=20060829154035.167236 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000001:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="8860" 
+DG.ARRIVED=20060829154049.000000 DATE=20060829154036.285948 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000003:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.RUNNING.NODE="<195.113.219.12:20194>" 
+DG.ARRIVED=20060829161951.000000 DATE=20060829161950.965630 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000005:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829154006.000000 DATE=20060829154003.047871 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154015.000000 DATE=20060829154011.512662 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154026.000000 DATE=20060829154013.122178 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/3f/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f3fnohtrzr66CZRqop_5fCxJw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060829154048.000000 DATE=20060829154032.529194 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18086" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829154057.000000 DATE=20060829154057.200552 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18086" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060829154057.000000 DATE=20060829154057.446649 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18086" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829154101.000000 DATE=20060829154100.989355 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="8862" 
+DG.ARRIVED=20060829154121.000000 DATE=20060829154121.177333 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060829154627.000000 DATE=20060829154626.782898 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060829154828.000000 DATE=20060829154700.338593 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="1" 
+DG.ARRIVED=20060829154828.000000 DATE=20060829154701.745621 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="align_warp" 
+DG.ARRIVED=20060829154829.000000 DATE=20060829154702.098193 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2.img" 
+DG.ARRIVED=20060829154829.000000 DATE=20060829154702.431247 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference.img" 
+DG.ARRIVED=20060829154829.000000 DATE=20060829154702.735599 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2.warp" 
+DG.ARRIVED=20060829154830.000000 DATE=20060829154702.985541 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-m 12" 
+DG.ARRIVED=20060829154831.000000 DATE=20060829154703.277360 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-q" 
+DG.ARRIVED=20060829154831.000000 DATE=20060829154703.570400 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000015" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_header" DG.USERTAG.VALUE="GLOBAL_MAXIMUM=" 
+DG.ARRIVED=20060829154832.000000 DATE=20060829154703.902086 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829154844.000000 DATE=20060829154843.654807 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060829155100.000000 DATE=20060829155100.022425 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060829155100.000000 DATE=20060829155100.297613 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/3fnohtrzr66CZRqop_CxJw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829154008.000000 DATE=20060829154003.047871 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154016.000000 DATE=20060829154011.512662 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154020.000000 DATE=20060829154011.965158 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Ic/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fIcOYL5i8w5WHHZMRpKytQw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060829154048.000000 DATE=20060829154032.496129 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18088" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829154109.000000 DATE=20060829154108.788893 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18088" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060829154109.000000 DATE=20060829154109.107500 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18088" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829154115.000000 DATE=20060829154114.803316 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="8864" 
+DG.ARRIVED=20060829154134.000000 DATE=20060829154134.010663 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060829154832.000000 DATE=20060829154743.692677 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060829154833.000000 DATE=20060829154817.790039 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="1" 
+DG.ARRIVED=20060829154833.000000 DATE=20060829154818.120684 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="align_warp" 
+DG.ARRIVED=20060829154833.000000 DATE=20060829154818.439844 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4.img" 
+DG.ARRIVED=20060829154834.000000 DATE=20060829154819.101659 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference.img" 
+DG.ARRIVED=20060829154834.000000 DATE=20060829154819.660388 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4.warp" 
+DG.ARRIVED=20060829154835.000000 DATE=20060829154819.967335 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-m 12" 
+DG.ARRIVED=20060829154836.000000 DATE=20060829154820.331204 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-q" 
+DG.ARRIVED=20060829154836.000000 DATE=20060829154821.215021 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000015" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_header" DG.USERTAG.VALUE="GLOBAL_MAXIMUM=" 
+DG.ARRIVED=20060829154837.000000 DATE=20060829154821.530409 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829154941.000000 DATE=20060829154940.679479 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060829155202.000000 DATE=20060829155201.674958 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060829155202.000000 DATE=20060829155201.897172 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/IcOYL5i8w5WHHZMRpKytQw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829154006.000000 DATE=20060829154003.047871 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154015.000000 DATE=20060829154011.512662 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154024.000000 DATE=20060829154012.789690 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Kd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fKdwR0dNd2GIN_5fljUITI8dQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060829155102.000000 DATE=20060829155102.468931 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="22575" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829155120.000000 DATE=20060829155119.872928 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="22575" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060829155120.000000 DATE=20060829155120.078513 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="22575" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829155125.000000 DATE=20060829155124.778921 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="8873" 
+DG.ARRIVED=20060829155137.000000 DATE=20060829155137.133929 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060829155448.000000 DATE=20060829155305.423921 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060829155448.000000 DATE=20060829155348.364103 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="2" 
+DG.ARRIVED=20060829155449.000000 DATE=20060829155348.686467 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="reslice" 
+DG.ARRIVED=20060829155449.000000 DATE=20060829155349.013183 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2.warp" 
+DG.ARRIVED=20060829155450.000000 DATE=20060829155349.440068 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2.img" 
+DG.ARRIVED=20060829155450.000000 DATE=20060829155349.757963 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2.hdr" 
+DG.ARRIVED=20060829155451.000000 DATE=20060829155350.064961 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2-resliced.img" 
+DG.ARRIVED=20060829155451.000000 DATE=20060829155350.499556 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2-resliced.img" 
+DG.ARRIVED=20060829155451.000000 DATE=20060829155350.805038 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829155545.000000 DATE=20060829155544.732900 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060829155658.000000 DATE=20060829155657.797641 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060829155658.000000 DATE=20060829155658.315364 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/KdwR0dNd2GIN_ljUITI8dQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829154008.000000 DATE=20060829154003.047871 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154017.000000 DATE=20060829154011.512662 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154018.000000 DATE=20060829154011.306635 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/L9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fL9od54iYa-l8M8O-BgY3FQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060829160533.000000 DATE=20060829160531.807126 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="28998" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829160549.000000 DATE=20060829160548.482629 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="28998" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060829160549.000000 DATE=20060829160548.736258 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="28998" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829160600.000000 DATE=20060829160600.267863 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="8880" 
+DG.ARRIVED=20060829160613.000000 DATE=20060829160613.411221 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060829161008.000000 DATE=20060829160853.706045 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060829161008.000000 DATE=20060829160926.395576 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="4" 
+DG.ARRIVED=20060829161010.000000 DATE=20060829160926.984665 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="slicer" 
+DG.ARRIVED=20060829161011.000000 DATE=20060829160927.293647 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla.hdr" 
+DG.ARRIVED=20060829161012.000000 DATE=20060829160927.596111 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla.img" 
+DG.ARRIVED=20060829161013.000000 DATE=20060829160927.886180 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla-z.pgm" 
+DG.ARRIVED=20060829161014.000000 DATE=20060829160928.200156 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829161026.000000 DATE=20060829161026.390151 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060829161246.000000 DATE=20060829161246.177799 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060829161247.000000 DATE=20060829161246.376968 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/L9od54iYa-l8M8O-BgY3FQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829154003.000000 DATE=20060829154003.047871 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154013.000000 DATE=20060829154011.512662 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154034.000000 DATE=20060829154015.012436 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Mv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMvpcJqSSk0pJzV9RWepyFg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060829155204.000000 DATE=20060829155203.509328 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="22966" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829155231.000000 DATE=20060829155231.501113 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="22966" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060829155232.000000 DATE=20060829155231.763859 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="22966" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829155239.000000 DATE=20060829155238.832148 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="8874" 
+DG.ARRIVED=20060829155251.000000 DATE=20060829155251.117061 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060829155452.000000 DATE=20060829155416.236233 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060829155545.000000 DATE=20060829155545.316905 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060829155653.000000 DATE=20060829155458.357421 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="2" 
+DG.ARRIVED=20060829155653.000000 DATE=20060829155458.719900 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="reslice" 
+DG.ARRIVED=20060829155653.000000 DATE=20060829155459.019355 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4.warp" 
+DG.ARRIVED=20060829155654.000000 DATE=20060829155459.602719 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4.img" 
+DG.ARRIVED=20060829155654.000000 DATE=20060829155459.972930 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4.hdr" 
+DG.ARRIVED=20060829155655.000000 DATE=20060829155500.324605 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4-resliced.img" 
+DG.ARRIVED=20060829155655.000000 DATE=20060829155500.609859 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4-resliced.img" 
+DG.ARRIVED=20060829155656.000000 DATE=20060829155500.924156 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829155902.000000 DATE=20060829155901.993131 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060829155903.000000 DATE=20060829155902.424697 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/MvpcJqSSk0pJzV9RWepyFg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829154008.000000 DATE=20060829154003.047871 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154017.000000 DATE=20060829154011.512662 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154018.000000 DATE=20060829154011.659053 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Y5/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fY5yNWKqwM9HWjYk4Y9ij8Q\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060829161251.000000 DATE=20060829161250.517535 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="31924" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829161256.000000 DATE=20060829161256.590658 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="31924" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060829161258.000000 DATE=20060829161256.782714 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="31924" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829161305.000000 DATE=20060829161304.594194 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="8882" 
+DG.ARRIVED=20060829161317.000000 DATE=20060829161316.869335 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060829161631.000000 DATE=20060829161631.005537 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060829161632.000000 DATE=20060829161457.466809 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060829161633.000000 DATE=20060829161513.617276 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="5" 
+DG.ARRIVED=20060829161634.000000 DATE=20060829161514.234045 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="convert" 
+DG.ARRIVED=20060829161635.000000 DATE=20060829161515.007632 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla-z.pgm" 
+DG.ARRIVED=20060829161636.000000 DATE=20060829161515.476783 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla-z.gif" 
+DG.ARRIVED=20060829161638.000000 DATE=20060829161516.018084 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829161844.000000 DATE=20060829161844.092928 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060829161845.000000 DATE=20060829161844.293011 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/Y5yNWKqwM9HWjYk4Y9ij8Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829154003.000000 DATE=20060829154003.047871 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154011.000000 DATE=20060829154011.512662 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154037.000000 DATE=20060829154015.872733 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/ZC/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fZCCjcIjRMfxHgHq_5fskjigA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060829160532.000000 DATE=20060829160531.715544 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="28997" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829160543.000000 DATE=20060829160543.316127 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="28997" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060829160544.000000 DATE=20060829160543.537392 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="28997" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829160554.000000 DATE=20060829160554.006061 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="8879" 
+DG.ARRIVED=20060829160607.000000 DATE=20060829160607.200887 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060829160756.000000 DATE=20060829160755.862041 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060829160926.000000 DATE=20060829160926.027556 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060829160958.000000 DATE=20060829160826.764426 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="4" 
+DG.ARRIVED=20060829160958.000000 DATE=20060829160827.149793 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="slicer" 
+DG.ARRIVED=20060829161000.000000 DATE=20060829160827.453678 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla.hdr" 
+DG.ARRIVED=20060829161001.000000 DATE=20060829160827.724866 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla.img" 
+DG.ARRIVED=20060829161003.000000 DATE=20060829160828.023982 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla-y.pgm" 
+DG.ARRIVED=20060829161006.000000 DATE=20060829160828.365827 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829161145.000000 DATE=20060829161145.055281 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060829161147.000000 DATE=20060829161145.255664 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/ZCCjcIjRMfxHgHq_skjigA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829154005.000000 DATE=20060829154003.047871 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154014.000000 DATE=20060829154011.512662 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154027.000000 DATE=20060829154013.503578 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/av/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2favHZVS5LPLWKzoSDwB9Ccw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060829155906.000000 DATE=20060829155906.123548 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="25924" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829155924.000000 DATE=20060829155924.515822 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="25924" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060829155925.000000 DATE=20060829155924.750101 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="25924" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829155927.000000 DATE=20060829155926.802199 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="8877" 
+DG.ARRIVED=20060829155945.000000 DATE=20060829155945.114583 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060829160056.000000 DATE=20060829160055.541220 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060829160210.000000 DATE=20060829160210.079054 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060829160257.000000 DATE=20060829160208.230088 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="3" 
+DG.ARRIVED=20060829160257.000000 DATE=20060829160208.590493 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="softmean" 
+DG.ARRIVED=20060829160258.000000 DATE=20060829160208.896501 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1-resliced.img" 
+DG.ARRIVED=20060829160258.000000 DATE=20060829160209.204419 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1-resliced.hdr" 
+DG.ARRIVED=20060829160259.000000 DATE=20060829160209.578037 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2-resliced.img" 
+DG.ARRIVED=20060829160259.000000 DATE=20060829160209.876140 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2-resliced.hdr" 
+DG.ARRIVED=20060829160300.000000 DATE=20060829160210.196142 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3-resliced.img" 
+DG.ARRIVED=20060829160300.000000 DATE=20060829160210.501538 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000015" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3-resliced.hdr" 
+DG.ARRIVED=20060829160300.000000 DATE=20060829160210.920308 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000017" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4-resliced.img" 
+DG.ARRIVED=20060829160301.000000 DATE=20060829160211.282844 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000019" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4-resliced.hdr" 
+DG.ARRIVED=20060829160302.000000 DATE=20060829160212.238003 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000021" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla.img" 
+DG.ARRIVED=20060829160303.000000 DATE=20060829160212.525975 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000023" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla.hdr" 
+DG.ARRIVED=20060829160303.000000 DATE=20060829160212.906611 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829160529.000000 DATE=20060829160529.258801 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060829160530.000000 DATE=20060829160529.443350 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/avHZVS5LPLWKzoSDwB9Ccw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829154007.000000 DATE=20060829154003.047871 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154016.000000 DATE=20060829154011.512662 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154023.000000 DATE=20060829154012.495782 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/b2/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fb2nH3x8W1HA-TtZGTMxG5g\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060829154047.000000 DATE=20060829154032.470139 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18087" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829154052.000000 DATE=20060829154051.858582 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18087" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060829154052.000000 DATE=20060829154052.102674 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18087" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829154055.000000 DATE=20060829154054.742360 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="8861" 
+DG.ARRIVED=20060829154122.000000 DATE=20060829154121.430604 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060829154622.000000 DATE=20060829154521.416816 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060829154623.000000 DATE=20060829154555.611052 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="1" 
+DG.ARRIVED=20060829154623.000000 DATE=20060829154556.388415 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="align_warp" 
+DG.ARRIVED=20060829154623.000000 DATE=20060829154556.835159 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3.img" 
+DG.ARRIVED=20060829154624.000000 DATE=20060829154557.128776 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference.img" 
+DG.ARRIVED=20060829154624.000000 DATE=20060829154557.441922 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3.warp" 
+DG.ARRIVED=20060829154625.000000 DATE=20060829154557.742094 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-m 12" 
+DG.ARRIVED=20060829154625.000000 DATE=20060829154558.058970 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-q" 
+DG.ARRIVED=20060829154626.000000 DATE=20060829154558.407706 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000015" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_header" DG.USERTAG.VALUE="GLOBAL_MAXIMUM=" 
+DG.ARRIVED=20060829154626.000000 DATE=20060829154558.769612 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829154642.000000 DATE=20060829154642.139596 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060829155011.000000 DATE=20060829155010.979705 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060829155011.000000 DATE=20060829155011.180270 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/b2nH3x8W1HA-TtZGTMxG5g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829154004.000000 DATE=20060829154003.047871 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154013.000000 DATE=20060829154011.512662 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154033.000000 DATE=20060829154014.693348 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/jB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fjBm3T0knxbtnjuNPO0rEAA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060829161145.000000 DATE=20060829161144.693766 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="31550" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829161151.000000 DATE=20060829161151.426480 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="31550" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060829161152.000000 DATE=20060829161151.630081 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="31550" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829161157.000000 DATE=20060829161157.441247 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="8881" 
+DG.ARRIVED=20060829161216.000000 DATE=20060829161215.710384 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060829161425.000000 DATE=20060829161347.195709 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060829161426.000000 DATE=20060829161403.244813 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="5" 
+DG.ARRIVED=20060829161427.000000 DATE=20060829161403.561211 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="convert" 
+DG.ARRIVED=20060829161428.000000 DATE=20060829161403.869143 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla-y.pgm" 
+DG.ARRIVED=20060829161429.000000 DATE=20060829161404.180406 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla-y.gif" 
+DG.ARRIVED=20060829161430.000000 DATE=20060829161404.744728 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829161531.000000 DATE=20060829161530.443140 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060829161749.000000 DATE=20060829161749.559925 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060829161751.000000 DATE=20060829161749.774448 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/jBm3T0knxbtnjuNPO0rEAA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829154003.000000 DATE=20060829154003.047871 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154012.000000 DATE=20060829154011.512662 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154036.000000 DATE=20060829154015.579156 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/lG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flGHdArnB-tp02XPlbykzvg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060829160532.000000 DATE=20060829160531.684844 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="28996" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829160538.000000 DATE=20060829160538.093755 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="28996" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060829160539.000000 DATE=20060829160538.353742 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="28996" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829160548.000000 DATE=20060829160547.726294 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="8878" 
+DG.ARRIVED=20060829160603.000000 DATE=20060829160600.522140 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060829161016.000000 DATE=20060829160956.286705 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060829161127.000000 DATE=20060829161126.802760 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060829161217.000000 DATE=20060829161028.287327 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="4" 
+DG.ARRIVED=20060829161218.000000 DATE=20060829161028.575607 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="slicer" 
+DG.ARRIVED=20060829161220.000000 DATE=20060829161028.861629 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla.hdr" 
+DG.ARRIVED=20060829161221.000000 DATE=20060829161029.142419 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla.img" 
+DG.ARRIVED=20060829161222.000000 DATE=20060829161029.423663 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla-x.pgm" 
+DG.ARRIVED=20060829161223.000000 DATE=20060829161029.812864 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829161341.000000 DATE=20060829161341.290163 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060829161342.000000 DATE=20060829161341.505324 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/lGHdArnB-tp02XPlbykzvg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829154005.000000 DATE=20060829154003.047871 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154014.000000 DATE=20060829154011.512662 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154030.000000 DATE=20060829154014.099489 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/lb/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flbaTLdA50xsw7qmxMXLUNA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060829155012.000000 DATE=20060829155011.514687 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="22307" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829155020.000000 DATE=20060829155020.078148 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="22307" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060829155020.000000 DATE=20060829155020.328424 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="22307" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829155023.000000 DATE=20060829155023.456643 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="8872" 
+DG.ARRIVED=20060829155042.000000 DATE=20060829155041.741533 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060829155244.000000 DATE=20060829155152.700074 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060829155244.000000 DATE=20060829155236.191832 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="2" 
+DG.ARRIVED=20060829155244.000000 DATE=20060829155236.484023 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="reslice" 
+DG.ARRIVED=20060829155245.000000 DATE=20060829155236.776524 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3.warp" 
+DG.ARRIVED=20060829155245.000000 DATE=20060829155237.109682 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3.img" 
+DG.ARRIVED=20060829155245.000000 DATE=20060829155237.747830 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3.hdr" 
+DG.ARRIVED=20060829155246.000000 DATE=20060829155238.102084 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3-resliced.img" 
+DG.ARRIVED=20060829155246.000000 DATE=20060829155238.568714 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3-resliced.img" 
+DG.ARRIVED=20060829155247.000000 DATE=20060829155238.880853 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829155343.000000 DATE=20060829155342.905068 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060829155704.000000 DATE=20060829155704.568019 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060829155705.000000 DATE=20060829155704.801895 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/lbaTLdA50xsw7qmxMXLUNA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829154007.000000 DATE=20060829154003.047871 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154016.000000 DATE=20060829154011.512662 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154021.000000 DATE=20060829154012.222607 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/s0/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs0PlUTdZ7gpQHZtJgzd3Ig\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060829154800.000000 DATE=20060829154800.143793 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="21016" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829154808.000000 DATE=20060829154808.087145 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="21016" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060829154808.000000 DATE=20060829154808.467855 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="21016" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829154813.000000 DATE=20060829154813.160741 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="8870" 
+DG.ARRIVED=20060829154825.000000 DATE=20060829154825.415729 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060829155038.000000 DATE=20060829154951.823876 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060829155039.000000 DATE=20060829155034.657565 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="2" 
+DG.ARRIVED=20060829155039.000000 DATE=20060829155034.939189 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="reslice" 
+DG.ARRIVED=20060829155039.000000 DATE=20060829155035.302527 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1.warp" 
+DG.ARRIVED=20060829155040.000000 DATE=20060829155035.583723 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1.img" 
+DG.ARRIVED=20060829155040.000000 DATE=20060829155035.958453 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1.hdr" 
+DG.ARRIVED=20060829155041.000000 DATE=20060829155036.336350 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1-resliced.img" 
+DG.ARRIVED=20060829155041.000000 DATE=20060829155036.618594 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1-resliced.img" 
+DG.ARRIVED=20060829155042.000000 DATE=20060829155037.144116 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829155143.000000 DATE=20060829155143.412493 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060829155402.000000 DATE=20060829155401.650508 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060829155403.000000 DATE=20060829155401.999111 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/s0PlUTdZ7gpQHZtJgzd3Ig" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829154005.000000 DATE=20060829154003.047871 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154014.000000 DATE=20060829154011.512662 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154029.000000 DATE=20060829154013.847624 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/ug/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fug-_5fsHdqyECoVGwwumZQzQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060829161346.000000 DATE=20060829161345.670487 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="32273" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829161352.000000 DATE=20060829161352.594393 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="32273" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060829161353.000000 DATE=20060829161352.837073 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="32273" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829161400.000000 DATE=20060829161359.736845 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="8883" 
+DG.ARRIVED=20060829161412.000000 DATE=20060829161412.031788 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060829161639.000000 DATE=20060829161546.441802 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060829161640.000000 DATE=20060829161603.008578 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="5" 
+DG.ARRIVED=20060829161641.000000 DATE=20060829161603.357686 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="convert" 
+DG.ARRIVED=20060829161642.000000 DATE=20060829161603.675291 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla-x.pgm" 
+DG.ARRIVED=20060829161644.000000 DATE=20060829161604.003818 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla-x.gif" 
+DG.ARRIVED=20060829161646.000000 DATE=20060829161604.411399 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829161731.000000 DATE=20060829161731.328271 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060829161944.000000 DATE=20060829161944.575739 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060829161946.000000 DATE=20060829161944.770109 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/ug-_sHdqyECoVGwwumZQzQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829154004.000000 DATE=20060829154003.047871 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154013.000000 DATE=20060829154011.512662 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060829154032.000000 DATE=20060829154014.376500 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/xA/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxAqnWHE01PQo2r2weBBjpQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/QVyQJpT2HhmGCqVIbi5WMw" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060829154047.000000 DATE=20060829154032.484554 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18085" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829154103.000000 DATE=20060829154102.532953 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18085" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060829154103.000000 DATE=20060829154102.891259 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18085" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060829154108.000000 DATE=20060829154108.242633 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="8863" 
+DG.ARRIVED=20060829154122.000000 DATE=20060829154121.733662 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fQVyQJpT2HhmGCqVIbi5WMw.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060829154417.000000 DATE=20060829154416.933532 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060829154618.000000 DATE=20060829154450.804009 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="1" 
+DG.ARRIVED=20060829154618.000000 DATE=20060829154451.543066 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="align_warp" 
+DG.ARRIVED=20060829154619.000000 DATE=20060829154451.858743 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1.img" 
+DG.ARRIVED=20060829154619.000000 DATE=20060829154452.148709 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference.img" 
+DG.ARRIVED=20060829154620.000000 DATE=20060829154452.429040 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1.warp" 
+DG.ARRIVED=20060829154620.000000 DATE=20060829154452.806262 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-m 12" 
+DG.ARRIVED=20060829154621.000000 DATE=20060829154453.311769 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-q" 
+DG.ARRIVED=20060829154621.000000 DATE=20060829154453.823359 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000015" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_header" DG.USERTAG.VALUE="GLOBAL_MAXIMUM=" 
+DG.ARRIVED=20060829154622.000000 DATE=20060829154454.178061 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060829154643.000000 DATE=20060829154642.378664 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060829154801.000000 DATE=20060829154800.704188 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060829154801.000000 DATE=20060829154800.931546 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/xAqnWHE01PQo2r2weBBjpQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
diff --git a/org.glite.jp/examples/pch06/dump3 b/org.glite.jp/examples/pch06/dump3
new file mode 100644 (file)
index 0000000..6fff0db
--- /dev/null
@@ -0,0 +1,144 @@
+DG.ARRIVED=20060831125552.000000 DATE=20060831125551.903978 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ edg_jobid = \"https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ\"; nodes = [ slicery = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/bpVdssMPbFXgGDH1RzWxJQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerx = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/FBQDjtECNROCLSuv1Su9ow\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice4 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/Vd0BXmaKC6Jx7VDsd0c1TA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; converty = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/cu2HDZpnjTDOjVZl3ELhCA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align1 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice3 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/-xcX-i0EEYyGLX0YziJ27Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertx = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/dGOcuol6zMjlRvkwDuoxEQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; softmean = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/ix00sbSdfS-r3yTHByk_vg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align2 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice2 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align3 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/YOKggeuqQKsPBxwfjiKKcQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice1 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/f1QFbuGA6E2xY03gr_pibQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align4 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/yoOTrmOjGGVaymlZVz2TiA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertz = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/fB2N2WU7ECyGz4cJ1nBtbA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerz = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/aPimH0SWMj6ZhvMmtlICow\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; AllowZippedISB = true; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; CertificateSubject = \"/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac\"; X509UserProxy = \"/var/glite/SandboxDir/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/user.proxy\"; VOMS_FQAN = \"/voce/Role=NULL/Capability=NULL\"; LB_sequence_code = \"UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; InputSandboxPath = \"/var/glite/SandboxDir/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/input\"; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="" DG.REGJOB.JOBTYPE="DAG" DG.REGJOB.NSUBJOBS="15" DG.REGJOB.SEED="WMPROXY" 
+DG.ARRIVED=20060831125618.000000 DATE=20060831125615.746557 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ edg_jobid = \"https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ\"; nodes = [ slicery = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/bpVdssMPbFXgGDH1RzWxJQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerx = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/FBQDjtECNROCLSuv1Su9ow\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice4 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/Vd0BXmaKC6Jx7VDsd0c1TA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; converty = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/cu2HDZpnjTDOjVZl3ELhCA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align1 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice3 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/-xcX-i0EEYyGLX0YziJ27Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertx = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/dGOcuol6zMjlRvkwDuoxEQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; softmean = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/ix00sbSdfS-r3yTHByk_vg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align2 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice2 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align3 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/YOKggeuqQKsPBxwfjiKKcQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice1 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/f1QFbuGA6E2xY03gr_pibQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align4 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/yoOTrmOjGGVaymlZVz2TiA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertz = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/fB2N2WU7ECyGz4cJ1nBtbA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerz = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/aPimH0SWMj6ZhvMmtlICow\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; AllowZippedISB = true; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; CertificateSubject = \"/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac\"; X509UserProxy = \"/var/glite/SandboxDir/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/user.proxy\"; VOMS_FQAN = \"/voce/Role=NULL/Capability=NULL\"; LB_sequence_code = \"UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; InputSandboxPath = \"/var/glite/SandboxDir/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/input\"; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="" DG.REGJOB.JOBTYPE="DAG" DG.REGJOB.NSUBJOBS="15" DG.REGJOB.SEED="WMPROXY" 
+DG.ARRIVED=20060831125705.000000 DATE=20060831125632.568211 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.SEQCODE="UI=000000:NS=0000000003:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="(null)" DG.USERTAG.NAME="delegation_id" DG.USERTAG.VALUE="1zqAuw05JHSupS587Ss4GA" 
+DG.ARRIVED=20060831125706.000000 DATE=20060831125632.839168 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.SEQCODE="UI=000000:NS=0000000004:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="(null)" DG.USERTAG.NAME="jdl_original" DG.USERTAG.VALUE="[ nodes = [ slicery = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; slicerx = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; reslice4 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; converty = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; align1 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; reslice3 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; convertx = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; softmean = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; align2 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; reslice2 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; align3 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; reslice1 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; align4 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; convertz = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; slicerz = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; AllowZippedISB = true; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" 
+DG.ARRIVED=20060831125707.000000 DATE=20060831125633.280366 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.SEQCODE="UI=000000:NS=0000000005:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="(null)" DG.USERTAG.NAME="lb_sequence_code" DG.USERTAG.VALUE="UI=000000:NS=0000000005:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" 
+DG.ARRIVED=20060831125710.000000 DATE=20060831125633.984300 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.SEQCODE="UI=000000:NS=0000000006:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.ACCEPTED.FROM="NetworkServer" DG.ACCEPTED.FROM_HOST="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.ACCEPTED.FROM_INSTANCE="" DG.ACCEPTED.LOCAL_JOBID="" 
+DG.ARRIVED=20060831125711.000000 DATE=20060831125634.264605 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="EnQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.SEQCODE="UI=000000:NS=0000000007:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.ENQUEUED.QUEUE="/var/glite/workload_manager/input.fl" DG.ENQUEUED.JOB="[ edg_jobid = \"https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ\"; nodes = [ slicery = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/bpVdssMPbFXgGDH1RzWxJQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerx = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/FBQDjtECNROCLSuv1Su9ow\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice4 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/Vd0BXmaKC6Jx7VDsd0c1TA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; converty = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/cu2HDZpnjTDOjVZl3ELhCA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align1 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice3 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/-xcX-i0EEYyGLX0YziJ27Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertx = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/dGOcuol6zMjlRvkwDuoxEQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; softmean = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/ix00sbSdfS-r3yTHByk_vg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align2 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice2 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align3 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/YOKggeuqQKsPBxwfjiKKcQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice1 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/f1QFbuGA6E2xY03gr_pibQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align4 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/yoOTrmOjGGVaymlZVz2TiA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertz = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/fB2N2WU7ECyGz4cJ1nBtbA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerz = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/aPimH0SWMj6ZhvMmtlICow\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; AllowZippedISB = true; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; CertificateSubject = \"/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac\"; X509UserProxy = \"/var/glite/SandboxDir/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/user.proxy\"; VOMS_FQAN = \"/voce/Role=NULL/Capability=NULL\"; LB_sequence_code = \"UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; InputSandboxPath = \"/var/glite/SandboxDir/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/input\"; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" DG.ENQUEUED.RESULT="START" DG.ENQUEUED.REASON="" 
+DG.ARRIVED=20060831125713.000000 DATE=20060831125634.711662 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="EnQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.SEQCODE="UI=000000:NS=0000000008:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.ENQUEUED.QUEUE="/var/glite/workload_manager/input.fl" DG.ENQUEUED.JOB="[ edg_jobid = \"https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ\"; nodes = [ slicery = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/bpVdssMPbFXgGDH1RzWxJQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerx = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/FBQDjtECNROCLSuv1Su9ow\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice4 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/Vd0BXmaKC6Jx7VDsd0c1TA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; converty = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/cu2HDZpnjTDOjVZl3ELhCA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align1 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice3 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/-xcX-i0EEYyGLX0YziJ27Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertx = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/dGOcuol6zMjlRvkwDuoxEQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; softmean = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/ix00sbSdfS-r3yTHByk_vg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align2 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice2 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align3 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/YOKggeuqQKsPBxwfjiKKcQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice1 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/f1QFbuGA6E2xY03gr_pibQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align4 = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/yoOTrmOjGGVaymlZVz2TiA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertz = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/fB2N2WU7ECyGz4cJ1nBtbA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerz = [ description = [ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/aPimH0SWMj6ZhvMmtlICow\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; AllowZippedISB = true; CertificateSubject = \"/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac\"; X509UserProxy = \"/var/glite/SandboxDir/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/user.proxy\"; VOMS_FQAN = \"/voce/Role=NULL/Capability=NULL\"; InputSandboxPath = \"/var/glite/SandboxDir/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/input\"; LB_sequence_code = \"UI=000000:NS=0000000008:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" DG.ENQUEUED.RESULT="OK" DG.ENQUEUED.REASON="" 
+DG.ARRIVED=20060831125715.000000 DATE=20060831125635.986857 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="27876" DG.EVNT="DeQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.SEQCODE="UI=000000:NS=0000000008:WM=000001:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.DEQUEUED.QUEUE="/var/glite/workload_manager/input.fl" DG.DEQUEUED.LOCAL_JOBID="" 
+DG.ARRIVED=20060831125716.000000 DATE=20060831125636.589828 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="27876" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.SEQCODE="UI=000000:NS=0000000008:WM=000002:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="dagman" 
+DG.ARRIVED=20060831125718.000000 DATE=20060831125636.915877 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="27876" DG.EVNT="EnQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.SEQCODE="UI=000000:NS=0000000008:WM=000003:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.ENQUEUED.QUEUE="/var/glite/jobcontrol/queue.fl" DG.ENQUEUED.JOB="" DG.ENQUEUED.RESULT="START" DG.ENQUEUED.REASON="unavailable" 
+DG.ARRIVED=20060831125720.000000 DATE=20060831125637.161924 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="27876" DG.EVNT="EnQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.ENQUEUED.QUEUE="/var/glite/jobcontrol/queue.fl" DG.ENQUEUED.JOB="[ Arguments = [ JobAd = [ edg_jobid = \"https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ\"; Arguments = \"-f -l /var/glite/jobcontrol/submit/9_/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ -NoEventChecks -Debug 0 -Lockfile dag_description.con.lock -Dag /var/glite/jobcontrol/submit/9_/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/dag_description.con -Rescue /var/glite/jobcontrol/submit/9_/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/dag_description.con.rescue -maxpre 10 -Condorlog /var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ.log\"; environment = \"_CONDOR_DAGMAN_LOG=/var/glite/jobcontrol/condorio/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/dag.dagman.out;_CONDOR_MAX_DAGMAN_LOG=0\"; ce_id = \"dagman\"; Output = \"/var/glite/jobcontrol/condorio/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/dag.lib.out\"; Executable = \"/opt/condor-6.7.10/bin/condor_dagman\"; Getenv = true; X509UserProxy = \"/var/glite/SandboxDir/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/user.proxy\"; Error_ = \"/var/glite/jobcontrol/condorio/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/dag.lib.out\"; LB_sequence_code = \"UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; Type = \"dag\"; Universe = \"scheduler\"; Remove_Kill_Sig = \"SIGUSR1\" ] ]; Command = \"Submit\"; Source = 2; Protocol = \"1.0.0\" ]" DG.ENQUEUED.RESULT="OK" DG.ENQUEUED.REASON="unavailable" 
+DG.ARRIVED=20060831125723.000000 DATE=20060831125638.240868 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="JobController" DG.SRC_INSTANCE="unique" DG.EVNT="DeQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000001:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.DEQUEUED.QUEUE="/var/glite/jobcontrol/queue.fl" DG.DEQUEUED.LOCAL_JOBID="unavailable" 
+DG.ARRIVED=20060831125724.000000 DATE=20060831125638.544956 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="JobController" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000002:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.TRANSFER.DESTINATION="LogMonitor" DG.TRANSFER.DEST_HOST="localhost" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ.log" DG.TRANSFER.JOB="unavailable" DG.TRANSFER.RESULT="START" DG.TRANSFER.REASON="unavailable" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831125726.000000 DATE=20060831125640.032216 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="JobController" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.TRANSFER.DESTINATION="LogMonitor" DG.TRANSFER.DEST_HOST="localhost" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ.log" DG.TRANSFER.JOB="+edg_jobid = \"https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ\"\nArguments = -f -l /var/glite/jobcontrol/submit/9_/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ -NoEventChecks -Debug 0 -Lockfile dag_description.con.lock -Dag /var/glite/jobcontrol/submit/9_/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/dag_description.con -Rescue /var/glite/jobcontrol/submit/9_/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/dag_description.con.rescue -maxpre 10 -Condorlog /var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ.log\nenvironment = _CONDOR_DAGMAN_LOG=/var/glite/jobcontrol/condorio/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/dag.dagman.out;_CONDOR_MAX_DAGMAN_LOG=0\n+ce_id = \"dagman\"\nOutput = /var/glite/jobcontrol/condorio/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/dag.lib.out\nSubmit_Event_Notes = DAG job: (https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ) (UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000000:LRMS=000000:APP=000000)\nExecutable = /opt/condor-6.7.10/bin/condor_dagman\nGetenv = True\nX509UserProxy = /var/glite/SandboxDir/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/user.proxy\nerror = /var/glite/jobcontrol/condorio/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/dag.lib.out\n+LB_sequence_code = \"UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000000:LRMS=000000:APP=000000\"\n+Type = \"dag\"\nUniverse = scheduler\nRemove_Kill_Sig = SIGUSR1\nLog = /var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ.log\n+CondorSubmitFile = \"/var/glite/jobcontrol/submit/9_/Condor.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ.submit\"\nQueue 1\n" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="unavailable" DG.TRANSFER.DEST_JOBID="9735" 
+DG.ARRIVED=20060831125732.000000 DATE=20060831125643.478857 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000001:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9735" 
+DG.ARRIVED=20060831125735.000000 DATE=20060831125643.816980 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000003:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.RUNNING.NODE="<195.113.219.12:20194>" 
+DG.ARRIVED=20060831143628.000000 DATE=20060831143627.785342 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000005:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Warning: job exit code != 0" DG.DONE.EXIT_CODE="1" 
+DG.ARRIVED=20060831125600.000000 DATE=20060831125553.175585 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/-xcX-i0EEYyGLX0YziJ27Q" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125627.000000 DATE=20060831125620.516409 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/-xcX-i0EEYyGLX0YziJ27Q" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125655.000000 DATE=20060831125622.242663 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/-xcX-i0EEYyGLX0YziJ27Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/-xcX-i0EEYyGLX0YziJ27Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/-x/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f-xcX-i0EEYyGLX0YziJ27Q\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831125554.000000 DATE=20060831125553.175585 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/FBQDjtECNROCLSuv1Su9ow" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125622.000000 DATE=20060831125620.516409 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/FBQDjtECNROCLSuv1Su9ow" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125701.000000 DATE=20060831125623.599945 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/FBQDjtECNROCLSuv1Su9ow" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/FBQDjtECNROCLSuv1Su9ow\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/FB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fFBQDjtECNROCLSuv1Su9ow\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831125555.000000 DATE=20060831125553.175585 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/Vd0BXmaKC6Jx7VDsd0c1TA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125623.000000 DATE=20060831125620.516409 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/Vd0BXmaKC6Jx7VDsd0c1TA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125700.000000 DATE=20060831125623.273381 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/Vd0BXmaKC6Jx7VDsd0c1TA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/Vd0BXmaKC6Jx7VDsd0c1TA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Vd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fVd0BXmaKC6Jx7VDsd0c1TA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831125608.000000 DATE=20060831125553.175585 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/YOKggeuqQKsPBxwfjiKKcQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125633.000000 DATE=20060831125620.516409 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/YOKggeuqQKsPBxwfjiKKcQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125647.000000 DATE=20060831125620.708220 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/YOKggeuqQKsPBxwfjiKKcQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/YOKggeuqQKsPBxwfjiKKcQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/YO/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831125729.000000 DATE=20060831125640.467179 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18729" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/YOKggeuqQKsPBxwfjiKKcQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831130017.000000 DATE=20060831130015.764853 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18729" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/YOKggeuqQKsPBxwfjiKKcQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="hephygr.oeaw.ac.at:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060831130018.000000 DATE=20060831130016.278897 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18729" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/YOKggeuqQKsPBxwfjiKKcQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831130028.000000 DATE=20060831130024.653183 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/YOKggeuqQKsPBxwfjiKKcQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9739" 
+DG.ARRIVED=20060831130035.000000 DATE=20060831130031.887537 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/YOKggeuqQKsPBxwfjiKKcQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="unavailable" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ.log" DG.TRANSFER.JOB="stream_error = False\n+edg_jobid = \"https://skurut1.cesnet.cz:9000/YOKggeuqQKsPBxwfjiKKcQ\"\nArguments = 'UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000'\nGlobusScheduler = hephygr.oeaw.ac.at:2119/jobmanager-lcgpbs\n+ce_id = \"hephygr.oeaw.ac.at:2119/jobmanager-lcgpbs-voce\"\nTransfer_Executable = True\nOutput = /var/glite/jobcontrol/condorio/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ/StandardOutput\nSubmit_Event_User_Notes = (https://skurut1.cesnet.cz:9000/YOKggeuqQKsPBxwfjiKKcQ) (UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000) (0)\nCopy_to_Spool = False\nExecutable = /var/glite/jobcontrol/submit/9_/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/JobWrapper.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ.sh\nX509UserProxy = /var/glite/SandboxDir/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/user.proxy\nerror = /var/glite/jobcontrol/condorio/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ/StandardError\n+LB_sequence_code = \"UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000\"\nNotification = never\nstream_output = False\nGlobusRSL = (queue=voce)(jobtype=single)\n+Type = \"job\"\nUniverse = grid\n+UserSubjectName = \"/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac\"\n+edg_dagid = \"https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ\"\nLog = /var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ.log\ngrid_type = globus\n+CondorSubmitFile = \"/var/glite/jobcontrol/submit/9_/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/Condor.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYOKggeuqQKsPBxwfjiKKcQ.submit\"\nQueue 1\n" DG.TRANSFER.RESULT="FAIL" DG.TRANSFER.REASON="7 authentication failed: GSS Major Status: Authentication Failed GSS Minor Status Error Chain:  init.c:499: globus_gss_assist_init_sec_context_async: Error during context initialization init_sec_context" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831130049.000000 DATE=20060831130044.977942 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="20646" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/YOKggeuqQKsPBxwfjiKKcQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000004:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831130053.000000 DATE=20060831130045.851931 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="20646" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/YOKggeuqQKsPBxwfjiKKcQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000005:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="99" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831130055.000000 DATE=20060831130046.302049 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="20646" DG.EVNT="Abort" DG.JOBID="https://skurut1.cesnet.cz:9000/YOKggeuqQKsPBxwfjiKKcQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000006:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.ABORT.REASON="hit job shallow retry count (0)" 
+DG.ARRIVED=20060831130057.000000 DATE=20060831130045.955549 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/YOKggeuqQKsPBxwfjiKKcQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="FAILED" DG.DONE.REASON="Job got an error while in the CondorG queue." DG.DONE.EXIT_CODE="1" 
+DG.ARRIVED=20060831125606.000000 DATE=20060831125553.175585 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125631.000000 DATE=20060831125620.516409 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125648.000000 DATE=20060831125621.028569 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/YQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fYQOSOo7Ov3Bmql6mk5fSOA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831130204.000000 DATE=20060831130204.502467 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="21227" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831130248.000000 DATE=20060831130248.080501 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="21227" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="ce.grid.tuke.sk:2119/jobmanager-pbs-voce" 
+DG.ARRIVED=20060831130249.000000 DATE=20060831130248.405496 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="21227" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831130250.000000 DATE=20060831130250.299067 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9741" 
+DG.ARRIVED=20060831130311.000000 DATE=20060831130309.453139 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="ce.grid.tuke.sk:2119/jobmanager-pbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831143320.000000 DATE=20060831143319.374059 HOST="n3.grid.tuke.sk" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="n3.grid.tuke.sk" 
+DG.ARRIVED=20060831143508.000000 DATE=20060831143508.117054 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="ce.grid.tuke.sk" 
+DG.ARRIVED=20060831143521.000000 DATE=20060831143457.565443 HOST="n3.grid.tuke.sk" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="2" 
+DG.ARRIVED=20060831143523.000000 DATE=20060831143457.724274 HOST="n3.grid.tuke.sk" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="reslice" 
+DG.ARRIVED=20060831143524.000000 DATE=20060831143457.858582 HOST="n3.grid.tuke.sk" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2.warp" 
+DG.ARRIVED=20060831143525.000000 DATE=20060831143457.993552 HOST="n3.grid.tuke.sk" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2.img" 
+DG.ARRIVED=20060831143526.000000 DATE=20060831143458.138063 HOST="n3.grid.tuke.sk" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2.hdr" 
+DG.ARRIVED=20060831143527.000000 DATE=20060831143458.279122 HOST="n3.grid.tuke.sk" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2-resliced.img" 
+DG.ARRIVED=20060831143529.000000 DATE=20060831143458.409290 HOST="n3.grid.tuke.sk" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2-resliced.img" 
+DG.ARRIVED=20060831143531.000000 DATE=20060831143458.561298 HOST="n3.grid.tuke.sk" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831143621.000000 DATE=20060831143621.131846 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060831143622.000000 DATE=20060831143621.461718 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/YQOSOo7Ov3Bmql6mk5fSOA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831125614.000000 DATE=20060831125553.175585 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/aPimH0SWMj6ZhvMmtlICow" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125638.000000 DATE=20060831125620.516409 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/aPimH0SWMj6ZhvMmtlICow" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125640.000000 DATE=20060831125619.211301 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/aPimH0SWMj6ZhvMmtlICow" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/aPimH0SWMj6ZhvMmtlICow\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/aP/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2faPimH0SWMj6ZhvMmtlICow\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831125553.000000 DATE=20060831125553.175585 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/bpVdssMPbFXgGDH1RzWxJQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125620.000000 DATE=20060831125620.516409 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/bpVdssMPbFXgGDH1RzWxJQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125702.000000 DATE=20060831125623.975403 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/bpVdssMPbFXgGDH1RzWxJQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/bpVdssMPbFXgGDH1RzWxJQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/bp/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fbpVdssMPbFXgGDH1RzWxJQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831125557.000000 DATE=20060831125553.175585 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/cu2HDZpnjTDOjVZl3ELhCA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125625.000000 DATE=20060831125620.516409 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/cu2HDZpnjTDOjVZl3ELhCA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125659.000000 DATE=20060831125622.875802 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/cu2HDZpnjTDOjVZl3ELhCA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/cu2HDZpnjTDOjVZl3ELhCA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/cu/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fcu2HDZpnjTDOjVZl3ELhCA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831125601.000000 DATE=20060831125553.175585 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/dGOcuol6zMjlRvkwDuoxEQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125628.000000 DATE=20060831125620.516409 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/dGOcuol6zMjlRvkwDuoxEQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125653.000000 DATE=20060831125621.964302 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/dGOcuol6zMjlRvkwDuoxEQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/dGOcuol6zMjlRvkwDuoxEQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/dG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fdGOcuol6zMjlRvkwDuoxEQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831125610.000000 DATE=20060831125553.175585 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/f1QFbuGA6E2xY03gr_pibQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125635.000000 DATE=20060831125620.516409 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/f1QFbuGA6E2xY03gr_pibQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125646.000000 DATE=20060831125620.186373 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/f1QFbuGA6E2xY03gr_pibQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/f1QFbuGA6E2xY03gr_pibQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/f1/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ff1QFbuGA6E2xY03gr_5fpibQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831130539.000000 DATE=20060831130536.157667 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="22805" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/f1QFbuGA6E2xY03gr_pibQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831130650.000000 DATE=20060831130649.474002 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="22805" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/f1QFbuGA6E2xY03gr_pibQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="fangorn.man.poznan.pl:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060831130650.000000 DATE=20060831130649.858747 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="22805" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/f1QFbuGA6E2xY03gr_pibQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831130701.000000 DATE=20060831130700.660307 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/f1QFbuGA6E2xY03gr_pibQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9744" 
+DG.ARRIVED=20060831130707.000000 DATE=20060831130707.184706 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/f1QFbuGA6E2xY03gr_pibQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="fangorn.man.poznan.pl:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831131039.000000 DATE=20060831131039.191755 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/f1QFbuGA6E2xY03gr_pibQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="fangorn.man.poznan.pl" 
+DG.ARRIVED=20060831131152.000000 DATE=20060831131152.298259 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/f1QFbuGA6E2xY03gr_pibQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="FAILED" DG.DONE.REASON="File not available.Cannot read JobWrapper output, both from Condor and from Maradona." DG.DONE.EXIT_CODE="1" 
+DG.ARRIVED=20060831131157.000000 DATE=20060831131156.695852 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="25581" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/f1QFbuGA6E2xY03gr_pibQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000004:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831131158.000000 DATE=20060831131156.918812 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="25581" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/f1QFbuGA6E2xY03gr_pibQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000005:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="99" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831131158.000000 DATE=20060831131157.095715 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="25581" DG.EVNT="Abort" DG.JOBID="https://skurut1.cesnet.cz:9000/f1QFbuGA6E2xY03gr_pibQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000006:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.ABORT.REASON="hit job shallow retry count (0)" 
+DG.ARRIVED=20060831125612.000000 DATE=20060831125553.175585 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/fB2N2WU7ECyGz4cJ1nBtbA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125637.000000 DATE=20060831125620.516409 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/fB2N2WU7ECyGz4cJ1nBtbA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125642.000000 DATE=20060831125619.540536 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/fB2N2WU7ECyGz4cJ1nBtbA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/fB2N2WU7ECyGz4cJ1nBtbA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/fB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2ffB2N2WU7ECyGz4cJ1nBtbA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831125604.000000 DATE=20060831125553.175585 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/ix00sbSdfS-r3yTHByk_vg" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125629.000000 DATE=20060831125620.516409 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/ix00sbSdfS-r3yTHByk_vg" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125652.000000 DATE=20060831125621.640330 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/ix00sbSdfS-r3yTHByk_vg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/ix00sbSdfS-r3yTHByk_vg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/ix/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fix00sbSdfS-r3yTHByk_5fvg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831125605.000000 DATE=20060831125553.175585 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125630.000000 DATE=20060831125620.516409 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125650.000000 DATE=20060831125621.343497 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/p9/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fp9C-3H0nVQxh2rp9M5EB-Q\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831125732.000000 DATE=20060831125640.458330 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18728" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831125857.000000 DATE=20060831125856.983262 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18728" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="ce.grid.tuke.sk:2119/jobmanager-pbs-voce" 
+DG.ARRIVED=20060831125858.000000 DATE=20060831125857.291470 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18728" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831125906.000000 DATE=20060831125905.839754 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9738" 
+DG.ARRIVED=20060831125918.000000 DATE=20060831125918.129317 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="ce.grid.tuke.sk:2119/jobmanager-pbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831125919.000000 DATE=20060831125918.869452 HOST="n2.grid.tuke.sk" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="n2.grid.tuke.sk" 
+DG.ARRIVED=20060831130101.000000 DATE=20060831130047.288605 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="ce.grid.tuke.sk" 
+DG.ARRIVED=20060831130121.000000 DATE=20060831130059.583578 HOST="n2.grid.tuke.sk" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="1" 
+DG.ARRIVED=20060831130123.000000 DATE=20060831130059.748456 HOST="n2.grid.tuke.sk" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="align_warp" 
+DG.ARRIVED=20060831130127.000000 DATE=20060831130059.907467 HOST="n2.grid.tuke.sk" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2.img" 
+DG.ARRIVED=20060831130131.000000 DATE=20060831130100.077566 HOST="n2.grid.tuke.sk" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference.img" 
+DG.ARRIVED=20060831130133.000000 DATE=20060831130100.237472 HOST="n2.grid.tuke.sk" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2.warp" 
+DG.ARRIVED=20060831130136.000000 DATE=20060831130100.407905 HOST="n2.grid.tuke.sk" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-m 12" 
+DG.ARRIVED=20060831130139.000000 DATE=20060831130100.572987 HOST="n2.grid.tuke.sk" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-q" 
+DG.ARRIVED=20060831130144.000000 DATE=20060831130100.738072 HOST="n2.grid.tuke.sk" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000015" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_header" DG.USERTAG.VALUE="GLOBAL_MAXIMUM=" 
+DG.ARRIVED=20060831130148.000000 DATE=20060831130100.921959 HOST="n2.grid.tuke.sk" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831130208.000000 DATE=20060831130205.811672 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060831130212.000000 DATE=20060831130206.369102 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/p9C-3H0nVQxh2rp9M5EB-Q" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831125558.000000 DATE=20060831125553.175585 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125626.000000 DATE=20060831125620.516409 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125657.000000 DATE=20060831125622.597175 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/sU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fsU6x-K9eNxVLRuLKZWTx-A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831125728.000000 DATE=20060831125640.420526 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18727" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831125737.000000 DATE=20060831125722.257326 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18727" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060831125737.000000 DATE=20060831125722.553874 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18727" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831125738.000000 DATE=20060831125732.225533 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9736" 
+DG.ARRIVED=20060831125744.000000 DATE=20060831125744.540672 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831130204.000000 DATE=20060831130127.108781 HOST="skurut22.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut22.cesnet.cz" 
+DG.ARRIVED=20060831130205.000000 DATE=20060831130203.328429 HOST="skurut22.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="1" 
+DG.ARRIVED=20060831130208.000000 DATE=20060831130204.438828 HOST="skurut22.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="align_warp" 
+DG.ARRIVED=20060831130212.000000 DATE=20060831130205.086861 HOST="skurut22.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1.img" 
+DG.ARRIVED=20060831130215.000000 DATE=20060831130205.974632 HOST="skurut22.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference.img" 
+DG.ARRIVED=20060831130217.000000 DATE=20060831130206.272399 HOST="skurut22.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1.warp" 
+DG.ARRIVED=20060831130220.000000 DATE=20060831130206.553934 HOST="skurut22.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-m 12" 
+DG.ARRIVED=20060831130224.000000 DATE=20060831130206.834883 HOST="skurut22.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-q" 
+DG.ARRIVED=20060831130228.000000 DATE=20060831130207.116823 HOST="skurut22.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000015" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_header" DG.USERTAG.VALUE="GLOBAL_MAXIMUM=" 
+DG.ARRIVED=20060831130231.000000 DATE=20060831130207.432203 HOST="skurut22.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831130412.000000 DATE=20060831130411.439006 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060831130536.000000 DATE=20060831130535.030107 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060831130537.000000 DATE=20060831130536.045554 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/sU6x-K9eNxVLRuLKZWTx-A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060831125611.000000 DATE=20060831125553.175585 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/yoOTrmOjGGVaymlZVz2TiA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125636.000000 DATE=20060831125620.516409 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/yoOTrmOjGGVaymlZVz2TiA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060831125644.000000 DATE=20060831125619.860241 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/yoOTrmOjGGVaymlZVz2TiA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = other.GlueCEStateStatus == \"Production\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/yoOTrmOjGGVaymlZVz2TiA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/yo/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060831125730.000000 DATE=20060831125640.463730 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18730" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/yoOTrmOjGGVaymlZVz2TiA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831125837.000000 DATE=20060831125836.768351 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18730" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/yoOTrmOjGGVaymlZVz2TiA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="ce1-egee.fesb.hr:2119/jobmanager-pbs-voce" 
+DG.ARRIVED=20060831125837.000000 DATE=20060831125837.048366 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="18730" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/yoOTrmOjGGVaymlZVz2TiA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831125847.000000 DATE=20060831125846.818644 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/yoOTrmOjGGVaymlZVz2TiA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9737" 
+DG.ARRIVED=20060831125848.000000 DATE=20060831125847.046907 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/yoOTrmOjGGVaymlZVz2TiA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="unavailable" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ.log" DG.TRANSFER.JOB="stream_error = False\n+edg_jobid = \"https://skurut1.cesnet.cz:9000/yoOTrmOjGGVaymlZVz2TiA\"\nArguments = 'UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000'\nGlobusScheduler = ce1-egee.fesb.hr:2119/jobmanager-pbs\n+ce_id = \"ce1-egee.fesb.hr:2119/jobmanager-pbs-voce\"\nTransfer_Executable = True\nOutput = /var/glite/jobcontrol/condorio/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA/StandardOutput\nSubmit_Event_User_Notes = (https://skurut1.cesnet.cz:9000/yoOTrmOjGGVaymlZVz2TiA) (UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000) (0)\nCopy_to_Spool = False\nExecutable = /var/glite/jobcontrol/submit/9_/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/JobWrapper.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA.sh\nX509UserProxy = /var/glite/SandboxDir/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/user.proxy\nerror = /var/glite/jobcontrol/condorio/9_/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA/StandardError\n+LB_sequence_code = \"UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000\"\nNotification = never\nstream_output = False\nGlobusRSL = (queue=voce)(jobtype=single)\n+Type = \"job\"\nUniverse = grid\n+UserSubjectName = \"/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac\"\n+edg_dagid = \"https://skurut1.cesnet.cz:9000/9_ttFpHFxe4osjuOdQ2kQQ\"\nLog = /var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ.log\ngrid_type = globus\n+CondorSubmitFile = \"/var/glite/jobcontrol/submit/9_/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9_5fttFpHFxe4osjuOdQ2kQQ/Condor.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyoOTrmOjGGVaymlZVz2TiA.submit\"\nQueue 1\n" DG.TRANSFER.RESULT="FAIL" DG.TRANSFER.REASON="7 authentication failed: GSS Major Status: Authentication Failed GSS Minor Status Error Chain:  init.c:499: globus_gss_assist_init_sec_context_async: Error during context initialization init_sec_context" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060831125858.000000 DATE=20060831125857.693013 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="19629" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/yoOTrmOjGGVaymlZVz2TiA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000004:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831125859.000000 DATE=20060831125857.957886 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="19629" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/yoOTrmOjGGVaymlZVz2TiA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000005:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="99" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060831125900.000000 DATE=20060831125858.318392 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="19629" DG.EVNT="Abort" DG.JOBID="https://skurut1.cesnet.cz:9000/yoOTrmOjGGVaymlZVz2TiA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000006:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.ABORT.REASON="hit job shallow retry count (0)" 
+DG.ARRIVED=20060831125901.000000 DATE=20060831125859.429625 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/yoOTrmOjGGVaymlZVz2TiA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="FAILED" DG.DONE.REASON="Job got an error while in the CondorG queue." DG.DONE.EXIT_CODE="1" 
diff --git a/org.glite.jp/examples/pch06/dump4 b/org.glite.jp/examples/pch06/dump4
new file mode 100644 (file)
index 0000000..5a460b1
--- /dev/null
@@ -0,0 +1,312 @@
+DG.ARRIVED=20060904123447.000000 DATE=20060904123446.995328 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ Requirements = other.GlueCEInfoHostname == \"skurut17.cesnet.cz\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A\"; nodes = [ slicery = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; converty = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; softmean = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; AllowZippedISB = true; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; CertificateSubject = \"/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac\"; X509UserProxy = \"/var/glite/SandboxDir/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/user.proxy\"; VOMS_FQAN = \"/voce/Role=NULL/Capability=NULL\"; LB_sequence_code = \"UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; InputSandboxPath = \"/var/glite/SandboxDir/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/input\"; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="" DG.REGJOB.JOBTYPE="DAG" DG.REGJOB.NSUBJOBS="15" DG.REGJOB.SEED="WMPROXY" 
+DG.ARRIVED=20060904123456.000000 DATE=20060904123454.188888 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ Requirements = other.GlueCEInfoHostname == \"skurut17.cesnet.cz\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A\"; nodes = [ slicery = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; converty = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; softmean = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; AllowZippedISB = true; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; CertificateSubject = \"/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac\"; X509UserProxy = \"/var/glite/SandboxDir/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/user.proxy\"; VOMS_FQAN = \"/voce/Role=NULL/Capability=NULL\"; LB_sequence_code = \"UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; InputSandboxPath = \"/var/glite/SandboxDir/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/input\"; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="" DG.REGJOB.JOBTYPE="DAG" DG.REGJOB.NSUBJOBS="15" DG.REGJOB.SEED="WMPROXY" 
+DG.ARRIVED=20060904123527.000000 DATE=20060904123510.808562 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.SEQCODE="UI=000000:NS=0000000003:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="(null)" DG.USERTAG.NAME="delegation_id" DG.USERTAG.VALUE="hL06_APvxBj8jyy_THnuqQ" 
+DG.ARRIVED=20060904123527.000000 DATE=20060904123511.173108 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.SEQCODE="UI=000000:NS=0000000004:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="(null)" DG.USERTAG.NAME="jdl_original" DG.USERTAG.VALUE="[ Requirements = other.GlueCEInfoHostname == \"skurut17.cesnet.cz\"; nodes = [ slicery = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; slicerx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; reslice4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; converty = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; align1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; reslice3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; convertx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; softmean = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; align2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; reslice2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; align3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; reslice1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; align4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; convertz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ]; slicerz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime ] ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; AllowZippedISB = true; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" 
+DG.ARRIVED=20060904123528.000000 DATE=20060904123511.523833 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.SEQCODE="UI=000000:NS=0000000005:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="(null)" DG.USERTAG.NAME="lb_sequence_code" DG.USERTAG.VALUE="UI=000000:NS=0000000005:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" 
+DG.ARRIVED=20060904123529.000000 DATE=20060904123512.221101 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.SEQCODE="UI=000000:NS=0000000006:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.ACCEPTED.FROM="NetworkServer" DG.ACCEPTED.FROM_HOST="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.ACCEPTED.FROM_INSTANCE="" DG.ACCEPTED.LOCAL_JOBID="" 
+DG.ARRIVED=20060904123530.000000 DATE=20060904123512.583043 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="EnQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.SEQCODE="UI=000000:NS=0000000007:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.ENQUEUED.QUEUE="/var/glite/workload_manager/input.fl" DG.ENQUEUED.JOB="[ Requirements = other.GlueCEInfoHostname == \"skurut17.cesnet.cz\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A\"; nodes = [ slicery = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; converty = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; softmean = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; AllowZippedISB = true; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; CertificateSubject = \"/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac\"; X509UserProxy = \"/var/glite/SandboxDir/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/user.proxy\"; VOMS_FQAN = \"/voce/Role=NULL/Capability=NULL\"; LB_sequence_code = \"UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; InputSandboxPath = \"/var/glite/SandboxDir/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/input\"; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" DG.ENQUEUED.RESULT="START" DG.ENQUEUED.REASON="" 
+DG.ARRIVED=20060904123530.000000 DATE=20060904123513.373970 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="EnQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.SEQCODE="UI=000000:NS=0000000008:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.ENQUEUED.QUEUE="/var/glite/workload_manager/input.fl" DG.ENQUEUED.JOB="[ Requirements = other.GlueCEInfoHostname == \"skurut17.cesnet.cz\"; edg_jobid = \"https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A\"; nodes = [ slicery = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; converty = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertx = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; softmean = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice2 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align3 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; reslice1 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; align4 = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; convertz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ]; slicerz = [ description = [ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]; node_type = \"edg_jdl\" ] ]; MyProxyServer = \"skurut3.cesnet.cz\"; dependencies = { { { align1 },{ reslice1 } },{ { align2 },{ reslice2 } },{ { align3 },{ reslice3 } },{ { align4 },{ reslice4 } },{ { reslice1,reslice2,reslice3,reslice4 },{ softmean } },{ { softmean },{ slicerx } },{ { softmean },{ slicery } },{ { softmean },{ slicerz } },{ { slicerx },{ convertx } },{ { slicery },{ converty } },{ { slicerz },{ convertz } } }; AllowZippedISB = true; CertificateSubject = \"/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac\"; X509UserProxy = \"/var/glite/SandboxDir/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/user.proxy\"; VOMS_FQAN = \"/voce/Role=NULL/Capability=NULL\"; InputSandboxPath = \"/var/glite/SandboxDir/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/input\"; LB_sequence_code = \"UI=000000:NS=0000000008:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; VirtualOrganisation = \"voce\"; type = \"dag\"; node_type = \"edg_jdl\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A\"; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" }; LBAddress = \"skurut1.cesnet.cz:9000\" ]" DG.ENQUEUED.RESULT="OK" DG.ENQUEUED.REASON="" 
+DG.ARRIVED=20060904123531.000000 DATE=20060904123514.176210 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="27876" DG.EVNT="DeQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.SEQCODE="UI=000000:NS=0000000008:WM=000001:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.DEQUEUED.QUEUE="/var/glite/workload_manager/input.fl" DG.DEQUEUED.LOCAL_JOBID="" 
+DG.ARRIVED=20060904123531.000000 DATE=20060904123514.833356 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="27876" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.SEQCODE="UI=000000:NS=0000000008:WM=000002:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="dagman" 
+DG.ARRIVED=20060904123532.000000 DATE=20060904123515.201702 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="27876" DG.EVNT="EnQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.SEQCODE="UI=000000:NS=0000000008:WM=000003:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.ENQUEUED.QUEUE="/var/glite/jobcontrol/queue.fl" DG.ENQUEUED.JOB="" DG.ENQUEUED.RESULT="START" DG.ENQUEUED.REASON="unavailable" 
+DG.ARRIVED=20060904123533.000000 DATE=20060904123515.548906 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="27876" DG.EVNT="EnQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.ENQUEUED.QUEUE="/var/glite/jobcontrol/queue.fl" DG.ENQUEUED.JOB="[ Arguments = [ JobAd = [ edg_jobid = \"https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A\"; Arguments = \"-f -l /var/glite/jobcontrol/submit/ww/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A -NoEventChecks -Debug 0 -Lockfile dag_description.con.lock -Dag /var/glite/jobcontrol/submit/ww/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/dag_description.con -Rescue /var/glite/jobcontrol/submit/ww/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/dag_description.con.rescue -maxpre 10 -Condorlog /var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log\"; environment = \"_CONDOR_DAGMAN_LOG=/var/glite/jobcontrol/condorio/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/dag.dagman.out;_CONDOR_MAX_DAGMAN_LOG=0\"; ce_id = \"dagman\"; Output = \"/var/glite/jobcontrol/condorio/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/dag.lib.out\"; Executable = \"/opt/condor-6.7.10/bin/condor_dagman\"; Getenv = true; X509UserProxy = \"/var/glite/SandboxDir/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/user.proxy\"; Error_ = \"/var/glite/jobcontrol/condorio/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/dag.lib.out\"; LB_sequence_code = \"UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000\"; Type = \"dag\"; Universe = \"scheduler\"; Remove_Kill_Sig = \"SIGUSR1\" ] ]; Command = \"Submit\"; Source = 2; Protocol = \"1.0.0\" ]" DG.ENQUEUED.RESULT="OK" DG.ENQUEUED.REASON="unavailable" 
+DG.ARRIVED=20060904123534.000000 DATE=20060904123516.929525 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="JobController" DG.SRC_INSTANCE="unique" DG.EVNT="DeQueued" DG.JOBID="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000001:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.DEQUEUED.QUEUE="/var/glite/jobcontrol/queue.fl" DG.DEQUEUED.LOCAL_JOBID="unavailable" 
+DG.ARRIVED=20060904123534.000000 DATE=20060904123517.221811 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="JobController" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000002:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.TRANSFER.DESTINATION="LogMonitor" DG.TRANSFER.DEST_HOST="localhost" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log" DG.TRANSFER.JOB="unavailable" DG.TRANSFER.RESULT="START" DG.TRANSFER.REASON="unavailable" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060904123535.000000 DATE=20060904123519.223355 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="JobController" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.TRANSFER.DESTINATION="LogMonitor" DG.TRANSFER.DEST_HOST="localhost" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log" DG.TRANSFER.JOB="+edg_jobid = \"https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A\"\nArguments = -f -l /var/glite/jobcontrol/submit/ww/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A -NoEventChecks -Debug 0 -Lockfile dag_description.con.lock -Dag /var/glite/jobcontrol/submit/ww/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/dag_description.con -Rescue /var/glite/jobcontrol/submit/ww/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/dag_description.con.rescue -maxpre 10 -Condorlog /var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log\nenvironment = _CONDOR_DAGMAN_LOG=/var/glite/jobcontrol/condorio/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/dag.dagman.out;_CONDOR_MAX_DAGMAN_LOG=0\n+ce_id = \"dagman\"\nOutput = /var/glite/jobcontrol/condorio/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/dag.lib.out\nSubmit_Event_Notes = DAG job: (https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A) (UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000000:LRMS=000000:APP=000000)\nExecutable = /opt/condor-6.7.10/bin/condor_dagman\nGetenv = True\nX509UserProxy = /var/glite/SandboxDir/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/user.proxy\nerror = /var/glite/jobcontrol/condorio/ww/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A/dag.lib.out\n+LB_sequence_code = \"UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000000:LRMS=000000:APP=000000\"\n+Type = \"dag\"\nUniverse = scheduler\nRemove_Kill_Sig = SIGUSR1\nLog = /var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log\n+CondorSubmitFile = \"/var/glite/jobcontrol/submit/ww/Condor.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.submit\"\nQueue 1\n" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="unavailable" DG.TRANSFER.DEST_JOBID="9799" 
+DG.ARRIVED=20060904123537.000000 DATE=20060904123521.075346 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000001:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9799" 
+DG.ARRIVED=20060904123537.000000 DATE=20060904123527.445256 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000003:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.RUNNING.NODE="<195.113.219.12:20194>" 
+DG.ARRIVED=20060904130437.000000 DATE=20060904130437.460808 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.SEQCODE="UI=000000:NS=0000000008:WM=000004:BH=0000000000:JSS=000003:LM=000005:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904123448.000000 DATE=20060904123447.684688 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123458.000000 DATE=20060904123457.236278 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123524.000000 DATE=20060904123501.238089 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/02/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f02ZaAADKyebzggYPp4M9tA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060904125334.000000 DATE=20060904125333.163726 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6776" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904125353.000000 DATE=20060904125352.932710 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6776" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060904125353.000000 DATE=20060904125353.248432 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6776" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904125358.000000 DATE=20060904125357.859716 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9811" 
+DG.ARRIVED=20060904125417.000000 DATE=20060904125417.034574 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060904125727.000000 DATE=20060904125537.148436 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut28.cesnet.cz" 
+DG.ARRIVED=20060904125733.000000 DATE=20060904125612.795856 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="4" 
+DG.ARRIVED=20060904125733.000000 DATE=20060904125613.110294 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="slicer" 
+DG.ARRIVED=20060904125733.000000 DATE=20060904125613.413990 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla.hdr" 
+DG.ARRIVED=20060904125734.000000 DATE=20060904125613.723824 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla.img" 
+DG.ARRIVED=20060904125734.000000 DATE=20060904125614.005832 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla-x.pgm" 
+DG.ARRIVED=20060904125734.000000 DATE=20060904125614.311644 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904130227.000000 DATE=20060904125629.915312 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060904130228.000000 DATE=20060904125848.915608 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060904130228.000000 DATE=20060904125849.381556 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/02ZaAADKyebzggYPp4M9tA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904123449.000000 DATE=20060904123447.684688 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123500.000000 DATE=20060904123457.236278 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123518.000000 DATE=20060904123459.949634 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3\"; OutputSandboxPath = \"/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/9d/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2f9d0XMwfPuefR9woAFkDplQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060904124230.000000 DATE=20060904124151.623318 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="3715" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904124235.000000 DATE=20060904124157.630058 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="3715" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060904124235.000000 DATE=20060904124157.905000 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="3715" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904124236.000000 DATE=20060904124205.716011 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9805" 
+DG.ARRIVED=20060904124236.000000 DATE=20060904124218.664148 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060904124527.000000 DATE=20060904124339.598715 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut28.cesnet.cz" 
+DG.ARRIVED=20060904124533.000000 DATE=20060904124428.239587 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="2" 
+DG.ARRIVED=20060904124534.000000 DATE=20060904124428.483885 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="reslice" 
+DG.ARRIVED=20060904124535.000000 DATE=20060904124428.839644 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3.warp" 
+DG.ARRIVED=20060904124535.000000 DATE=20060904124429.216990 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3.img" 
+DG.ARRIVED=20060904124536.000000 DATE=20060904124429.508146 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3.hdr" 
+DG.ARRIVED=20060904124536.000000 DATE=20060904124429.795840 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3-resliced.img" 
+DG.ARRIVED=20060904124537.000000 DATE=20060904124430.086007 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3-resliced.img" 
+DG.ARRIVED=20060904124537.000000 DATE=20060904124430.394089 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904124745.000000 DATE=20060904124545.021008 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060904124746.000000 DATE=20060904124704.085401 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060904124747.000000 DATE=20060904124704.374370 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/9d0XMwfPuefR9woAFkDplQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904123453.000000 DATE=20060904123447.684688 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123503.000000 DATE=20060904123457.236278 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123504.000000 DATE=20060904123456.984076 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/BU/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fBU2jWJ2FaL9rAEeR1Lea3A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060904125334.000000 DATE=20060904125333.211179 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6778" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904125341.000000 DATE=20060904125341.316938 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6778" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060904125342.000000 DATE=20060904125341.546981 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6778" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904125345.000000 DATE=20060904125345.309055 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9809" 
+DG.ARRIVED=20060904125404.000000 DATE=20060904125404.243987 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060904125526.000000 DATE=20060904125526.067376 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060904125726.000000 DATE=20060904125629.508575 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060904125727.000000 DATE=20060904125557.751347 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="4" 
+DG.ARRIVED=20060904125728.000000 DATE=20060904125558.031007 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="slicer" 
+DG.ARRIVED=20060904125728.000000 DATE=20060904125558.283524 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla.hdr" 
+DG.ARRIVED=20060904125729.000000 DATE=20060904125558.578001 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla.img" 
+DG.ARRIVED=20060904125729.000000 DATE=20060904125558.857358 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla-z.pgm" 
+DG.ARRIVED=20060904125729.000000 DATE=20060904125559.160909 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904130330.000000 DATE=20060904125856.196182 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060904130331.000000 DATE=20060904125856.472984 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/BU2jWJ2FaL9rAEeR1Lea3A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904123447.000000 DATE=20060904123447.684688 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123457.000000 DATE=20060904123457.236278 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123525.000000 DATE=20060904123501.611573 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"slicer.sh\"; X509UserProxy = \"/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/MB/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fMB994jT9V2PGcyK9dyjgcA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060904125334.000000 DATE=20060904125333.160793 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6777" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904125346.000000 DATE=20060904125346.370666 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6777" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060904125347.000000 DATE=20060904125346.656307 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="6777" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904125351.000000 DATE=20060904125351.589048 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9810" 
+DG.ARRIVED=20060904125411.000000 DATE=20060904125410.634367 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060904125727.000000 DATE=20060904125536.363207 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut28.cesnet.cz" 
+DG.ARRIVED=20060904125730.000000 DATE=20060904125611.196999 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="4" 
+DG.ARRIVED=20060904125730.000000 DATE=20060904125611.527471 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="slicer" 
+DG.ARRIVED=20060904125731.000000 DATE=20060904125611.798787 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla.hdr" 
+DG.ARRIVED=20060904125731.000000 DATE=20060904125612.090269 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla.img" 
+DG.ARRIVED=20060904125732.000000 DATE=20060904125612.391118 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla-y.pgm" 
+DG.ARRIVED=20060904125732.000000 DATE=20060904125612.718979 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904130227.000000 DATE=20060904125630.198449 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060904130229.000000 DATE=20060904125855.759058 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060904130330.000000 DATE=20060904125855.981210 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/MB994jT9V2PGcyK9dyjgcA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904123448.000000 DATE=20060904123447.684688 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123458.000000 DATE=20060904123457.236278 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123524.000000 DATE=20060904123500.920995 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4\"; OutputSandboxPath = \"/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/Rg/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fRglBtUz0IzwSeM32KLnHPg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060904124230.000000 DATE=20060904124146.834417 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="3685" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904124233.000000 DATE=20060904124152.669043 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="3685" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060904124234.000000 DATE=20060904124152.955570 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="3685" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904124235.000000 DATE=20060904124159.439059 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9804" 
+DG.ARRIVED=20060904124236.000000 DATE=20060904124212.033705 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060904124326.000000 DATE=20060904124325.692965 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060904124526.000000 DATE=20060904124444.418383 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060904124527.000000 DATE=20060904124408.101920 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="2" 
+DG.ARRIVED=20060904124528.000000 DATE=20060904124408.544697 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="reslice" 
+DG.ARRIVED=20060904124528.000000 DATE=20060904124408.826657 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4.warp" 
+DG.ARRIVED=20060904124529.000000 DATE=20060904124409.141281 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4.img" 
+DG.ARRIVED=20060904124529.000000 DATE=20060904124409.420485 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4.hdr" 
+DG.ARRIVED=20060904124529.000000 DATE=20060904124409.745107 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4-resliced.img" 
+DG.ARRIVED=20060904124530.000000 DATE=20060904124410.291018 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4-resliced.img" 
+DG.ARRIVED=20060904124530.000000 DATE=20060904124410.646628 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904124747.000000 DATE=20060904124711.349331 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060904124748.000000 DATE=20060904124711.647250 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/RglBtUz0IzwSeM32KLnHPg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904123450.000000 DATE=20060904123447.684688 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123500.000000 DATE=20060904123457.236278 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123516.000000 DATE=20060904123459.627092 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla x\"; OutputSandboxPath = \"/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/hv/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fhvkpZCsRsiqrxs5K_5fbo7Ew\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060904130024.000000 DATE=20060904130023.859168 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut31.cesnet.cz" 
+DG.ARRIVED=20060904130225.000000 DATE=20060904130040.564712 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="5" 
+DG.ARRIVED=20060904130226.000000 DATE=20060904130040.845852 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="convert" 
+DG.ARRIVED=20060904130226.000000 DATE=20060904130041.147216 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla-x.pgm" 
+DG.ARRIVED=20060904130226.000000 DATE=20060904130041.479142 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla-x.gif" 
+DG.ARRIVED=20060904130229.000000 DATE=20060904125850.551826 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="8116" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904130332.000000 DATE=20060904125909.911659 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="8116" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060904130332.000000 DATE=20060904125910.282364 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="8116" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904130334.000000 DATE=20060904125920.803371 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9812" 
+DG.ARRIVED=20060904130335.000000 DATE=20060904125933.878107 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060904130337.000000 DATE=20060904130204.972748 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060904130431.000000 DATE=20060904130430.964594 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060904130431.000000 DATE=20060904130431.206276 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904130527.000000 DATE=20060904130041.829279 HOST="skurut31.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/hvkpZCsRsiqrxs5K_bo7Ew" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904123449.000000 DATE=20060904123447.684688 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123459.000000 DATE=20060904123457.236278 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123519.000000 DATE=20060904123500.248507 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/lM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2flMTEhrxDUgNhUpPUCvKB1A\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060904123536.000000 DATE=20060904123519.974835 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="2035" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904123548.000000 DATE=20060904123548.120811 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="2035" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060904123548.000000 DATE=20060904123548.372106 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="2035" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904123554.000000 DATE=20060904123553.632355 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9802" 
+DG.ARRIVED=20060904123613.000000 DATE=20060904123612.818223 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060904123927.000000 DATE=20060904123925.694717 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060904123928.000000 DATE=20060904123737.185164 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut27.cesnet.cz" 
+DG.ARRIVED=20060904123937.000000 DATE=20060904123817.733509 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="1" 
+DG.ARRIVED=20060904123937.000000 DATE=20060904123818.139436 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="align_warp" 
+DG.ARRIVED=20060904123938.000000 DATE=20060904123818.489929 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1.img" 
+DG.ARRIVED=20060904123938.000000 DATE=20060904123818.794738 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference.img" 
+DG.ARRIVED=20060904123939.000000 DATE=20060904123819.085044 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1.warp" 
+DG.ARRIVED=20060904123940.000000 DATE=20060904123819.437875 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-m 12" 
+DG.ARRIVED=20060904123940.000000 DATE=20060904123819.770658 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-q" 
+DG.ARRIVED=20060904123941.000000 DATE=20060904123820.066379 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000015" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_header" DG.USERTAG.VALUE="GLOBAL_MAXIMUM=" 
+DG.ARRIVED=20060904123943.000000 DATE=20060904123820.569449 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904124232.000000 DATE=20060904124152.400873 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060904124232.000000 DATE=20060904124152.636736 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/lMTEhrxDUgNhUpPUCvKB1A" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904123451.000000 DATE=20060904123447.684688 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123502.000000 DATE=20060904123457.236278 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123510.000000 DATE=20060904123458.348951 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/q8/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fq8Ifnr5i2sZ-aKDiz28Pnw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060904123536.000000 DATE=20060904123519.990410 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="2037" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904123539.000000 DATE=20060904123538.507056 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="2037" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060904123539.000000 DATE=20060904123538.937421 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="2037" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904123547.000000 DATE=20060904123547.392245 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9801" 
+DG.ARRIVED=20060904123600.000000 DATE=20060904123600.247693 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060904123726.000000 DATE=20060904123726.338115 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut28.cesnet.cz" 
+DG.ARRIVED=20060904123931.000000 DATE=20060904123811.652619 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="1" 
+DG.ARRIVED=20060904123932.000000 DATE=20060904123811.971176 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="align_warp" 
+DG.ARRIVED=20060904123933.000000 DATE=20060904123812.257359 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3.img" 
+DG.ARRIVED=20060904123934.000000 DATE=20060904123812.552032 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference.img" 
+DG.ARRIVED=20060904123934.000000 DATE=20060904123813.002561 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3.warp" 
+DG.ARRIVED=20060904123935.000000 DATE=20060904123813.360738 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-m 12" 
+DG.ARRIVED=20060904123935.000000 DATE=20060904123813.689388 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-q" 
+DG.ARRIVED=20060904123936.000000 DATE=20060904123813.989102 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000015" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_header" DG.USERTAG.VALUE="GLOBAL_MAXIMUM=" 
+DG.ARRIVED=20060904123936.000000 DATE=20060904123814.297488 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904124227.000000 DATE=20060904123926.213172 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060904124230.000000 DATE=20060904124151.632949 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060904124231.000000 DATE=20060904124151.984186 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/q8Ifnr5i2sZ-aKDiz28Pnw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904123451.000000 DATE=20060904123447.684688 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123501.000000 DATE=20060904123457.236278 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123513.000000 DATE=20060904123458.952830 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/s4/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fs47ihjBHQXqPkkNwA2iazg\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060904123536.000000 DATE=20060904123519.979789 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="2036" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904123604.000000 DATE=20060904123604.345472 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="2036" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060904123604.000000 DATE=20060904123604.582182 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="2036" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904123606.000000 DATE=20060904123606.533255 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9803" 
+DG.ARRIVED=20060904123625.000000 DATE=20060904123625.048807 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060904123928.000000 DATE=20060904123737.944986 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut27.cesnet.cz" 
+DG.ARRIVED=20060904123939.000000 DATE=20060904123819.138942 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="1" 
+DG.ARRIVED=20060904123939.000000 DATE=20060904123819.437384 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="align_warp" 
+DG.ARRIVED=20060904123941.000000 DATE=20060904123819.771294 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2.img" 
+DG.ARRIVED=20060904123942.000000 DATE=20060904123820.066749 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference.img" 
+DG.ARRIVED=20060904123942.000000 DATE=20060904123820.606438 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2.warp" 
+DG.ARRIVED=20060904123943.000000 DATE=20060904123820.926343 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-m 12" 
+DG.ARRIVED=20060904123944.000000 DATE=20060904123821.237386 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-q" 
+DG.ARRIVED=20060904123944.000000 DATE=20060904123821.519909 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000015" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_header" DG.USERTAG.VALUE="GLOBAL_MAXIMUM=" 
+DG.ARRIVED=20060904123945.000000 DATE=20060904123821.860664 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904124228.000000 DATE=20060904124026.577250 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060904124233.000000 DATE=20060904124152.966935 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060904124234.000000 DATE=20060904124153.239529 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/s47ihjBHQXqPkkNwA2iazg" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904123453.000000 DATE=20060904123447.684688 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123503.000000 DATE=20060904123457.236278 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123506.000000 DATE=20060904123457.457283 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla z\"; OutputSandboxPath = \"/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/uX/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fuXYClPwMnO_5fEywCGlpM2QA\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060904130225.000000 DATE=20060904130031.310577 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut28.cesnet.cz" 
+DG.ARRIVED=20060904130332.000000 DATE=20060904125900.993428 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="8156" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904130333.000000 DATE=20060904125915.407974 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="8156" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060904130333.000000 DATE=20060904125915.710338 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="8156" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904130335.000000 DATE=20060904125927.183646 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9813" 
+DG.ARRIVED=20060904130336.000000 DATE=20060904125940.128314 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060904130338.000000 DATE=20060904130205.215225 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060904130430.000000 DATE=20060904130430.520092 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060904130431.000000 DATE=20060904130430.734089 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904130528.000000 DATE=20060904130049.579728 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="5" 
+DG.ARRIVED=20060904130528.000000 DATE=20060904130049.918749 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="convert" 
+DG.ARRIVED=20060904130528.000000 DATE=20060904130050.251367 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla-z.pgm" 
+DG.ARRIVED=20060904130529.000000 DATE=20060904130050.547723 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla-z.gif" 
+DG.ARRIVED=20060904130529.000000 DATE=20060904130050.944849 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/uXYClPwMnO_EywCGlpM2QA" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904123448.000000 DATE=20060904123447.684688 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123459.000000 DATE=20060904123457.236278 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123521.000000 DATE=20060904123500.557822 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla y\"; OutputSandboxPath = \"/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"convert.sh\"; X509UserProxy = \"/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/vl/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fvlTIc3M5tknmwUQLOflh0g\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060904130225.000000 DATE=20060904130040.826122 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut28.cesnet.cz" 
+DG.ARRIVED=20060904130331.000000 DATE=20060904125900.979106 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="8155" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904130333.000000 DATE=20060904125920.662983 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="8155" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060904130335.000000 DATE=20060904125920.921183 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="8155" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904130335.000000 DATE=20060904125927.564957 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9814" 
+DG.ARRIVED=20060904130337.000000 DATE=20060904125946.378542 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060904130338.000000 DATE=20060904130205.481291 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060904130418.000000 DATE=20060904130417.990222 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060904130418.000000 DATE=20060904130418.221470 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904130530.000000 DATE=20060904130058.544287 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="5" 
+DG.ARRIVED=20060904130530.000000 DATE=20060904130058.912532 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="convert" 
+DG.ARRIVED=20060904130530.000000 DATE=20060904130059.214055 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla-y.pgm" 
+DG.ARRIVED=20060904130531.000000 DATE=20060904130059.518753 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla-y.gif" 
+DG.ARRIVED=20060904130531.000000 DATE=20060904130059.833410 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/vlTIc3M5tknmwUQLOflh0g" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904123450.000000 DATE=20060904123447.684688 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123501.000000 DATE=20060904123457.236278 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123515.000000 DATE=20060904123459.301681 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla\"; OutputSandboxPath = \"/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"softmean.sh\"; X509UserProxy = \"/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/wG/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwGMnTvCILtiSTi7ZOQwfTQ\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060904124749.000000 DATE=20060904124717.149828 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="5179" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904124750.000000 DATE=20060904124725.805561 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="5179" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060904124751.000000 DATE=20060904124726.077297 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="5179" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904124751.000000 DATE=20060904124731.353051 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9808" 
+DG.ARRIVED=20060904124751.000000 DATE=20060904124743.657694 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060904124923.000000 DATE=20060904124923.178082 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut28.cesnet.cz" 
+DG.ARRIVED=20060904125124.000000 DATE=20060904125114.332832 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060904125124.000000 DATE=20060904125031.850483 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="3" 
+DG.ARRIVED=20060904125124.000000 DATE=20060904125032.131727 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="softmean" 
+DG.ARRIVED=20060904125125.000000 DATE=20060904125032.425280 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1-resliced.img" 
+DG.ARRIVED=20060904125125.000000 DATE=20060904125032.950542 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1-resliced.hdr" 
+DG.ARRIVED=20060904125126.000000 DATE=20060904125033.261428 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2-resliced.img" 
+DG.ARRIVED=20060904125126.000000 DATE=20060904125033.502973 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2-resliced.hdr" 
+DG.ARRIVED=20060904125126.000000 DATE=20060904125033.817348 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3-resliced.img" 
+DG.ARRIVED=20060904125127.000000 DATE=20060904125034.084689 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000015" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy3-resliced.hdr" 
+DG.ARRIVED=20060904125127.000000 DATE=20060904125034.388489 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000017" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4-resliced.img" 
+DG.ARRIVED=20060904125128.000000 DATE=20060904125034.692513 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000019" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4-resliced.hdr" 
+DG.ARRIVED=20060904125128.000000 DATE=20060904125035.023361 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000021" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla.img" 
+DG.ARRIVED=20060904125129.000000 DATE=20060904125035.334638 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000023" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/blabla.hdr" 
+DG.ARRIVED=20060904125129.000000 DATE=20060904125035.673770 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904125333.000000 DATE=20060904125332.791857 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060904125333.000000 DATE=20060904125333.028953 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/wGMnTvCILtiSTi7ZOQwfTQ" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904123452.000000 DATE=20060904123447.684688 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123502.000000 DATE=20060904123457.236278 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123509.000000 DATE=20060904123458.072830 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1\"; OutputSandboxPath = \"/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/wd/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwdWQHL0-RXkd3VeNcSrTaw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060904124231.000000 DATE=20060904124151.663646 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="3716" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904124237.000000 DATE=20060904124223.093936 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="3716" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060904124237.000000 DATE=20060904124223.399697 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="3716" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904124238.000000 DATE=20060904124231.112363 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9806" 
+DG.ARRIVED=20060904124244.000000 DATE=20060904124243.694931 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060904124526.000000 DATE=20060904124444.662666 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060904124527.000000 DATE=20060904124337.266357 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut28.cesnet.cz" 
+DG.ARRIVED=20060904124531.000000 DATE=20060904124426.706175 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="2" 
+DG.ARRIVED=20060904124531.000000 DATE=20060904124427.062794 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="reslice" 
+DG.ARRIVED=20060904124532.000000 DATE=20060904124427.387340 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1.warp" 
+DG.ARRIVED=20060904124532.000000 DATE=20060904124427.684461 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1.img" 
+DG.ARRIVED=20060904124532.000000 DATE=20060904124428.149760 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1.hdr" 
+DG.ARRIVED=20060904124533.000000 DATE=20060904124428.448924 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1-resliced.img" 
+DG.ARRIVED=20060904124534.000000 DATE=20060904124428.758926 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy1-resliced.img" 
+DG.ARRIVED=20060904124535.000000 DATE=20060904124429.186278 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904124749.000000 DATE=20060904124718.692608 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060904124750.000000 DATE=20060904124719.124737 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/wdWQHL0-RXkd3VeNcSrTaw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904123451.000000 DATE=20060904123447.684688 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123501.000000 DATE=20060904123457.236278 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123512.000000 DATE=20060904123458.663149 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2\"; OutputSandboxPath = \"/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"reslice.sh\"; X509UserProxy = \"/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/xw/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fxwIsN2JgGfsRuvYwh0QXsw\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060904124231.000000 DATE=20060904124151.625037 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="3717" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904124237.000000 DATE=20060904124228.091516 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="3717" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060904124238.000000 DATE=20060904124228.325095 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="3717" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904124238.000000 DATE=20060904124237.410070 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9807" 
+DG.ARRIVED=20060904124250.000000 DATE=20060904124249.935054 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060904124527.000000 DATE=20060904124347.461870 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut27.cesnet.cz" 
+DG.ARRIVED=20060904124538.000000 DATE=20060904124433.331337 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="2" 
+DG.ARRIVED=20060904124538.000000 DATE=20060904124433.670790 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="reslice" 
+DG.ARRIVED=20060904124539.000000 DATE=20060904124433.974650 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2.warp" 
+DG.ARRIVED=20060904124539.000000 DATE=20060904124434.329198 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2.img" 
+DG.ARRIVED=20060904124539.000000 DATE=20060904124434.690356 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2.hdr" 
+DG.ARRIVED=20060904124540.000000 DATE=20060904124434.997368 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2-resliced.img" 
+DG.ARRIVED=20060904124540.000000 DATE=20060904124435.272736 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy2-resliced.img" 
+DG.ARRIVED=20060904124541.000000 DATE=20060904124435.592177 HOST="skurut27.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904124746.000000 DATE=20060904124545.595704 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060904124748.000000 DATE=20060904124711.938604 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060904124749.000000 DATE=20060904124712.184016 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/xwIsN2JgGfsRuvYwh0QXsw" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904123452.000000 DATE=20060904123447.684688 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123503.000000 DATE=20060904123457.236278 HOST="skurut1.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="L&B server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="" 
+DG.ARRIVED=20060904123507.000000 DATE=20060904123457.782669 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.EVNT="RegJob" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.REGJOB.JDL="[ requirements = ( other.GlueCEInfoHostname == \"skurut17.cesnet.cz\" ) && ( other.GlueCEStateStatus == \"Production\" ); edg_jobid = \"https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w\"; arguments = \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4 gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference\"; OutputSandboxPath = \"/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w/output\"; MyProxyServer = \"skurut3.cesnet.cz\"; JobType = \"normal\"; executable = \"align.sh\"; X509UserProxy = \"/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w/user.proxy\"; InputSandboxPath = \"/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w/input\"; VirtualOrganisation = \"voce\"; rank =  -other.GlueCEStateEstimatedResponseTime; Type = \"job\"; WMPInputSandboxBaseURI = \"gsiftp://skurut2.cesnet.cz:2811/var/glite/SandboxDir/yM/https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fyM3sz8v6WCIPgi5-0m8L4w\"; DefaultRank =  -other.GlueCEStateEstimatedResponseTime; InputSandbox = { \"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert.sh\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/align_warp\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/scanheader\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reslice\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/softmean\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/slicer\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/convert\",\"gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/delegates.xml\" } ]" DG.REGJOB.NS="https://195.113.219.12:7443/glite_wms_wmproxy_server" DG.REGJOB.PARENT="https://skurut1.cesnet.cz:9000/wwBtp1l0inuUFD7-Y-8y9A" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="5vY8fc90h6jpb_tkuIl6yg" 
+DG.ARRIVED=20060904123535.000000 DATE=20060904123519.985185 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="2038" DG.EVNT="HelperCall" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000001:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERCALL.HELPER_NAME="dag_node_planner" DG.HELPERCALL.HELPER_PARAMS="" DG.HELPERCALL.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904123538.000000 DATE=20060904123532.411689 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="2038" DG.EVNT="Match" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000002:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.MATCH.DEST_ID="skurut17.cesnet.cz:2119/jobmanager-lcgpbs-voce" 
+DG.ARRIVED=20060904123538.000000 DATE=20060904123533.023074 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="BigHelper" DG.SRC_INSTANCE="2038" DG.EVNT="HelperReturn" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac/CN=proxy/CN=proxy" DG.HELPERRETURN.HELPER_NAME="dag_node_planner" DG.HELPERRETURN.RETVAL="0" DG.HELPERRETURN.SRC_ROLE="CALLED" 
+DG.ARRIVED=20060904123541.000000 DATE=20060904123541.021783 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Accepted" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000001:LRMS=000000:APP=000000" DG.USER="" DG.ACCEPTED.FROM="JobController" DG.ACCEPTED.FROM_HOST="localhost" DG.ACCEPTED.FROM_INSTANCE="unavailable" DG.ACCEPTED.LOCAL_JOBID="9800" 
+DG.ARRIVED=20060904123554.000000 DATE=20060904123553.942529 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Transfer" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000003:LRMS=000000:APP=000000" DG.USER="" DG.TRANSFER.DESTINATION="LRMS" DG.TRANSFER.DEST_HOST="skurut17.cesnet.cz:2119/jobmanager-lcgpbs" DG.TRANSFER.DEST_INSTANCE="/var/glite/logmonitor/CondorG.log/dag.https_3a_2f_2fskurut1.cesnet.cz_3a9000_2fwwBtp1l0inuUFD7-Y-8y9A.log" DG.TRANSFER.JOB="(queue=voce)(jobtype=single)" DG.TRANSFER.RESULT="OK" DG.TRANSFER.REASON="Job successfully submitted to Globus" DG.TRANSFER.DEST_JOBID="unavailable" 
+DG.ARRIVED=20060904123927.000000 DATE=20060904123925.966158 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000005:LRMS=000000:APP=000000" DG.USER="" DG.RUNNING.NODE="skurut17.cesnet.cz" 
+DG.ARRIVED=20060904123927.000000 DATE=20060904123727.005454 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Running" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000001:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.RUNNING.NODE="skurut28.cesnet.cz" 
+DG.ARRIVED=20060904123928.000000 DATE=20060904123810.041136 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000001" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_stage" DG.USERTAG.VALUE="1" 
+DG.ARRIVED=20060904123928.000000 DATE=20060904123810.410476 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000003" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_program" DG.USERTAG.VALUE="align_warp" 
+DG.ARRIVED=20060904123929.000000 DATE=20060904123810.692037 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000005" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4.img" 
+DG.ARRIVED=20060904123929.000000 DATE=20060904123810.974525 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000007" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_input" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/reference.img" 
+DG.ARRIVED=20060904123930.000000 DATE=20060904123811.347217 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000009" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_output" DG.USERTAG.VALUE="gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06/anatomy4.warp" 
+DG.ARRIVED=20060904123930.000000 DATE=20060904123811.654467 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000011" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-m 12" 
+DG.ARRIVED=20060904123931.000000 DATE=20060904123811.936867 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000013" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_param" DG.USERTAG.VALUE="-q" 
+DG.ARRIVED=20060904123932.000000 DATE=20060904123812.222233 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="Application" DG.SRC_INSTANCE="" DG.EVNT="UserTag" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000015" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.USERTAG.NAME="ipaw_header" DG.USERTAG.VALUE="GLOBAL_MAXIMUM=" 
+DG.ARRIVED=20060904123933.000000 DATE=20060904123812.531894 HOST="skurut28.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LRMS" DG.SRC_INSTANCE="" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000004:APP=000000" DG.USER="/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Milos Mulac" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="(nil)" DG.DONE.EXIT_CODE="0" 
+DG.ARRIVED=20060904124228.000000 DATE=20060904124144.992360 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="ReallyRunning" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000007:LRMS=000000:APP=000000" DG.USER="" DG.REALLYRUNNING.WN_SEQ="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000000:LRMS=000003:APP=000000" 
+DG.ARRIVED=20060904124229.000000 DATE=20060904124145.229389 HOST="skurut2.cesnet.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="LogMonitor" DG.SRC_INSTANCE="unique" DG.EVNT="Done" DG.JOBID="https://skurut1.cesnet.cz:9000/yM3sz8v6WCIPgi5-0m8L4w" DG.SEQCODE="UI=000000:NS=0000000001:WM=000000:BH=0000000003:JSS=000000:LM=000008:LRMS=000000:APP=000000" DG.USER="" DG.DONE.STATUS_CODE="OK" DG.DONE.REASON="Job terminated successfully" DG.DONE.EXIT_CODE="0" 
diff --git a/org.glite.jp/examples/pch06/pch06.jdl-template b/org.glite.jp/examples/pch06/pch06.jdl-template
new file mode 100644 (file)
index 0000000..9390655
--- /dev/null
@@ -0,0 +1,108 @@
+[
+
+type = "dag";
+
+Requirements = other.GlueCEInfoHostname=="skurut17.cesnet.cz";
+LBAddress = "skurut1.cesnet.cz:9000";
+
+InputSandbox = {
+       "SANDBOX/align.sh",
+       "SANDBOX/reslice.sh",
+       "SANDBOX/softmean.sh",
+       "SANDBOX/slicer.sh",
+       "SANDBOX/convert.sh",
+       "SANDBOX/align_warp",
+       "SANDBOX/scanheader",
+       "SANDBOX/reslice",
+       "SANDBOX/softmean",
+       "SANDBOX/slicer",
+       "SANDBOX/convert",
+       "SANDBOX/delegates.xml"
+};
+
+nodes = [
+       align1 = [ description = [
+               executable = "align.sh";
+               arguments = "BASE1 REFERENCE";
+       ] ];
+       align2 = [ description = [
+               executable = "align.sh";
+               arguments = "BASE2 REFERENCE";
+       ] ];
+       align3 = [ description = [
+               executable = "align.sh";
+               arguments = "BASE3 REFERENCE";
+       ] ];
+       align4 = [ description = [
+               executable = "align.sh";
+               arguments = "BASE4 REFERENCE";
+       ] ];
+
+
+       reslice1 = [ description = [
+               executable = "reslice.sh";
+               arguments = "BASE1"; 
+       ] ];
+       reslice2 = [ description = [
+               executable = "reslice.sh";
+               arguments = "BASE2"; 
+       ] ];
+       reslice3 = [ description = [
+               executable = "reslice.sh";
+               arguments = "BASE3"; 
+       ] ];
+       reslice4 = [ description = [
+               executable = "reslice.sh";
+               arguments = "BASE4"; 
+       ] ];
+
+       softmean = [ description = [
+               executable = "softmean.sh";
+               arguments = "BASE1 BASE2 BASE3 BASE4 ATLAS";
+       ] ];
+
+       slicerx = [ description = [
+               executable = "slicer.sh";
+               arguments = "ATLAS x";
+       ] ];
+       slicery = [ description = [
+               executable = "slicer.sh";
+               arguments = "ATLAS y";
+       ] ];
+       slicerz = [ description = [
+               executable = "slicer.sh";
+               arguments = "ATLAS z";
+       ] ];
+
+       convertx = [ description = [
+               executable = "convert.sh"; 
+               arguments = "ATLAS x";
+       ] ];
+       converty = [ description = [
+               executable = "convert.sh"; 
+               arguments = "ATLAS y";
+       ] ];
+       convertz = [ description = [
+               executable = "convert.sh"; 
+               arguments = "ATLAS z";
+       ] ];
+
+];
+
+       dependencies = {
+               { align1, reslice1 },
+               { align2, reslice2 },
+               { align3, reslice3 },
+               { align4, reslice4 },
+               { { reslice1, reslice2, reslice3, reslice4 }, softmean },
+               { softmean, slicerx },
+               { softmean, slicery },
+               { softmean, slicerz },
+               { slicerx, convertx },
+               { slicery, converty },
+               { slicerz, convertz }
+       };
+
+
+
+];
diff --git a/org.glite.jp/examples/pch06/pch06.jdl-template2 b/org.glite.jp/examples/pch06/pch06.jdl-template2
new file mode 100644 (file)
index 0000000..d084313
--- /dev/null
@@ -0,0 +1,127 @@
+[
+
+type = "dag";
+
+Requirements = other.GlueCEInfoHostname=="skurut17.cesnet.cz";
+LBAddress = "skurut1.cesnet.cz:9000";
+
+InputSandbox = {
+       "SANDBOX/align.sh",
+       "SANDBOX/reslice.sh",
+       "SANDBOX/softmean.sh",
+       "SANDBOX/slicer.sh",
+       "SANDBOX/pgmtoppm.sh",
+       "SANDBOX/pnmtojpeg.sh",
+       "SANDBOX/align_warp",
+       "SANDBOX/scanheader",
+       "SANDBOX/reslice",
+       "SANDBOX/softmean",
+       "SANDBOX/slicer",
+       "SANDBOX/pgmtoppm",
+       "SANDBOX/pnmtojpeg",
+       "SANDBOX/delegates.xml"
+};
+
+nodes = [
+       align1 = [ description = [
+               executable = "align.sh";
+               arguments = "BASE1 REFERENCE";
+       ] ];
+       align2 = [ description = [
+               executable = "align.sh";
+               arguments = "BASE2 REFERENCE";
+       ] ];
+       align3 = [ description = [
+               executable = "align.sh";
+               arguments = "BASE3 REFERENCE";
+       ] ];
+       align4 = [ description = [
+               executable = "align.sh";
+               arguments = "BASE4 REFERENCE";
+       ] ];
+
+
+       reslice1 = [ description = [
+               executable = "reslice.sh";
+               arguments = "BASE1"; 
+       ] ];
+       reslice2 = [ description = [
+               executable = "reslice.sh";
+               arguments = "BASE2"; 
+       ] ];
+       reslice3 = [ description = [
+               executable = "reslice.sh";
+               arguments = "BASE3"; 
+       ] ];
+       reslice4 = [ description = [
+               executable = "reslice.sh";
+               arguments = "BASE4"; 
+       ] ];
+
+       softmean = [ description = [
+               executable = "softmean.sh";
+               arguments = "BASE1 BASE2 BASE3 BASE4 ATLAS";
+       ] ];
+
+       slicerx = [ description = [
+               executable = "slicer.sh";
+               arguments = "ATLAS x";
+       ] ];
+       slicery = [ description = [
+               executable = "slicer.sh";
+               arguments = "ATLAS y";
+       ] ];
+       slicerz = [ description = [
+               executable = "slicer.sh";
+               arguments = "ATLAS z";
+       ] ];
+
+       pgmtoppmx = [ description = [
+               executable = "pgmtoppm.sh"; 
+               arguments = "ATLAS x";
+       ] ];
+       pgmtoppmy = [ description = [
+               executable = "pgmtoppm.sh"; 
+               arguments = "ATLAS y";
+       ] ];
+       pgmtoppmz = [ description = [
+               executable = "pgmtoppm.sh"; 
+               arguments = "ATLAS z";
+       ] ];
+
+       pnmtojpegx = [ description = [
+               executable = "pnmtojpeg.sh"; 
+               arguments = "ATLAS x";
+       ] ];
+       pnmtojpegy = [ description = [
+               executable = "pnmtojpeg.sh"; 
+               arguments = "ATLAS y";
+       ] ];
+       pnmtojpegz = [ description = [
+               executable = "pnmtojpeg.sh"; 
+               arguments = "ATLAS z";
+       ] ];
+
+];
+
+       dependencies = {
+               { align1, reslice1 },
+               { align2, reslice2 },
+               { align3, reslice3 },
+               { align4, reslice4 },
+               { { reslice1, reslice2, reslice3, reslice4 }, softmean },
+               { softmean, slicerx },
+               { softmean, slicery },
+               { softmean, slicerz },
+               { slicerx, pgmtoppmx },
+               { slicery, pgmtoppmy },
+               { slicerz, pgmtoppmz },
+               { pgmtoppmx, pnmtojpegx },
+               { pgmtoppmy, pnmtojpegy },
+               { pgmtoppmz, pnmtojpegz }
+
+       };
+
+
+
+];
diff --git a/org.glite.jp/examples/pch06/pch06.runme b/org.glite.jp/examples/pch06/pch06.runme
new file mode 100644 (file)
index 0000000..de3d0ba
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+sandbox='gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06'
+
+if [ -z "$6" ]; then
+       echo usage: $0 reference base1 base2 base3 base4 atlas
+       echo "  all args are URLs without suffix"
+       exit 1
+fi
+
+sed "s|REFERENCE|$1|; s|BASE1|$2|; s|BASE2|$3|; s|BASE3|$4|; s|BASE4|$5|; s|ATLAS|$6|; s|SANDBOX|$sandbox|" pch06.jdl-template >pch06.jdl
+
+# glite-wms-job-submit -a pch06.jdl
+
+
diff --git a/org.glite.jp/examples/pch06/pch06.runme2 b/org.glite.jp/examples/pch06/pch06.runme2
new file mode 100644 (file)
index 0000000..2279144
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+sandbox='gsiftp://umbar.ics.muni.cz:1414/home/mulac/pch06'
+
+if [ -z "$6" ]; then
+       echo usage: $0 reference base1 base2 base3 base4 atlas
+       echo "  all args are URLs without suffix"
+       exit 1
+fi
+
+sed "s|REFERENCE|$1|; s|BASE1|$2|; s|BASE2|$3|; s|BASE3|$4|; s|BASE4|$5|; s|ATLAS|$6|; s|SANDBOX|$sandbox|" pch06.jdl-template2 >pch06-2.jdl
+
+# glite-wms-job-submit -a pch06-2.jdl
+
+
diff --git a/org.glite.jp/examples/pch06/pgmtoppm b/org.glite.jp/examples/pch06/pgmtoppm
new file mode 100644 (file)
index 0000000..052c333
Binary files /dev/null and b/org.glite.jp/examples/pch06/pgmtoppm differ
diff --git a/org.glite.jp/examples/pch06/pgmtoppm.sh b/org.glite.jp/examples/pch06/pgmtoppm.sh
new file mode 100644 (file)
index 0000000..7353ff3
--- /dev/null
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+log_event() #1 - attr.name #2 attr.value
+{
+  GLITE_WMS_SEQUENCE_CODE=`$lb_logevent\
+    --jobid="$GLITE_WMS_JOBID"\
+    --source="Application"\
+    --sequence="$GLITE_WMS_SEQUENCE_CODE"\
+    --event="UserTag"\
+    --node=$host\
+    --name="$1"\
+    --value="$2"\
+  || echo $GLITE_WMS_SEQUENCE_CODE`
+}
+
+init_log_event()
+{
+  lb_logevent=${GLITE_WMS_LOCATION}/bin/glite-lb-logevent
+  if [ ! -x "$lb_logevent" ]; then
+    lb_logevent="${EDG_WL_LOCATION}/bin/edg-wl-logev"
+  fi
+  host=`hostname -f`
+}
+
+
+set -ex
+
+hostname -f
+date
+echo $0 $*
+
+globus-url-copy $1-$2.pgm file://$PWD/atlas.pgm
+
+chmod +x pgmtoppm
+./pgmtoppm rgb:ffff/00/00 atlas.pgm > atlas.ppm
+
+globus-url-copy file://$PWD/atlas.ppm $1-$2.ppm
+
+
+# Log LB user_tags
+init_log_event
+log_event "IPAW_STAGE" "5"
+log_event "IPAW_PROGRAM" "pgmtoppm"
+log_event "IPAW_INPUT" "$1-$2.pgm"
+log_event "IPAW_OUTPUT" "$1-$2.ppm"
+
diff --git a/org.glite.jp/examples/pch06/pnmtojpeg b/org.glite.jp/examples/pch06/pnmtojpeg
new file mode 100644 (file)
index 0000000..7c1c6fc
Binary files /dev/null and b/org.glite.jp/examples/pch06/pnmtojpeg differ
diff --git a/org.glite.jp/examples/pch06/pnmtojpeg.sh b/org.glite.jp/examples/pch06/pnmtojpeg.sh
new file mode 100644 (file)
index 0000000..5a68c97
--- /dev/null
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+log_event() #1 - attr.name #2 attr.value
+{
+  GLITE_WMS_SEQUENCE_CODE=`$lb_logevent\
+    --jobid="$GLITE_WMS_JOBID"\
+    --source="Application"\
+    --sequence="$GLITE_WMS_SEQUENCE_CODE"\
+    --event="UserTag"\
+    --node=$host\
+    --name="$1"\
+    --value="$2"\
+  || echo $GLITE_WMS_SEQUENCE_CODE`
+}
+
+init_log_event()
+{
+  lb_logevent=${GLITE_WMS_LOCATION}/bin/glite-lb-logevent
+  if [ ! -x "$lb_logevent" ]; then
+    lb_logevent="${EDG_WL_LOCATION}/bin/edg-wl-logev"
+  fi
+  host=`hostname -f`
+}
+
+
+set -ex
+
+hostname -f
+date
+echo $0 $*
+
+globus-url-copy $1-$2.ppm file://$PWD/atlas.ppm
+
+chmod +x pnmtojpeg
+./pnmtojpeg atlas.ppm >atlas.jpg
+
+
+globus-url-copy file://$PWD/atlas.jpg $1-$2.jpg
+
+
+# Log LB user_tags
+init_log_event
+log_event "IPAW_STAGE" "6"
+log_event "IPAW_PROGRAM" "pnmtojpeg"
+log_event "IPAW_INPUT" "$1-$2.ppm"
+log_event "IPAW_OUTPUT" "$1-$2.jpg"
+
diff --git a/org.glite.jp/examples/pch06/reslice b/org.glite.jp/examples/pch06/reslice
new file mode 100644 (file)
index 0000000..e5527aa
Binary files /dev/null and b/org.glite.jp/examples/pch06/reslice differ
diff --git a/org.glite.jp/examples/pch06/reslice.sh b/org.glite.jp/examples/pch06/reslice.sh
new file mode 100644 (file)
index 0000000..2d0407b
--- /dev/null
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+log_event() #1 - attr.name #2 attr.value
+{
+  GLITE_WMS_SEQUENCE_CODE=`$lb_logevent\
+    --jobid="$GLITE_WMS_JOBID"\
+    --source="Application"\
+    --sequence="$GLITE_WMS_SEQUENCE_CODE"\
+    --event="UserTag"\
+    --node=$host\
+    --name="$1"\
+    --value="$2"\
+  || echo $GLITE_WMS_SEQUENCE_CODE`
+}
+
+init_log_event()
+{
+  lb_logevent=${GLITE_WMS_LOCATION}/bin/glite-lb-logevent
+  if [ ! -x "$lb_logevent" ]; then
+    lb_logevent="${EDG_WL_LOCATION}/bin/edg-wl-logev"
+  fi
+  host=`hostname -f`
+}
+
+
+set -ex
+
+hostname -f
+date
+echo $0 $*
+
+globus-url-copy $1.warp file://$PWD/warp
+globus-url-copy $1.img file://$PWD/anatomy.img
+globus-url-copy $1.hdr file://$PWD/anatomy.hdr
+
+chmod +x reslice
+./reslice warp resliced
+
+globus-url-copy file://$PWD/resliced.img $1-resliced.img
+globus-url-copy file://$PWD/resliced.hdr $1-resliced.hdr
+
+
+# Log LB user_tags
+init_log_event
+log_event "IPAW_STAGE" "2"
+log_event "IPAW_PROGRAM" "reslice"
+log_event "IPAW_INPUT" "$1.warp"
+log_event "IPAW_INPUT" "$1.img"
+log_event "IPAW_INPUT" "$1.hdr"
+log_event "IPAW_OUTPUT" "$1-resliced.img"
+log_event "IPAW_OUTPUT" "$1-resliced.img"
+
diff --git a/org.glite.jp/examples/pch06/scanheader b/org.glite.jp/examples/pch06/scanheader
new file mode 100644 (file)
index 0000000..ddc7546
Binary files /dev/null and b/org.glite.jp/examples/pch06/scanheader differ
diff --git a/org.glite.jp/examples/pch06/slicer b/org.glite.jp/examples/pch06/slicer
new file mode 100644 (file)
index 0000000..aa655ca
Binary files /dev/null and b/org.glite.jp/examples/pch06/slicer differ
diff --git a/org.glite.jp/examples/pch06/slicer.sh b/org.glite.jp/examples/pch06/slicer.sh
new file mode 100644 (file)
index 0000000..db6b3a0
--- /dev/null
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+log_event() #1 - attr.name #2 attr.value
+{
+  GLITE_WMS_SEQUENCE_CODE=`$lb_logevent\
+    --jobid="$GLITE_WMS_JOBID"\
+    --source="Application"\
+    --sequence="$GLITE_WMS_SEQUENCE_CODE"\
+    --event="UserTag"\
+    --node=$host\
+    --name="$1"\
+    --value="$2"\
+  || echo $GLITE_WMS_SEQUENCE_CODE`
+}
+
+init_log_event()
+{
+  lb_logevent=${GLITE_WMS_LOCATION}/bin/glite-lb-logevent
+  if [ ! -x "$lb_logevent" ]; then
+    lb_logevent="${EDG_WL_LOCATION}/bin/edg-wl-logev"
+  fi
+  host=`hostname -f`
+}
+
+
+set -ex
+
+hostname -f
+date
+echo $0 $*
+
+globus-url-copy $1.hdr file://$PWD/atlas.hdr
+globus-url-copy $1.img file://$PWD/atlas.img
+
+chmod +x slicer
+FSLOUTPUTTYPE=ANALYZE
+export FSLOUTPUTTYPE
+./slicer atlas.hdr -$2 .5 atlas-$2.pgm
+
+globus-url-copy file://$PWD/atlas-$2.pgm $1-$2.pgm
+
+
+# Log LB user_tags
+init_log_event
+log_event "IPAW_STAGE" "4"
+log_event "IPAW_PROGRAM" "slicer"
+log_event "IPAW_INPUT" "$1.hdr"
+log_event "IPAW_INPUT" "$1.img"
+log_event "IPAW_OUTPUT" "$1-$2.pgm"
+
diff --git a/org.glite.jp/examples/pch06/softmean b/org.glite.jp/examples/pch06/softmean
new file mode 100644 (file)
index 0000000..018a9a7
Binary files /dev/null and b/org.glite.jp/examples/pch06/softmean differ
diff --git a/org.glite.jp/examples/pch06/softmean.sh b/org.glite.jp/examples/pch06/softmean.sh
new file mode 100644 (file)
index 0000000..3136010
--- /dev/null
@@ -0,0 +1,62 @@
+#!/bin/sh
+
+log_event() #1 - attr.name #2 attr.value
+{
+  GLITE_WMS_SEQUENCE_CODE=`$lb_logevent\
+    --jobid="$GLITE_WMS_JOBID"\
+    --source="Application"\
+    --sequence="$GLITE_WMS_SEQUENCE_CODE"\
+    --event="UserTag"\
+    --node=$host\
+    --name="$1"\
+    --value="$2"\
+  || echo $GLITE_WMS_SEQUENCE_CODE`
+}
+
+init_log_event()
+{
+  lb_logevent=${GLITE_WMS_LOCATION}/bin/glite-lb-logevent
+  if [ ! -x "$lb_logevent" ]; then
+    lb_logevent="${EDG_WL_LOCATION}/bin/edg-wl-logev"
+  fi
+  host=`hostname -f`
+}
+
+
+set -ex
+
+hostname -f
+date
+echo $0 $*
+
+globus-url-copy $1-resliced.img file://$PWD/resliced1.img
+globus-url-copy $1-resliced.hdr file://$PWD/resliced1.hdr
+globus-url-copy $2-resliced.img file://$PWD/resliced2.img
+globus-url-copy $2-resliced.hdr file://$PWD/resliced2.hdr
+globus-url-copy $3-resliced.img file://$PWD/resliced3.img
+globus-url-copy $3-resliced.hdr file://$PWD/resliced3.hdr
+globus-url-copy $4-resliced.img file://$PWD/resliced4.img
+globus-url-copy $4-resliced.hdr file://$PWD/resliced4.hdr
+
+chmod +x softmean
+./softmean atlas.hdr y null resliced1.img resliced2.img resliced3.img resliced4.img
+
+globus-url-copy file://$PWD/atlas.img $5.img
+globus-url-copy file://$PWD/atlas.hdr $5.hdr
+
+
+# Log LB user_tags
+init_log_event
+log_event "IPAW_STAGE" "3"
+log_event "IPAW_PROGRAM" "softmean"
+log_event "IPAW_INPUT" "$1-resliced.img"
+log_event "IPAW_INPUT" "$1-resliced.hdr"
+log_event "IPAW_INPUT" "$2-resliced.img"
+log_event "IPAW_INPUT" "$2-resliced.hdr"
+log_event "IPAW_INPUT" "$3-resliced.img"
+log_event "IPAW_INPUT" "$3-resliced.hdr"
+log_event "IPAW_INPUT" "$4-resliced.img"
+log_event "IPAW_INPUT" "$4-resliced.hdr"
+log_event "IPAW_OUTPUT" "$5.img"
+log_event "IPAW_OUTPUT" "$5.hdr"
+
index 0332729..0a29c8b 100644 (file)
@@ -2,15 +2,15 @@
 # System dependencies
 ###################################################################
 
-org.glite.version              = HEAD
-org.glite.jp.version           = HEAD
+org.glite.version              = glite_branch_3_1_0
+org.glite.jp.version           = glite-jp_branch_1_3_0_RC31
 
 # Component dependencies tag = do not remove this line =
-org.glite.jp.ws-interface.version      = HEAD
-org.glite.jp.common.version    = HEAD
-org.glite.jp.server-common.version     = HEAD
-org.glite.jp.index.version     = HEAD
-org.glite.jp.primary.version   = HEAD
-org.glite.jp.client.version    = HEAD
+org.glite.jp.ws-interface.version      = glite-jp-ws-interface_branch_1_2_0_RC31
+org.glite.jp.common.version    = glite-jp-common_branch_1_2_0_RC31
+org.glite.jp.server-common.version     = glite-jp-server-common_branch_1_1_0_RC31
+org.glite.jp.index.version     = glite-jp-index_branch_1_2_0_RC31
+org.glite.jp.primary.version   = glite-jp-primary_branch_1_2_0_RC31
+org.glite.jp.client.version    = glite-jp-client_branch_1_1_0_RC31
 
 ext.gsoap.version = 2.7.0
diff --git a/org.glite.lb-utils.context/.cvsignore b/org.glite.lb-utils.context/.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-utils.context/LICENSE b/org.glite.lb-utils.context/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-utils.context/build.xml b/org.glite.lb-utils.context/build.xml
deleted file mode 100644 (file)
index 81cd270..0000000
+++ /dev/null
@@ -1,122 +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-utils context component
-       
-       Authors: Joachim Flammer <Joachim.Flammer@Cern.ch>      
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.7  2006/04/26 11:39:55  flammer
-       Corrected wrong template syntax.
-
-       Revision 1.6  2005/04/17 10:29:35  dimeglio
-       Split module.build from version.properties
-
-       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="context" default="dist">
-
-       <!-- ==============================================
-             Builds the GLite lb-utils context 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-xxx.file}" /> -->
-               
-       <!-- =========================================
-                Load version file 
-            ========================================= -->
-       <property file="${module.version.file}"/>
-       <property file="${module.build.file}"/>
-       
-       <!-- ==============================================
-                Local private targets
-            ============================================== -->
-       
-       <target name="localinit"
-               description="Module specific initialization tasks">
-       </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-utils.context/project/build.number b/org.glite.lb-utils.context/project/build.number
deleted file mode 100644 (file)
index 5cfec85..0000000
+++ /dev/null
@@ -1 +0,0 @@
-module.build = 0\r
diff --git a/org.glite.lb-utils.context/project/build.properties b/org.glite.lb-utils.context/project/build.properties
deleted file mode 100755 (executable)
index e69de29..0000000
diff --git a/org.glite.lb-utils.context/project/configure.properties.xml b/org.glite.lb-utils.context/project/configure.properties.xml
deleted file mode 100644 (file)
index 0b17304..0000000
+++ /dev/null
@@ -1,37 +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-utils context 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-utils context component configuration properties">
-
-</project>
diff --git a/org.glite.lb-utils.context/project/properties.xml b/org.glite.lb-utils.context/project/properties.xml
deleted file mode 100644 (file)
index 86c1f8a..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-utils context 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-utils context 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-utils.subsystem.name}"/>
-               
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${lb-utils.subsystem.prefix}"/>
-
-       <!-- ======================================================
-              Define component properties
-            ====================================================== -->
-                               
-       <!-- Component name prefix -->
-       <property name="component.prefix" value="context" />
-                       
-       <!-- ======================================================
-              Define general component properties
-            ====================================================== -->
-       
-       <import file="${component.general.properties.file}" />
-                                               
-       <!-- ======================================================
-             Define extra properties here ...
-            ====================================================== -->
-       
-               
-</project>
diff --git a/org.glite.lb-utils.context/project/version.properties b/org.glite.lb-utils.context/project/version.properties
deleted file mode 100755 (executable)
index 6f1f8ab..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-module.version = 0.0.0
-module.age = 0
\ No newline at end of file
diff --git a/org.glite.lb-utils.db/.cvsignore b/org.glite.lb-utils.db/.cvsignore
deleted file mode 100755 (executable)
index ff82493..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-.project
-.cdtproject
-build
-doc
-reports
diff --git a/org.glite.lb-utils.db/LICENSE b/org.glite.lb-utils.db/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-utils.db/Makefile b/org.glite.lb-utils.db/Makefile
deleted file mode 100644 (file)
index 362c7cb..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-# defaults
-top_srcdir=.
-builddir=build
-stagedir=.
-distdir=.
-globalprefix=glite
-lbutilsprefix=lb-utils
-package=glite-lb-utils-db
-version=0.2.0
-PREFIX=/opt/glite
-flavour=gcc32thr
-
-glite_location=/opt/glite
-mysql_prefix=/opt/mysql
-mysql_version=4.1.11
-cppunit_prefix=/opt/cppunit
-thrflavour=gcc32pthr
-nothrflavour=gcc32
-
--include Makefile.inc
--include ../project/version.properties
-
-version=${module.version}
-
-CC=gcc
-
-VPATH=${top_srcdir}/interface:${top_srcdir}/src:${top_srcdir}/examples
-
-DEBUG:=-g -O0 -Wall
-
-CFLAGS:= \
-       ${DEBUG} \
-       -DVERSION=\"${version}\" \
-       -I${stagedir}/include -I${top_srcdir}/src -I. \
-       -I${top_srcdir}/interface \
-       ${COVERAGE_FLAGS} \
-       -I${mysql_prefix}/include -I${mysql_prefix}/include/mysql \
-       -D_GNU_SOURCE
-
-ifdef LBS_DB_PROFILE
-       CFLAGS:=${CFLAGS} -DLBS_DB_PROFILE
-endif
-
-TEST_LIBS:=-L${cppunit_prefix}/lib -lcppunit
-TEST_INC:=-I${cppunit_prefix}/include
-
-LDFLAGS:=-L${stagedir}/lib ${COVERAGE_FLAGS}
-
-COMPILE:=libtool --mode=compile ${CC} ${CFLAGS}
-LINK:=libtool --mode=link ${CC} -rpath ${stagedir}/lib ${LDFLAGS} 
-INSTALL:=libtool --mode=install install
-
-ifneq (${mysql_prefix},/usr)
-       ifeq ($(shell echo ${mysql_version} | cut -d. -f1,2),4.1)
-               mysqlib := -L${mysql_prefix}/lib/mysql
-       else
-               mysqlib := -L${mysql_prefix}/lib
-       endif
-endif
-
-EXT_LIBS:=${mysqlib} -lmysqlclient -lglite_lbu_trio
-OBJS:=db.o
-TESTOBJS:=dbtest.o
-HDRS:=db.h
-LOBJS:=${OBJS:.o=.lo}
-LTESTOBJS:=${TESTOBJS:.o=.lo}
-
-libglite_lbu_db.la: ${LOBJS}
-       ${LINK} -o $@ $< ${EXT_LIBS}
-
-libglite_lbu_dbtest.la: ${LTESTOBJS}
-       ${LINK} -o $@ $< ${EXT_LIBS}
-
-dbtest.lo dbtest.o: db.c db.h
-       ${COMPILE} -DGLITE_LBU_DEFAULT_RESULT_BUFFER_LENGTH=10 -c $< -o $@
-
-db_test: db_test.lo libglite_lbu_dbtest.la
-       ${LINK} -o $@ $+ ${EXT_LIBS}
-
-default all: compile
-
-compile: libglite_lbu_db.la
-
-check:
-       -echo No checks here yet.
-
-test_coverage:
-       -mkdir coverage
-       cd coverage && $(MAKE) -f ../Makefile top_srcdir=../../ COVERAGE_FLAGS="-fprofile-arcs -ftest-coverage" check
-       cd coverage && for i in `echo ${OBJS} | tr ' ' '\012' | sort -u`; do gcov $$i ; done
-
-examples: db_test
-
-doc:
-       doxygen C.dox
-
-stage: compile
-       $(MAKE) install PREFIX=${stagedir} DOSTAGE=yes
-
-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}/include/${globalprefix}/${lbutilsprefix}
-#      ${INSTALL} -m 644 ${top_srcdir}/LICENSE ${PREFIX}/share/doc/${package}-${version}
-       ${INSTALL} -m 755 "libglite_lbu_db.la" "${PREFIX}/lib/libglite_lbu_db.la"; \
-       ${INSTALL} -m 644 ${top_srcdir}/interface/${HDRS} ${PREFIX}/include/${globalprefix}/${lbutilsprefix}
-
-clean:
-
-%.o %.lo: %.c
-       ${COMPILE} -c $<
-
-db.lo: db.c db.h
-db_test.lo: libglite_lbu_dbtest.la db.h db_test.c
-
-.PHONY: default all compile check examples doc stage dist distsrc distbin install clean test_coverage
diff --git a/org.glite.lb-utils.db/build.xml b/org.glite.lb-utils.db/build.xml
deleted file mode 100644 (file)
index 14d4d7e..0000000
+++ /dev/null
@@ -1,126 +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-utils db component
-       
-       Authors: Joachim Flammer <Joachim.Flammer@Cern.ch>      
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.1.1.1  2006/07/14 06:59:03  akrenek
-       module created
-
-       Revision 1.7  2006/04/26 11:39:55  flammer
-       Corrected wrong template syntax.
-
-       Revision 1.6  2005/04/17 10:29:35  dimeglio
-       Split module.build from version.properties
-
-       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="db" default="dist">
-
-       <!-- ==============================================
-             Builds the GLite lb-utils db 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}"/>
-       <property file="${module.build.file}"/>
-       
-       <!-- ==============================================
-                Local private targets
-            ============================================== -->
-       
-       <target name="localinit"
-               description="Module specific initialization tasks">
-               <antcall target="lbmakefiles" />
-       </target>
-       
-       <target name="localcompile"
-               description="Module specific compile tasks">
-       </target>
-
-       <target name="localclean"
-               description="Module specific cleaning tasks">
-       </target>
-       
-</project>             
diff --git a/org.glite.lb-utils.db/examples/db_test.c b/org.glite.lb-utils.db/examples/db_test.c
deleted file mode 100644 (file)
index 725fbf7..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Example (and quick test) of this DB module.
- *
- * Requires existing database with appropriate access:
- *
- *   mysqladmin -u root -p create test
- *   mysql -u root -p -e 'GRANT ALL on test.* to testuset@localhost'
- *
- * Use CS environment variable when using different user/pwd@machine:dbname.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "db.h"
-
-#define CS "testuser/@localhost:test"
-#define CREATE_CMD "CREATE TABLE data (\n\
-    id    INT NOT NULL,\n\
-    user  VARCHAR(32) NOT NULL,\n\
-    info  BLOB,\n\
-    PRIMARY KEY (id),\n\
-    INDEX(user)\n\
-) engine=innodb"
-#define DROP_CMD "DROP TABLE data"
-#define INSERT_TRIO_CMD "INSERT INTO data (id, user, info) VALUES (%d, %s, %s)"
-#define SELECT_TRIO_CMD "SELECT id, user, info FROM data WHERE user = '%s'"
-#define INSERT_CMD "INSERT INTO data (id, user, info) VALUES (?, ?, ?)"
-#define SELECT_CMD "SELECT id, user, info FROM data WHERE user = ?"
-
-#define dprintf(ARGS) { printf("%s: ", name); printf ARGS; }
-
-
-static void print_blob(unsigned long len, char *blob) {
-       int i;
-       for (i = 0; i < len; i++) printf("%02X ", blob[i]);
-       printf("(='");
-       for (i = 0; i < len; i++) printf("%c", blob[i]);
-       printf("')");
-}
-
-
-static void print_free_result(const char *name, unsigned long *lens, char **res) {
-       dprintf(("  id='%s'=%d\n", res[0], atoi(res[0])));
-
-       dprintf(("  user='%s'\n", res[1]));
-
-       dprintf(("  blob="));
-       if (res[2] && lens) print_blob(lens[2], res[2]);
-       else printf("null");
-       printf("\n");
-
-       free(res[0]);
-       free(res[1]);
-       free(res[2]);
-}
-
-
-int main(int argn, char *argv[]) {
-       char *name, *cmd;
-       const char *cs;
-       glite_lbu_DBContext ctx;
-       glite_lbu_Statement stmt;
-       int caps;
-
-       char blob1[] = "Guess: blob or \000string?";
-       char blob2[] = {0, 1, 2, 3, 4, 5};
-
-       int nr; 
-       char *res[3];
-       unsigned long lens[3];
-
-       if ((name = strrchr(argv[0], '/')) != NULL) name++;
-       else name = argv[0];
-       if ((cs = getenv("CS")) == NULL) cs = CS;
-       cmd = NULL;
-
-       // init
-       dprintf(("connecting to %s...\n", cs));
-       if (glite_lbu_DBConnect(&ctx, cs, 0) != 0) goto fail;
-       if ((caps = glite_lbu_DBQueryCaps(ctx)) == -1) goto failctx;
-       if ((caps & GLITE_LBU_DB_CAP_PREPARED) == 0) {
-               dprintf(("can't do prepared commands, exiting."));
-               goto failctx;
-       }
-       // caps
-       glite_lbu_DBSetCaps(ctx, caps);
-       dprintf(("capabilities: %d\n", caps));
-       // create all needed tables and data
-       dprintf(("creating tables...\n"));
-       glite_lbu_ExecSQL(ctx, DROP_CMD, NULL);
-       if (glite_lbu_ExecSQL(ctx, CREATE_CMD, NULL) == -1) goto failctx;
-       // trio-insert
-       dprintf(("trio-insert...\n"));
-       asprintf(&cmd, INSERT_TRIO_CMD, 1, "'hyperochus'", "NULL");
-       if (glite_lbu_ExecSQL(ctx, cmd, NULL) != 1) goto failctx;
-       free(cmd); cmd = NULL;
-       // prepared-insert
-       dprintf(("prepare-insert...\n"));
-       if (glite_lbu_PrepareStmt(ctx, INSERT_CMD, &stmt) != 0) goto failctx;
-       dprintf(("execute 1. insert...\n"));
-       if (glite_lbu_ExecStmt(stmt, 3,
-                              GLITE_LBU_DB_TYPE_INT, 2,
-                              GLITE_LBU_DB_TYPE_VARCHAR, "cicomexocitl.civ",
-                              GLITE_LBU_DB_TYPE_BLOB, blob1, sizeof(blob1) - 1) != 1) goto failstmt;
-       dprintf(("execute 2. insert...\n"));
-       if (glite_lbu_ExecStmt(stmt, 3,
-                              GLITE_LBU_DB_TYPE_INT, 3,
-                              GLITE_LBU_DB_TYPE_VARCHAR, "tartarus",
-                              GLITE_LBU_DB_TYPE_NULL) != 1) goto failstmt;
-       dprintf(("execute 3. insert...\n"));
-       if (glite_lbu_ExecStmt(stmt, 3,
-                              GLITE_LBU_DB_TYPE_INT, 4,
-                              GLITE_LBU_DB_TYPE_VARCHAR, "harpia",
-                              GLITE_LBU_DB_TYPE_BLOB, blob2, sizeof(blob2)) != 1) goto failstmt;
-       glite_lbu_FreeStmt(stmt);
-       dprintf(("\n"));
-
-       // trio-query
-{
-       const char *user;
-
-       user = "harpia";
-       dprintf(("selecting '%s'...\n", user));
-       asprintf(&cmd, SELECT_TRIO_CMD, user);
-       if (glite_lbu_ExecSQL(ctx, cmd, &stmt) == -1) goto failctx;
-       free(cmd); cmd = NULL;
-       dprintf(("fetching '%s'...\n", user));
-       while ((nr = glite_lbu_FetchRow(stmt, 3, lens, res)) > 0) {
-               dprintf(("Result: n=%d, res=%p\n", nr, res));
-               print_free_result(name, lens, res);
-       }
-       if (nr < 0) dprintf(("fetch '%s' failed\n", user));
-       dprintf(("closing stmt...\n"));
-       glite_lbu_FreeStmt(stmt);
-       dprintf(("\n"));
-
-       user = "nobody";
-       dprintf(("selecting '%s'...\n", user));
-       asprintf(&cmd, SELECT_TRIO_CMD, user);
-       if (glite_lbu_ExecSQL(ctx, cmd, &stmt) == -1) goto failctx;
-       free(cmd); cmd = NULL;
-       dprintf(("fetching '%s'...\n", user));
-       while ((nr = glite_lbu_FetchRow(stmt, 3, lens, res)) > 0) {
-               dprintf(("Result: n=%d, res=%p\n", nr, res));
-               print_free_result(name, lens, res);
-       }
-       if (nr < 0) dprintf(("fetch '%s' failed\n", user));
-       dprintf(("closing stmt...\n"));
-       glite_lbu_FreeStmt(stmt);
-       dprintf(("\n"));
-}
-
-       // "param" queries
-{
-       const char *user;
-
-       dprintf(("preparing...\n", user));
-       if ((glite_lbu_PrepareStmt(ctx, SELECT_CMD, &stmt)) != 0) goto failctx;
-
-       user = "cicomexocitl.civ";
-       dprintf(("executing '%s'...\n", user));
-       if (glite_lbu_ExecStmt(stmt, 1, GLITE_LBU_DB_TYPE_VARCHAR, user) == -1) goto failstmt;
-       dprintf(("fetching '%s'...\n", user));
-       while ((nr = glite_lbu_FetchRow(stmt, 3, lens, res)) > 0) {
-               dprintf(("Result: n=%d, res=%p\n", nr, res));
-               print_free_result(name, lens, res);
-       }
-       if (nr < 0) dprintf(("fetch '%s' failed\n", user));
-       dprintf(("\n"));
-
-       dprintf(("closing stmt...\n"));
-       glite_lbu_FreeStmt(stmt);
-       dprintf(("\n"));
-}
-
-       dprintf(("closing...\n"));
-       glite_lbu_DBClose(ctx);
-       return 0;
-
-failstmt:
-       printf("closing stmt...\n");
-       glite_lbu_FreeStmt(stmt);
-failctx:
-       dprintf(("closing...\n"));
-       glite_lbu_DBClose(ctx);
-fail:
-       free(cmd);
-       dprintf(("failed\n"));
-       return 1;
-}
diff --git a/org.glite.lb-utils.db/interface/db.h b/org.glite.lb-utils.db/interface/db.h
deleted file mode 100644 (file)
index af197f4..0000000
+++ /dev/null
@@ -1,322 +0,0 @@
-#ifndef GLITE_LBU_DB_H
-#define GLITE_LBU_DB_H
-
-#ident "$Header$"
-
-
-#include <time.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/**
- * \file db.h
- * \defgroup database Database module
- *
- * Database modul module API (LB & JP Utils).
- *
- * There are two ways to access DB here:
- * - simple:
- *
- * SQL commands as single string. All values are incorporated in the SQL command strings. Proper escaping is required.
- * - enhanced:
- *
- * Prepared SQL commands with separated parameters, functions PrepareStmt() and ExecStmt(). All values are delivered in separated buffers. Its faster for multiple using and more secure.
- * @{
- */
-
-
-/**
- * Enable transaction support if available.
- *
- * With disabled transaction can be used transaction functions, they are just ignored.
- */
-#define GLITE_LBU_DB_CAP_TRANSACTIONS 1
-
-/**
- * Check prepared parameters support.
- */
-#define GLITE_LBU_DB_CAP_PREPARED 2
-
-/**
- * Check for getting indexes support.
- *
- * Needed for QueryIndices call.
- */
-#define GLITE_LBU_DB_CAP_INDEX 4
-
-
-/**
- * Database connection context.
- */
-typedef struct glite_lbu_DBContext_s *glite_lbu_DBContext;
-
-
-/**
- * Prepared statement, used for SQL statement with parameters.
- */
-typedef struct glite_lbu_Statement_s *glite_lbu_Statement;
-
-
-/**
- * Structure holds date for multi-rows insert.
- */
-typedef struct glite_lbu_bufInsert_s *glite_lbu_bufInsert;
-
-
-
-/**
- * All types of parameteres, they match to the SQL types.
- */
-typedef enum {
-       GLITE_LBU_DB_TYPE_NULL = 0,
-       GLITE_LBU_DB_TYPE_TINYINT = 1,
-       GLITE_LBU_DB_TYPE_INT = 2,
-       GLITE_LBU_DB_TYPE_TINYBLOB = 3,
-       GLITE_LBU_DB_TYPE_TINYTEXT = 4,
-       GLITE_LBU_DB_TYPE_BLOB = 5,
-       GLITE_LBU_DB_TYPE_TEXT = 6,
-       GLITE_LBU_DB_TYPE_MEDIUMBLOB = 7,
-       GLITE_LBU_DB_TYPE_MEDIUMTEXT = 8,
-       GLITE_LBU_DB_TYPE_LONGBLOB = 9,
-       GLITE_LBU_DB_TYPE_LONGTEXT = 10,
-       GLITE_LBU_DB_TYPE_VARCHAR = 11,
-       GLITE_LBU_DB_TYPE_CHAR = 12,
-       GLITE_LBU_DB_TYPE_DATE = 13,
-       GLITE_LBU_DB_TYPE_TIME = 14,
-       GLITE_LBU_DB_TYPE_DATETIME = 15,
-       GLITE_LBU_DB_TYPE_TIMESTAMP = 16,
-       GLITE_LBU_DB_TYPE_LAST = 17
-} glite_lbu_DBType;
-
-
-
-/**
- * Get error state from DB context.
- *
- * \param[in]  ctx   context to work with
- * \param[out] text  error name
- * \param[out] desc  error description
- */
-int glite_lbu_DBError(glite_lbu_DBContext ctx, char **text, char **desc);
-
-
-/**
- * Create the context and connect to the database.
- *
- * \param[out] ctx     context to work with
- * \param[in] cs       connect string user/password\@host:database
- *
- * \return             error code, 0 = OK
- */
-int glite_lbu_DBConnect(glite_lbu_DBContext *ctx, const char *cs);
-
-
-/**
- * Close the connection and free the context.
- *
- * \param[in,out] ctx  context to work with
- */
-void glite_lbu_DBClose(glite_lbu_DBContext ctx);
-
-
-/**
- * Check database version and capabilities.
- *
- * \param[in,out] ctx  context to work with
- *
- * \return             capabilities
- * \retval -1          error occured
- */
-int glite_lbu_DBQueryCaps(glite_lbu_DBContext ctx);
-
-
-/**
- * Set the database capabilities on already initialized context.
- *
- * It should be find out by DBQueryCaps() first.
- *
- * \param[in,out] ctx  context to work with
- * \param[in] caps     capabilities to use, should be found out by QueryCaps()
- */
-void glite_lbu_DBSetCaps(glite_lbu_DBContext ctx, int caps);
-
-
-/**
- * Start transaction.
- */
-int glite_lbu_Transaction(glite_lbu_DBContext ctx);
-
-
-/**
- * Commit (end) transaction.
- */
-int glite_lbu_Commit(glite_lbu_DBContext ctx);
-
-
-/**
- * Cancel transaction.
- */
-int glite_lbu_Rollback(glite_lbu_DBContext ctx);
-
-
-/**
- * \param[in,out] stmt  executed SQL statement
- * \param[in] n         number of items for sure there is enough space in lengths and results
- * \param[out] lengths  array with lengths (good for data blobs), may be NULL
- * \param[out] results  array with results, all items are allocated
- *
- * \retval >0  number of fields of the retrieved row
- * \retval 0   no more rows
- * \retval -1  error
- */
-int glite_lbu_FetchRow(glite_lbu_Statement stmt, unsigned int n, unsigned long *lengths, char **results);
-
-
-/**
- * Free the statement structure and destroy its parameters.
- *
- * Statement will be set to NULL and multiple calls are allowed.
- *
- * \param[in,out] stmt  statement
- */
-void glite_lbu_FreeStmt(glite_lbu_Statement *stmt);
-
-
-/**
- * Parse and execute one simple SQL statement.
- * All values are incorporated int the SQL command string.
- *
- * \param[in,out] ctx     context to work with
- * \param[in] cmd         SQL command
- * \param[out] stmt       statement handle with results (makes sense for selects only)
- *
- * \return                number of rows selected, created or affected by update, -1 on error
- */
-int glite_lbu_ExecSQL(glite_lbu_DBContext ctx, const char *cmd, glite_lbu_Statement *stmt);
-
-
-/**
- * Query for column names of the statement.
- *
- * It work only for simple API, so only after ExecSQL().
- *
- * \param[in,out] stmt  the statement handle
- * \param[out] cols     result array of names
- *
- * \return              error code
- */
-int glite_lbu_QueryColumns(glite_lbu_Statement stmt, char **cols);
-
-
-/**
- * Retrieve column names of a query simple SQL statement.
- *
- * \param[in,out] ctx        context to work with
- * \param[in] table          table name
- * \param[out] key_names     one-dimensional index names array
- * \param[out] column_names  two-dimensional column names array
- *
- * \return                0 if OK, nonzero on error
- */
-int glite_lbu_QueryIndices(glite_lbu_DBContext ctx, const char *table, char ***key_names, char ****column_names);
-
-
-/** 
- * Convert time_t into database-specific time string.
- *
- * The result string can be used directly in SQL commands.
- *
- * \param[in]   t    the converted time
- * \param[out]  str  result allocated string
- */
-void glite_lbu_TimeToDB(time_t t, char **str);
-
-
-/**
- * Convert database-specific time string to time_t.
- *
- * String is expected in database for (ISO format).
- *
- * \param[in] str  the converted string
- * \return         result time
- */
-time_t glite_lbu_DBToTime(const char *str);
-
-
-/**
- * Init data structure for buffered insert
- *
- * takes table_name and columns string for future multirow insert
- * when insert string oversize size_limit or number of rows to be inserted
- * overcome record_limit, the real insert is triggered
- */
-int glite_lbu_bufferedInsertInit(glite_lbu_DBContext ctx, glite_lbu_bufInsert *bi, void *mysql, const char *table_name, long size_limit, long record_limit, const char * columns);
-
-
-/**
- * adds row of n values into n columns into an insert buffer
- * if num. of rows or size of data oversteps the limits, real
- * multi-row insert is done
- */
-int glite_lbu_bufferedInsert(glite_lbu_bufInsert bi, const char *row);
-
-
-/**
- * Flush buffered data and free bi structure.
- */
-int glite_lbu_bufferedInsertClose(glite_lbu_bufInsert bi);
-
-
-/**
- * Prepare the SQL statement. Use glite_lbu_FreeStmt() to free it.
- *
- * \param[in,out] ctx     context to work with
- * \param[in] sql         SQL command
- * \param[out] stmt       returned SQL statement
- *
- * \return                error code
- */
-int glite_lbu_PrepareStmt(glite_lbu_DBContext ctx, const char *sql, glite_lbu_Statement *stmt);
-
-
-/**
- * Execute prepared SQL statement.
- *
- * \param[in,out] stmt  SQL statement
- * \param[in]  n                     number of items
- *
- * Variable parameters (n-times):
- *
- * always:
- *
- *   \param type     DB item type
- *
- * then one of them:
- *
- *   \param GLITE_LBU_DB_TYPE_TINYINT             int c
- *   \param GLITE_LBU_DB_TYPE_INT                 long int i
- *   \param GLITE_LBU_DB_TYPE_...BLOB/TEXT        void *b, unsigned long len
- *   \param GLITE_LBU_DB_TYPE_[VAR]CHAR           char *str
- *   \param GLITE_LBU_DB_TYPE_DATE/TIME/DATETIME  time_t t
- *   \param GLITE_LBU_DB_TYPE_TIMESTAMP           time_t t
- *   \param GLITE_LBU_DB_TYPE_NULL       -
- *
- * \return              number of affected rows, -1 on error
- */
-int glite_lbu_ExecStmt(glite_lbu_Statement stmt, int n, ...);
-
-
-/**
- * @} database group
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/org.glite.lb-utils.db/project/build.number b/org.glite.lb-utils.db/project/build.number
deleted file mode 100644 (file)
index 5cfec85..0000000
+++ /dev/null
@@ -1 +0,0 @@
-module.build = 0\r
diff --git a/org.glite.lb-utils.db/project/build.properties b/org.glite.lb-utils.db/project/build.properties
deleted file mode 100755 (executable)
index 1df02e3..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-lb-utils.subsystem.name = org.glite.lb-utils
-lb-utils.subsystem.prefix = lb-utils
-
diff --git a/org.glite.lb-utils.db/project/configure.properties.xml b/org.glite.lb-utils.db/project/configure.properties.xml
deleted file mode 100644 (file)
index 276b497..0000000
+++ /dev/null
@@ -1,81 +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-utils db component
-
-        Authors: Joachim Flammer <Joachim.Flammer@cern.ch>
-        Version info: $Id$
-        Release: $Name$
-
-        Revision history:
-        $Log$
-        Revision 1.2  2006/07/20 13:42:51  valtri
-        Join properly with build system (it uses lb.common yet), it compiles here now.
-
-        Revision 1.1.1.1  2006/07/14 06:59:03  akrenek
-        module created
-
-        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-utils db 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}
-lbutilsprefix=${subsystem.prefix}
-package=${module.package.name}
-PREFIX=${install.dir}
-flavour=${with.globus.thr.flavor}
-
-glite_location=${with.glite.location}
-mysql_prefix=${with.mysql.prefix}
-mysql_version=${ext.mysql.version}
-cppunit_prefix=${with.cppunit.prefix}
-               </echo>
-               <echo file="${module.build.dir}/C.dox">
-PROJECT_NAME          = "Glite LB/JP Utils: Database Module"
-PROJECT_NUMBER        = ${module.version}
-OUTPUT_DIRECTORY      = ${component.dir}/doc/C
-OPTIMIZE_OUTPUT_FOR_C = YES
-INPUT                 = ../interface/db.h
-SHOW_DIRECTORIES       = NO
-FULL_PATH_NAMES        = NO
-EXTRACT_ALL            = YES
-PDF_HYPERLINKS         = YES
-USE_PDFLATEX           = YES
-MACRO_EXPANSION        = YES
-EXPAND_ONLY_PREDEF     = YES
-#PREDEFINED             = _EDG_WLL_EVENT_COMMON 
-HAVE_DOT               = NO
-               </echo>
-       </target>
-
-</project>
diff --git a/org.glite.lb-utils.db/project/properties.xml b/org.glite.lb-utils.db/project/properties.xml
deleted file mode 100644 (file)
index d01c359..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-utils db 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-utils db 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-utils.subsystem.name}"/>
-               
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${lb-utils.subsystem.prefix}"/>
-
-       <!-- ======================================================
-              Define component properties
-            ====================================================== -->
-                               
-       <!-- Component name prefix -->
-       <property name="component.prefix" value="db" />
-                       
-       <!-- ======================================================
-              Define general component properties
-            ====================================================== -->
-       
-       <import file="${component.general.properties.file}" />
-                                               
-       <!-- ======================================================
-             Define extra properties here ...
-            ====================================================== -->
-       
-               
-</project>
diff --git a/org.glite.lb-utils.db/project/tar_exclude b/org.glite.lb-utils.db/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-utils.db/project/version.properties b/org.glite.lb-utils.db/project/version.properties
deleted file mode 100755 (executable)
index 6f1f8ab..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-module.version = 0.0.0
-module.age = 0
\ No newline at end of file
diff --git a/org.glite.lb-utils.db/src/db.c b/org.glite.lb-utils.db/src/db.c
deleted file mode 100644 (file)
index 9698362..0000000
+++ /dev/null
@@ -1,1031 +0,0 @@
-#ident "$Header$"
-
-#include <sys/types.h>
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-
-#include <mysql.h>
-#include <mysqld_error.h>
-#include <errmsg.h>
-
-#include "glite/lb-utils/trio.h"
-#include "db.h"
-
-
-#define GLITE_LBU_MYSQL_INDEX_VERSION 40001
-#define GLITE_LBU_MYSQL_PREPARED_VERSION 40102
-#define BUF_INSERT_ROW_ALLOC_BLOCK     1000
-#ifndef GLITE_LBU_DEFAULT_RESULT_BUFFER_LENGTH
-#define GLITE_LBU_DEFAULT_RESULT_BUFFER_LENGTH 256
-#endif
-
-
-#define CLR_ERR(CTX) lbu_clrerr((CTX))
-#define ERR(CTX, CODE, DESC) lbu_err((CTX), (CODE), (DESC), __FUNCTION__, __LINE__)
-#define STATUS(CTX) ((CTX)->err.code)
-#define MY_ERR(CTX) myerr((CTX), __FUNCTION__, __LINE__)
-#define MY_ERRSTMT(STMT) myerrstmt((STMT), __FUNCTION__, __LINE__)
-#define MY_ISOKSTMT(STMT, RETRY) myisokstmt((STMT), __FUNCTION__, __LINE__, (RETRY))
-
-#define USE_TRANS(CTX) ((CTX->caps & GLITE_LBU_DB_CAP_TRANSACTIONS) != 0)
-
-
-
-struct glite_lbu_DBContext_s {
-       MYSQL *mysql;
-       const char *cs;
-       int have_caps;
-       int caps;
-       struct {
-               int code;
-               char *desc;
-       } err;
-};
-
-
-struct glite_lbu_Statement_s {
-       glite_lbu_DBContext  ctx;
-
-       /* for simple commands */
-       MYSQL_RES           *result;
-
-       /* for prepared commands */
-       MYSQL_STMT          *stmt;
-       unsigned long        nrfields;
-};
-
-
-struct glite_lbu_bufInsert_s {
-       glite_lbu_DBContext ctx;
-       char    *table_name;
-       char    *columns;       /* names of columns to be inserted into 
-                                * (values separated with commas) */
-       char    **rows;         /* each row hold string of one row to be inserted
-                                * (values separated with commas) */
-       long    rec_num,        /* actual number of rows in structure */
-               rec_size;       /* approx. size of a real insert string */
-       long    size_limit,     /* size and # of records limit which trigger */
-               record_limit;   /* real insert; zero means unlimitted */
-};
-
-
-/*
- * mapping glite DB types to mysql types
- */
-int glite_type_to_mysql[] = {
-       MYSQL_TYPE_NULL,
-       MYSQL_TYPE_TINY,
-       MYSQL_TYPE_LONG,
-       MYSQL_TYPE_TINY_BLOB,
-       MYSQL_TYPE_TINY_BLOB,
-       MYSQL_TYPE_BLOB,
-       MYSQL_TYPE_BLOB,
-       MYSQL_TYPE_MEDIUM_BLOB,
-       MYSQL_TYPE_MEDIUM_BLOB,
-       MYSQL_TYPE_LONG_BLOB,
-       MYSQL_TYPE_LONG_BLOB,
-       MYSQL_TYPE_VAR_STRING,
-       MYSQL_TYPE_STRING,
-       MYSQL_TYPE_DATE,
-       MYSQL_TYPE_TIME,
-       MYSQL_TYPE_DATETIME,
-       MYSQL_TYPE_TIMESTAMP,
-};
-
-
-
-static int lbu_clrerr(glite_lbu_DBContext ctx);
-static int lbu_err(glite_lbu_DBContext ctx, int code, const char *desc, const char *func, int line);
-static int myerr(glite_lbu_DBContext ctx, const char *source, int line);
-static int myerrstmt(glite_lbu_Statement stmt, const char *source, int line);
-static int myisokstmt(glite_lbu_Statement stmt, const char *source, int line, int *retry);
-static int db_connect(glite_lbu_DBContext ctx, const char *cs, MYSQL **mysql);
-static void db_close(MYSQL *mysql);
-static int transaction_test(glite_lbu_DBContext ctx, MYSQL *m2, int *have_transactions);
-static int FetchRowSimple(glite_lbu_DBContext ctx, MYSQL_RES *result, unsigned long *lengths, char **results);
-static int FetchRowPrepared(glite_lbu_DBContext ctx, glite_lbu_Statement stmt, unsigned int n, unsigned long *lengths, char **results);
-void set_time(MYSQL_TIME *mtime, const time_t time);
-time_t get_time(const MYSQL_TIME *mtime);
-
-
-/* ---- common ---- */
-
-
-int glite_lbu_DBError(glite_lbu_DBContext ctx, char **text, char **desc) {
-       if (text) *text = strdup(strerror(ctx->err.code));
-       if (desc) {
-               if (ctx->err.desc) *desc = strdup(ctx->err.desc);
-               else *desc = NULL;
-       }
-
-       return ctx->err.code;
-}
-
-
-int glite_lbu_DBConnect(glite_lbu_DBContext *ctx, const char *cs) {
-       int err;
-
-       *ctx = calloc(1, sizeof **ctx);
-       if (db_connect(*ctx, cs, &(*ctx)->mysql) != 0) {
-               err = STATUS(*ctx);
-               glite_lbu_DBClose(*ctx);
-               *ctx = NULL;
-               return err;
-       }
-       return 0;
-}
-
-
-void glite_lbu_DBClose(glite_lbu_DBContext ctx) {
-       db_close(ctx->mysql);
-       free(ctx->err.desc);
-       free(ctx);
-}
-
-
-int glite_lbu_DBQueryCaps(glite_lbu_DBContext ctx) {
-       MYSQL   *m = ctx->mysql;
-       MYSQL   *m2;
-       int     major,minor,sub,version,caps,have_transactions=0;
-       const char *ver_s;
-
-       if (ctx->have_caps) return ctx->caps;
-
-       caps = 0;
-
-       ver_s = mysql_get_server_info(m);
-       if (!ver_s || 3 != sscanf(ver_s,"%d.%d.%d",&major,&minor,&sub))
-               return ERR(ctx, EINVAL, "problem retreiving MySQL version");
-       version = 10000*major + 100*minor + sub;
-
-       if (version >= GLITE_LBU_MYSQL_INDEX_VERSION) caps |= GLITE_LBU_DB_CAP_INDEX;
-       if (version >= GLITE_LBU_MYSQL_PREPARED_VERSION) caps |= GLITE_LBU_DB_CAP_PREPARED;
-
-       CLR_ERR(ctx);
-
-       if (db_connect(ctx, ctx->cs, &m2) == 0) {
-               transaction_test(ctx, m2, &have_transactions);
-               db_close(m2);
-       }
-       if (have_transactions) caps |= GLITE_LBU_DB_CAP_TRANSACTIONS;
-
-       if (STATUS(ctx) == 0) {
-               ctx->have_caps = 1;
-               return caps;
-       } else return -1;
-}
-
-
-void glite_lbu_DBSetCaps(glite_lbu_DBContext ctx, int caps) {
-       ctx->caps = caps;
-}
-
-
-int glite_lbu_Transaction(glite_lbu_DBContext ctx) {
-       if (USE_TRANS(ctx)) {
-               if (glite_lbu_ExecSQL(ctx, "SET AUTOCOMMIT=0", NULL) < 0) goto err;
-               if (glite_lbu_ExecSQL(ctx, "BEGIN", NULL) < 0) goto err;
-       }
-err:
-       return STATUS(ctx);
-}
-
-
-int glite_lbu_Commit(glite_lbu_DBContext ctx) {
-       if (USE_TRANS(ctx)) {
-               if (glite_lbu_ExecSQL(ctx, "COMMIT", NULL) < 0) goto err;
-               if (glite_lbu_ExecSQL(ctx, "SET AUTOCOMMIT=1", NULL) < 0) goto err;
-       }
-err:
-       return STATUS(ctx);
-}
-
-
-int glite_lbu_Rollback(glite_lbu_DBContext ctx) {
-       if (USE_TRANS(ctx)) { 
-               if (glite_lbu_ExecSQL(ctx, "ROLLBACK", NULL) < 0) goto err;
-               if (glite_lbu_ExecSQL(ctx, "SET AUTOCOMMIT=1", NULL) < 0) goto err;
-       }
-err:
-       return STATUS(ctx);
-}
-
-
-int glite_lbu_FetchRow(glite_lbu_Statement stmt, unsigned int n, unsigned long *lengths, char **results) {
-       memset(results, 0, n * sizeof(*results));
-       if (stmt->result) return FetchRowSimple(stmt->ctx, stmt->result, lengths, results);
-       else return FetchRowPrepared(stmt->ctx, stmt, n, lengths, results);
-}
-
-
-void glite_lbu_FreeStmt(glite_lbu_Statement *stmt) {
-       if (*stmt) {
-               if ((*stmt)->result) mysql_free_result((*stmt)->result);
-               if ((*stmt)->stmt) mysql_stmt_close((*stmt)->stmt);
-               free(*stmt);
-               *stmt = NULL;
-       }
-}
-
-
-int glite_lbu_QueryIndices(glite_lbu_DBContext ctx, const char *table, char ***key_names, char ****column_names) {
-       glite_lbu_Statement       stmt = NULL;
-
-       int     i,j,ret;
-
-/* XXX: "show index from" columns. Matches at least MySQL 4.0.11 */
-       char    *showcol[12];
-       int     Key_name,Seq_in_index,Column_name,Sub_part;
-
-       char    **keys = NULL;
-       int     *cols = NULL;
-       char    **col_names = NULL;
-
-       int     nkeys = 0;
-
-       char    ***idx = NULL;
-
-       Key_name = Seq_in_index = Column_name = Sub_part = -1;
-
-       if (glite_lbu_ExecSQL(ctx,"show index from states",&stmt)<0) 
-               return STATUS(ctx);
-
-       while ((ret = glite_lbu_FetchRow(stmt,sizeof(showcol)/sizeof(showcol[0]),NULL,showcol)) > 0) {
-               assert(ret <= sizeof showcol/sizeof showcol[0]);
-
-               if (!col_names) {
-                       col_names = malloc(ret * sizeof col_names[0]);
-                       glite_lbu_QueryColumns(stmt,col_names);
-                       for (i=0; i<ret; i++) 
-                               if (!strcasecmp(col_names[i],"Key_name")) Key_name = i;
-                               else if (!strcasecmp(col_names[i],"Seq_in_index")) Seq_in_index = i;
-                               else if (!strcasecmp(col_names[i],"Column_name")) Column_name = i;
-                               else if (!strcasecmp(col_names[i],"Sub_part")) Sub_part = i;
-
-                       assert(Key_name >= 0 && Seq_in_index >= 0 && 
-                                       Column_name >= 0 && Sub_part >= 0);
-
-               }
-
-               for (i=0; i<nkeys && strcasecmp(showcol[Key_name],keys[i]); i++);
-
-               if (i == nkeys) {
-                       keys = realloc(keys,(i+2) * sizeof keys[0]);
-                       keys[i] = showcol[Key_name];
-//printf("** KEY [%d] %s\n", i, keys[i]);
-                       keys[i+1] = NULL;
-                       cols = realloc(cols,(i+1) * sizeof cols[0]); 
-                       cols[i] = 0;
-                       idx = realloc(idx,(i+2) * sizeof idx[0]);
-                       idx[i] = idx[i+1] = NULL;
-                       showcol[Key_name] = NULL;
-                       nkeys++;
-               }
-
-               j = atoi(showcol[Seq_in_index])-1;
-               if (cols[i] <= j) {
-                       cols[i] = j+1;
-                       idx[i] = realloc(idx[i],(j+2)*sizeof idx[i][0]);
-                       memset(&idx[i][j+1],0,sizeof idx[i][0]);
-               }
-               idx[i][j] = strdup(showcol[Column_name]);
-//printf("****** [%d, %d] %s\n", i, j, idx[i][j]);
-//FIXME: needed?idx[i][j].value.i = atoi(showcol[Sub_part]);
-               for (i = 0; showcol[i]; i++) free(showcol[i]);
-       }
-
-       glite_lbu_FreeStmt(&stmt);
-       free(cols);
-       free(col_names);
-
-       if (ret == 0) CLR_ERR(ctx);
-       else {
-               free(keys);
-               keys = NULL;
-               for (i = 0; idx[i]; i++) {
-                       for (j = 0; idx[i][j]; j++) free(idx[i][j]);
-                       free(idx[i]);
-               }
-               free(idx);
-               idx = NULL;
-       }
-
-       if (key_names) *key_names = keys;
-       else free(keys);
-       *column_names = idx;
-
-       return STATUS(ctx);
-}
-
-
-/* ---- simple ---- */
-
-int glite_lbu_ExecSQL(glite_lbu_DBContext ctx, const char *cmd, glite_lbu_Statement *stmt) {
-       int     merr;
-       int     retry_nr = 0;
-       int     do_reconnect = 0;
-#ifdef LBS_DB_PROFILE
-       struct timeval  start,end;
-       int     pid;
-
-       static struct timeval sum = {
-               tv_sec: 0,
-               tv_usec: 0
-       };
-#endif
-
-       CLR_ERR(ctx);
-
-       if (stmt) *stmt = NULL;
-
-#ifdef LBS_DB_PROFILE
-       gettimeofday(&start,NULL);
-#endif
-
-       while (retry_nr == 0 || do_reconnect) {
-               do_reconnect = 0;
-               if (mysql_query(ctx->mysql, cmd)) {
-                       /* error occured */
-                       switch (merr = mysql_errno(ctx->mysql)) {
-                               case 0:
-                                       break;
-                               case ER_DUP_ENTRY: 
-                                       ERR(ctx, EEXIST, mysql_error(ctx->mysql));
-                                       return -1;
-                                       break;
-                               case CR_SERVER_LOST:
-                                       if (retry_nr <= 0) 
-                                               do_reconnect = 1;
-                                       break;
-                               default:
-                                       MY_ERR(ctx);
-                                       return -1;
-                                       break;
-                       }
-               }
-               retry_nr++;
-       }
-
-       if (stmt) {
-               *stmt = calloc(1, sizeof(**stmt));
-               if (!*stmt) {
-                       ERR(ctx, ENOMEM, NULL);
-                       return -1;
-               }
-               (**stmt).ctx = ctx;
-               (**stmt).result = mysql_store_result(ctx->mysql);
-               if (!(**stmt).result) {
-                       if (mysql_errno(ctx->mysql)) {
-                               MY_ERR(ctx);
-                               *stmt = NULL;
-                               return -1;
-                       }
-               }
-       } else {
-               MYSQL_RES       *r = mysql_store_result(ctx->mysql);
-               mysql_free_result(r);
-       }
-#ifdef LBS_DB_PROFILE
-       pid = getpid();
-       gettimeofday(&end,NULL);
-       end.tv_usec -= start.tv_usec;
-       end.tv_sec -= start.tv_sec;
-       if (end.tv_usec < 0) { end.tv_sec--; end.tv_usec += 1000000; }
-
-       sum.tv_usec += end.tv_usec;
-       sum.tv_sec += end.tv_sec + sum.tv_usec / 1000000;
-       sum.tv_usec -= 1000000 * (sum.tv_usec / 1000000);
-       fprintf(stderr,"[%d] %s\n[%d] %3ld.%06ld (sum: %3ld.%06ld)\n",pid,txt,pid,end.tv_sec,end.tv_usec,sum.tv_sec,sum.tv_usec);
-#endif
-
-       return mysql_affected_rows(ctx->mysql);
-}
-
-
-int glite_lbu_QueryColumns(glite_lbu_Statement stmt, char **cols)
-{
-       int     i = 0;
-       MYSQL_FIELD     *f;
-
-       if (!stmt->result) return ERR(stmt->ctx, EINVAL, "QueryColumns implemented only for simple API");
-       while ((f = mysql_fetch_field(stmt->result))) cols[i++] = f->name;
-       return i == 0;
-}
-
-
-void glite_lbu_TimeToDB(time_t t, char **str) {
-       struct tm       *tm = gmtime(&t);
-
-       asprintf(str,"'%4d-%02d-%02d %02d:%02d:%02d'",tm->tm_year+1900,tm->tm_mon+1,
-               tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec);
-}
-
-
-time_t glite_lbu_DBToTime(const char *str) {
-       struct tm       tm;
-
-       memset(&tm,0,sizeof(tm));
-       setenv("TZ","UTC",1); tzset();
-       sscanf(str,"%4d-%02d-%02d %02d:%02d:%02d",
-               &tm.tm_year,&tm.tm_mon,&tm.tm_mday,
-               &tm.tm_hour,&tm.tm_min,&tm.tm_sec);
-       tm.tm_year -= 1900;
-       tm.tm_mon--;
-
-       return mktime(&tm);
-}
-
-/* ---- prepared --- */
-
-int glite_lbu_PrepareStmt(glite_lbu_DBContext ctx, const char *sql, glite_lbu_Statement *stmt) {
-       int ret, retry;
-       MYSQL_RES *meta;
-
-       // init
-       *stmt = calloc(1, sizeof(**stmt));
-       (*stmt)->ctx = ctx;
-
-       // create the SQL command
-       if (((*stmt)->stmt = mysql_stmt_init(ctx->mysql)) == NULL)
-               return MY_ERRSTMT(*stmt);
-
-       // prepare the SQL command
-       retry = 1;
-       do {
-               mysql_stmt_prepare((*stmt)->stmt, sql, strlen(sql));
-               ret = MY_ISOKSTMT(*stmt, &retry);
-       } while (ret == 0);
-       if (ret == -1) goto failed;
-
-       // number of fields (0 for no results)
-       if ((meta = mysql_stmt_result_metadata((*stmt)->stmt)) != NULL) {
-               (*stmt)->nrfields = mysql_num_fields(meta);
-               mysql_free_result(meta);
-       } else
-               (*stmt)->nrfields = 0;
-
-       return CLR_ERR(ctx);
-
-failed:
-       glite_lbu_FreeStmt(stmt);
-       return STATUS(ctx);
-}
-
-
-int glite_lbu_ExecStmt(glite_lbu_Statement stmt, int n, ...) {
-       int i;
-       va_list ap;
-       glite_lbu_DBType type;
-       char *pchar;
-       long int *plint;
-       MYSQL_TIME *ptime;
-       glite_lbu_DBContext ctx;
-       int ret, retry;
-       MYSQL_BIND *binds = NULL;
-       void **data = NULL;
-       unsigned long *lens;
-
-       // gather parameters
-       if (n) {
-               binds = calloc(n, sizeof(MYSQL_BIND));
-               data = calloc(n, sizeof(void *));
-               lens = calloc(n, sizeof(unsigned long *));
-       }
-       va_start(ap, n);
-       for (i = 0; i < n; i++) {
-               type = va_arg(ap, glite_lbu_DBType);
-               switch (type) {
-               case GLITE_LBU_DB_TYPE_TINYINT:
-                       pchar = binds[i].buffer = data[i] = malloc(sizeof(char));
-                       *pchar = va_arg(ap, int);
-                       break;
-
-               case GLITE_LBU_DB_TYPE_INT:
-                       plint = binds[i].buffer = data[i] = malloc(sizeof(long int));
-                       *plint = va_arg(ap, long int);
-                       break;
-
-               case GLITE_LBU_DB_TYPE_TINYBLOB:
-               case GLITE_LBU_DB_TYPE_TINYTEXT:
-               case GLITE_LBU_DB_TYPE_BLOB:
-               case GLITE_LBU_DB_TYPE_TEXT:
-               case GLITE_LBU_DB_TYPE_MEDIUMBLOB:
-               case GLITE_LBU_DB_TYPE_MEDIUMTEXT:
-               case GLITE_LBU_DB_TYPE_LONGBLOB:
-               case GLITE_LBU_DB_TYPE_LONGTEXT:
-                       binds[i].buffer = va_arg(ap, void *);
-                       binds[i].length = &lens[i];
-                       lens[i] = va_arg(ap, unsigned long);
-                       break;
-
-               case GLITE_LBU_DB_TYPE_VARCHAR:
-               case GLITE_LBU_DB_TYPE_CHAR:
-                       binds[i].buffer = va_arg(ap, char *);
-                       binds[i].length = &lens[i];
-                       lens[i] = binds[i].buffer ? strlen((char *)binds[i].buffer) : 0;
-                       break;
-
-               case GLITE_LBU_DB_TYPE_DATE:
-               case GLITE_LBU_DB_TYPE_TIME:
-               case GLITE_LBU_DB_TYPE_DATETIME:
-               case GLITE_LBU_DB_TYPE_TIMESTAMP:
-                       ptime = binds[i].buffer = data[i] = malloc(sizeof(MYSQL_TIME));
-                       set_time(ptime, va_arg(ap, time_t));
-                       break;
-
-               case GLITE_LBU_DB_TYPE_NULL:
-                       break;
-
-               default:
-                       assert("unimplemented parameter assign" == NULL);
-                       break;
-               }
-               binds[i].buffer_type = glite_type_to_mysql[type];
-       }
-       va_end(ap);
-
-       // bind parameters
-       if (mysql_stmt_bind_param(stmt->stmt, binds) != 0) {
-               MY_ERRSTMT(stmt);
-               goto failed;
-       }
-
-       // run
-       ctx = stmt->ctx;
-       retry = 1;
-       do {
-               mysql_stmt_execute(stmt->stmt);
-               ret = MY_ISOKSTMT(stmt, &retry);
-       } while (ret == 0);
-       if (ret == -1) goto failed;
-
-       // result
-       retry = 1;
-       do {
-               mysql_stmt_store_result(stmt->stmt);
-               ret = MY_ISOKSTMT(stmt, &retry);
-       } while (ret == 0);
-       if (ret == -1) goto failed;
-
-       // free params
-       for (i = 0; i < n; i++) free(data[i]);
-       free(data);
-       free(binds);
-       free(lens);
-       CLR_ERR(ctx);
-       return mysql_stmt_affected_rows(stmt->stmt);
-
-failed:
-       for (i = 0; i < n; i++) free(data[i]);
-       free(data);
-       free(binds);
-       free(lens);
-       return -1;
-}
-
-
-int glite_lbu_bufferedInsertInit(glite_lbu_DBContext ctx, glite_lbu_bufInsert *bi, void *mysql, const char *table_name, long size_limit, long record_limit, const char *columns)
-{
-       *bi = calloc(1, sizeof(*bi));
-       (*bi)->ctx = ctx;
-       (*bi)->table_name = strdup(table_name);
-       (*bi)->columns = strdup(columns);
-       (*bi)->rec_num = 0;
-       (*bi)->rec_size = 0;
-       (*bi)->rows = calloc(record_limit, sizeof(*((*bi)->rows)) );
-       (*bi)->size_limit = size_limit;
-       (*bi)->record_limit = record_limit;
-
-        return CLR_ERR(ctx);
-}
-
-
-static int flush_bufferd_insert(glite_lbu_bufInsert bi)
-{
-       char *stmt, *vals, *temp;
-       long i;
-
-
-       if (!bi->rec_num)
-               return STATUS(bi->ctx);
-
-       asprintf(&vals,"(%s)", bi->rows[0]);
-       for (i=1; i < bi->rec_num; i++) {
-               // XXX:  use string add (preallocated memory)
-               asprintf(&temp,"%s,(%s)", vals, bi->rows[i]);
-               free(vals); vals = temp; temp = NULL;
-               free(bi->rows[i]);
-               bi->rows[i] = NULL;
-       }
-       
-       trio_asprintf(&stmt, "insert into %|Ss(%|Ss) values %s;",
-               bi->table_name, bi->columns, vals);
-
-       if (glite_lbu_ExecSQL(bi->ctx,stmt,NULL) < 0) {
-                if (STATUS(bi->ctx) == EEXIST)
-                        CLR_ERR(bi->ctx);
-        }
-
-       /* reset bi counters */
-       bi->rec_size = 0;
-       bi->rec_num = 0;
-       
-       free(vals);
-       free(stmt);
-
-       return STATUS(bi->ctx);
-}
-
-
-int glite_lbu_bufferedInsert(glite_lbu_bufInsert bi, const char *row)
-{
-       bi->rows[bi->rec_num++] = strdup(row);
-       bi->rec_size += strlen(row);
-
-       if ((bi->size_limit && bi->rec_size >= bi->size_limit) ||
-               (bi->record_limit && bi->rec_num >= bi->record_limit))
-       {
-               if (flush_bufferd_insert(bi))
-                       return STATUS(bi->ctx);
-       }
-
-       return CLR_ERR(bi->ctx);
-}
-
-
-static void free_buffered_insert(glite_lbu_bufInsert bi) {
-       long i;
-
-       free(bi->table_name);
-       free(bi->columns);
-       for (i=0; i < bi->rec_num; i++) {
-               free(bi->rows[i]);
-       }
-       free(bi->rows);
-}
-
-
-int glite_lbu_bufferedInsertClose(glite_lbu_bufInsert bi)
-{
-       if (flush_bufferd_insert(bi))
-               return STATUS(bi->ctx);
-       free_buffered_insert(bi);
-
-       return CLR_ERR(bi->ctx);
-}
-
-
-/*
- * helping compatibility function: clear error from the context
- */
-static int lbu_clrerr(glite_lbu_DBContext ctx) {
-       ctx->err.code = 0;
-       if (ctx->err.desc) {
-               free(ctx->err.desc);
-               ctx->err.desc = NULL;
-       }
-       return 0;
-}
-
-
-/*
- * helping compatibility function: sets error on the context
- */
-static int lbu_err(glite_lbu_DBContext ctx, int code, const char *desc, const char *func, int line) {
-       if (code) {
-               ctx->err.code = code;
-               free(ctx->err.desc);
-               ctx->err.desc = desc ? strdup(desc) : NULL;
-               fprintf(stderr, "[db] %s:%d %s\n", func, line, desc);
-               return code;
-       } else
-               return ctx->err.code;
-}
-
-
-/*
- * helping function: find oud mysql error and sets on the context
- */
-static int myerr(glite_lbu_DBContext ctx, const char *source, int line) {
-       return lbu_err(ctx, EIO, mysql_error(ctx->mysql), source, line);
-}
-
-
-/*
- * helping function: find oud mysql stmt error and sets on the context
- */
-static int myerrstmt(glite_lbu_Statement stmt, const char *source, int line) { 
-       return lbu_err(stmt->ctx, EIO, mysql_stmt_error(stmt->stmt), source, line);
-}
-
-
-/*
- * Ehelping function: error handle
- *
- * \return -1 failed
- * \return  0 retry
- * \return  1 OK
- */
-static int myisokstmt(glite_lbu_Statement stmt, const char *source, int line, int *retry) {
-       switch (mysql_stmt_errno(stmt->stmt)) {
-               case 0:
-                       return 1;
-                       break;
-               case ER_DUP_ENTRY:
-                       lbu_err(stmt->ctx, EEXIST, mysql_stmt_error(stmt->stmt), source, line);
-                       return -1;
-                       break;
-               case CR_SERVER_LOST:
-                       if (*retry > 0) {
-                               (*retry)--;
-                               return 0;
-                       } else
-                               return -1;
-                       break;
-               default:
-                       myerrstmt(stmt, source, line);
-                       return -1;
-                       break;
-       }
-}
-
-
-/*
- * mysql connect
- */
-static int db_connect(glite_lbu_DBContext ctx, const char *cs, MYSQL **mysql) {
-       char    *buf = NULL;
-       char    *host,*user,*pw,*db; 
-       char    *slash,*at,*colon;
-       int      ret;
-
-       // needed for SQL result parameters
-       assert(sizeof(int) >= sizeof(my_bool));
-
-       if (!cs) return ERR(ctx, EINVAL, "connect string not specified");
-       
-       if (!(*mysql = mysql_init(NULL))) return ERR(ctx, ENOMEM, NULL);
-
-       mysql_options(*mysql, MYSQL_READ_DEFAULT_FILE, "my");
-
-       host = user = pw = db = NULL;
-
-       buf = strdup(cs);
-       slash = strchr(buf,'/');
-       at = strrchr(buf,'@');
-       colon = strrchr(buf,':');
-
-       if (!slash || !at || !colon) {
-               free(buf);
-               db_close(*mysql);
-               *mysql = NULL;
-               return ERR(ctx, EINVAL, "Invalid DB connect string");
-       }
-
-       *slash = *at = *colon = 0;
-       host = at+1;
-       user = buf;
-       pw = slash+1;
-       db = colon+1;
-
-       /* ljocha: CLIENT_FOUND_ROWS added to make authorization check
-        * working in update_notif(). 
-        * Hope it does not break anything else */ 
-       if (!mysql_real_connect(*mysql,host,user,pw,db,0,NULL,CLIENT_FOUND_ROWS)) {
-               free(buf);
-               ret = MY_ERR(ctx);
-               glite_lbu_DBClose(ctx);
-               return ret;
-       }
-       free(buf);
-
-       ctx->cs = cs;
-       return 0;
-}
-
-
-/*
- * mysql close
- */
-static void db_close(MYSQL *mysql) {
-       if (mysql) mysql_close(mysql);
-}
-
-
-/*
- * test transactions capability:
- *
- * 1) with connection 1 create testing table test<pid>
- * 2) with connection 1 insert a value
- * 3) with connection 2 look for a value, transactions are for no error and
- *    no items found
- * 4) with connection 1 commit and drop  the table
- */
-static int transaction_test(glite_lbu_DBContext ctx, MYSQL *m2, int *have_transactions) {
-       MYSQL *m1;
-       char *desc, *cmd_create, *cmd_insert, *cmd_select, *cmd_drop;
-       int retval;
-       int err;
-       pid_t pid;
-
-       ctx->caps |= GLITE_LBU_DB_CAP_TRANSACTIONS;
-       pid = getpid();
-       *have_transactions = 0;
-
-       asprintf(&cmd_create, "CREATE TABLE test%d (item INT)", pid);
-       asprintf(&cmd_insert, "INSERT INTO test%d (item) VALUES (1)", pid);
-       asprintf(&cmd_select, "SELECT item FROM test%d", pid);
-       asprintf(&cmd_drop, "DROP TABLE test%d", pid);
-
-       m1 = ctx->mysql;
-       glite_lbu_ExecSQL(ctx, cmd_drop, NULL);
-       if (glite_lbu_ExecSQL(ctx, cmd_create, NULL) != 0) goto err1;
-       if (glite_lbu_Transaction(ctx) != 0) goto err2;
-       if (glite_lbu_ExecSQL(ctx, cmd_insert, NULL) != 1) goto err2;
-
-       ctx->mysql = m2;
-       if ((retval = glite_lbu_ExecSQL(ctx, cmd_select, NULL)) == -1) goto err2;
-
-       ctx->mysql = m1;
-       if (glite_lbu_Commit(ctx) != 0) goto err2;
-       if (glite_lbu_ExecSQL(ctx, cmd_drop, NULL) != 0) goto err1;
-
-#ifdef LBS_DB_PROFILE
-       fprintf(stderr, "[%d] use_transactions = %d\n", getpid(), USE_TRANS(ctx));
-#endif
-
-       *have_transactions = retval == 0;
-       goto ok;
-err2:
-       err = ctx->err.code;
-       desc = ctx->err.desc;
-       glite_lbu_ExecSQL(ctx, cmd_drop, NULL);
-       ctx->err.code = err;
-       ctx->err.desc = desc;
-err1:
-ok:
-       free(cmd_create);
-       free(cmd_insert);
-       free(cmd_select);
-       free(cmd_drop);
-       return STATUS(ctx);
-}
-
-
-/*
- * simple version of the fetch
- */
-static int FetchRowSimple(glite_lbu_DBContext ctx, MYSQL_RES *result, unsigned long *lengths, char **results) {
-       MYSQL_ROW            row;
-       int                  nr, i;
-       unsigned long       *len;
-
-       CLR_ERR(ctx);
-
-       if (!(row = mysql_fetch_row(result))) {
-               if (mysql_errno((MYSQL *) ctx->mysql)) {
-                       MY_ERR(ctx);
-                       return -1;
-               } else return 0;
-       }
-
-       nr = mysql_num_fields(result);
-       len = mysql_fetch_lengths(result);
-       for (i=0; i<nr; i++) {
-               if (lengths) lengths[i] = len[i];
-               if (len[i]) {
-                       results[i] = malloc(len[i] + 1);
-                       memcpy(results[i], row[i], len[i]);
-                       results[i][len[i]] = '\000';
-               } else
-                       results[i] = strdup("");
-       }
-
-       return nr;
-}
-
-
-/*
- * prepared version of the fetch
- */
-static int FetchRowPrepared(glite_lbu_DBContext ctx, glite_lbu_Statement stmt, unsigned int n, unsigned long *lengths, char **results) {
-       int ret, retry, i;
-       MYSQL_BIND *binds = NULL;
-       unsigned long *lens = NULL;
-
-       if (n != stmt->nrfields) {
-               ERR(ctx, EINVAL, "bad number of result fields");
-               return -1;
-       }
-
-       // space for results
-       if (n) binds = calloc(n, sizeof(MYSQL_BIND));
-       if (!lengths) {
-               lens = calloc(n, sizeof(unsigned long));
-               lengths = lens;
-       }
-       for (i = 0; i < n; i++) {
-               binds[i].buffer_type = MYSQL_TYPE_VAR_STRING;
-               binds[i].buffer_length = GLITE_LBU_DEFAULT_RESULT_BUFFER_LENGTH - 1;
-               binds[i].length = &lengths[i];
-               binds[i].buffer = results[i] = calloc(1, GLITE_LBU_DEFAULT_RESULT_BUFFER_LENGTH);
-       }
-       if (mysql_stmt_bind_result(stmt->stmt, binds) != 0) goto failedstmt;
-
-       // fetch data, all can be truncated
-       retry = 1;
-       do {
-               switch(mysql_stmt_fetch(stmt->stmt)) {
-#ifdef MYSQL_DATA_TRUNCATED
-                       case MYSQL_DATA_TRUNCATED:
-#endif
-                       case 0:
-                               ret = 1; break;
-                       case 1: ret = MY_ISOKSTMT(stmt, &retry); break;
-                       case MYSQL_NO_DATA: ret = 0; goto quit; /* it's OK */
-                       default: ERR(ctx, EIO, "other fetch error"); goto failed;
-               }
-       } while (ret == 0);
-       if (ret == -1) goto failed;
-
-       // check if all fileds had enough buffer space
-       for (i = 0; i < n; i++) {
-               // fetch the rest if needed
-               if (lengths[i] > binds[i].buffer_length) {
-                       unsigned int fetched;
-
-                       fetched = binds[i].buffer_length;
-                       if ((results[i] = realloc(results[i], lengths[i] + 1)) == NULL) {
-                               ERR(ctx, ENOMEM, "insufficient memory for field data");
-                               goto failed;
-                       }
-                       results[i][lengths[i]] = '\000';
-                       binds[i].buffer = results[i] + fetched;
-                       binds[i].buffer_length = lengths[i] - fetched;
-
-                       retry = 1;
-                       do {
-                               switch (mysql_stmt_fetch_column(stmt->stmt, binds + i, i, fetched)) {
-                                       case 0: ret = 1; break;
-                                       case 1: ret = MY_ISOKSTMT(stmt, &retry); break;
-                                       case MYSQL_NO_DATA: ret = 0; goto quit; /* it's OK */
-                                       default: ERR(ctx, EIO, "other fetch error"); goto failed;
-                               }
-                       } while (ret == 0);
-                       if (ret == -1) goto failed;
-               }
-       }
-
-       CLR_ERR(ctx);
-       free(binds);
-       free(lens);
-       return n;
-
-failedstmt:
-       MY_ERRSTMT(stmt);
-failed:
-       ret = -1;
-quit:
-       free(binds);
-       free(lens);
-       for (i = 0; i < n; i++) {
-               free(results[i]);
-               results[i] = NULL;
-       }
-       return ret;
-}
-
-
-void set_time(MYSQL_TIME *mtime, const time_t time) {
-       struct tm tm;
-
-       gmtime_r(&time, &tm);
-       mtime->year = tm.tm_year + 1900;
-       mtime->month = tm.tm_mon + 1;
-       mtime->day = tm.tm_mday;
-       mtime->hour = tm.tm_hour;
-       mtime->minute = tm.tm_min;
-       mtime->second = tm.tm_sec;
-}
-
-
-time_t get_time(const MYSQL_TIME *mtime) {
-       struct tm tm;
-
-       memset(&tm, 0, sizeof(tm));
-       setenv("TZ","UTC",1); tzset();
-       tm.tm_year = mtime->year - 1900;
-       tm.tm_mon = mtime->month - 1;
-       tm.tm_mday = mtime->day;
-       tm.tm_hour = mtime->hour;
-       tm.tm_min = mtime->minute;
-       tm.tm_sec = mtime->second;
-
-       return mktime(&tm);
-}
diff --git a/org.glite.lb-utils.jobid/.cvsignore b/org.glite.lb-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.lb-utils.jobid/LICENSE b/org.glite.lb-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.lb-utils.jobid/Makefile b/org.glite.lb-utils.jobid/Makefile
deleted file mode 100644 (file)
index e05e3e7..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-# Default values
-top_srcdir=.
-builddir=build
-top_builddir=${top_srcdir}/${builddir}
-stagedir=.
-distdir=.
-globalprefix=glite
-package=glite-lb-utils-jobid
-version=0.0.0
-PREFIX=/opt/glite
-lbuprefix=lbu
-
--include Makefile.inc
--include ../project/version.properties
-
-version=${module.version}
-
-VPATH=${top_srcdir}/src:${top_srcdir}/test::${top_srcdir}/doc
-
-CC=gcc
-
-DEBUG:=-g -O0 -Wall
-
-CFLAGS:=${DEBUG} -I${top_srcdir}/src -I${top_srcdir}/interface -I. -D_GNU_SOURCE
-
-COMPILE:=libtool --mode=compile ${CC}
-LINK:=libtool --mode=link ${CC} -rpath ${stagedir}/lib ${LDFLAGS} 
-INSTALL:=libtool --mode=install install
-
-OBJS:=cjobid.o strmd5.o
-LOBJS:=${OBJS:.o=.lo}
-
-HDRS:=cjobid.h strmd5.h
-
-STATICLIB:=libglite_lbu_jobid.a
-LTLIB:=libglite_lbu_jobid.la
-
-default: all
-
-all compile: ${STATICLIB} ${LTLIB}
-
-# to use libtool versioning correcty, we should have:
-#
-# current = major + minor + offset
-# revision = patch
-# age = minor
-#
-# where offset is a sum of maximal released minor's of all previous major's
-# 
-# version_info=-version-info `echo ${version} | cut -d. -f1,2 | tr . :`
-
-# counted minors: n/a
-offset=0
-
-version_info:=-version-info ${shell \
-       perl -e '$$,=":"; @F=split "\\.","${version}"; print $$F[0]+$$F[1]+${offset},$$F[2],$$F[1]' }
-
-${STATICLIB}: ${OBJS}
-       ar crv $@ ${OBJS}
-       ranlib $@
-
-${LTLIB}: ${OBJS}
-       ${LINK} ${version_info} -o $@ ${LOBJS} 
-
-stage: compile
-       $(MAKE) install PREFIX=${stagedir} DOSTAGE=yes
-
-check: 
-       @true
-
-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} ${PREFIX}/lib
-       ${INSTALL} -m 644 ${top_srcdir}/LICENSE ${PREFIX}/share/doc/${package}-${version}
-       if [ x${DOSTAGE} = xyes ]; then \
-               mkdir -p ${PREFIX}/include/${globalprefix}/${lbuprefix} ; \
-               (cd ${top_srcdir}/interface && install -m 644 ${HDRS} ${PREFIX}/include/${globalprefix}/${lbuprefix}) ; \
-               install -m 644 ${STATICLIB} ${PREFIX}/lib; \
-       fi
-
-clean:
-
-%.o: %.c
-       ${COMPILE} ${CFLAGS} -c $<
diff --git a/org.glite.lb-utils.jobid/build.xml b/org.glite.lb-utils.jobid/build.xml
deleted file mode 100644 (file)
index e6cc422..0000000
+++ /dev/null
@@ -1,129 +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-utils jobid component
-       
-       Authors: Joachim Flammer <Joachim.Flammer@Cern.ch>      
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.2  2006/07/18 14:24:30  akrenek
-       "ant stage" works, "dist" is broken - I don't care yet
-
-       Revision 1.1.1.1  2006/07/14 06:59:06  akrenek
-       module created
-
-       Revision 1.7  2006/04/26 11:39:55  flammer
-       Corrected wrong template syntax.
-
-       Revision 1.6  2005/04/17 10:29:35  dimeglio
-       Split module.build from version.properties
-
-       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="jobid" default="dist">
-
-       <!-- ==============================================
-             Builds the GLite lb-utils jobid 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}"/>
-       <property file="${module.build.file}"/>
-       
-       <!-- ==============================================
-                Local private targets
-            ============================================== -->
-       
-       <target name="localinit"
-               description="Module specific initialization tasks">
-               <antcall target="lbmakefiles" />
-       </target>
-       
-       <target name="localcompile"
-               description="Module specific compile tasks">
-       </target>
-
-       <target name="localclean"
-               description="Module specific cleaning tasks">
-       </target>
-       
-</project>             
diff --git a/org.glite.lb-utils.jobid/interface/cjobid.h b/org.glite.lb-utils.jobid/interface/cjobid.h
deleted file mode 100755 (executable)
index f802ce7..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 _glite_lbu_JobId *glite_lbu_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 glite_lbu_JobIdCreate(const char * bkserver, int port, glite_lbu_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 glite_lbu_JobIdRecreate(const char *bkserver, int port, const char * unique, glite_lbu_JobId * jobid);
-
-/**
- * Create copy of Job ID
- * \param in jobid for duplication
- * \param jobid  duplicated jobid
- * \retval 0 for success
- * \retval EINVAL invalid jobid
- * \retval ENOMEM if memory allocation fails
- */
-int glite_lbu_JobIdDup(const glite_lbu_JobId in, glite_lbu_JobId * jobid);
-
-/*
- * Free jobid structure
- * \param jobid for dealocation
- */
-void glite_lbu_JobIdFree(glite_lbu_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 glite_lbu_JobIdParse(const char* jobidstr, glite_lbu_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* glite_lbu_JobIdUnparse(const glite_lbu_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* glite_lbu_JobIdGetServer(const glite_lbu_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 glite_lbu_JobIdGetServerParts(const glite_lbu_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* glite_lbu_JobIdGetUnique(const glite_lbu_JobId jobid);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _GLITE_JOBID_H */
diff --git a/org.glite.lb-utils.jobid/interface/strmd5.h b/org.glite.lb-utils.jobid/interface/strmd5.h
deleted file mode 100755 (executable)
index 27d8544..0000000
+++ /dev/null
@@ -1,30 +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)
- */
-
-#ifdef USE_MBUF
-char *strmd5(const char *src, unsigned char *dst);
-#endif
-
-/**
- * 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.lb-utils.jobid/project/build.number b/org.glite.lb-utils.jobid/project/build.number
deleted file mode 100644 (file)
index 5cfec85..0000000
+++ /dev/null
@@ -1 +0,0 @@
-module.build = 0\r
diff --git a/org.glite.lb-utils.jobid/project/build.properties b/org.glite.lb-utils.jobid/project/build.properties
deleted file mode 100755 (executable)
index 89232f3..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# temporary hack before lb-utils are integrated
-
-lb-utils.subsystem.name = org.glite.lb-utils
-lb-utils.subsystem.prefix = lb-utils
diff --git a/org.glite.lb-utils.jobid/project/configure.properties.xml b/org.glite.lb-utils.jobid/project/configure.properties.xml
deleted file mode 100644 (file)
index 23ba931..0000000
+++ /dev/null
@@ -1,63 +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-utils jobid component
-
-        Authors: Joachim Flammer <Joachim.Flammer@cern.ch>
-        Version info: $Id$
-        Release: $Name$
-
-        Revision history:
-        $Log$
-        Revision 1.3  2006/07/18 14:26:17  akrenek
-        oops, no double-dash
-
-        Revision 1.2  2006/07/18 14:24:30  akrenek
-        "ant stage" works, "dist" is broken - I don't care yet
-
-        Revision 1.1.1.1  2006/07/14 06:59:06  akrenek
-        module created
-
-        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-utils jobid 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}
-lbuprefix=${subsystem.prefix}
-package=${module.package.name}
-PREFIX=${install.dir}
-</echo>
-       </target>
-
-</project>
diff --git a/org.glite.lb-utils.jobid/project/properties.xml b/org.glite.lb-utils.jobid/project/properties.xml
deleted file mode 100644 (file)
index 1adf343..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-utils jobid 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-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="${lb-utils.subsystem.name}"/>
-               
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${lb-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 ...
-            ====================================================== -->
-       
-               
-</project>
diff --git a/org.glite.lb-utils.jobid/project/tar_exclude b/org.glite.lb-utils.jobid/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-utils.jobid/project/version.properties b/org.glite.lb-utils.jobid/project/version.properties
deleted file mode 100755 (executable)
index 52a0f68..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-module.version = 1.0.0
-module.age = 0
diff --git a/org.glite.lb-utils.jobid/src/cjobid.c b/org.glite.lb-utils.jobid/src/cjobid.c
deleted file mode 100755 (executable)
index 6d6a73f..0000000
+++ /dev/null
@@ -1,260 +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 <ctype.h>
-
-#include "cjobid.h"
-#include "strmd5.h"
-
-struct _glite_lbu_JobId {
-    char               *id;    /* unique job identification */
-    /* additional information */
-    char               *BShost;/* bookkeeping server hostname */
-    unsigned int       BSport; /* bookkeeping server port */
-    char               *info;  /* additional information (after ? in URI) */
-};
-
-int glite_lbu_JobIdCreate(const char *bkserver, int port, glite_lbu_JobId *jobId)
-{
-    return glite_lbu_JobIdRecreate(bkserver, port, NULL, jobId);
-}
-
-
-int glite_lbu_JobIdRecreate(const char* bkserver, int port, const char *unique, glite_lbu_JobId *jobId)
-{
-    glite_lbu_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 = (glite_lbu_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) {
-       glite_lbu_JobIdFree(out);
-       return ENOMEM;
-    }
-
-    *jobId = out;
-    return 0;
-}
-
-
-int glite_lbu_JobIdDup(const glite_lbu_JobId in, glite_lbu_JobId *out)
-{
-    glite_lbu_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) {
-       glite_lbu_JobIdFree(jid);
-       return ENOMEM;
-    }
-
-    jid->BSport = in->BSport;
-    *out = jid;
-    return 0;
-}
-
-
-// XXX
-// use recreate
-// parse name, port, unique
-int glite_lbu_JobIdParse(const char *idString, glite_lbu_JobId *jobId)
-{
-    char *pom, *pom1, *pom2;
-    glite_lbu_JobId out;
-
-    *jobId = NULL;
-
-    out = (glite_lbu_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);
-           glite_lbu_JobIdFree(out);
-           return EINVAL;
-    }
-
-    free(pom);
-    *jobId = out;
-    return 0;
-}
-
-
-void glite_lbu_JobIdFree(glite_lbu_JobId job)
-{
-    if (job) {
-       free(job->id);
-       free(job->BShost);
-       free(job->info);
-       free(job);
-    }
-}
-
-
-char* glite_lbu_JobIdUnparse(const glite_lbu_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* glite_lbu_JobIdGetServer(const glite_lbu_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 glite_lbu_JobIdGetServerParts(const glite_lbu_JobId jobid, char **srvName, unsigned int *srvPort)
-{
-    if (jobid) {
-       *srvName = strdup(jobid->BShost);
-       *srvPort = jobid->BSport ? jobid->BSport : GLITE_WMSC_JOBID_DEFAULT_PORT;
-    }
-}
-
-
-char* glite_lbu_JobIdGetUnique(const glite_lbu_JobId jobid)
-{
-    return jobid ? strdup(jobid->id) : NULL;
-}
diff --git a/org.glite.lb-utils.jobid/src/strmd5.c b/org.glite.lb-utils.jobid/src/strmd5.c
deleted file mode 100755 (executable)
index 775aee8..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-#ident "$Header$"
-
-#include <openssl/md5.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "strmd5.h"
-
-#if USE_MBUF   /* let's try without it */
-#warning Thread unsafe!
-static char mbuf[33];
-#endif
-
-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;
-}
-
-#ifdef USE_MBUF
-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;
-}
-#endif
-
-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.lb-utils.server-bones/.cvsignore b/org.glite.lb-utils.server-bones/.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-utils.server-bones/LICENSE b/org.glite.lb-utils.server-bones/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-utils.server-bones/build.xml b/org.glite.lb-utils.server-bones/build.xml
deleted file mode 100644 (file)
index efe49ad..0000000
+++ /dev/null
@@ -1,122 +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-utils server-bones component
-       
-       Authors: Joachim Flammer <Joachim.Flammer@Cern.ch>      
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.7  2006/04/26 11:39:55  flammer
-       Corrected wrong template syntax.
-
-       Revision 1.6  2005/04/17 10:29:35  dimeglio
-       Split module.build from version.properties
-
-       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="server-bones" default="dist">
-
-       <!-- ==============================================
-             Builds the GLite lb-utils server-bones 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-xxx.file}" /> -->
-               
-       <!-- =========================================
-                Load version file 
-            ========================================= -->
-       <property file="${module.version.file}"/>
-       <property file="${module.build.file}"/>
-       
-       <!-- ==============================================
-                Local private targets
-            ============================================== -->
-       
-       <target name="localinit"
-               description="Module specific initialization tasks">
-       </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-utils.server-bones/project/build.number b/org.glite.lb-utils.server-bones/project/build.number
deleted file mode 100644 (file)
index 5cfec85..0000000
+++ /dev/null
@@ -1 +0,0 @@
-module.build = 0\r
diff --git a/org.glite.lb-utils.server-bones/project/build.properties b/org.glite.lb-utils.server-bones/project/build.properties
deleted file mode 100755 (executable)
index e69de29..0000000
diff --git a/org.glite.lb-utils.server-bones/project/configure.properties.xml b/org.glite.lb-utils.server-bones/project/configure.properties.xml
deleted file mode 100644 (file)
index 6ad627b..0000000
+++ /dev/null
@@ -1,37 +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-utils server-bones 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-utils server-bones component configuration properties">
-
-</project>
diff --git a/org.glite.lb-utils.server-bones/project/properties.xml b/org.glite.lb-utils.server-bones/project/properties.xml
deleted file mode 100644 (file)
index a76d544..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-utils server-bones 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-utils server-bones 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-utils.subsystem.name}"/>
-               
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${lb-utils.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-utils.server-bones/project/version.properties b/org.glite.lb-utils.server-bones/project/version.properties
deleted file mode 100755 (executable)
index 6f1f8ab..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-module.version = 0.0.0
-module.age = 0
\ No newline at end of file
diff --git a/org.glite.lb-utils.trio/.cvsignore b/org.glite.lb-utils.trio/.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-utils.trio/LICENSE b/org.glite.lb-utils.trio/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-utils.trio/Makefile b/org.glite.lb-utils.trio/Makefile
deleted file mode 100644 (file)
index 96a8386..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-# Default values
-top_srcdir=.
-builddir=build
-top_builddir=${top_srcdir}/${builddir}
-stagedir=.
-distdir=.
-globalprefix=glite
-package=glite-lb-utils-trio
-version=0.0.0
-PREFIX=/opt/glite
-lbuprefix=lbu
-
--include Makefile.inc
--include ../project/version.properties
-
-version=${module.version}
-
-VPATH=${top_srcdir}/src:${top_srcdir}/test::${top_srcdir}/doc
-
-CC=gcc
-
-DEBUG:=-g -O0 -Wall
-
-CFLAGS:=${DEBUG} -I${top_srcdir}/src -I${top_srcdir}/interface -I. -DDATAGRID_EXTENSION
-
-COMPILE:=libtool --mode=compile ${CC}
-LINK:=libtool --mode=link ${CC} -rpath ${stagedir}/lib ${LDFLAGS} 
-LINKXX:=libtool --mode=link ${CXX} -rpath ${stagedir}/lib ${LDFLAGS} 
-INSTALL:=libtool --mode=install install
-
-REPORTS:=${top_srcdir}/reports
-TEST_LIBS:=-L${cppunit_prefix}/lib -lcppunit -ldl
-TEST_INC:=-I${cppunit_prefix}/include
-
-
-OBJS:=trio.o strio.o escape.o
-LOBJS:=${OBJS:.o=.lo}
-
-HDRS:=trio.h escape.h
-
-STATICLIB:=libglite_lbu_trio.a
-LTLIB:=libglite_lbu_trio.la
-
-default: all
-
-all compile: ${STATICLIB} ${LTLIB}
-
-# to use libtool versioning correcty, we should have:
-#
-# current = major + minor + offset
-# revision = patch
-# age = minor
-#
-# where offset is a sum of maximal released minor's of all previous major's
-# 
-# version_info=-version-info `echo ${version} | cut -d. -f1,2 | tr . :`
-
-# counted minors: n/a
-offset=0
-
-version_info:=-version-info ${shell \
-       perl -e '$$,=":"; @F=split "\\.","${version}"; print $$F[0]+$$F[1]+${offset},$$F[2],$$F[1]' }
-
-${STATICLIB}: ${OBJS}
-       ar crv $@ ${OBJS}
-       ranlib $@
-
-${LTLIB}: ${OBJS}
-       ${LINK} ${version_info} -o $@ ${LOBJS} 
-
-stage: compile
-       $(MAKE) install PREFIX=${stagedir} DOSTAGE=yes
-
-check: compile mkreports runtest
-
-mkreports:
-       -mkdir ${REPORTS}
-
-runtest: trio_test
-       ./trio_test ${REPORTS}/trio.xml
-
-trio_test: trio_test.cpp
-       ${CXX} -c ${CFLAGS} ${TEST_INC} $<
-       ${LINKXX} -o $@ trio_test.o ${LTLIB} ${TEST_LIBS}
-       
-
-dist: distsrc distbin
-
-distsrc:
-       mkdir -p ${top_srcdir}/${package}-${version}
-       cd ${top_srcdir} && GLOBIGNORE="${package}-${version}" && cp -Rf * ${package}-${version}
-       cd ${top_srcdir} && tar -czf ${distdir}/${package}-${version}_src.tar.gz --exclude-from=project/tar_exclude ${package}-${version}
-       rm -rf ${top_srcdir}/${package}-${version}
-
-distbin:
-       $(MAKE) install PREFIX=`pwd`/tmpbuilddir${stagedir}
-       save_dir=`pwd`; cd tmpbuilddir${stagedir} && tar -czf $$save_dir/${top_srcdir}/${distdir}/${package}-${version}_bin.tar.gz *; cd $$save_dir
-       rm -rf tmpbuilddir
-
-install:
-       mkdir -p ${PREFIX}/lib
-       mkdir -p ${PREFIX}/share/doc/${package}-${version}
-       ${INSTALL} -m 644 ${LTLIB} ${PREFIX}/lib
-       ${INSTALL} -m 644 ${top_srcdir}/LICENSE ${PREFIX}/share/doc/${package}-${version}
-       if [ x${DOSTAGE} = xyes ]; then \
-               mkdir -p ${PREFIX}/include/${globalprefix}/${lbuprefix} ; \
-               (cd ${top_srcdir}/interface && install -m 644 ${HDRS} ${PREFIX}/include/${globalprefix}/${lbuprefix}) ; \
-               install -m 644 ${STATICLIB} ${PREFIX}/lib; \
-       fi
-
-clean:
-
-%.o: %.c
-       ${COMPILE} ${CFLAGS} -c $<
diff --git a/org.glite.lb-utils.trio/build.xml b/org.glite.lb-utils.trio/build.xml
deleted file mode 100644 (file)
index 7e38dda..0000000
+++ /dev/null
@@ -1,126 +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-utils trio component
-       
-       Authors: Joachim Flammer <Joachim.Flammer@Cern.ch>      
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.1.1.1  2006/07/14 06:59:12  akrenek
-       module created
-
-       Revision 1.7  2006/04/26 11:39:55  flammer
-       Corrected wrong template syntax.
-
-       Revision 1.6  2005/04/17 10:29:35  dimeglio
-       Split module.build from version.properties
-
-       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="trio" default="dist">
-
-       <!-- ==============================================
-             Builds the GLite lb-utils trio 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}"/>
-       <property file="${module.build.file}"/>
-       
-       <!-- ==============================================
-                Local private targets
-            ============================================== -->
-       
-       <target name="localinit"
-               description="Module specific initialization tasks">
-               <antcall target="lbmakefiles" />
-       </target>
-       
-       <target name="localcompile"
-               description="Module specific compile tasks">
-       </target>
-
-       <target name="localclean"
-               description="Module specific cleaning tasks">
-       </target>
-       
-</project>             
diff --git a/org.glite.lb-utils.trio/interface/escape.h b/org.glite.lb-utils.trio/interface/escape.h
deleted file mode 100644 (file)
index 4795f68..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifndef __EDG_WORKLOAD_LOGGING_COMMON_ESCAPE_H__
-#define __EDG_WORKLOAD_LOGGING_COMMON_ESCAPE_H__
-/*!
- * \file escape.h
- */
-
-#ident "$Header$"
-
-
-/*!
- * \fn char *glite_lbu_EscapeULM(const char *str)
- * \param str           a string to escape
- * \return              new (allocated) escaped string
- * \brief in given string (ULM) escape all ULM_QM, ULM_BS and ULM_LF by ULM_BS
- */
-
-char *glite_lbu_EscapeULM(const char *);
-
-
-/*!
- * \fn char *glite_lbu_UnescapeULM(const char *str)
- * \param str           a string to unescape
- * \return              new (allocated) unescaped string
- * \brief in given string (ULM) unescape all escaped ULM_QM, ULM_BS and ULM_LF
- */
-
-char *glite_lbu_UnescapeULM(const char *);
-
-
-/*!
- * \fn char *glite_lbu_EscapeXML(const char *str);
- * \param str          a string to escape
- * \return             new (allocated) escaped string
- * \brief in given string (XML) escape all unwanted characters
- */
-
-char *glite_lbu_EscapeXML(const char *);
-
-
-/*!
- * \fn char *glite_lbu_UnescapeXML(const char *str)
- * \param str          a string to unescape
- * \return             new (allocated) unescaped string
- * \brief in given string (XML) unescape all escaped characters
- */
-
-char *glite_lbu_UnescapeXML(const char *);
-
-
-/*!
- * \fn char *glite_lbu_EscapeSQL(const char *str)
- * \param str          a string to escape
- * \return             new (allocated) escaped string
- * \briefin given string (SQL) escape all unwanted characters
- */
-
-char *glite_lbu_EscapeSQL(const char *);
-
-#endif /* __EDG_WORKLOAD_LOGGING_COMMON_ESCAPE_H__ */
diff --git a/org.glite.lb-utils.trio/interface/trio.h b/org.glite.lb-utils.trio/interface/trio.h
deleted file mode 100644 (file)
index 04f133c..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- ************************************************************************/
-
-#ifndef TRIO_TRIO_H
-#define TRIO_TRIO_H
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdlib.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* make utility and C++ compiler in Windows NT fails to find this symbol */ 
-#if defined(WIN32) && !defined(isascii)
-# define isascii ((unsigned)(x) < 0x80)
-#endif
-
-/*
- * Error codes.
- *
- * Remember to add a textual description to trio_strerror.
- */
-enum {
-  TRIO_EOF      = 1,
-  TRIO_EINVAL   = 2,
-  TRIO_ETOOMANY = 3,
-  TRIO_EDBLREF  = 4,
-  TRIO_EGAP     = 5,
-  TRIO_ENOMEM   = 6,
-  TRIO_ERANGE   = 7
-};
-
-/* Error macros */
-#define TRIO_ERROR_CODE(x) ((-(x)) & 0x00FF)
-#define TRIO_ERROR_POSITION(x) ((-(x)) >> 8)
-#define TRIO_ERROR_NAME(x) trio_strerror(x)
-
-const char *trio_strerror(int);
-
-/*************************************************************************
- * Print Functions
- */
-
-int trio_printf(const char *format, ...);
-int trio_vprintf(const char *format, va_list args);
-int trio_printfv(const char *format, void **args);
-
-int trio_fprintf(FILE *file, const char *format, ...);
-int trio_vfprintf(FILE *file, const char *format, va_list args);
-int trio_fprintfv(FILE *file, const char *format, void **args);
-
-int trio_dprintf(int fd, const char *format, ...);
-int trio_vdprintf(int fd, const char *format, va_list args);
-int trio_dprintfv(int fd, const char *format, void **args);
-
-/* trio_sprintf(target, format, ...)
- * trio_snprintf(target, maxsize, format, ...)
- *
- *   Build 'target' according to 'format' and succesive
- *   arguments. This is equal to the sprintf() and
- *   snprintf() functions.
- */
-int trio_sprintf(char *buffer, const char *format, ...);
-int trio_vsprintf(char *buffer, const char *format, va_list args);
-int trio_sprintfv(char *buffer, const char *format, void **args);
-
-int trio_snprintf(char *buffer, size_t max, const char *format, ...);
-int trio_vsnprintf(char *buffer, size_t bufferSize, const char *format,
-                  va_list args);
-int trio_snprintfv(char *buffer, size_t bufferSize, const char *format,
-                  void **args);
-
-int trio_snprintfcat(char *buffer, size_t max, const char *format, ...);
-int trio_vsnprintfcat(char *buffer, size_t bufferSize, const char *format,
-                      va_list args);
-
-char *trio_aprintf(const char *format, ...);
-char *trio_vaprintf(const char *format, va_list args);
-
-int trio_asprintf(char **ret, const char *format, ...);
-int trio_vasprintf(char **ret, const char *format, va_list args);
-
-/*************************************************************************
- * Scan Functions
- */
-int trio_scanf(const char *format, ...);
-int trio_vscanf(const char *format, va_list args);
-int trio_scanfv(const char *format, void **args);
-
-int trio_fscanf(FILE *file, const char *format, ...);
-int trio_vfscanf(FILE *file, const char *format, va_list args);
-int trio_fscanfv(FILE *file, const char *format, void **args);
-
-int trio_dscanf(int fd, const char *format, ...);
-int trio_vdscanf(int fd, const char *format, va_list args);
-int trio_dscanfv(int fd, const char *format, void **args);
-
-int trio_sscanf(const char *buffer, const char *format, ...);
-int trio_vsscanf(const char *buffer, const char *format, va_list args);
-int trio_sscanfv(const char *buffer, const char *format, void **args);
-
-/*************************************************************************
- * Renaming
- */
-#ifdef TRIO_REPLACE_STDIO
-/* Replace the <stdio.h> functions */
-#ifndef HAVE_PRINTF
-# define printf trio_printf
-#endif
-#ifndef HAVE_VPRINTF
-# define vprintf trio_vprintf
-#endif
-#ifndef HAVE_FPRINTF
-# define fprintf trio_fprintf
-#endif
-#ifndef HAVE_VFPRINTF
-# define vfprintf trio_vfprintf
-#endif
-#ifndef HAVE_SPRINTF
-# define sprintf trio_sprintf
-#endif
-#ifndef HAVE_VSPRINTF
-# define vsprintf trio_vsprintf
-#endif
-#ifndef HAVE_SNPRINTF
-# define snprintf trio_snprintf
-#endif
-#ifndef HAVE_VSNPRINTF
-# define vsnprintf trio_vsnprintf
-#endif
-#ifndef HAVE_SCANF
-# define scanf trio_scanf
-#endif
-#ifndef HAVE_VSCANF
-# define vscanf trio_vscanf
-#endif
-#ifndef HAVE_FSCANF
-# define fscanf trio_fscanf
-#endif
-#ifndef HAVE_VFSCANF
-# define vfscanf trio_vfscanf
-#endif
-#ifndef HAVE_SSCANF
-# define sscanf trio_sscanf
-#endif
-#ifndef HAVE_VSSCANF
-# define vsscanf trio_vsscanf
-#endif
-/* These aren't stdio functions, but we make them look similar */
-#define dprintf trio_dprintf
-#define vdprintf trio_vdprintf
-#define aprintf trio_aprintf
-#define vaprintf trio_vaprintf
-#define asprintf trio_asprintf
-#define vasprintf trio_vasprintf
-#define dscanf trio_dscanf
-#define vdscanf trio_vdscanf
-#endif
-
-/* strio compatible names */
-#define StrScan trio_sscanf
-#define StrFormat trio_sprintf
-#define StrFormatMax trio_snprintf
-#define StrFormatAlloc trio_aprintf
-#define StrFormatAppendMax trio_snprintfcat
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* TRIO_TRIO_H */
diff --git a/org.glite.lb-utils.trio/project/build.number b/org.glite.lb-utils.trio/project/build.number
deleted file mode 100644 (file)
index 5cfec85..0000000
+++ /dev/null
@@ -1 +0,0 @@
-module.build = 0\r
diff --git a/org.glite.lb-utils.trio/project/build.properties b/org.glite.lb-utils.trio/project/build.properties
deleted file mode 100755 (executable)
index 89232f3..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# temporary hack before lb-utils are integrated
-
-lb-utils.subsystem.name = org.glite.lb-utils
-lb-utils.subsystem.prefix = lb-utils
diff --git a/org.glite.lb-utils.trio/project/configure.properties.xml b/org.glite.lb-utils.trio/project/configure.properties.xml
deleted file mode 100644 (file)
index d743f4b..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
-
-        Configuration build properties file for the GLite lb-utils trio component
-
-        Authors: Joachim Flammer <Joachim.Flammer@cern.ch>
-        Version info: $Id$
-        Release: $Name$
-
-        Revision history:
-        $Log$
-        Revision 1.1.1.1  2006/07/14 06:59:12  akrenek
-        module created
-
-        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-utils trio 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}
-lbuprefix=${subsystem.prefix}
-package=${module.package.name}
-cppunit_prefix=${with.cppunit.prefix}
-PREFIX=${install.dir}
-</echo>
-       </target>
-
-
-</project>
diff --git a/org.glite.lb-utils.trio/project/properties.xml b/org.glite.lb-utils.trio/project/properties.xml
deleted file mode 100644 (file)
index e472152..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-utils trio 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-utils trio 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-utils.subsystem.name}"/>
-               
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${lb-utils.subsystem.prefix}"/>
-
-       <!-- ======================================================
-              Define component properties
-            ====================================================== -->
-                               
-       <!-- Component name prefix -->
-       <property name="component.prefix" value="trio" />
-                       
-       <!-- ======================================================
-              Define general component properties
-            ====================================================== -->
-       
-       <import file="${component.general.properties.file}" />
-                                               
-       <!-- ======================================================
-             Define extra properties here ...
-            ====================================================== -->
-       
-               
-</project>
diff --git a/org.glite.lb-utils.trio/project/version.properties b/org.glite.lb-utils.trio/project/version.properties
deleted file mode 100755 (executable)
index 6f1f8ab..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-module.version = 0.0.0
-module.age = 0
\ No newline at end of file
diff --git a/org.glite.lb-utils.trio/src/escape.c b/org.glite.lb-utils.trio/src/escape.c
deleted file mode 100644 (file)
index 9a1d545..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-#ident "$Header$"
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <ctype.h>
-
-#include "escape.h"
-
-#define ULM_QM  '"'
-#define ULM_BS  '\\'
-#define ULM_LF  '\n'
-
-/*
- *----------------------------------------------------------------------
- * 
- * \fn char *glite_lbu_EscapeULM(const char *str)
- * \param str          a string to escape
- * \return             new (allocated) escaped string
- * \brief in given string escape all ULM_QM, ULM_BS and ULM_LF by ULM_BS
- *
- * Calls: malloc, strlen
- *
- * Algorithm: array lookup
- *             - the new string will be allocated
- *
- *----------------------------------------------------------------------
- */
-
-char *glite_lbu_EscapeULM(const char *str)
-{
-unsigned int i,j;
-size_t size;
-char *ret;
-
-if (str == NULL) return 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 *glite_lbu_UnescapeULM(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 *glite_lbu_UnescapeULM(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 *glite_lbu_EscapeXML(const char *in)
-{
-        const char* tmp_in;
-       char    *out;
-       int     cnt,i,j,k;
-
-       if (!in) return NULL;
-
-       for (cnt = 0, tmp_in = in; *tmp_in != '\0'; ++tmp_in) {
-               if (strchr(XML_ESCAPE_SET, *tmp_in) ||
-                       (*tmp_in & 0x7f) < 0x20 /* control character */ ||
-                       (*tmp_in == '%')) cnt++;
-        }
-
-       out = malloc(strlen(in)+1+cnt*5);
-
-       for (i=j=0; in[i]; i++) {
-               for (k=0; xml_etab[k].c && xml_etab[k].c != in[i]; k++);
-               if (xml_etab[k].c) {
-                       int     l;
-
-                       out[j++] = '&';
-                       memcpy(out+j,xml_etab[k].e,l=strlen(xml_etab[k].e));
-                       j += l;
-                       out[j++] = ';';
-               } else if ((in[i] & 0x7f) < 0x20 || in[i] == '%') {
-                       sprintf(out+j, "%%%02x", (unsigned char)in[i]);
-                       j+=3;
-               } else {
-                       out[j++] = in[i];
-               }
-       }
-       out[j] = 0;
-       return out;
-}
-
-char *glite_lbu_UnescapeXML(const char *in)
-{
-       char    *out;
-       int     i,j,k;
-       char    xtmp[3];
-       unsigned char   origchar;
-
-       if (!in) return NULL;
-       out = malloc(strlen(in)+1);
-
-       for (i=j=0; in[i]; j++) if (in[i] == '&') {
-               char    *s = strchr(in+i,';');
-               if (s) {
-                       int     l = s-in-i+1;
-                       for (k=0; xml_etab[k].c && strncasecmp(in+i+1,xml_etab[k].e,l-2); k++);
-                       if (xml_etab[k].c) {
-                               out[j] = xml_etab[k].c;
-                               i += l;
-                       } else out[j] = in[i++];
-               } else out[j] = in[i++];
-       } else if (in[i] == '%') {
-               if (isxdigit(xtmp[0]=in[i+1]) && isxdigit(xtmp[1]=in[i+2])) {
-                       xtmp[2] = '\0';
-                       origchar = (unsigned char) strtol(xtmp, NULL, 16);
-                       if ((origchar & 0x7f) < 0x20 || origchar == '%') {
-                               out[j] = origchar;
-                               i += 3;
-                       } else out[j] = in[i++];
-               } else out[j] = in[i++];
-       } else {
-               out[j] = in[i++];
-       }
-       out[j] = 0;
-       return out;
-}
-
-char *glite_lbu_EscapeSQL(const char *in)
-{
-        const char* tmp_in;
-       char    *out = NULL;
-       int     i,j,cnt;
-
-       if (!in) return NULL;
-
-       for (cnt = 0, tmp_in = in; (tmp_in = strchr(tmp_in,'\'')) != NULL; ++tmp_in) {
-          ++cnt;
-        }
-       for (tmp_in = in; (tmp_in = strchr(tmp_in,'\\')) != NULL; ++tmp_in) {
-          ++cnt;
-        }
-
-       out = malloc(strlen(in)+1+cnt);
-
-       for (i=j=0; in[i]; i++) {
-               if (in[i] == '\\') out[j++] = '\\';
-               if (in[i] == '\'') out[j++] = '\'';
-               out[j++] = in[i];
-       }
-       out[j] = 0;
-
-       return out;
-}
diff --git a/org.glite.lb-utils.trio/src/strio.c b/org.glite.lb-utils.trio/src/strio.c
deleted file mode 100644 (file)
index f1ab5b8..0000000
+++ /dev/null
@@ -1,581 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- ************************************************************************/
-
-/*
- * TODO
- * - StrToLongDouble
- */
-static const char rcsid[] = "@(#)$Id$";
-
-#if defined(unix) || defined(__xlC__) || defined(__QNX__)
-# define PLATFORM_UNIX
-#elif defined(WIN32) || defined(_WIN32)
-# define PLATFORM_WIN32
-#elif defined(AMIGA) && defined(__GNUC__)
-# define PLATFORM_UNIX
-#endif
-
-#if defined(__STDC__) && (__STDC_VERSION__ >= 199901L)
-# define TRIO_C99
-#endif
-
-#include "strio.h"
-#include <string.h>
-#include <locale.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include <time.h>
-#include <math.h>
-#ifndef DEBUG
-# define NDEBUG
-#endif
-#include <assert.h>
-
-#ifndef NULL
-# define NULL 0
-#endif
-#define NIL ((char)0)
-#ifndef FALSE
-# define FALSE (1 == 0)
-# define TRUE (! FALSE)
-#endif
-
-#define VALID(x) (NULL != (x))
-#define INVALID(x) (NULL == (x))
-
-#if defined(PLATFORM_UNIX)
-# define USE_STRCASECMP
-# define USE_STRNCASECMP
-# define USE_STRERROR
-# if defined(__QNX__)
-#  define strcasecmp(x,y) stricmp(x,y)
-#  define strncasecmp(x,y,n) strnicmp(x,y,n)
-# endif
-#elif defined(PLATFORM_WIN32)
-# define USE_STRCASECMP
-# define strcasecmp(x,y) strcmpi(x,y)
-#endif
-
-/*************************************************************************
- * StrAppendMax
- */
-char *StrAppendMax(char *target, size_t max, const char *source)
-{
-  assert(VALID(target));
-  assert(VALID(source));
-  assert(max > 0);
-
-  max -= StrLength(target) + 1;
-  return (max > 0) ? strncat(target, source, max) : target;
-}
-
-/*************************************************************************
- * StrCopyMax
- */
-char *StrCopyMax(char *target, size_t max, const char *source)
-{
-  assert(VALID(target));
-  assert(VALID(source));
-  assert(max > 0); /* Includes != 0 */
-
-  target = strncpy(target, source, max - 1);
-  target[max - 1] = (char)0;
-  return target;
-}
-
-/*************************************************************************
- * StrDuplicate
- */
-char *StrDuplicate(const char *source)
-{
-  char *target;
-
-  assert(VALID(source));
-
-  target = StrAlloc(StrLength(source) + 1);
-  if (target)
-    {
-      StrCopy(target, source);
-    }
-  return target;
-}
-
-/*************************************************************************
- * StrDuplicateMax
- */
-char *StrDuplicateMax(const char *source, size_t max)
-{
-  char *target;
-  size_t len;
-
-  assert(VALID(source));
-  assert(max > 0);
-
-  /* Make room for string plus a terminating zero */
-  len = StrLength(source) + 1;
-  if (len > max)
-    {
-      len = max;
-    }
-  target = StrAlloc(len);
-  if (target)
-    {
-      StrCopyMax(target, len, source);
-    }
-  return target;
-}
-
-/*************************************************************************
- * StrEqual
- */
-int StrEqual(const char *first, const char *second)
-{
-  assert(VALID(first));
-  assert(VALID(second));
-
-  if (VALID(first) && VALID(second))
-    {
-#if defined(USE_STRCASECMP)
-      return (0 == strcasecmp(first, second));
-#else
-      while ((*first != NIL) && (*second != NIL))
-       {
-         if (toupper(*first) != toupper(*second))
-           {
-             break;
-           }
-         first++;
-         second++;
-       }
-      return ((*first == NIL) && (*second == NIL));
-#endif
-    }
-  return FALSE;
-}
-
-/*************************************************************************
- * StrEqualCase
- */
-int StrEqualCase(const char *first, const char *second)
-{
-  assert(VALID(first));
-  assert(VALID(second));
-
-  if (VALID(first) && VALID(second))
-    {
-      return (0 == strcmp(first, second));
-    }
-  return FALSE;
-}
-
-/*************************************************************************
- * StrEqualCaseMax
- */
-int StrEqualCaseMax(const char *first, size_t max, const char *second)
-{
-  assert(VALID(first));
-  assert(VALID(second));
-
-  if (VALID(first) && VALID(second))
-    {
-      return (0 == strncmp(first, second, max));
-    }
-  return FALSE;
-}
-
-/*************************************************************************
- * StrEqualLocale
- */
-int StrEqualLocale(const char *first, const char *second)
-{
-  assert(VALID(first));
-  assert(VALID(second));
-
-#if defined(LC_COLLATE)
-  return (strcoll(first, second) == 0);
-#else
-  return StrEqual(first, second);
-#endif
-}
-
-/*************************************************************************
- * StrEqualMax
- */
-int StrEqualMax(const char *first, size_t max, const char *second)
-{
-  assert(VALID(first));
-  assert(VALID(second));
-
-  if (VALID(first) && VALID(second))
-    {
-#if defined(USE_STRNCASECMP)
-      return (0 == strncasecmp(first, second, max));
-#else
-      /* Not adequately tested yet */
-      size_t cnt = 0;
-      while ((*first != NIL) && (*second != NIL) && (cnt <= max))
-       {
-         if (toupper(*first) != toupper(*second))
-           {
-             break;
-           }
-         first++;
-         second++;
-         cnt++;
-       }
-      return ((cnt == max) || ((*first == NIL) && (*second == NIL)));
-#endif
-    }
-  return FALSE;
-}
-
-/*************************************************************************
- * StrError
- */
-const char *StrError(int errorNumber)
-{
-#if defined(USE_STRERROR)
-  return strerror(errorNumber);
-#else
-  return "unknown";
-#endif
-}
-
-/*************************************************************************
- * StrFormatDate
- */
-size_t StrFormatDateMax(char *target,
-                       size_t max,
-                       const char *format,
-                       const struct tm *datetime)
-{
-  assert(VALID(target));
-  assert(VALID(format));
-  assert(VALID(datetime));
-  assert(max > 0);
-  
-  return strftime(target, max, format, datetime);
-}
-
-/*************************************************************************
- * StrHash
- */
-unsigned long StrHash(const char *string, int type)
-{
-  unsigned long value = 0L;
-  char ch;
-
-  assert(VALID(string));
-  
-  switch (type)
-    {
-    case STRIO_HASH_PLAIN:
-      while ( (ch = *string++) != NIL )
-       {
-         value *= 31;
-         value += (unsigned long)ch;
-       }
-      break;
-    default:
-      assert(FALSE);
-      break;
-    }
-  return value;
-}
-
-/*************************************************************************
- * StrMatch
- */
-int StrMatch(char *string, char *pattern)
-{
-  assert(VALID(string));
-  assert(VALID(pattern));
-  
-  for (; ('*' != *pattern); ++pattern, ++string)
-    {
-      if (NIL == *string)
-       {
-         return (NIL == *pattern);
-       }
-      if ((toupper((int)*string) != toupper((int)*pattern))
-         && ('?' != *pattern))
-       {
-         return FALSE;
-       }
-    }
-  /* two-line patch to prevent *too* much recursiveness: */
-  while ('*' == pattern[1])
-    pattern++;
-
-  do
-    {
-      if ( StrMatch(string, &pattern[1]) )
-       {
-         return TRUE;
-       }
-    }
-  while (*string++);
-  
-  return FALSE;
-}
-
-/*************************************************************************
- * StrMatchCase
- */
-int StrMatchCase(char *string, char *pattern)
-{
-  assert(VALID(string));
-  assert(VALID(pattern));
-  
-  for (; ('*' != *pattern); ++pattern, ++string)
-    {
-      if (NIL == *string)
-       {
-         return (NIL == *pattern);
-       }
-      if ((*string != *pattern)
-         && ('?' != *pattern))
-       {
-         return FALSE;
-       }
-    }
-  /* two-line patch to prevent *too* much recursiveness: */
-  while ('*' == pattern[1])
-    pattern++;
-
-  do
-    {
-      if ( StrMatchCase(string, &pattern[1]) )
-       {
-         return TRUE;
-       }
-    }
-  while (*string++);
-  
-  return FALSE;
-}
-
-/*************************************************************************
- * StrSpanFunction
- *
- * Untested
- */
-size_t StrSpanFunction(char *source, int (*Function)(int))
-{
-  size_t count = 0;
-
-  assert(VALID(source));
-  assert(VALID(Function));
-  
-  while (*source != NIL)
-    {
-      if (Function(*source))
-       break; /* while */
-      source++;
-      count++;
-    }
-  return count;
-}
-
-/*************************************************************************
- * StrSubstringMax
- */
-char *StrSubstringMax(const char *string, size_t max, const char *find)
-{
-  size_t count;
-  size_t size;
-  char *result = NULL;
-
-  assert(VALID(string));
-  assert(VALID(find));
-  
-  size = StrLength(find);
-  if (size <= max)
-    {
-      for (count = 0; count <= max - size; count++)
-       {
-         if (StrEqualMax(find, size, &string[count]))
-           {
-             result = (char *)&string[count];
-             break;
-           }
-       }
-    }
-  return result;
-}
-
-/*************************************************************************
- * StrToDouble
- *
- * double ::= [ <sign> ]
- *            ( <number> |
- *              <number> <decimal_point> <number> |
- *              <decimal_point> <number> )
- *            [ <exponential> [ <sign> ] <number> ]
- * number ::= 1*( <digit> )
- * digit ::= ( '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' )
- * exponential ::= ( 'e' | 'E' )
- * sign ::= ( '-' | '+' )
- * decimal_point ::= '.'
- */
-double StrToDouble(const char *source, const char **endp)
-{
-#if defined(TRIO_C99)
-  return strtod(source, endp);
-#else
-  /* Preliminary code */
-  int isNegative = FALSE;
-  int isExponentNegative = FALSE;
-  unsigned long integer = 0;
-  unsigned long fraction = 0;
-  unsigned long fracdiv = 1;
-  unsigned long exponent = 0;
-  double value = 0.0;
-
-  /* First try hex-floats */
-  if ((source[0] == '0') && ((source[1] == 'x') || (source[1] == 'X')))
-    {
-      source += 2;
-      while (isxdigit((int)*source))
-       {
-         integer *= 16;
-         integer += (isdigit((int)*source)
-                     ? (*source - '0')
-                     : 10 + (toupper((int)*source) - 'A'));
-         source++;
-       }
-      if (*source == '.')
-       {
-         source++;
-         while (isxdigit((int)*source))
-           {
-             fraction *= 16;
-             fraction += (isdigit((int)*source)
-                          ? (*source - '0')
-                          : 10 + (toupper((int)*source) - 'A'));
-             fracdiv *= 16;
-             source++;
-           }
-         if ((*source == 'p') || (*source == 'P'))
-           {
-             source++;
-             if ((*source == '+') || (*source == '-'))
-               {
-                 isExponentNegative = (*source == '-');
-                 source++;
-               }
-             while (isdigit((int)*source))
-               {
-                 exponent *= 10;
-                 exponent += (*source - '0');
-                 source++;
-               }
-           }
-       }
-    }
-  else /* Then try normal decimal floats */
-    {
-      isNegative = (*source == '-');
-      /* Skip sign */
-      if ((*source == '+') || (*source == '-'))
-       source++;
-
-      /* Integer part */
-      while (isdigit((int)*source))
-       {
-         integer *= 10;
-         integer += (*source - '0');
-         source++;
-       }
-
-      if (*source == '.')
-       {
-         source++; /* skip decimal point */
-         while (isdigit((int)*source))
-           {
-             fraction *= 10;
-             fraction += (*source - '0');
-             fracdiv *= 10;
-             source++;
-           }
-       }
-      if ((*source == 'e') || (*source == 'E'))
-       {
-         source++; /* Skip exponential indicator */
-         isExponentNegative = (*source == '-');
-         if ((*source == '+') || (*source == '-'))
-           source++;
-         while (isdigit((int)*source))
-           {
-             exponent *= 10;
-             exponent += (*source - '0');
-             source++;
-           }
-       }
-    }
-  
-  value = (double)integer;
-  if (fraction != 0)
-    {
-      value += (double)fraction / (double)fracdiv;
-    }
-  if (exponent != 0)
-    {
-      if (isExponentNegative)
-       value /= pow((double)10, (double)exponent);
-      else
-       value *= pow((double)10, (double)exponent);
-    }
-  if (isNegative)
-    value = -value;
-
-  if (endp)
-    *endp = source;
-  return value;
-#endif
-}
-
-/*************************************************************************
- * StrToFloat
- */
-float StrToFloat(const char *source, const char **endp)
-{
-#if defined(TRIO_C99)
-  return strtof(source, endp);
-#else
-  return (float)StrToDouble(source, endp);
-#endif
-}
-
-/*************************************************************************
- * StrToUpper
- */
-int StrToUpper(char *target)
-{
-  int i = 0;
-
-  assert(VALID(target));
-  
-  while (NIL != *target)
-    {
-      *target = toupper((int)*target);
-      target++;
-      i++;
-    }
-  return i;
-}
diff --git a/org.glite.lb-utils.trio/src/strio.h b/org.glite.lb-utils.trio/src/strio.h
deleted file mode 100644 (file)
index 68845a3..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- ************************************************************************/
-
-#ifndef TRIO_STRIO_H
-#define TRIO_STRIO_H
-
-#if !(defined(DEBUG) || defined(NDEBUG))
-# define NDEBUG
-#endif
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#ifndef STRIO_MALLOC
-# define STRIO_MALLOC(n) malloc(n)
-#endif
-#ifndef STRIO_FREE
-# define STRIO_FREE(x) free(x)
-#endif
-
-/*
- * StrAppend(target, source)
- * StrAppendMax(target, maxsize, source)
- *
- *   Append 'source' to 'target'
- *
- * target = StrAlloc(size)
- *
- *   Allocate a new string
- *
- * StrContains(target, substring)
- *
- *   Find out if the string 'substring' is
- *   contained in the string 'target'
- *
- * StrCopy(target, source)
- * StrCopyMax(target, maxsize, source)
- *
- *   Copy 'source' to 'target'
- *
- * target = StrDuplicate(source)
- * target = StrDuplicateMax(source, maxsize)
- *
- *   Allocate and copy 'source' to 'target'
- *
- * StrEqual(first, second)
- * StrEqualMax(first, maxsize, second)
- *
- *   Compare if 'first' is equal to 'second'.
- *   Case-independent.
- *
- * StrEqualCase(first, second)
- * StrEqualCaseMax(first, maxsize, second)
- *
- *   Compare if 'first' is equal to 'second'
- *   Case-dependent. Please note that the use of the
- *   word 'case' has the opposite meaning as that of
- *   strcasecmp().
- *
- * StrFormat(target, format, ...)
- * StrFormatMax(target, maxsize, format, ...)
- *
- *   Build 'target' according to 'format' and succesive
- *   arguments. This is equal to the sprintf() and
- *   snprintf() functions.
- *
- * StrFormatDate(target, format, ...)
- *
- * StrFree(target)
- *
- *   De-allocates a string
- *
- * StrHash(string, type)
- *
- *   Calculates the hash value of 'string' based on the
- *   'type'.
- *
- * StrIndex(target, character)
- * StrIndexLast(target, character)
- *
- *   Find the first/last occurrence of 'character' in
- *   'target'
- *
- * StrLength(target)
- *
- *   Return the length of 'target'
- *
- * StrMatch(string, pattern)
- * StrMatchCase(string, pattern)
- *
- *   Find 'pattern' within 'string'. 'pattern' may contain
- *   wildcards such as * (asterics) and ? (question mark)
- *   which matches zero or more characters and exactly
- *   on character respectively
- *
- * StrScan(source, format, ...)
- *
- *   Equal to sscanf()
- *
- * StrSubstring(target, substring)
- *
- *   Find the first occurrence of the string 'substring'
- *   within the string 'target'
- *
- * StrTokenize(target, list)
- *
- *   Split 'target' into the first token delimited by
- *   one of the characters in 'list'. If 'target' is
- *   NULL then next token will be returned.
- *
- * StrToUpper(target)
- *
- *   Convert all lower case characters in 'target' into
- *   upper case characters.
- */
-
-enum {
-  STRIO_HASH_NONE = 0,
-  STRIO_HASH_PLAIN,
-  STRIO_HASH_TWOSIGNED
-};
-
-#if !defined(DEBUG) || defined(__DECC)
-#define StrAlloc(n) (char *)STRIO_MALLOC(n)
-#define StrAppend(x,y) strcat((x), (y))
-#define StrContains(x,y) (0 != strstr((x), (y)))
-#define StrCopy(x,y) strcpy((x), (y))
-#define StrIndex(x,y) strchr((x), (y))
-#define StrIndexLast(x,y) strrchr((x), (y))
-#define StrFree(x) STRIO_FREE(x)
-#define StrLength(x) strlen((x))
-#define StrSubstring(x,y) strstr((x), (y))
-#define StrTokenize(x,y) strtok((x), (y))
-#define StrToLong(x,y,n) strtol((x), (y), (n))
-#define StrToUnsignedLong(x,y,n) strtoul((x), (y), (n))
-#else /* DEBUG */
- /*
-  * To be able to use these macros everywhere, including in
-  * if() sentences, the assertions are put first in a comma
-  * seperated list.
-  *
-  * Unfortunately the DECC compiler does not seem to like this
-  * so it will use the un-asserted functions above for the
-  * debugging case too.
-  */
-#define StrAlloc(n) \
-     (assert((n) > 0),\
-      (char *)STRIO_MALLOC(n))
-#define StrAppend(x,y) \
-     (assert((x) != NULL),\
-      assert((y) != NULL),\
-      strcat((x), (y)))
-#define StrContains(x,y) \
-     (assert((x) != NULL),\
-      assert((y) != NULL),\
-      (0 != strstr((x), (y))))
-#define StrCopy(x,y) \
-     (assert((x) != NULL),\
-      assert((y) != NULL),\
-      strcpy((x), (y)))
-#define StrIndex(x,c) \
-     (assert((x) != NULL),\
-      strchr((x), (c)))
-#define StrIndexLast(x,c) \
-     (assert((x) != NULL),\
-      strrchr((x), (c)))
-#define StrFree(x) \
-     (assert((x) != NULL),\
-      STRIO_FREE(x))
-#define StrLength(x) \
-     (assert((x) != NULL),\
-      strlen((x)))
-#define StrSubstring(x,y) \
-     (assert((x) != NULL),\
-      assert((y) != NULL),\
-      strstr((x), (y)))
-#define StrTokenize(x,y) \
-     (assert((y) != NULL),\
-      strtok((x), (y)))
-#define StrToLong(x,y,n) \
-     (assert((x) != NULL),\
-      assert((y) != NULL),\
-      assert((n) >= 2 && (n) <= 36),\
-      strtol((x), (y), (n)))
-#define StrToUnsignedLong(x,y,n) \
-     (assert((x) != NULL),\
-      assert((y) != NULL),\
-      assert((n) >= 2 && (n) <= 36),\
-      strtoul((x), (y), (n)))
-#endif /* DEBUG */
-
-char *StrAppendMax(char *target, size_t max, const char *source);
-char *StrCopyMax(char *target, size_t max, const char *source);
-char *StrDuplicate(const char *source);
-char *StrDuplicateMax(const char *source, size_t max);
-int StrEqual(const char *first, const char *second);
-int StrEqualCase(const char *first, const char *second);
-int StrEqualCaseMax(const char *first, size_t max, const char *second);
-int StrEqualLocale(const char *first, const char *second);
-int StrEqualMax(const char *first, size_t max, const char *second);
-const char *StrError(int);
-size_t StrFormatDateMax(char *target, size_t max, const char *format, const struct tm *datetime);
-unsigned long StrHash(const char *string, int type);
-int StrMatch(char *string, char *pattern);
-int StrMatchCase(char *string, char *pattern);
-size_t StrSpanFunction(char *source, int (*Function)(int));
-char *StrSubstringMax(const char *string, size_t max, const char *find);
-float StrToFloat(const char *source, const char **target);
-double StrToDouble(const char *source, const char **target);
-int StrToUpper(char *target);
-
-#endif /* TRIO_STRIO_H */
diff --git a/org.glite.lb-utils.trio/src/trio.c b/org.glite.lb-utils.trio/src/trio.c
deleted file mode 100644 (file)
index 6e4211e..0000000
+++ /dev/null
@@ -1,5706 +0,0 @@
-
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- *************************************************************************
- *
- * A note to trio contributors:
- *
- * Avoid heap allocation at all costs to ensure that the trio functions
- * are async-safe. The exceptions are the printf/fprintf functions, which
- * uses fputc, and the asprintf functions and the <alloc> modifier, which
- * by design are required to allocate form the heap.
- *
- ************************************************************************/
-
-/*
- * TODO:
- *  - Scan is probably too permissive about its modifiers.
- *  - C escapes in %#[] ?
- *  - C99 support has not been properly tested.
- *  - Multibyte characters (done for format parsing, except scan groups)
- *  - Complex numbers? (C99 _Complex)
- *  - Boolean values? (C99 _Bool)
- *  - C99 NaN(n-char-sequence) missing
- *  - Should we support the GNU %a alloc modifier? GNU has an ugly hack
- *    for %a, because C99 used %a for other purposes. If specified as
- *    %as or %a[ it is interpreted as the alloc modifier, otherwise as
- *    the C99 hex-float. This means that you cannot scan %as as a hex-float
- *    immediately followed by an 's'.
- *  - Scanning of collating symbols.
- */
-
-static const char rcsid[] = "@(#)$Id$";
-
-/*************************************************************************
- * Trio include files
- */
-#include "trio.h"
-#include "triop.h"
-#include "strio.h"
-
-#ifdef DATAGRID_EXTENSION
-#include "escape.h"
-#endif
-
-/*
- * Encode the error code and the position. This is decoded
- * with TRIO_ERROR_CODE and TRIO_ERROR_POSITION.
- */
-#if TRIO_ERRORS
-# define TRIO_ERROR_RETURN(x,y) (- ((x) + ((y) << 8)))
-#else
-# define TRIO_ERROR_RETURN(x,y) (-1)
-#endif
-
-
-/*************************************************************************
- * Platform and compiler support detection
- */
-#if defined(unix) || defined(__xlC__) || defined(_AIX) || defined(__QNX__)
-# define PLATFORM_UNIX
-#elif defined(AMIGA) && defined(__GNUC__)
-# define PLATFORM_UNIX
-#elif defined(WIN32) || defined(_WIN32) || defined(_MSC_VER)
-# define PLATFORM_WIN32
-# define TRIO_MSVC_5 1100
-#endif
-
-#if defined(__STDC__) && defined(__STDC_VERSION__)
-# if (__STDC_VERSION__ >= 199409L)
-#  define TRIO_COMPILER_SUPPORTS_ISO94
-# endif
-# if (__STDC_VERSION__ >= 199901L)
-#  define TRIO_COMPILER_SUPPORTS_C99
-# endif
-#endif
-
-#if defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)
-# define TRIO_COMPILER_SUPPORTS_UNIX98
-#endif
-
-#if defined(__STDC_ISO_10646__) || defined(MB_LEN_MAX) || defined(USE_MULTIBYTE) || TRIO_WIDECHAR
-# define TRIO_COMPILER_SUPPORTS_MULTIBYTE
-# if !defined(MB_LEN_MAX)
-#  define MB_LEN_MAX 6
-# endif
-#endif
-
-
-/*************************************************************************
- * Generic definitions
- */
-
-#if !(defined(DEBUG) || defined(NDEBUG))
-# define NDEBUG
-#endif
-#include <assert.h>
-#include <ctype.h>
-#if !defined(TRIO_COMPILER_SUPPORTS_C99) && !defined(isblank)
-# define isblank(x) (((x)==32) || ((x)==9))
-#endif
-#include <math.h>
-#include <limits.h>
-#include <float.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <errno.h>
-
-#ifndef NULL
-# define NULL 0
-#endif
-#define NIL ((char)0)
-#ifndef FALSE
-# define FALSE (1 == 0)
-# define TRUE (! FALSE)
-#endif
-#define BOOLEAN_T int
-
-/* mincore() can be used for debugging purposes */
-#define VALID(x) (NULL != (x))
-
-/* xlC crashes on log10(0) */
-#define guarded_log10(x) (((x) == 0.0) ? -HUGE_VAL : log10(x))
-#define guarded_log16(x) (guarded_log10(x) / log10(16.0))
-
-
-/*************************************************************************
- * Platform specific definitions
- */
-#if defined(PLATFORM_UNIX)
-# include <unistd.h>
-# include <signal.h>
-# include <locale.h>
-# define USE_LOCALE
-#endif /* PLATFORM_UNIX */
-#if defined(PLATFORM_WIN32)
-# include <io.h>
-# define read _read
-# define write _write
-#endif /* PLATFORM_WIN32 */
-
-#if TRIO_WIDECHAR
-# if defined(TRIO_COMPILER_SUPPORTS_ISO94)
-#  include <wchar.h>
-#  include <wctype.h>
-# else
-typedef char wchar_t;
-typedef int wint_t;
-#  define WEOF EOF
-#  define iswalnum(x) isalnum(x)
-#  define iswalpha(x) isalpha(x)
-#  define iswblank(x) isblank(x)
-#  define iswcntrl(x) iscntrl(x)
-#  define iswdigit(x) isdigit(x)
-#  define iswgraph(x) isgraph(x)
-#  define iswlower(x) islower(x)
-#  define iswprint(x) isprint(x)
-#  define iswpunct(x) ispunct(x)
-#  define iswspace(x) isspace(x)
-#  define iswupper(x) isupper(x)
-#  define iswxdigit(x) isxdigit(x)
-# endif
-#endif
-
-
-/*************************************************************************
- * Compiler dependent definitions
- */
-
-/* Support for long long */
-#ifndef __cplusplus
-# if !defined(USE_LONGLONG)
-#  if defined(__GNUC__) && !defined(__STRICT_ANSI__)
-#   define USE_LONGLONG
-#  elif defined(__SUNPRO_C)
-#   define USE_LONGLONG
-#  elif defined(_LONG_LONG) || defined(_LONGLONG)
-#   define USE_LONGLONG
-#  endif
-# endif
-#endif
-
-/* The extra long numbers */
-#if defined(USE_LONGLONG)
-typedef signed long long int trio_longlong_t;
-typedef unsigned long long int trio_ulonglong_t;
-#elif defined(_MSC_VER)
-# if (_MSC_VER >= TRIO_MSVC_5)
-typedef signed __int64 trio_longlong_t;
-typedef unsigned __int64 trio_ulonglong_t;
-# else
-typedef signed long int trio_longlong_t;
-typedef unsigned long int trio_ulonglong_t;
-# endif
-#else
-typedef signed long int trio_longlong_t;
-typedef unsigned long int trio_ulonglong_t;
-#endif
-
-/* Maximal and fixed integer types */
-#if defined(TRIO_COMPILER_SUPPORTS_C99)
-# include <stdint.h>
-typedef intmax_t trio_intmax_t;
-typedef uintmax_t trio_uintmax_t;
-typedef int8_t trio_int8_t;
-typedef int16_t trio_int16_t;
-typedef int32_t trio_int32_t;
-typedef int64_t trio_int64_t;
-#elif defined(TRIO_COMPILER_SUPPORTS_UNIX98)
-# include <inttypes.h>
-typedef intmax_t trio_intmax_t;
-typedef uintmax_t trio_uintmax_t;
-typedef int8_t trio_int8_t;
-typedef int16_t trio_int16_t;
-typedef int32_t trio_int32_t;
-typedef int64_t trio_int64_t;
-#elif defined(_MSC_VER) && (_MSC_VER >= TRIO_MSVC_5)
-typedef trio_longlong_t trio_intmax_t;
-typedef trio_ulonglong_t trio_uintmax_t;
-typedef __int8 trio_int8_t;
-typedef __int16 trio_int16_t;
-typedef __int32 trio_int32_t;
-typedef __int64 trio_int64_t;
-#else
-typedef trio_longlong_t trio_intmax_t;
-typedef trio_ulonglong_t trio_uintmax_t;
-# if defined(TRIO_INT8_T)
-typedef TRIO_INT8_T trio_int8_t;
-# else
-typedef signed char trio_int8_t;
-# endif
-# if defined(TRIO_INT16_T)
-typedef TRIO_INT16_T trio_int16_t;
-# else
-typedef signed short trio_int16_t;
-# endif
-# if defined(TRIO_INT32_T)
-typedef TRIO_INT32_T trio_int32_t;
-# else
-typedef signed int trio_int32_t;
-# endif
-# if defined(TRIO_INT64_T)
-typedef TRIO_INT64_T trio_int64_t;
-# else
-typedef trio_longlong_t trio_int64_t;
-# endif
-#endif
-
-
-/*************************************************************************
- * Internal definitions
- */
-
-/* Long double sizes */
-#ifdef LDBL_DIG
-# define MAX_MANTISSA_DIGITS LDBL_DIG
-# define MAX_EXPONENT_DIGITS 4
-#else
-# define MAX_MANTISSA_DIGITS DBL_DIG
-# define MAX_EXPONENT_DIGITS 3
-#endif
-
-/* The maximal number of digits is for base 2 */
-#define MAX_CHARS_IN(x) (sizeof(x) * CHAR_BIT)
-/* The width of a pointer. The number of bits in a hex digit is 4 */
-#define POINTER_WIDTH ((sizeof("0x") - 1) + sizeof(void *) * CHAR_BIT / 4)
-
-/* Infinite and Not-A-Number for floating-point */
-#define INFINITE_LOWER "inf"
-#define INFINITE_UPPER "INF"
-#define LONG_INFINITE_LOWER "infinite"
-#define LONG_INFINITE_UPPER "INFINITE"
-#define NAN_LOWER "nan"
-#define NAN_UPPER "NAN"
-
-/* Various constants */
-enum {
-  TYPE_PRINT = 1,
-  TYPE_SCAN  = 2,
-
-  /* Flags. Use maximum 32 */
-  FLAGS_NEW                 = 0,
-  FLAGS_STICKY              = 1,
-  FLAGS_SPACE               = 2 * FLAGS_STICKY,
-  FLAGS_SHOWSIGN            = 2 * FLAGS_SPACE,
-  FLAGS_LEFTADJUST          = 2 * FLAGS_SHOWSIGN,
-  FLAGS_ALTERNATIVE         = 2 * FLAGS_LEFTADJUST,
-  FLAGS_SHORT               = 2 * FLAGS_ALTERNATIVE,
-  FLAGS_SHORTSHORT          = 2 * FLAGS_SHORT,
-  FLAGS_LONG                = 2 * FLAGS_SHORTSHORT,
-  FLAGS_QUAD                = 2 * FLAGS_LONG,
-  FLAGS_LONGDOUBLE          = 2 * FLAGS_QUAD,
-  FLAGS_SIZE_T              = 2 * FLAGS_LONGDOUBLE,
-  FLAGS_PTRDIFF_T           = 2 * FLAGS_SIZE_T,
-  FLAGS_INTMAX_T            = 2 * FLAGS_PTRDIFF_T,
-  FLAGS_NILPADDING          = 2 * FLAGS_INTMAX_T,
-  FLAGS_UNSIGNED            = 2 * FLAGS_NILPADDING,
-  FLAGS_UPPER               = 2 * FLAGS_UNSIGNED,
-  FLAGS_WIDTH               = 2 * FLAGS_UPPER,
-  FLAGS_WIDTH_PARAMETER     = 2 * FLAGS_WIDTH,
-  FLAGS_PRECISION           = 2 * FLAGS_WIDTH_PARAMETER,
-  FLAGS_PRECISION_PARAMETER = 2 * FLAGS_PRECISION,
-  FLAGS_BASE                = 2 * FLAGS_PRECISION_PARAMETER,
-  FLAGS_BASE_PARAMETER      = 2 * FLAGS_BASE,
-  FLAGS_FLOAT_E             = 2 * FLAGS_BASE_PARAMETER,
-  FLAGS_FLOAT_G             = 2 * FLAGS_FLOAT_E,
-  FLAGS_QUOTE               = 2 * FLAGS_FLOAT_G,
-  FLAGS_WIDECHAR            = 2 * FLAGS_QUOTE,
-  FLAGS_ALLOC               = 2 * FLAGS_WIDECHAR,
-  FLAGS_IGNORE              = 2 * FLAGS_ALLOC,
-  FLAGS_IGNORE_PARAMETER    = 2 * FLAGS_IGNORE,
-  FLAGS_VARSIZE_PARAMETER   = 2 * FLAGS_IGNORE_PARAMETER,
-  FLAGS_FIXED_SIZE          = 2 * FLAGS_VARSIZE_PARAMETER,
-  /* Reused flags */
-  FLAGS_EXCLUDE             = FLAGS_SHORT,
-  FLAGS_USER_DEFINED        = FLAGS_IGNORE,
-  /* Compounded flags */
-  FLAGS_ALL_VARSIZES        = FLAGS_LONG | FLAGS_QUAD | FLAGS_INTMAX_T | FLAGS_PTRDIFF_T | FLAGS_SIZE_T,
-  FLAGS_ALL_SIZES           = FLAGS_ALL_VARSIZES | FLAGS_SHORTSHORT | FLAGS_SHORT,
-
-  NO_POSITION  = -1,
-  NO_WIDTH     =  0,
-  NO_PRECISION = -1,
-  NO_SIZE      = -1,
-
-  NO_BASE      = -1,
-  MIN_BASE     =  2,
-  MAX_BASE     = 36,
-  BASE_BINARY  =  2,
-  BASE_OCTAL   =  8,
-  BASE_DECIMAL = 10,
-  BASE_HEX     = 16,
-
-  /* Maximal number of allowed parameters */
-  MAX_PARAMETERS = 64,
-  /* Maximal number of characters in class */
-  MAX_CHARACTER_CLASS = UCHAR_MAX,
-
-  /* Maximal string lengths for user-defined specifiers */
-  MAX_USER_NAME = 64,
-  MAX_USER_DATA = 256,
-  
-  /* Maximal length of locale separator strings */
-  MAX_LOCALE_SEPARATOR_LENGTH = MB_LEN_MAX,
-  /* Maximal number of integers in grouping */
-  MAX_LOCALE_GROUPS = 64
-};
-
-#define NO_GROUPING ((int)CHAR_MAX)
-
-/* Fundamental formatting parameter types */
-#define FORMAT_UNKNOWN   0
-#define FORMAT_INT       1
-#define FORMAT_DOUBLE    2
-#define FORMAT_CHAR      3
-#define FORMAT_STRING    4
-#define FORMAT_POINTER   5
-#define FORMAT_COUNT     6
-#define FORMAT_PARAMETER 7
-#define FORMAT_GROUP     8
-#if TRIO_GNU
-# define FORMAT_ERRNO    9
-#endif
-#if TRIO_EXTENSION
-# define FORMAT_USER_DEFINED 10
-#endif
-
-/* Character constants */
-#define CHAR_IDENTIFIER '%'
-#define CHAR_BACKSLASH '\\'
-#define CHAR_QUOTE '\"'
-#define CHAR_ADJUST ' '
-
-/* Character class expressions */
-#define CLASS_ALNUM ":alnum:"
-#define CLASS_ALPHA ":alpha:"
-#define CLASS_CNTRL ":cntrl:"
-#define CLASS_DIGIT ":digit:"
-#define CLASS_GRAPH ":graph:"
-#define CLASS_LOWER ":lower:"
-#define CLASS_PRINT ":print:"
-#define CLASS_PUNCT ":punct:"
-#define CLASS_SPACE ":space:"
-#define CLASS_UPPER ":upper:"
-#define CLASS_XDIGIT ":xdigit:"
-
-/*
- * SPECIFIERS:
- *
- *
- * a  Hex-float
- * A  Hex-float
- * c  Character
- * C  Widechar character (wint_t)
- * d  Decimal
- * e  Float
- * E  Float
- * F  Float
- * F  Float
- * g  Float
- * G  Float
- * i  Integer
- * m  Error message
- * n  Count
- * o  Octal
- * p  Pointer
- * s  String
- * S  Widechar string (wchar_t *)
- * u  Unsigned
- * x  Hex
- * X  Hex
- * [] Group
- * <> User-defined
- *
- * Reserved:
- *
- * D  Binary Coded Decimal %D(length,precision) (OS/390)
- */
-#define SPECIFIER_CHAR 'c'
-#define SPECIFIER_STRING 's'
-#define SPECIFIER_DECIMAL 'd'
-#define SPECIFIER_INTEGER 'i'
-#define SPECIFIER_UNSIGNED 'u'
-#define SPECIFIER_OCTAL 'o'
-#define SPECIFIER_HEX 'x'
-#define SPECIFIER_HEX_UPPER 'X'
-#define SPECIFIER_FLOAT_E 'e'
-#define SPECIFIER_FLOAT_E_UPPER 'E'
-#define SPECIFIER_FLOAT_F 'f'
-#define SPECIFIER_FLOAT_F_UPPER 'F'
-#define SPECIFIER_FLOAT_G 'g'
-#define SPECIFIER_FLOAT_G_UPPER 'G'
-#define SPECIFIER_POINTER 'p'
-#define SPECIFIER_GROUP '['
-#define SPECIFIER_UNGROUP ']'
-#define SPECIFIER_COUNT 'n'
-#if TRIO_UNIX98
-# define SPECIFIER_CHAR_UPPER 'C'
-# define SPECIFIER_STRING_UPPER 'S'
-#endif
-#if TRIO_C99
-# define SPECIFIER_HEXFLOAT 'a'
-# define SPECIFIER_HEXFLOAT_UPPER 'A'
-#endif
-#if TRIO_GNU
-# define SPECIFIER_ERRNO 'm'
-#endif
-#if TRIO_EXTENSION
-# define SPECIFIER_BINARY 'b'
-# define SPECIFIER_BINARY_UPPER 'B'
-# define SPECIFIER_USER_DEFINED_BEGIN '<'
-# define SPECIFIER_USER_DEFINED_END '>'
-# define SPECIFIER_USER_DEFINED_SEPARATOR ':'
-#endif
-
-/*
- * QUALIFIERS:
- *
- *
- * Numbers = d,i,o,u,x,X
- * Float = a,A,e,E,f,F,g,G
- * String = s
- * Char = c
- *
- *
- * 9$ Position
- *      Use the 9th parameter. 9 can be any number between 1 and
- *      the maximal argument
- *
- * 9 Width
- *      Set width to 9. 9 can be any number, but must not be postfixed
- *      by '$'
- *
- * h  Short
- *    Numbers:
- *      (unsigned) short int
- *
- * hh Short short
- *    Numbers:
- *      (unsigned) char
- *
- * l  Long
- *    Numbers:
- *      (unsigned) long int
- *    String:
- *      as the S specifier
- *    Char:
- *      as the C specifier
- *
- * ll Long Long
- *    Numbers:
- *      (unsigned) long long int
- *
- * L  Long Double
- *    Float
- *      long double
- *
- * #  Alternative
- *    Float:
- *      Decimal-point is always present
- *    String:
- *      non-printable characters are handled as \number
- *
- *    Spacing
- *
- * +  Sign
- *
- * -  Alignment
- *
- * .  Precision
- *
- * *  Parameter
- *    print: use parameter
- *    scan: no parameter (ignore)
- *
- * q  Quad
- *
- * Z  size_t
- *
- * w  Widechar
- *
- * '  Thousands/quote
- *    Numbers:
- *      Integer part grouped in thousands
- *    Binary numbers:
- *      Number grouped in nibbles (4 bits)
- *    String:
- *      Quoted string
- *
- * j  intmax_t
- * t  prtdiff_t
- * z  size_t
- *
- * !  Sticky
- * @  Parameter (for both print and scan)
- *
- * I  n-bit Integer
- *    Numbers:
- *      The following options exists
- *        I8  = 8-bit integer
- *        I16 = 16-bit integer
- *        I32 = 32-bit integer
- *        I64 = 64-bit integer
- */
-#define QUALIFIER_POSITION '$'
-#define QUALIFIER_SHORT 'h'
-#define QUALIFIER_LONG 'l'
-#define QUALIFIER_LONG_UPPER 'L'
-#define QUALIFIER_ALTERNATIVE '#'
-#define QUALIFIER_SPACE ' '
-#define QUALIFIER_PLUS '+'
-#define QUALIFIER_MINUS '-'
-#define QUALIFIER_DOT '.'
-#define QUALIFIER_STAR '*'
-#define QUALIFIER_CIRCUMFLEX '^'
-#if TRIO_C99
-# define QUALIFIER_SIZE_T 'z'
-# define QUALIFIER_PTRDIFF_T 't'
-# define QUALIFIER_INTMAX_T 'j'
-#endif
-#if TRIO_BSD || TRIO_GNU
-# define QUALIFIER_QUAD 'q'
-#endif
-#if TRIO_GNU
-# define QUALIFIER_SIZE_T_UPPER 'Z'
-#endif
-#if TRIO_MISC
-# define QUALIFIER_WIDECHAR 'w'
-#endif
-#if TRIO_MICROSOFT
-# define QUALIFIER_FIXED_SIZE 'I'
-#endif
-#if TRIO_EXTENSION
-# define QUALIFIER_QUOTE '\''
-# define QUALIFIER_STICKY '!'
-# define QUALIFIER_VARSIZE '&' /* This should remain undocumented */
-# define QUALIFIER_PARAM '@' /* Experimental */
-# define QUALIFIER_COLON ':' /* For scanlists */
-# define QUALIFIER_EQUAL '=' /* For scanlists */
-#endif
-#if DATAGRID_EXTENSION
-# define QUALIFIER_ESCAPE '|'
-#endif
-
-
-/*************************************************************************
- * Internal structures
- */
-
-/* Parameters */
-typedef struct {
-  int type;
-  unsigned long flags;
-  int width;
-  int precision;
-  int base;
-  int varsize;
-#ifdef QUALIFIER_ESCAPE
-  enum dg_escape { ESCAPE_NONE, ESCAPE_ULM, ESCAPE_XML, ESCAPE_SQL } escape;
-#endif
-  int indexAfterSpecifier;
-  union {
-    char *string;
-#if TRIO_WIDECHAR
-    wchar_t *wstring;
-#endif
-    void *pointer;
-    union {
-      trio_uintmax_t as_signed;
-      trio_intmax_t as_unsigned;
-    } number;
-    double doubleNumber;
-    double *doublePointer;
-    long double longdoubleNumber;
-    long double *longdoublePointer;
-    int errorNumber;
-  } data;
-  /* For the user-defined specifier */
-  char user_name[MAX_USER_NAME];
-  char user_data[MAX_USER_DATA];
-} parameter_T;
-
-/* General trio "class" */
-typedef struct _trio_T {
-  void *location;
-  void (*OutStream)(struct _trio_T *, int);
-  void (*InStream)(struct _trio_T *, int *);
-  /*
-   * The number of characters that would have been written/read if
-   * there had been sufficient space.
-   */
-  int processed;
-  /*
-   * The number of characters that are actually written/read.
-   * Processed and committed with only differ for the *nprintf
-   * and *nscanf functions.
-   */
-  int committed;
-  int max;
-  int current;
-} trio_T;
-
-/* References (for user-defined callbacks) */
-typedef struct _reference_T {
-  trio_T *data;
-  parameter_T *parameter;
-} reference_T;
-
-/* Registered entries (for user-defined callbacks) */
-typedef struct _userdef_T {
-  struct _userdef_T *next;
-  trio_callback_t callback;
-  char *name;
-} userdef_T;
-
-
-/*************************************************************************
- * Internal variables
- */
-
-static const char null[] = "(nil)";
-
-#if defined(USE_LOCALE)
-static struct lconv *internalLocaleValues = NULL;
-#endif
-
-/*
- * UNIX98 says "in a locale where the radix character is not defined,
- * the radix character defaults to a period (.)"
- */
-static char internalDecimalPoint[MAX_LOCALE_SEPARATOR_LENGTH + 1] = ".";
-static char internalThousandSeparator[MAX_LOCALE_SEPARATOR_LENGTH + 1] = ",";
-static char internalGrouping[MAX_LOCALE_GROUPS] = { (char)NO_GROUPING };
-
-static const char internalDigitsLower[] = "0123456789abcdefghijklmnopqrstuvwxyz";
-static const char internalDigitsUpper[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-static BOOLEAN_T internalDigitsUnconverted = TRUE;
-static int internalDigitArray[128];
-#if TRIO_EXTENSION
-static BOOLEAN_T internalCollationUnconverted = TRUE;
-static char internalCollationArray[MAX_CHARACTER_CLASS][MAX_CHARACTER_CLASS];
-#endif
-
-static volatile trio_callback_t internalEnterCriticalRegion = NULL;
-static volatile trio_callback_t internalLeaveCriticalRegion = NULL;
-static userdef_T *internalUserDef = NULL;
-
-
-/*************************************************************************
- * trio_strerror [public]
- */
-const char *trio_strerror(int errorcode)
-{
-  /* Textual versions of the error codes */
-  switch (TRIO_ERROR_CODE(errorcode))
-    {
-    case TRIO_EOF:
-      return "End of file";
-    case TRIO_EINVAL:
-      return "Invalid argument";
-    case TRIO_ETOOMANY:
-      return "Too many arguments";
-    case TRIO_EDBLREF:
-      return "Double reference";
-    case TRIO_EGAP:
-      return "Reference gap";
-    case TRIO_ENOMEM:
-      return "Out of memory";
-    case TRIO_ERANGE:
-      return "Invalid range";
-    default:
-      return "Unknown";
-    }
-}
-
-/*************************************************************************
- * TrioIsQualifier [private]
- *
- * Description:
- *  Remember to add all new qualifiers to this function.
- *  QUALIFIER_POSITION must not be added.
- */
-static BOOLEAN_T
-TrioIsQualifier(const char ch)
-{
-  /* QUALIFIER_POSITION is not included */
-  switch (ch)
-    {
-    case '0': case '1': case '2': case '3': case '4':
-    case '5': case '6': case '7': case '8': case '9':
-    case QUALIFIER_PLUS:
-    case QUALIFIER_MINUS:
-    case QUALIFIER_SPACE:
-    case QUALIFIER_DOT:
-    case QUALIFIER_STAR:
-    case QUALIFIER_ALTERNATIVE:
-    case QUALIFIER_SHORT:
-    case QUALIFIER_LONG:
-    case QUALIFIER_LONG_UPPER:
-    case QUALIFIER_CIRCUMFLEX:
-#if defined(QUALIFIER_SIZE_T)
-    case QUALIFIER_SIZE_T:
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
-    case QUALIFIER_PTRDIFF_T:
-#endif
-#if defined(QUALIFIER_INTMAX_T)
-    case QUALIFIER_INTMAX_T:
-#endif
-#if defined(QUALIFIER_QUAD)
-    case QUALIFIER_QUAD:
-#endif
-#if defined(QUALIFIER_SIZE_T_UPPER)
-    case QUALIFIER_SIZE_T_UPPER:
-#endif
-#if defined(QUALIFIER_WIDECHAR)
-    case QUALIFIER_WIDECHAR:
-#endif
-#if defined(QUALIFIER_QUOTE)
-    case QUALIFIER_QUOTE:
-#endif
-#if defined(QUALIFIER_STICKY)
-    case QUALIFIER_STICKY:
-#endif
-#if defined(QUALIFIER_VARSIZE)
-    case QUALIFIER_VARSIZE:
-#endif
-#if defined(QUALIFIER_PARAM)
-    case QUALIFIER_PARAM:
-#endif
-#if defined(QUALIFIER_FIXED_SIZE)
-    case QUALIFIER_FIXED_SIZE:
-#endif
-#ifdef QUALIFIER_ESCAPE
-    case QUALIFIER_ESCAPE:
-#endif
-      return TRUE;
-    default:
-      return FALSE;
-    }
-}
-
-/*************************************************************************
- * TrioGenerateNan [private]
- *
- * Calculating NaN portably is difficult. Some compilers will emit
- * warnings about divide by zero, and others will simply fail to
- * generate a NaN.
- */
-static double
-TrioGenerateNaN(void)
-{
-#if defined(TRIO_COMPILER_SUPPORTS_C99)
-  return nan(NULL);
-#elif defined(DBL_QNAN)
-  return DBL_QNAN;
-#elif defined(PLATFORM_UNIX)
-  double value;
-  void (*signal_handler)(int);
-  
-  signal_handler = signal(SIGFPE, SIG_IGN);
-  value = 0.0 / 0.0;
-  signal(SIGFPE, signal_handler);
-  return value;
-#else
-  return 0.0 / 0.0;
-#endif
-}
-
-/*************************************************************************
- * TrioIsNan [private]
- */
-static int
-TrioIsNan(double number)
-{
-#ifdef isnan
-  /* C99 defines isnan() as a macro */
-  return isnan(number);
-#else
-  double integral, fraction;
-  
-  return (/* NaN is the only number which does not compare to itself */
-         (number != number) ||
-         /* Fallback solution if NaN compares to NaN */
-         ((number != 0.0) &&
-          (fraction = modf(number, &integral),
-           integral == fraction)));
-#endif
-}
-
-/*************************************************************************
- * TrioIsInfinite [private]
- */
-static int
-TrioIsInfinite(double number)
-{
-#ifdef isinf
-  /* C99 defines isinf() as a macro */
-  return isinf(number);
-#else
-  return ((number == HUGE_VAL) ? 1 : ((number == -HUGE_VAL) ? -1 : 0));
-#endif
-}
-
-/*************************************************************************
- * TrioSetLocale [private]
- */
-#if defined(USE_LOCALE)
-static void
-TrioSetLocale(void)
-{
-  internalLocaleValues = (struct lconv *)localeconv();
-  if (internalLocaleValues)
-    {
-      if ((internalLocaleValues->decimal_point) &&
-         (internalLocaleValues->decimal_point[0] != NIL))
-       {
-         StrCopyMax(internalDecimalPoint,
-                    sizeof(internalDecimalPoint),
-                    internalLocaleValues->decimal_point);
-       }
-      if ((internalLocaleValues->thousands_sep) &&
-         (internalLocaleValues->thousands_sep[0] != NIL))
-       {
-         StrCopyMax(internalThousandSeparator,
-                    sizeof(internalThousandSeparator),
-                    internalLocaleValues->thousands_sep);
-       }
-      if ((internalLocaleValues->grouping) &&
-         (internalLocaleValues->grouping[0] != NIL))
-       {
-         StrCopyMax(internalGrouping,
-                    sizeof(internalGrouping),
-                    internalLocaleValues->grouping);
-       }
-    }
-}
-#endif /* defined(USE_LOCALE) */
-
-/*************************************************************************
- * TrioGetPosition [private]
- *
- * Get the %n$ position.
- */
-static int
-TrioGetPosition(const char *format,
-               int *indexPointer)
-{
-  char *tmpformat;
-  int number = 0;
-  int index = *indexPointer;
-
-  number = (int)StrToLong(&format[index], &tmpformat, BASE_DECIMAL);
-  index = (int)(tmpformat - format);
-  if ((number != 0) && (QUALIFIER_POSITION == format[index++]))
-    {
-      *indexPointer = index;
-      /*
-       * number is decreased by 1, because n$ starts from 1, whereas
-       * the array it is indexing starts from 0.
-       */
-      return number - 1;
-    }
-  return NO_POSITION;
-}
-
-/*************************************************************************
- * TrioFindNamespace [private]
- *
- * Find registered user-defined specifier.
- * The prev argument is used for optimisation only.
- */
-static userdef_T *
-TrioFindNamespace(const char *name, userdef_T **prev)
-{
-  userdef_T *def;
-  
-  if (internalEnterCriticalRegion)
-    (void)internalEnterCriticalRegion(NULL);
-  
-  for (def = internalUserDef; def; def = def->next)
-    {
-      /* Case-sensitive string comparison */
-      if (StrEqualCase(def->name, name))
-       break;
-      
-      if (prev)
-       *prev = def;
-    }
-  
-  if (internalLeaveCriticalRegion)
-    (void)internalLeaveCriticalRegion(NULL);
-  
-  return def;
-}
-
-/*************************************************************************
- * TrioPreprocess [private]
- *
- * Description:
- *  Parse the format string
- */
-static int
-TrioPreprocess(int type,
-              const char *format,
-              parameter_T *parameters,
-              va_list arglist,
-              void **argarray)
-{
-#if TRIO_ERRORS
-  /* Count the number of times a parameter is referenced */
-  unsigned short usedEntries[MAX_PARAMETERS];
-#endif
-  /* Parameter counters */
-  int parameterPosition;
-  int currentParam;
-  int maxParam = -1;
-  /* Utility variables */
-  unsigned long flags;
-  int width;
-  int precision;
-  int varsize;
-#ifdef QUALIFIER_ESCAPE
-  enum dg_escape escape;
-#endif
-  int base;
-  int index;  /* Index into formatting string */
-  int dots;  /* Count number of dots in modifier part */
-  BOOLEAN_T positional;  /* Does the specifier have a positional? */
-  BOOLEAN_T got_sticky = FALSE;  /* Are there any sticky modifiers at all? */
-  /*
-   * indices specifies the order in which the parameters must be
-   * read from the va_args (this is necessary to handle positionals)
-   */
-  int indices[MAX_PARAMETERS];
-  int pos = 0;
-  /* Various variables */
-  char ch;
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  int charlen;
-#endif
-  int i = -1;
-  int num;
-  char *tmpformat;
-
-
-#if TRIO_ERRORS
-  /*
-   * The 'parameters' array is not initialized, but we need to
-   * know which entries we have used.
-   */
-  memset(usedEntries, 0, sizeof(usedEntries));
-#endif
-
-  index = 0;
-  parameterPosition = 0;
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  mblen(NULL, 0);
-#endif
-  
-  while (format[index])
-    {
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-      if (! isascii(format[index]))
-       {
-         /*
-          * Multibyte characters cannot be legal specifiers or
-          * modifiers, so we skip over them.
-          */
-         charlen = mblen(&format[index], MB_LEN_MAX);
-         index += (charlen > 0) ? charlen : 1;
-         continue; /* while */
-       }
-#endif /* TRIO_COMPILER_SUPPORTS_MULTIBYTE */
-      if (CHAR_IDENTIFIER == format[index++])
-       {
-         if (CHAR_IDENTIFIER == format[index])
-           {
-             index++;
-             continue; /* while */
-           }
-
-         flags = FLAGS_NEW;
-         dots = 0;
-         currentParam = TrioGetPosition(format, &index);
-         positional = (NO_POSITION != currentParam);
-         if (!positional)
-           {
-             /* We have no positional, get the next counter */
-             currentParam = parameterPosition;
-           }
-          if(currentParam >= MAX_PARAMETERS)
-           {
-             /* Bail out completely to make the error more obvious */
-             return TRIO_ERROR_RETURN(TRIO_ETOOMANY, index);
-           }
-
-         if (currentParam > maxParam)
-           maxParam = currentParam;
-
-         /* Default values */
-         width = NO_WIDTH;
-         precision = NO_PRECISION;
-         base = NO_BASE;
-         varsize = NO_SIZE;
-#ifdef QUALIFIER_ESCAPE
-         escape = ESCAPE_NONE;
-#endif
-
-         while (TrioIsQualifier(format[index]))
-           {
-             ch = format[index++];
-
-             switch (ch)
-               {
-               case QUALIFIER_SPACE:
-                 flags |= FLAGS_SPACE;
-                 break;
-
-               case QUALIFIER_PLUS:
-                 flags |= FLAGS_SHOWSIGN;
-                 break;
-
-               case QUALIFIER_MINUS:
-                 flags |= FLAGS_LEFTADJUST;
-                 flags &= ~FLAGS_NILPADDING;
-                 break;
-
-               case QUALIFIER_ALTERNATIVE:
-                 flags |= FLAGS_ALTERNATIVE;
-                 break;
-
-               case QUALIFIER_DOT:
-                 if (dots == 0) /* Precision */
-                   {
-                     dots++;
-
-                     /* Skip if no precision */
-                     if (QUALIFIER_DOT == format[index])
-                       break;
-                     
-                     /* After the first dot we have the precision */
-                     flags |= FLAGS_PRECISION;
-                     if ((QUALIFIER_STAR == format[index]) ||
-                         (QUALIFIER_PARAM == format[index]))
-                       {
-                         index++;
-                         flags |= FLAGS_PRECISION_PARAMETER;
-
-                         precision = TrioGetPosition(format, &index);
-                         if (precision == NO_POSITION)
-                           {
-                             parameterPosition++;
-                             if (positional)
-                               precision = parameterPosition;
-                             else
-                               {
-                                 precision = currentParam;
-                                 currentParam = precision + 1;
-                               }
-                           }
-                         else
-                           {
-                             if (! positional)
-                               currentParam = precision + 1;
-                             if (width > maxParam)
-                               maxParam = precision;
-                           }
-                         if (currentParam > maxParam)
-                           maxParam = currentParam;
-                       }
-                     else
-                       {
-                         precision = StrToLong(&format[index], &tmpformat, BASE_DECIMAL);
-                         index = (int)(tmpformat - format);
-                       }
-                   }
-                 else if (dots == 1) /* Base */
-                   {
-                     dots++;
-                     
-                     /* After the second dot we have the base */
-                     flags |= FLAGS_BASE;
-                     if ((QUALIFIER_STAR == format[index]) ||
-                         (QUALIFIER_PARAM == format[index]))
-                       {
-                         index++;
-                         flags |= FLAGS_BASE_PARAMETER;
-                         base = TrioGetPosition(format, &index);
-                         if (base == NO_POSITION)
-                           {
-                             parameterPosition++;
-                             if (positional)
-                               base = parameterPosition;
-                             else
-                               {
-                                 base = currentParam;
-                                 currentParam = base + 1;
-                               }
-                           }
-                         else
-                           {
-                             if (! positional)
-                               currentParam = base + 1;
-                             if (base > maxParam)
-                               maxParam = base;
-                           }
-                         if (currentParam > maxParam)
-                           maxParam = currentParam;
-                       }
-                     else
-                       {
-                         base = StrToLong(&format[index], &tmpformat, BASE_DECIMAL);
-                         if (base > MAX_BASE)
-                           return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-                         index = (int)(tmpformat - format);
-                       }
-                   }
-                 else
-                   {
-                     return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-                   }
-                 break; /* QUALIFIER_DOT */
-
-               case QUALIFIER_PARAM:
-                 type = TYPE_PRINT;
-                 /* FALLTHROUGH */
-               case QUALIFIER_STAR:
-                 /* This has different meanings for print and scan */
-                 if (TYPE_PRINT == type)
-                   {
-                     /* Read with from parameter */
-                     flags |= (FLAGS_WIDTH | FLAGS_WIDTH_PARAMETER);
-                     width = TrioGetPosition(format, &index);
-                     if (width == NO_POSITION)
-                       {
-                         parameterPosition++;
-                         if (positional)
-                           width = parameterPosition;
-                         else
-                           {
-                             width = currentParam;
-                             currentParam = width + 1;
-                           }
-                       }
-                     else
-                       {
-                         if (! positional)
-                           currentParam = width + 1;
-                         if (width > maxParam)
-                           maxParam = width;
-                       }
-                     if (currentParam > maxParam)
-                       maxParam = currentParam;
-                   }
-                 else
-                   {
-                     /* Scan, but do not store result */
-                     flags |= FLAGS_IGNORE;
-                   }
-
-                 break; /* QUALIFIER_STAR */
-
-               case '0':
-                 if (! (flags & FLAGS_LEFTADJUST))
-                   flags |= FLAGS_NILPADDING;
-                 /* FALLTHROUGH */
-               case '1': case '2': case '3': case '4':
-               case '5': case '6': case '7': case '8': case '9':
-                 flags |= FLAGS_WIDTH;
-                 /* &format[index - 1] is used to "rewind" the read
-                  * character from format
-                  */
-                 width = StrToLong(&format[index - 1], &tmpformat, BASE_DECIMAL);
-                 index = (int)(tmpformat - format);
-                 break;
-
-               case QUALIFIER_SHORT:
-                 if (flags & FLAGS_SHORTSHORT)
-                   return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-                 else if (flags & FLAGS_SHORT)
-                   flags |= FLAGS_SHORTSHORT;
-                 else
-                   flags |= FLAGS_SHORT;
-                 break;
-
-               case QUALIFIER_LONG:
-                 if (flags & FLAGS_QUAD)
-                   return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-                 else if (flags & FLAGS_LONG)
-                   flags |= FLAGS_QUAD;
-                 else
-                   flags |= FLAGS_LONG;
-                 break;
-
-               case QUALIFIER_LONG_UPPER:
-                 flags |= FLAGS_LONGDOUBLE;
-                 break;
-
-#if defined(QUALIFIER_SIZE_T)
-               case QUALIFIER_SIZE_T:
-                 flags |= FLAGS_SIZE_T;
-                 /* Modify flags for later truncation of number */
-                 if (sizeof(size_t) == sizeof(trio_ulonglong_t))
-                   flags |= FLAGS_QUAD;
-                 else if (sizeof(size_t) == sizeof(long))
-                   flags |= FLAGS_LONG;
-                 break;
-#endif
-
-#if defined(QUALIFIER_PTRDIFF_T)
-               case QUALIFIER_PTRDIFF_T:
-                 flags |= FLAGS_PTRDIFF_T;
-                 if (sizeof(ptrdiff_t) == sizeof(trio_ulonglong_t))
-                   flags |= FLAGS_QUAD;
-                 else if (sizeof(ptrdiff_t) == sizeof(long))
-                   flags |= FLAGS_LONG;
-                 break;
-#endif
-
-#if defined(QUALIFIER_INTMAX_T)
-               case QUALIFIER_INTMAX_T:
-                 flags |= FLAGS_INTMAX_T;
-                 if (sizeof(trio_intmax_t) == sizeof(trio_ulonglong_t))
-                   flags |= FLAGS_QUAD;
-                 else if (sizeof(trio_intmax_t) == sizeof(long))
-                   flags |= FLAGS_LONG;
-                 break;
-#endif
-
-#if defined(QUALIFIER_QUAD)
-               case QUALIFIER_QUAD:
-                 flags |= FLAGS_QUAD;
-                 break;
-#endif
-
-#if defined(QUALIFIER_FIXED_SIZE)
-               case QUALIFIER_FIXED_SIZE:
-                 if (flags & FLAGS_FIXED_SIZE)
-                   return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-
-                 if (flags & (FLAGS_ALL_SIZES | FLAGS_LONGDOUBLE |
-                              FLAGS_WIDECHAR | FLAGS_VARSIZE_PARAMETER))
-                   return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-
-                 if ((format[index] == '6') &&
-                     (format[index + 1] == '4'))
-                   {
-                     varsize = sizeof(trio_int64_t);
-                     index += 2;
-                   }
-                 else if ((format[index] == '3') &&
-                          (format[index + 1] == '2'))
-                   {
-                     varsize = sizeof(trio_int32_t);
-                     index += 2;
-                   }
-                 else if ((format[index] == '1') &&
-                          (format[index + 1] == '6'))
-                   {
-                     varsize = sizeof(trio_int16_t);
-                     index += 2;
-                   }
-                 else if (format[index] == '8')
-                   {
-                     varsize = sizeof(trio_int8_t);
-                     index++;
-                   }
-                 else
-                   return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-                 
-                 flags |= FLAGS_FIXED_SIZE;
-                 break;
-#endif
-
-#ifdef QUALIFIER_ESCAPE
-               case QUALIFIER_ESCAPE:
-                 switch (format[index++]) {
-                   case 'U': escape = ESCAPE_ULM; break;
-                   case 'X': escape = ESCAPE_XML; break;
-                   case 'S': escape = ESCAPE_SQL; break;
-                   default: return TRIO_ERROR_RETURN(TRIO_EINVAL,index);
-                 }
-                 break;
-#endif
-
-
-#if defined(QUALIFIER_WIDECHAR)
-               case QUALIFIER_WIDECHAR:
-                 flags |= FLAGS_WIDECHAR;
-                 break;
-#endif
-
-#if defined(QUALIFIER_SIZE_T_UPPER)
-               case QUALIFIER_SIZE_T_UPPER:
-                 break;
-#endif
-
-#if defined(QUALIFIER_QUOTE)
-               case QUALIFIER_QUOTE:
-                 flags |= FLAGS_QUOTE;
-                 break;
-#endif
-
-#if defined(QUALIFIER_STICKY)
-               case QUALIFIER_STICKY:
-                 flags |= FLAGS_STICKY;
-                 got_sticky = TRUE;
-                 break;
-#endif
-                 
-#if defined(QUALIFIER_VARSIZE)
-               case QUALIFIER_VARSIZE:
-                 flags |= FLAGS_VARSIZE_PARAMETER;
-                 parameterPosition++;
-                 if (positional)
-                   varsize = parameterPosition;
-                 else
-                   {
-                     varsize = currentParam;
-                     currentParam = varsize + 1;
-                   }
-                 if (currentParam > maxParam)
-                   maxParam = currentParam;
-                 break;
-#endif
-
-               default:
-                 /* Bail out completely to make the error more obvious */
-                  return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-               }
-           } /* while qualifier */
-
-         /*
-          * Parameters only need the type and value. The value is
-          * read later.
-          */
-         if (flags & FLAGS_WIDTH_PARAMETER)
-           {
-#if TRIO_ERRORS
-             usedEntries[width] += 1;
-#endif
-             parameters[pos].type = FORMAT_PARAMETER;
-             indices[width] = pos;
-             width = pos++;
-           }
-         if (flags & FLAGS_PRECISION_PARAMETER)
-           {
-#if TRIO_ERRORS
-             usedEntries[precision] += 1;
-#endif
-             parameters[pos].type = FORMAT_PARAMETER;
-             indices[precision] = pos;
-             precision = pos++;
-           }
-         if (flags & FLAGS_BASE_PARAMETER)
-           {
-#if TRIO_ERRORS
-             usedEntries[base] += 1;
-#endif
-             parameters[pos].type = FORMAT_PARAMETER;
-             indices[base] = pos;
-             base = pos++;
-           }
-         if (flags & FLAGS_VARSIZE_PARAMETER)
-           {
-#if TRIO_ERRORS
-             usedEntries[varsize] += 1;
-#endif
-             parameters[pos].type = FORMAT_PARAMETER;
-             indices[varsize] = pos;
-             varsize = pos++;
-           }
-         
-         indices[currentParam] = pos;
-         
-         switch (format[index++])
-           {
-#if defined(SPECIFIER_CHAR_UPPER)
-           case SPECIFIER_CHAR_UPPER:
-             flags |= FLAGS_WIDECHAR;
-             /* FALLTHROUGH */
-#endif
-           case SPECIFIER_CHAR:
-             if (flags & FLAGS_LONG)
-               flags |= FLAGS_WIDECHAR;
-             else if (flags & FLAGS_SHORT)
-               flags &= ~FLAGS_WIDECHAR;
-             parameters[pos].type = FORMAT_CHAR;
-             break;
-
-#if defined(SPECIFIER_STRING_UPPER)
-           case SPECIFIER_STRING_UPPER:
-             flags |= FLAGS_WIDECHAR;
-             /* FALLTHROUGH */
-#endif
-           case SPECIFIER_STRING:
-             if (flags & FLAGS_LONG)
-               flags |= FLAGS_WIDECHAR;
-             else if (flags & FLAGS_SHORT)
-               flags &= ~FLAGS_WIDECHAR;
-             parameters[pos].type = FORMAT_STRING;
-             break;
-
-
-           case SPECIFIER_GROUP:
-             if (TYPE_SCAN == type)
-               {
-                 int depth = 1;
-                 parameters[pos].type = FORMAT_GROUP;
-                 if (format[index] == QUALIFIER_CIRCUMFLEX)
-                   index++;
-                 if (format[index] == SPECIFIER_UNGROUP)
-                   index++;
-                 if (format[index] == QUALIFIER_MINUS)
-                   index++;
-                 /* Skip nested brackets */
-                 while (format[index] != NIL)
-                   {
-                     if (format[index] == SPECIFIER_GROUP)
-                       {
-                         depth++;
-                       }
-                     else if (format[index] == SPECIFIER_UNGROUP)
-                       {
-                         if (--depth <= 0)
-                           {
-                             index++;
-                             break;
-                           }
-                       }
-                     index++;
-                   }
-               }
-             break;
-             
-           case SPECIFIER_INTEGER:
-             parameters[pos].type = FORMAT_INT;
-             break;
-             
-           case SPECIFIER_UNSIGNED:
-             flags |= FLAGS_UNSIGNED;
-             parameters[pos].type = FORMAT_INT;
-             break;
-
-           case SPECIFIER_DECIMAL:
-             /* Disable base modifier */
-             flags &= ~FLAGS_BASE_PARAMETER;
-             base = BASE_DECIMAL;
-             parameters[pos].type = FORMAT_INT;
-             break;
-
-           case SPECIFIER_OCTAL:
-             flags &= ~FLAGS_BASE_PARAMETER;
-             base = BASE_OCTAL;
-             parameters[pos].type = FORMAT_INT;
-             break;
-
-#if defined(SPECIFIER_BINARY)
-           case SPECIFIER_BINARY_UPPER:
-             flags |= FLAGS_UPPER;
-             /* FALLTHROUGH */
-           case SPECIFIER_BINARY:
-             flags |= FLAGS_NILPADDING;
-             flags &= ~FLAGS_BASE_PARAMETER;
-             base = BASE_BINARY;
-             parameters[pos].type = FORMAT_INT;
-             break;
-#endif
-
-           case SPECIFIER_HEX_UPPER:
-             flags |= FLAGS_UPPER;
-             /* FALLTHROUGH */
-           case SPECIFIER_HEX:
-             flags |= FLAGS_UNSIGNED;
-             flags &= ~FLAGS_BASE_PARAMETER;
-             base = BASE_HEX;
-             parameters[pos].type = FORMAT_INT;
-             break;
-
-           case SPECIFIER_FLOAT_E_UPPER:
-             flags |= FLAGS_UPPER;
-             /* FALLTHROUGH */
-           case SPECIFIER_FLOAT_E:
-             flags |= FLAGS_FLOAT_E;
-             parameters[pos].type = FORMAT_DOUBLE;
-             break;
-
-           case SPECIFIER_FLOAT_G_UPPER:
-             flags |= FLAGS_UPPER;
-             /* FALLTHROUGH */
-           case SPECIFIER_FLOAT_G:
-             flags |= FLAGS_FLOAT_G;
-             parameters[pos].type = FORMAT_DOUBLE;
-             break;
-
-           case SPECIFIER_FLOAT_F_UPPER:
-             flags |= FLAGS_UPPER;
-             /* FALLTHROUGH */
-           case SPECIFIER_FLOAT_F:
-             parameters[pos].type = FORMAT_DOUBLE;
-             break;
-
-           case SPECIFIER_POINTER:
-             parameters[pos].type = FORMAT_POINTER;
-             break;
-
-           case SPECIFIER_COUNT:
-             parameters[pos].type = FORMAT_COUNT;
-             break;
-
-#if defined(SPECIFIER_HEXFLOAT)
-# if defined(SPECIFIER_HEXFLOAT_UPPER)
-           case SPECIFIER_HEXFLOAT_UPPER:
-             flags |= FLAGS_UPPER;
-             /* FALLTHROUGH */
-# endif
-           case SPECIFIER_HEXFLOAT:
-             base = BASE_HEX;
-             parameters[pos].type = FORMAT_DOUBLE;
-             break;
-#endif
-
-#if defined(FORMAT_ERRNO)
-           case SPECIFIER_ERRNO:
-             parameters[pos].type = FORMAT_ERRNO;
-             break;
-#endif
-
-#if defined(SPECIFIER_USER_DEFINED_BEGIN)
-           case SPECIFIER_USER_DEFINED_BEGIN:
-             {
-               unsigned int max;
-               int without_namespace = TRUE;
-               
-               parameters[pos].type = FORMAT_USER_DEFINED;
-               parameters[pos].user_name[0] = NIL;
-               tmpformat = (char *)&format[index];
-             
-               while ((ch = format[index]))
-                 {
-                   index++;
-                   if (ch == SPECIFIER_USER_DEFINED_END)
-                     {
-                       if (without_namespace)
-                         {
-                           /* We must get the handle first */
-                           parameters[pos].type = FORMAT_PARAMETER;
-                           parameters[pos].indexAfterSpecifier = index;
-                           parameters[pos].flags = FLAGS_USER_DEFINED;
-                           /* Adjust parameters for insertion of new one */
-                           pos++;
-# if TRIO_ERRORS
-                           usedEntries[currentParam] += 1;
-# endif
-                           parameters[pos].type = FORMAT_USER_DEFINED;
-                           currentParam++;
-                           indices[currentParam] = pos;
-                           if (currentParam > maxParam)
-                             maxParam = currentParam;
-                         }
-                       /* Copy the user data */
-                       max = (unsigned int)(&format[index] - tmpformat);
-                       if (max > MAX_USER_DATA)
-                         max = MAX_USER_DATA;
-                       StrCopyMax(parameters[pos].user_data,
-                                  max,
-                                  tmpformat);
-                       break; /* while */
-                     }
-                   if (ch == SPECIFIER_USER_DEFINED_SEPARATOR)
-                     {
-                       without_namespace = FALSE;
-                       /* Copy the namespace for later looking-up */
-                       max = (int)(&format[index] - tmpformat);
-                       if (max > MAX_USER_NAME)
-                         max = MAX_USER_NAME;
-                       StrCopyMax(parameters[pos].user_name,
-                                  max,
-                                  tmpformat);
-                       tmpformat = (char *)&format[index];
-                     }
-                 }
-               if (ch != SPECIFIER_USER_DEFINED_END)
-                 return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-             }
-             break;
-#endif /* defined(SPECIFIER_USER_DEFINED_BEGIN) */
-             
-           default:
-             /* Bail out completely to make the error more obvious */
-              return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-           }
-
-#if TRIO_ERRORS
-         /*  Count the number of times this entry has been used */
-         usedEntries[currentParam] += 1;
-#endif
-         
-         /* Find last sticky parameters */
-         if (got_sticky && !(flags & FLAGS_STICKY))
-           {
-             for (i = pos - 1; i >= 0; i--)
-               {
-                 if (parameters[i].type == FORMAT_PARAMETER)
-                   continue;
-                 if ((parameters[i].flags & FLAGS_STICKY) &&
-                     (parameters[i].type == parameters[pos].type))
-                   {
-                     /* Do not overwrite current qualifiers */
-                     flags |= (parameters[i].flags & (unsigned long)~FLAGS_STICKY);
-                     if (width == NO_WIDTH)
-                       width = parameters[i].width;
-                     if (precision == NO_PRECISION)
-                       precision = parameters[i].precision;
-                     if (base == NO_BASE)
-                       base = parameters[i].base;
-                     break;
-                   }
-               }
-           }
-         
-         parameters[pos].indexAfterSpecifier = index;
-         parameters[pos].flags = flags;
-         parameters[pos].width = width;
-         parameters[pos].precision = precision;
-         parameters[pos].base = (base == NO_BASE) ? BASE_DECIMAL : base;
-         parameters[pos].varsize = varsize;
-#ifdef QUALIFIER_ESCAPE
-         parameters[pos].escape = escape;
-#endif
-         pos++;
-         
-         if (! positional)
-           parameterPosition++;
-         
-       } /* if identifier */
-      
-    } /* while format characters left */
-
-  for (num = 0; num <= maxParam; num++)
-    {
-#if TRIO_ERRORS
-      if (usedEntries[num] != 1)
-       {
-         if (usedEntries[num] == 0) /* gap detected */
-           return TRIO_ERROR_RETURN(TRIO_EGAP, num);
-         else /* double references detected */
-           return TRIO_ERROR_RETURN(TRIO_EDBLREF, num);
-       }
-#endif
-      
-      i = indices[num];
-
-      /*
-       * FORMAT_PARAMETERS are only present if they must be read,
-       * so it makes no sense to check the ignore flag (besides,
-       * the flags variable is not set for that particular type)
-       */
-      if ((parameters[i].type != FORMAT_PARAMETER) &&
-         (parameters[i].flags & FLAGS_IGNORE))
-       continue; /* for all arguments */
-
-      /*
-       * The stack arguments are read according to ANSI C89
-       * default argument promotions:
-       *
-       *  char           = int
-       *  short          = int
-       *  unsigned char  = unsigned int
-       *  unsigned short = unsigned int
-       *  float          = double
-       *
-       * In addition to the ANSI C89 these types are read (the
-       * default argument promotions of C99 has not been
-       * considered yet)
-       *
-       *  long long
-       *  long double
-       *  size_t
-       *  ptrdiff_t
-       *  intmax_t
-       */
-      switch (parameters[i].type)
-       {
-       case FORMAT_GROUP:
-       case FORMAT_STRING:
-#if TRIO_WIDECHAR
-         if (flags & FLAGS_WIDECHAR)
-           {
-             parameters[i].data.wstring = (argarray == NULL)
-               ? va_arg(arglist, wchar_t *)
-               : (wchar_t *)(argarray[num]);
-           }
-         else
-#endif
-           {
-             parameters[i].data.string = (argarray == NULL)
-               ? va_arg(arglist, char *)
-               : (char *)(argarray[num]);
-           }
-         break;
-
-       case FORMAT_POINTER:
-       case FORMAT_COUNT:
-       case FORMAT_USER_DEFINED:
-       case FORMAT_UNKNOWN:
-         parameters[i].data.pointer = (argarray == NULL)
-           ? va_arg(arglist, void *)
-           : argarray[num];
-         break;
-
-       case FORMAT_CHAR:
-       case FORMAT_INT:
-         if (TYPE_SCAN == type)
-           {
-              if (argarray == NULL)
-                parameters[i].data.pointer = 
-                  (trio_uintmax_t *)va_arg(arglist, void *);
-              else
-                {
-                  if (parameters[i].type == FORMAT_CHAR)
-                    parameters[i].data.pointer =
-                      (trio_uintmax_t *)((char *)argarray[num]);
-                  else if (parameters[i].flags & FLAGS_SHORT)
-                    parameters[i].data.pointer =
-                      (trio_uintmax_t *)((short *)argarray[num]);
-                  else
-                    parameters[i].data.pointer =
-                      (trio_uintmax_t *)((int *)argarray[num]);
-                }
-           }
-         else
-           {
-#if defined(QUALIFIER_VARSIZE) || defined(QUALIFIER_FIXED_SIZE)
-             if ((parameters[i].flags & FLAGS_VARSIZE_PARAMETER) ||
-                 (parameters[i].flags & FLAGS_FIXED_SIZE))
-               {
-                 if (parameters[i].flags & FLAGS_VARSIZE_PARAMETER)
-                   {
-                     /*
-                      * Variable sizes are mapped onto the fixed sizes, in
-                      * accordance with integer promotion.
-                      *
-                      * Please note that this may not be portable, as we
-                      * only guess the size, not the layout of the numbers.
-                      * For example, if int is little-endian, and long is
-                      * big-endian, then this will fail.
-                      */
-                     varsize = (int)parameters[parameters[i].varsize].data.number.as_unsigned;
-                   }
-                 else
-                   {
-                     /* Used for the I<bits> modifiers */
-                     varsize = parameters[i].varsize;
-                   }
-                 parameters[i].flags &= ~FLAGS_ALL_VARSIZES;
-                 
-                 if (varsize <= (int)sizeof(int))
-                   ;
-                 else if (varsize <= (int)sizeof(long))
-                   parameters[i].flags |= FLAGS_LONG;
-#if defined(QUALIFIER_INTMAX_T)
-                 else if (varsize <= (int)sizeof(trio_longlong_t))
-                   parameters[i].flags |= FLAGS_QUAD;
-                 else
-                   parameters[i].flags |= FLAGS_INTMAX_T;
-#else
-                 else
-                   parameters[i].flags |= FLAGS_QUAD;
-#endif
-               }
-#endif /* defined(QUALIFIER_VARSIZE) */
-#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
-             if (parameters[i].flags & FLAGS_SIZE_T)
-               parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(arglist, size_t)
-                 : (trio_uintmax_t)(*((size_t *)argarray[num]));
-             else
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
-             if (parameters[i].flags & FLAGS_PTRDIFF_T)
-               parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(arglist, ptrdiff_t)
-                 : (trio_uintmax_t)(*((ptrdiff_t *)argarray[num]));
-             else
-#endif
-#if defined(QUALIFIER_INTMAX_T)
-             if (parameters[i].flags & FLAGS_INTMAX_T)
-               parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(arglist, trio_intmax_t)
-                 : (trio_uintmax_t)(*((trio_intmax_t *)argarray[num]));
-             else
-#endif
-             if (parameters[i].flags & FLAGS_QUAD)
-               parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(arglist, trio_ulonglong_t)
-                 : (trio_uintmax_t)(*((trio_ulonglong_t *)argarray[num]));
-             else if (parameters[i].flags & FLAGS_LONG)
-               parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(arglist, long)
-                 : (trio_uintmax_t)(*((long *)argarray[num]));
-             else
-               {
-                 if (argarray == NULL)
-                   parameters[i].data.number.as_unsigned = (trio_uintmax_t)va_arg(arglist, int);
-                 else
-                   {
-                     if (parameters[i].type == FORMAT_CHAR)
-                       parameters[i].data.number.as_unsigned = (trio_uintmax_t)(*((char *)argarray[num]));
-                     else if (parameters[i].flags & FLAGS_SHORT)
-                       parameters[i].data.number.as_unsigned = (trio_uintmax_t)(*((short *)argarray[num]));
-                     else
-                       parameters[i].data.number.as_unsigned = (trio_uintmax_t)(*((int *)argarray[num]));
-                   }
-               }
-           }
-         break;
-
-       case FORMAT_PARAMETER:
-         /*
-          * The parameter for the user-defined specifier is a pointer,
-          * whereas the rest (width, precision, base) uses an integer.
-          */
-         if (parameters[i].flags & FLAGS_USER_DEFINED)
-           parameters[i].data.pointer = (argarray == NULL)
-             ? va_arg(arglist, void *)
-             : argarray[num];
-         else
-           parameters[i].data.number.as_unsigned = (argarray == NULL)
-             ? (trio_uintmax_t)va_arg(arglist, int)
-             : (trio_uintmax_t)(*((int *)argarray[num]));
-         break;
-
-       case FORMAT_DOUBLE:
-         if (TYPE_SCAN == type)
-           {
-             if (parameters[i].flags & FLAGS_LONG)
-               parameters[i].data.longdoublePointer = (argarray == NULL)
-                 ? va_arg(arglist, long double *)
-                 : (long double *)((long double *)argarray[num]);
-             else
-                {
-                  if (argarray == NULL)
-                    parameters[i].data.doublePointer =
-                      va_arg(arglist, double *);
-                 else
-                   {
-                     if (parameters[i].flags & FLAGS_SHORT)
-                       parameters[i].data.doublePointer =
-                         (double *)((float *)argarray[num]);
-                     else
-                       parameters[i].data.doublePointer =
-                         (double *)((double *)argarray[num]);
-                   }
-                }
-           }
-         else
-           {
-             if (parameters[i].flags & FLAGS_LONG)
-               parameters[i].data.longdoubleNumber = (argarray == NULL)
-                 ? va_arg(arglist, long double)
-                 : (long double)(*((long double *)argarray[num]));
-             else
-               {
-                 if (argarray == NULL)
-                   parameters[i].data.longdoubleNumber = (long double)va_arg(arglist, double);
-                 else
-                   {
-                     if (parameters[i].flags & FLAGS_SHORT)
-                       parameters[i].data.longdoubleNumber = (long double)(*((float *)argarray[num]));
-                     else
-                       parameters[i].data.longdoubleNumber = (long double)(long double)(*((double *)argarray[num]));
-                   }
-               }
-           }
-         break;
-
-#if defined(FORMAT_ERRNO)
-       case FORMAT_ERRNO:
-         parameters[i].data.errorNumber = errno;
-         break;
-#endif
-
-       default:
-         break;
-       }
-    } /* for all specifiers */
-  return num;
-}
-
-
-/*************************************************************************
- *
- * @FORMATTING
- *
- ************************************************************************/
-
-
-/*************************************************************************
- * TrioWriteNumber [private]
- *
- * Description:
- *  Output a number.
- *  The complexity of this function is a result of the complexity
- *  of the dependencies of the flags.
- */
-static void
-TrioWriteNumber(trio_T *self,
-               trio_uintmax_t number,
-               unsigned long flags,
-               int width,
-               int precision,
-               int base)
-{
-  BOOLEAN_T isNegative;
-  char buffer[MAX_CHARS_IN(trio_uintmax_t) * (1 + MAX_LOCALE_SEPARATOR_LENGTH) + 1];
-  char *bufferend;
-  char *pointer;
-  const char *digits;
-  int i;
-  int length;
-  char *p;
-  int charsPerThousand;
-  int groupingIndex;
-  int count;
-
-  assert(VALID(self));
-  assert(VALID(self->OutStream));
-  assert((base >= MIN_BASE && base <= MAX_BASE) || (base == NO_BASE));
-
-  digits = (flags & FLAGS_UPPER) ? internalDigitsUpper : internalDigitsLower;
-
-  isNegative = (flags & FLAGS_UNSIGNED)
-    ? FALSE
-    : ((trio_intmax_t)number < 0);
-  if (isNegative)
-    number = -number;
-
-  if (flags & FLAGS_QUAD)
-    number &= (trio_ulonglong_t)-1;
-  else if (flags & FLAGS_LONG)
-    number &= (unsigned long)-1;
-  else
-    number &= (unsigned int)-1;
-  
-  /* Build number */
-  pointer = bufferend = &buffer[sizeof(buffer) - 1];
-  *pointer-- = NIL;
-  charsPerThousand = (int)internalGrouping[0];
-  groupingIndex = 1;
-  for (i = 1; i < (int)sizeof(buffer); i++)
-    {
-      *pointer-- = digits[number % base];
-      number /= base;
-      if (number == 0)
-       break;
-
-      if ((flags & FLAGS_QUOTE)
-         && (charsPerThousand != NO_GROUPING)
-         && (i % charsPerThousand == 0))
-       {
-         /*
-          * We are building the number from the least significant
-          * to the most significant digit, so we have to copy the
-          * thousand separator backwards
-          */
-         length = StrLength(internalThousandSeparator);
-         if (((int)(pointer - buffer) - length) > 0)
-           {
-             p = &internalThousandSeparator[length - 1];
-             while (length-- > 0)
-               *pointer-- = *p--;
-           }
-
-         /* Advance to next grouping number */
-         switch (internalGrouping[groupingIndex])
-           {
-           case CHAR_MAX: /* Disable grouping */
-             charsPerThousand = NO_GROUPING;
-             break;
-           case 0: /* Repeat last group */
-             break;
-           default:
-             charsPerThousand = (int)internalGrouping[groupingIndex++];
-             break;
-           }
-       }
-    }
-
-  /* Adjust width */
-  width -= (bufferend - pointer) - 1;
-
-  /* Adjust precision */
-  if (NO_PRECISION != precision)
-    {
-      precision -= (bufferend - pointer) - 1;
-      if (precision < 0)
-       precision = 0;
-      flags |= FLAGS_NILPADDING;
-    }
-
-  /* Adjust width further */
-  if (isNegative || (flags & FLAGS_SHOWSIGN) || (flags & FLAGS_SPACE))
-    width--;
-  if (flags & FLAGS_ALTERNATIVE)
-    {
-      switch (base)
-       {
-       case BASE_BINARY:
-       case BASE_HEX:
-         width -= 2;
-         break;
-       case BASE_OCTAL:
-         width--;
-         break;
-       default:
-         break;
-       }
-    }
-
-  /* Output prefixes spaces if needed */
-  if (! ((flags & FLAGS_LEFTADJUST) ||
-        ((flags & FLAGS_NILPADDING) && (precision == NO_PRECISION))))
-    {
-      count = (precision == NO_PRECISION) ? 0 : precision;
-      while (width-- > count)
-       self->OutStream(self, CHAR_ADJUST);
-    }
-
-  /* width has been adjusted for signs and alternatives */
-  if (isNegative)
-    self->OutStream(self, '-');
-  else if (flags & FLAGS_SHOWSIGN)
-    self->OutStream(self, '+');
-  else if (flags & FLAGS_SPACE)
-    self->OutStream(self, ' ');
-
-  if (flags & FLAGS_ALTERNATIVE)
-    {
-      switch (base)
-       {
-       case BASE_BINARY:
-         self->OutStream(self, '0');
-         self->OutStream(self, (flags & FLAGS_UPPER) ? 'B' : 'b');
-         break;
-
-       case BASE_OCTAL:
-         self->OutStream(self, '0');
-         break;
-
-       case BASE_HEX:
-         self->OutStream(self, '0');
-         self->OutStream(self, (flags & FLAGS_UPPER) ? 'X' : 'x');
-         break;
-
-       default:
-         break;
-       } /* switch base */
-    }
-
-  /* Output prefixed zero padding if needed */
-  if (flags & FLAGS_NILPADDING)
-    {
-      if (precision == NO_PRECISION)
-       precision = width;
-      while (precision-- > 0)
-       {
-         self->OutStream(self, '0');
-         width--;
-       }
-    }
-
-  /* Output the number itself */
-  while (*(++pointer))
-    {
-      self->OutStream(self, *pointer);
-    }
-
-  /* Output trailing spaces if needed */
-  if (flags & FLAGS_LEFTADJUST)
-    {
-      while (width-- > 0)
-       self->OutStream(self, CHAR_ADJUST);
-    }
-}
-
-/*************************************************************************
- * TrioWriteStringCharacter [private]
- *
- * Description:
- *  Output a single character of a string
- */
-static void
-TrioWriteStringCharacter(trio_T *self,
-                        int ch,
-                        unsigned long flags)
-{
-  if (flags & FLAGS_ALTERNATIVE)
-    {
-      if (! (isprint(ch) || isspace(ch)))
-       {
-         /*
-          * Non-printable characters are converted to C escapes or
-          * \number, if no C escape exists.
-          */
-         self->OutStream(self, CHAR_BACKSLASH);
-         switch (ch)
-           {
-           case '\007': self->OutStream(self, 'a'); break;
-           case '\b': self->OutStream(self, 'b'); break;
-           case '\f': self->OutStream(self, 'f'); break;
-           case '\n': self->OutStream(self, 'n'); break;
-           case '\r': self->OutStream(self, 'r'); break;
-           case '\t': self->OutStream(self, 't'); break;
-           case '\v': self->OutStream(self, 'v'); break;
-           case '\\': self->OutStream(self, '\\'); break;
-           default:
-             self->OutStream(self, 'x');
-             TrioWriteNumber(self, (trio_intmax_t)ch,
-                             FLAGS_UNSIGNED | FLAGS_NILPADDING,
-                             2, 2, BASE_HEX);
-             break;
-           }
-       }
-      else if (ch == CHAR_BACKSLASH)
-       {
-         self->OutStream(self, CHAR_BACKSLASH);
-         self->OutStream(self, CHAR_BACKSLASH);
-       }
-      else
-       {
-         self->OutStream(self, ch);
-       }
-    }
-  else
-    {
-      self->OutStream(self, ch);
-    }
-}
-
-/*************************************************************************
- * TrioWriteString [private]
- *
- * Description:
- *  Output a string
- */
-static void
-TrioWriteString(trio_T *self,
-               const char *string,
-               unsigned long flags,
-               int width,
-               int precision)
-{
-  int length;
-  int ch;
-
-  assert(VALID(self));
-  assert(VALID(self->OutStream));
-
-  if (string == NULL)
-    {
-      string = null;
-      length = sizeof(null) - 1;
-      /* Disable quoting for the null pointer */
-      flags &= (~FLAGS_QUOTE);
-      width = 0;
-    }
-  else
-    {
-      length = StrLength(string);
-    }
-  if ((NO_PRECISION != precision) &&
-      (precision < length))
-    {
-      length = precision;
-    }
-  width -= length;
-
-  if (flags & FLAGS_QUOTE)
-    self->OutStream(self, CHAR_QUOTE);
-
-  if (! (flags & FLAGS_LEFTADJUST))
-    {
-      while (width-- > 0)
-       self->OutStream(self, CHAR_ADJUST);
-    }
-
-  while (length-- > 0)
-    {
-      /* The ctype parameters must be an unsigned char (or EOF) */
-      ch = (int)((unsigned char)(*string++));
-      TrioWriteStringCharacter(self, ch, flags);
-    }
-
-  if (flags & FLAGS_LEFTADJUST)
-    {
-      while (width-- > 0)
-       self->OutStream(self, CHAR_ADJUST);
-    }
-  if (flags & FLAGS_QUOTE)
-    self->OutStream(self, CHAR_QUOTE);
-}
-
-/*************************************************************************
- * TrioWriteWideStringCharacter [private]
- *
- * Description:
- *  Output a wide string as a multi-byte sequence
- */
-#if TRIO_WIDECHAR
-static int
-TrioWriteWideStringCharacter(trio_T *self,
-                            wchar_t wch,
-                            unsigned long flags,
-                            int width)
-{
-  int size;
-  int i;
-  int ch;
-  char *string;
-  char buffer[MB_LEN_MAX + 1];
-
-  if (width == NO_WIDTH)
-    width = sizeof(buffer);
-  
-  size = wctomb(buffer, wch);
-  if ((size <= 0) || (size > width) || (buffer[0] == NIL))
-    return 0;
-
-  string = buffer;
-  i = size;
-  while ((width >= i) && (width-- > 0) && (i-- > 0))
-    {
-      /* The ctype parameters must be an unsigned char (or EOF) */
-      ch = (int)((unsigned char)(*string++));
-      TrioWriteStringCharacter(self, ch, flags);
-    }
-  return size;
-}
-#endif /* TRIO_WIDECHAR */
-
-/*************************************************************************
- * TrioWriteString [private]
- *
- * Description:
- *  Output a wide character string as a multi-byte string
- */
-#if TRIO_WIDECHAR
-static void
-TrioWriteWideString(trio_T *self,
-                   const wchar_t *wstring,
-                   unsigned long flags,
-                   int width,
-                   int precision)
-{
-  int length;
-  int size;
-
-  assert(VALID(self));
-  assert(VALID(self->OutStream));
-
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  mblen(NULL, 0);
-#endif
-  
-  if (wstring == NULL)
-    {
-      TrioWriteString(self, NULL, flags, width, precision);
-      return;
-    }
-  
-  if (NO_PRECISION == precision)
-    {
-      length = INT_MAX;
-    }
-  else
-    {
-      length = precision;
-      width -= length;
-    }
-
-  if (flags & FLAGS_QUOTE)
-    self->OutStream(self, CHAR_QUOTE);
-
-  if (! (flags & FLAGS_LEFTADJUST))
-    {
-      while (width-- > 0)
-       self->OutStream(self, CHAR_ADJUST);
-    }
-
-  while (length > 0)
-    {
-      size = TrioWriteWideStringCharacter(self, *wstring++, flags, length);
-      if (size == 0)
-       break; /* while */
-      length -= size;
-    }
-
-  if (flags & FLAGS_LEFTADJUST)
-    {
-      while (width-- > 0)
-       self->OutStream(self, CHAR_ADJUST);
-    }
-  if (flags & FLAGS_QUOTE)
-    self->OutStream(self, CHAR_QUOTE);
-}
-#endif /* TRIO_WIDECHAR */
-
-/*************************************************************************
- * TrioWriteDouble [private]
- */
-static void
-TrioWriteDouble(trio_T *self,
-               long double longdoubleNumber,
-               unsigned long flags,
-               int width,
-               int precision,
-               int base)
-{
-  int charsPerThousand;
-  int length;
-  double number;
-  double workNumber;
-  int integerDigits;
-  int fractionDigits;
-  int exponentDigits;
-  int expectedWidth;
-  int exponent;
-  unsigned int uExponent = 0;
-  double dblBase;
-  BOOLEAN_T isNegative;
-  BOOLEAN_T isExponentNegative = FALSE;
-  BOOLEAN_T isHex;
-  const char *digits;
-  char numberBuffer[MAX_MANTISSA_DIGITS
-                  * (1 + MAX_LOCALE_SEPARATOR_LENGTH) + 1];
-  char *numberPointer;
-  char exponentBuffer[MAX_EXPONENT_DIGITS + 1];
-  char *exponentPointer = NULL;
-  int groupingIndex;
-  char *work;
-  int i;
-  BOOLEAN_T onlyzero;
-  int zeroes = 0;
-  
-  assert(VALID(self));
-  assert(VALID(self->OutStream));
-  assert(base == BASE_DECIMAL || base == BASE_HEX);
-
-  number = (double)longdoubleNumber;
-  
-  /* Look for infinite numbers and non-a-number first */
-  switch (TrioIsInfinite(number))
-    {
-    case 1:
-      /* Positive infinity */
-      TrioWriteString(self,
-                     (flags & FLAGS_UPPER)
-                     ? INFINITE_UPPER
-                     : INFINITE_LOWER,
-                     flags, width, precision);
-      return;
-
-    case -1:
-      /* Negative infinity */
-      TrioWriteString(self,
-                     (flags & FLAGS_UPPER)
-                     ? "-" INFINITE_UPPER
-                     : "-" INFINITE_LOWER,
-                     flags, width, precision);
-      return;
-
-    default:
-      /* Finitude */
-      break;
-    }
-  if (TrioIsNan(number))
-    {
-      TrioWriteString(self,
-                     (flags & FLAGS_UPPER)
-                     ? NAN_UPPER
-                     : NAN_LOWER,
-                     flags, width, precision);
-      return;
-    }
-
-  /* Normal numbers */
-  digits = (flags & FLAGS_UPPER) ? internalDigitsUpper : internalDigitsLower;
-  isHex = (base == BASE_HEX);
-  dblBase = (double)base;
-  
-  if (precision == NO_PRECISION)
-    precision = FLT_DIG;
-  
-  isNegative = (number < 0.0);
-  if (isNegative)
-    number = -number;
-
-  if ((flags & FLAGS_FLOAT_G) || isHex)
-    {
-      if (precision == 0)
-       precision = 1;
-
-      if ((number < 1.0e-4) || (number > pow(10.0, (double)precision)))
-       {
-         /* Use scientific notation */
-         flags |= FLAGS_FLOAT_E;
-       }
-      else if (number < 1.0)
-       {
-         /*
-          * Use normal notation. If the integer part of the number is
-          * zero, then adjust the precision to include leading fractional
-          * zeros.
-          */
-         workNumber = fabs(guarded_log10(number));
-         if (workNumber - floor(workNumber) < 0.001)
-           workNumber--;
-         zeroes = (int)floor(workNumber);
-       }
-    }
-
-  if (flags & FLAGS_FLOAT_E)
-    {
-      /* Scale the number */
-      workNumber = guarded_log10(number);
-      if (workNumber == -HUGE_VAL)
-       {
-         exponent = 0;
-         /* Undo setting */
-         if (flags & FLAGS_FLOAT_G)
-           flags &= ~FLAGS_FLOAT_E;
-       }
-      else
-       {
-         exponent = (int)floor(workNumber);
-         number /= pow(10.0, (double)exponent);
-         isExponentNegative = (exponent < 0);
-         uExponent = (isExponentNegative) ? -exponent : exponent;
-         /* No thousand separators */
-         flags &= ~FLAGS_QUOTE;
-       }
-    }
-
-  /*
-   * Truncated number.
-   *
-   * precision is number of significant digits for FLOAT_G
-   * and number of fractional digits for others
-   */
-  integerDigits = (floor(number) > DBL_EPSILON)
-    ? 1 + (int)guarded_log10(floor(number))
-    : 1;
-  fractionDigits = ((flags & FLAGS_FLOAT_G) && (zeroes == 0))
-    ? precision - integerDigits
-    : zeroes + precision;
-  
-  number = floor(0.5 + number * pow(dblBase, (double)fractionDigits));
-  workNumber = (isHex
-               ? guarded_log16(0.5 + number)
-               : guarded_log10(0.5 + number));
-  if ((int)workNumber + 1 > integerDigits + fractionDigits)
-    {
-      if (flags & FLAGS_FLOAT_E)
-       {
-         /* Adjust if number was rounded up one digit (ie. 0.99 to 1.00) */
-         exponent--;
-         uExponent -= (isExponentNegative) ? 1 : -1;
-         number /= dblBase;
-       }
-      else
-       {
-         /* Adjust if number was rounded up one digit (ie. 99 to 100) */
-         integerDigits++;
-       }
-    }
-  
-  /* Build the fraction part */
-  numberPointer = &numberBuffer[sizeof(numberBuffer) - 1];
-  *numberPointer = NIL;
-  onlyzero = TRUE;
-  for (i = 0; i < fractionDigits; i++)
-    {
-      *(--numberPointer) = digits[(int)fmod(number, dblBase)];
-      number = floor(number / dblBase);
-
-      if ((flags & FLAGS_FLOAT_G) && !(flags & FLAGS_ALTERNATIVE))
-        {
-          /* Prune trailing zeroes */
-          if (numberPointer[0] != digits[0])
-            onlyzero = FALSE;
-          else if (onlyzero && (numberPointer[0] == digits[0]))
-            numberPointer++;
-        }
-      else
-        onlyzero = FALSE;
-    }
-  
-  /* Insert decimal point */
-  if ((flags & FLAGS_ALTERNATIVE) || ((fractionDigits > 0) && !onlyzero))
-    {
-      i = StrLength(internalDecimalPoint);
-      while (i> 0)
-       {
-         *(--numberPointer) = internalDecimalPoint[--i];
-       }
-    }
-  /* Insert the integer part and thousand separators */
-  charsPerThousand = (int)internalGrouping[0];
-  groupingIndex = 1;
-  for (i = 1; i < integerDigits + 1; i++)
-    {
-      *(--numberPointer) = digits[(int)fmod(number, dblBase)];
-      number = floor(number / dblBase);
-      if (number < DBL_EPSILON)
-       break;
-
-      if ((i > 0)
-         && ((flags & (FLAGS_FLOAT_E | FLAGS_QUOTE)) == FLAGS_QUOTE)
-         && (charsPerThousand != NO_GROUPING)
-         && (i % charsPerThousand == 0))
-       {
-         /*
-          * We are building the number from the least significant
-          * to the most significant digit, so we have to copy the
-          * thousand separator backwards
-          */
-         length = StrLength(internalThousandSeparator);
-         integerDigits += length;
-         if (((int)(numberPointer - numberBuffer) - length) > 0)
-           {
-             work = &internalThousandSeparator[length - 1];
-             while (length-- > 0)
-               *(--numberPointer) = *work--;
-           }
-
-         /* Advance to next grouping number */
-         if (charsPerThousand != NO_GROUPING)
-           {
-             switch (internalGrouping[groupingIndex])
-               {
-               case CHAR_MAX: /* Disable grouping */
-                 charsPerThousand = NO_GROUPING;
-                 break;
-               case 0: /* Repeat last group */
-                 break;
-               default:
-                 charsPerThousand = (int)internalGrouping[groupingIndex++];
-                 break;
-               }
-           }
-       }
-    }
-  
-  /* Build the exponent */
-  exponentDigits = 0;
-  if (flags & FLAGS_FLOAT_E)
-    {
-      exponentPointer = &exponentBuffer[sizeof(exponentBuffer) - 1];
-      *exponentPointer-- = NIL;
-      do {
-       *exponentPointer-- = digits[uExponent % base];
-       uExponent /= base;
-       exponentDigits++;
-      } while (uExponent);
-    }
-
-  /*
-   * Calculate expected width.
-   *  sign + integer part + thousands separators + decimal point
-   *  + fraction + exponent
-   */
-  expectedWidth = StrLength(numberPointer);
-  if (isNegative || (flags & FLAGS_SHOWSIGN))
-    expectedWidth += sizeof("-") - 1;
-  if (exponentDigits > 0)
-    expectedWidth += exponentDigits +
-      ((exponentDigits > 1) ? sizeof("E+") : sizeof("E+0")) - 1;
-  if (isHex)
-    expectedWidth += sizeof("0X") - 1;
-  
-  /* Output prefixing */
-  if (flags & FLAGS_NILPADDING)
-    {
-      /* Leading zeros must be after sign */
-      if (isNegative)
-       self->OutStream(self, '-');
-      else if (flags & FLAGS_SHOWSIGN)
-       self->OutStream(self, '+');
-      if (isHex)
-       {
-         self->OutStream(self, '0');
-         self->OutStream(self, (flags & FLAGS_UPPER) ? 'X' : 'x');
-       }
-      if (!(flags & FLAGS_LEFTADJUST))
-       {
-         for (i = expectedWidth; i < width; i++)
-           {
-             self->OutStream(self, '0');
-           }
-       }
-    }
-  else
-    {
-      /* Leading spaces must be before sign */
-      if (!(flags & FLAGS_LEFTADJUST))
-       {
-         for (i = expectedWidth; i < width; i++)
-           {
-             self->OutStream(self, CHAR_ADJUST);
-           }
-       }
-      if (isNegative)
-       self->OutStream(self, '-');
-      else if (flags & FLAGS_SHOWSIGN)
-       self->OutStream(self, '+');
-      if (isHex)
-       {
-         self->OutStream(self, '0');
-         self->OutStream(self, (flags & FLAGS_UPPER) ? 'X' : 'x');
-       }
-    }
-  /* Output number */
-  for (i = 0; numberPointer[i]; i++)
-    {
-      self->OutStream(self, numberPointer[i]);
-    }
-  /* Output exponent */
-  if (exponentDigits > 0)
-    {
-      self->OutStream(self,
-                     isHex
-                     ? ((flags & FLAGS_UPPER) ? 'P' : 'p')
-                     : ((flags & FLAGS_UPPER) ? 'E' : 'e'));
-      self->OutStream(self, (isExponentNegative) ? '-' : '+');
-
-      /* The exponent must contain at least two digits */
-      if (exponentDigits == 1)
-        self->OutStream(self, '0');
-
-      for (i = 0; i < exponentDigits; i++)
-       {
-         self->OutStream(self, exponentPointer[i + 1]);
-       }
-    }
-  /* Output trailing spaces */
-  if (flags & FLAGS_LEFTADJUST)
-    {
-      for (i = expectedWidth; i < width; i++)
-       {
-         self->OutStream(self, CHAR_ADJUST);
-       }
-    }
-}
-
-/*************************************************************************
- * TrioFormatProcess [private]
- */
-static int
-TrioFormatProcess(trio_T *data,
-                 const char *format,
-                 parameter_T *parameters)
-
-{
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  int charlen;
-#endif
-  int i;
-  const char *string;
-  void *pointer;
-  unsigned long flags;
-  int width;
-  int precision;
-  int base;
-  int index;
-  
-  index = 0;
-  i = 0;
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  mblen(NULL, 0);
-#endif
-  
-  while (format[index])
-    {
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-      if (! isascii(format[index]))
-       {
-         charlen = mblen(&format[index], MB_LEN_MAX);
-         while (charlen-- > 0)
-           {
-             data->OutStream(data, format[index++]);
-           }
-         continue; /* while */
-       }
-#endif /* TRIO_COMPILER_SUPPORTS_MULTIBYTE */
-      if (CHAR_IDENTIFIER == format[index])
-       {
-         if (CHAR_IDENTIFIER == format[index + 1])
-           {
-             data->OutStream(data, CHAR_IDENTIFIER);
-             index += 2;
-           }
-         else
-           {
-             /* Skip the parameter entries */
-             while (parameters[i].type == FORMAT_PARAMETER)
-               i++;
-             
-             flags = parameters[i].flags;
-
-             /* Find width */
-             width = parameters[i].width;
-             if (flags & FLAGS_WIDTH_PARAMETER)
-               {
-                 /* Get width from parameter list */
-                 width = (int)parameters[width].data.number.as_signed;
-               }
-             
-             /* Find precision */
-             if (flags & FLAGS_PRECISION)
-               {
-                 precision = parameters[i].precision;
-                 if (flags & FLAGS_PRECISION_PARAMETER)
-                   {
-                     /* Get precision from parameter list */
-                     precision = (int)parameters[precision].data.number.as_signed;
-                   }
-               }
-             else
-               {
-                 precision = NO_PRECISION;
-               }
-
-             /* Find base */
-             base = parameters[i].base;
-             if (flags & FLAGS_BASE_PARAMETER)
-               {
-                 /* Get base from parameter list */
-                 base = (int)parameters[base].data.number.as_signed;
-               }
-             
-             switch (parameters[i].type)
-               {
-               case FORMAT_CHAR:
-                 if (flags & FLAGS_QUOTE)
-                   data->OutStream(data, CHAR_QUOTE);
-                 if (! (flags & FLAGS_LEFTADJUST))
-                   {
-                     while (--width > 0)
-                       data->OutStream(data, CHAR_ADJUST);
-                   }
-#if TRIO_WIDECHAR
-                 if (flags & FLAGS_WIDECHAR)
-                   {
-                     TrioWriteWideStringCharacter(data,
-                                                  (wchar_t)parameters[i].data.number.as_signed,
-                                                  flags,
-                                                  NO_WIDTH);
-                   }
-                 else
-#endif
-                   TrioWriteStringCharacter(data,
-                                            (int)parameters[i].data.number.as_signed,
-                                            flags);
-
-                 if (flags & FLAGS_LEFTADJUST)
-                   {
-                     while(--width > 0)
-                       data->OutStream(data, CHAR_ADJUST);
-                   }
-                 if (flags & FLAGS_QUOTE)
-                   data->OutStream(data, CHAR_QUOTE);
-
-                 break; /* FORMAT_CHAR */
-
-               case FORMAT_INT:
-                 if (base == NO_BASE)
-                   base = BASE_DECIMAL;
-
-                 TrioWriteNumber(data,
-                                 parameters[i].data.number.as_signed,
-                                 flags,
-                                 width,
-                                 precision,
-                                 base);
-
-                 break; /* FORMAT_INT */
-
-               case FORMAT_DOUBLE:
-                 TrioWriteDouble(data,
-                                 parameters[i].data.longdoubleNumber,
-                                 flags,
-                                 width,
-                                 precision,
-                                 base);
-                 break; /* FORMAT_DOUBLE */
-
-               case FORMAT_STRING:
-#if TRIO_WIDECHAR
-                 if (flags & FLAGS_WIDECHAR)
-                   {
-                     TrioWriteWideString(data,
-                                         parameters[i].data.wstring,
-                                         flags,
-                                         width,
-                                         precision);
-                   }
-                 else
-#endif
-#ifdef QUALIFIER_ESCAPE
-                 {
-                   char *s = NULL;
-                    static const char* empty = "(null)";
-                   switch (parameters[i].escape)
-                   {
-                       case ESCAPE_ULM:
-                               s = glite_lbu_EscapeULM(parameters[i].data.string);
-                               break;
-                       case ESCAPE_XML:
-                               s = glite_lbu_EscapeXML(parameters[i].data.string);
-                               break;
-                       case ESCAPE_SQL:
-                               s = glite_lbu_EscapeSQL(parameters[i].data.string);
-                               break;
-                       case ESCAPE_NONE:
-                               s = strdup(parameters[i].data.string ? parameters[i].data.string : empty);
-                               break;
-                   }
-                   TrioWriteString(data,s,flags,width,precision);
-                   free(s);
-                 }
-#else
-                 {
-                     TrioWriteString(data,
-                                     parameters[i].data.string,
-                                     flags,
-                                     width,
-                                     precision);
-                 }
-#endif
-                 break; /* FORMAT_STRING */
-
-               case FORMAT_POINTER:
-                 {
-                   reference_T reference;
-                   
-                   reference.data = data;
-                   reference.parameter = &parameters[i];
-                   trio_print_pointer(&reference, parameters[i].data.pointer);
-                 }
-                 break; /* FORMAT_POINTER */
-
-               case FORMAT_COUNT:
-                 pointer = parameters[i].data.pointer;
-                 if (NULL != pointer)
-                   {
-                     /*
-                      * C99 paragraph 7.19.6.1.8 says "the number of
-                      * characters written to the output stream so far by
-                      * this call", which is data->committed
-                      */
-#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
-                     if (flags & FLAGS_SIZE_T)
-                       *(size_t *)pointer = (size_t)data->committed;
-                     else
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
-                     if (flags & FLAGS_PTRDIFF_T)
-                       *(ptrdiff_t *)pointer = (ptrdiff_t)data->committed;
-                     else
-#endif
-#if defined(QUALIFIER_INTMAX_T)
-                     if (flags & FLAGS_INTMAX_T)
-                       *(trio_intmax_t *)pointer = (trio_intmax_t)data->committed;
-                     else
-#endif
-                     if (flags & FLAGS_QUAD)
-                       {
-                         *(trio_ulonglong_t *)pointer = (trio_ulonglong_t)data->committed;
-                       }
-                     else if (flags & FLAGS_LONG)
-                       {
-                         *(long int *)pointer = (long int)data->committed;
-                       }
-                     else if (flags & FLAGS_SHORT)
-                       {
-                         *(short int *)pointer = (short int)data->committed;
-                       }
-                     else
-                       {
-                         *(int *)pointer = (int)data->committed;
-                       }
-                   }
-                 break; /* FORMAT_COUNT */
-
-               case FORMAT_PARAMETER:
-                 break; /* FORMAT_PARAMETER */
-
-#if defined(FORMAT_ERRNO)
-               case FORMAT_ERRNO:
-                 string = StrError(parameters[i].data.errorNumber);
-                 if (string)
-                   {
-                     TrioWriteString(data,
-                                     string,
-                                     flags,
-                                     width,
-                                     precision);
-                   }
-                 else
-                   {
-                     data->OutStream(data, '#');
-                     TrioWriteNumber(data,
-                                     (trio_intmax_t)parameters[i].data.errorNumber,
-                                     flags,
-                                     width,
-                                     precision,
-                                     BASE_DECIMAL);
-                   }
-                 break; /* FORMAT_ERRNO */
-#endif /* defined(FORMAT_ERRNO) */
-
-#if defined(FORMAT_USER_DEFINED)
-               case FORMAT_USER_DEFINED:
-                 {
-                   reference_T reference;
-                   userdef_T *def = NULL;
-
-                   if (parameters[i].user_name[0] == NIL)
-                     {
-                       /* Use handle */
-                       if ((i > 0) ||
-                           (parameters[i - 1].type == FORMAT_PARAMETER))
-                         def = (userdef_T *)parameters[i - 1].data.pointer;
-                     }
-                   else
-                     {
-                       /* Look up namespace */
-                       def = TrioFindNamespace(parameters[i].user_name, NULL);
-                     }
-                   if (def) {
-                     reference.data = data;
-                     reference.parameter = &parameters[i];
-                     def->callback(&reference);
-                   }
-                 }
-                 break;
-#endif /* defined(FORMAT_USER_DEFINED) */
-                 
-               default:
-                 break;
-               } /* switch parameter type */
-
-             /* Prepare for next */
-             index = parameters[i].indexAfterSpecifier;
-             i++;
-           }
-       }
-      else /* not identifier */
-       {
-         data->OutStream(data, format[index++]);
-       }
-    }
-  return data->processed;
-}
-
-/*************************************************************************
- * TrioFormatRef [private]
- */
-static int
-TrioFormatRef(reference_T *reference,
-              const char *format,
-              va_list arglist,
-              void **argarray)
-{
-  int status;
-  parameter_T parameters[MAX_PARAMETERS];
-
-  status = TrioPreprocess(TYPE_PRINT, format, parameters, arglist, argarray);
-  if (status < 0)
-    return status;
-
-  return TrioFormatProcess(reference->data, format, parameters);
-}
-
-/*************************************************************************
- * TrioFormat [private]
- *
- * Description:
- *  This is the main engine for formatting output
- */
-static int
-TrioFormat(void *destination,
-          size_t destinationSize,
-          void (*OutStream)(trio_T *, int),
-          const char *format,
-          va_list arglist,
-          void **argarray)
-{
-  int status;
-  trio_T data;
-  parameter_T parameters[MAX_PARAMETERS];
-
-  assert(VALID(OutStream));
-  assert(VALID(format));
-
-  memset(&data, 0, sizeof(data));
-  data.OutStream = OutStream;
-  data.location = destination;
-  data.max = destinationSize;
-
-#if defined(USE_LOCALE)
-  if (NULL == internalLocaleValues)
-    {
-      TrioSetLocale();
-    }
-#endif
-
-  status = TrioPreprocess(TYPE_PRINT, format, parameters, arglist, argarray);
-  if (status < 0)
-    return status;
-
-  return TrioFormatProcess(&data, format, parameters);
-}
-
-/*************************************************************************
- * TrioOutStreamFile [private]
- */
-static void
-TrioOutStreamFile(trio_T *self,
-                 int output)
-{
-  FILE *file = (FILE *)self->location;
-
-  assert(VALID(self));
-  assert(VALID(file));
-
-  self->processed++;
-  self->committed++;
-  (void)fputc(output, file);
-}
-
-/*************************************************************************
- * TrioOutStreamFileDescriptor [private]
- */
-static void
-TrioOutStreamFileDescriptor(trio_T *self,
-                           int output)
-{
-  int fd = *((int *)self->location);
-  char ch;
-
-  assert(VALID(self));
-
-  ch = (char)output;
-  (void)write(fd, &ch, sizeof(char));
-  self->processed++;
-  self->committed++;
-}
-
-/*************************************************************************
- * TrioOutStreamString [private]
- */
-static void
-TrioOutStreamString(trio_T *self,
-                   int output)
-{
-  char **buffer = (char **)self->location;
-
-  assert(VALID(self));
-  assert(VALID(buffer));
-
-  **buffer = (char)output;
-  (*buffer)++;
-  self->processed++;
-  self->committed++;
-}
-
-/*************************************************************************
- * TrioOutStreamStringMax [private]
- */
-static void
-TrioOutStreamStringMax(trio_T *self,
-                      int output)
-{
-  char **buffer;
-
-  assert(VALID(self));
-  buffer = (char **)self->location;
-  assert(VALID(buffer));
-
-  if (self->processed < self->max)
-    {
-      **buffer = (char)output;
-      (*buffer)++;
-      self->committed++;
-    }
-  self->processed++;
-}
-
-/*************************************************************************
- * TrioOutStreamStringDynamic [private]
- */
-#define DYNAMIC_START_SIZE 32
-struct dynamicBuffer {
-  char *buffer;
-  size_t length;
-  size_t allocated;
-};
-
-static void
-TrioOutStreamStringDynamic(trio_T *self,
-                          int output)
-{
-  struct dynamicBuffer *infop;
-  
-  assert(VALID(self));
-  assert(VALID(self->location));
-
-  infop = (struct dynamicBuffer *)self->location;
-
-  if (infop->buffer == NULL)
-    {
-      /* Start with a reasonable size */
-      infop->buffer = (char *)TRIO_MALLOC(DYNAMIC_START_SIZE);
-      if (infop->buffer == NULL)
-       return; /* fail */
-      
-      infop->allocated = DYNAMIC_START_SIZE;
-      self->processed = 0;
-      self->committed = 0;
-    }
-  else if (self->committed + sizeof(NIL) >= infop->allocated)
-    {
-      char *newptr;
-      
-      /* Allocate increasing chunks */
-      newptr = (char *)TRIO_REALLOC(infop->buffer, infop->allocated * 2);
-      
-      if (newptr == NULL)
-       return;
-
-      infop->buffer = newptr;
-      infop->allocated *= 2;
-    }
-  
-  infop->buffer[self->committed] = (char)output;
-  self->committed++;
-  self->processed++;
-  
-  infop->length = self->committed;
-}
-
-/*************************************************************************
- * printf
- */
-int
-trio_printf(const char *format,
-           ...)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(format));
-  
-  va_start(args, format);
-  status = TrioFormat(stdout, 0, TrioOutStreamFile, format, args, NULL);
-  va_end(args);
-  return status;
-}
-
-int
-trio_vprintf(const char *format,
-            va_list args)
-{
-  assert(VALID(format));
-
-  return TrioFormat(stdout, 0, TrioOutStreamFile, format, args, NULL);
-}
-
-#ifdef __GNUC__
-#define UNUSED_VAR __attribute__((unused))
-#else
-#define UNUSED_VAR
-#endif
-
-static void shutup_unitialized(va_list *dummy UNUSED_VAR) {
-}
-
-int
-trio_printfv(const char *format,
-            void ** args)
-{
-  va_list dummy;
-  shutup_unitialized(&dummy);
-  
-  assert(VALID(format));
-
-  return TrioFormat(stdout, 0, TrioOutStreamFile, format, dummy, args);
-}
-
-/*************************************************************************
- * fprintf
- */
-int
-trio_fprintf(FILE *file,
-            const char *format,
-            ...)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(file));
-  assert(VALID(format));
-  
-  va_start(args, format);
-  status = TrioFormat(file, 0, TrioOutStreamFile, format, args, NULL);
-  va_end(args);
-  return status;
-}
-
-int
-trio_vfprintf(FILE *file,
-             const char *format,
-             va_list args)
-{
-  assert(VALID(file));
-  assert(VALID(format));
-  
-  return TrioFormat(file, 0, TrioOutStreamFile, format, args, NULL);
-}
-
-int
-trio_fprintfv(FILE *file,
-             const char *format,
-             void ** args)
-{
-  va_list dummy;
-  shutup_unitialized(&dummy);
-  
-  assert(VALID(file));
-  assert(VALID(format));
-  
-  return TrioFormat(file, 0, TrioOutStreamFile, format, dummy, args);
-}
-
-/*************************************************************************
- * dprintf
- */
-int
-trio_dprintf(int fd,
-            const char *format,
-            ...)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(format));
-  
-  va_start(args, format);
-  status = TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, args, NULL);
-  va_end(args);
-  return status;
-}
-
-int
-trio_vdprintf(int fd,
-             const char *format,
-             va_list args)
-{
-  assert(VALID(format));
-  
-  return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, args, NULL);
-}
-
-int
-trio_dprintfv(int fd,
-             const char *format,
-             void **args)
-{
-  va_list dummy;
-  shutup_unitialized(&dummy);
-  
-  assert(VALID(format));
-  
-  return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, dummy, args);
-}
-
-/*************************************************************************
- * sprintf
- */
-int
-trio_sprintf(char *buffer,
-            const char *format,
-            ...)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-  
-  va_start(args, format);
-  status = TrioFormat(&buffer, 0, TrioOutStreamString, format, args, NULL);
-  *buffer = NIL; /* Terminate with NIL character */
-  va_end(args);
-  return status;
-}
-
-int
-trio_vsprintf(char *buffer,
-             const char *format,
-             va_list args)
-{
-  int status;
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  status = TrioFormat(&buffer, 0, TrioOutStreamString, format, args, NULL);
-  *buffer = NIL;
-  return status;
-}
-
-int
-trio_sprintfv(char *buffer,
-             const char *format,
-             void **args)
-{
-  int status;
-  va_list dummy;
-  shutup_unitialized(&dummy);
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  status = TrioFormat(&buffer, 0, TrioOutStreamString, format, dummy, args);
-  *buffer = NIL;
-  return status;
-}
-
-/*************************************************************************
- * snprintf
- */
-int
-trio_snprintf(char *buffer,
-             size_t bufferSize,
-             const char *format,
-             ...)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  va_start(args, format);
-  status = TrioFormat(&buffer, bufferSize > 0 ? bufferSize - 1 : 0,
-                     TrioOutStreamStringMax, format, args, NULL);
-  if (bufferSize > 0)
-    *buffer = NIL;
-  va_end(args);
-  return status;
-}
-
-int
-trio_vsnprintf(char *buffer,
-              size_t bufferSize,
-              const char *format,
-              va_list args)
-{
-  int status;
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  status = TrioFormat(&buffer, bufferSize > 0 ? bufferSize - 1 : 0,
-                     TrioOutStreamStringMax, format, args, NULL);
-  if (bufferSize > 0)
-    *buffer = NIL;
-  return status;
-}
-
-int
-trio_snprintfv(char *buffer,
-              size_t bufferSize,
-              const char *format,
-              void **args)
-{
-  int status;
-  va_list dummy;
-  shutup_unitialized(&dummy);
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  status = TrioFormat(&buffer, bufferSize > 0 ? bufferSize - 1 : 0,
-                     TrioOutStreamStringMax, format, dummy, args);
-  if (bufferSize > 0)
-    *buffer = NIL;
-  return status;
-}
-
-/*************************************************************************
- * snprintfcat
- * Appends the new string to the buffer string overwriting the '\0'
- * character at the end of buffer.
- */
-int
-trio_snprintfcat(char *buffer,
-                size_t bufferSize,
-                const char *format,
-                ...)
-{
-  int status;
-  va_list args;
-  size_t buf_len;
-
-  va_start(args, format);
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  buf_len = strlen(buffer);
-  buffer = &buffer[buf_len];
-
-  status = TrioFormat(&buffer, bufferSize - 1 - buf_len,
-                     TrioOutStreamStringMax, format, args, NULL);
-  va_end(args);
-  *buffer = NIL;
-  return status;
-}
-
-int
-trio_vsnprintfcat(char *buffer,
-                 size_t bufferSize,
-                 const char *format,
-                 va_list args)
-{
-  int status;
-  size_t buf_len;
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  buf_len = strlen(buffer);
-  buffer = &buffer[buf_len];
-  status = TrioFormat(&buffer, bufferSize - 1 - buf_len,
-                     TrioOutStreamStringMax, format, args, NULL);
-  *buffer = NIL;
-  return status;
-}
-
-/*************************************************************************
- * trio_aprintf
- */
-
-/* Deprecated */
-char *
-trio_aprintf(const char *format,
-            ...)
-{
-  va_list args;
-  struct dynamicBuffer info;
-
-  assert(VALID(format));
-  
-  info.buffer = NULL;
-  info.length = 0;
-  info.allocated = 0;
-
-  va_start(args, format);
-  (void)TrioFormat(&info, 0, TrioOutStreamStringDynamic, format, args, NULL);
-  va_end(args);
-  if (info.length) {
-    info.buffer[info.length] = NIL; /* we terminate this with a zero byte */
-    return info.buffer;
-  }
-  else
-    return NULL;
-}
-
-/* Deprecated */
-char *
-trio_vaprintf(const char *format,
-             va_list args)
-{
-  struct dynamicBuffer info;
-
-  assert(VALID(format));
-  
-  info.buffer = NULL;
-  info.length = 0;
-  info.allocated = 0;
-
-  (void)TrioFormat(&info, 0, TrioOutStreamStringDynamic, format, args, NULL);
-  if (info.length) {
-    info.buffer[info.length] = NIL; /* we terminate this with a zero byte */
-    return info.buffer;
-  }
-  else
-    return NULL;
-}
-
-int
-trio_asprintf(char **result,
-             const char *format,
-             ...)
-{
-  va_list args;
-  int status;
-  struct dynamicBuffer info;
-
-  assert(VALID(format));
-
-  info.buffer = NULL;
-  info.length = 0;
-  info.allocated = 0;
-
-  va_start(args, format);
-  status = TrioFormat(&info, 0, TrioOutStreamStringDynamic, format, args, NULL);
-  va_end(args);
-  if (status < 0) {
-     *result = NULL;
-     return status;
-  }
-  if (info.length == 0) {
-    /*
-     * If the length is zero, no characters have been written and therefore
-     * no memory has been allocated, but we must to allocate and return an
-     * empty string.
-     */
-    info.buffer = (char *)TRIO_MALLOC(sizeof(char));
-    if (info.buffer == NULL) {
-      *result = NULL;
-      return TRIO_ERROR_RETURN(TRIO_ENOMEM, 0);
-    }
-  }
-  info.buffer[info.length] = NIL; /* we terminate this with a zero byte */
-  *result = info.buffer;
-  
-  return status;
-}
-
-int
-trio_vasprintf(char **result,
-              const char *format,
-              va_list args)
-{
-  int status;
-  struct dynamicBuffer info;
-
-  assert(VALID(format));
-
-  info.buffer = NULL;
-  info.length = 0;
-  info.allocated = 0;
-
-  status = TrioFormat(&info, 0, TrioOutStreamStringDynamic, format, args, NULL);
-  if (status < 0) {
-     *result = NULL;
-     return status;
-  }
-  if (info.length == 0) {
-    info.buffer = (char *)TRIO_MALLOC(sizeof(char));
-    if (info.buffer == NULL) {
-      *result = NULL;
-      return TRIO_ERROR_RETURN(TRIO_ENOMEM, 0);
-    }
-  }
-  info.buffer[info.length] = NIL; /* we terminate this with a zero byte */
-  *result = info.buffer;
-  
-  return status;
-}
-
-
-/*************************************************************************
- *
- * @CALLBACK
- *
- ************************************************************************/
-
-
-/*************************************************************************
- * trio_register [public]
- */
-void *
-trio_register(trio_callback_t callback,
-             const char *name)
-{
-  userdef_T *def;
-  userdef_T *prev = NULL;
-
-  if (callback == NULL)
-    return NULL;
-
-  if (name)
-    {
-      /* Handle built-in namespaces */
-      if (name[0] == ':')
-       {
-         if (StrEqual(name, ":enter"))
-           {
-             internalEnterCriticalRegion = callback;
-           }
-         else if (StrEqual(name, ":leave"))
-           {
-             internalLeaveCriticalRegion = callback;
-           }
-         return NULL;
-       }
-      
-      /* Bail out if namespace is too long */
-      if (StrLength(name) >= MAX_USER_NAME)
-       return NULL;
-      
-      /* Bail out if namespace already is registered */
-      def = TrioFindNamespace(name, &prev);
-      if (def)
-       return NULL;
-    }
-  
-  def = (userdef_T *)TRIO_MALLOC(sizeof(userdef_T));
-  if (def)
-    {
-      if (internalEnterCriticalRegion)
-       (void)internalEnterCriticalRegion(NULL);
-      
-      if (name)
-       {
-         /* Link into internal list */
-         if (prev == NULL)
-           internalUserDef = def;
-         else
-           prev->next = def;
-       }
-      /* Initialize */
-      def->callback = callback;
-      def->name = (name == NULL)
-       ? NULL
-       : StrDuplicate(name);
-      def->next = NULL;
-
-      if (internalLeaveCriticalRegion)
-       (void)internalLeaveCriticalRegion(NULL);
-    }
-  return def;
-}
-
-/*************************************************************************
- * trio_unregister [public]
- */
-void
-trio_unregister(void *handle)
-{
-  userdef_T *self = (userdef_T *)handle;
-  userdef_T *def;
-  userdef_T *prev = NULL;
-
-  assert(VALID(self));
-
-  if (self->name)
-    {
-      def = TrioFindNamespace(self->name, &prev);
-      if (def)
-       {
-         if (internalEnterCriticalRegion)
-           (void)internalEnterCriticalRegion(NULL);
-         
-         if (prev == NULL)
-           internalUserDef = NULL;
-         else
-           prev->next = def->next;
-         
-         if (internalLeaveCriticalRegion)
-           (void)internalLeaveCriticalRegion(NULL);
-       }
-      StrFree(self->name);
-    }
-  TRIO_FREE(self);
-}
-
-/*************************************************************************
- * trio_get_format [public]
- */
-const char *
-trio_get_format(void *ref)
-{
-  assert(((reference_T *)ref)->parameter->type == FORMAT_USER_DEFINED);
-  
-  return (((reference_T *)ref)->parameter->user_data);
-}
-
-/*************************************************************************
- * trio_get_argument [public]
- */
-void *
-trio_get_argument(void *ref)
-{
-  assert(((reference_T *)ref)->parameter->type == FORMAT_USER_DEFINED);
-  
-  return ((reference_T *)ref)->parameter->data.pointer;
-}
-
-/*************************************************************************
- * trio_get_width / trio_set_width [public]
- */
-int
-trio_get_width(void *ref)
-{
-  return ((reference_T *)ref)->parameter->width;
-}
-
-void
-trio_set_width(void *ref,
-              int width)
-{
-  ((reference_T *)ref)->parameter->width = width;
-}
-
-/*************************************************************************
- * trio_get_precision / trio_set_precision [public]
- */
-int
-trio_get_precision(void *ref)
-{
-  return (((reference_T *)ref)->parameter->precision);
-}
-
-void
-trio_set_precision(void *ref,
-                  int precision)
-{
-  ((reference_T *)ref)->parameter->precision = precision;
-}
-
-/*************************************************************************
- * trio_get_base / trio_set_base [public]
- */
-int
-trio_get_base(void *ref)
-{
-  return (((reference_T *)ref)->parameter->base);
-}
-
-void
-trio_set_base(void *ref,
-             int base)
-{
-  ((reference_T *)ref)->parameter->base = base;
-}
-
-/*************************************************************************
- * trio_get_long / trio_set_long [public]
- */
-int
-trio_get_long(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_LONG);
-}
-
-void
-trio_set_long(void *ref,
-             int is_long)
-{
-  if (is_long)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_LONG;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_LONG;
-}
-
-/*************************************************************************
- * trio_get_longlong / trio_set_longlong [public]
- */
-int
-trio_get_longlong(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_QUAD);
-}
-
-void
-trio_set_longlong(void *ref,
-                 int is_longlong)
-{
-  if (is_longlong)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_QUAD;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_QUAD;
-}
-
-/*************************************************************************
- * trio_get_longdouble / trio_set_longdouble [public]
- */
-int
-trio_get_longdouble(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_LONGDOUBLE);
-}
-
-void
-trio_set_longdouble(void *ref,
-                   int is_longdouble)
-{
-  if (is_longdouble)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_LONGDOUBLE;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_LONGDOUBLE;
-}
-
-/*************************************************************************
- * trio_get_short / trio_set_short [public]
- */
-int
-trio_get_short(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_SHORT);
-}
-
-void
-trio_set_short(void *ref,
-              int is_short)
-{
-  if (is_short)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_SHORT;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_SHORT;
-}
-
-/*************************************************************************
- * trio_get_shortshort / trio_set_shortshort [public]
- */
-int
-trio_get_shortshort(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_SHORTSHORT);
-}
-
-void
-trio_set_shortshort(void *ref,
-              int is_shortshort)
-{
-  if (is_shortshort)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_SHORTSHORT;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_SHORTSHORT;
-}
-
-/*************************************************************************
- * trio_get_alternative / trio_set_alternative [public]
- */
-int
-trio_get_alternative(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_ALTERNATIVE);
-}
-
-void
-trio_set_alternative(void *ref,
-                    int is_alternative)
-{
-  if (is_alternative)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_ALTERNATIVE;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_ALTERNATIVE;
-}
-
-/*************************************************************************
- * trio_get_alignment / trio_set_alignment [public]
- */
-int
-trio_get_alignment(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_LEFTADJUST);
-}
-
-void
-trio_set_alignment(void *ref,
-                  int is_leftaligned)
-{
-  if (is_leftaligned)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_LEFTADJUST;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_LEFTADJUST;
-}
-
-/*************************************************************************
- * trio_get_spacing /trio_set_spacing [public]
- */
-int
-trio_get_spacing(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_SPACE);
-}
-
-void
-trio_set_spacing(void *ref,
-                int is_space)
-{
-  if (is_space)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_SPACE;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_SPACE;
-}
-
-/*************************************************************************
- * trio_get_sign / trio_set_sign [public]
- */
-int
-trio_get_sign(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_SHOWSIGN);
-}
-
-void
-trio_set_sign(void *ref,
-             int is_sign)
-{
-  if (is_sign)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_SHOWSIGN;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_SHOWSIGN;
-}
-
-/*************************************************************************
- * trio_get_padding / trio_set_padding [public]
- */
-int
-trio_get_padding(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_NILPADDING);
-}
-
-void
-trio_set_padding(void *ref,
-                int is_padding)
-{
-  if (is_padding)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_NILPADDING;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_NILPADDING;
-}
-
-/*************************************************************************
- * trio_get_quote / trio_set_quote [public]
- */
-int
-trio_get_quote(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_QUOTE);
-}
-
-void
-trio_set_quote(void *ref,
-              int is_quote)
-{
-  if (is_quote)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_QUOTE;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_QUOTE;
-}
-
-/*************************************************************************
- * trio_get_upper / trio_set_upper [public]
- */
-int
-trio_get_upper(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_UPPER);
-}
-
-void
-trio_set_upper(void *ref,
-              int is_upper)
-{
-  if (is_upper)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_UPPER;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_UPPER;
-}
-
-/*************************************************************************
- * trio_get_largest / trio_set_largest [public]
- */
-#if TRIO_C99
-int
-trio_get_largest(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_INTMAX_T);
-}
-
-void
-trio_set_largest(void *ref,
-                int is_largest)
-{
-  if (is_largest)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_INTMAX_T;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_INTMAX_T;
-}
-#endif
-
-/*************************************************************************
- * trio_get_ptrdiff / trio_set_ptrdiff [public]
- */
-int
-trio_get_ptrdiff(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_PTRDIFF_T);
-}
-
-void
-trio_set_ptrdiff(void *ref,
-                int is_ptrdiff)
-{
-  if (is_ptrdiff)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_PTRDIFF_T;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_PTRDIFF_T;
-}
-
-/*************************************************************************
- * trio_get_size / trio_set_size [public]
- */
-#if TRIO_C99
-int
-trio_get_size(void *ref)
-{
-  return (((reference_T *)ref)->parameter->flags & FLAGS_SIZE_T);
-}
-
-void
-trio_set_size(void *ref,
-             int is_size)
-{
-  if (is_size)
-    ((reference_T *)ref)->parameter->flags |= FLAGS_SIZE_T;
-  else
-    ((reference_T *)ref)->parameter->flags &= ~FLAGS_SIZE_T;
-}
-#endif
-
-/*************************************************************************
- * trio_print_int [public]
- */
-void
-trio_print_int(void *ref,
-              int number)
-{
-  reference_T *self = (reference_T *)ref;
-
-  TrioWriteNumber(self->data,
-                 (trio_intmax_t)number,
-                 self->parameter->flags,
-                 self->parameter->width,
-                 self->parameter->precision,
-                 self->parameter->base);
-}
-
-/*************************************************************************
- * trio_print_uint [public]
- */
-void
-trio_print_uint(void *ref,
-               unsigned int number)
-{
-  reference_T *self = (reference_T *)ref;
-
-  TrioWriteNumber(self->data,
-                 (trio_intmax_t)number,
-                 self->parameter->flags | FLAGS_UNSIGNED,
-                 self->parameter->width,
-                 self->parameter->precision,
-                 self->parameter->base);
-}
-
-/*************************************************************************
- * trio_print_double [public]
- */
-void
-trio_print_double(void *ref,
-                 double number)
-{
-  reference_T *self = (reference_T *)ref;
-
-  TrioWriteDouble(self->data,
-                 number,
-                 self->parameter->flags,
-                 self->parameter->width,
-                 self->parameter->precision,
-                 self->parameter->base);
-}
-
-/*************************************************************************
- * trio_print_string [public]
- */
-void
-trio_print_string(void *ref,
-                 char *string)
-{
-  reference_T *self = (reference_T *)ref;
-
-  TrioWriteString(self->data,
-                 string,
-                 self->parameter->flags,
-                 self->parameter->width,
-                 self->parameter->precision);
-}
-
-/*************************************************************************
- * trio_print_pointer [public]
- */
-void
-trio_print_pointer(void *ref,
-                  void *pointer)
-{
-  reference_T *self = (reference_T *)ref;
-  unsigned long flags;
-  trio_uintmax_t number;
-
-  if (NULL == pointer)
-    {
-      const char *string = null;
-      while (*string)
-       self->data->OutStream(self->data, *string++);
-    }
-  else
-    {
-      /*
-       * The subtraction of the null pointer is a workaround
-       * to avoid a compiler warning. The performance overhead
-       * is negligible (and likely to be removed by an
-       * optimising compiler). The (char *) casting is done
-       * to please ANSI C++.
-       */
-      number = (trio_uintmax_t)((char *)pointer - (char *)0);
-      /* Shrink to size of pointer */
-      number &= (trio_uintmax_t)-1;
-      flags = self->parameter->flags;
-      flags |= (FLAGS_UNSIGNED | FLAGS_ALTERNATIVE |
-               FLAGS_NILPADDING);
-      TrioWriteNumber(self->data,
-                     (trio_intmax_t)number,
-                     flags,
-                     POINTER_WIDTH,
-                     NO_PRECISION,
-                     BASE_HEX);
-    }
-}
-
-/*************************************************************************
- * trio_print_ref [public]
- */
-int
-trio_print_ref(void *ref,
-              const char *format,
-              ...)
-{
-  int status;
-  va_list arglist;
-
-  assert(VALID(format));
-  
-  va_start(arglist, format);
-  status = TrioFormatRef((reference_T *)ref, format, arglist, NULL);
-  va_end(arglist);
-  return status;
-}
-
-/*************************************************************************
- * trio_vprint_ref [public]
- */
-int
-trio_vprint_ref(void *ref,
-               const char *format,
-               va_list arglist)
-{
-  assert(VALID(format));
-  
-  return TrioFormatRef((reference_T *)ref, format, arglist, NULL);
-}
-
-/*************************************************************************
- * trio_printv_ref [public]
- */
-int
-trio_printv_ref(void *ref,
-               const char *format,
-               void **argarray)
-{
-  va_list dummy;
-  shutup_unitialized(&dummy);
-  
-  assert(VALID(format));
-  
-  return TrioFormatRef((reference_T *)ref, format, dummy, argarray);
-}
-
-
-/*************************************************************************
- *
- * @SCANNING
- *
- ************************************************************************/
-
-
-/*************************************************************************
- * TrioSkipWhitespaces [private]
- */
-static int
-TrioSkipWhitespaces(trio_T *self)
-{
-  int ch;
-
-  ch = self->current;
-  while (isspace(ch))
-    {
-      self->InStream(self, &ch);
-    }
-  return ch;
-}
-
-/*************************************************************************
- * TrioGetCollation [private]
- */
-#if TRIO_EXTENSION
-static void
-TrioGetCollation()
-{
-  int i;
-  int j;
-  int k;
-  char first[2];
-  char second[2];
-
-  /* This is computational expensive */
-  first[1] = NIL;
-  second[1] = NIL;
-  for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-    {
-      k = 0;
-      first[0] = (char)i;
-      for (j = 0; j < MAX_CHARACTER_CLASS; j++)
-       {
-         second[0] = (char)j;
-         if (StrEqualLocale(first, second))
-           internalCollationArray[i][k++] = (char)j;
-       }
-      internalCollationArray[i][k] = NIL;
-    }
-}
-#endif
-
-/*************************************************************************
- * TrioGetCharacterClass [private]
- *
- * FIXME:
- *  multibyte
- */
-static int
-TrioGetCharacterClass(const char *format,
-                     int *indexPointer,
-                     unsigned long *flagsPointer,
-                     int *characterclass)
-{
-  int index = *indexPointer;
-  int i;
-  char ch;
-  char range_begin;
-  char range_end;
-
-  *flagsPointer &= ~FLAGS_EXCLUDE;
-
-  if (format[index] == QUALIFIER_CIRCUMFLEX)
-    {
-      *flagsPointer |= FLAGS_EXCLUDE;
-      index++;
-    }
-  /*
-   * If the ungroup character is at the beginning of the scanlist,
-   * it will be part of the class, and a second ungroup character
-   * must follow to end the group.
-   */
-  if (format[index] == SPECIFIER_UNGROUP)
-    {
-      characterclass[(int)SPECIFIER_UNGROUP]++;
-      index++;
-    }
-  /*
-   * Minus is used to specify ranges. To include minus in the class,
-   * it must be at the beginning of the list
-   */
-  if (format[index] == QUALIFIER_MINUS)
-    {
-      characterclass[(int)QUALIFIER_MINUS]++;
-      index++;
-    }
-  /* Collect characters */
-  for (ch = format[index];
-       (ch != SPECIFIER_UNGROUP) && (ch != NIL);
-       ch = format[++index])
-    {
-      switch (ch)
-       {
-       case QUALIFIER_MINUS: /* Scanlist ranges */
-         
-         /*
-          * Both C99 and UNIX98 describes ranges as implementation-
-          * defined.
-          *
-          * We support the following behaviour (although this may
-          * change as we become wiser)
-          * - only increasing ranges, ie. [a-b] but not [b-a]
-          * - transitive ranges, ie. [a-b-c] == [a-c]
-          * - trailing minus, ie. [a-] is interpreted as an 'a'
-          *   and a '-'
-          * - duplicates (although we can easily convert these
-          *   into errors)
-          */
-         range_begin = format[index - 1];
-         range_end = format[++index];
-         if (range_end == SPECIFIER_UNGROUP)
-           {
-             /* Trailing minus is included */
-             characterclass[(int)ch]++;
-             ch = range_end;
-             break; /* for */
-           }
-         if (range_end == NIL)
-           return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-         if (range_begin > range_end)
-           return TRIO_ERROR_RETURN(TRIO_ERANGE, index);
-           
-         for (i = (int)range_begin; i <= (int)range_end; i++)
-           characterclass[i]++;
-           
-         ch = range_end;
-         break;
-         
-#if TRIO_EXTENSION
-
-       case SPECIFIER_GROUP:
-         
-         switch (format[index + 1])
-           {
-           case QUALIFIER_DOT: /* Collating symbol */
-             /*
-              * FIXME: This will be easier to implement when multibyte
-              * characters have been implemented. Until now, we ignore
-              * this feature.
-              */
-             for (i = index + 2; ; i++)
-               {
-                 if (format[i] == NIL)
-                   /* Error in syntax */
-                   return -1;
-                 else if (format[i] == QUALIFIER_DOT)
-                   break; /* for */
-               }
-             if (format[++i] != SPECIFIER_UNGROUP)
-               return -1;
-             
-             index = i;
-             break;
-         
-           case QUALIFIER_EQUAL: /* Equivalence class expressions */
-             {
-               unsigned int j;
-               unsigned int k;
-           
-               if (internalCollationUnconverted)
-                 {
-                   /* Lazy evalutation of collation array */
-                   TrioGetCollation();
-                   internalCollationUnconverted = FALSE;
-                 }
-               for (i = index + 2; ; i++)
-                 {
-                   if (format[i] == NIL)
-                     /* Error in syntax */
-                     return -1;
-                   else if (format[i] == QUALIFIER_EQUAL)
-                     break; /* for */
-                   else
-                     {
-                       /* Mark any equivalent character */
-                       k = (unsigned int)format[i];
-                       for (j = 0; internalCollationArray[k][j] != NIL; j++)
-                         characterclass[(int)internalCollationArray[k][j]]++;
-                     }
-                 }
-               if (format[++i] != SPECIFIER_UNGROUP)
-                 return -1;
-               
-               index = i;
-             }
-             break;
-         
-           case QUALIFIER_COLON: /* Character class expressions */
-         
-             if (StrEqualMax(CLASS_ALNUM, sizeof(CLASS_ALNUM) - 1,
-                             &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (isalnum(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_ALNUM) - 1;
-               }
-             else if (StrEqualMax(CLASS_ALPHA, sizeof(CLASS_ALPHA) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (isalpha(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_ALPHA) - 1;
-               }
-             else if (StrEqualMax(CLASS_CNTRL, sizeof(CLASS_CNTRL) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (iscntrl(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_CNTRL) - 1;
-               }
-             else if (StrEqualMax(CLASS_DIGIT, sizeof(CLASS_DIGIT) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (isdigit(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_DIGIT) - 1;
-               }
-             else if (StrEqualMax(CLASS_GRAPH, sizeof(CLASS_GRAPH) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (isgraph(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_GRAPH) - 1;
-               }
-             else if (StrEqualMax(CLASS_LOWER, sizeof(CLASS_LOWER) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (islower(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_LOWER) - 1;
-               }
-             else if (StrEqualMax(CLASS_PRINT, sizeof(CLASS_PRINT) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (isprint(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_PRINT) - 1;
-               }
-             else if (StrEqualMax(CLASS_PUNCT, sizeof(CLASS_PUNCT) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (ispunct(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_PUNCT) - 1;
-               }
-             else if (StrEqualMax(CLASS_SPACE, sizeof(CLASS_SPACE) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (isspace(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_SPACE) - 1;
-               }
-             else if (StrEqualMax(CLASS_UPPER, sizeof(CLASS_UPPER) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (isupper(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_UPPER) - 1;
-               }
-             else if (StrEqualMax(CLASS_XDIGIT, sizeof(CLASS_XDIGIT) - 1,
-                                  &format[index]))
-               {
-                 for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-                   if (isxdigit(i))
-                     characterclass[i]++;
-                 index += sizeof(CLASS_XDIGIT) - 1;
-               }
-             else
-               {
-                 characterclass[(int)ch]++;
-               }
-             break;
-
-           default:
-             characterclass[(int)ch]++;
-             break;
-           }
-         break;
-         
-#endif /* TRIO_EXTENSION */
-         
-       default:
-         characterclass[(int)ch]++;
-         break;
-       }
-    }
-  return 0;
-}
-
-/*************************************************************************
- * TrioReadNumber [private]
- *
- * We implement our own number conversion in preference of strtol and
- * strtoul, because we must handle 'long long' and thousand separators.
- */
-static BOOLEAN_T
-TrioReadNumber(trio_T *self,
-              trio_uintmax_t *target,
-              unsigned long flags,
-              int width,
-              int base)
-{
-  trio_uintmax_t number = 0;
-  int digit;
-  int count;
-  BOOLEAN_T isNegative = FALSE;
-  int j;
-
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-  assert((base >= MIN_BASE && base <= MAX_BASE) || (base == NO_BASE));
-
-  if (internalDigitsUnconverted)
-    {
-      /* Lazy evaluation of digits array */
-      memset(internalDigitArray, -1, sizeof(internalDigitArray));
-      for (j = 0; j < (int)sizeof(internalDigitsLower) - 1; j++)
-       {
-         internalDigitArray[(int)internalDigitsLower[j]] = j;
-         internalDigitArray[(int)internalDigitsUpper[j]] = j;
-       }
-      internalDigitsUnconverted = FALSE;
-    }
-  
-  TrioSkipWhitespaces(self);
-  
-  if (!(flags & FLAGS_UNSIGNED))
-    {
-      /* Leading sign */
-      if (self->current == '+')
-       {
-         self->InStream(self, NULL);
-       }
-      else if (self->current == '-')
-       {
-         self->InStream(self, NULL);
-         isNegative = TRUE;
-       }
-    }
-  
-  count = self->processed;
-  
-  if (flags & FLAGS_ALTERNATIVE)
-    {
-      switch (base)
-       {
-       case NO_BASE:
-       case BASE_OCTAL:
-       case BASE_HEX:
-       case BASE_BINARY:
-         if (self->current == '0')
-           {
-             self->InStream(self, NULL);
-             if (self->current)
-               {
-                 if ((base == BASE_HEX) &&
-                     (toupper(self->current) == 'X'))
-                   {
-                     self->InStream(self, NULL);
-                   }
-                 else if ((base == BASE_BINARY) &&
-                          (toupper(self->current) == 'B'))
-                   {
-                     self->InStream(self, NULL);
-                   }
-               }
-           }
-         else
-           return FALSE;
-         break;
-       default:
-         break;
-       }
-    }
-
-  while (((width == NO_WIDTH) || (self->processed - count < width)) &&
-        (! ((self->current == EOF) || isspace(self->current))))
-    {
-      if (isascii(self->current))
-       {
-         digit = internalDigitArray[self->current];
-         /* Abort if digit is not allowed in the specified base */
-         if ((digit == -1) || (digit >= base))
-           break;
-       }
-      else if (flags & FLAGS_QUOTE)
-       {
-         /* Compare with thousands separator */
-         for (j = 0; internalThousandSeparator[j] && self->current; j++)
-           {
-             if (internalThousandSeparator[j] != self->current)
-               break;
-
-             self->InStream(self, NULL);
-           }
-         if (internalThousandSeparator[j])
-           break; /* Mismatch */
-         else
-           continue; /* Match */
-       }
-      else
-       break;
-            
-      number *= base;
-      number += digit;
-
-      self->InStream(self, NULL);
-    }
-
-  /* Was anything read at all? */
-  if (self->processed == count)
-    return FALSE;
-  
-  if (target)
-    *target = (isNegative) ? -number : number;
-  return TRUE;
-}
-
-/*************************************************************************
- * TrioReadChar [private]
- */
-static int
-TrioReadChar(trio_T *self,
-            char *target,
-            unsigned long flags,
-            int width)
-{
-  int i;
-  char ch;
-  trio_uintmax_t number;
-  
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-
-  for (i = 0;
-       (self->current != EOF) && (i < width);
-       i++)
-    {
-      ch = (char)self->current;
-      self->InStream(self, NULL);
-      if ((flags & FLAGS_ALTERNATIVE) && (ch == CHAR_BACKSLASH))
-       {
-         switch (self->current)
-           {
-           case '\\': ch = '\\'; break;
-           case 'a': ch = '\007'; break;
-           case 'b': ch = '\b'; break;
-           case 'f': ch = '\f'; break;
-           case 'n': ch = '\n'; break;
-           case 'r': ch = '\r'; break;
-           case 't': ch = '\t'; break;
-           case 'v': ch = '\v'; break;
-           default:
-             if (isdigit(self->current))
-               {
-                 /* Read octal number */
-                 if (!TrioReadNumber(self, &number, 0, 3, BASE_OCTAL))
-                   return 0;
-                 ch = (char)number;
-               }
-             else if (toupper(self->current) == 'X')
-               {
-                 /* Read hexadecimal number */
-                 self->InStream(self, NULL);
-                 if (!TrioReadNumber(self, &number, 0, 2, BASE_HEX))
-                   return 0;
-                 ch = (char)number;
-               }
-             else
-               {
-                 ch = (char)self->current;
-               }
-             break;
-           }
-       }
-      
-      if (target)
-       target[i] = ch;
-    }
-  return i + 1;
-}
-
-/*************************************************************************
- * TrioReadString [private]
- */
-static BOOLEAN_T
-TrioReadString(trio_T *self,
-              char *target,
-              unsigned long flags,
-              int width)
-{
-  int i;
-  
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-
-  TrioSkipWhitespaces(self);
-    
-  /*
-   * Continue until end of string is reached, a whitespace is encountered,
-   * or width is exceeded
-   */
-  for (i = 0;
-       ((width == NO_WIDTH) || (i < width)) &&
-       (! ((self->current == EOF) || isspace(self->current)));
-       i++)
-    {
-      if (TrioReadChar(self, &target[i], flags, 1) == 0)
-       break; /* for */
-    }
-  if (target)
-    target[i] = NIL;
-  return TRUE;
-}
-
-/*************************************************************************
- * TrioReadWideChar [private]
- */
-#if TRIO_WIDECHAR
-static int
-TrioReadWideChar(trio_T *self,
-                wchar_t *target,
-                unsigned long flags,
-                int width)
-{
-  int i;
-  int j;
-  int size;
-  int amount = 0;
-  wchar_t wch;
-  char buffer[MB_LEN_MAX + 1];
-  
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-
-  for (i = 0;
-       (self->current != EOF) && (i < width);
-       i++)
-    {
-      if (isascii(self->current))
-       {
-         if (TrioReadChar(self, buffer, flags, 1) == 0)
-           return 0;
-         buffer[1] = NIL;
-       }
-      else
-       {
-         /*
-          * Collect a multibyte character, by enlarging buffer until
-          * it contains a fully legal multibyte character, or the
-          * buffer is full.
-          */
-         j = 0;
-         do
-           {
-             buffer[j++] = (char)self->current;
-             buffer[j] = NIL;
-             self->InStream(self, NULL);
-           }
-         while ((j < (int)sizeof(buffer)) && (mblen(buffer, (size_t)j) != j));
-       }
-      if (target)
-       {
-         size = mbtowc(&wch, buffer, sizeof(buffer));
-         if (size > 0)
-           target[i] = wch;
-       }
-      amount += size;
-      self->InStream(self, NULL);
-    }
-  return amount;
-}
-#endif /* TRIO_WIDECHAR */
-
-/*************************************************************************
- * TrioReadWideString [private]
- */
-#if TRIO_WIDECHAR
-static BOOLEAN_T
-TrioReadWideString(trio_T *self,
-                  wchar_t *target,
-                  unsigned long flags,
-                  int width)
-{
-  int i;
-  int size;
-  
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-
-  TrioSkipWhitespaces(self);
-
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  mblen(NULL, 0);
-#endif
-  
-  /*
-   * Continue until end of string is reached, a whitespace is encountered,
-   * or width is exceeded
-   */
-  for (i = 0;
-       ((width == NO_WIDTH) || (i < width)) &&
-       (! ((self->current == EOF) || isspace(self->current)));
-       )
-    {
-      size = TrioReadWideChar(self, &target[i], flags, 1);
-      if (size == 0)
-       break; /* for */
-
-      i += size;
-    }
-  if (target)
-    target[i] = L'\0';
-  return TRUE;
-}
-#endif /* TRIO_WIDECHAR */
-
-/*************************************************************************
- * TrioReadGroup [private]
- *
- * FIXME: characterclass does not work with multibyte characters
- */
-static BOOLEAN_T
-TrioReadGroup(trio_T *self,
-             char *target,
-             int *characterclass,
-             unsigned long flags,
-             int width)
-{
-  int ch;
-  int i;
-  
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-
-  ch = self->current;
-  for (i = 0;
-       ((width == NO_WIDTH) || (i < width)) &&
-       (! ((ch == EOF) ||
-          (((flags & FLAGS_EXCLUDE) != 0) ^ (characterclass[ch] == 0))));
-       i++)
-    {
-      if (target)
-       target[i] = (char)ch;
-      self->InStream(self, &ch);
-    }
-  
-  if (target)
-    target[i] = NIL;
-  return TRUE;
-}
-
-/*************************************************************************
- * TrioReadDouble [private]
- *
- * FIXME:
- *  add long double
- */
-static BOOLEAN_T
-TrioReadDouble(trio_T *self,
-              double *target,
-              unsigned long flags,
-              int width)
-{
-  int ch;
-  char doubleString[512] = "";
-  int index = 0;
-  int start;
-  int j;
-  BOOLEAN_T isHex = FALSE;
-
-  if ((width == NO_WIDTH) || (width > (int)sizeof(doubleString) - 1))
-    width = sizeof(doubleString) - 1;
-  
-  TrioSkipWhitespaces(self);
-  
-  /*
-   * Read entire double number from stream. StrToDouble requires a
-   * string as input, but InStream can be anything, so we have to
-   * collect all characters.
-   */
-  ch = self->current;
-  if ((ch == '+') || (ch == '-'))
-    {
-      doubleString[index++] = (char)ch;
-      self->InStream(self, &ch);
-      width--;
-    }
-
-  start = index;
-  switch (ch)
-    {
-    case 'n':
-    case 'N':
-      /* Not-a-number */
-      if (index != 0)
-       break;
-      /* FALLTHROUGH */
-    case 'i':
-    case 'I':
-      /* Infinity */
-      while (isalpha(ch) && (index - start < width))
-       {
-         doubleString[index++] = (char)ch;
-         self->InStream(self, &ch);
-       }
-      doubleString[index] = NIL;
-
-      /* Case insensitive string comparison */
-      if (StrEqual(&doubleString[start], INFINITE_UPPER) ||
-         StrEqual(&doubleString[start], LONG_INFINITE_UPPER))
-       {
-         *target = ((start == 1 && doubleString[0] == '-'))
-           ? -HUGE_VAL
-           : HUGE_VAL;
-         return TRUE;
-       }
-      if (StrEqual(doubleString, NAN_LOWER))
-       {
-         /* NaN must not have a preceeding + nor - */
-         *target = TrioGenerateNaN();
-         return TRUE;
-       }
-      return FALSE;
-      
-    default:
-      break;
-    }
-  
-  if (ch == '0')
-    {
-      doubleString[index++] = (char)ch;
-      self->InStream(self, &ch);
-      if (toupper(ch) == 'X')
-       {
-         isHex = TRUE;
-         doubleString[index++] = (char)ch;
-         self->InStream(self, &ch);
-       }
-    }
-  while ((ch != EOF) && (index - start < width))
-    {
-      /* Integer part */
-      if (isHex ? isxdigit(ch) : isdigit(ch))
-       {
-         doubleString[index++] = (char)ch;
-         self->InStream(self, &ch);
-       }
-      else if (flags & FLAGS_QUOTE)
-       {
-         /* Compare with thousands separator */
-         for (j = 0; internalThousandSeparator[j] && self->current; j++)
-           {
-             if (internalThousandSeparator[j] != self->current)
-               break;
-
-             self->InStream(self, &ch);
-           }
-         if (internalThousandSeparator[j])
-           break; /* Mismatch */
-         else
-           continue; /* Match */
-       }
-      else
-       break; /* while */
-    }
-  if (ch == '.')
-    {
-      /* Decimal part */
-      doubleString[index++] = (char)ch;
-      self->InStream(self, &ch);
-      while ((isHex ? isxdigit(ch) : isdigit(ch)) &&
-            (index - start < width))
-       {
-         doubleString[index++] = (char)ch;
-         self->InStream(self, &ch);
-       }
-      if (isHex ? (toupper(ch) == 'P') : (toupper(ch) == 'E'))
-       {
-         /* Exponent */
-         doubleString[index++] = (char)ch;
-         self->InStream(self, &ch);
-         if ((ch == '+') || (ch == '-'))
-           {
-             doubleString[index++] = (char)ch;
-             self->InStream(self, &ch);
-           }
-         while ((isHex ? isxdigit(ch) : isdigit(ch)) &&
-                (index - start < width))
-           {
-             doubleString[index++] = (char)ch;
-             self->InStream(self, &ch);
-           }
-       }
-    }
-
-  if ((index == start) || (*doubleString == NIL))
-    return FALSE;
-  
-  if (flags & FLAGS_LONGDOUBLE)
-/*     *longdoublePointer = StrToLongDouble()*/
-    return FALSE; /* FIXME: Remove when long double is implemented */
-  else
-    {
-      *target = StrToDouble(doubleString, NULL);
-    }
-  return TRUE;
-}
-
-/*************************************************************************
- * TrioReadPointer [private]
- */
-static BOOLEAN_T
-TrioReadPointer(trio_T *self,
-               void **target,
-               unsigned long flags)
-{
-  trio_uintmax_t number;
-  char buffer[sizeof(null)];
-
-  flags |= (FLAGS_UNSIGNED | FLAGS_ALTERNATIVE | FLAGS_NILPADDING);
-  
-  if (TrioReadNumber(self,
-                    &number,
-                    flags,
-                    POINTER_WIDTH,
-                    BASE_HEX))
-    {
-      /*
-       * The strange assignment of number is a workaround for a compiler
-       * warning
-       */
-      if (target)
-       *target = (char *)0 + number;
-      return TRUE;
-    }
-  else if (TrioReadString(self,
-                         (flags & FLAGS_IGNORE)
-                         ? NULL
-                         : buffer,
-                         0,
-                         sizeof(null) - 1))
-    {  
-      if (StrEqualCase(buffer, null))
-       {
-         if (target)
-           *target = NULL;
-         return TRUE;
-       }
-    }
-  return FALSE;
-}
-
-/*************************************************************************
- * TrioScan [private]
- */
-static int
-TrioScan(const void *source,
-        size_t sourceSize,
-        void (*InStream)(trio_T *, int *),
-        const char *format,
-        va_list arglist,
-        void **argarray)
-{
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  int charlen;
-#endif
-  int status;
-  int assignment;
-  parameter_T parameters[MAX_PARAMETERS];
-  trio_T internalData;
-  trio_T *data;
-  int ch;
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  int cnt;
-#endif
-  int index; /* Index of format string */
-  int i; /* Index of current parameter */
-  unsigned long flags;
-  int width;
-  int base;
-  void *pointer;
-
-  assert(VALID(InStream));
-  assert(VALID(format));
-
-  memset(&internalData, 0, sizeof(internalData));
-  data = &internalData;
-  data->InStream = InStream;
-  data->location = (void *)source;
-  data->max = sourceSize;
-
-#if defined(USE_LOCALE)
-  if (NULL == internalLocaleValues)
-    {
-      TrioSetLocale();
-    }
-#endif
-  
-  status = TrioPreprocess(TYPE_SCAN, format, parameters, arglist, argarray);
-  if (status < 0)
-    return status;
-
-  assignment = 0;
-  i = 0;
-  index = 0;
-  data->InStream(data, &ch);
-
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  mblen(NULL, 0);
-#endif
-
-  while (format[index])
-    {
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-      if (! isascii(format[index]))
-       {
-         charlen = mblen(&format[index], MB_LEN_MAX);
-         /* Compare multibyte characters in format string */
-         for (cnt = 0; cnt < charlen - 1; cnt++)
-           {
-             if (ch != format[index + cnt])
-               {
-                 return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-               }
-             data->InStream(data, &ch);
-           }
-         continue; /* while */
-       }
-#endif /* TRIO_COMPILER_SUPPORTS_MULTIBYTE */
-      if (EOF == ch)
-       return EOF;
-      
-      if (CHAR_IDENTIFIER == format[index])
-       {
-         if (CHAR_IDENTIFIER == format[index + 1])
-           {
-             /* Two % in format matches one % in input stream */
-             if (CHAR_IDENTIFIER == ch)
-               {
-                 data->InStream(data, &ch);
-                 index += 2;
-                 continue; /* while format chars left */
-               }
-             else
-               return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-           }
-
-         /* Skip the parameter entries */
-         while (parameters[i].type == FORMAT_PARAMETER)
-           i++;
-         
-         flags = parameters[i].flags;
-         /* Find width */
-         width = parameters[i].width;
-         if (flags & FLAGS_WIDTH_PARAMETER)
-           {
-             /* Get width from parameter list */
-             width = (int)parameters[width].data.number.as_signed;
-           }
-         /* Find base */
-         base = parameters[i].base;
-         if (flags & FLAGS_BASE_PARAMETER)
-           {
-             /* Get base from parameter list */
-             base = (int)parameters[base].data.number.as_signed;
-           }
-         
-         switch (parameters[i].type)
-           {
-           case FORMAT_INT:
-             {
-               trio_uintmax_t number;
-
-               if (0 == base)
-                 base = BASE_DECIMAL;
-
-               if (!TrioReadNumber(data,
-                                   &number,
-                                   flags,
-                                   width,
-                                   base))
-                 return assignment;
-               assignment++;
-               
-               if (!(flags & FLAGS_IGNORE))
-                 {
-                   pointer = parameters[i].data.pointer;
-#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
-                   if (flags & FLAGS_SIZE_T)
-                     *(size_t *)pointer = (size_t)number;
-                   else
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
-                   if (flags & FLAGS_PTRDIFF_T)
-                     *(ptrdiff_t *)pointer = (ptrdiff_t)number;
-                   else
-#endif
-#if defined(QUALIFIER_INTMAX_T)
-                   if (flags & FLAGS_INTMAX_T)
-                     *(trio_intmax_t *)pointer = (trio_intmax_t)number;
-                   else
-#endif
-                   if (flags & FLAGS_QUAD)
-                     *(trio_ulonglong_t *)pointer = (trio_ulonglong_t)number;
-                   else if (flags & FLAGS_LONG)
-                     *(long int *)pointer = (long int)number;
-                   else if (flags & FLAGS_SHORT)
-                     *(short int *)pointer = (short int)number;
-                   else
-                     *(int *)pointer = (int)number;
-                 }
-             }
-             break; /* FORMAT_INT */
-             
-           case FORMAT_STRING:
-#if TRIO_WIDECHAR
-             if (flags & FLAGS_WIDECHAR)
-               {
-                 if (!TrioReadWideString(data,
-                                         (flags & FLAGS_IGNORE)
-                                         ? NULL
-                                         : parameters[i].data.wstring,
-                                         flags,
-                                         width))
-                   return assignment;
-               }
-             else
-#endif
-               {
-                 if (!TrioReadString(data,
-                                     (flags & FLAGS_IGNORE)
-                                     ? NULL
-                                     : parameters[i].data.string,
-                                     flags,
-                                     width))
-                   return assignment;
-               }
-             assignment++;
-             break; /* FORMAT_STRING */
-             
-           case FORMAT_DOUBLE:
-             if (!TrioReadDouble(data,
-                                 (flags & FLAGS_IGNORE)
-                                 ? NULL
-                                 : parameters[i].data.doublePointer,
-                                 flags,
-                                 width))
-               return assignment;
-             assignment++;
-             break; /* FORMAT_DOUBLE */
-
-           case FORMAT_GROUP:
-             {
-               int characterclass[MAX_CHARACTER_CLASS + 1];
-               int rc;
-
-               /* Skip over modifiers */
-               while (format[index] != SPECIFIER_GROUP)
-                 {
-                   index++;
-                 }
-               /* Skip over group specifier */
-               index++;
-               
-               memset(characterclass, 0, sizeof(characterclass));
-               rc = TrioGetCharacterClass(format,
-                                          &index,
-                                          &flags,
-                                          characterclass);
-               if (rc < 0)
-                 return rc;
-
-               if (!TrioReadGroup(data,
-                                  (flags & FLAGS_IGNORE)
-                                  ? NULL
-                                  : parameters[i].data.string,
-                                  characterclass,
-                                  flags,
-                                  parameters[i].width))
-                 return assignment;
-               assignment++;
-             }
-             break; /* FORMAT_GROUP */
-             
-           case FORMAT_COUNT:
-             pointer = parameters[i].data.pointer;
-             if (NULL != pointer)
-               {
-#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
-                 if (flags & FLAGS_SIZE_T)
-                   *(size_t *)pointer = (size_t)data->committed;
-                 else
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
-                 if (flags & FLAGS_PTRDIFF_T)
-                   *(ptrdiff_t *)pointer = (ptrdiff_t)data->committed;
-                 else
-#endif
-#if defined(QUALIFIER_INTMAX_T)
-                 if (flags & FLAGS_INTMAX_T)
-                   *(trio_intmax_t *)pointer = (trio_intmax_t)data->committed;
-                 else
-#endif
-                 if (flags & FLAGS_QUAD)
-                   {
-                     *(trio_ulonglong_t *)pointer = (trio_ulonglong_t)data->committed;
-                   }
-                 else if (flags & FLAGS_LONG)
-                   {
-                     *(long int *)pointer = (long int)data->committed;
-                   }
-                 else if (flags & FLAGS_SHORT)
-                   {
-                     *(short int *)pointer = (short int)data->committed;
-                   }
-                 else
-                   {
-                     *(int *)pointer = (int)data->committed;
-                   }
-               }
-             break; /* FORMAT_COUNT */
-             
-           case FORMAT_CHAR:
-#if TRIO_WIDECHAR
-             if (flags & FLAGS_WIDECHAR)
-               {
-                 if (TrioReadWideChar(data,
-                                      (flags & FLAGS_IGNORE)
-                                      ? NULL
-                                      : parameters[i].data.wstring,
-                                      flags,
-                                      (width == NO_WIDTH) ? 1 : width) > 0)
-                   return assignment;
-               }
-             else
-#endif
-               {
-                 if (TrioReadChar(data,
-                                  (flags & FLAGS_IGNORE)
-                                  ? NULL
-                                  : parameters[i].data.string,
-                                  flags,
-                                  (width == NO_WIDTH) ? 1 : width) > 0)
-                   return assignment;
-               }
-             assignment++;
-             break; /* FORMAT_CHAR */
-             
-           case FORMAT_POINTER:
-             if (!TrioReadPointer(data,
-                                  (flags & FLAGS_IGNORE)
-                                  ? NULL
-                                  : (void **)parameters[i].data.pointer,
-                                  flags))
-               return assignment;
-             assignment++;
-             break; /* FORMAT_POINTER */
-             
-           case FORMAT_PARAMETER:
-             break; /* FORMAT_PARAMETER */
-             
-           default:
-             return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-           }
-         ch = data->current;
-         index = parameters[i].indexAfterSpecifier;
-         i++;
-       }
-      else /* Not an % identifier */
-       {
-         if (isspace((int)format[index]))
-           {
-             /* Whitespaces may match any amount of whitespaces */
-             ch = TrioSkipWhitespaces(data);
-           }
-         else if (ch == format[index])
-           {
-             data->InStream(data, &ch);
-           }
-         else
-           return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-         
-         index++;
-       }
-    }
-  return assignment;
-}
-
-/*************************************************************************
- * TrioInStreamFile [private]
- */
-static void
-TrioInStreamFile(trio_T *self,
-                int *intPointer)
-{
-  FILE *file = (FILE *)self->location;
-
-  assert(VALID(self));
-  assert(VALID(file));
-
-  self->current = fgetc(file);
-  self->processed++;
-  self->committed++;
-  
-  if (VALID(intPointer))
-    {
-      *intPointer = self->current;
-    }
-}
-
-/*************************************************************************
- * TrioInStreamFileDescriptor [private]
- */
-static void
-TrioInStreamFileDescriptor(trio_T *self,
-                          int *intPointer)
-{
-  int fd = *((int *)self->location);
-  int size;
-  unsigned char input;
-
-  assert(VALID(self));
-
-  size = read(fd, &input, sizeof(char));
-  self->current = (size == 0) ? EOF : input;
-  self->processed++;
-  self->committed++;
-  
-  if (VALID(intPointer))
-    {
-      *intPointer = self->current;
-    }
-}
-
-/*************************************************************************
- * TrioInStreamString [private]
- */
-static void
-TrioInStreamString(trio_T *self,
-                  int *intPointer)
-{
-  unsigned char **buffer;
-
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-  assert(VALID(self->location));
-
-  buffer = (unsigned char **)self->location;
-  self->current = (*buffer)[0];
-  if (self->current == NIL)
-    self->current = EOF;
-  (*buffer)++;
-  self->processed++;
-  self->committed++;
-  
-  if (VALID(intPointer))
-    {
-      *intPointer = self->current;
-    }
-}
-
-/*************************************************************************
- * scanf
- */
-int
-trio_scanf(const char *format,
-          ...)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(format));
-  
-  va_start(args, format);
-  status = TrioScan(stdin, 0, TrioInStreamFile, format, args, NULL);
-  va_end(args);
-  return status;
-}
-
-int
-trio_vscanf(const char *format,
-           va_list args)
-{
-  assert(VALID(format));
-  
-  return TrioScan(stdin, 0, TrioInStreamFile, format, args, NULL);
-}
-
-int
-trio_scanfv(const char *format,
-           void **args)
-{
-  va_list dummy;
-  shutup_unitialized(&dummy);
-  
-  assert(VALID(format));
-  
-  return TrioScan(stdin, 0, TrioInStreamFile, format, dummy, args);
-}
-
-/*************************************************************************
- * fscanf
- */
-int
-trio_fscanf(FILE *file,
-           const char *format,
-           ...)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(file));
-  assert(VALID(format));
-  
-  va_start(args, format);
-  status = TrioScan(file, 0, TrioInStreamFile, format, args, NULL);
-  va_end(args);
-  return status;
-}
-
-int
-trio_vfscanf(FILE *file,
-            const char *format,
-            va_list args)
-{
-  assert(VALID(file));
-  assert(VALID(format));
-  
-  return TrioScan(file, 0, TrioInStreamFile, format, args, NULL);
-}
-
-int
-trio_fscanfv(FILE *file,
-            const char *format,
-            void **args)
-{
-  va_list dummy;
-  shutup_unitialized(&dummy);
-  
-  assert(VALID(file));
-  assert(VALID(format));
-  
-  return TrioScan(file, 0, TrioInStreamFile, format, dummy, args);
-}
-
-/*************************************************************************
- * dscanf
- */
-int
-trio_dscanf(int fd,
-           const char *format,
-           ...)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(format));
-  
-  va_start(args, format);
-  status = TrioScan(&fd, 0, TrioInStreamFileDescriptor, format, args, NULL);
-  va_end(args);
-  return status;
-}
-
-int
-trio_vdscanf(int fd,
-            const char *format,
-            va_list args)
-{
-  assert(VALID(format));
-  
-  return TrioScan(&fd, 0, TrioInStreamFileDescriptor, format, args, NULL);
-}
-
-int
-trio_dscanfv(int fd,
-             const char *format,
-             void **args)
-{
-  va_list dummy;
-  shutup_unitialized(&dummy);
-  
-  assert(VALID(format));
-  
-  return TrioScan(&fd, 0, TrioInStreamFileDescriptor, format, dummy, args);
-}
-
-/*************************************************************************
- * sscanf
- */
-int
-trio_sscanf(const char *buffer,
-           const char *format,
-           ...)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-  
-  va_start(args, format);
-  status = TrioScan(&buffer, 0, TrioInStreamString, format, args, NULL);
-  va_end(args);
-  return status;
-}
-
-int
-trio_vsscanf(const char *buffer,
-            const char *format,
-            va_list args)
-{
-  assert(VALID(buffer));
-  assert(VALID(format));
-  
-  return TrioScan(&buffer, 0, TrioInStreamString, format, args, NULL);
-}
-
-int
-trio_sscanfv(const char *buffer,
-            const char *format,
-            void **args)
-{
-  va_list dummy;
-  shutup_unitialized(&dummy);
-  
-  assert(VALID(buffer));
-  assert(VALID(format));
-  
-  return TrioScan(&buffer, 0, TrioInStreamString, format, dummy, args);
-}
-
diff --git a/org.glite.lb-utils.trio/src/triop.h b/org.glite.lb-utils.trio/src/triop.h
deleted file mode 100644 (file)
index ca49fab..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 2000 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- ************************************************************************
- *
- * Private functions, types, etc. used for callback functions.
- *
- * The ref pointer is an opaque type and should remain as such.
- * Private data must only be accessible through the getter and
- * setter functions.
- *
- ************************************************************************/
-
-#ifndef TRIO_TRIOP_H
-#define TRIO_TRIOP_H
-
-#include <stdlib.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef TRIO_C99
-# define TRIO_C99 1
-#endif
-#ifndef TRIO_BSD
-# define TRIO_BSD 1
-#endif
-#ifndef TRIO_GNU
-# define TRIO_GNU 1
-#endif
-#ifndef TRIO_MISC
-# define TRIO_MISC 1
-#endif
-#ifndef TRIO_UNIX98
-# define TRIO_UNIX98 1
-#endif
-#ifndef TRIO_MICROSOFT
-# define TRIO_MICROSOFT 1
-#endif
-#ifndef TRIO_EXTENSION
-# define TRIO_EXTENSION 1
-#endif
-#ifndef TRIO_WIDECHAR
-# define TRIO_WIDECHAR 0
-#endif
-#ifndef TRIO_ERRORS
-# define TRIO_ERRORS 1
-#endif
-
-#ifndef TRIO_MALLOC
-# define TRIO_MALLOC(n) malloc(n)
-#endif
-#ifndef TRIO_REALLOC
-# define TRIO_REALLOC(x,n) realloc((x),(n))
-#endif
-#ifndef TRIO_FREE
-# define TRIO_FREE(x) free(x)
-#endif
-
-typedef int (*trio_callback_t)(void *ref);
-
-void *trio_register(trio_callback_t callback, const char *name);
-void trio_unregister(void *handle);
-
-const char *trio_get_format(void *ref);
-void *trio_get_argument(void *ref);
-
-/* Modifiers */
-int  trio_get_width(void *ref);
-void trio_set_width(void *ref, int width);
-int  trio_get_precision(void *ref);
-void trio_set_precision(void *ref, int precision);
-int  trio_get_base(void *ref);
-void trio_set_base(void *ref, int base);
-int  trio_get_padding(void *ref);
-void trio_set_padding(void *ref, int is_padding);
-int  trio_get_short(void *ref); /* h */
-void trio_set_shortshort(void *ref, int is_shortshort);
-int  trio_get_shortshort(void *ref); /* hh */
-void trio_set_short(void *ref, int is_short);
-int  trio_get_long(void *ref); /* l */
-void trio_set_long(void *ref, int is_long);
-int  trio_get_longlong(void *ref); /* ll */
-void trio_set_longlong(void *ref, int is_longlong);
-int  trio_get_longdouble(void *ref); /* L */
-void trio_set_longdouble(void *ref, int is_longdouble);
-int  trio_get_alternative(void *ref); /* # */
-void trio_set_alternative(void *ref, int is_alternative);
-int  trio_get_alignment(void *ref); /* - */
-void trio_set_alignment(void *ref, int is_leftaligned);
-int  trio_get_spacing(void *ref); /* (space) */
-void trio_set_spacing(void *ref, int is_space);
-int  trio_get_sign(void *ref); /* + */
-void trio_set_sign(void *ref, int is_showsign);
-int  trio_get_quote(void *ref); /* ' */
-void trio_set_quote(void *ref, int is_quote);
-int  trio_get_upper(void *ref);
-void trio_set_upper(void *ref, int is_upper);
-#if TRIO_C99
-int  trio_get_largest(void *ref); /* j */
-void trio_set_largest(void *ref, int is_largest);
-int  trio_get_ptrdiff(void *ref); /* t */
-void trio_set_ptrdiff(void *ref, int is_ptrdiff);
-int  trio_get_size(void *ref); /* z / Z */
-void trio_set_size(void *ref, int is_size);
-#endif
-
-/* Printing */
-int trio_print_ref(void *ref, const char *format, ...);
-int trio_vprint_ref(void *ref, const char *format, va_list args);
-int trio_printv_ref(void *ref, const char *format, void **args);
-
-void trio_print_int(void *ref, int number);
-void trio_print_uint(void *ref, unsigned int number);
-/*  void trio_print_long(void *ref, long number); */
-/*  void trio_print_ulong(void *ref, unsigned long number); */
-void trio_print_double(void *ref, double number);
-void trio_print_string(void *ref, char *string);
-void trio_print_pointer(void *ref, void *pointer);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* TRIO_TRIOP_H */
diff --git a/org.glite.lb-utils.trio/test/trio_test.cpp b/org.glite.lb-utils.trio/test/trio_test.cpp
deleted file mode 100644 (file)
index 3ba4b9c..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <iostream>
-
-#include <cppunit/extensions/HelperMacros.h>
-#include <cppunit/TestFixture.h>
-
-#include "trio.h"
-
-class TrioTest: public  CppUnit::TestFixture
-{
-       CPPUNIT_TEST_SUITE(TrioTest);
-       CPPUNIT_TEST(escapeULM);
-       CPPUNIT_TEST(escapeXML);
-       CPPUNIT_TEST(escapeSQL);
-       CPPUNIT_TEST_SUITE_END();
-
-public:
-       void escapeULM();
-       void escapeXML();
-       void escapeSQL();
-};
-
-void TrioTest::escapeULM()
-{
-       char    *e, *r = "START we have =, \\\", and \\n in the string END";
-
-       trio_asprintf(&e,"START %|Us END", "we have =, \", and \n in the string"),
-       std::cerr << e << std::endl;
-
-       CPPUNIT_ASSERT_MESSAGE("escape ULM failed",!strcmp(e,r));
-}
-
-void TrioTest::escapeXML()
-{
-       char    *e, *r = "START there is a &lt;tag&gt; containing &amp;something; &lt;/tag&gt; END";
-
-       trio_asprintf(&e,"START %|Xs END", "there is a <tag> containing &something; </tag>"),
-       std::cerr << e << std::endl;
-
-       CPPUNIT_ASSERT_MESSAGE("escape XML failed",!strcmp(e,r));
-}
-
-void TrioTest::escapeSQL()
-{
-       char    *e, *r = "START SQL doesn''t like '' END";
-
-       trio_asprintf(&e,"START %|Ss END", "SQL doesn't like '"),
-       std::cerr << e << std::endl;
-
-       CPPUNIT_ASSERT_MESSAGE("escape SQL failed",!strcmp(e,r));
-}
-
-CPPUNIT_TEST_SUITE_REGISTRATION( TrioTest );
-
-#include <assert.h>
-#include <fstream>
-
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/XmlOutputter.h>
-#include <cppunit/TestRunner.h>
-#include <cppunit/TestResult.h>
-#include <cppunit/TestResultCollector.h>
-
-int main (int argc,const char *argv[])
-{
-       CppUnit::Test *suite = CppUnit::TestFactoryRegistry::getRegistry().makeTest();
-
-       assert(argc == 2);
-       std::ofstream   xml(argv[1]);
-
-       CppUnit::TestResult controller;
-       CppUnit::TestResultCollector result;
-       controller.addListener( &result );
-
-       CppUnit::TestRunner runner;
-       runner.addTest(suite);
-       runner.run(controller);
-
-       CppUnit::XmlOutputter xout( &result, xml );
-       CppUnit::CompilerOutputter tout( &result, std::cout);
-       xout.write();
-       tout.write();
-
-       return result.wasSuccessful() ? 0 : 1 ;
-}
diff --git a/org.glite.lb-utils/.cvsignore b/org.glite.lb-utils/.cvsignore
deleted file mode 100644 (file)
index 3a4edf6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.project
diff --git a/org.glite.lb-utils/LICENSE b/org.glite.lb-utils/LICENSE
deleted file mode 100755 (executable)
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-utils/build.xml b/org.glite.lb-utils/build.xml
deleted file mode 100644 (file)
index 85553ce..0000000
+++ /dev/null
@@ -1,303 +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 lb-utils subsystem.
-       
-       Authors: Joachim Flammer <Joachim.Flammer@cern.ch>              
-       Version info: $Id$
-
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.10  2005/04/17 10:30:50  dimeglio
-       Added envset dependency
-
-       Revision 1.9  2005/04/17 10:29:26  dimeglio
-       Split module.build from version.properties
-       
-       Revision 1.8  2004/12/19 19:02:18  dimeglio
-       Updated (tag target is not needed anymore)
-       
-       Revision 1.7  2004/10/25 21:04:05  dimeglio
-       New copyright
-       
-       Revision 1.6  2004/09/29 12:55:17  flammer
-       Update of subsystem template.
-       
-       Revision 1.5  2004/07/20 16:08:02  flammer
-       Changed incorrect my_... instead of .._template entries for subsystem and component.
-       
-       Revision 1.4  2004/07/16 14:56:55  flammer
-       Corrected input path of build.properties.
-       
-       Revision 1.3  2004/07/06 20:35:31  flammer
-       Update of configure & targets.
-       
-       Revision 1.2  2004/06/18 12:30:12  flammer
-       Updating tags to be able to automatically add component via script.
-       
-       Revision 1.1.1.1  2004/06/07 16:00:38  flammer
-       Added template for org.glite subsystem.
-       
-       
--->
-
-<project name="lb-utils" default="dist">
-
-       <description>
-               Ant build file to build the lb-utils subsystem.
-       </description>
-               
-       <!-- =========================================
-                Builds the GLite lb-utils 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 configuration definitions
-            ========================================= -->
-       <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}"/>
-       <property file="${module.build.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">
-
-               <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="localinit">
-               <antcall target="buildmodules">
-                       <param name="target" value="cleanAll"/>
-               </antcall>
-       </target>
-
-       <!-- ===============================================
-                Private targets
-            =============================================== -->
-
-       <!-- ===============================================
-                Modules proxy targets
-            =============================================== -->
-
-       <!-- component targets definitions tag = do not remove = -->
-
-       <if>
-               <isset property="setenvonly"/>
-               <then>
-                       <property name="lbonly" value="yes"/>
-               </then>
-       </if>
-
-       <target name="db" unless="setenvonly" depends="envset">
-               <if>
-                       <isset property="small.memory" />
-                       <then>
-                               <exec dir="${lb-utils.subsystem.dir}.db" 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-utils.subsystem.dir}.db"
-                                    target="${target}"
-                                    inheritall="false" />
-                       </else>
-               </if>
-       </target>
-
-<!--   <target name="server-bones" unless="setenvonly" depends="envset">
-               <if>
-                       <isset property="small.memory" />
-                       <then>
-                               <exec dir="${lb-utils.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-utils.subsystem.dir}.server-bones"
-                                    target="${target}"
-                                    inheritall="false" />
-                       </else>
-               </if>
-       </target>
-
-       <target name="jobid" unless="setenvonly" depends="envset">
-               <if>
-                       <isset property="small.memory" />
-                       <then>
-                               <exec dir="${lb-utils.subsystem.dir}.jobid" 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-utils.subsystem.dir}.jobid"
-                                    target="${target}"
-                                    inheritall="false" />
-                       </else>
-               </if>
-       </target>
-
-       <target name="trio" unless="setenvonly" depends="envset">
-               <if>
-                       <isset property="small.memory" />
-                       <then>
-                               <exec dir="${lb-utils.subsystem.dir}.trio" 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-utils.subsystem.dir}.trio"
-                                    target="${target}"
-                                    inheritall="false" />
-                       </else>
-               </if>
-       </target>-->
-
-       <!-- Main proxy -->
-<!--   <target name="buildmodules" depends="envset,
-                                            db, 
-                                            jobid,
-                                            trio,
-                                            server-bones">-->
-       <target name="buildmodules" depends="envset,
-                                            db">
-               <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-utils/project/build.number b/org.glite.lb-utils/project/build.number
deleted file mode 100644 (file)
index 5cfec85..0000000
+++ /dev/null
@@ -1 +0,0 @@
-module.build = 0\r
diff --git a/org.glite.lb-utils/project/build.properties b/org.glite.lb-utils/project/build.properties
deleted file mode 100755 (executable)
index e69de29..0000000
diff --git a/org.glite.lb-utils/project/dependencies.properties b/org.glite.lb-utils/project/dependencies.properties
deleted file mode 100644 (file)
index c590a39..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-###################################################################
-# System dependencies
-###################################################################
-
-org.glite.version                              = HEAD
-org.glite.lb-utils.version                     = HEAD
-
-# Component dependencies tag = do not remove this line =
-org.glite.lb-utils.db.version                  = HEAD
-#org.glite.lb-utils.jobid.version              = HEAD
-#org.glite.lb-utils.server-bones.version       = HEAD
-#org.glite.lb-utils.trio.version               = HEAD
diff --git a/org.glite.lb-utils/project/glite.lb-utils.csf.xml b/org.glite.lb-utils/project/glite.lb-utils.csf.xml
deleted file mode 100644 (file)
index 98945b8..0000000
+++ /dev/null
@@ -1,218 +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 lb-utils Configuration Specification File
-       
-       Authors: Joachim Flammer <Joachim.Flammer@cern.ch>      
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.3  2004/10/19 20:20:30  dimeglio
-       Updte template
-
-       
--->
-
-
-<project name="GLite Middleware lb-utils 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-utils.head">
-                       <and>
-                               <equals arg1="${org.glite.lb-utils.version}" arg2="HEAD" />
-                               <istrue value="${update}" />
-                       </and>
-               </condition>
-               
-               <condition property="glite-lb-utils.tag">
-                       <and>
-                               <not>
-                                       <equals arg1="${org.glite.lb-utils.version}" arg2="HEAD" />
-                               </not>
-                               <istrue value="${update}" />
-                       </and>
-               </condition>
-
-               <!-- condition property tag = do not remove = -->
-
-       </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.lb-utils" depends="get.glite-lb-utils.head, 
-                                                               get.glite-lb-utils.tag"/>
-
-       <target name="get.glite-lb-utils.head" if="glite-lb-utils.head">
-               <cvs-co package="org.glite.lb-utils" />
-               <fail>The org.glite and org.glite.lb-utils modules have been updated, please rerun the configuration file</fail>
-       </target>
-
-       <target name="get.glite-lb-utils.tag" if="glite-lb-utils.tag">
-               <cvs-co package="org.glite.lb-utils"
-                       tag="${org.glite.lb-utils.version}" />
-               <fail>The org.glite and org.glite.lb-utils 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" depends="oscheck"
-               description="Install external packages"/>
-       
-       <!-- =====================================================
-                GLite Middleware lb-utils 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.glite.lb-utils,
-                                       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-utils/project/properties.xml b/org.glite.lb-utils/project/properties.xml
deleted file mode 100644 (file)
index 5f9597f..0000000
+++ /dev/null
@@ -1,64 +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-utils subsystem.
-       
-       Authors: Joachim Flammer <Joachim.Flammer@cern.ch>
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.3  2004/07/20 16:08:02  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.1.1  2004/06/07 16:00:38  flammer
-       Added template for org.glite subsystem.
-       
-       
--->
-
-<project name="lb-utils 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-utils.subsystem.name}"/>
-       
-       <!-- Subsystem prefix -->
-       <property name="subsystem.prefix" value="${lb-utils.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.lb-utils/project/taskdefs.xml b/org.glite.lb-utils/project/taskdefs.xml
deleted file mode 100644 (file)
index 7963150..0000000
+++ /dev/null
@@ -1,38 +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 lb-utils subsystem
-       
-       Authors: Joachim Flammer <Joachim.Flammer@cern.ch>              
-       Version info: $Id$
-       Release: $Name$
-
-       Revision history:
-       $Log$
-       Revision 1.2  2004/08/02 10:33:38  flammer
-       Corrected name in documentation part.
-
-       Revision 1.1.1.1  2004/06/07 16:00:38  flammer
-       Added template for org.glite subsystem.
-       
-       
--->
-
-<project name="lb-utils subsystem common tasks and types definitions">
-       
-       <!-- ======================================================
-                Subsystem task definitions
-            ====================================================== -->
-       
-</project>
diff --git a/org.glite.lb-utils/project/version.properties b/org.glite.lb-utils/project/version.properties
deleted file mode 100755 (executable)
index 6f1f8ab..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-module.version = 0.0.0
-module.age = 0
\ No newline at end of file
index ee12a59..0d22906 100644 (file)
@@ -65,22 +65,25 @@ distbin:
        rm -rf ${top_srcdir}/tmpbuilddir
        
 doc: generate 
+       cp ${top_srcdir}/doc/*.dox .
+       echo "PROJECT_NUMBER = ${version}" >> C.dox
+       echo "PROJECT_NUMBER = ${version}" >> CPP.dox
        doxygen C.dox
        doxygen CPP.dox
 
-install: generate 
+install: generate doc
        -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}
 ifndef LB_STANDALONE
-       cd ${top_srcdir}/doc && cp -r C CPP ${PREFIX}/share/doc/${package}-${version}
+       cp -r C CPP ${PREFIX}/share/doc/${package}-${version}
 endif
        if [ x${DOSTAGE} = xyes ]; then \
                cd ${top_srcdir}/interface && install -m 644 ${FAKE_H} ${PREFIX}/${STAGETO} ; \
        fi
 
 clean:
-       rm -f *.h
+       rm -f *.h *.dox
        
diff --git a/org.glite.lb.client-interface/doc/C.dox b/org.glite.lb.client-interface/doc/C.dox
new file mode 100644 (file)
index 0000000..5ec7442
--- /dev/null
@@ -0,0 +1,19 @@
+PROJECT_NAME          = "Glite LB Client: C - Interface"
+OUTPUT_DIRECTORY      = C
+OPTIMIZE_OUTPUT_FOR_C = YES
+INPUT                 = ./events.h \
+                        ./jobstat.h \
+                        ./producer.h \
+                        ../interface/context.h \
+                        ../interface/notifid.h \
+                        ../interface/notification.h \
+                        ../interface/consumer.h 
+SHOW_DIRECTORIES      = NO
+FULL_PATH_NAMES       = NO
+EXTRACT_ALL           = YES
+PDF_HYPERLINKS        = YES
+USE_PDFLATEX          = YES
+MACRO_EXPANSION       = YES
+EXPAND_ONLY_PREDEF    = YES
+PREDEFINED            = _EDG_WLL_EVENT_COMMON 
+HAVE_DOT              = NO
diff --git a/org.glite.lb.client-interface/doc/CPP.dox b/org.glite.lb.client-interface/doc/CPP.dox
new file mode 100644 (file)
index 0000000..1ee044c
--- /dev/null
@@ -0,0 +1,16 @@
+PROJECT_NAME           = "Glite LB Client: CPP - Interface"
+OUTPUT_DIRECTORY       = CPP
+INPUT                  = ../build/Event.h \
+                         ../build/JobStatus.h \
+                         ../interface/Job.h \
+                         ../interface/CountRef.h \
+                         ../interface/LoggingExceptions.h \
+                         ../interface/ServerConnection.h \
+                         ../interface/Notification.h
+SHOW_DIRECTORIES       = NO
+FULL_PATH_NAMES        = NO
+EXTRACT_ALL            = YES
+PDF_HYPERLINKS         = YES
+USE_PDFLATEX           = YES
+#HAVE_DOT               = YES
+#CALL_GRAPH             = YES
index 69601b2..422e9f3 100644 (file)
@@ -1,31 +1,32 @@
 # 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
 
+
 CC:=gcc
 CXX:=g++
 
 -include Makefile.inc
 -include ../project/version.properties
 
+PREFIX?=${glite_location}
+
 version=${module.version}
 
 VPATH=${top_srcdir}/src:${top_srcdir}/test:${top_srcdir}/examples:${top_srcdir}/doc
 AT3=perl -I${top_srcdir}/project ${top_srcdir}/project/at3
 GENSAM=${top_srcdir}/examples/gen_sample_job
+CHECK_VERSION:=VERSION=${version} VERSION_AHEAD=0 perl ${top_srcdir}/project/check_version.pl
 
 SUFFIXES = .T .l
 
@@ -60,8 +61,11 @@ l_SRC = \
 
 sh_PROGS = $(l_SRC:.l=.sh)
 
-
-DEBUG:=-g -O0 -Wall
+ifdef DEBUG
+        DEBUG:=-g -O0 -Wall -DEDG_WLL_LOG_STUB
+else
+        DEBUG:=-g -O0 -Wall
+endif
 
 GLOBUSINC:= -I${globus_prefix}/include/${nothrflavour}
 GLOBUSTHRINC:= -I${globus_prefix}/include/${thrflavour}
@@ -141,37 +145,37 @@ MAN = $(MAN_GZ:.gz=)
 
 # version_info=-version-info `echo ${version} | cut -d. -f1,2 | tr . :`
 
-# counted minor versions: 2.1
-offset=1
+# counted minor versions: 
+offset=0
 
 version_info:=-version-info ${shell \
        perl -e '$$,=":"; @F=split "\\.","${version}"; print $$F[0]+$$F[1]+${offset},$$F[2],$$F[1]' }
 
 ${LIB}: ${LIBOBJS}
-       ${LINK} ${version_info} -o $@ ${LIBLOBJS} -rpath ${glite_location}/lib \
+       ${LINK} ${version_info} -o $@ ${LIBLOBJS} -rpath ${PREFIX}/lib \
                        ${COMMON_LIB} \
                        -lglite_security_gss_${nothrflavour}
 
 ${THRLIB}: ${LIBTHROBJS}
-       ${LINK} ${version_info} -o $@ ${LIBTHRLOBJS} -rpath ${glite_location}/lib \
+       ${LINK} ${version_info} -o $@ ${LIBTHRLOBJS} -rpath ${PREFIX}/lib \
                        ${COMMON_LIB_THR} \
                        -lglite_security_gss_${thrflavour}
 
 ${FAKELIB}: ${FAKELIBOBJS}
-       ${LINK} ${version_info} -o $@ ${FAKELIBLOBJS} -rpath ${glite_location}/lib \
+       ${LINK} ${version_info} -o $@ ${FAKELIBLOBJS} -rpath ${PREFIX}/lib \
                        ${COMMON_LIB} \
                        -lglite_security_gss_${nothrflavour}
 
 ${FAKETHRLIB}: ${FAKELIBTHROBJS}
-       ${LINK} ${version_info} -o $@ ${FAKELIBTHRLOBJS} -rpath ${glite_location}/lib \
+       ${LINK} ${version_info} -o $@ ${FAKELIBTHRLOBJS} -rpath ${PREFIX}/lib \
                        ${COMMON_LIB_THR} \
                        -lglite_security_gss_${thrflavour}
 
 ${PLUSLIB}: ${PLUSOBJS}
-       ${LINK} ${version_info} -o $@ ${PLUSLOBJS} -rpath ${glite_location}/lib ${LIB}
+       ${LINK} ${version_info} -o $@ ${PLUSLOBJS} -rpath ${PREFIX}/lib ${LIB}
 
 ${THRPLUSLIB}: ${PLUSTHROBJS}
-       ${LINK} ${version_info} -o $@ ${PLUSTHRLOBJS} -rpath ${glite_location}/lib ${THRLIB}
+       ${LINK} ${version_info} -o $@ ${PLUSTHRLOBJS} -rpath ${PREFIX}/lib ${THRLIB}
 
 logevent: logevent.o args.o
        ${LINK} -o $@ logevent.o args.o ${LIB} ${EXT_LIB} 
@@ -304,13 +308,6 @@ endif
 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
+       ${CHECK_VERSION} ${stagedir}/include/glite/lb/interface_version.h
 
 .PHONY: default all compile examples fake check stage dist distsrc distbin install clean check_version
index b1eb812..01b529b 100755 (executable)
@@ -20,6 +20,9 @@
 
        Revision history:
        $Log$
+       Revision 1.6  2005/05/26 15:13:40  zurek
+       inserted module.build.file
+
        Revision 1.5  2004/10/18 19:16:09  zsalvet
        RPM descriptions
        
                                <include name="at3" />
                                <include name="*.T" />
                                <include name="*.pm" />
+                               <include name="check_version.pl" />
                        </fileset>
                </copy> 
                <antcall target="lbmakefiles" />
index bcc5083..024f343 100755 (executable)
@@ -31,7 +31,7 @@ while test -n "$1"
 do
        case "$1" in 
        "-m") shift; BKSERVER_HOST="$1" ;;
-       "-x") LBPROXY="-x -S $1" ;;
+       "-x") LBPROXY="-x" ;;
        "-X") shift; LBPROXY="-x"; LBPROXY_STORE_SOCK="-S $1" ;;
        "-j") shift; EDG_JOBID="$1" ;;
        "-l") shift; LARGE_STRESS="-l $1" ;;
index 696202d..9a244ab 100644 (file)
@@ -131,7 +131,7 @@ int main(int argc,char *argv[])
 static void
 usage(char *name)
 {
-       fprintf(stderr,"Usage: %s job_id [-x lb_proxy_serve_sock] [job_id [...]]\n", name);
+       fprintf(stderr,"Usage: %s [-x lb_proxy_serve_sock] job_id [job_id...]\n", name);
        fprintf(stderr,"       %s -all\n", name);
 }
 
@@ -175,7 +175,7 @@ dgerr(edg_wll_Context ctx,char *where)
 
 static void printstat(edg_wll_JobStat stat, int level)
 {
-       char            *s, *j, ind[10];
+       char            *s, *j1,*j2, ind[10];
        int             i;
 
 
@@ -186,11 +186,11 @@ static void printstat(edg_wll_JobStat stat, int level)
        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("%sjobId : %s\n", ind, j1 = 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));
+                       j2 = 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);
@@ -257,7 +257,8 @@ static void printstat(edg_wll_JobStat stat, int level)
 
        printf("\n");   
        
-       free(j);
+       free(j1);
+       free(j2);
        free(s);
 }
 
index 4ca504f..fc29565 100644 (file)
@@ -20,6 +20,9 @@
 
        Revision history:
        $Log$
+       Revision 1.8  2006/09/20 10:50:08  zsalvet
+       Remove CVS conflict section.
+
        Revision 1.7  2006/09/19 20:27:40  akrenek
        Builds after merge _RC31
 
@@ -61,7 +64,7 @@ distdir=${dist.dir}
 globalprefix=${global.prefix}
 lbprefix=${subsystem.prefix}
 package=${module.package.name}
-PREFIX=${install.dir}
+PREFIX=${install.dir}
 version=${module.version}
 glite_location=${with.glite.location}
 globus_prefix=${with.globus.prefix}
index c4facf2..0441055 100644 (file)
@@ -1,4 +1,4 @@
 #Fri Sep 02 14:17:41 CEST 2005
 # glite-lb-client_branch_3_0_0_RC15 tag is taken!
-module.version=2.2.3
-module.age=0
+module.version=2.2.6
+module.age=2
index a652916..456f3f2 100644 (file)
 int edg_wll_log_proto_handle_gss_failures(edg_wll_Context context, int code, edg_wll_GssStatus *gss_code, const char *text)
 {
         static char     err[256];
-        int             ret = 0;
+        int             myerrno, ret;
+
+       myerrno = errno;
+       ret = 0;
 
        edg_wll_ResetError(context);
 
@@ -40,8 +43,14 @@ int edg_wll_log_proto_handle_gss_failures(edg_wll_Context context, int code, edg
                        ret = edg_wll_SetError(context,ENOTCONN,err);
                        break;
                case EDG_WLL_GSS_ERROR_ERRNO: 
-                       snprintf(err, sizeof(err), "%s;; GSS Error: system error occured;", text);      
-                       ret = edg_wll_SetError(context,ENOTCONN,err);
+                       {
+                               const char *msg1;
+                               char *msg2;
+                               msg1 = strerror(myerrno);
+                               asprintf(&msg2, "%s;; System Error: %s", text, msg1);
+                               ret = edg_wll_SetError(context,ENOTCONN,msg2);
+                               free(msg2);
+                       }
                        break;
                 case EDG_WLL_GSS_ERROR_GSS:
                        snprintf(err, sizeof(err), "%s;; GSS Error: GSS failure occured", text);
@@ -51,7 +60,7 @@ int edg_wll_log_proto_handle_gss_failures(edg_wll_Context context, int code, edg
                         { 
                                 const char *msg1;
                                 char *msg2;
-                                msg1 = hstrerror(errno);
+                                msg1 = hstrerror(myerrno);
                                 asprintf(&msg2, "%s;; GSS Error: %s", text, msg1);
                                 ret = edg_wll_SetError(context,EDG_WLL_ERROR_DNS, msg2);
                                 free(msg2);
@@ -80,8 +89,10 @@ plain_reader(void *user_data, char *buffer, int max_len)
        int len;
 
        len = edg_wll_plain_read_full(data->conn, buffer, max_len, &data->ctx->p_tmp_timeout);
-       if(len < 0) 
-               edg_wll_SetError(data->ctx, EDG_WLL_IL_PROTO, "plain_reader(): error reading message data");
+       if(len < 0) {
+               edg_wll_SetError(data->ctx, errno, "edg_wll_plain_read_full()");
+               edg_wll_UpdateError(data->ctx, EDG_WLL_IL_PROTO, "plain_reader(): error reading message data");
+       }
 
        return(len);
 }
@@ -152,12 +163,15 @@ get_reply_gss(edg_wll_Context context, edg_wll_GssConnection *conn, char **buf,
        data.conn = conn;
        code = read_il_data(&data, &msg, gss_reader);
        if(code < 0) {
-               edg_wll_SetError(context, EDG_WLL_IL_PROTO, "get_reply_gss(): error reading reply");
+               edg_wll_UpdateError(context, EDG_WLL_IL_PROTO, "get_reply_gss(): error reading reply");
                goto get_reply_gss_end;
        }
 
        if(decode_il_reply(code_maj, code_min, buf, msg) < 0) {
-               edg_wll_SetError(context, EDG_WLL_IL_PROTO, "get_reply_gss(): error decoding reply");
+               char *et;
+               asprintf(&et,"get_reply_gss(): error decoding reply \"%s\"", msg);
+               edg_wll_UpdateError(context, EDG_WLL_IL_PROTO, et);
+               if (et) free(et);
                goto get_reply_gss_end;
        }
 
@@ -296,7 +310,8 @@ int edg_wll_log_proto_client_proxy(edg_wll_Context context, edg_wll_PlainConnect
                len = encode_il_msg(&buffer, &ll);
        }
        if(len < 0) {
-               edg_wll_SetError(context,ENOMEM,"edg_wll_log_proto_client_proxy(): error encoding message");
+               edg_wll_SetError(context,errno,"encode_il_msg()");
+               edg_wll_UpdateError(context,ENOMEM,"edg_wll_log_proto_client_proxy(): error encoding message");
                goto edg_wll_log_proto_client_proxy_end;
        }
 
@@ -305,7 +320,8 @@ int edg_wll_log_proto_client_proxy(edg_wll_Context context, edg_wll_PlainConnect
        fprintf(stderr,"log_proto_client_proxy: sending message...\n");
 #endif
        if (( count = edg_wll_plain_write_full(conn, buffer, len, &context->p_tmp_timeout)) < 0) {
-               edg_wll_SetError(context, EDG_WLL_IL_PROTO,"edg_wll_log_proto_client_proxy(): error sending message to socket");
+               edg_wll_SetError(context, errno, "edg_wll_plain_write_full()");
+               edg_wll_UpdateError(context, EDG_WLL_IL_PROTO,"edg_wll_log_proto_client_proxy(): error sending message to socket");
                goto edg_wll_log_proto_client_proxy_end;
        }
 
@@ -314,7 +330,7 @@ int edg_wll_log_proto_client_proxy(edg_wll_Context context, edg_wll_PlainConnect
        fprintf(stderr,"log_proto_client_proxy: reading answer from server...\n");
 #endif
        if ((err = get_reply_plain(context, conn, &answer, &lbproto_code, &code)) != 0 ) {
-               edg_wll_SetError(context, EDG_WLL_IL_PROTO,"edg_wll_log_proto_client_proxy(): error reading answer from L&B Proxy server");
+               edg_wll_UpdateError(context, EDG_WLL_IL_PROTO,"edg_wll_log_proto_client_proxy(): error reading answer from L&B Proxy server");
        } else {
 #ifdef EDG_WLL_LOG_STUB
                fprintf(stderr,"log_proto_client_proxy: read answer \"%d:%d: %s\"\n",lbproto_code,code,answer);
@@ -377,7 +393,8 @@ int edg_wll_log_proto_client_direct(edg_wll_Context context, edg_wll_GssConnecti
                len = encode_il_msg(&buffer, &ll);
        }
        if(len < 0) {
-               edg_wll_SetError(context, ENOMEM, "edg_wll_log_proto_client_direct(): error encoding message");
+               edg_wll_SetError(context, errno, "encode_il_msg()");
+               edg_wll_UpdateError(context, ENOMEM, "edg_wll_log_proto_client_direct(): error encoding message");
                goto edg_wll_log_proto_client_direct_end;
        }
                
@@ -396,7 +413,7 @@ int edg_wll_log_proto_client_direct(edg_wll_Context context, edg_wll_GssConnecti
        fprintf(stderr,"log_proto_client_direct: reading answer from server...\n");
 #endif
        if ((err = get_reply_gss(context, con, &answer, &lbproto_code, &code)) != 0 ) {
-               edg_wll_SetError(context, EDG_WLL_IL_PROTO,"edg_wll_log_proto_client_direct(): error reading answer from L&B direct server");
+               edg_wll_UpdateError(context, EDG_WLL_IL_PROTO,"edg_wll_log_proto_client_direct(): error reading answer from L&B direct server");
        } else {
 #ifdef EDG_WLL_LOG_STUB
                fprintf(stderr,"log_proto_client_direct: read answer \"%d:%d: %s\"\n",lbproto_code,code,answer);
index de0d012..76b088b 100644 (file)
@@ -1,7 +1,5 @@
 # Default values
 top_srcdir=.
-builddir=build
-top_builddir=${top_srcdir}/${builddir}
 stagedir=.
 distdir=.
 globalprefix=glite
@@ -10,7 +8,6 @@ package=glite-lb-common
 version=0.0.0
 PREFIX=/opt/glite
 
-glite_location=/opt/glite
 globus_prefix=/opt/globus
 nothrflavour=gcc32
 thrflavour=gcc32pthr
@@ -48,7 +45,6 @@ CFLAGS:=${DEBUG} -I${top_srcdir}/src -I${top_srcdir}/interface \
        -I. \
        -I${top_srcdir}/test \
        -I${stagedir}/include \
-       -I${glite_location}/include \
        -I${expat_prefix}/include \
        ${COVERAGE_FLAGS} \
        -D_GNU_SOURCE \
@@ -59,7 +55,8 @@ CFLAGS:=${DEBUG} -I${top_srcdir}/src -I${top_srcdir}/interface \
 # major version more frequently. This variable specifies how many steps ahead
 # we are.
 
-VERSION_AHEAD=1
+VERSION_AHEAD=2
+CHECK_VERSION:=VERSION=${version} VERSION_AHEAD=${VERSION_AHEAD} perl ${top_srcdir}/project/check_version.pl
 
 GLOBUS_LIBS:=-L${globus_prefix}/lib \
         -lglobus_common_${nothrflavour} \
@@ -69,8 +66,6 @@ GLOBUS_THRLIBS:=-L${globus_prefix}/lib \
         -lglobus_common_${thrflavour} \
         -lglobus_gssapi_gsi_${thrflavour} \
 
-GLITE_LIBS:=-L${glite_location}/lib
-
 ifneq (${expat_prefix},/usr)
        EXPAT_LIBS:=-L${expat_prefix}/lib
 endif
@@ -131,10 +126,9 @@ endif
 
 default: all
 
-#all compile: check_version ${STATICLIB} ${LTLIB} ${THRSTATICLIB} ${THRLTLIB} ${TRIO_LIB} ${MAILDIR_LIB}
-all compile: ${STATICLIB} ${LTLIB} ${THRSTATICLIB} ${THRLTLIB} ${TRIO_LIB} ${MAILDIR_LIB}
+all compile: check_version ${STATICLIB} ${LTLIB} ${THRSTATICLIB} ${THRLTLIB} ${TRIO_LIB} ${MAILDIR_LIB}
 
-# FIXME: to use libtool versioning correcty, we should have:
+# In order to use libtool versioning correcty, we must have:
 #
 # current = major + minor + offset
 # revision = patch
@@ -142,11 +136,9 @@ all compile: ${STATICLIB} ${LTLIB} ${THRSTATICLIB} ${THRLTLIB} ${TRIO_LIB} ${MAI
 #
 # where offset is a sum of maximal released minor's of all previous major's
 # 
-# version_info=-version-info `echo ${version} | cut -d. -f1,2 | tr . :`
-
 
-# counted minors: 1.1
-offset=1
+# counted minors: 1.1, 3.1
+offset=2
 
 version_info:=-version-info ${shell \
        perl -e '$$,=":"; @F=split "\\.","${version}"; print $$F[0]+$$F[1]+${offset},$$F[2],$$F[1]' }
@@ -244,6 +236,7 @@ install:
        fi
 
 clean:
+       rm -rf *.o *.lo .libs lib*
 
 
 %.o: %.c
@@ -276,11 +269,4 @@ il_int_test.o il_string_test.o il_test.o il_msg_test.o: %.o: %.cpp
        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
+       ${CHECK_VERSION} ${stagedir}/include/glite/lb/interface_version.h
index e3add29..a6f7224 100755 (executable)
@@ -20,6 +20,9 @@
 
        Revision history:
        $Log$
+       Revision 1.8  2005/08/03 09:30:17  akrenek
+       Merged the release 1.0 branch
+
        Revision 1.7  2005/05/26 15:13:46  zurek
        inserted module.build.file
        
                                <include name="at3" />
                                <include name="*.T" />
                                <include name="*.pm" />
+                               <include name="check_version.pl" />
                        </fileset>
                </copy> 
                <antcall target="lbmakefiles" />
index 4523ba9..7cd00ba 100644 (file)
@@ -1,3 +1,3 @@
 #Fri Sep 02 14:17:07 CEST 2005
-module.version=4.0.0
-module.age=0
+module.version=4.0.2
+module.age=1
index 595ed19..9d01165 100644 (file)
@@ -6,6 +6,8 @@
 #include <sys/un.h>
 #include <stdio.h>
 #include <math.h>
+#include <sys/stat.h>
+#include <unistd.h>
 
 #include "context-int.h"
 
@@ -119,8 +121,9 @@ int edg_wll_log_event_write(
        struct flock    filelock;
        int                             filedesc,
                                        i, filelock_status=-1;
+       struct stat statbuf;
 
-
+try_again:
        if ( (outfile = fopen(event_file, "a")) == NULL ) {
                edg_wll_SetError(ctx, errno, "fopen()");
                goto event_write_end;
@@ -128,7 +131,6 @@ int edg_wll_log_event_write(
 
        if ( (filedesc = fileno(outfile)) == -1 ) {
                edg_wll_SetError(ctx, errno, "fileno()");
-               fclose(outfile); 
                goto cleanup;
        }
 
@@ -149,7 +151,23 @@ int edg_wll_log_event_write(
                                edg_wll_SetError(ctx, errno, "fcntl()");
                                goto cleanup;
                        }
-               } else break;
+               } else {
+                       /* check that the file still exists */
+                       if(stat(event_file, &statbuf)) {
+                               if(errno == ENOENT) {
+                                       /* not there anymore - reopen it */
+                                       fclose(outfile);
+                                       goto try_again;
+                               } else {
+                                       /* could not stat the output file */
+                                       edg_wll_SetError(ctx, errno, "stat()");
+                                       goto cleanup;
+                               }
+                       } else {
+                               /* file exists and is locked */
+                               break;
+                       }
+               }
        }
        if (i == fcntl_attempts) {
                edg_wll_SetError(ctx, ETIMEDOUT, "timed out trying to lock event file");
index b141272..59ebe41 100644 (file)
@@ -1,7 +1,5 @@
 # defaults
 top_srcdir=.
-builddir=build
-top_builddir=${top_srcdir}/${builddir}
 stagedir=.
 distdir=.
 globalprefix=glite
@@ -14,7 +12,6 @@ glite_location=/opt/glite
 globus_prefix=/opt/globus
 nothrflavour=gcc32
 thrflavour=gcc32pthr
-expat_prefix=/opt/expat
 
 -include Makefile.inc
 -include ../project/version.properties
@@ -71,12 +68,12 @@ 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:= ${EXPAT_LIBS}
+#ifneq (${expat_prefix},/usr)
+#      EXPAT_LIBS:=-L${expat_prefix}/lib
+#endif
+#EXPAT_LIBS:=${EXPAT_LIBS} -lexpat
+#
+#EXT_LIBS:= ${EXPAT_LIBS}
 
 COMMON_LIB:=-lglite_lb_common
 
index c3dfb91..da0cd2f 100644 (file)
@@ -1,3 +1,3 @@
 #Fri Sep 02 14:18:17 CEST 2005
-module.version=1.3.3
-module.age=0
+module.version=1.3.6
+module.age=1
index 365406b..6b7b3ce 100644 (file)
@@ -280,6 +280,65 @@ event_store_write_ctl(struct event_store *es)
 
 
 /*
+ * event_store_qurantine() 
+ *   - rename damaged event store file 
+ *   - essentially does the same actions as cleanup, but the event store 
+ *     does not have to be empty
+ * returns 0 on success, -1 on error
+ */
+static
+int
+event_store_quarantine(struct event_store *es) 
+{
+       int num;
+       char newname[MAXPATHLEN+1];
+
+       /* find available qurantine name */
+       /* we give it at most 1024 tries */
+       for(num = 0; num < 1024; num++) {
+               struct stat st;
+
+               snprintf(newname, MAXPATHLEN, "%s.quarantine.%d", es->event_file_name, num);
+               newname[MAXPATHLEN] = 0;
+               if(stat(newname, &st) < 0) {
+                       if(errno == ENOENT) {
+                               /* file not found */
+                               break;
+                       } else {
+                               /* some other error with name, probably permanent */
+                               set_error(IL_SYS, errno, "event_store_qurantine: error looking for qurantine filename");
+                               return(-1);
+                               
+                       }
+               } else {
+                       /* the filename is used already */
+               }
+       }
+       if(num >= 1024) {
+               /* new name not found */
+               /* XXX - is there more suitable error? */
+               set_error(IL_SYS, ENOSPC, "event_store_quarantine: exhausted number of retries looking for quarantine filename");
+               return(-1);
+       }
+
+       /* actually rename the file */
+       il_log(LOG_DEBUG, "    renaming damaged event file from %s to %s\n",
+              es->event_file_name, newname);
+       if(rename(es->event_file_name, newname) < 0) {
+               set_error(IL_SYS, errno, "event_store_quarantine: error renaming event file");
+               return(-1);
+       }
+
+       /* clear the counters */
+       es->last_committed_ls = 0;
+       es->last_committed_bs = 0;
+       es->offset = 0;
+
+       return(0);
+}
+
+
+/*
  * event_store_recover()
  *   - recover after restart or catch up when events missing in IPC
  *   - if offset > 0, read everything behind it
@@ -296,6 +355,7 @@ event_store_recover(struct event_store *es)
   FILE *ef;
   struct flock efl;
   char err_msg[128];
+  struct stat stbuf;
 
   assert(es != NULL);
   
@@ -344,6 +404,22 @@ event_store_recover(struct event_store *es)
          return(-1);
   }
 
+  /* check the file modification time and size to avoid unnecessary operations */
+  memset(&stbuf, 0, sizeof(stbuf));
+  if(fstat(fd, &stbuf) < 0) {
+         il_log(LOG_ERR, "    could not stat event file %s: %s\n", es->event_file_name, strerror(errno));
+         fclose(ef);
+         event_store_unlock(es);
+         return -1;
+  } else {
+         if((es->offset == stbuf.st_size) && (es->last_modified == stbuf.st_mtime)) {
+                 il_log(LOG_DEBUG, "  event file not modified since last visit, skipping\n");
+                 fclose(ef);
+                 event_store_unlock(es);
+                 return(0);
+         }
+  }
+
   while(1) { /* try, try, try */
 
          /* get the position in file to be sought */
@@ -435,8 +511,12 @@ event_store_recover(struct event_store *es)
            free(event_s);
     }
     if(msg == NULL) {
-           il_log(LOG_ALERT, "    event file corrupted! Please move it to quarantine (ie. somewhere else) and restart interlogger.\n");
-           break;
+           il_log(LOG_ALERT, "    event file corrupted! I will try to move it to quarantine (ie. rename it).\n");
+           /* actually do not bother if quarantine succeeded or not - we could not do more */
+           event_store_quarantine(es);
+           fclose(ef);
+           event_store_unlock(es);
+           return(-1);
     }
     msg->es = es;
 
@@ -482,6 +562,7 @@ event_store_recover(struct event_store *es)
 
   /* due to this little assignment we had to lock the event_store for writing */
   es->offset = last;
+  es->last_modified = stbuf.st_mtime;
   il_log(LOG_DEBUG, "  event store offset set to %ld\n", last);
 
   if(msg) 
@@ -509,6 +590,16 @@ event_store_sync(struct event_store *es, long offset)
 
   assert(es != NULL);
 
+  /* Commented out due to the fact that offset as received on socket
+   * has little to do with the real event file at the moment. The
+   * event will be read from file, socket now serves only to notify
+   * about possible event file change.
+   */
+  ret = event_store_recover(es);
+  ret = (ret < 0) ? ret : 0;
+  return(ret);
+
+#if 0
   event_store_lock_ro(es);
   if(es->offset == offset) 
     /* we are up to date */
@@ -548,6 +639,7 @@ event_store_sync(struct event_store *es, long offset)
   }
   event_store_unlock(es);
   return(ret);
+#endif
 }
 
 
@@ -556,6 +648,12 @@ event_store_next(struct event_store *es, long offset, int len)
 {
   assert(es != NULL);
   
+  /* Commented out due to the fact that offset as received on socket
+   * has little to do with real event file at the moment. es->offset
+   * handling is left solely to the event_store_recover().
+   */
+   
+#if 0
   event_store_lock(es);
   /* Whoa, be careful now. The es->offset points right after the last enqueued event,
    * but it may not be the offset of the event WE have just enqueued, because:!    
@@ -567,6 +665,7 @@ event_store_next(struct event_store *es, long offset, int len)
          es->offset += len;
   }
   event_store_unlock(es);
+#endif
 
   return(0);
 }
@@ -686,6 +785,11 @@ event_store_clean(struct event_store *es)
     return(0);
   } else if( es->last_committed_ls > last) {
          il_log(LOG_WARNING, "  warning: event file seems to shrink!\n");
+         /* XXX - in that case we can not continue because there may be
+            some undelivered events referring to that event store */
+         fclose(ef);
+         event_store_unlock(es);
+         return(0);
   }
   
   /* now we are sure that all events were sent and the event queues are empty */
@@ -711,7 +815,6 @@ event_store_clean(struct event_store *es)
 }
 
 
-
 /* --------------------------------
  * event store management functions
  * --------------------------------
@@ -805,6 +908,11 @@ event_store_from_file(char *filename)
        
        il_log(LOG_INFO, "  attaching to event file: %s\n", filename);
        
+       if(strstr(filename, "quarantine") != NULL) {
+               il_log(LOG_INFO, "  file name belongs to quarantine, not touching that.\n");
+               return(0);
+       }
+
        event_file = fopen(filename, "r");
        if(event_file == NULL) {
                set_error(IL_SYS, errno, "event_store_from_file: error opening event file");
@@ -1129,7 +1237,7 @@ event_store_cleanup()
          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);
+                 /* event_store_release(sl->es); */
                  clear_error();
                  /* go on to the next */
                  
index e608b1c..1fe9bb9 100644 (file)
@@ -143,6 +143,8 @@ set_error(int code, long minor, char *msg)
          strncpy(err->msg, msg, IL_ERR_MSG_LEN);
   }
 
+  err->msg[IL_ERR_MSG_LEN] = 0; /* OK, malloc()ed IL_ERR_MSG_LEN + 1 */
+
   return(code);
 }
 
index a8527b9..010a8bc 100644 (file)
@@ -57,7 +57,7 @@ static void usage (int status)
               "  -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"
-              "  -L, --lazy [<timeout>]     be lazy when closing connections to servers\n"
+              "  -L, --lazy [<timeout>]     be lazy when closing connections to servers (default, timeout==0 means turn lazy off)\n"
 #ifdef LB_PERF
               "  -n, --nosend               PERFTEST: consume events instead of sending\n"
               "  -S, --nosync               PERFTEST: do not check logd files for lost events\n"
@@ -78,7 +78,7 @@ static int debug;
 static int verbose = 0;
 char *file_prefix = DEFAULT_PREFIX;
 int bs_only = 0;
-int lazy_close = 0;
+int lazy_close = 1;
 int default_close_timeout;
 #ifdef LB_PERF
 int nosend = 0, norecover=0, nosync=0, noparse=0;
@@ -204,6 +204,10 @@ decode_switches (int argc, char **argv)
                lazy_close = 1;
                if(optarg) 
                        default_close_timeout = atoi(optarg);
+                       if(default_close_timeout == 0) {
+                               default_close_timeout = TIMEOUT;
+                               lazy_close = 0;
+                       }
                else
                        default_close_timeout = TIMEOUT;
                break;
index 9ec0d55..810314e 100644 (file)
@@ -92,6 +92,7 @@ struct event_store {
        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 */
+       time_t    last_modified;           /* time of the last file modification */
        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 */
index 775f789..5ab58e0 100644 (file)
@@ -6,6 +6,7 @@
 #include <sys/wait.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
+#include <arpa/inet.h>
 #include <signal.h>
 #include <unistd.h> 
 #include <string.h>
@@ -157,12 +158,16 @@ doit(int socket, gss_cred_id_t cred_handle, char *file_name_prefix, int noipc, i
     OM_uint32  min_stat;
     gss_OID    name_type = GSS_C_NO_OID;
 
+    struct sockaddr_in peer;
+    socklen_t  alen = sizeof peer;
+
+    getpeername(socket,(struct sockaddr *) &peer,&alen);
     /* authentication */
-    edg_wll_ll_log(LOG_INFO,"Processing authentication:\n");
+    edg_wll_ll_log(LOG_INFO,"%s: Processing authentication:\n",inet_ntoa(peer.sin_addr));
 // 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");
+           edg_wll_ll_log(LOG_ERR,"%s: edg_wll_gss_accept() failed\n",inet_ntoa(peer.sin_addr));
            return(-1);
     }
 
@@ -172,7 +177,7 @@ doit(int socket, gss_cred_id_t cred_handle, char *file_name_prefix, int noipc, i
     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);
+       edg_wll_ll_log(LOG_WARNING, "%s: %s\n", inet_ntoa(peer.sin_addr),gss_err);
        free(gss_err);
     } else {
        gss_stat.major_status = gss_display_name(&gss_stat.minor_status, client_name,
@@ -180,7 +185,7 @@ doit(int socket, gss_cred_id_t cred_handle, char *file_name_prefix, int noipc, i
        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);
+         edg_wll_ll_log(LOG_WARNING, "%s: %s\n",inet_ntoa(peer.sin_addr),gss_err);
          free(gss_err);
        }
     }
index 24e9e22..6a98039 100644 (file)
@@ -231,6 +231,7 @@ event_queue_close(struct event_queue *eq)
 int 
 event_queue_send(struct event_queue *eq)
 {
+  int events_sent = 0;
   assert(eq != NULL);
 
 #ifdef LB_PERF
@@ -250,7 +251,6 @@ event_queue_send(struct event_queue *eq)
     size_t bytes_sent;
     struct timeval tv;
     edg_wll_GssStatus gss_stat;
-    int events_sent = 0;
 
     clear_error();
 
@@ -280,7 +280,10 @@ event_queue_send(struct event_queue *eq)
            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;
+                   if (events_sent>0) 
+                       eq->timeout = 1;
+                   else
+                       eq->timeout = TIMEOUT;
                    return(0);
            }
 #ifdef LB_PERF
index e2d64fb..81702af 100644 (file)
@@ -1,3 +1,3 @@
 #Fri Sep 02 14:18:53 CEST 2005
-module.version=1.3.3
+module.version=1.3.4
 module.age=0
index 1f03996..100ef16 100644 (file)
@@ -1,7 +1,5 @@
 # defaults
 top_srcdir=.
-builddir=build
-top_builddir=${top_srcdir}/${builddir}
 stagedir=.
 distdir=.
 globalprefix=glite
@@ -11,11 +9,6 @@ version=0.0.1
 PREFIX=/opt/glite
 
 glite_location=/opt/glite
-globus_prefix=/opt/globus
-nothrflavour=gcc32
-thrflavour=gcc32pthr
-expat_prefix=/opt/expat
-cares_prefix=/opt/c-ares
 
 CC=gcc
 
index eac2bae..f42d42a 100644 (file)
@@ -1,3 +1,3 @@
 #Fri Sep 02 14:17:59 CEST 2005
-module.version=2.2.2
-module.age=0
+module.version=2.2.3
+module.age=1
index cdac73e..fdb7ef0 100644 (file)
@@ -472,6 +472,8 @@ static int slave(slave_data_init_hnd data_init_hnd, int sock)
 
                if ( newconn >= 0 )
                {
+                       int     ret;
+
                        conn = newconn;
                        srv = newsrv;
                        gettimeofday(&client_start, NULL);
@@ -506,12 +508,13 @@ static int slave(slave_data_init_hnd data_init_hnd, int sock)
 
                        to = set_connect_to;
                        if (   services[srv].on_new_conn_hnd
-                               && services[srv].on_new_conn_hnd(conn, to.tv_sec >= 0 ? &to : NULL, clnt_data) )
+                               && (ret = services[srv].on_new_conn_hnd(conn, to.tv_sec >= 0 ? &to : NULL, clnt_data)) )
                        {
-                               dprintf(("[%d] Connection not estabilished.\n", getpid()));
-                               if ( !debug ) syslog(LOG_ERR, "Connection not estabilished.\n");
+                               dprintf(("[%d] Connection not estabilished, err = %d.\n", getpid(),ret));
+                               if ( !debug ) syslog(LOG_ERR, "Connection not estabilished, err = %d.\n",ret);
                                close(conn);
                                conn = srv = -1;
+                               if (ret < 0) exit(1);
                                continue;
                        }
                        gettimeofday(&client_done, NULL);
index a81a14e..37e2cf9 100644 (file)
@@ -41,9 +41,8 @@ else
        STATIC_LIB_BK:=libglite_lb_bkserver.a
 endif
 
-ifdef LB_DAG_EMBRIONIC
-       LB_DAG_FLAGS:=-DLB_DAG_EMBRIONIC
-endif
+# Use embrionic DAG registration implicitely
+LB_DAG_FLAGS:=-DLB_DAG_EMBRIONIC
 
 ifdef LB_BUF
        LB_BUF_FLAGS:=-DLB_BUF
@@ -78,11 +77,11 @@ GRIDSITE_LIBS = -lgridsite_globus `xml2-config --libs`
 CFLAGS:= \
        ${WS_CFLAGS} ${DEBUG} \
        -DVERSION=\"${version}\" \
+       -I${gsoap_prefix}/include -I${gsoap_prefix}/ \
        -I${stagedir}/include -I${top_srcdir}/src -I. \
        -I${top_srcdir}/interface \
        -I${expat_prefix}/include \
        -I${cares_prefix}/include \
-       -I${gsoap_prefix}/include -I${gsoap_prefix}/ \
        -I${classads_prefix}/include \
        -I${voms_prefix}/include \
        ${COVERAGE_FLAGS} \
@@ -308,7 +307,7 @@ test_soap_conv: test_soap_conv.cpp ${WS_CLIENT_OBJS}
 examples: ws_getversion ws_jobstat ws_query_ex ws_joblog
 
 ws_getversion: ws_getversion.o ${WS_CLIENT_OBJS}
-       ${LINK} -o $@ ws_getversion.o ${WS_CLIENT_OBJS} ${WS_CLIENT_LIBS} 
+       ${LINK} -o $@ ws_getversion.o ${WS_CLIENT_OBJS} ${WS_CLIENT_LIBS}
 
 ws_jobstat: ws_jobstat.o ${WS_CLIENT_OBJS}
        ${LINK} -o $@ ws_jobstat.o ${WS_CLIENT_OBJS} ${WS_CLIENT_LIBS}
@@ -316,9 +315,6 @@ ws_jobstat: ws_jobstat.o ${WS_CLIENT_OBJS}
 ws_query_ex: ws_query_ex.o ${WS_CLIENT_OBJS}
        ${LINK} -o $@ ws_query_ex.o ${WS_CLIENT_OBJS} ${WS_CLIENT_LIBS}
 
-ws_query_ext: ws_query_ext.o ${WS_CLIENT_OBJS}
-       ${LINK} -o $@ ws_query_ext.o ${WS_CLIENT_OBJS} ${WS_CLIENT_LIBS}
-
 ws_joblog: ws_joblog.o ${WS_CLIENT_OBJS}
        ${LINK} -o $@ ws_joblog.o ${WS_CLIENT_OBJS} ${WS_CLIENT_LIBS}
 
index f39c10e..597ddaf 100755 (executable)
@@ -13,6 +13,7 @@ GLITE_LOCATION_VAR=${GLITE_LOCATION_VAR:-/var/glite}
 
 [ -n "$GLITE_LB_SERVER_PIDFILE" ] && pidfile=$GLITE_LB_SERVER_PIDFILE ||
        pidfile=$GLITE_LOCATION_VAR/glite-lb-bkserverd.pid
+[ -z "$GLITE_LB_NOTIF_SOCK" ] && GLITE_LB_NOTIF_SOCK="/tmp/glite-lb-notif.sock"
 
 unset creds port
 
@@ -35,26 +36,31 @@ start()
        fi
 
        [ -z "$GLITE_LB_EXPORT_DUMPDIR" ] && GLITE_LB_EXPORT_DUMPDIR=/tmp/dump
-       purgedir="--dump-prefix $GLITE_LB_EXPORT_DUMPDIR"
+       dumpdir="--dump-prefix $GLITE_LB_EXPORT_DUMPDIR"
        [ -d "$GLITE_LB_EXPORT_DUMPDIR" ] || mkdir -p "$GLITE_LB_EXPORT_DUMPDIR" && chown $GLITE_USER:$GLITE_GROUP -R "$GLITE_LB_EXPORT_DUMPDIR"
 
-       [ -z "$GLITE_LB_EXPORT_JPREG_MAILDIR" ] && GLITE_LB_EXPORT_JPREG_MAILDIR=/tmp/jpreg
-       maildir="--jpreg-dir $GLITE_LB_EXPORT_JPREG_MAILDIR"
-       [ -d "$GLITE_LB_EXPORT_JPREG_MAILDIR" ] || mkdir -p "$GLITE_LB_EXPORT_JPREG_MAILDIR" && chown $GLITE_USER:$GLITE_GROUP -R "$GLITE_LB_EXPORT_JPREG_MAILDIR"
+       [ -z "$GLITE_LB_EXPORT_PURGEDIR" ] && GLITE_LB_EXPORT_PURGEDIR=/tmp/purge
+       purgedir="--purge-prefix $GLITE_LB_EXPORT_PURGEDIR"
+       [ -d "$GLITE_LB_EXPORT_PURGEDIR" ] || mkdir -p "$GLITE_LB_EXPORT_PURGEDIR" && chown $GLITE_USER:$GLITE_GROUP -R "$GLITE_LB_EXPORT_PURGEDIR"
+
+       if [ x"$GLITE_LB_EXPORT_ENABLED" = x"true" ]; then
+               [ -z "$GLITE_LB_EXPORT_JPREG_MAILDIR" ] && GLITE_LB_EXPORT_JPREG_MAILDIR=/tmp/jpreg
+               [ -d "$GLITE_LB_EXPORT_JPREG_MAILDIR" ] || mkdir -p "$GLITE_LB_EXPORT_JPREG_MAILDIR" && chown $GLITE_USER:$GLITE_GROUP -R "$GLITE_LB_EXPORT_JPREG_MAILDIR"
+               maildir="--jpreg-dir $GLITE_LB_EXPORT_JPREG_MAILDIR"
+       fi
+       super="--super-users-file $GLITE_LOCATION/etc/LB-super-users"
 
        [ -z "$creds" ] && echo $0: WARNING: No credentials specified. Using default lookup which is dangerous. >&2
 
        [ -n "$GLITE_LB_SERVER_PORT" ] && port="-p $GLITE_LB_SERVER_PORT"
        [ -n "$GLITE_LB_SERVER_WPORT" ] && wport="-w $GLITE_LB_SERVER_WPORT"
-
-       [ -z "$GLITE_LB_NOTIF_SOCK" ] && GLITE_LB_NOTIF_SOCK="/tmp/glite-lb-notif.sock"
        [ -z "$GLITE_LB_NOTIF_FPREFIX" ] && GLITE_LB_NOTIF_FPREFIX="/var/tmp/glite-lb-notif"
 
        echo -n Starting glite-lb-bkserver ...
        su - $GLITE_USER -c "$GLITE_LOCATION/bin/glite-lb-bkserverd \
                --notif-il-sock=$GLITE_LB_NOTIF_SOCK \
                --notif-il-fprefix=$GLITE_LB_NOTIF_FPREFIX \
-               $creds -i $pidfile $port $wport $purgedir $maildir" \
+               $super $creds -i $pidfile $port $wport $dumpdir $purgedir $maildir" \
        && echo " done" || echo " FAILED"
 
        echo -n Starting glite-lb-notif-interlogd ...
index fc86a38..a3bff54 100644 (file)
@@ -1,16 +1,17 @@
 #include <getopt.h>
 #include <stdsoap2.h>
 
-#include "glite/security/glite_gsplugin.h"
 #include "glite/lb/consumer.h"
 #include "glite/lb/events_parse.h"
 
+#include "soap_version.h"
+#include "glite/security/glite_gsplugin.h"
+#include "glite/security/glite_gscompat.h"
+
 #include "bk_ws_H.h"
 #include "ws_typeref.h"
 #include "ws_fault.h"
 
-#include "soap_version.h"
-
 #if GSOAP_VERSION <= 20602
 #define soap_call___lb__QueryEvents soap_call___ns1__QueryEvents
 #endif
@@ -41,8 +42,7 @@ int main(int argc,char** argv)
        struct soap                             *mydlo = soap_new();
        struct _lbe__QueryEventsResponse        out;
        struct _lbe__QueryEvents                in;     
-       edg_wll_QueryRec                        **jconds = NULL,
-                                               **econds = NULL;
+       edg_wll_QueryRec                        **jconds = NULL;
        edg_wll_QueryRec                        j[2], e[1];
        int                                     opt, err, i;
        edg_wlc_JobId                           job;
@@ -86,7 +86,6 @@ int main(int argc,char** argv)
 
        glite_gsplugin_set_udata(mydlo, ctx);
 
-
        /* prepare job log query */
        memset(j,0,sizeof j);
        memset(e,0,sizeof e);
index 2130a28..e6f2cf9 100644 (file)
@@ -1,15 +1,15 @@
 #include <getopt.h>
 #include <stdsoap2.h>
 
+#include "soap_version.h"
 #include "glite/security/glite_gsplugin.h"
+#include "glite/security/glite_gscompat.h"
 #include "glite/lb/consumer.h"
 
 #include "bk_ws_H.h"
 #include "ws_typeref.h"
 #include "ws_fault.h"
 
-#include "soap_version.h"
-
 #if GSOAP_VERSION <= 20602
 #define soap_call___lb__JobStatus soap_call___ns1__JobStatus
 #endif
@@ -40,7 +40,6 @@ int main(int argc,char** argv)
     struct soap                                                   *mydlo = soap_new();
     struct _lbe__JobStatusResponse     out;
     struct _lbe__JobStatus             in;     
-    struct lbt__jobFlags       flags = { 0, NULL };
     int                                                                        opt, err;
        char                                                       *server = "http://localhost:9003/",
                                                                           *jobid = NULL,
@@ -77,9 +76,9 @@ int main(int argc,char** argv)
 
     glite_gsplugin_set_udata(mydlo, ctx);
 
-    in.jobid = jobid;
-    in.flags = &flags;
-
+    in.jobid = soap_strdup(mydlo, jobid);
+    in.flags = soap_malloc(mydlo, sizeof(*in.flags));
+    edg_wll_JobStatFlagsToSoap(mydlo, 0, in.flags);
 
     switch (err = soap_call___lb__JobStatus(mydlo, server, "",&in,&out))
        {
@@ -162,7 +161,9 @@ static void printstat(edg_wll_JobStat stat, int level)
     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("%sce_node : %s\n", ind, stat.ce_node);
+    printf("%ssubjob_failed : %d\n", ind, stat.subjob_failed);
+//    printf("%sdone_code : %d\n", ind, edg_wll_done_codeToString(stat.done_code));
     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);
@@ -188,6 +189,17 @@ static void printstat(edg_wll_JobStat stat, int level)
     printf("%sexpectUpdate : %d\n", ind, stat.expectUpdate);
     printf("%sexpectFrom : %s\n", ind, stat.expectFrom);
     printf("%sacl : %s\n", ind, stat.acl);
+    printf("%spayload_running: %d\n", ind, stat.payload_running);
+    if (stat.possible_destinations) {
+       printf("%spossible_destinations : \n", ind);
+       for (i=0; stat.possible_destinations[i]; i++) 
+               printf("%s\t%s \n", ind, stat.possible_destinations[i]);
+    }
+    if (stat.possible_ce_nodes) {
+               printf("%spossible_ce_nodes : \n", ind);
+               for (i=0; stat.possible_ce_nodes[i]; i++) 
+                       printf("%s\t%s \n", ind, stat.possible_ce_nodes[i]);
+    }
     printf("\n");
 
     free(j1);
index 1b627a4..b20e457 100644 (file)
@@ -1,15 +1,16 @@
 #include <getopt.h>
 #include <stdsoap2.h>
 
-#include "glite/security/glite_gsplugin.h"
 #include "glite/lb/consumer.h"
 
+#include "soap_version.h"
+#include "glite/security/glite_gsplugin.h"
+#include "glite/security/glite_gscompat.h"
+
 #include "bk_ws_H.h"
 #include "ws_fault.h"
 #include "ws_typeref.h"
 
-#include "soap_version.h"
-
 #if GSOAP_VERSION <= 20602
 #define soap_call___lb__QueryJobs soap_call___ns1__QueryJobs
 #endif
@@ -43,7 +44,7 @@ int main(int argc,char** argv)
        int                                     opt, err;
        char                                    *server = "http://localhost:9003/",
                                                *name = NULL;
-       int                                     i, j;
+       int                                     i;
 
        name = strrchr(argv[0],'/');
        if (name) name++; else name = argv[0];
@@ -75,15 +76,18 @@ int main(int argc,char** argv)
 
        conditions[1] = (edg_wll_QueryRec *)calloc(2, sizeof(edg_wll_QueryRec));
        conditions[1][0].attr = EDG_WLL_QUERY_ATTR_OWNER;
-       conditions[1][0].op = EDG_WLL_QUERY_OP_EQUAL;
-       conditions[1][0].value.c = NULL;
+#warning FIXME: NULL should work, use optional in WSDL?
+//     conditions[1][0].op = EDG_WLL_QUERY_OP_EQUAL;
+//     conditions[1][0].value.c = NULL;
+       conditions[1][0].op = EDG_WLL_QUERY_OP_UNEQUAL;
+       conditions[1][0].value.c = "x";
 
        qjobs = soap_malloc(soap, sizeof(*qjobs));
        memset(qjobs, 0, sizeof(*qjobs));
        qjobs->flags = soap_malloc(soap, sizeof(*qjobs->flags));
        memset(qjobs->flags, 0, sizeof(*qjobs->flags));
        if (!qjobs->flags || edg_wll_QueryCondsExtToSoap(soap, (const edg_wll_QueryRec **)conditions, &qjobs->__sizeconditions, &qjobs->conditions)
-               || edg_wll_JobStatFlagsToSoap(soap, 0, qjobs->flags) ) {
+               || edg_wll_JobStatFlagsToSoap(soap, EDG_WLL_STAT_CLASSADS || EDG_WLL_STAT_CHILDREN || EDG_WLL_STAT_CHILDSTAT, qjobs->flags) ) {
                char    *et,*ed;
 
                fprintf(stderr, "%s: soap types conversion error...\n", argv[0]);
@@ -107,7 +111,7 @@ int main(int argc,char** argv)
                        edg_wll_JobStatCode statCode;
 
 
-                       edg_wll_SoapToJobStatCode(out.states[i]->state, &statCode);
+                       edg_wll_SoapToJobStatCode(GLITE_SECURITY_GSOAP_LIST_GET(out.states, i)->state, &statCode);
                        char *s = edg_wll_StatToString(statCode);
                        printf("%-65s%s\n", out.jobs[i], s);
                        free(s);
index 43b0bab..bee8e14 100644 (file)
@@ -13,6 +13,9 @@
        attributeFormDefault="unqualified"
 >
 
+  <xs:import namespace="http://egee.cesnet.cz/en/Schema/LB/Attributes"
+               schemaLocation="http://egee.cesnet.cz/en/Schema/LB/Attributes"/>
+
        <xs:complexType name="jobRecordType">
                <xs:sequence>
 
index 86b1948..bd3ff52 100644 (file)
@@ -1,3 +1,3 @@
 #Fri Sep 02 14:18:35 CEST 2005
-module.version=1.4.3
-module.age=0
+module.version=1.4.6
+module.age=1
index d04f934..af8c756 100644 (file)
@@ -742,17 +742,21 @@ int bk_handle_connection(int conn, struct timeval *timeout, void *data)
 
 
 
+/* don't care :-( 
        switch ( edg_wll_gss_watch_creds(server_cert, &cert_mtime) ) {
        case 0: break;
        case 1:
+*/
                if ( !edg_wll_gss_acquire_cred_gsi(server_cert, server_key, &newcred, NULL, &gss_code) ) {
                        dprintf(("[%d] reloading credentials\n", getpid()));
                        gss_release_cred(&min_stat, &mycred);
                        mycred = newcred;
-               } else { dprintf(("[%d] reloading credentials failed\n", getpid())); }
+               } else { dprintf(("[%d] reloading credentials failed, using old ones\n", getpid())); }
+/* 
                break;
        case -1: dprintf(("[%d] edg_wll_gss_watch_creds failed\n", getpid())); break;
        }
+*/
 
        if ( edg_wll_InitContext(&ctx) )
        {
@@ -811,6 +815,8 @@ int bk_handle_connection(int conn, struct timeval *timeout, void *data)
        default:
                if (debug) fprintf(stderr, "gethostbyaddr(%s): %s", inet_ntoa(a.sin_addr), hstrerror(h_errno));
                dprintf(("[%d] connection from %s:%d\n", getpid(), inet_ntoa(a.sin_addr), ntohs(a.sin_port)));
+               free(ctx->connPool[ctx->connToUse].peerName);
+               ctx->connPool[ctx->connToUse].peerName = strdup(inet_ntoa(a.sin_addr));
                break;
        }
        
@@ -869,17 +875,32 @@ int bk_handle_connection(int conn, struct timeval *timeout, void *data)
                ctx->srvPort = ntohs(a.sin_port);
        }
 
+/* XXX: ugly workaround, we may detect false expired certificated
+ * probably due to bug in Globus GSS/SSL. Treated as fatal,
+ * restarting the server solves the problem */ 
+#define _EXPIRED_CERTIFICATE_MESSAGE "certificate has expired"
+
        if ( (ret = edg_wll_gss_accept(mycred, conn, timeout, &ctx->connPool[ctx->connToUse].gss, &gss_code)) )
        {
                if ( ret == EDG_WLL_GSS_ERROR_TIMEOUT )
                {
-                       dprintf(("[%d] Client authentication failed - timeout reached, closing.\n", getpid()));
-                       if (!debug) syslog(LOG_ERR, "Client authentication failed - timeout reached");
+                       dprintf(("[%d] %s: Client authentication failed - timeout reached, closing.\n", getpid(),ctx->connPool[ctx->connToUse].peerName));
+                       if (!debug) syslog(LOG_ERR, "%s: Client authentication failed - timeout reached",ctx->connPool[ctx->connToUse].peerName);
+               }
+               else if (ret == EDG_WLL_GSS_ERROR_GSS) {
+                       edg_wll_SetErrorGss(ctx,"Client authentication",&gss_code);
+                       if (strstr(ctx->errDesc,_EXPIRED_CERTIFICATE_MESSAGE)) {
+                               dprintf(("[%d] %s: false expired certificate: %s\n",getpid(),ctx->connPool[ctx->connToUse].peerName,ctx->errDesc));
+                               if (!debug) syslog(LOG_ERR,"[%d] %s: false expired certificate: %s",getpid(),ctx->connPool[ctx->connToUse].peerName,ctx->errDesc);
+                               edg_wll_FreeContext(ctx);
+                               return -1;
+                       }
                }
                else
                {
-                       dprintf(("[%d] Client authentication failed, closing.\n", getpid()));
-                       if (!debug) syslog(LOG_ERR, "Client authentication failed");
+                       dprintf(("[%d] %s: Client authentication failed, closing.\n", getpid(),ctx->connPool[ctx->connToUse].peerName));
+                       if (!debug) syslog(LOG_ERR, "%s: Client authentication failed",ctx->connPool[ctx->connToUse].peerName);
 
                }
                edg_wll_FreeContext(ctx);
@@ -1404,8 +1425,9 @@ static int read_roots(const char *file)
        int     cnt = 0;
 
        if (!roots) {
-               perror(file);
-               return 1;
+               syslog(LOG_WARNING,"%s: %m, continuing without --super-users-file",file);
+               dprintf(("%s: %s, continuing without --super-users-file\n",file,strerror(errno)));
+               return 0;
        }
 
        while (!feof(roots)) {
index d002abe..1dfec69 100644 (file)
@@ -654,7 +654,6 @@ edg_wll_ErrorCode edg_wll_StepIntState(edg_wll_Context ctx,
                                        edg_wll_JobStat *stat_out)
 {
        intJobStat      *ijsp;
-       int             intErr = 0;
        int             flags = 0;
        int             res;
        int             be_strict = 0;
@@ -663,11 +662,10 @@ edg_wll_ErrorCode edg_wll_StepIntState(edg_wll_Context ctx,
        edg_wll_JobStat oldstat;
        char            *oldstat_rgmaline = NULL;
 
+
        memset(&oldstat,0,sizeof oldstat);
-       if (seq != 0) {
-               intErr = edg_wll_LoadIntState(ctx, job, seq - 1, &ijsp);
-       }
-       if (seq != 0 && !intErr) {
+
+       if (!edg_wll_LoadIntState(ctx, job, seq - 1, &ijsp)) {
                edg_wll_CpyStatus(&ijsp->pub,&oldstat);
 
                if (ctx->rgma_export) oldstat_rgmaline = write2rgma_statline(&ijsp->pub);
index 0eb5afe..162dfa7 100644 (file)
@@ -16,6 +16,7 @@
 #include "glite/lb/events.h"
 #include "glite/lb/events_parse.h"
 #include "glite/lb/trio.h"
+#include "glite/lb/producer.h"
 
 #include "jobstat.h"
 #include "get_events.h"
@@ -48,7 +49,7 @@ typedef struct _lb_historyStatus {
 typedef struct _lb_handle {
        edg_wll_Event           **events;
        edg_wll_JobStat         status;
-       lb_historyStatus        **fullStatusHistory, **lastStatusHistory;
+       lb_historyStatus        **fullStatusHistory, **lastStatusHistory, *finalStatus;
 } lb_handle;
 
 #define check_strdup(s) ((s) ? strdup(s) : NULL)
@@ -107,8 +108,9 @@ static int lb_open(void *fpctx, void *bhandle, const char *uri, void **handle) {
        char *line;
        int retval;
        edg_wll_Context     context;
-       int              nevents, maxnevents, i;
-       glite_jp_error_t        err;
+       int                 nevents, maxnevents, i;
+       glite_jp_error_t    err;
+       char                *id0 = NULL,*id = NULL;
        
        glite_jp_clear_error(ctx);
        h = calloc(1, sizeof(lb_handle));
@@ -151,6 +153,24 @@ static int lb_open(void *fpctx, void *bhandle, const char *uri, void **handle) {
                                free(ed);
                                goto fail;
                        }
+                       if (nevents == 0) {
+                               id0 = edg_wlc_JobIdGetUnique(h->events[nevents]->any.jobId );
+                       } else {
+                               id = edg_wlc_JobIdGetUnique(h->events[nevents]->any.jobId );
+                               if (strcmp(id0,id) != 0) {
+                                       char et[BUFSIZ];
+                                       retval = EINVAL;
+                                       err.code = retval;
+                                       snprintf(et,sizeof et,"Attempt to process different jobs. Id '%s' (event n.%d) differs from '%s'",id,nevents+1,id0);
+                                       et[BUFSIZ-1] = 0;
+                                       err.desc = et;
+                                       err.source = "lb_plugin.c:edg_wlc_JobIdGetUnique()";
+                                       glite_jp_stack_error(ctx,&err);
+                                       goto fail;
+                               }
+                       }
+
+                       if (id) free(id); id = NULL;
                        nevents++;
                }
                free(line);
@@ -178,7 +198,7 @@ static int lb_open(void *fpctx, void *bhandle, const char *uri, void **handle) {
        fprintf(stderr,"lb_plugin: opened %d events\n", nevents);
 #endif
 
-       /* count state and status hiftory of the job given by the loaded events */
+       /* count state and status history of the job given by the loaded events */
        if ((retval = lb_status(h)) != 0) goto fail;
 
        *handle = (void *)h;
@@ -186,12 +206,17 @@ static int lb_open(void *fpctx, void *bhandle, const char *uri, void **handle) {
        return 0;
 
 fail:
+#ifdef PLUGIN_DEBUG
+       fprintf(stderr,"lb_plugin: open ERROR\n");
+#endif
        for (i = 0; i < nevents; i++) {
                edg_wll_FreeEvent(h->events[i]);
                free(h->events[i]);
        }
        free(h->events);
        free(buffer.buf);
+       if (id0) free(id0);
+       if (id) free(id);
        edg_wll_FreeContext(context);
        free(h);
        *handle = NULL;
@@ -230,6 +255,9 @@ static int lb_close(void *fpctx,void *handle) {
                        free (h->fullStatusHistory[i]);
                        i++;
                }
+               h->fullStatusHistory = NULL;
+               h->lastStatusHistory = NULL;
+               h->finalStatus = NULL;
        }
 
        free(h);
@@ -247,7 +275,7 @@ static int lb_query(void *fpctx,void *handle,const char *attr,glite_jp_attrval_t
        glite_jp_context_t      ctx = (glite_jp_context_t) fpctx;
        glite_jp_error_t        err; 
        glite_jp_attrval_t      *av = NULL;
-       int                     i, n_tags;
+       int                     i, j, n_tags;
        const char             *tag;
 
         glite_jp_clear_error(ctx); 
@@ -288,81 +316,66 @@ static int lb_query(void *fpctx,void *handle,const char *attr,glite_jp_attrval_t
                        av[0].timestamp = h->status.lastUpdateTime.tv_sec;
                }
        } else if (strcmp(attr, GLITE_JP_LB_VO) == 0) {
-               i = 0;
-               while (h->events[i]) {
-                       if (h->events[i]->type == EDG_WLL_EVENT_REGJOB) {
-                               struct cclassad *ad;
-                               char *string_vo = NULL; 
-
-                               ad = cclassad_create(h->events[i]->regJob.jdl);
-                               if (ad) {
-                                       if (cclassad_evaluate_to_string(ad, "VirtualOrganisation", &string_vo)) {
-                                               av = calloc(2, sizeof(glite_jp_attrval_t));
-                                               av[0].name = strdup(attr);
-                                               av[0].value = check_strdup(string_vo);
-                                               av[0].timestamp = h->events[i]->any.timestamp.tv_sec;
-                                       }
-                                       cclassad_delete(ad);
-                                       if (string_vo) free(string_vo);
+               if (h->status.jdl) {
+                       struct cclassad *ad;
+                       char *string_vo = NULL; 
+
+                       ad = cclassad_create(h->status.jdl);
+                       if (ad) {
+                               if (cclassad_evaluate_to_string(ad, "VirtualOrganisation", &string_vo)) {
+                                       av = calloc(2, sizeof(glite_jp_attrval_t));
+                                       av[0].name = strdup(attr);
+                                       av[0].value = check_strdup(string_vo);
+                                       av[0].timestamp = h->status.lastUpdateTime.tv_sec;
                                }
-                               break;
+                               cclassad_delete(ad);
+                               if (string_vo) free(string_vo);
                        }
-                       i++;
                }
         } else if (strcmp(attr, GLITE_JP_LB_eNodes) == 0) {
-               i = 0;
-               while (h->events[i]) {
-                       if (h->events[i]->type == EDG_WLL_EVENT_REGJOB) {
-                               struct cclassad *ad;
-                               char *string_nodes = NULL; 
-
-                               ad = cclassad_create(h->events[i]->regJob.jdl);
-                               if (ad) {
-                                       if (cclassad_evaluate_to_string(ad, "max_nodes_running", &string_nodes)) {
-                                               av = calloc(2, sizeof(glite_jp_attrval_t));
-                                               av[0].name = strdup(attr);
-                                               av[0].value = check_strdup(string_nodes);
-                                               av[0].timestamp = h->events[i]->any.timestamp.tv_sec;
-                                       }
-                                       cclassad_delete(ad);
-                                       if (string_nodes) free(string_nodes);
+               if (h->status.jdl) {
+                       struct cclassad *ad;
+                       char *string_nodes = NULL; 
+
+                       ad = cclassad_create(h->status.jdl);
+                       if (ad) {
+                               if (cclassad_evaluate_to_string(ad, "max_nodes_running", &string_nodes)) {
+                                       av = calloc(2, sizeof(glite_jp_attrval_t));
+                                       av[0].name = strdup(attr);
+                                       av[0].value = check_strdup(string_nodes);
+                                       av[0].timestamp = h->status.lastUpdateTime.tv_sec;
                                }
-                               break;
+                               cclassad_delete(ad);
+                               if (string_nodes) free(string_nodes);
                        }
-                       i++;
                }
         } else if (strcmp(attr, GLITE_JP_LB_eProc) == 0) {
-               i = 0;
-               while (h->events[i]) {
-                       if (h->events[i]->type == EDG_WLL_EVENT_REGJOB) {
-                               struct cclassad *ad;
-                               char *string_nodes = NULL; 
-
-                               ad = cclassad_create(h->events[i]->regJob.jdl);
-                               if (ad) {
-                                       if (cclassad_evaluate_to_string(ad, "NodeNumber", &string_nodes)) {
-                                               av = calloc(2, sizeof(glite_jp_attrval_t));
-                                               av[0].name = strdup(attr);
-                                               av[0].value = check_strdup(string_nodes);
-                                               av[0].timestamp = h->events[i]->any.timestamp.tv_sec;
-                                       }
-                                       cclassad_delete(ad);
-                                       if (string_nodes) free(string_nodes);
+               if (h->status.jdl) {
+                       struct cclassad *ad;
+                       char *string_nodes = NULL; 
+
+                       ad = cclassad_create(h->status.jdl);
+                       if (ad) {
+                               if (cclassad_evaluate_to_string(ad, "NodeNumber", &string_nodes)) {
+                                       av = calloc(2, sizeof(glite_jp_attrval_t));
+                                       av[0].name = strdup(attr);
+                                       av[0].value = check_strdup(string_nodes);
+                                       av[0].timestamp = h->status.lastUpdateTime.tv_sec;
                                }
-                               break;
+                               cclassad_delete(ad);
+                               if (string_nodes) free(string_nodes);
                        }
-                       i++;
                }
        } else if (strcmp(attr, GLITE_JP_LB_aTag) == 0 ||
                    strcmp(attr, GLITE_JP_LB_rQType) == 0 ||
                    strcmp(attr, GLITE_JP_LB_eDuration) == 0) {
                /* have to be retrieved from JDL, but probably obsolete and not needed at all */
-               char *et;
+               char et[BUFSIZ];
                *attrval = NULL;
                err.code = ENOSYS;
-               trio_asprintf(&et,"Attribute '%s' not implemented yet.",attr);
-               err.desc = strdup(et);
-               free(et);
+               snprintf(et,sizeof et,"Attribute '%s' not implemented yet.",attr);
+               et[BUFSIZ-1] = 0;
+               err.desc = et;
                return glite_jp_stack_error(ctx,&err);
        } else if (strcmp(attr, GLITE_JP_LB_RB) == 0) {
                if (h->status.network_server) {
@@ -389,13 +402,20 @@ static int lb_query(void *fpctx,void *handle,const char *attr,glite_jp_attrval_t
                        av[0].timestamp = h->status.lastUpdateTime.tv_sec;
                }
        } else if (strcmp(attr, GLITE_JP_LB_UIHost) == 0) {
-               if (h->status.location) {
-                       av = calloc(2, sizeof(glite_jp_attrval_t));
-                       av[0].name = strdup(attr);
-                       av[0].value = strdup(h->status.location);
-                       av[0].size = -1;
-                       av[0].timestamp = h->status.lastUpdateTime.tv_sec;
-               }
+                i = 0;
+                while (h->events[i]) {
+                        if (h->events[i]->type == EDG_WLL_EVENT_REGJOB) {
+                                if (h->events[i]->any.host) {
+                                        av = calloc(2, sizeof(glite_jp_attrval_t));
+                                        av[0].name = strdup(attr);
+                                        av[0].value = strdup(h->events[i]->any.host);
+                                        av[0].size = -1;
+                                        av[0].timestamp = h->events[i]->any.timestamp.tv_sec;
+                                }       
+                                break;
+                        }       
+                        i++;    
+                }       
        } else if (strcmp(attr, GLITE_JP_LB_CPUTime) == 0) {
                if (h->status.cpuTime) {
                        av = calloc(2, sizeof(glite_jp_attrval_t));
@@ -406,22 +426,38 @@ static int lb_query(void *fpctx,void *handle,const char *attr,glite_jp_attrval_t
                }
        } else if (strcmp(attr, GLITE_JP_LB_NProc) == 0) {
                /* currently LB hasn't got the info */
-               char *et;
+               char et[BUFSIZ];
                *attrval = NULL;
                err.code = ENOSYS;
-               trio_asprintf(&et,"Attribute '%s' not implemented yet.",attr);
-               err.desc = strdup(et);
-               free(et);
+               snprintf(et,sizeof et,"Attribute '%s' not implemented yet.",attr);
+               et[BUFSIZ-1] = 0;
+               err.desc = et;
                return glite_jp_stack_error(ctx,&err);
        } else if (strcmp(attr, GLITE_JP_LB_finalStatus) == 0) {
                av = calloc(2, sizeof(glite_jp_attrval_t));
                av[0].name = strdup(attr);
-               av[0].value = edg_wll_StatToString(h->status.state);
+               if (h->finalStatus) {
+                       av[0].value = edg_wll_StatToString(h->finalStatus->state);
+                       av[0].timestamp = h->finalStatus->timestamp.tv_sec;
+               } else {
+                       av[0].value = edg_wll_StatToString(h->status.state);
+                       av[0].timestamp = h->status.lastUpdateTime.tv_sec;
+               }
                av[0].size = -1;
-               av[0].timestamp = h->status.lastUpdateTime.tv_sec;
        } else if (strcmp(attr, GLITE_JP_LB_finalStatusDate) == 0) {
                 struct tm *t = NULL;
-                if ((t = gmtime(&h->status.lastUpdateTime.tv_sec)) != NULL) {
+                if ( (h->finalStatus) &&
+                    ((t = gmtime(&h->finalStatus->timestamp.tv_sec)) != NULL) ) {
+                       av = calloc(2, sizeof(glite_jp_attrval_t));
+                       av[0].name = strdup(attr);
+                       /* dateTime format: yyyy-mm-ddThh:mm:ss.uuuuuu */
+                        trio_asprintf(&av[0].value,"%04d-%02d-%02dT%02d:%02d:%02d.%06d",
+                                1900+t->tm_year, 1+t->tm_mon, t->tm_mday,
+                               t->tm_hour, t->tm_min, t->tm_sec,
+                               h->finalStatus->timestamp.tv_usec);
+                       av[0].size = -1;
+                       av[0].timestamp = h->finalStatus->timestamp.tv_sec;
+                } else if ((t = gmtime(&h->status.lastUpdateTime.tv_sec)) != NULL) {
                        av = calloc(2, sizeof(glite_jp_attrval_t));
                        av[0].name = strdup(attr);
                        /* dateTime format: yyyy-mm-ddThh:mm:ss.uuuuuu */
@@ -433,7 +469,13 @@ static int lb_query(void *fpctx,void *handle,const char *attr,glite_jp_attrval_t
                        av[0].timestamp = h->status.lastUpdateTime.tv_sec;
                 }
        } else if (strcmp(attr, GLITE_JP_LB_finalStatusReason) == 0) {
-               if (h->status.reason) {
+               if (h->finalStatus && h->finalStatus->reason) {
+                       av = calloc(2, sizeof(glite_jp_attrval_t));
+                       av[0].name = strdup(attr);
+                       av[0].value = strdup(h->finalStatus->reason);
+                       av[0].size = -1;
+                       av[0].timestamp = h->finalStatus->timestamp.tv_sec;
+               } else if (h->status.reason) {
                        av = calloc(2, sizeof(glite_jp_attrval_t));
                        av[0].name = strdup(attr);
                        av[0].value = strdup(h->status.reason);
@@ -441,26 +483,40 @@ static int lb_query(void *fpctx,void *handle,const char *attr,glite_jp_attrval_t
                        av[0].timestamp = h->status.lastUpdateTime.tv_sec;
                }
        } else if (strcmp(attr, GLITE_JP_LB_LRMSDoneStatus) == 0) {
+               i = 0;
+               j = -1;
+               while (h->events[i]) {
+                       if ( (h->events[i]->type == EDG_WLL_EVENT_DONE) && 
+                            (h->events[i]->any.source == EDG_WLL_SOURCE_LRMS) )
+                               j = i;
+                       i++;
+               }
                av = calloc(2, sizeof(glite_jp_attrval_t));
                av[0].name = strdup(attr);
-               av[0].value = edg_wll_DoneStatus_codeToString(h->status.done_code);
                av[0].size = -1;
-               av[0].timestamp = h->status.lastUpdateTime.tv_sec;
+               if ( j != -1) {
+                       av[0].value = edg_wll_DoneStatus_codeToString(h->events[j]->done.status_code);
+                       av[0].timestamp = h->events[j]->any.timestamp.tv_sec;
+               } else {
+                       av[0].value = edg_wll_DoneStatus_codeToString(h->status.done_code);
+                       av[0].timestamp = h->status.lastUpdateTime.tv_sec;
+               }
        } else if (strcmp(attr, GLITE_JP_LB_LRMSStatusReason) == 0) {
                i = 0;
+               j = -1;
                while (h->events[i]) {
-                       if (h->events[i]->type == EDG_WLL_EVENT_DONE) {
-                               if (h->events[i]->done.reason) {
-                                       av = calloc(2, sizeof(glite_jp_attrval_t));
-                                       av[0].name = strdup(attr);
-                                       av[0].value = strdup(h->events[i]->done.reason);
-                                       av[0].size = -1;
-                                       av[0].timestamp = h->events[i]->any.timestamp.tv_sec;
-                               }
-                               break;
-                       }
+                       if ( (h->events[i]->type == EDG_WLL_EVENT_DONE) && 
+                            (h->events[i]->any.source == EDG_WLL_SOURCE_LRMS) )
+                               j = i;
                        i++;
                }
+               if ( ( j != -1) && (h->events[j]->done.reason) ) {
+                       av = calloc(2, sizeof(glite_jp_attrval_t));
+                       av[0].name = strdup(attr);
+                       av[0].value = strdup(h->events[j]->done.reason);
+                       av[0].size = -1;
+                       av[0].timestamp = h->events[j]->any.timestamp.tv_sec;
+               }
        } else if (strcmp(attr, GLITE_JP_LB_retryCount) == 0) {
                av = calloc(2, sizeof(glite_jp_attrval_t));
                av[0].name = strdup(attr);
@@ -469,12 +525,12 @@ static int lb_query(void *fpctx,void *handle,const char *attr,glite_jp_attrval_t
                av[0].timestamp = h->status.lastUpdateTime.tv_sec;
        } else if (strcmp(attr, GLITE_JP_LB_additionalReason) == 0) {
                /* what is it? */
-               char *et;
+               char et[BUFSIZ];
                *attrval = NULL;
                err.code = ENOSYS;
-               trio_asprintf(&et,"Attribute '%s' not implemented yet.",attr);
-               err.desc = strdup(et);
-               free(et);
+               snprintf(et,sizeof et,"Attribute '%s' not implemented yet.",attr);
+               et[BUFSIZ-1] = 0;
+               err.desc = et;
                return glite_jp_stack_error(ctx,&err);
        } else if (strcmp(attr, GLITE_JP_LB_jobType) == 0) {
                av = calloc(2, sizeof(glite_jp_attrval_t));
@@ -502,8 +558,7 @@ static int lb_query(void *fpctx,void *handle,const char *attr,glite_jp_attrval_t
                        old_val = strdup ("");                  
                        for (i=0; i<h->status.children_num; i++) {
                                trio_asprintf(&val,"%s\t\t<jobId>%s</jobId>\n",
-                                       old_val, "");
-// FIXME:                                      h->status.children[i] ? h->status.children[i] : "");
+                                       old_val, h->status.children[i] ? h->status.children[i] : "");
                                if (old_val) free(old_val);
                                old_val = val; val = NULL; 
                        }
@@ -513,12 +568,12 @@ static int lb_query(void *fpctx,void *handle,const char *attr,glite_jp_attrval_t
                        av[0].size = -1;
                        av[0].timestamp = h->status.lastUpdateTime.tv_sec;
                } else {
-                       char *et;
+                       char et[BUFSIZ];
                        *attrval = NULL;
-                       err.code = 0;
-                       trio_asprintf(&et,"Value unknown for attribute '%s', there are no subjobs.",attr);
-                       err.desc = strdup(et);
-                       free(et);
+                       err.code = ENOENT;
+                       snprintf(et,sizeof et,"Value unknown for attribute '%s', there are no subjobs.",attr);
+                       et[BUFSIZ-1] = 0;
+                       err.desc = et;
                        return glite_jp_stack_error(ctx,&err);
                }
        } else if (strcmp(attr, GLITE_JP_LB_lastStatusHistory) == 0) {
@@ -654,26 +709,20 @@ static int lb_query(void *fpctx,void *handle,const char *attr,glite_jp_attrval_t
                        }
                }
        } else if (strcmp(attr, GLITE_JP_LB_JDL) == 0) {
-                i = 0;
-                while (h->events[i]) {
-                        if ((h->events[i]->type == EDG_WLL_EVENT_REGJOB) &&
-                           (h->events[i]->regJob.jdl) ) {
-                               av = calloc(2, sizeof(glite_jp_attrval_t));
-                               av[0].name = strdup(attr);
-                               av[0].value = strdup(h->events[i]->regJob.jdl);
-                               av[0].timestamp = h->events[i]->any.timestamp.tv_sec;
-                               av[0].size = -1;
-                               break;
-                       }
-                       i++;
+               if (h->status.jdl) {
+                       av = calloc(2, sizeof(glite_jp_attrval_t));
+                       av[0].name = strdup(attr);
+                       av[0].value = strdup(h->status.jdl);
+                       av[0].size = -1;
+                       av[0].timestamp = h->status.lastUpdateTime.tv_sec;
                }
        } else {
-               char *et;
+               char et[BUFSIZ];
                *attrval = NULL;
                err.code = EINVAL;
-               trio_asprintf(&et,"No such attribute '%s'.",attr);
-               err.desc = strdup(et);
-               free(et);
+               snprintf(et,sizeof et,"No such attribute '%s'.",attr);
+               et[BUFSIZ-1] = 0;
+               err.desc = et;
                return glite_jp_stack_error(ctx,&err);
        }
 
@@ -682,12 +731,12 @@ static int lb_query(void *fpctx,void *handle,const char *attr,glite_jp_attrval_t
                *attrval = av;
                return 0;
        } else {
-               char *et;
+               char et[BUFSIZ];
                *attrval = NULL;
                err.code = ENOENT;
-               trio_asprintf(&et,"Value unknown for attribute '%s'.",attr);
-               err.desc = strdup(et);
-               free(et);
+               snprintf(et,sizeof et,"Value unknown for attribute '%s'.",attr);
+               et[BUFSIZ-1] = 0;
+               err.desc = et;
                if (av) glite_jp_attrval_free(av,1); // XXX: probably not needed
                return glite_jp_stack_error(ctx,&err);
        }
@@ -698,7 +747,7 @@ static int lb_status(void *handle) {
 
        lb_handle       *h = (lb_handle *) handle;
         intJobStat     *js;
-        int            maxnstates, nstates, i, be_strict = 0;
+        int            maxnstates, nstates, i, be_strict = 0, retval;
        char            *errstring;
        edg_wll_JobStatCode old_state = EDG_WLL_JOB_UNDEF;
         
@@ -711,6 +760,7 @@ static int lb_status(void *handle) {
        nstates = 0;
        h->fullStatusHistory = calloc(maxnstates, sizeof(lb_historyStatus *));
        h->lastStatusHistory = NULL;
+       h->finalStatus = NULL;
        i = 0;
         while (h->events[i])  
         {
@@ -739,9 +789,14 @@ static int lb_status(void *handle) {
                        h->fullStatusHistory[nstates]->timestamp.tv_sec = js->pub.stateEnterTime.tv_sec;
                        h->fullStatusHistory[nstates]->timestamp.tv_usec = js->pub.stateEnterTime.tv_usec;
                        h->fullStatusHistory[nstates]->reason = check_strdup(js->pub.reason);           
+                       /* lastStatusHistory starts from the last WAITING state */
                        if (js->pub.state == EDG_WLL_JOB_WAITING) {
                                h->lastStatusHistory = &(h->fullStatusHistory[nstates]);
                        }
+                       /* finalStatus is the one preceeding the CLEARED state */
+                       if ( (js->pub.state == EDG_WLL_JOB_CLEARED) && (nstates > 0) ) {
+                               h->finalStatus = h->fullStatusHistory[nstates-1];
+                       }
                        old_state = js->pub.state;
                        nstates++;
                }
@@ -749,6 +804,31 @@ static int lb_status(void *handle) {
                i++;
        }
        h->fullStatusHistory[nstates] = NULL;
+       /* if there is no CLEARED state, finalStatus is just the last status 
+          and if there is no such thing, leave h->finalStatus NULL and for the attribute 
+           try to read something from the h->status */
+       if ( (h->finalStatus == NULL) && (nstates > 0) ) {
+               h->finalStatus = h->fullStatusHistory[nstates-1];
+       }
+
+       /* fill in also subjobs */
+       if (js->pub.children_num > 0) { 
+               edg_wll_Context context;
+               edg_wlc_JobId *subjobs;
+
+               if ((retval = edg_wll_InitContext(&context)) != 0) return retval;
+               subjobs = calloc(js->pub.children_num, sizeof (*subjobs));
+               if ((retval = edg_wll_GenerateSubjobIds(context, 
+                       js->pub.jobId, js->pub.children_num, js->pub.seed, &subjobs) ) != 0 ) {
+                       goto err;
+               }
+               js->pub.children = calloc(js->pub.children_num + 1, sizeof (*js->pub.children));
+               for (i=0; i<js->pub.children_num; i++) {
+                       js->pub.children[i] = edg_wlc_JobIdUnparse(subjobs[i]);
+               }
+               edg_wll_FreeContext(context);
+               free(subjobs);
+       }
 
        memcpy(&h->status, &js->pub, sizeof(edg_wll_JobStat));
 
index 0d77044..7cbcc6e 100644 (file)
@@ -400,8 +400,10 @@ limit_cycle_cleanup:
                edg_wll_FreeStmt(&sh);
        } while ( limit_loop );
 
-       if ( eperm && !*jobs_out )
-               edg_wll_SetError(ctx, EPERM, "matching jobs found but authorization failed");
+       if ( !*jobs_out ) {
+               if (eperm) edg_wll_SetError(ctx, EPERM, "matching jobs found but authorization failed");
+                 else     edg_wll_SetError(ctx, ENOENT, "no matching jobs found");
+       }
 
        if ( i && (ret == 0) )
        {
index 90bb132..869cf01 100644 (file)
@@ -2,32 +2,45 @@
 
 #include "glite/lb/context-int.h"
 #include "soap_version.h"
+#include "glite/security/glite_gscompat.h"
 
 #include "bk_ws_H.h"
 #include "bk_ws_Stub.h"
 
 
+#if GSOAP_VERSION >= 20709
+  #define GFITEM reason
+  #define GFNUM SOAP_TYPE_lbt__genericFault
+#else
+  #define GFITEM lbe__genericFault
+  #define GFNUM SOAP_TYPE__genericFault
+#endif
+
+
 void edg_wll_ErrToFault(const edg_wll_Context ctx,struct soap *soap)
 {
        char    *et,*ed;
        struct SOAP_ENV__Detail *detail = soap_malloc(soap,sizeof *detail);
+#if GSOAP_VERSION >= 20709
+       struct lbt__genericFault *f = soap_malloc(soap,sizeof *f);
+#else
        struct _genericFault *f = soap_malloc(soap,sizeof *f);
+#endif
 
+       f->GFITEM = soap_malloc(soap,sizeof *f->GFITEM);
+       memset(f->GFITEM, 0, sizeof(*f->GFITEM));
 
-       f->lbe__genericFault = soap_malloc(soap,sizeof *f->lbe__genericFault);
-       memset(f->lbe__genericFault, 0, sizeof(*f->lbe__genericFault));
-
-       f->lbe__genericFault->code = edg_wll_Error(ctx,&et,&ed);
-       f->lbe__genericFault->text = soap_malloc(soap,strlen(et)+1);
-       strcpy(f->lbe__genericFault->text,et); 
+       f->GFITEM->code = edg_wll_Error(ctx,&et,&ed);
+       f->GFITEM->text = soap_malloc(soap,strlen(et)+1);
+       strcpy(f->GFITEM->text,et); 
        free(et);
        if (ed) {
-               f->lbe__genericFault->description = soap_malloc(soap,strlen(ed)+1);
-               strcpy(f->lbe__genericFault->description,ed); 
+               f->GFITEM->description = soap_malloc(soap,strlen(ed)+1);
+               strcpy(f->GFITEM->description,ed); 
                free(ed);
        }
 
-       detail->__type = SOAP_TYPE__genericFault;
+       detail->__type = GFNUM;
 #if GSOAP_VERSION >= 20700
        detail->fault = f;
 #else
@@ -43,13 +56,19 @@ void edg_wll_ErrToFault(const edg_wll_Context ctx,struct soap *soap)
 
 void edg_wll_FaultToErr(const struct soap *soap,edg_wll_Context ctx)
 {
-       struct SOAP_ENV__Detail *detail = soap->version == 2 ?
-               soap->fault->SOAP_ENV__Detail : soap->fault->detail;
-
+       struct SOAP_ENV__Detail *detail;
        struct lbt__genericFault        *f;
 
-       if (detail->__type == SOAP_TYPE__genericFault) {
-#if GSOAP_VERSION >= 20700
+       if (!soap->fault) {
+               edg_wll_SetError(ctx,EINVAL,"SOAP: (no error info)");
+               return;
+       }
+
+       detail = soap->version == 2 ? soap->fault->SOAP_ENV__Detail : soap->fault->detail;
+       if (detail->__type == GFNUM) {
+#if GSOAP_VERSION >= 20709
+               f = detail->lbe__genericFault;
+#elif GSOAP_VERSION >= 20700
                f = ((struct _genericFault *) detail->fault)
                        ->lbe__genericFault;
 #else
@@ -62,7 +81,7 @@ void edg_wll_FaultToErr(const struct soap *soap,edg_wll_Context ctx)
                char    *s;
 
                asprintf(&s,"SOAP: %s", soap->version == 2 ?
-                       soap->fault->SOAP_ENV__Reason : soap->fault->faultstring);
+                       GLITE_SECURITY_GSOAP_REASON(soap) : soap->fault->faultstring);
                edg_wll_SetError(ctx,EINVAL,s);
                free(s);
        }
index 814f0ad..58086aa 100644 (file)
@@ -1,10 +1,12 @@
 #include <stdsoap2.h>
 
-#include "glite/security/glite_gsplugin.h"
-
 #include "glite/lb/context-int.h"
 #include "glite/lb/consumer.h"
 
+#include "soap_version.h"
+#include "glite/security/glite_gsplugin.h"
+#include "glite/security/glite_gscompat.h"
+
 #include "jobstat.h"
 #include "query.h"
 #include "bk_ws_H.h"
@@ -12,8 +14,6 @@
 #include "ws_fault.h"
 #include "ws_typeref.h"
 
-#include "soap_version.h"
-
 #if GSOAP_VERSION <= 20602
 #define __lb__GetVersion __ns1__GetVersion
 #define __lb__JobStatus __ns1__JobStatus
@@ -66,7 +66,8 @@ SOAP_FMAC5 int SOAP_FMAC6 __lb__JobStatus(
                return SOAP_FAULT;
        }
 
-       edg_wll_StatusToSoap(soap, &s, &(out->stat));
+       out->stat = soap_malloc(soap, sizeof(*out->stat));
+       edg_wll_StatusToSoap(soap, &s, out->stat);
 
        return SOAP_OK;
 }
index 5853f2a..2be99af 100644 (file)
 #include "glite/lb/consumer.h"
 /* XXX: references only, src and dest share pointers */
 
+#include "glite/security/glite_gscompat.h"
+
+#define VALUEEV_GET(X, V) GLITE_SECURITY_GSOAP_CHOICE_GET((X), V, event, 1)
+#define VALUEEV_SET(X, V, VALUE) GLITE_SECURITY_GSOAP_CHOICE_SET((X), V, lbt, event, 1, VALUE)
+#define VALUEEV_ISTYPE(X, V) GLITE_SECURITY_GSOAP_CHOICE_ISTYPE((X), V, lbt, event, 1)
+#define VALUEQR_GET(X, V) GLITE_SECURITY_GSOAP_CHOICE_GET((X), V, queryRecValue, 2)
+#define VALUEQR_SETTYPE(X, V) GLITE_SECURITY_GSOAP_CHOICE_SETTYPE((X), V, lbt, queryRecValue, 2)
+#define VALUEQR_SET(X, V, VALUE) GLITE_SECURITY_GSOAP_CHOICE_SET((X), V, lbt, queryRecValue, 2, VALUE)
+#define VALUEQR_ISTYPE(X, V) GLITE_SECURITY_GSOAP_CHOICE_ISTYPE((X), V, lbt, queryRecValue, 2)
+
 @@@{
 #
 # generate the command for move native data to soap web services structures
@@ -32,7 +42,7 @@ sub eventFieldAssign {
                $soap_fn = $1.ucfirst($2);
        };
        $source = "$src->$native_en.$native_fn";
-       $dest = "$dst->$soap_en->$soap_fn";
+       $dest = "VALUEEV_GET($dst, $soap_en)->$soap_fn";
 #      print STDERR "$src, $dst, $soap_en, $soap_fn, $native_fn, $tn, $usuc\n";
 
        if ($tn eq 'int') {
@@ -60,7 +70,8 @@ sub eventFieldAssign {
        } elsif ($tn eq 'string' || $tn eq 'notifid') {
                        gen $indent."$dest = soap_strdup(soap, $source);\n";
        } elsif ($tn eq 'jobstat') {
-                       gen $indent."edg_wll_StatusToSoap(soap, $source, &$dest);\n";
+                       gen $indent."$dest = soap_malloc(soap, sizeof(struct lbt__jobStatus))";
+                       gen $indent."edg_wll_StatusToSoap(soap, $source, $dest);\n";
        } elsif ($tn eq 'timeval') {
                        gen $indent."$dest = soap_malloc(soap, sizeof(struct lbt__timeval));\n";
                        gen $indent."$dest->tvSec = $source.tv_sec;\n";
@@ -91,7 +102,7 @@ sub eventFieldFree {
        while ($soap_fn =~ /([[:alpha:]]*)_([[:alpha:]_]*)/) {
                $soap_fn = $1.ucfirst($2);
        };
-       $dest = "$dst->$soap_en->$soap_fn";
+       $dest = "VALUEEV_GET($dst, $soap_en)->$soap_fn";
 
        if ($tn eq 'int' || $tn eq 'port' || $tn eq 'bool' || $tn eq 'logsrc') {
                if ($f->{optional}) {
@@ -147,13 +158,11 @@ void edg_wll_SoapToJobStatCode(enum lbt__statName in, edg_wll_JobStatCode *out)
        }
 }
 
-int edg_wll_StatusToSoap(struct soap *soap,edg_wll_JobStat const *src,struct lbt__jobStatus **dest)
+int edg_wll_StatusToSoap(struct soap *soap,edg_wll_JobStat const *src,struct lbt__jobStatus *js)
 {
        int     i,j;
        char    *s;
-       struct lbt__jobStatus *js;
 
-       if ( !(js = soap_malloc(soap, sizeof(*js))) ) return SOAP_FAULT;
        memset(js, 0, sizeof(*js));
        edg_wll_JobStatCodeToSoap(src->state, &(js->state));
 @@@{
@@ -179,14 +188,14 @@ int edg_wll_StatusToSoap(struct soap *soap,edg_wll_JobStat const *src,struct lbt
                        gen qq{
 !      /* XXX: don't count UNDEF */
 !      if (src->$_) {
-!              struct lbt__${usuc}Item **h = soap_malloc(soap,sizeof *h * (EDG_WLL_NUMBER_OF_STATCODES-1));
-!              js->__size$usuc = EDG_WLL_NUMBER_OF_STATCODES-1;
+!              GLITE_SECURITY_GSOAP_LIST_TYPE(lbt, ${usuc}Item) h;
+!
+!              GLITE_SECURITY_GSOAP_LIST_CREATE(soap, js, ${usuc}, struct lbt__${usuc}Item, EDG_WLL_NUMBER_OF_STATCODES-1);
+!              h = js->${usuc};
 !              for (i=1; i<EDG_WLL_NUMBER_OF_STATCODES; i++) {
-!                      h[i-1] = soap_malloc(soap, sizeof **h);
-!                      edg_wll_JobStatCodeToSoap(i,&h[i-1]->state);
-!                      h[i-1]->$fmap{$_} = src->$_\[i];
+!                      edg_wll_JobStatCodeToSoap(i,&GLITE_SECURITY_GSOAP_LIST_GET(h, i-1)->state);
+!                      GLITE_SECURITY_GSOAP_LIST_GET(h, i-1)->$fmap{$_} = src->$_\[i];
 !              }
-!              js->$usuc = h;
 !      }
 !      else {
 !              js->__size$usuc = 0;
@@ -196,30 +205,22 @@ int edg_wll_StatusToSoap(struct soap *soap,edg_wll_JobStat const *src,struct lbt
                } elsif ($ft eq 'taglist') {
                        gen qq{
 !      {
-!              struct lbt__tagValue    *t,**tl = NULL;
+!              struct lbt__tagValue    *t;
+!
+!              for (i=0; src->$_ && src->$_\[i].tag; i++);
+!              GLITE_SECURITY_GSOAP_LIST_CREATE(soap, js, $usuc, struct lbt__tagValue, i);
 !              for (i=0; src->$_ && src->$_\[i].tag; i++) {
-!                      t = soap_malloc(soap,sizeof *t);
-!                      tl = realloc(tl,(i+1) * sizeof *tl);
+!                      t = GLITE_SECURITY_GSOAP_LIST_GET(js->$usuc, i);
 !                      t->tag = soap_strdup(soap,src->$_\[i].tag);
 !                      t->value = soap_strdup(soap,src->$_\[i].value);
-!                      tl[i] = t;
 !              }
-!              js->__size$usuc = i;
-!              if (i) {
-!                      js->$usuc = soap_malloc(soap,i * sizeof *tl);
-!                      memcpy(js->$usuc,tl,i * sizeof *tl);
-!                      free(tl);
-!              } else js->$usuc = NULL;
 !      }
 };
                } elsif ($ft eq 'stslist') {
                        gen qq{
 !      for (i=0; src->$_ && src->$_\[i].state; i++);
-!      if ((js->__size$usuc = i)) {
-!              js->$usuc = soap_malloc(soap,i * sizeof *js->$usuc);
-!              for (j=0; j<i; i++) edg_wll_StatusToSoap(soap,src->$_+j,&js->$usuc\[j]);
-!      }
-!      else js->$usuc = NULL;
+!      GLITE_SECURITY_GSOAP_LIST_CREATE(soap, js, $usuc, struct lbt__jobStatus, i);
+!      for (j=0; j<i; j++) edg_wll_StatusToSoap(soap,src->$_+j,GLITE_SECURITY_GSOAP_LIST_GET(js->$usuc, j));
 };
                } elsif ($ft eq 'timeval') {
                        gen "\tjs->$usuc = soap_malloc(soap,sizeof *js->$usuc);\n";
@@ -231,7 +232,6 @@ int edg_wll_StatusToSoap(struct soap *soap,edg_wll_JobStat const *src,struct lbt
        }
 @@@}
 
-       *dest = js;
        return SOAP_OK;
 }
 
@@ -266,9 +266,9 @@ void edg_wll_SoapToStatus(struct soap *soap,struct lbt__jobStatus const *src,edg
 !              dest->$_\[0] = src->__size$usuc;
 !              for (i=0; i<src->__size$usuc; i++) {
 !                      edg_wll_JobStatCode     s;
-!                      edg_wll_SoapToJobStatCode(src->$usuc\[i]->state,&s);
+!                      edg_wll_SoapToJobStatCode(GLITE_SECURITY_GSOAP_LIST_GET(src->$usuc, i)->state,&s);
 !                      assert(s>=0); assert(s<EDG_WLL_NUMBER_OF_STATCODES);
-!                      dest->$_\[s+1] = src->$usuc\[i]->$fmap{$_};
+!                      dest->$_\[s+1] = GLITE_SECURITY_GSOAP_LIST_GET(src->$usuc, i)->$fmap{$_};
 !              }
 !      }
 !      else dest->$_ = NULL;
@@ -277,7 +277,7 @@ void edg_wll_SoapToStatus(struct soap *soap,struct lbt__jobStatus const *src,edg
                        gen qq{
 !      if (src->__size$usuc) {
 !              dest->$_ = calloc(src->__size$usuc + 1,sizeof *dest->$_);
-!              for (i=0; i<src->__size$usuc; i++) edg_wll_SoapToStatus(soap,src->$usuc\[i],dest->$_ + i);
+!              for (i=0; i<src->__size$usuc; i++) edg_wll_SoapToStatus(soap,GLITE_SECURITY_GSOAP_LIST_GET(src->$usuc, i),dest->$_ + i);
 !      }
 !      else dest->$_ = NULL;
 };
@@ -286,8 +286,8 @@ void edg_wll_SoapToStatus(struct soap *soap,struct lbt__jobStatus const *src,edg
        if (src->__size$usuc) {
                dest->$_ = calloc(src->__size$usuc + 1,sizeof *dest->$_);
                for (i=0; i<src->__size$usuc; i++) {
-                       soap_unlink(soap,dest->$_\[i].tag = src->$usuc\[i]->tag);
-                       soap_unlink(soap,dest->$_\[i].tag = src->$usuc\[i]->tag);
+                       soap_unlink(soap,dest->$_\[i].tag = GLITE_SECURITY_GSOAP_LIST_GET(src->$usuc, i)->tag);
+                       soap_unlink(soap,dest->$_\[i].tag = GLITE_SECURITY_GSOAP_LIST_GET(src->$usuc, i)->tag);
                }
        }
        else dest->$_ = NULL;
@@ -421,18 +421,18 @@ int edg_wll_SoapToQueryVal(
        union edg_wll_QueryVal                     *out)
 {
        assert(in); assert(out);
-       if ( in->c ) {
+       if ( VALUEQR_ISTYPE(in, c) ) {
                if ( attr == EDG_WLL_QUERY_ATTR_JOBID || attr == EDG_WLL_QUERY_ATTR_PARENT ) {
-                       if ( edg_wlc_JobIdParse(in->c, &(out->j)) ) return -1;
+                       if ( edg_wlc_JobIdParse(VALUEQR_GET(in, c), &(out->j)) ) return -1;
                } else {
-                       if ( !(out->c = strdup(in->c)) ) return -1;
+                       if ( !(out->c = strdup(VALUEQR_GET(in, c))) ) return -1;
                }
        }
-       else if ( in->t ) {
-               out->t.tv_sec = in->t->tvSec;
-               out->t.tv_usec = in->t->tvUsec;
+       else if ( VALUEQR_ISTYPE(in, t) ) {
+               out->t.tv_sec = VALUEQR_GET(in, t)->tvSec;
+               out->t.tv_usec = VALUEQR_GET(in, t)->tvUsec;
        }
-       else if ( in->i ) out->i = *(in->i);
+       else if ( VALUEQR_ISTYPE(in, i) ) out->i = *(VALUEQR_GET(in, i));
 
        return 0;
 }
@@ -452,21 +452,23 @@ int edg_wll_QueryValToSoap(
        case EDG_WLL_QUERY_ATTR_DESTINATION:
        case EDG_WLL_QUERY_ATTR_HOST:
        case EDG_WLL_QUERY_ATTR_INSTANCE:
-               if ( in->c && !(out->c = soap_strdup(soap, in->c)) ) return SOAP_FAULT;
+               VALUEQR_SET(out, c, in->c ? soap_strdup(soap, in->c) : NULL);
+               if (in->c && !VALUEQR_GET(out, c) ) return SOAP_FAULT;
                break;
        case EDG_WLL_QUERY_ATTR_JOBID:
        case EDG_WLL_QUERY_ATTR_PARENT: {
                        char *s = edg_wlc_JobIdUnparse(in->j);
-                       out->c = soap_strdup(soap, s);
+                       VALUEQR_SET(out, c, soap_strdup(soap, s));
                        free(s);
-                       if ( !out->c ) return SOAP_FAULT;
+                       if ( !VALUEQR_GET(out, c) ) return SOAP_FAULT;
                }
                break;
        case EDG_WLL_QUERY_ATTR_TIME:
-               out->t = soap_malloc(soap, sizeof(*(out->t)));
-               if ( !out->t ) return SOAP_FAULT;
-               out->t->tvSec = in->t.tv_sec;
-               out->t->tvUsec = in->t.tv_usec;
+               VALUEQR_SET(out, t, soap_malloc(soap, sizeof(*(VALUEQR_GET(out, t)))));
+               if ( !VALUEQR_GET(out, t) ) return SOAP_FAULT;
+               VALUEQR_SETTYPE(out, t);
+               VALUEQR_GET(out, t)->tvSec = in->t.tv_sec;
+               VALUEQR_GET(out, t)->tvUsec = in->t.tv_usec;
                break;
        case EDG_WLL_QUERY_ATTR_STATUS:
        case EDG_WLL_QUERY_ATTR_DONECODE:
@@ -475,9 +477,9 @@ int edg_wll_QueryValToSoap(
        case EDG_WLL_QUERY_ATTR_EVENT_TYPE:
        case EDG_WLL_QUERY_ATTR_RESUBMITTED:
        default:
-               out->i = soap_malloc(soap, sizeof(*(out->i)));
-               if ( !out->i ) return SOAP_FAULT;
-               *(out->i) = in->i;
+               VALUEQR_SET(out, i, soap_malloc(soap, sizeof(*(VALUEQR_GET(out, i)))));
+               if ( !VALUEQR_GET(out, i) ) return SOAP_FAULT;
+               *(VALUEQR_GET(out, i)) = in->i;
                break;
        }
 
@@ -522,13 +524,9 @@ err:
 int edg_wll_QueryRecToSoap(
        struct soap                     *soap,
        const edg_wll_QueryRec          *in,
-       struct lbt__queryRecord         **out)
+       struct lbt__queryRecord *qr)
 {
-       struct lbt__queryRecord         *qr;
-
-
-       assert(in); assert(out);
-       if ( !(qr = soap_malloc(soap, sizeof(*qr))) ) return SOAP_FAULT;
+       assert(in); assert(qr);
        memset(qr, 0, sizeof(*qr));
        if ( !in ) goto ret;
        edg_wll_QueryOpToSoap(in->op, &(qr->op));
@@ -544,7 +542,6 @@ int edg_wll_QueryRecToSoap(
        }
 
 ret:
-       *out = qr;
        return SOAP_OK;
 }
 
@@ -562,7 +559,7 @@ int edg_wll_SoapToQueryConds(const struct lbt__queryConditions *in, edg_wll_Quer
        assert(in); assert(out);
        if ( !(qr = calloc(in->__sizerecord+1, sizeof(*qr))) ) goto err;
        for ( i = 0; i < in->__sizerecord; i++ )
-               if ( edg_wll_SoapToQueryRec(in, in->record[i], qr+i) ) goto err;
+               if ( edg_wll_SoapToQueryRec(in, GLITE_SECURITY_GSOAP_LIST_GET(in->record, i), qr+i) ) goto err;
        *out = qr;
        return 0;
 
@@ -577,15 +574,12 @@ err:
 int edg_wll_QueryCondsToSoap(
        struct soap                     *soap,
        const edg_wll_QueryRec          *in,
-       struct lbt__queryConditions     **out)
+       struct lbt__queryConditions             *qc)
 {
        int                             i;
-       struct lbt__queryConditions     *qc;
 
 
-       assert(out);
-       if ( !(qc = soap_malloc(soap, sizeof(*qc))) )
-               return SOAP_FAULT;
+       assert(qc);
        memset(qc, 0, sizeof(*qc));
        if ( !in )
                goto ret;
@@ -602,22 +596,21 @@ int edg_wll_QueryCondsToSoap(
                if ( !qc->tagName ) return SOAP_FAULT;
        }
 
-       qc->__sizerecord = 0;
-       while ( in[qc->__sizerecord].attr ) qc->__sizerecord++;
+       i = 0;
+       while ( in[i].attr ) i++;
 
-       if ( !qc->__sizerecord )
+       if ( !i )
                goto ret;
 
-       qc->record = soap_malloc(soap, sizeof(*(qc->record)) * qc->__sizerecord);
+       GLITE_SECURITY_GSOAP_LIST_CREATE(soap, qc, record, struct lbt__queryRecord, i);
        if ( !qc->record )
                return SOAP_FAULT;
 
        for ( i = 0; in[i].attr; i++ )
-               if ( edg_wll_QueryRecToSoap(soap, &in[i], &(qc->record[i])) )
+               if ( edg_wll_QueryRecToSoap(soap, &in[i], GLITE_SECURITY_GSOAP_LIST_GET(qc->record, i)) )
                        return SOAP_FAULT;
 
 ret:
-       *out = qc;
        return SOAP_OK;
 }
 
@@ -627,7 +620,7 @@ ret:
  * \param IN in array of soap query condition
  * \param OUT out target array of queryRec
  */
-int edg_wll_SoapToQueryCondsExt(const struct lbt__queryConditions **in, int __sizecondition, edg_wll_QueryRec ***out)
+int edg_wll_SoapToQueryCondsExt(GLITE_SECURITY_GSOAP_LIST_TYPE(lbt, queryConditions) in, int __sizecondition, edg_wll_QueryRec ***out)
 {
        int                                     i;
        edg_wll_QueryRec  **qr;
@@ -635,7 +628,7 @@ int edg_wll_SoapToQueryCondsExt(const struct lbt__queryConditions **in, int __si
        assert(out);
        if ( !(qr = calloc(__sizecondition + 1, sizeof(*qr))) ) return -1;
        for ( i = 0; i < __sizecondition; i++ )
-               if ( edg_wll_SoapToQueryConds(in[i], qr+i) ) goto err;
+               if ( edg_wll_SoapToQueryConds(GLITE_SECURITY_GSOAP_LIST_GET(in, i), qr+i) ) goto err;
 
        *out = qr;
        return 0;
@@ -665,12 +658,10 @@ int edg_wll_QueryCondsExtToSoap(
        struct soap                     *soap,
        const edg_wll_QueryRec          **in,
        int                             *out_size,
-       struct lbt__queryConditions     ***out)
+       GLITE_SECURITY_GSOAP_LIST_TYPE(lbt, queryConditions) *out)
 {
        int                             i, size;
-       struct lbt__queryConditions     **qc;
-
-
+       GLITE_SECURITY_GSOAP_LIST_TYPE(lbt, queryConditions) qc;
        assert(in); assert(out);
 
        size = 0;
@@ -678,12 +669,11 @@ int edg_wll_QueryCondsExtToSoap(
 
        if ( !size ) 
                goto ret;
-
-       qc = soap_malloc(soap, sizeof(*qc) * size);
+       GLITE_SECURITY_GSOAP_LIST_CREATE0(soap, qc, size, struct lbt__queryConditions, size);
        if ( !qc ) return SOAP_FAULT;
 
        for ( i = 0; in[i]; i++ )
-               if ( edg_wll_QueryCondsToSoap(soap, in[i], &qc[i]) )
+               if ( edg_wll_QueryCondsToSoap(soap, in[i], GLITE_SECURITY_GSOAP_LIST_GET(qc, i)) )
                        return SOAP_FAULT;
 
 ret:
@@ -722,12 +712,11 @@ int edg_wll_JobsQueryResToSoap(
        }
        if ( states ) {
                for ( i = 0; states[i].state; i++ ) ;
-               out->states = soap_malloc(soap, sizeof(*(out->states))*i);
+               GLITE_SECURITY_GSOAP_LIST_CREATE(soap, out, states, struct lbt__jobStatus, i);
                if ( !out->states ) return SOAP_FAULT;
-               out->__sizestates = i;
 
                for ( i = 0; states[i].state; i++ )
-                       if ( edg_wll_StatusToSoap(soap, states+i, out->states+i) )
+                       if ( edg_wll_StatusToSoap(soap, states+i, GLITE_SECURITY_GSOAP_LIST_GET(out->states, i)) )
                                return SOAP_FAULT;
        }
 
@@ -878,13 +867,9 @@ static void edg_wll_SourceToSoap(edg_wll_Source in, enum lbt__eventSource *out)
  * \param IN event source event
  * \param OUT sevent target Soap event
  */
-int edg_wll_EventToSoap(struct soap* soap, const edg_wll_Event *event, struct lbt__event **sevent) {
+int edg_wll_EventToSoap(struct soap* soap, const edg_wll_Event *event, struct lbt__event *sevent) {
        char *s;
 
-       *sevent = soap_malloc(soap, sizeof(**sevent));
-       memset(*sevent, 0, sizeof(**sevent));
-       if (!*sevent) return 0;
-
        switch (event->any.type) {
 @@@{
        my ($soap_en);
@@ -900,14 +885,14 @@ int edg_wll_EventToSoap(struct soap* soap, const edg_wll_Event *event, struct lb
                };
 gen qq {
 !              case EDG_WLL_EVENT_$u:
-!                      (*sevent)->$soap_en = soap_malloc(soap, sizeof(struct lbt__event$soap_en));
+!                      VALUEEV_SET(sevent, $soap_en, soap_malloc(soap, sizeof(struct lbt__event$soap_en)));
 };
                selectType $event '_common_';
                for (getFieldsOrdered $event) {
                        my ($f);
 
                        $f = selectField $event $_;
-                       eventFieldAssign("\t\t\t", "event", "(*sevent)", $e, $f, 1);
+                       eventFieldAssign("\t\t\t", "event", "sevent", $e, $f, 1);
                }
 
                gen "\n";
@@ -917,7 +902,7 @@ gen qq {
                        my ($f);
 
                        $f = selectField $event $_;
-                       eventFieldAssign("\t\t\t", "event", "(*sevent)", $e, $f, 0);
+                       eventFieldAssign("\t\t\t", "event", "sevent", $e, $f, 0);
                }
 gen qq {
 !                      break;
@@ -948,7 +933,7 @@ void edg_wll_FreeSoapEvent(struct soap *soap, struct lbt__event *sevent) {
                $soap_en = $e;
                $soap_en = $1.ucfirst $2 while $soap_en =~ /([[:alpha:]]*)_([[:alpha:]_]*)/;
 
-               gen "\tif (sevent->$soap_en) {\n";
+               gen "\tif (VALUEEV_ISTYPE(sevent, $soap_en)) {\n";
 
                selectType $event '_common_';
                for (getFieldsOrdered $event) {
@@ -965,11 +950,14 @@ void edg_wll_FreeSoapEvent(struct soap *soap, struct lbt__event *sevent) {
                        $f = selectField $event $_;
                        eventFieldFree("\t\t", "sevent", $e, $f);
                }
-               gen qq "\t\tsoap_dealloc(soap, sevent->$soap_en);\n";
+               gen qq "\t\tsoap_dealloc(soap, VALUEEV_GET(sevent, $soap_en));\n";
                gen qq "\t}\n";
 }
 @@@}
+       // XXX: element dealocation belongs to higher layer
+#if GSOAP_VERSION <= 20706
        soap_dealloc(soap, sevent);
+#endif
 }
 
 
@@ -999,7 +987,7 @@ int edg_wll_EventsQueryResToSoap(
        const edg_wll_Event *events,
         struct _lbe__QueryEventsResponse *out)
 {
-       int memsize, i;
+       int i;
        struct lbt__event *event;
 
        /* alloc the events array */
@@ -1007,23 +995,27 @@ int edg_wll_EventsQueryResToSoap(
        memset(out, 0, sizeof(*out));
        for (out->__sizeevents = 0; events[out->__sizeevents].any.type != EDG_WLL_EVENT_UNDEF; out->__sizeevents++);
        if (!out->__sizeevents) return SOAP_OK;
-       memsize = out->__sizeevents * sizeof(*out->events);
-       out->events = soap_malloc(soap, memsize);
-       memset(out->events, 0, memsize);
+       GLITE_SECURITY_GSOAP_LIST_CREATE(soap, out, events, struct lbt__event, out->__sizeevents);
+       for (i = 0; i < out->__sizeevents; i++)
+               memset(GLITE_SECURITY_GSOAP_LIST_GET(out->events, i), 0, sizeof(struct lbt__event));
        if (!out->events) return SOAP_FAULT;
 
        for (i = 0; i < out->__sizeevents; i++) {
-               if (!edg_wll_EventToSoap(soap, &events[i], &out->events[i])) goto err;
+               if (!edg_wll_EventToSoap(soap, &events[i], GLITE_SECURITY_GSOAP_LIST_GET(out->events, i))) goto err;
        }
 
        return SOAP_OK;
 
 err:
-       event = out->events[0];
+       event = GLITE_SECURITY_GSOAP_LIST_GET(out->events, 0);
        while (event) {
                edg_wll_FreeSoapEvent(soap, event);
                event++;
        }
+       /*
+        * XXX: better list destroy here w/o deallocstion in
+        * edg_wll_FreeSoapEvent
+        */
        soap_dealloc(soap, out->events);
 
        return SOAP_FAULT;
@@ -1042,7 +1034,7 @@ static int edg_wll_SoapToEvent(
        {
                 my $comment = getTypeComment $event $name;
                 $name = $1.ucfirst $2 while $name =~ /([[:alpha:]]*)_([[:alpha:]_]*)/;
-               gen "\t\tif (in->$name) {\n";
+               gen "\t\tif (VALUEEV_ISTYPE(in, $name)) {\n";
                my $event_type = uc $name;
                gen "\t\t\tout->type = EDG_WLL_EVENT_$event_type;\n";
 
@@ -1064,37 +1056,38 @@ static int edg_wll_SoapToEvent(
                                $usuc = $1.uc($2).$3 while ($usuc =~ /([^_]*)_([a-z])(.*)/);
                                my $fuc = ucfirst($usuc);
 
+                               my $src = "VALUEEV_GET(in, $name)->$usuc";
                                if ($ft eq 'jobid') {
 
-                                       gen "\t\t\tif (in->$name->$usuc)\n";
-                                       gen "\t\t\t\tedg_wlc_JobIdParse(in->$name->$usuc,&out->$act.$fn);\n";
+                                       gen "\t\t\tif ($src)\n";
+                                       gen "\t\t\t\tedg_wlc_JobIdParse($src,&out->$act.$fn);\n";
                                } elsif ($ft eq 'timeval') {
-                                       gen "\t\t\tout->$act.$fn.tv_sec = in->$name->$usuc->tvSec;\n";
-                                       gen "\t\t\tout->$act.$fn.tv_usec = in->$name->$usuc->tvUsec;\n";
+                                       gen "\t\t\tout->$act.$fn.tv_sec = $src->tvSec;\n";
+                                       gen "\t\t\tout->$act.$fn.tv_usec = $src->tvUsec;\n";
                                } elsif ($ft eq 'string') {
-                                       gen "\t\t\tout->$act.$fn = in->$name->$usuc;\n";
-                                       gen "\t\t\tsoap_unlink(soap,in->$name->$usuc);\n";
+                                       gen "\t\t\tout->$act.$fn = $src;\n";
+                                       gen "\t\t\tsoap_unlink(soap,$src);\n";
                                } elsif ($ft eq 'int') {
                                        if ($f->{codes}) {
                                                if ($type eq '_common_') {
-                                                       gen "\t\t\tedg_wll_SoapTo$fuc(in->$name->$usuc,&(out->$act.$fn));\n";
+                                                       gen "\t\t\tedg_wll_SoapTo$fuc($src,&(out->$act.$fn));\n";
                                                }
                                                else {
-                                                       gen "\t\t\tedg_wll_SoapTo$name$fuc(in->$name->$usuc,&(out->$act.$fn));\n";
+                                                       gen "\t\t\tedg_wll_SoapTo$name$fuc($src,&(out->$act.$fn));\n";
                                                }
                                        }
                                        elsif ($f->{optional}) {
-                                               gen "\t\t\tout->$act.$fn = *in->$name->$usuc;\n";
+                                               gen "\t\t\tout->$act.$fn = *$src;\n";
                                        }
                                        else {
-                                               gen "\t\t\tout->$act.$fn = in->$name->$usuc;\n";
+                                               gen "\t\t\tout->$act.$fn = $src;\n";
                                        }
                                }
                                elsif ($ft eq 'logsrc') {
-                                       gen "\t\t\tedg_wll_SoapToSource(in->$name->$usuc, &(out->$act.$fn));\n";
+                                       gen "\t\t\tedg_wll_SoapToSource($src, &(out->$act.$fn));\n";
                                }
                                else {
-                                       gen "\t\t\tout->$act.$fn = in->$name->$usuc;\n";
+                                       gen "\t\t\tout->$act.$fn = $src;\n";
                                }
                        }       
                }
@@ -1127,7 +1120,7 @@ int edg_wll_SoapToEventsQueryRes(
        if (!events) return SOAP_FAULT;
 
        for (i=0; i < in.__sizeevents; i++) {
-               if (edg_wll_SoapToEvent(soap, in.events[i], &events[i]) != SOAP_OK) {
+               if (edg_wll_SoapToEvent(soap, GLITE_SECURITY_GSOAP_LIST_GET(in.events, i), &events[i]) != SOAP_OK) {
                        free_events(events);
                        return SOAP_FAULT;
                }
index e458ab9..924cc51 100644 (file)
@@ -8,7 +8,7 @@ extern "C" {
 extern void edg_wll_JobStatCodeToSoap(edg_wll_JobStatCode, enum lbt__statName *);
 extern void edg_wll_SoapToJobStatCode(enum lbt__statName, edg_wll_JobStatCode *);
 
-extern void edg_wll_StatusToSoap(struct soap *, edg_wll_JobStat const *, struct lbt__jobStatus **);
+extern void edg_wll_StatusToSoap(struct soap *, edg_wll_JobStat const *, struct lbt__jobStatus *);
 extern void edg_wll_SoapToStatus(struct soap *, struct lbt__jobStatus const *, edg_wll_JobStat *);
 
 extern void edg_wll_SoapToJobStatFlags(struct lbt__jobFlags const *, int *);
@@ -39,7 +39,7 @@ extern int edg_wll_SoapToQueryRec(
                        edg_wll_QueryRec *out);
 extern int edg_wll_QueryRecToSoap(struct soap *,
                        const edg_wll_QueryRec *,
-                       struct lbt__queryRecord **);
+                       struct lbt__queryRecord *);
 
 
 extern int edg_wll_SoapToQueryConds(
@@ -47,16 +47,16 @@ extern int edg_wll_SoapToQueryConds(
                        edg_wll_QueryRec **);
 extern int edg_wll_QueryCondsToSoap(struct soap *,
                        const edg_wll_QueryRec *,
-                       struct lbt__queryConditions **);
+                       struct lbt__queryConditions *);
 
 extern int edg_wll_SoapToQueryCondsExt(
-                       const struct lbt__queryConditions **,
+                       GLITE_SECURITY_GSOAP_LIST_TYPE(lbt, queryConditions) in,
                        int __sizecondition,
                        edg_wll_QueryRec ***);
 extern int edg_wll_QueryCondsExtToSoap(struct soap *,
                        const edg_wll_QueryRec **,
                        int *,
-                       struct lbt__queryConditions ***);
+                       GLITE_SECURITY_GSOAP_LIST_TYPE(lbt, queryConditions) *);
 
 extern int edg_wll_JobsQueryResToSoap(struct soap *,
                        edg_wlc_JobId *,
@@ -72,7 +72,7 @@ extern int edg_wll_SoapToEventsQueryRes(
                        edg_wll_Event **);
 
 
-extern int edg_wll_EventToSoap(struct soap*, const edg_wll_Event *, struct lbt__event **);
+extern int edg_wll_EventToSoap(struct soap*, const edg_wll_Event *, struct lbt__event *);
 extern void edg_wll_FreeSoapEvent(struct soap *, struct lbt__event *);
 
 #ifdef __cplusplus
index f57d744..10770dd 100644 (file)
@@ -287,10 +287,12 @@ void SoapConvTest::Conditions()
        struct edgwll__QueryConditions     *soapConds, *soapConds2;
        edg_wll_QueryRec                                  **stdConds2;
        int                                                                     ret;
+       int size;
+       void *tmp1;
 
        ret = edg_wll_QueryCondsExtToSoap(soap, (const edg_wll_QueryRec**)stdConds, &soapConds);
        CPPUNIT_ASSERT_MESSAGE("edg_wll_QueryCondsExtToSoap()", ret == SOAP_OK);
-       ret = edg_wll_SoapToQueryCondsExt(soapConds, &stdConds2);
+       ret = edg_wll_SoapToQueryCondsExt(soapConds, &stdConds2, &size, &tmp);
        CPPUNIT_ASSERT_MESSAGE("edg_wll_SoapToQueryCondsExt()", !ret);
 
        CPPUNIT_ASSERT_MESSAGE("Converted std results differs", !stdCondsCmp(stdConds, stdConds2));
index 042d445..3537827 100644 (file)
@@ -72,7 +72,7 @@ EXT_LIBS:= \
 COMMON_LIB:=-lglite_lb_common_${nothrflavour}
 CLIENT_LIB:=-lglite_lb_client_${nothrflavour}
 BKSERVER_LIB:=-lglite_lb_bkserver 
-JP_LIBS:=-lglite_jp_common -lglite_jp_trio
+JP_LIBS:=-lglite_jp_common_${nothrflavour} -lglite_jp_trio
 
 UTILS:=statistics mon mon-db
 
index e2e4105..50f02be 100644 (file)
@@ -20,8 +20,8 @@ SUFFIXES = .T
 VPATH=${top_srcdir}/src
 AT3=perl -I${top_srcdir}/project ${top_srcdir}/project/at3
 XSLTPROC:=xsltproc --nonet
-TIDY=tidy
 XMLLINT:=xmllint --nonet
+TIDY=tidy -i -q --show-warnings no --tidy-mark no --wrap 0
 docbookxls:=http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl
 
 STAGETO=interface
@@ -75,10 +75,13 @@ clean:
 
 ${WSDL}: %.wsdl: %.xml puke-wsdl.xsl
        ${XSLTPROC} ../src/puke-wsdl.xsl $< >$@
-       -${TIDY} -wrap 10000 -xml -m -i -q $@
-       -perl -i -n -e 'if (/^\s*$$/) { $$empty .= "\n"; } elsif (/^\s*<(xsd:)?(enumeration|element|input|output|fault)/) { print $$_; $$empty = "";} else { print "$$empty$$_"; $$empty=""; }; ' $@
+       -${TIDY} -xml -m $@
+# XXX: obsolete:
+#      -perl -i -n -e 'if (/^\s*$$/) { $$empty .= "\n"; } elsif (/^\s*<(xsd:)?(enumeration|element|input|output|fault)/) { print $$_; $$empty = "";} else { print "$$empty$$_"; $$empty=""; }; ' $@
 
 LB.html: doc.xml LBTypes.xml LB.xml puke-ug.xsl
        ${XSLTPROC} --novalid ../src/puke-ug.xsl $< >doc-html.xml
+       -${TIDY} -xml -m doc-html.xml
        ${XMLLINT} --valid --noout doc-html.xml
        ${XSLTPROC} --stringparam  chapter.autolabel 0 ${docbookxls} doc-html.xml >$@
+       -${TIDY} -asxhtml -m $@
index 142ad66..4a9a384 100755 (executable)
@@ -1,4 +1,4 @@
 #Fri Sep 02 14:16:49 CEST 2005
 # glite-lb-ws-interface_branch_3_0_0_RC15 tak is taken!
 module.version=2.2.1
-module.age=0
+module.age=1
index fd65f12..78cb6a5 100644 (file)
@@ -1,5 +1,2 @@
 <?xml version="1.0"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-           "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<book>
-</book>
+<book/>
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 3fff9a0..0000000
+++ /dev/null
@@ -1,590 +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.41  2006/03/15 17:35:35  akrenek
-       cares
-       
-       Revision 1.40  2006/03/15 17:33:24  akrenek
-       merge of 1.5 branch
-       
-       Revision 1.39  2005/11/27 21:51:18  eronchie
-       Applied fix for bug 13928
-       
-       Revision 1.38  2005/11/22 12:13:47  eronchie
-       Removed one utils
-       
-       Revision 1.37  2005/11/04 14:39:20  akrenek
-       merge in the "lbonly" hack
-       
-       Revision 1.36.4.6  2006/02/06 12:10:00  akrenek
-       make proxy depend on logger explicitely
-       
-       Revision 1.36.4.5  2005/12/02 11:15:33  akrenek
-       resolved logger dependency conflict
-       
-       Revision 1.36.4.4  2005/12/02 10:04:14  jpospi
-       server depends on logger
-       
-       Revision 1.36.4.3  2005/11/28 10:39:08  akrenek
-       merge bug #13928 fix on the pre_cares branch
-       
-       Revision 1.36.4.2  2005/11/24 12:59:36  akrenek
-       server depends on bones
-       
-       Revision 1.36.4.1  2005/11/24 12:32:02  akrenek
-       merged in "lbonly"
-
-       Revision 1.39  2005/11/27 21:51:18  eronchie
-       Applied fix for bug 13928
-       
-       Revision 1.38  2005/11/22 12:13:47  eronchie
-       Removed one utils
-       
-       Revision 1.37  2005/11/04 14:39:20  akrenek
-       merge in the "lbonly" hack
-       
-       Revision 1.36  2005/10/15 13:36:26  akrenek
-       added lb.utils
-       
-       Revision 1.35  2005/10/14 17:19:08  akrenek
-       build also lb.utils
-       
-       Revision 1.34  2005/10/14 11:02:06  akrenek
-       depends on jp.primary
-       
-       Revision 1.33  2005/09/19 15:23:45  akrenek
-       "The gigantic merge"; from release 1.4 branch to HEAD
-       
-       Revision 1.32.2.2  2005/10/31 12:45:10  akrenek
-       conditional disabling of cross-subsystem builds via "lbonly" property
-       
-       Revision 1.32.2.1  2005/08/18 10:36:05  eronchie
-       Added cross-subsystem dependencies feature in org.glite.lb subsystem.
-       Added wms-utils.jobid and security.gsoap-plugin among common dependencies.
-       Added security.voms among server dependencies.
-       At the moment I have not consider gridsite.core component.
-       Once built gridsiste component, run ant in org.glite.lb to build the whole lb
-       and its external gLite dependencies.
-       
-       Revision 1.32  2005/08/03 11:58:25  akrenek
-       Merged the release 1.0 branch
-       
-       Revision 1.31  2005/05/26 15:13:37  zurek
-       inserted module.build.file
-       
-       Revision 1.30  2005/03/17 09:59:31  zsalvet
-       Add proxy target.
-       
-       Revision 1.29  2005/03/16 10:02:52  zsalvet
-       proxy component added
-       
-       Revision 1.28.2.1  2005/02/12 01:38:13  glbuild
-       Changed start time
-       
-       Revision 1.28  2004/11/29 15:16:26  zsalvet
-       Add ws-interface to checkout/build machinery.
-       
-       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}"/>
-       <property file="${module.build.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="security.gsoap-plugin" unless="lbonly" depends="envset">
-               <if>
-                       <isset property="small.memory"/>
-                       <then>
-                               <exec dir="${security.subsystem.dir}" executable="${antExec}" failonerror="${failonerror}">
-                                       <arg line="gsoap-plugin -Dtarget=${target} -Dsmall.memory=true -Dbootstrap=${bootstrap} -Dfailonerror=${failonerror} -Ddo.cvs.tag=${do.cvs.tag}"/>
-                               </exec>
-                       </then>
-                       <else>
-                               <ant dir="${security.subsystem.dir}"
-                                       target="gsoap-plugin"
-                                       inheritall="false" >
-                                       <property name="target" value="${target}"/>
-                               </ant>
-                       </else>
-               </if>
-       </target>
-
-       <target name="security.voms-api-c" unless="lbonly" depends="envset">
-               <if>
-                       <isset property="small.memory"/>
-                       <then>
-                               <exec dir="${security.subsystem.dir}" executable="${antExec}" failonerror="${failonerror}">
-                                       <arg line="voms-api-c -Dtarget=${target} -Dsmall.memory=true -Dbootstrap=${bootstrap} -Dfailonerror=${failonerror} -Ddo.cvs.tag=${do.cvs.tag}"/>
-                               </exec>
-                       </then>
-                       <else>
-                               <ant dir="${security.subsystem.dir}"
-                                       target="voms-api-c"
-                                       inheritall="false" >
-                                       <property name="target" value="${target}"/>
-                               </ant>
-                       </else>
-               </if>
-       </target>
-
-       <target name="wms-utils.jobid" unless="lbonly" depends="envset">
-               <if>
-                       <isset property="small.memory"/>
-                       <then>
-                               <exec dir="${wms-utils.subsystem.dir}" executable="${antExec}" failonerror="${failonerror}">
-                                       <arg line="jobid -Dtarget=${target} -Dsmall.memory=true -Dbootstrap=${bootstrap} -Dfailonerror=${failonerror} -Ddo.cvs.tag=${do.cvs.tag}"/>
-                               </exec>
-                       </then>
-                       <else>
-                               <ant dir="${wms-utils.subsystem.dir}"
-                                       target="jobid"
-                                       inheritall="false" >
-                                       <property name="target" value="${target}"/>
-                               </ant>
-                       </else>
-               </if>
-       </target>
-
-       <target name="jp.primary" unless="lbonly" depends="envset">
-               <if>
-                       <isset property="small.memory"/>
-                       <then>
-                               <exec dir="${jp.subsystem.dir}" executable="${antExec}" failonerror="${failonerror}">
-                                       <arg line="primary -Dtarget=${target} -Dsmall.memory=true -Dbootstrap=${bootstrap} -Dfailonerror=${failonerror} -Ddo.cvs.tag=${do.cvs.tag}"/>
-                               </exec>
-                       </then>
-                       <else>
-                               <ant dir="${jp.subsystem.dir}"
-                                       target="primary"
-                                       inheritall="false" >
-                                       <property name="target" value="${target}"/>
-                               </ant>
-                       </else>
-               </if>
-       </target>
-
-       <if>
-               <isset property="setenvonly"/>
-               <then>
-                       <property name="lbonly" value="yes"/>
-               </then>
-       </if>
-
-       <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, c-ares, wms-utils.jobid, security.gsoap-plugin, 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, c-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, c-ares, mysql, gsoap, security.voms-api-c, jp.primary, client-interface, ws-interface, common, server-bones, 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="proxy" unless="setenvonly" depends="envset, globus, expat, c-ares, client-interface, common, server, logger">
-               <if>
-                       <isset property="small.memory" />
-                       <then>
-                               <exec dir="${lb.subsystem.dir}.proxy" 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}.proxy"
-                                    target="${target}"
-                                    inheritall="false" />
-                       </else>
-               </if>
-       </target>
-
-       <target name="logger" unless="setenvonly" depends="envset, globus, expat, c-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>
-
-       <target name="utils" unless="setenvonly" depends="envset, globus, expat, c-ares, client, server">
-               <if>
-                       <isset property="small.memory"/>
-                       <then>
-                               <exec dir="${lb.subsystem.dir}.utils" executable="${antExec}" failonerror="${failonerror}">
-                                       <arg line="${target} -Dsmall.memory=true -Dbootstrap=${bootstrap} -Dfailonerror=${failonerror} -Ddo.cvs.tag=${do.cvs.tag}"/>
-                               </exec>
-                       </then>
-                       <else>
-                               <ant dir="${lb.subsystem.dir}.utils"
-                                       target="${target}"
-                                       inheritall="false" />
-                       </else>
-               </if>
-       </target>
-
-       <!-- Main proxy -->
-       <target name="buildmodules" depends="envset,
-                                            utils, 
-                                            client-interface,
-                                            ws-interface,
-                                            client,
-                                            server-bones,
-                                            common,
-                                            server,
-                                            proxy,
-                                            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/deployment/README b/org.glite.lb/deployment/README
deleted file mode 100644 (file)
index 9b104e6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-deploy_all.diff - against RC31
-deploy_lb, deploy_jp - older patches
diff --git a/org.glite.lb/deployment/deploy_all.diff b/org.glite.lb/deployment/deploy_all.diff
deleted file mode 100644 (file)
index fe177ce..0000000
+++ /dev/null
@@ -1,454 +0,0 @@
-Index: org.glite/project/global.dependencies.properties
-===================================================================
-RCS file: /cvs/jra1mw/org.glite/project/global.dependencies.properties,v
-retrieving revision 1.482.2.279
-diff -u -p -u -r1.482.2.279 global.dependencies.properties
---- org.glite/project/global.dependencies.properties   4 Aug 2006 12:21:59 -0000       1.482.2.279
-+++ org.glite/project/global.dependencies.properties   1 Sep 2006 14:23:09 -0000
-@@ -1819,7 +1819,25 @@ ext.globus-sdk.description = The Globus 
- ext.globus-sdk.rpm.name    = vdt_globus_sdk
- ext.globus-sdk.rpm.version = ${ext.vdt.version}
- ext.globus-sdk.rpm.age     = ${ext.vdt.age}
--                                      
-+  
-+# Globus vdt data server - grid ftp server
-+ext.globus-data-server.name           = ${ext.globus.name}
-+ext.globus-data-server.vendor         = ${ext.globus.vendor}
-+ext.globus-data-server.version                = ${ext.globus.version}
-+ext.globus-data-server.platform               = ${platform}
-+ext.globus-data-server.subdir         = ${ext.globus-data-server.name}/${ext.globus-data-server.version}/${ext.globus-data-server.platform}
-+ext.globus-data-server.rep.base               = ${jra1.rep.base}
-+ext.globus-data-server.rep.file               =
-+ext.globus-data-server.rep.subdir     =
-+ext.globus-data-server.rep.url                = ${ext.globus-data-server.rep.base}/${ext.globus-data-server.subdir}/${ext.globus-data-server.rep.subdir}/${ext.globus-data-server.rep.file}
-+ext.globus-data-server.files          =
-+ext.globus-data-server.download               = http://www.cs.wisc.edu/vdt/releases/1.2.2/installing-rpms.html
-+ext.globus-data-server.homepage               = http://www.cs.wisc.edu/vdt//index.html
-+ext.globus-data-server.description    = The Globus Toolkit(R). This is the version packaged by VDT.
-+ext.globus-data-server.rpm.name       = vdt_globus_data_server
-+ext.globus-data-server.rpm.version    = ${ext.vdt.version}
-+ext.globus-data-server.rpm.age                = 1
-+                                    
- # GPT
- ext.gpt.name        = gpt
- ext.gpt.vendor      = gpt
-Index: org.glite.deployment/build.xml
-===================================================================
-RCS file: /cvs/jra1mw/org.glite.deployment/build.xml,v
-retrieving revision 1.61.2.2.2.12.2.26
-diff -u -p -u -r1.61.2.2.2.12.2.26 build.xml
---- org.glite.deployment/build.xml     24 Apr 2006 13:39:27 -0000      1.61.2.2.2.12.2.26
-+++ org.glite.deployment/build.xml     1 Sep 2006 14:23:09 -0000
-@@ -1619,6 +1619,39 @@
-               </if>
-       </target>
-+      <target name="jpps" unless="setenvonly" depends="envset,config">
-+              <if>
-+                      <isset property="small.memory"/>
-+                      <then>
-+                              <exec dir="${deployment.subsystem.dir}.jpps" 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; &quot;-Dbuild.name=${build.name}&quot;"/>
-+                              </exec>
-+                      </then>
-+                      <else>
-+                              <ant dir="${deployment.subsystem.dir}.jpps"
-+                                      target="${target}"
-+                                      inheritall="false" />
-+                      </else>
-+              </if>
-+      </target>
-+
-+
-+      <target name="jpis" unless="setenvonly" depends="envset,config">
-+              <if>
-+                      <isset property="small.memory"/>
-+                      <then>
-+                              <exec dir="${deployment.subsystem.dir}.jpis" 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; &quot;-Dbuild.name=${build.name}&quot;"/>
-+                              </exec>
-+                      </then>
-+                      <else>
-+                              <ant dir="${deployment.subsystem.dir}.jpis"
-+                                      target="${target}"
-+                                      inheritall="false" />
-+                      </else>
-+              </if>
-+      </target>
-+
-       <target name="io-server" unless="setenvonly" depends="envset,config">
-               <if>
-                       <isset property="small.memory"/>
-@@ -1730,6 +1763,8 @@
-                                       wn,
-                                       wms,
-                                       lb,
-+                                      jpps,
-+                                      jpis,
-                                       io-server,
-                                       io-client,
-                                       ce,
-Index: org.glite.deployment/project/dependencies.properties
-===================================================================
-RCS file: /cvs/jra1mw/org.glite.deployment/project/dependencies.properties,v
-retrieving revision 1.526.2.5.2.127.2.415.2.203
-diff -u -p -u -r1.526.2.5.2.127.2.415.2.203 dependencies.properties
---- org.glite.deployment/project/dependencies.properties       30 Aug 2006 07:41:36 -0000      1.526.2.5.2.127.2.415.2.203
-+++ org.glite.deployment/project/dependencies.properties       1 Sep 2006 14:23:09 -0000
-@@ -47,6 +47,8 @@
-       org.glite.deployment.hydra.version                              = glite-deployment-hydra_R_1_0_3
-       org.glite.deployment.io-client.version                          = glite-deployment-io-client_R_2_2_0
-       org.glite.deployment.io-server.version                          = glite-deployment-io-server_R_2_1_8
-+      org.glite.deployment.jpps.version                               = HEAD
-+      org.glite.deployment.jpis.version                               = HEAD
-       org.glite.deployment.lb.version                                 = glite-deployment-lb_R_2_2_4
-       org.glite.deployment.lcg-CE_torque.version                      = glite-deployment-lcg-CE_torque_R_3_0_4
-       org.glite.deployment.lcg-CE.version                             = glite-deployment-lcg-CE_R_3_0_5
-Index: org.glite.deployment/project/glite.deployment.csf.xml
-===================================================================
-RCS file: /cvs/jra1mw/org.glite.deployment/project/glite.deployment.csf.xml,v
-retrieving revision 1.44.2.1.2.11.2.24
-diff -u -p -u -r1.44.2.1.2.11.2.24 glite.deployment.csf.xml
---- org.glite.deployment/project/glite.deployment.csf.xml      18 Apr 2006 15:42:14 -0000      1.44.2.1.2.11.2.24
-+++ org.glite.deployment/project/glite.deployment.csf.xml      1 Sep 2006 14:23:09 -0000
-@@ -667,6 +667,14 @@
-                       <equals arg1="${org.glite.deployment.lb.version}" arg2="HEAD" />
-               </condition>
-+              <condition property="jpps.head">
-+                      <equals arg1="${org.glite.deployment.jpps.version}" arg2="HEAD" />
-+              </condition>
-+
-+              <condition property="jpis.head">
-+                      <equals arg1="${org.glite.deployment.jpis.version}" arg2="HEAD" />
-+              </condition>
-+
-               <condition property="io-server.head">
-                       <equals arg1="${org.glite.deployment.io-server.version}" arg2="HEAD" />
-               </condition>
-@@ -1571,6 +1579,28 @@
-                       tag="${org.glite.deployment.lb.version}" />
-       </target>
-+      <!-- jpps component -->
-+      <target name="jpps" depends="get.jpps.head, get.jpps.tag"/>
-+      <target name="get.jpps.head" if="jpps.head">
-+              <cvs-co package="org.glite.deployment.jpps" />
-+        </target>
-+
-+      <target name="get.jpps.tag" unless="jpps.head">
-+              <cvs-co package="org.glite.deployment.jpps"
-+                      tag="${org.glite.deployment.jpps.version}" />
-+      </target>
-+
-+      <!-- jpis component -->
-+      <target name="jpis" depends="get.jpis.head, get.jpis.tag"/>
-+      <target name="get.jpis.head" if="jpis.head">
-+              <cvs-co package="org.glite.deployment.jpis" />
-+        </target>
-+
-+      <target name="get.jpis.tag" unless="jpis.head">
-+              <cvs-co package="org.glite.deployment.jpis"
-+                      tag="${org.glite.deployment.jpis.version}" />
-+      </target>
-+
-       <!-- io-server component -->
-       <target name="io-server" depends="get.io-server.head, get.io-server.tag"/>
-       <target name="get.io-server.head" if="io-server.head">
-@@ -1667,6 +1697,8 @@
-                                       wn,
-                                       wms,
-                                       lb,
-+                                      jpis,
-+                                      jpps,
-                                       io-server,
-                                       io-client,
-                                       ce" />
-Index: org.glite.deployment.lb/config/scripts/glite-lb-config.py
-===================================================================
-RCS file: /cvs/jra1mw/org.glite.deployment.lb/config/scripts/glite-lb-config.py,v
-retrieving revision 1.65.2.4
-diff -u -p -u -r1.65.2.4 glite-lb-config.py
---- org.glite.deployment.lb/config/scripts/glite-lb-config.py  26 May 2006 12:24:22 -0000      1.65.2.4
-+++ org.glite.deployment.lb/config/scripts/glite-lb-config.py  1 Sep 2006 14:23:10 -0000
-@@ -129,7 +129,12 @@ python %s-config [OPTION...]""" % (self.
-     
-             if not os.path.exists('/tmp/mysql.sock'):
-                 os.symlink('/var/lib/mysql/mysql.sock', '/tmp/mysql.sock')
--            
-+
-+
-+        #-------------------------------------------------------------------
-+        # start bkserver
-+        #-------------------------------------------------------------------
-+
-         pid = glib.getPID('bkserverd')
-         if pid != 0:
-             print 'The gLite LB Server service is already running. Restarting...'
-@@ -142,7 +147,7 @@ python %s-config [OPTION...]""" % (self.
-         pid = glib.getPID('bkserverd')
-         if (pid != 0):
--            print "The gLite LB Server service has been started               ",
-+            print "The gLite LB Server service has been started              ",
-             glib.printOkMessage()
-         else:
-             glib.printErrorMessage("Could not start the gLite LB Server service")
-@@ -151,6 +156,36 @@ python %s-config [OPTION...]""" % (self.
-             return 1
-         
-         #-------------------------------------------------------------------
-+        # start jp-importer, if enabled
-+        #-------------------------------------------------------------------
-+
-+        lb_export = 0
-+        if params.has_key('lb.export.enabled'):
-+            if params['lb.export.enabled'] == "true":
-+                lb_export = 1
-+
-+        if lb_export:
-+            pid = glib.getPID('jp-importer')
-+            if pid != 0:
-+                print 'The gLite JP Importer service is already running. Restarting...'
-+                os.system('%s/etc/init.d/glite-jp-importer stop' % os.environ['GLITE_LOCATION'])
-+            else:
-+                print 'Starting the gLite JP Importer service...'
-+
-+            os.system('%s/etc/init.d/glite-jp-importer start' % os.environ['GLITE_LOCATION'])
-+
-+            pid = glib.getPID('jp-importer')
-+
-+            if (pid != 0):
-+                print "The gLite JP Importer service has been started            ",
-+                glib.printOkMessage()
-+            else:
-+                glib.printErrorMessage("Could not start the gLite JP Importer service")
-+                glib.printErrorMessage("Please verify and re-run the script                        "),
-+                glib.printFailedMessage()
-+                return 1
-+        
-+        #-------------------------------------------------------------------
-         # Start Servicetool
-         #-------------------------------------------------------------------
-@@ -170,6 +205,10 @@ python %s-config [OPTION...]""" % (self.
-         if (pid != 0):
-             os.system('%s/etc/init.d/glite-lb-bkserverd stop' % os.environ['GLITE_LOCATION'])
-+        #-------------------------------------------------------------------
-+        # Book Keeping Server
-+        #-------------------------------------------------------------------
-+
-         pid = glib.getPID('bkserverd')
-         if (pid != 0):
-             print 'Could not stop the LB Server service            ',
-@@ -180,6 +219,25 @@ python %s-config [OPTION...]""" % (self.
-             glib.printOkMessage()
-         
-         #-------------------------------------------------------------------
-+        # JP Importer
-+        #-------------------------------------------------------------------
-+
-+        pid = glib.getPID('jp-importer')
-+        if (pid != 0):
-+            os.system('%s/etc/init.d/glite-jp-importer stop' % os.environ['GLITE_LOCATION'])
-+
-+        pid = glib.getPID('jp-importer')
-+        if (pid != 0):
-+            print 'Could not stop the JP Importer service                  ',
-+            glib.printFailedMessage()
-+            error_level = 1
-+        else:
-+            if params.has_key('lb.export.enabled'):
-+                if params['lb.export.enabled'] == "true":
-+                    print 'The JP Importer service has been stopped                  ',
-+                    glib.printOkMessage()
-+        
-+        #-------------------------------------------------------------------
-         # MySQL
-         #-------------------------------------------------------------------
-@@ -204,6 +262,10 @@ python %s-config [OPTION...]""" % (self.
-         if retval != 0:
-             error_level = 1
-+        retval = os.system('%s/etc/init.d/glite-jp-importer status' % os.environ['GLITE_LOCATION'])
-+        if retval != 0:
-+            error_level = 1
-+
-         #-------------------------------------------------------------------
-         # Servicetool
-         #-------------------------------------------------------------------
-@@ -334,7 +396,29 @@ python %s-config [OPTION...]""" % (self.
-             print "\n==> MySQL database %s already exist\n" % params['lb.database.name']
-             
-         self.mysql.stop()
--    
-+
-+        # ------------------------------------------------------------------
-+        # export from bkserver to cron
-+        # ------------------------------------------------------------------
-+      if params['GLITE_LB_EXPORT_ENABLED'] == "true":
-+          file = open('%s/etc/glite-lb-export-cron-wrapper.sh' % os.environ['GLITE_LOCATION'], 'w')
-+          file.write('#! /bin/sh\n')
-+          file.write('. %s\n' % glib.getInstallerExportFile())
-+            file.write('$GLITE_LOCATION/sbin/glite-lb-export.sh\n')
-+          file.close()
-+            os.system('/bin/chmod 0755 %s/etc/glite-lb-export-cron-wrapper.sh' % os.environ['GLITE_LOCATION'])
-+
-+          file = open('/etc/cron.d/glite-lb-export.cron', 'w')
-+          file.write('# periodically run purge and export jobs from bkserver\n')
-+          file.write('00,30 * * * * %s %s/etc/glite-lb-export-cron-wrapper.sh 1>/dev/null\n' % (params['glite.user.name'], os.environ['GLITE_LOCATION']))
-+          file.close()
-+            os.system('/bin/chmod 0644 /etc/cron.d/glite-lb-export.cron')
-+        else
-+            os.system('/bin/rm -f /etc/cron.d/glite-lb-export.cron')
-+
-+            # Touch cron spool directory to cause reloading of the crontabs
-+            os.system("/bin/touch /var/spool/cron")
-+
-         #-------------------------------------------------------------------
-         # RGMA servicetool: configure servicetool
-         #-------------------------------------------------------------------
-@@ -420,6 +504,19 @@ def set_env():
-     # Perl
-     glib.addEnvPath("PERL5LIB", "%s/lib/perl:%s/lib/perl5" % (os.environ['GPT_LOCATION'],os.environ['GLITE_LOCATION']))
-+    # LB export
-+    glib.export('GLITE_LB_EXPORT_ENABLED', params['lb.export.enabled']);
-+    glib.export('GLITE_LB_EXPORT_JPPS', params['lb.export.jpps']);
-+    glib.export('GLITE_LB_EXPORT_JPREG_MAILDIR', params['lb.export.jpreg']);
-+    glib.export('GLITE_LB_EXPORT_JPDUMP_MAILDIR', params['lb.export.jpdump']);
-+    glib.export('GLITE_LB_EXPORT_DUMPDIR', params['lb.export.dump']);
-+    glib.export('GLITE_LB_EXPORT_DUMPDIR_KEEP', params['lb.export.dump.keep']);
-+    glib.export('GLITE_LB_EXPORT_JOBSDIR', params['lb.export.jobs']);
-+    glib.export('GLITE_LB_EXPORT_JOBSDIR_KEEP', params['lb.export.jobs.keep']);
-+    glib.export('GLITE_LB_EXPORT_PURGEDIR', params['lb.export.purge']);
-+    glib.export('GLITE_LB_EXPORT_PURGEDIR_KEEP', params['lb.export.purge.keep']);
-+    glib.export('GLITE_LB_EXPORT_PURGE_ARGS', '%s' % params['lb.export.purgeargs']);
-+
-     # Set environment
-     glib.setUserEnv()
-     
-Index: org.glite.deployment.lb/config/templates/glite-lb.cfg.xml
-===================================================================
-RCS file: /cvs/jra1mw/org.glite.deployment.lb/config/templates/glite-lb.cfg.xml,v
-retrieving revision 1.21
-diff -u -p -u -r1.21 glite-lb.cfg.xml
---- org.glite.deployment.lb/config/templates/glite-lb.cfg.xml  13 Mar 2006 15:19:21 -0000      1.21
-+++ org.glite.deployment.lb/config/templates/glite-lb.cfg.xml  1 Sep 2006 14:23:10 -0000
-@@ -17,9 +17,16 @@
-                       parameter. Leave it empty of comment it out to use the same as 'glite.user.name'"
-                       value="changeme"/>
-               
--          <mysql.root.password
--              description="The mysql root password"
--              value="changeme"/>
-+              <mysql.root.password
-+                      description="The mysql root password"
-+                      value="changeme"/>
-+
-+              <lb.export.jpps
-+                      description="Job Provenance Primary Storage.
-+                              [Example: localhost:8901][Type: string]"
-+                      value="changeme"/>
-+
-+
-       
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-               <!-- Advanced parameters - Change them if you know what you're doing -->
-@@ -55,6 +62,12 @@
-                               [Example: 17M][Type: Integer][Unit: MB]"
-                       value="17M"/>
-+              <lb.export.enabled
-+                      description="Enables exports to Job Provenance.
-+                              [Example: true][Type: boolean]"
-+                      value="true"/>
-+
-+
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-               <!-- System parameters - You should leave these alone -->
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->               
-@@ -67,7 +80,47 @@
-                       <value>destination</value>
-               </lb.index.list>
--                      
-+
-+              <lb.export.jpreg
-+                      description="Spool directory where job registration requests are stored before delivered to JPPS.
-+                              [Type: string]"
-+                      value="/tmp/jpreg"/>
-+
-+              <lb.export.jpdump
-+                      description="Spool directory where dump upload requests are stored before delivered to JPPS.
-+                              [Type: string]"
-+                      value="/tmp/jpdump"/>
-+
-+              <lb.export.dump
-+                      description="Temporary directory for monitoring dumps, it's cleaned automatically.
-+                              [Type: string]"
-+                      value="/tmp/dump"/>
-+
-+              <lb.export.purge
-+                      description="Temporary directory for dumps of purged jobs.
-+                              [Type: string]"
-+                      value="/tmp/purge"/>
-+
-+              <lb.export.purge.keep
-+                      description="Directory for dumps of jobs that were already handled (sent to JPPS).
-+                              [Type: string]"
-+                      value=""/>
-+
-+              <lb.export.jobs
-+                      description="Exported events in file per job form before delivered to JPPS.
-+                              [Type: string]"
-+                      value="/tmp/lb_export"/>
-+
-+              <lb.export.jobs.keep
-+                      description="Keep the already handled exported events in file per job form.
-+                              [Type: string]"
-+                      value=""/>
-+
-+              <lb.export.purgeargs
-+                      description="Arguments for LB purge process (a job in a given terminal state will be exported from the LB after timeouts defined here). See also glite-lb-purge documentation.
-+                              [Example: -c 1h -a 1h -n 1h -o 1d][Type: string]"
-+                      value="--cleared 2d --aborted 2w --cancelled 2w --other 2m"/>
-+
-       </parameters>
- </config>
-Index: org.glite.deployment.lb/project/glite-lb.sdf.xml.template
-===================================================================
-RCS file: /cvs/jra1mw/org.glite.deployment.lb/project/glite-lb.sdf.xml.template,v
-retrieving revision 1.38.2.2
-diff -u -p -u -r1.38.2.2 glite-lb.sdf.xml.template
---- org.glite.deployment.lb/project/glite-lb.sdf.xml.template  2 May 2006 10:36:19 -0000       1.38.2.2
-+++ org.glite.deployment.lb/project/glite-lb.sdf.xml.template  1 Sep 2006 14:23:10 -0000
-@@ -57,6 +57,12 @@
-                                       build="@org.glite.lb.server-bones.info.build@"
-                                       arch="i386"/>
-                                          
-+                              <component name="glite-lb-client"
-+                                      version="@org.glite.lb.client.info.version@"
-+                                      age="@org.glite.lb.client.info.age@"
-+                                      build="@org.glite.lb.client.info.build@"
-+                                      arch="i386"/>
-+                                         
-                               <component name="glite-wms-utils-jobid"
-                                       version="@org.glite.wms-utils.jobid.info.version@"
-                                       age="@org.glite.wms-utils.jobid.info.age@"
-@@ -105,6 +111,12 @@
-                     build="@org.glite.jp.ws-interface.info.build@"
-                     arch="i386"/>
-+                              <component name="glite-jp-client"
-+                    version="@org.glite.jp.client.info.version@"
-+                    age="@org.glite.jp.client.info.age@"
-+                    build="@org.glite.jp.client.info.build@"
-+                    arch="i386"/>
-+
-                 <component name="gridsite"
-                     version="@org.gridsite.core.info.version@"
-                     age="@org.gridsite.core.info.age@"
diff --git a/org.glite.lb/deployment/deploy_jp.diff b/org.glite.lb/deployment/deploy_jp.diff
deleted file mode 100644 (file)
index 76a9fa7..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-This patch was merged to deploy_all.diff, don't use it anymore
-
-Index: org.glite/project/global.dependencies.properties
-===================================================================
-RCS file: /cvs/jra1mw/org.glite/project/global.dependencies.properties,v
-retrieving revision 1.479.2.70.2.3.2.3.2.1
-diff -u -r1.479.2.70.2.3.2.3.2.1 global.dependencies.properties
---- org.glite/project/global.dependencies.properties   9 May 2006 16:17:50 -0000       1.479.2.70.2.3.2.3.2.1
-+++ org.glite/project/global.dependencies.properties   30 Jun 2006 11:13:49 -0000
-@@ -15,7 +15,7 @@
- # Authors: Joachim Flammer <joachim.flammer@cern.ch>          
- #
- # Version info: $Id$
--# Release: $Name$
-+# Release: $Name$
- # 
- # Revision history:
- # $Log$
- # Revision 1.3  2006/06/30 11:30:28  mmulac
- # actualized patches
- # - against org.glite a org.glite.deployment from glite_R_3_0_0
- #
-@@ -1562,7 +1562,26 @@
- ext.globus-sdk.rpm.name    = vdt_globus_sdk
- ext.globus-sdk.rpm.version = ${ext.vdt.version}
- ext.globus-sdk.rpm.age     = 1
--                                      
-+  
-+# Globus vdt data server - grid ftp server
-+ext.globus-data-server.name           = ${ext.globus.name}
-+ext.globus-data-server.vendor         = ${ext.globus.vendor}
-+ext.globus-data-server.version                = ${ext.globus.version}
-+ext.globus-data-server.platform               = ${platform}
-+ext.globus-data-server.subdir         = ${ext.globus-data-server.name}/${ext.globus-data-server.version}/${ext.globus-data-server.platform}
-+ext.globus-data-server.rep.base               = ${jra1.rep.base}
-+ext.globus-data-server.rep.file               =
-+ext.globus-data-server.rep.subdir     =
-+ext.globus-data-server.rep.url                = ${ext.globus-data-server.rep.base}/${ext.globus-data-server.subdir}/${ext.globus-data-server.rep.subdir}/${ext.globus-data-server.rep.file}
-+ext.globus-data-server.files          =
-+ext.globus-data-server.download               = http://www.cs.wisc.edu/vdt/releases/1.2.2/installing-rpms.html
-+ext.globus-data-server.homepage               = http://www.cs.wisc.edu/vdt//index.html
-+ext.globus-data-server.description    = The Globus Toolkit(R). This is the version packaged by VDT.
-+ext.globus-data-server.rpm.name       = vdt_globus_data_server
-+ext.globus-data-server.rpm.version    = ${ext.vdt.version}
-+ext.globus-data-server.rpm.age                = 1
-+
-+                                    
- # GPT
- ext.gpt.name        = gpt
- ext.gpt.vendor      = gpt
-@@ -3266,8 +3285,9 @@
- org.glite.dgas.version                          = glite-dgas_R_1_1_16
- org.glite.gpbox.version                         = glite-gpbox_R_1_0_15
- org.glite.jdl.version                           = glite-jdl_R_1_0_0
--org.glite.jp.version                            = glite-jp_R_1_1_3
--org.glite.lb.version                            = glite-lb_R_1_2_9
-+org.glite.jp.version                            = glite-jp_R_1_3_0
-+org.glite.lb.version                            = glite-lb_R_1_2_11
-+
- org.glite.rgma.version                          = glite-rgma_R_5_0_26
- org.glite.security.version                      = glite-security_R_3_0_15
- org.glite.service-discovery.version             = glite-service-discovery_R_2_0_12
-Index: org.glite.deployment/build.xml
-===================================================================
-RCS file: /cvs/jra1mw/org.glite.deployment/build.xml,v
-retrieving revision 1.61.2.2.2.12.2.26
-diff -u -r1.61.2.2.2.12.2.26 build.xml
---- org.glite.deployment/build.xml     24 Apr 2006 13:39:27 -0000      1.61.2.2.2.12.2.26
-+++ org.glite.deployment/build.xml     30 Jun 2006 11:13:49 -0000
-@@ -9,7 +9,7 @@
-       Authors: Alberto Di Meglio <alberto.di.meglio@cern.ch>          
-       Version info: $Id$
--      Release: $Name$
-+      Release: $Name$
-       Revision history:
-       $Log$
-       Revision 1.3  2006/06/30 11:30:28  mmulac
-       actualized patches
-       - against org.glite a org.glite.deployment from glite_R_3_0_0
-
-@@ -1619,6 +1619,39 @@
-               </if>
-       </target>
-+      <target name="jpps" unless="setenvonly" depends="envset,config">
-+              <if>
-+                      <isset property="small.memory"/>
-+                      <then>
-+                              <exec dir="${deployment.subsystem.dir}.jpps" 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; &quot;-Dbuild.name=${build.name}&quot;"/>
-+                              </exec>
-+                      </then>
-+                      <else>
-+                              <ant dir="${deployment.subsystem.dir}.jpps"
-+                                      target="${target}"
-+                                      inheritall="false" />
-+                      </else>
-+              </if>
-+      </target>
-+
-+
-+      <target name="jpis" unless="setenvonly" depends="envset,config">
-+              <if>
-+                      <isset property="small.memory"/>
-+                      <then>
-+                              <exec dir="${deployment.subsystem.dir}.jpis" 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; &quot;-Dbuild.name=${build.name}&quot;"/>
-+                              </exec>
-+                      </then>
-+                      <else>
-+                              <ant dir="${deployment.subsystem.dir}.jpis"
-+                                      target="${target}"
-+                                      inheritall="false" />
-+                      </else>
-+              </if>
-+      </target>
-+
-       <target name="io-server" unless="setenvonly" depends="envset,config">
-               <if>
-                       <isset property="small.memory"/>
-@@ -1730,6 +1763,8 @@
-                                       wn,
-                                       wms,
-                                       lb,
-+                                      jpps,
-+                                      jpis,
-                                       io-server,
-                                       io-client,
-                                       ce,
-Index: org.glite.deployment/project/dependencies.properties
-===================================================================
-RCS file: /cvs/jra1mw/org.glite.deployment/project/dependencies.properties,v
-retrieving revision 1.526.2.5.2.127.2.415.2.22
-diff -u -r1.526.2.5.2.127.2.415.2.22 dependencies.properties
---- org.glite.deployment/project/dependencies.properties       9 May 2006 12:33:18 -0000       1.526.2.5.2.127.2.415.2.22
-+++ org.glite.deployment/project/dependencies.properties       30 Jun 2006 11:13:49 -0000
-@@ -80,6 +80,10 @@
-                               
-       org.glite.deployment.lb.version                         = glite-deployment-lb_R_2_2_3
-                               
-+      org.glite.deployment.jpis.version                               = HEAD
-+
-+      org.glite.deployment.jpps.version                               = HEAD
-+
-       org.glite.deployment.glite-WMSLB.version                                = glite-deployment-glite-WMSLB_R_2_4_2
-                               
-       org.glite.deployment.wn.version                         = glite-deployment-wn_R_2_3_7
-Index: org.glite.deployment/project/glite.deployment.csf.xml
-===================================================================
-RCS file: /cvs/jra1mw/org.glite.deployment/project/glite.deployment.csf.xml,v
-retrieving revision 1.44.2.1.2.11.2.24
-diff -u -r1.44.2.1.2.11.2.24 glite.deployment.csf.xml
---- org.glite.deployment/project/glite.deployment.csf.xml      18 Apr 2006 15:42:14 -0000      1.44.2.1.2.11.2.24
-+++ org.glite.deployment/project/glite.deployment.csf.xml      30 Jun 2006 11:13:50 -0000
-@@ -9,7 +9,7 @@
-       Authors: Joachim Flammer <Joachim.Flammer@cern.ch>      
-       Version info: $Id$
--      Release: $Name$
-+      Release: $Name$
-       Revision history:
-       $Log$
-       Revision 1.3  2006/06/30 11:30:28  mmulac
-       actualized patches
-       - against org.glite a org.glite.deployment from glite_R_3_0_0
-
-@@ -667,6 +667,14 @@
-                       <equals arg1="${org.glite.deployment.lb.version}" arg2="HEAD" />
-               </condition>
-+              <condition property="jpps.head">
-+                      <equals arg1="${org.glite.deployment.jpps.version}" arg2="HEAD" />
-+              </condition>
-+
-+              <condition property="jpis.head">
-+                      <equals arg1="${org.glite.deployment.jpis.version}" arg2="HEAD" />
-+              </condition>
-+
-               <condition property="io-server.head">
-                       <equals arg1="${org.glite.deployment.io-server.version}" arg2="HEAD" />
-               </condition>
-@@ -1571,6 +1579,28 @@
-                       tag="${org.glite.deployment.lb.version}" />
-       </target>
-+      <!-- jpps component -->
-+      <target name="jpps" depends="get.jpps.head, get.jpps.tag"/>
-+      <target name="get.jpps.head" if="jpps.head">
-+              <cvs-co package="org.glite.deployment.jpps" />
-+        </target>
-+
-+      <target name="get.jpps.tag" unless="jpps.head">
-+              <cvs-co package="org.glite.deployment.jpps"
-+                      tag="${org.glite.deployment.jpps.version}" />
-+      </target>
-+
-+      <!-- jpis component -->
-+      <target name="jpis" depends="get.jpis.head, get.jpis.tag"/>
-+      <target name="get.jpis.head" if="jpis.head">
-+              <cvs-co package="org.glite.deployment.jpis" />
-+        </target>
-+
-+      <target name="get.jpis.tag" unless="jpis.head">
-+              <cvs-co package="org.glite.deployment.jpis"
-+                      tag="${org.glite.deployment.jpis.version}" />
-+      </target>
-+
-       <!-- io-server component -->
-       <target name="io-server" depends="get.io-server.head, get.io-server.tag"/>
-       <target name="get.io-server.head" if="io-server.head">
-@@ -1667,6 +1697,8 @@
-                                       wn,
-                                       wms,
-                                       lb,
-+                                      jpis,
-+                                      jpps,
-                                       io-server,
-                                       io-client,
-                                       ce" />
diff --git a/org.glite.lb/deployment/deploy_lb.diff b/org.glite.lb/deployment/deploy_lb.diff
deleted file mode 100644 (file)
index d6c74e2..0000000
+++ /dev/null
@@ -1,281 +0,0 @@
-This patch was merged to deploy_all.diff, don't use it anymore.
-
-Index: org.glite.deployment.lb/config/scripts/glite-lb-config.py
-===================================================================
-RCS file: /cvs/jra1mw/org.glite.deployment.lb/config/scripts/glite-lb-config.py,v
-retrieving revision 1.65.2.3
-diff -u -r1.65.2.3 glite-lb-config.py
---- org.glite.deployment.lb/config/scripts/glite-lb-config.py  2 May 2006 10:36:16 -0000       1.65.2.3
-+++ org.glite.deployment.lb/config/scripts/glite-lb-config.py  30 Jun 2006 09:29:21 -0000
-@@ -127,7 +127,12 @@
-         if not os.path.exists('/tmp/mysql.sock'):
-             os.symlink('/var/lib/mysql/mysql.sock', '/tmp/mysql.sock')
--            
-+        
-+
-+        #-------------------------------------------------------------------
-+        # start bkserver
-+        #-------------------------------------------------------------------
-+
-         pid = glib.getPID('bkserverd')
-         if pid != 0:
-             print 'The gLite LB Server service is already running. Restarting...'
-@@ -140,7 +145,7 @@
-         pid = glib.getPID('bkserverd')
-         if (pid != 0):
--            print "The gLite LB Server service has been started               ",
-+            print "The gLite LB Server service has been started              ",
-             glib.printOkMessage()
-         else:
-             glib.printErrorMessage("Could not start the gLite LB Server service")
-@@ -149,6 +154,36 @@
-             return 1
-         
-         #-------------------------------------------------------------------
-+        # start jp-importer, if enabled
-+        #-------------------------------------------------------------------
-+
-+        lb_export = 0
-+        if params.has_key('lb.export.enabled'):
-+            if params['lb.export.enabled'] == "true":
-+                lb_export = 1
-+
-+        if lb_export:
-+            pid = glib.getPID('jp-importer')
-+            if pid != 0:
-+                print 'The gLite JP Importer service is already running. Restarting...'
-+                os.system('%s/etc/init.d/glite-jp-importer stop' % os.environ['GLITE_LOCATION'])
-+            else:
-+                print 'Starting the gLite JP Importer service...'
-+
-+            os.system('%s/etc/init.d/glite-jp-importer start' % os.environ['GLITE_LOCATION'])
-+
-+            pid = glib.getPID('jp-importer')
-+
-+            if (pid != 0):
-+                print "The gLite JP Importer service has been started            ",
-+                glib.printOkMessage()
-+            else:
-+                glib.printErrorMessage("Could not start the gLite JP Importer service")
-+                glib.printErrorMessage("Please verify and re-run the script                        "),
-+                glib.printFailedMessage()
-+                return 1
-+        
-+        #-------------------------------------------------------------------
-         # Start Servicetool
-         #-------------------------------------------------------------------
-@@ -168,6 +203,10 @@
-         if (pid != 0):
-             os.system('%s/etc/init.d/glite-lb-bkserverd stop' % os.environ['GLITE_LOCATION'])
-+        #-------------------------------------------------------------------
-+        # Book Keeping Server
-+        #-------------------------------------------------------------------
-+
-         pid = glib.getPID('bkserverd')
-         if (pid != 0):
-             print 'Could not stop the LB Server service            ',
-@@ -178,6 +217,25 @@
-             glib.printOkMessage()
-         
-         #-------------------------------------------------------------------
-+        # JP Importer
-+        #-------------------------------------------------------------------
-+
-+        pid = glib.getPID('jp-importer')
-+        if (pid != 0):
-+            os.system('%s/etc/init.d/glite-jp-importer stop' % os.environ['GLITE_LOCATION'])
-+
-+        pid = glib.getPID('jp-importer')
-+        if (pid != 0):
-+            print 'Could not stop the JP Importer service                  ',
-+            glib.printFailedMessage()
-+            error_level = 1
-+        else:
-+            if params.has_key('lb.export.enabled'):
-+                if params['lb.export.enabled'] == "true":
-+                    print 'The JP Importer service has been stopped                  ',
-+                    glib.printOkMessage()
-+        
-+        #-------------------------------------------------------------------
-         # MySQL
-         #-------------------------------------------------------------------
-@@ -202,6 +260,10 @@
-         if retval != 0:
-             error_level = 1
-+        retval = os.system('%s/etc/init.d/glite-jp-importer status' % os.environ['GLITE_LOCATION'])
-+        if retval != 0:
-+            error_level = 1
-+
-         #-------------------------------------------------------------------
-         # Servicetool
-         #-------------------------------------------------------------------
-@@ -332,7 +394,27 @@
-             print "\n==> MySQL database %s already exist\n" % params['lb.database.name']
-             
-         self.mysql.stop()
--    
-+
-+        # ------------------------------------------------------------------
-+        # export from bkserver to cron
-+        # ------------------------------------------------------------------
-+      if params['GLITE_LB_EXPORT_ENABLED'] == "true":
-+          file = open('%s/etc/glite-lb-export-cron-wrapper.sh' % os.environ['GLITE_LOCATION'], 'w')
-+          file.write('#! /bin/sh\n')
-+          file.write('. %s\n' % glib.getInstallerExportFile())
-+            file.write('$GLITE_LOCATION/examples/glite-lb-export.sh\n')
-+          file.close()
-+            os.system('/bin/chmod 0755 %s/etc/glite-lb-export-cron-wrapper.sh' % os.environ['GLITE_LOCATION'])
-+
-+          file = open('/etc/cron.d/glite-lb-export.cron', 'w')
-+          file.write('# periodically run purge and export jobs from bkserver\n')
-+          file.write('00,30 * * * * %s %s/etc/glite-lb-export-cron-wrapper.sh\n' % (params['glite.user.name'], os.environ['GLITE_LOCATION']))
-+          file.close()
-+            os.system('/bin/chmod 0755 /etc/cron.d/glite-lb-export.cron')
-+
-+            # Touch cron spool directory to cause reloading of the crontabs
-+            os.system("/bin/touch /var/spool/cron")
-+
-         #-------------------------------------------------------------------
-         # RGMA servicetool: configure servicetool
-         #-------------------------------------------------------------------
-@@ -418,6 +500,17 @@
-     # Perl
-     glib.addEnvPath("PERL5LIB", "%s/lib/perl:%s/lib/perl5" % (os.environ['GPT_LOCATION'],os.environ['GLITE_LOCATION']))
-+    # LB export
-+    glib.export('GLITE_LB_EXPORT_ENABLED', params['lb.export.enabled']);
-+    glib.export('GLITE_LB_EXPORT_BKSERVER', params['lb.export.bkserver']);
-+    glib.export('GLITE_LB_EXPORT_JPPS', params['lb.export.jpps']);
-+    glib.export('GLITE_LB_EXPORT_JPREG_MAILDIR', params['lb.export.jpreg']);
-+    glib.export('GLITE_LB_EXPORT_JPDUMP_MAILDIR', params['lb.export.jpdump']);
-+    glib.export('GLITE_LB_EXPORT_DUMPDIR', params['lb.export.dump']);
-+    glib.export('GLITE_LB_EXPORT_DUMPDIR_OLD', params['lb.export.dump.old']);
-+    glib.export('GLITE_LB_EXPORT_EXPORTDIR', params['lb.export.export']);
-+    glib.export('GLITE_LB_EXPORT_PURGE_ARGS', '"%s"' % params['lb.export.purgeargs']);
-+
-     # Set environment
-     glib.setUserEnv()
-     
-Index: org.glite.deployment.lb/config/templates/glite-lb.cfg.xml
-===================================================================
-RCS file: /cvs/jra1mw/org.glite.deployment.lb/config/templates/glite-lb.cfg.xml,v
-retrieving revision 1.21
-diff -u -r1.21 glite-lb.cfg.xml
---- org.glite.deployment.lb/config/templates/glite-lb.cfg.xml  13 Mar 2006 15:19:21 -0000      1.21
-+++ org.glite.deployment.lb/config/templates/glite-lb.cfg.xml  30 Jun 2006 09:29:21 -0000
-@@ -17,9 +17,16 @@
-                       parameter. Leave it empty of comment it out to use the same as 'glite.user.name'"
-                       value="changeme"/>
-               
--          <mysql.root.password
--              description="The mysql root password"
--              value="changeme"/>
-+              <mysql.root.password
-+                      description="The mysql root password"
-+                      value="changeme"/>
-+
-+              <lb.export.jpps
-+                      description="Job Provenance Primary Storage.
-+                              [Example: localhost:8901][Type: string]"
-+                      value="changeme"/>
-+
-+
-       
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-               <!-- Advanced parameters - Change them if you know what you're doing -->
-@@ -55,6 +62,12 @@
-                               [Example: 17M][Type: Integer][Unit: MB]"
-                       value="17M"/>
-+              <lb.export.enabled
-+                      description="Enables exports to Job Provenance.
-+                              [Example: true][Type: boolean]"
-+                      value="true"/>
-+
-+
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-               <!-- System parameters - You should leave these alone -->
-               <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->               
-@@ -67,7 +80,42 @@
-                       <value>destination</value>
-               </lb.index.list>
--                      
-+
-+              <lb.export.bkserver
-+                      description="Book Keeping Server service when differs from default port on localhost.
-+                              [Example: localhost:9000][Type: string]"
-+                      value=""/>
-+
-+              <lb.export.jpreg
-+                      description="Maildir for job registrations.
-+                              [Example: /tmp/jpreg][Type: string]"
-+                      value=""/>
-+
-+              <lb.export.jpdump
-+                      description="Maildir for job dumps.
-+                              [Example: /tmp/jpdump][Type: string]"
-+                      value=""/>
-+
-+              <lb.export.dump
-+                      description="Dump directory for purged jobs.
-+                              [Example: /tmp/dump][Type: string]"
-+                      value=""/>
-+
-+              <lb.export.dump.old
-+                      description="Dump directory for handled purged jobs.
-+                              [Example: /tmp/dump.old][Type: string]"
-+                      value=""/>
-+
-+              <lb.export.export
-+                      description="Exported events divided to file per job.
-+                              [Example: /tmp/lb_export][Type: string]"
-+                      value=""/>
-+
-+              <lb.export.purgeargs
-+                      description="Purge arguments (with timeouts).
-+                              [Example: -a 1h -c 1h -n 1h -o 1d][Type: string]"
-+                      value="-a 1d -c 1d -n 1d -o 7d"/>
-+
-       </parameters>
- </config>
-Index: org.glite.deployment.lb/project/glite-lb.sdf.xml.template
-===================================================================
-RCS file: /cvs/jra1mw/org.glite.deployment.lb/project/glite-lb.sdf.xml.template,v
-retrieving revision 1.38.2.2
-diff -u -r1.38.2.2 glite-lb.sdf.xml.template
---- org.glite.deployment.lb/project/glite-lb.sdf.xml.template  2 May 2006 10:36:19 -0000       1.38.2.2
-+++ org.glite.deployment.lb/project/glite-lb.sdf.xml.template  30 Jun 2006 09:29:21 -0000
-@@ -57,6 +57,12 @@
-                                       build="@org.glite.lb.server-bones.info.build@"
-                                       arch="i386"/>
-                                          
-+                              <component name="glite-lb-client"
-+                                      version="@org.glite.lb.client.info.version@"
-+                                      age="@org.glite.lb.client.info.age@"
-+                                      build="@org.glite.lb.client.info.build@"
-+                                      arch="i386"/>
-+                                         
-                               <component name="glite-wms-utils-jobid"
-                                       version="@org.glite.wms-utils.jobid.info.version@"
-                                       age="@org.glite.wms-utils.jobid.info.age@"
-@@ -105,6 +111,12 @@
-                     build="@org.glite.jp.ws-interface.info.build@"
-                     arch="i386"/>
-+                              <component name="glite-jp-client"
-+                    version="@org.glite.jp.client.info.version@"
-+                    age="@org.glite.jp.client.info.age@"
-+                    build="@org.glite.jp.client.info.build@"
-+                    arch="i386"/>
-+
-                 <component name="gridsite"
-                     version="@org.gridsite.core.info.version@"
-                     age="@org.gridsite.core.info.age@"
diff --git a/org.glite.lb/doc/README.lb4vdt b/org.glite.lb/doc/README.lb4vdt
deleted file mode 100644 (file)
index d07b525..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-These are the instructions how to build LB for VDT:
-
-$ mkdir lb4vdt
-$ cd lb4vdt
-$ export CVSROOT=:pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw  
-$ cvs co org.glite.lb                                                     
-
-you may need to edit ./org.glite.lb/lb4vdt/Makefile.inc     
-to specify some paths (some of them should be set automaticaly,  
-e.g. by VDT_LOCATION)
-
-and then (still from the top directory) run
-
-$ ./org.glite.lb/lb4vdt/LB_install.sh 2>&1 | tee log
-
-:)
diff --git a/org.glite.lb/doc/copyright.tex b/org.glite.lb/doc/copyright.tex
deleted file mode 100644 (file)
index d25979d..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-%
-% Official text received on October 6, 2004
-%
-\vfill{\bf Copyright }\copyright{\bf Members of the EGEE Collaboration. 2004. 
-See http://eu-egee.org/partners for details on the copyright holders. 
-
-EGEE (``Enabling Grids for E-science in Europe'') is a project funded by
-the European Union.  For more information on the project, its partners
-and contributors please see http://www.eu-egee.org.
-
-You are permitted to copy and distribute verbatim copies of this
-document containing this copyright notice, but modifying this document
-is not allowed. You are permitted to copy this document in whole or in
-part into other documents if you attach the following reference to the
-copied elements: ``Copyright }\copyright{\bf 2004. Members of the EGEE
-Collaboration. http://www.eu-egee.org''
-
-The information contained in this document represents the views of
-EGEE as of the date they are published. EGEE does not guarantee that
-any information contained herein is error-free, or up to date.
-
-EGEE MAKES NO WARRANTIES, EXPRESS, IMPLIED, OR STATUTORY, BY
-PUBLISHING THIS DOCUMENT.}
-
diff --git a/org.glite.lb/doc/frontmatter.tex b/org.glite.lb/doc/frontmatter.tex
deleted file mode 100644 (file)
index 0fba2c5..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-\begin{center}
-{\bf Delivery Slip}
-\end{center}
-\begin{tabularx}{\textwidth}{|l|l|l|X|X|}
-\hline
-           & {\bf Name} & {\bf Partner} & {\bf Date} & {\bf Signature} \\
-\hline
-{\bf From} & Ale\v s K\v{r}enek et al.& CESNET & May 28, 2005 & \\
-\hline
-{\bf Reviewed by} & & & & \\
-
-\hline
-{\bf Approved by} & & & & \\
-\hline
-\end{tabularx}
-
-\begin{center}
-{\bf Document Change Log}
-\end{center}
-
-\begin{tabularx}{\textwidth}{|l|l|X|X|}
-\hline
-{\bf Issue } & {\bf Date  } & {\bf Comment } & {\bf Author  } \\   \hline
-Initial version & Feb 28, 2005 & & A. K\v{r}enek \\ \hline
-Reviewer's comments & Mar 25, 2005 & comments reflected & A. K\v{r}enek \\
-\hline
-\end{tabularx}
-
-\begin{center}
-{\bf Document Change Record}
-\end{center}
-
-\begin{tabularx}{\textwidth}{|l|l|X|}
-\hline
-{\bf Issue } & {\bf Item  } & {\bf Reason for Change } \\   \hline
-
-
-\hline
-\end{tabularx}
-
-\input{copyright}
diff --git a/org.glite.lb/doc/perf_clear_proxy b/org.glite.lb/doc/perf_clear_proxy
deleted file mode 100644 (file)
index 237df95..0000000
+++ /dev/null
@@ -1 +0,0 @@
-CLPR=1; for jobid in  `./stage/sbin/glite-lb-perftest_logjobs -m scientific.civ.zcu.cz:10000 -f stage/examples/perftest/perf_simple_avg_events.log -n 1000 -p /tmp/perftest_michal.log -s /tmp/proxy_michal.perf|grep https`; do stage/bin/glite-lb-logevent -x -S /tmp/proxy_michal.perfstore.sock -c $SEQCODE -j $jobid -s UserInterface -e Abort --reason Purge; done
diff --git a/org.glite.lb/doc/perf_purge b/org.glite.lb/doc/perf_purge
deleted file mode 100644 (file)
index 4bcc881..0000000
+++ /dev/null
@@ -1 +0,0 @@
-./stage/sbin/glite-lb-purge -j /tmp/perftest_1000.jobids  -m scientific.civ.zcu.cz:10000 -s
diff --git a/org.glite.lb/doc/perf_reg_jobs b/org.glite.lb/doc/perf_reg_jobs
deleted file mode 100644 (file)
index 20923a1..0000000
+++ /dev/null
@@ -1 +0,0 @@
- REG=1; for jobid in  `./stage/sbin/glite-lb-perftest_logjobs -m scientific.civ.zcu.cz:10000 -f stage/examples/perftest/perf_simple_avg_events.log -n 1000 -p /tmp/perftest_michal.log -s /tmp/proxy_michal.perf|grep https`; do stage/examples/glite-lb-job_reg -j $jobid -s UserInterface ; done
diff --git a/org.glite.lb/doc/perf_results/il_sci_09062006.txt b/org.glite.lb/doc/perf_results/il_sci_09062006.txt
deleted file mode 100644 (file)
index 503966e..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-./shared/egee/jra1-head/stage/sbin/perftest_il.sh 10
--------------------------------------------
-Logging test:
-  - events sent through IPC and/or files
-  - events discarded by IL immediately
--------------------------------------------
-a) events sent only by IPC
-b) events stored to files and sent by IPC
-
-        small_job        big_job         small_dag       big_dag
-a)      154727793        11240340       101479915          621678
-[jobs/day]
-b)       11540156          594389        10416164          402240
-[jobs/day]
------------------------------------
-Interlogger test:
-  - events sent through IPC & files
-  - events discarded in IL
------------------------------------
-a) disabled event parsing, the server address (jobid) is hardcoded
-b) disabled event synchronization from files
-c) disabled recovery thread
-x) disabled sync and recovery
-d) lazy bkserver connection close
-e) normal operation
-
-        small_job        big_job         small_dag       big_dag
-a)       14323607          547755        10158371          375594
-[jobs/day]
-b)        6284230          364547         4554967          300055
-[jobs/day]
-c)        7540122          412971         3186381          300417
-[jobs/day]
-x)        9672327          418137         2567653          297477
-[jobs/day]
-d)  this test is not yet implemented
-e)        9650719          410507         3651840          301687
-[jobs/day]
------------------------------------
-Interlogger test:
-  - events sent through IPC & files
-  - events consumed by empty BS
------------------------------------
-a) disabled event parsing, the server address (jobid) is hardcoded
-b) disabled event synchronization from files
-c) disabled recovery thread
-x) disabled sync and recovery
-d) lazy bkserver connection close
-e) normal operation
-
-        small_job        big_job         small_dag       big_dag
-a)        2639788          182196         2035014          246654
-[jobs/day]
-b)        1170308           45973          759842           74898
-[jobs/day]
-c)        1060595           42047          921386           76638
-[jobs/day]
-x)        1091863           42247          518302           82129
-[jobs/day]
-d) this test is not yet implemented
-e)        1147040           41790          489257           76627
-[jobs/day]
-
diff --git a/org.glite.lb/doc/perf_results/il_sci_09062006_01.txt b/org.glite.lb/doc/perf_results/il_sci_09062006_01.txt
deleted file mode 100644 (file)
index 04db72b..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-[michal@scientific jra1-head]$ ./stage/sbin/perftest_il.sh 10
--------------------------------------------
-Logging test:
-  - events sent through IPC and/or files
-  - events discarded by IL immediately
--------------------------------------------
-a) events sent only by IPC
-b) events stored to files and sent by IPC
-
-        small_job        big_job         small_dag       big_dag
-a)      149765990        10933663       100162299          619924
-[jobs/day]
-b)       11857056          479615         2753618          277679
-[jobs/day]
------------------------------------
-Interlogger test:
-  - events sent through IPC & files
-  - events discarded in IL
------------------------------------
-a) disabled event parsing, the server address (jobid) is hardcoded
-b) disabled event synchronization from files
-c) disabled recovery thread
-x) disabled sync and recovery
-d) lazy bkserver connection close
-e) normal operation
-
-        small_job        big_job         small_dag       big_dag
-a)       13813170          268900         6448242          244203
-[jobs/day]
-b)        4525621          255055         6147103          241153
-[jobs/day]
-c)        9338319          217855         5497442          248429
-[jobs/day]
-x)        9335090          232292         3989195          236341
-[jobs/day]
-d)  this test is not yet implemented
-e)        3283323          216013         7284868          256479
-[jobs/day]
------------------------------------
-Interlogger test:
-  - events sent through IPC & files
-  - events consumed by empty BS
------------------------------------
-a) disabled event parsing, the server address (jobid) is hardcoded
-b) disabled event synchronization from files
-c) disabled recovery thread
-x) disabled sync and recovery
-d) lazy bkserver connection close
-e) normal operation
-
-        small_job        big_job         small_dag       big_dag
-a)        4019651           44496          766972           95556
-[jobs/day]
-b)        1366885           47501          564779           90055
-[jobs/day]
-c)        1152594           47656          603774           97465
-[jobs/day]
-x)        1049069           48779          607913           88692
-[jobs/day]
-d) this test is not yet implemented
-e)         942509           46271          523129           91103
-[jobs/day]
-
-
-*************************************************************************
-
-
-[michal@scientific jra1-head]$ ./stage/sbin/perftest_il.sh 100
--------------------------------------------
-Logging test:
-  - events sent through IPC and/or files
-  - events discarded by IL immediately
--------------------------------------------
-a) events sent only by IPC
-b) events stored to files and sent by IPC
-
-        small_job        big_job         small_dag       big_dag
-a)      157966907               0               0          620546
-[jobs/day]
-b)       13833450          558487        10210340          283454
-[jobs/day]
------------------------------------
-Interlogger test:
-  - events sent through IPC & files
-  - events discarded in IL
------------------------------------
-a) disabled event parsing, the server address (jobid) is hardcoded
-b) disabled event synchronization from files
-c) disabled recovery thread
-x) disabled sync and recovery
-d) lazy bkserver connection close
-e) normal operation
-
-        small_job        big_job         small_dag       big_dag
-a)       12884330          316703         4447489          151870
-[jobs/day]
-b)        7980713          469667         4641283          244463
-[jobs/day]
-c)        8458472          556919         5657712          253640
-[jobs/day]
-x)        8149836          549678         4765300          257375
-[jobs/day]
-d)  this test is not yet implemented
-e)        9687868          503933         4461079          247092
-[jobs/day]
------------------------------------
-Interlogger test:
-  - events sent through IPC & files
-  - events consumed by empty BS
------------------------------------
-a) disabled event parsing, the server address (jobid) is hardcoded
-b) disabled event synchronization from files
-c) disabled recovery thread
-x) disabled sync and recovery
-d) lazy bkserver connection close
-e) normal operation
-
-        small_job        big_job         small_dag       big_dag
-a)        9389344           97159          450483           68610
-[jobs/day]
-b)        1195400           82681          560118           88216
-[jobs/day]
-c)        1351879           88207          830072          102285
-[jobs/day]
-x)        1173835           85897          562648               0
-[jobs/day]
-d) this test is not yet implemented
-e)        1205291           78355          567658           87770
-[jobs/day]
diff --git a/org.glite.lb/doc/perf_results/il_sci_12062006.txt b/org.glite.lb/doc/perf_results/il_sci_12062006.txt
deleted file mode 100644 (file)
index f3a1a79..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-[michal@scientific jra1-head]$ ./stage/sbin/perftest_il.sh 10
--------------------------------------------
-Logging test:
-  - events sent through IPC and/or files
-  - events discarded by IL immediately
--------------------------------------------
-a) events sent only by IPC
-b) events stored to files and sent by IPC
-
-        small_job        big_job         small_dag       big_dag
-a)      153599999        11157889       101479915          539075
-[jobs/day]
-b)       10835893         1059003         2577803          351095
-[jobs/day]
------------------------------------
-Interlogger test:
-  - events sent through IPC & files
-  - events discarded in IL
------------------------------------
-a) disabled event parsing, the server address (jobid) is hardcoded
-b) disabled event synchronization from files
-c) disabled recovery thread
-x) disabled sync and recovery
-d) lazy bkserver connection close
-e) normal operation
-
-        small_job        big_job         small_dag       big_dag
-a)       14148626          772362        11498383          376986
-[jobs/day]
-b)        5348851          489142         5558879          292071
-[jobs/day]
-c)        9042670          441000         5911613          287842
-[jobs/day]
-x)        7730298          414784         6579748          289834
-[jobs/day]
-d)  this test is not applicable
-e)        9288325          365701         7189156          299604
-[jobs/day]
------------------------------------
-Interlogger test:
-  - events sent through IPC & files
-  - events consumed by empty BS
------------------------------------
-a) disabled event parsing, the server address (jobid) is hardcoded
-b) disabled event synchronization from files
-c) disabled recovery thread
-x) disabled sync and recovery
-d) lazy bkserver connection close
-e) normal operation
-
-        small_job        big_job         small_dag       big_dag
-a)        2219003          185867         1785164          258615
-[jobs/day]
-b)        1795503           48283          309380           77422
-[jobs/day]
-c)        1201618           39001          850436           74771
-[jobs/day]
-x)        1134249           48039          447017           74244
-[jobs/day]
-d)        5335078          207059         2438095           96295
-[jobs/day]
-e)        1019269           36465          875966           65565
-[jobs/day]
-
-
diff --git a/org.glite.lb/doc/perf_results/ll_michal_21062006.txt b/org.glite.lb/doc/perf_results/ll_michal_21062006.txt
deleted file mode 100644 (file)
index c13457f..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-michal:~/shared/egee/jra1-head> ./stage/sbin/perftest_ll.sh 10
-----------------
-Locallogger test
-----------------
-a) glite-lb-logd-perf-nofile --noParse --noIPC
-b) glite-lb-logd-perf-nofile --noIPC
-c) glite-lb-logd-perf --noIPC
-d) glite-lb-logd-perf
-
-Number of jobs: 10
-
-        small_job        big_job         small_dag       big_dag
-a)        14.544066         14.590504         14.681760          9.264801 [events/sec]
-         125660            8404           97577           25821  [jobs/day]
-b)        14.614844         14.408043         14.279216          9.600877 [events/sec]
-         126272            8298           94901           26758  [jobs/day]
-c)         0.000000          0.000000          0.000000          0.000000 [events/sec]
-              0               0               0               0  [jobs/day]
-d)        13.331568         13.530218         13.420780          8.363152 [events/sec]
-         115184            7793           89196           23308  [jobs/day]
diff --git a/org.glite.lb/doc/perf_results/proxy2serv_umbar2sci_22062006.txt b/org.glite.lb/doc/perf_results/proxy2serv_umbar2sci_22062006.txt
deleted file mode 100644 (file)
index d0a99c5..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
--------------------
-LB chain test
--------------------
-- proxy & interlogger (lazy variant) running at umbar
-- bkserver running at sci
-- test variants:
-  a) 10 jobs
-  b) 100 jobs
-  c) 1000 jobs
-
-
-Results:
-
-   small_job      big_job      small_dag       big_dag
----------------------------------------------------------------
-a)     3.0             x               x               x       [mjobs/day]
-b)     1.0             x               x               x       [mjobs/day]
-c)     0.6             x               x               x       [mjobs/day]
-
-
diff --git a/org.glite.lb/doc/perf_results/proxy2serv_umbar2sci_23062006.txt b/org.glite.lb/doc/perf_results/proxy2serv_umbar2sci_23062006.txt
deleted file mode 100644 (file)
index 8097510..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
--------------------
-LB chain test
--------------------
-- proxy & interlogger (lazy variant) running at umbar
-- bkserver running at sci
-- test variants:
-  a) 100 jobs, no background queries
-  b) 1000 jobs, no background queries
-  c) 10000 jobs, no background queries
-  d) 100 jobs, 10 parallel queries
-  e) 1000 jobs, 10 parallel queries, perf interlogger
-  f) 1000 jobs, 10 parallel queries, normal interlogger
-- in d)-f) the server was queried by 10 independent clients for states 
-  of all jobs periodically with random sleep between queries (0-5sec)
-
-Results:
-
-   small_job      big_job      small_dag       big_dag
----------------------------------------------------------------
-a)     1.0             x               x               x       [mjobs/day]
-b)     0.6             x               x               x       [mjobs/day]
-c)     0.5             x               x               x       [mjobs/day]
-d)     0.8             x               x               x       [mjobs/day]
-e)     0.45            x               x               x       [mjobs/day]
-f)     0.4             x               x               x       [mjobs/day]
diff --git a/org.glite.lb/doc/perf_results/proxy_sci_09062006.txt b/org.glite.lb/doc/perf_results/proxy_sci_09062006.txt
deleted file mode 100644 (file)
index efa1a41..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-----------------------------------
-LB Proxy test
-----------------------------------
-Events are consumed:
-1) before parsing
-2) after parsing, before storing into database
-3) after storing into db, before computing state
-4) after computing state, before sending to IL
-5) by IL
-
-        small_job        big_job         small_dag       big_dag
-1)  43005186.489600    2852512.156800   31859581.824000    502823.721600
-[jobs/day]
-2)  37764713.548800    2438483.961600   26108871.523200    340065.648000
-[jobs/day]
-3)   1754530.243200     272980.540800    2051218.684800         0.000000
-[jobs/day]
-4)   1267110.000000     176052.182400    1506470.486400         0.000000
-[jobs/day]
-5)    329471.452800      48787.747200     318152.275200         0.000000
-[jobs/day]
diff --git a/org.glite.lb/doc/perf_run_interlogd b/org.glite.lb/doc/perf_run_interlogd
deleted file mode 100644 (file)
index 00d60ed..0000000
+++ /dev/null
@@ -1 +0,0 @@
- ./stage/bin/glite-lb-interlogd -d -s /tmp/perftest_michal.sock --file-prefix=/tmp/perftest_michal.log --lazy
diff --git a/org.glite.lb/doc/perf_run_proxy b/org.glite.lb/doc/perf_run_proxy
deleted file mode 100644 (file)
index 5d88382..0000000
+++ /dev/null
@@ -1 +0,0 @@
-./stage/bin/glite-lb-proxy -d --silent -p /tmp/proxy_michal.perf --proxy-il-sock /tmp/perftest_michal.sock --proxy-il-fprefix /tmp/perftest_michal.log
diff --git a/org.glite.lb/doc/perf_run_server b/org.glite.lb/doc/perf_run_server
deleted file mode 100644 (file)
index b11eb79..0000000
+++ /dev/null
@@ -1 +0,0 @@
-./stage/bin/glite-lb-bkserverd -d --perf-sink=4 -p 10000 -w 10003  -S /tmp/purge_michal -D /tmp/dump_michal --silent
diff --git a/org.glite.lb/doc/perf_run_test b/org.glite.lb/doc/perf_run_test
deleted file mode 100644 (file)
index 2e31b83..0000000
+++ /dev/null
@@ -1 +0,0 @@
-TEST=1; ./stage/sbin/glite-lb-perftest_logjobs -d proxy -m scientific.civ.zcu.cz:10000 -f stage/examples/perftest/perf_simple_avg_events.log -n 1000 -p /tmp/perftest_michal.log -s /tmp/proxy_michal.perf
diff --git a/org.glite.lb/doc/perftest.tex b/org.glite.lb/doc/perftest.tex
deleted file mode 100644 (file)
index 241e1af..0000000
+++ /dev/null
@@ -1,524 +0,0 @@
-\documentclass{egee}
-\usepackage{comment}
-
-\def\LB{L\&B}
-
-\title{\LB\ Performance Test Plan}
-\author{CESNET EGEE JRA1 team}
-\DocIdentifier{EGEE-JRA1-??}
-\Date{\today}
-\Activity{JRA1: Middleware Engineering and Integration}
-\DocStatus{DRAFT}
-\Dissemination{PUBLIC}
-\DocumentLink{}
-
-%\def\req{\noindent\textbf{Prerequisities:}}
-%\def\how{\noindent\textbf{How to run:}}
-%\def\result{\noindent\textbf{Expected result:}}
-
-\def\path#1{{\normalfont\textsf{#1}}}
-\def\code#1{\texttt{#1}}
-\def\todo#1{\textbf{TODO:} #1}
-
-\begin{document}
-
-\input{frontmatter}
-\newpage
-\tableofcontents
-\newpage
-
-\section{Rationale}
-\todo{}
-
-\begin{verbatim}
-
-L&B Performance Testing
-=======================
-
-- all source modifications for tests are in CVS, conditionaly compiled
-  only with appropriate symbol
-
-- binaries for all tests are built using special property 
-  for ant target (or environment variable for Makefile), which
-  compiles sources using the right #define combinations
-
-- component tests are run by shell scripts located under component
-  directories, these tests may require binaries from other components,
-  though
-
-- all tests use sequence of events for typical jobs (small job, big
-  job, small DAG, big DAG) prepared beforehand. These events are
-  stored in files in ULM format in CVS.
-
-- events are generated by stresslog program, which reads ULM text of
-  events for particular test job and logs the event sequence directly
-  by calling *_DoLogEvent<variant>. The number of test jobs is
-  configurable. Stresslog inserts into every event timestamp when the
-  event was generated and sent.*
-
-- event are consumed by breaking normal event processing either in the
-  component being tested or the next component in chain, that is
-  instrumented to read and discard events immediately. The consumption
-  itself is done by calling special function which takes current time,
-  extracts timestamp from event and prints the difference (ie. the
-  event processing time).* These "break points" are chosen to measure
-  throughput of the various component parts and to identify possible
-  bottlenecks within the components.
-
-  * the only exception is test of the logging library itself
-
-- test jobs are preregistered within the LB if the test includes
-  bookkeeping server and/or proxy by the test script program and
-  their id's are stored in separate file to enable re-use by other
-  load-generating tools (status queries, for example)
-
-- test results:
-    - some numbers must be reported by component themselves, not by
-      the event generator (due to the asynchronous LB nature). The
-      test script collects those numbers and presents them as the test
-      result at the end of testing.
-
-    - after completion test scripts print the table described for the
-      respective tests filled in with measured values (ie. the table
-      is not filled in manually by human tester)
-    - event throughput = 1/(time_delivered - time_arrived)
-       * only if next event is sent after previous was delivered
-
-? measure job throughput for event patterns of typical jobs or deduce
-job throughput from throughput of selected types of events?
-
-
-I) Component tests 
-   ***************
-
-- tests of the isolated components on one node
-- may require binaries from other components to produce/consume events
-
---------------------
-Logging library test
---------------------
-
-* component:  
-     org.glite.lb.client
-
-* binaries required: 
-     logevent_libtest
-
-* test shell script:
-     perftest_loglib
-
-* input required:
-     - events
-
-* test description:
-     - measures time required to format given events into ULM. Events
-       are read from file, parsed into components, timestamped and
-       produced. 
-
-     - events produced:
-         - by calling logging function edg_wll_LogEvent*()
-
-     - events consumed:
-         - discarded by logging function instead of sending via
-           appropriate protocol (LogEventMaster)
-
-* results:
-
-  job type (size)    throughput (100k jobs)
-  -----------------------------------------
-   small job
-   big job
-   small DAG
-   big DAG
-
-
-
-----------------
-Locallogger test
-----------------
-
-* component:
-     org.glite.lb.logger
-
-* binaries required:
-     stresslog
-     glite_lb_logd_perf
-     glite_lb_logd_perf_nofile
-       - does not store events in file
-     glite_lb_interlogd_perf_empty
-       - consumes immediately after reading event
-
-* test shell script:
-     perftest_logd
-
-* input required:
-     - client and host certificates
-     - events
-
-* test description:
-      - measures time required for event to be sent from client to
-        local logger and processed by locallogger. Localloger is
-        either instructed (by option) or instrumented to skip some
-        parts of event processing:
-             a) no parse, no file, no ipc
-                   glite_lb_logd_perf_nofile --noParse --noIPC
-             b) no file, no ipc
-                   glite_lb_logd_perf_nofile --noIPC
-             c) no ipc
-                   glite_lb_logd_perf --noIPC
-             d) normal operation
-                   glite_lb_logd_perf
-
-         no parse - LL does not parse events 
-         no file  - LL does not store events into files
-         no ipc   - LL does not send events through socket to IL
-
-      - events produced:
-           - stresslog sends events to logd using client->logd
-             protocol (*_DoLogEvent())
-
-      - events consumed:
-           i) after storing into files
-          ii) by "empty" IL
-        
-* results:
-
-
-
-i) events stored in files
-
-   throughput:     small    big    small    big 
-                   job      job    DAG      DAG 
-   -------------------------------------------------
-   a)
-   b)
-   c)
-   d)
-
-ii) events sent to IL
-
-   throughput:     small    big    small    big 
-                   job      job    DAG      DAG 
-   -------------------------------------------------
-   a)
-   b)
-   c)
-   d)
-
-
-
-----------------
-Interlogger test
-----------------
-
-* component:
-     org.glite.lb.logger
-
-* binaries required:
-     stresslog
-     glite_lb_interlogd_perf
-     glite_lb_interlogd_perf_noparse
-        - does not parse events, server address is hardcoded
-     glite_lb_interlogd_perf_nosync
-       - does not call event_store_sync()
-     glite_lb_interlogd_perf_norecover
-       - recovery thread disabled
-     glite_lb_interlogd_perf_nosend
-       - events are consumed instead of sending
-     glite_lb_interlogd_perf_lazy
-       - lazy closing connection to bkserver
-     glite_lb_bkserverd_perf_empty
-       - consumes event immediately after receiving
-
-* test shell script:
-     perftest_interlogd
-
-* input required:
-     - host certificate
-     - events
-
-* test description:
-     - measures time the event travels through interlogger.
-       Interlogger is instrumented to skip some parts of eventh
-       processing for particular test, specifically tests include
-       these variants: 
-             a) disabled event parsing. The server address
-                 (eg. jobid) is hardcoded.
-             b) disabled event synchronization from files
-             c) disabled recovery thread
-             d) lazy bkserver connection close
-             e) normal operation
-
-     - events produced:
-           1) stresslog sends events to interlogger using the unix
-              domain socket and logd->interlogger protocol, events are
-              stored in files (stresslog behaves like logd)
- TODO: pro toto neni funkce v producerske knihovne
-           2) interlogger reads events from event files created by
-              stresslog (by recovery thread)
-           3) stresslog stores events to files and every n-th
-              (optional argument) is sent also through the unix socket
-
-     - events consumed:
-           i) discarded instead of being sent
-          ii) by "empty" bkserver
-
-* results:
-
-
-i) events discarded
-1) events received on socket
-(options 2 and 3 are not tested)
-
-   throughput:     small    big    small    big 
-                   job      job    DAG      DAG 
-   -------------------------------------------------
-   a)
-   b)
-   c)
-   e)
-
-
-ii) events sent to empty bkserver 
-1) events received on socket
-
-   throughput:     small    big    small    big 
-                   job      job    DAG      DAG 
-   -------------------------------------------------
-   a)
-   b)
-   c)
-   d)
-   e)
-
-
-2) events recovered from files
-
-   throughput:     small    big    small    big 
-                   job      job    DAG      DAG 
-   -------------------------------------------------
-   d)
-   e)
-
-
-3) events synced from files, every 10th event sent on socket
-
-   throughput:     small    big    small    big 
-                   job      job    DAG      DAG 
-   -------------------------------------------------
-   a)
-   b)
-   c)
-   d)
-   e)
-
-
-------------
-LBProxy test
-------------
-
-* component:
-     org.glite.lb.proxy
-
-* binaries required:
-     stresslog
-     glite_lb_proxy_perf_noparse
-       - consumes events before parsing
-     glite_lb_proxy_perf_nostore
-        - consumes events before storing into database
-     glite_lb_proxy_perf_nostate
-       - consumes events before computing job status
-     glite_lb_proxy_perf_nosend
-       - consumes events before sending to interlogger
-     glite_lb_interlogd_perf_empty
-       - consumes immediately after reading event
-
-* test shell script:
-     perftest_proxy
-
-* input required:
-     - events
-
-* test description:
-     - measures time required for processing event by LB proxy. Test
-       is performed with (a)) and without (b)) checking for duplicit
-       events. 
-
-     - events produced:
-          - stresslog sends events using the IL protokol on local
-            socket (using DoLogEventProxy())
-
-     - events consumed:
-           i) before parsing
-          ii) before storing into database
-         iii) after storing into database
-          iv) after job status computation
-           v) normal operation
-
-
-
-* results:
-
-a) with duplicity check:
-
-   throughput:     small    big    small    big 
-                   job      job    DAG      DAG 
-   -------------------------------------------------
-     i)
-    ii)
-   iii)
-    iv)
-     v)
-
-
-b) without duplicity check:
-
-   throughput:     small    big    small    big 
-                   job      job    DAG      DAG 
-   -------------------------------------------------
-     i)
-    ii)
-   iii)
-    iv)
-     v)
-
-
---------------
-LB server test
---------------
-
-* component:
-     org.glite.lb.server
-
-* binaries required:
-     stresslog
-     glite_lb_server_perf_noparse
-       - consumes events before parsing
-     glite_lb_server_perf_nostore
-        - consumes events before storing into database
-     glite_lb_server_perf_nostate
-       - consumes events before computing job status
-
-* test shell script:
-     perftest_server
-
-* input required:
-     - host certificates
-     - events
-
-* test description:
-     - measures time required for processing event by LB server. Test
-       is performed with (a)) and without (b)) checking for duplicit
-       events. 
-
-     - events produced:
-          - stresslog sends events using the IL protokol (using DoLogEventDirect())
-
-     - events consumed:
-           i) before parsing
-          ii) before storing into database
-         iii) after storing into database
-          iv) normal operation
-
-* results:
-
-a) with duplicity check:
-
-   throughput:     small    big    small    big 
-                   job      job    DAG      DAG 
-   -------------------------------------------------
-     i)
-    ii)
-   iii)
-    iv)
-
-
-b) without duplicity check:
-
-   throughput:     small    big    small    big 
-                   job      job    DAG      DAG 
-   -------------------------------------------------
-     i)
-    ii)
-   iii)
-    iv)
-
-
-
----------------------
-Job registration test
----------------------
-
-* component:
-     org.glite.lb.server
-     org.glite.lb.proxy
-
-* binaries required:
-     stressreg
-        - generates registration events
-     glite_lb_bkserverd
-     glite_lb_proxy
-     glite_lb_bkserverd_perf_empty
-     glite_lb_proxy_perf_empty
-     
-* test shell script:
-     perftest_jobreg
-
-* input required:
-     - host & user certificates
-
-* test description:
-     - measures time required to register given number of jobs (time
-       to process registration event). The registration event is
-       synchronous in principle, so it is possible to get results just
-       from the client (stressreg). Test variants include:
-           a) current implementation
-           b) implementation of connection pool at the client
-           c) parallel communication with server and proxy
-       
-       
-     - events produced:
-           - stressreg sends registration events by calling
-            edg_wll_RegisterJob*()
-
-     - events consumed:
-           i) normally processed by server & proxy
-         ii) server replies immediate success
-         iii) proxy replies immediate success
-
-* results:
-
-a) current implementation
-
-   throughput:     one       DAG           DAG             DAG
-                   job   (1000 nodes)  (5000 nodes)   (10000 nodes)
-   -----------------------------------------------------------------
-     i)
-    ii)
-   iii)
-
-
-b) connection pool
-
-   throughput:     one       DAG           DAG             DAG
-                   job   (1000 nodes)  (5000 nodes)   (10000 nodes)
-   -----------------------------------------------------------------
-     i)
-    ii)
-   iii)
-
-
-c) parallel communication
-
-   throughput:     one       DAG           DAG             DAG
-                   job   (1000 nodes)  (5000 nodes)   (10000 nodes)
-   -----------------------------------------------------------------
-     i)
-
-
-
-\end{verbatim}
-
-\end{document}
\ No newline at end of file
diff --git a/org.glite.lb/doc/testplan.tex b/org.glite.lb/doc/testplan.tex
deleted file mode 100644 (file)
index dd468d6..0000000
+++ /dev/null
@@ -1,300 +0,0 @@
-\documentclass{egee}
-\usepackage{comment}
-
-\def\LB{L\&B}
-
-\title{\LB\ Test Plan}
-\author{CESNET EGEE JRA1 team}
-\DocIdentifier{EGEE-JRA1-??}
-\Date{\today}
-\Activity{JRA1: Middleware Engineering and Integration}
-\DocStatus{DRAFT}
-\Dissemination{PUBLIC}
-\DocumentLink{}
-
-\def\req{\noindent\textbf{Prerequisities:}}
-\def\how{\noindent\textbf{How to run:}}
-\def\result{\noindent\textbf{Expected result:}}
-
-\def\path#1{{\normalfont\textsf{#1}}}
-\def\code#1{\texttt{#1}}
-
-\def\todo#1{\textbf{TODO:} #1}
-
-
-\specialcomment{hints}{\par\noindent\textbf{Hints: }\begingroup\slshape}{\endgroup}
-%\includecomment{hints}
-
-\begin{document}
-
-\input{frontmatter}
-\newpage
-\tableofcontents
-\newpage
-
-\section{Rationale}
-\todo{}
-
-\section{Test Coverage}
-\todo{}
-
-\section{Test Cases}
-
-\subsection{Event delivery}
-
-% locallogger
-% bez dalsich demonu, registrovat job, vrati EAGAIN, objevi se fajly
-\subsubsection{Standalone locallogger -- job registration}
-\label{reg}
-\req\ running \path{glite-lb-logd} on the test node, don't start either
-\path{glite-lb-interlogd} or \path{glite-lb-bkserverd}
-
-\how\ call \code{edg\_wll\_RegisterJob}. Jobid's should preferably point
-to a~remote \LB\ server.
-
-\result\ The API call returns EAGAIN, but locallogger creates an event file
-in its storage.
-The file should contain single line RegJob event.
-
-\begin{hints}
-\path{glite-lb-regjob} example can be used. It generates a~unique jobid,
-prints it and calls \LB\ API appropriately.
-\end{hints}
-
-% async -- prida do fajlu, OK
-% logevent
-\subsubsection{Standalone locallogger -- log event}
-\label{log}
-\req\ running \path{glite-lb-logd} only, files generated in test~\ref{reg}.
-
-\how\ call \code{edg\_wll\_Log*} for various event types in a~sequence
-resebmling real \LB\ usage, using the same jobid's as in test~\ref{reg}
-
-\result\ API calls return 0, events are added one per line to the locallogger files
-
-\begin{hints}
-\path{glite-lb-logev} client program can be used.
-
-\path{glite-lb-*.sh} examples may be adapted to produce reasonable seqences
-of events.
-\end{hints}
-
-\subsubsection{Interlogger recovery}
-\label{recover}
-% recover interloggeru
-% il & server (remote)
-% spustit, protlaci soubory na server, soubory zmizi, lze se dotazat na stav
-\req\ running \path{glite-lb-bkserverd} on the machine and port where 
-jobid's from \ref{reg} point to; files generated in~\ref{log}.
-
-\how\ Make a~copy of the files created in~\ref{log}, then start
-\path{glite-lb-interlogd}. After approx. 10s check the jobs
-with \code{edg\_wll\_JobLog} call. 
-
-\result \code{edg\_wll\_JobLog} should return the same events that were
-contained in the locallogger files. The files should be removed by 
-interlogger after approx. 1 min.
-
-\begin{hints}
-\path{glite-lb-joblog} example outputs the events in (almost) the same
-format as the locallogger files.
-\end{hints}
-
-% event delivery
-% poslat .sh, job log vrati to, co bylo ve fajlech
-\subsubsection{Normal event delivery}
-\label{normal}
-\req\ all \LB\ daemons running (\path{glite-lb-logd}, \path{glite-lb-interlogd},
-\path{glite-lb-bkserverd}
-
-\how\
-\begin{enumerate}
-
-\item Register jobs with \code{edg\_wll\_RegsterJob} 
-\item Log reasonable sequences of events with \code{edg\_wll\_Log*}.
-\item Check with \code{edg\_wll\_JobLog}
-that the events got delivered afterwards (approx. 10s).
-\end{enumerate}
-
-\result\ API calls should return 0. The same events that were logged must be returned.
-
-\begin{hints}
-\path{glite-lb-*.sh} scripts produce reasonable seqences of events, including
-the job initial registration.
-
-There is approx. 1min time window in which the locallogger files exist.
-They can be grabbed and used for comparing the events as in~\ref{recover}.
-
-\end{hints}
-
-\subsection{Job state computation}
-
-% normal event delivery & job state machine
-% .sh, dotaz na stav
-\subsubsection{Normal job states}
-\label{state}
-\req\ \path{glite-lb-bkserverd} running, events from \ref{normal} logged.
-
-\how\ Check state of the jobs with \code{edg\_wll\_JobStatus}.
-
-\result\ The API call should return 0, the jobs should be in the expected
-states. Thorough tests may also cross check the values supplied in the
-events (e.g. destination computing element) wrt. the values reported in the job states.
-
-\begin{hints}
-\path{glite-lb-*.sh} scripts produce sequences of events resultning
-in the job state same as the `*' part of the script name.
-\end{hints}
-
-\subsubsection{DAG job states}
-\todo{}
-% specialni stav DAGu, histogram potomku
-
-\subsection{LB proxy}
-\req\ running \path{glite-lb-proxy}, \path{glite-lb-interlogd} and
-\path{glite-lb-bkserverd}
-
-\how\ Register jobs with \code{edg\_wll\_RegisterJobProxy}, log events
-using \code{edg\_wll\_LogEventProxy} and check the job states against
-both lbproxy (using \code{edg\_wll\_JobStatusProxy}) and bkserver
-(using \code{edg\_wll\_JobStatus}).
-
-\result\ A new job state should be available immediately at the
-lbproxy and probably with a small delay also at the bkserver.
-
-\begin{hints}
-There is already a script \path{test.sh} in
-\path{org.glite.lb.proxy/examples} that can be used together with
-above mentioned scripts \path{glite-lb-*.sh} (they are called from
-\path{test.sh}) to test all this.
-\end{hints}
-
-\subsection{WS interface}
-\req\ \path{glite-lb-bkserverd} running, events from \ref{normal} logged
-
-\how\ retrieve both events and job states with the \LB\ WS interface
-(operations \code{JobStatus}, \code{QueryEvents}).
-
-\result\ the returened data should match those returned by the legacy
-API calls.
-
-\begin{hints}
-Examples \path{org.glite.lb.server/examples/ws\_*.c} convert the WS
-responses back to the legacy \LB\ data structures and print them in
-the same form as e.g. \path{glite-lb-jobstat}.
-\end{hints}
-
-\subsection{Notifications}
-
-% notifikace 
-% regjob, reg notifikace na vsechno, poslat udalosti, hlidat notif
-\subsubsection{Single job, any state change}
-\label{notif1}
-\req\ All \LB\ services running
-
-\how
-\begin{enumerate}
-\item Register a job. 
-\item Start a~notification client (preferably on another machine),
-register with \code{edg\_wll\_NotifNew} for any state changes of the job, 
-and repeatedly invoke \code{edg\_wll\_NotifReceive}.
-\item One by one send events triggering job state change. 
-\end{enumerate}
-
-\result\ All the events should trigger notification reported by the running
-notification client.
-
-\begin{hints}
-\path{glite-lb-notify} example can be used with its \path{test} command.
-\end{hints}
-
-\subsubsection{Additional notification criteria}
-\label{notif-complex}
-\req\ All \LB\ services running
-
-\how\ Like~\ref{notif1} but include additional criteria,
-e.g. job is scheduled for a~specific destination.
-
-\result\ Only notifications matching the criteria should be delivered.
-
-% rozsireni dotazu o dalsi job
-\subsubsection{Include another job}
-\label{notif2}
-\req\ All \LB\ services running, notification from \ref{notif1} still active
-
-\how\ 
-\begin{enumerate}
-\item Register another job.
-\item Augment the notification registration with the new jobid using
-\code{edg\_wll\_NotifChange}.
-\item Start notification client, bind to the registration with
-\code{edg\_wll\_NotifBind}.
-\item Send events for the new job.
-\end{enumerate}
-
-\result\ Notifications should be received by the client.
-
-\begin{hints}
-Commands \path{change} and \path{receive} of \path{glite-lb-notify}
-can be used.
-\end{hints}
-
-% notifikace -- zmena adresy/portu
-% pak poslat udalost, musi dojit
-% uz je v predchozim implicitne
-
-\subsubsection{Delayed delivery}
-% notifikace -- zpozdene doruceni
-% registrovat, odpojit, poslat udalosti, pripojit se
-
-\req\ All \LB\ services running
-
-\how\ 
-\begin{enumerate}
-\item Register another job.
-\item Register a~notification as in~\ref{notif1} but terminate the client
-immediately.
-\item Log events for the job.
-\item Restart the client, binding to the notification and call
-\code{edg\_wll\_NotifReceive} repeatedly.
-\end{enumerate}
-
-\result\ Delayed notifications should be received by the client almost
-immediately.
-
-\subsection{Server purge}
-
-\textbf{WARNING: This test is destructive, it destroys ALL data in an
-existing \LB\ database.} 
-
-The test is fairly complex but it does not make too much sense to split it
-artificially.
-
-\req\ All \LB services running, preferably a~dedicated server for this test.
-
-\how
-\begin{enumerate}
-\item Purge all data on the server with \path{glite-lb-purge}
-\item Log two sets of jobs, separated with delay of at least 60s so
-that the sets can be distinguished from each other.
-\item \label{purgel}
-Using \code{edg\_wll\_JobLog} retrieve events of all the jobs
-\item \label{purge1}
-Purge the first set of jobs (by specifying appropriate timestamp),
-letting the server dump the purged events.
-\item \label{purge2} Purge the other set of jobs, also dumping the events.
-\item \label{purge3} Run purge once more.
-\end{enumerate}
-
-\result\ The data dumped in steps \ref{purge1}, \ref{purge2} should be the
-same as retrieved in~\ref{purgel}. The final purge invocation should
-do nothing (i.e. nothing was left in the database).
-
-% test_purge
-\begin{hints}
-The example \path{glite-lb-test\_purge} does exactly this sequence of steps,
-including the checks.
-\end{hints}
-
-
-\end{document}
diff --git a/org.glite.lb/lb4vdt/LB_install.sh b/org.glite.lb/lb4vdt/LB_install.sh
deleted file mode 100755 (executable)
index 93924c9..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-#!/bin/sh
-
-set -e
-
-#OFFLINE=true
-TOPDIR=${PWD}
-
-export LB4VDTDIR=${TOPDIR}/org.glite.lb/lb4vdt
-export STAGEDIR=${TOPDIR}/stage
-mkdir -p ${STAGEDIR}
-
-if [ ! -f ${LB4VDTDIR}/Makefile.inc ]; then
-   echo "Error: There is no ${LB4VDTDIR}/Makefile.inc. Exiting."
-   exit 1
-fi
-
-if [ -z "${CVSROOT}" ]; then
-       export CVSROOT=:pserver:anonymous@jra1mw.cvs.cern.ch:/cvs/jra1mw
-#      export CVSROOT=:ext:jpospi@jra1mw.cvs.cern.ch:/cvs/jra1mw
-       echo "Using CVSROOT=${CVSROOT}"
-fi
-
-dep_modules="org.glite.wms-utils.jobid
-org.gridsite.core"
-
-modules="org.glite.security.gsoap-plugin
-org.glite.lb.client-interface
-org.glite.lb.common
-org.glite.lb.client
-org.glite.lb.logger
-org.glite.lb.ws-interface
-org.glite.lb.server-bones
-org.glite.lb.server
-org.glite.lb.proxy"
-#org.glite.lb.utils
-
-for i in $dep_modules; 
-do 
-    echo "*********************************************************"
-    echo "*  Module $i"
-    echo "*********************************************************"
-    cd ${TOPDIR}
-    if [ -n "${OFFLINE}" ]; then
-        echo "Working offline"
-    else
-        echo "Getting sources from CVS"
-        cvs co -A $i;
-    fi 
-    if [ -d $i -a -f ${LB4VDTDIR}/patches/$i.patch -a ! -f .$i.patched ]; then
-        echo "Patching $i"
-        patch -p0 < ${LB4VDTDIR}/patches/$i.patch
-       touch .$i.patched
-    fi
-    if [ -d $i ]; then
-       touch .$i.timestamp
-        if  [ -f ${LB4VDTDIR}/scripts/$i.build ]; then
-       echo "Building"
-            sh -x ${LB4VDTDIR}/scripts/$i.build 
-        fi
-       cd ${TOPDIR}
-       find ${STAGEDIR} -newer .$i.timestamp > .$i.filelist
-    else
-        echo "WARNING: directory $i not found"
-    fi
-done
-
-for i in $modules; 
-do 
-    echo "*********************************************************"
-    echo "*  Module $i"
-    echo "*********************************************************"
-    cd ${TOPDIR}
-    if [ -n "${OFFLINE}" ]; then
-        echo "Working offline"
-    else
-        echo "Getting sources from CVS"
-        cvs co -A $i; 
-    fi 
-    if [ -d $i -a -f ${LB4VDTDIR}/patches/$i.patch -a ! -f .$i.patched ]; then
-        echo "Patching $i"
-        patch -p0 < ${LB4VDTDIR}/patches/$i.patch
-       touch .$i.patched
-    fi
-    if [ -d $i ]; then
-       touch .$i.timestamp
-        echo "Entering directory ${TOPDIR}/$i"
-        cd ${TOPDIR}/$i
-        echo "Copying supporting files"
-        cp -rv ${TOPDIR}/org.glite.lb/project/{at3,*.T,*.pm} ./project/    
-        mkdir -p build
-        echo "Entering directory ${TOPDIR}/$i/build"
-        cd build 
-        ln -fsv ../Makefile 
-#        ln -fsv ../../Makefile.inc Makefile.inc
-        ln -fsv ${LB4VDTDIR}/Makefile.inc 
-        echo "Building"    
-       make LB_STANDALONE=yes
-        make stage LB_STANDALONE=yes
-       cd ${TOPDIR}
-       find ${STAGEDIR} -newer .$i.timestamp > .$i.filelist
-    else
-        echo "WARNING: directory $i not found"
-    fi
-    echo "Done"    
-done
-
-cd ${TOPDIR}
-echo "Creating filelists"
-cat .org.glite.wms-utils.jobid.filelist .org.gridsite.core.filelist .org.glite.security.gsoap-plugin.filelist .org.glite.lb.common.filelist | sort | uniq > LB-common.filelist
-cat .org.glite.lb.client-interface.filelist .org.glite.lb.client.filelist | sort | uniq > LB-client.filelist
-cat .org.glite.lb.logger.filelist | sort | uniq > LB-logger.filelist
-cat .org.glite.lb.logger.filelist .org.glite.lb.server-bones.filelist .org.glite.lb.proxy.filelist | sort | uniq > LB-proxy.filelist
-cat .org.glite.lb.ws-interface.filelist .org.glite.lb.server-bones.filelist .org.glite.lb.server.filelist | sort | uniq > LB-server.filelist
diff --git a/org.glite.lb/lb4vdt/Makefile.inc b/org.glite.lb/lb4vdt/Makefile.inc
deleted file mode 100644 (file)
index ccf0f2b..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-# external dependencies:
-
-# missing packages could be downloaded to repository from
-# http://egee-jra1-integration.web.cern.ch/egee-jra1-integration/repository/
-#repository=/home/honik/egee/repository
-
-#vdt_location=/home/honik/egee/vdt-1.3.11
-vdt_location=${VDT_LOCATION}
-
-
-#cares_prefix=${repository}/c-ares/1.3.0/rhel30_gcc32
-cares_prefix=/software/cares-1.3
-
-#classads_prefix=${repository}/classads/0.9.6/rhel30_gcc32
-classads_prefix=${vdt_location}/classads
-
-# not needed (used "only" for unit tests - 'make check'):
-#cppunit_prefix=${repository}/cppunit/1.10.2/rhel30_gcc32
-cppunit_prefix=/software/cppunit-1.10.2
-
-#expat_prefix=/usr
-expat_prefix=${vdt_location}/expat
-
-#globus_prefix=${repository}/globus/2.4.3-VDT-1.2.2/rhel30_gcc32
-globus_prefix=${vdt_location}/globus
-
-#gridsite_prefix=${stagedir}
-
-gsoap_default_version=2.7.6b
-gsoap_versions=${gsoap_default_version}
-#gsoap_name=gsoap
-#gsoap_platform=rhel30_gcc32
-#gsoap_prefix=${repository}/${gsoap_name}/${gsoap_default_version}/${gsoap_platform}
-gsoap_prefix=/software/gsoap-${gsoap_default_version}
-
-#mysql_prefix=${repository}/mysql/4.1.11/rhel30_gcc32
-mysql_prefix=${vdt_location}/mysql
-mysql_version=4.1.11
-
-voms_prefix=${vdt_location}/glite
-#voms_prefix=/home/honik/egee/glite/stage
-
-
-# some defaults:
-
-#PREFIX=${vdt_location}/glite
-PREFIX=/tmp/lb4vdt
-globalprefix=glite
-lbprefix=lb
-
-builddir=build
-distdir=${STAGEDIR}/../dist
-stagedir=${STAGEDIR}
-top_srcdir=..
-
-#thrflavour=gcc64dbgpthr
-#nothrflavour=gcc64dbg
-thrflavour=gcc32dbgpthr
-nothrflavour=gcc32dbg
-
-# needed by org.glite.lb.client:
-glite_location=${stagedir}
-
diff --git a/org.glite.lb/lb4vdt/scripts/org.gridsite.core.build b/org.glite.lb/lb4vdt/scripts/org.gridsite.core.build
deleted file mode 100644 (file)
index 38258c5..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-set -e
-
-TOPDIR=${PWD}
-source ${LB4VDTDIR}/Makefile.inc
-cd org.gridsite.core/src
-make build-lib OPENSSL_FLAGS=-I${globus_prefix}/include/${nothrflavour} OPENSSL_LIBS=-L${globus_prefix}/lib FLAVOR_EXT=_${nothrflavour}
-make install-lib prefix=${STAGEDIR} 
-cd ${TOPDIR}
-
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.number b/org.glite.lb/project/build.number
deleted file mode 100644 (file)
index cc27364..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#Fri Aug 18 12:35:01 CEST 2006
-module.build=0242
diff --git a/org.glite.lb/project/build.properties b/org.glite.lb/project/build.properties
deleted file mode 100644 (file)
index 706c9bd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ext.gsoap.version=2.7.0
diff --git a/org.glite.lb/project/dependencies.properties b/org.glite.lb/project/dependencies.properties
deleted file mode 100644 (file)
index 710fb40..0000000
+++ /dev/null
@@ -1,20 +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.proxy.version                     = HEAD
-org.glite.lb.server-bones.version              = HEAD
-org.glite.lb.logger.version                    = HEAD
-org.glite.lb.utils.version                     = HEAD
-
-ext.gsoap.version = 2.7.0
diff --git a/org.glite.lb/project/events.T b/org.glite.lb/project/events.T
deleted file mode 100644 (file)
index 24b7626..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-@type _common_
-       timeval timestamp       Time the event was generated.
-       _alias_ date            ULM
-       timeval arrived         Time the event was stored into the bookkeeping server database.
-       _alias_ arr_date        ULM
-       _optional_
-       string  host            Hostname of the machine where the event was generated.
-       _alias_ host            ULM
-       int     level           Logging level (in the range from DEBUG to EMERGENCY).
-       _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           Grid job id of the job the event belongs to.
-       string  seqcode         Sequence code assigned to the event.
-       string  user            Identity (certificate subject) of the event sender.
-       logsrc  source          Source (software component) which generated this event.
-#      string  prog            name of program ("EDG WMS" of name of the application).
-       string  src_instance    Instance of source 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       Hostname of server that takes over control of the job.
-       string  dest_instance   Service (instance) that takes over control of the job.
-       _optional_
-       string  job             Job description in receiver's language.
-       int     result          Result code of the transfer attempt (START, OK, REFUSED or FAIL).
-       _code_  START           The sending component has started or is about to start the transfer.
-       _code_  OK              The job was sent successfully.
-       _code_  REFUSED         The job was refused by the other component.
-       _code_  FAIL            The transfer failed for other reason than explicit refusal (eg. network timeout).
-       string  reason          Detailed description of the transfer, especially reason of failure.
-       _optional_
-       string  dest_jobid      Job id as assigned by the receiving software component.
-       _optional_
-
-@type Accepted         Accepting job (successful counterpart to Transfer).
-       logsrc  from            The software component  the job was received from.
-       string  from_host       Hostname of the component the job was received from.
-       string  from_instance   Instance of the component the job was received from.
-       _optional_
-       string  local_jobid     New job id as assigned by the receiving component.
-
-@type Refused          Refusing job (unsuccessful counterpart to Transfer).
-       logsrc  from            The software component that tried to send the job.
-       string  from_host       Hostname of the component that tried to send the job.
-       string  from_instance   Instance of the component that tried to send the job.
-       _optional_
-       string  reason          Description of the reason why the job was refused.
-
-@type EnQueued         The job has been enqueued in an inter-component queue.
-       string  queue           Queue into which the job has been stored for retrieval by another component.
-       string  job             Job description in the receiver's language.
-       int     result          Result code of the attempt to put job into the queue (START, OK, REFUSED or FAIL).
-       _code_  START           The sending component has started or is about to start enqueuing the job.
-       _code_  OK              The job was enqueued successfully.
-       _code_  REFUSED         The job was refused by the other component.
-       _code_  FAIL            The transfer failed for other reason than explicit refusal.
-       string  reason          Detailed description of the attempt to enqueue the job, especially the reason of failure.
-
-@type DeQueued         The job has been dequeued from an inter-component queue.
-       string  queue           Name of the queue the job was obtained from.
-       string  local_jobid     New job id as assigned by the retreiving component.
-
-@type HelperCall       Helper component is called.
-       string  helper_name     Name of the called helper component.
-       string  helper_params   Parameters of the call to the helper component.
-       int     src_role        The role the event sender is playing in the helper call (CALLING or CALLEE).
-       _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 helper component.
-       string  retval          Data returned by the call to the helper component.
-       int     src_role        The role the event sender is playing in the helper call (CALLING or CALLEE).
-       _code_  CALLING         The logging component is caller.
-       _code_  CALLED          The logging component is callee.
-
-@type Running          Job wrapper started.
-       string  node            Worker node on which the job executable is being run.
-
-@type Resubmission     Result of resubmission decision.
-       int     result          Result code of the resubmission decision (WILLRESUB or WONTRESUB or SHALLOW).
-       _code_  WILLRESUB       The job will be resubmitted (deep resubmission).
-       _code_  WONTRESUB       The job will not be resubmitted.
-       _code_  SHALLOW         Shallow resubmission (user payload has not started yet)
-       string  reason          Reason why the job will or will not be resubmitted.
-       string  tag             Value of the attribute on which the decision to resubmit the job was based.
-
-@type Done             Execution terminated (normally or abnormally).
-       int     status_code     Reason code for the termination of the job (OK, FAILED or CANCELLED).
-       _code_  OK              The job terminated by itself.
-       _code_  FAILED          The job disappeared from LRMS.
-       _code_  CANCELLED       The job was cancelled by user request.
-       string  reason          Detailed description why the job was terminated.
-       int     exit_code       Exit code of the job's process.
-       _null_  -1
-
-@type Cancel           Cancel operation has been attempted on the job.
-       int     status_code     Classification of the attempt to cancel the job (REQ, REFUSE, DONE or ABORT).
-       _code_  REQ             The request was acknowledged.
-       _code_  REFUSE          The request was declined by this component.
-       _code_  DONE            The request was completed by whole WMS.
-       _code_  ABORT           The request was refused by whole WMS.
-       string  reason          Detailed description of the attempt to cancel the job, especially the reason of failure.
-
-@type Abort            Job aborted by system.
-       string  reason          Reason why the job was aborted by the system.
-
-@type Clear            Job cleared, output sandbox removed
-       int     reason          Description of the reason why the job was cleared and the output sandbox removed (USER, TIMEOUT or NOOUTPUT).
-       _code_  USER            User retrieved output sandbox.
-       _code_  TIMEOUT         Timed out, resource forced purge of the sandbox.
-       _code_  NOOUTPUT        No output was generated.
-
-@type Purge            Job is purged from bookkepping server.
-
-@type Match            Matching CE found.
-       string  dest_id         Identification of the queue on the CE that the job could be send to.
-       
-@type Pending          No matching CE found yet.
-       string  reason          Description why the matching CE for the job was not found (yet).
-
-@type RegJob           New job registration.
-       string  jdl             Job description of the job being registered.
-       string  ns              NetworkServer handling the newly registered job.
-       jobid   parent          Grid job id of the parent job registering this new one.
-       _optional_
-
-       int     jobtype         Type of the job being registered (SIMPLE, DAG, PARTITIONABLE or PARTITIONED).
-       _code_  SIMPLE          The job is simple job.
-       _code_  DAG             The job is dag (containing static set of subjobs).
-       _code_  PARTITIONABLE   The job is partitionable (may become partitioned).
-       _code_  PARTITIONED     The job is partitioned (dynamically created dag).
-       
-       int     nsubjobs        Number of subjobs this job plans to spawn.
-       _optional_
-       string  seed            Seed for subjob id generation.
-       _optional_
-
-@type Chkpt            Application-specific checkpoint record.
-       string  tag             Application specific checkpoint tag.
-       string  classad         Application specific checkpoint value.
-
-@type Listener                 Listening network port for interactive control.
-       string  svc_name        Name of the port instance for interactive job control.
-       string  svc_host        Hostname of the interactive job controller.
-       port    svc_port        Port number of the interactive job controller.
-
-@type CurDescr         Current state of job processing (optional event).
-       string  descr           Description of the current job transformation (output of the helper).
-
-@type UserTag          User tag -- arbitrary name=value pair.
-       string  name    Arbitrary user tag name.
-       string  value   Arbitrary user 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           Identification of the job owner (certificate subject).
-       string  dest_host       Hostname the notification is sent to.
-       port    dest_port       Port number the notification is sent to.
-       string  jobstat         Status of the job (the notification content).
-
-
-@type ResourceUsage    Resource (CPU, memory etc.) consumption.
-       string  resource        Resource's name.
-       int     quantity        Resources's quantity (how much).
-       string  unit            Units (sec, kB, etc.).
-
-@type ReallyRunning    User payload started.
-       _optional_
-       string  wn_seq          Sequence code on the worker node.
-
-@type Suspend          Job execution (queuing) was suspended.
-       _optional_
-       string  reason          Reason for the suspend.
-
-@type Resume           Job execution (queuing) was resumed.
-       _optional_
-       string  reason          Reason for the resume.
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 7d77350..0000000
+++ /dev/null
@@ -1,398 +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.16  2006/03/15 17:33:24  akrenek
-       merge of 1.5 branch
-       
-       Revision 1.15  2005/11/27 21:51:18  eronchie
-       Applied fix for bug 13928
-       
-       Revision 1.14  2005/10/15 20:14:55  jpospi
-       remove duplicate lb.utils section
-       
-       Revision 1.13.2.1.2.1  2005/11/28 10:39:08  akrenek
-       merge bug #13928 fix on the pre_cares branch
-       
-       Revision 1.13.2.1  2005/10/17 16:27:48  akrenek
-       merged in the duplicate utils targed patch
-       
-       Revision 1.15  2005/11/27 21:51:18  eronchie
-       Applied fix for bug 13928
-       
-       Revision 1.14  2005/10/15 20:14:55  jpospi
-       remove duplicate lb.utils section
-       
-       Revision 1.13  2005/10/15 13:36:26  akrenek
-       added lb.utils
-       
-       Revision 1.12  2005/03/16 10:02:52  zsalvet
-       proxy component added
-       
-       Revision 1.11  2004/12/01 18:01:55  zsalvet
-       LB here, not R-GMA
-       
-       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="utils.head">
-                       <equals arg1="${org.glite.lb.utils.version}" arg2="HEAD" />
-               </condition>
-
-               <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="proxy.head">
-                       <equals arg1="${org.glite.lb.proxy.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, 
-                                       classads, 
-                                       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>
-
-       <!-- proxy -->
-       <target name="proxy" depends="evaluate.cvs.tags, get.proxy.head, get.proxy.tag"/>
-       <target name="get.proxy.head" if="proxy.head">
-               <cvs-co package="org.glite.lb.proxy" />
-       </target>
-       <target name="get.proxy.tag" unless="proxy.head">
-               <cvs-co package="org.glite.lb.proxy"
-                       tag="${org.glite.lb.proxy.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>
-
-       <!-- utils -->
-       <target name="utils" depends="get.utils.head, get.utils.tag"/>
-       <target name="get.utils.head" if="utils.head">
-               <cvs-co package="org.glite.lb.utils" />
-       </target>
-       <target name="get.utils.tag" unless="utils.head">
-               <cvs-co package="org.glite.lb.utils"
-                       tag="${org.glite.lb.utils.version}" />
-       </target>
-
-       <!-- All project modules -->
-       <target name="project" depends="utils,
-                                       client-interface,
-                                       ws-interface,
-                                       common,
-                                       server-bones,
-                                       client,
-                                       server,
-                                       proxy,
-                                       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 b5fbeed..0000000
+++ /dev/null
@@ -1,86 +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
-
-bool   payload_running User payload started
-strlist        possible_destinations   Possible job destinations
-       _special_       XMLstructured
-strlist possible_ce_nodes      CE nodes matching to possible_destinations
-       _special_       XMLstructured
-
-bool   suspended       Job is suspended
-string suspend_reason  Reason for the suspend
-
-@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 015b4e1..0000000
+++ /dev/null
@@ -1,127 +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"'
-       },
-       'wsdl'=>{
-               bool=>'"xsd:boolean"',
-               string=>'"xsd:string"',
-               int=>'"xsd:int"',
-               jobid=>'"xsd:string"',
-               jobstat=>'"jobStatus"',
-               usertag=>'"tagValue"',
-               timeval=>'"timeval"',
-               logsrc=>'"eventSource"',
-               notifid=>'"xsd:string"',
-               port=>'"xsd:int"',
-       }
-);
-
-%baseTypes = (
-       intlist=>'int',
-       strlist=>'string',
-       stslist=>'jobstat',
-       taglist=>'usertag'
-);
-
-%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 8dac816..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#Fri Sep 02 14:19:10 CEST 2005
-module.version=1.3.3
-module.age=0
index aac50aa..3b44bc4 100644 (file)
@@ -17,7 +17,8 @@ gsoap_prefix=/opt/gsoap
 
 CC=gcc
 
-gsoap_versions?=2.6.2 2.7.0 2.7.6b
+gsoap_versions?=2.6.2 2.7.0f 2.7.6b 2.7.9b
+gsoap_versions:=${shell if ! echo $gsoap_versions | grep "\<${gsoap_default_version}\>" >/dev/null; then echo "${gsoap_default_version} "; else echo ne; fi} ${gsoap_versions}
 
 -include Makefile.inc
 -include ../Makefile.inc
@@ -32,7 +33,13 @@ version_info:=-version-info ${shell \
 
 # version_info=-version-info `echo ${version} | cut -d. -f1,2 | tr . :`
 
+ext_repository:=${shell if [ -d "${repository}/externals" ]; then \
+       echo "${repository}/externals"; \
+       else echo "${repository}"; \
+       fi}
+
 gsoap_version=${gsoap_default_version}
+gsoap_prefix?=${ext_repository}/${gsoap_name}/${gsoap_version}/${gsoap_platform}
 
 VPATH=${top_srcdir}/src:${top_srcdir}/test:${top_srcdir}/examples
 
@@ -84,7 +91,7 @@ ARES_LIBS:=-L${cares_prefix}/lib -lcares
 EX_LIBS:= ${GLOBUS_LIBS} ${ARES_LIBS}
 EX_THRLIBS := ${GLOBUS_THR_LIBS} ${ARES_LIBS}
 
-HDRS:=glite_gss.h glite_gsplugin.h
+HDRS:=glite_gss.h glite_gsplugin.h glite_gscompat.h
 
 GSS_OBJS:=glite_gss.o
 GSS_LOBJS:=${GSS_OBJS:.o=.lo}
@@ -163,7 +170,7 @@ ${THRLTLIB_S}: ${THROBJS_S}
 all compile: \
        ${GSS_STATICLIB} ${GSS_LTLIB} ${GSS_THRSTATICLIB} ${GSS_THRLTLIB} \
        ${STATICLIB} ${LTLIB} ${THRSTATICLIB} ${THRLTLIB} \
-       all-libs-with-soap
+       all-libs-with-soap examples
 
 check: compile check.gss
 
@@ -186,25 +193,25 @@ all-libs-with-soap:
        for v in ${gsoap_versions}; do  \
                dir=`echo $$v | tr -d .`; \
                mkdir $$dir; \
-               ( cd $$dir && ${MAKE} -f ../Makefile gsoap_version=$$v top_srcdir=../.. libs-with-soap examples) ; \
+               ( cd $$dir && ${MAKE} -f ../Makefile gsoap_version=$$v top_srcdir=../.. libs-with-soap) ; \
        done
 
 libs-with-soap: ${LTLIB_S} ${THRLTLIB_S} ${STATICLIB_S} ${THRSTATICLIB_S}
 
+gsoap_srcname=gsoap-`echo ${gsoap_version} | cut -d. -f1,2`
+
 link-gsoap:
        if [ -f ${top_srcdir}/src/stdsoap2_${gsoap_version}.c ]; then \
                ln -sf ${top_srcdir}/src/stdsoap2_${gsoap_version}.c stdsoap2.c; \
                ln -sf ${top_srcdir}/src/stdsoap2_${gsoap_version}.h stdsoap2.h; \
-       elif [ -f ${repository}/${gsoap_name}/${gsoap_version}/src/stdsoap2.c ]; then \
-               ln -sf ${repository}/${gsoap_name}/${gsoap_version}/src/stdsoap2.[ch] .; \
-       elif [ -f ${repository}/${gsoap_name}/${gsoap_version}/${gsoap_platform}/stdsoap2.c ]; then \
-               ln -sf ${repository}/${gsoap_name}/${gsoap_version}/${gsoap_platform}/stdsoap2.[ch] .; \
-       elif [ -f ${gsoap_prefix}/stdsoap2.c ]; then \
-               ln -sf ${gsoap_prefix}/stdsoap2.[ch] .; \
-       elif [ -f ${gsoap_prefix}/src/stdsoap2.c ]; then \
-               ln -sf ${gsoap_prefix}/src/stdsoap2.[ch] .; \
-       elif [ -f ${gsoap_prefix}/devel/stdsoap2.c ]; then \
-               ln -sf ${gsoap_prefix}/devel/stdsoap2.[ch] .; \
+       elif [ -f ${ext_repository}/${gsoap_name}/${gsoap_version}/src/stdsoap2.c ]; then \
+               ln -sf ${ext_repository}/${gsoap_name}/${gsoap_version}/src/stdsoap2.[ch] .; \
+       elif [ -f ${ext_repository}/${gsoap_name}/${gsoap_version}/${gsoap_platform}/stdsoap2.c ]; then \
+               ln -sf ${ext_repository}/${gsoap_name}/${gsoap_version}/${gsoap_platform}/stdsoap2.[ch] .; \
+       elif [ -f ${ext_repository}/${gsoap_name}/${gsoap_version}/src/stdsoap2.c ]; then \
+               ln -sf ${ext_repository}/${gsoap_name}/${gsoap_version}/src/stdsoap2.[ch] .; \
+       elif [ -f ${ext_repository}/${gsoap_name}/${gsoap_version}/src/${gsoap_srcname}/soapcpp2/stdsoap2.c ]; then \
+               ln -sf ${ext_repository}/${gsoap_name}/${gsoap_version}/src/${gsoap_srcname}/soapcpp2/stdsoap2.[ch] .; \
        else false ; \
        fi
 
@@ -228,7 +235,6 @@ wscalc_srv_ex2: ${WSCALC_SRV2_OBJS} ${LTLIB_S}
        ${LINK} -o $@ ${WSCALC_SRV2_OBJS} ${LTLIB_S}
 
 
-gsoap_prefix?=${repository}/${gsoap_name}/${gsoap_version}/${gsoap_platform}
 soapcpp:=${shell if [ -x ${gsoap_prefix}/bin/soapcpp2 ]; then \
        echo ${gsoap_prefix}/bin/soapcpp2; \
        else echo ${gsoap_prefix}/soapcpp2; \
@@ -266,7 +272,7 @@ install:
        ${INSTALL} -m 644 ${top_srcdir}/LICENSE ${PREFIX}/share/doc/${package}-${version}
        cd ${top_srcdir}/interface && ${INSTALL} -m 644 ${HDRS} ${PREFIX}/include/glite/security/
        if [ x${DOSTAGE} = xyes ]; then \
-               install -m 644 ${GSS_STATICLIB} ${GSS_THRSTATICLIB} ${STATICLIB} ${THRSTATICLIB} ${PREFIX}/lib; \
+               install -m 644 ${GSS_STATICLIB} ${GSS_THRSTATICLIB} ${PREFIX}/lib; \
        fi
        for v in ${gsoap_versions}; do \
                (cd `echo $$v | tr -d .` && ${MAKE} -f ../Makefile install-soaplib gsoap_version=$$v PREFIX=${PREFIX} ); \
index 1bfdeed..a5ccbb2 100755 (executable)
        
        <target name="localinit"
                description="Module specific initialization tasks">
-               <property name="ext.gsoap.platform" value="src"/>
                <antcall target="gsoap" inheritAll="false">
                        <param name="ext.gsoap.version" value="2.6.2"/>
                </antcall>
 
                <antcall target="gsoap" inheritAll="false">
-                       <param name="ext.gsoap.version" value="2.7.0"/>
+                       <param name="ext.gsoap.version" value="2.7.0f"/>
+                       <param name="ext.gsoap.rep.file" value="gSOAP-2.7.0f.tar.gz"/>
                </antcall>
 
                <antcall target="gsoap" inheritAll="false">
                        <param name="ext.gsoap.version" value="2.7.6b"/>
-                       <param name="ext.gsoap.platform" value="src"/>
                </antcall>
 
+               <antcall target="gsoap" inheritAll="false">
+                       <param name="ext.gsoap.version" value="2.7.9b"/>
+                       <param name="ext.gsoap.rep.file" value="gSOAP-2.7.9b.tar.gz"/>
+               </antcall>
+
+
                <antcall target="secmakefiles" />
        </target>
                
diff --git a/org.glite.security.gsoap-plugin/interface/glite_gscompat.h b/org.glite.security.gsoap-plugin/interface/glite_gscompat.h
new file mode 100644 (file)
index 0000000..38b7d96
--- /dev/null
@@ -0,0 +1,78 @@
+#ifndef GLIE_SECURITY_GSCOMPAT_H
+#define GLIE_SECURITY_GSCOMPAT_H
+
+#ident "$Header: "
+
+#ifndef GSOAP_VERSION
+  #error GSOAP_VERSION required
+#endif
+
+#if GSOAP_VERSION >= 20709
+  #define GLITE_SECURITY_GSOAP_CHOICE_GET(CHOICE, ITEM, TYPENAME, TYPENO) ((CHOICE)->union_##TYPENAME.ITEM)
+  #define GLITE_SECURITY_GSOAP_CHOICE_SETTYPE(CHOICE, ITEM, NS, TYPENAME, TYPENO) ((CHOICE)->__union_##TYPENAME) = SOAP_UNION__##NS##__union_##TYPENAME##_##ITEM
+  #define GLITE_SECURITY_GSOAP_CHOICE_ISTYPE(CHOICE, ITEM, NS, TYPENAME, TYPENO) (((CHOICE)->__union_##TYPENAME) == SOAP_UNION__##NS##__union_##TYPENAME##_##ITEM)
+#elif GSOAP_VERSION >= 20706
+  #define GLITE_SECURITY_GSOAP_CHOICE_GET(CHOICE, ITEM, TYPENAME, TYPENO) ((CHOICE)->union_##TYPENO.ITEM)
+  #define GLITE_SECURITY_GSOAP_CHOICE_SETTYPE(CHOICE, ITEM, NS, TYPENAME, TYPENO) ((CHOICE)->__union_##TYPENO) = SOAP_UNION_##NS##__union_##TYPENO##_##ITEM
+  #define GLITE_SECURITY_GSOAP_CHOICE_ISTYPE(CHOICE, ITEM, NS, TYPENAME, TYPENO) (((CHOICE)->__union_##TYPENO) == SOAP_UNION_##NS##__union_##TYPENO##_##ITEM)
+#else
+  #define GLITE_SECURITY_GSOAP_CHOICE_GET(CHOICE, ITEM, TYPENAME, TYPENO) ((CHOICE)->ITEM)
+  #define GLITE_SECURITY_GSOAP_CHOICE_SETTYPE(CHOICE, ITEM, NS, TYPENAME, TYPENO)
+  #define GLITE_SECURITY_GSOAP_CHOICE_ISTYPE(CHOICE, ITEM, NS, TYPENAME, TYPENO) (((CHOICE)->ITEM) != NULL)
+#endif
+#define GLITE_SECURITY_GSOAP_CHOICE_SET(CHOICE, ITEM, NS, TYPENAME, TYPENO, VALUE) do { \
+       memset((CHOICE), 0, sizeof(*(CHOICE))); \
+       GLITE_SECURITY_GSOAP_CHOICE_SETTYPE(CHOICE, ITEM, NS, TYPENAME, TYPENO); \
+       GLITE_SECURITY_GSOAP_CHOICE_GET(CHOICE, ITEM, TYPENAME, TYPENO) = (VALUE); \
+} while(0)
+
+#if GSOAP_VERSION >= 20706
+  #define GLITE_SECURITY_GSOAP_REASON2(SOAP) ((SOAP)->fault->SOAP_ENV__Reason ? (SOAP)->fault->SOAP_ENV__Reason->SOAP_ENV__Text : "(no reason)")
+  #define GLITE_SECURITY_GSOAP_TRUE xsd__boolean__true_
+  #define GLITE_SECURITY_GSOAP_FALSE xsd__boolean__false_
+#else
+  #define GLITE_SECURITY_GSOAP_REASON2(SOAP) ((SOAP)->fault->SOAP_ENV__Reason)
+  #define GLITE_SECURITY_GSOAP_TRUE true_
+  #define GLITE_SECURITY_GSOAP_FALSE false_
+#endif
+
+#define GLITE_SECURITY_GSOAP_DETAIL(SOAP) ((SOAP)->version == 2 ? (SOAP)->fault->SOAP_ENV__Detail : (SOAP)->fault->detail)
+#define GLITE_SECURITY_GSOAP_REASON(SOAP) ((SOAP)->version == 2 ? GLITE_SECURITY_GSOAP_REASON2((SOAP)) : (SOAP)->fault->faultstring)
+
+#if GSOAP_VERSION >= 20709
+  #define GLITE_SECURITY_GSOAP_LIST_CREATE0(SOAP, LIST, SIZE, TYPE, N) do { \
+       if ((N) != 0) (LIST) = soap_malloc((SOAP), (N) * sizeof(TYPE)); \
+       else (LIST) = NULL; \
+       (SIZE) = (N); \
+} while (0)
+  #define GLITE_SECURITY_GSOAP_LIST_DESTROY0(SOAP, LIST, SIZE) do { \
+       if ((LIST) && (SIZE) != 0) soap_dealloc((SOAP), (LIST)); \
+       (LIST) = NULL; \
+} while (0)
+  #define GLITE_SECURITY_GSOAP_LIST_GET(LIST, INDEX) (&(LIST)[INDEX])
+  #define GLITE_SECURITY_GSOAP_LIST_TYPE(NS, LIST) struct NS##__##LIST *
+#else
+  #define GLITE_SECURITY_GSOAP_LIST_CREATE0(SOAP, LIST, SIZE, TYPE, N) do { \
+       int ilist; \
+       \
+       if ((N) != 0) (LIST) = soap_malloc((SOAP), (N) * sizeof(void *)); \
+       else (LIST) = NULL; \
+       (SIZE) = (N); \
+       for (ilist = 0; ilist < (N); ilist++) { \
+               (LIST)[ilist] = soap_malloc((SOAP), sizeof(TYPE)); \
+       } \
+} while (0)
+  #define GLITE_SECURITY_GSOAP_LIST_DESTROY0(SOAP, LIST, SIZE) do { \
+       int ilist; \
+       \
+       for (ilist = 0; ilist < (SIZE); ilist++) soap_dealloc((SOAP), (LIST)[ilist]); \
+       if ((LIST) && (SIZE) != 0) soap_dealloc((SOAP), (LIST)); \
+       (LIST) = NULL; \
+} while (0)
+  #define GLITE_SECURITY_GSOAP_LIST_GET(LIST, INDEX) ((LIST)[INDEX])
+  #define GLITE_SECURITY_GSOAP_LIST_TYPE(NS, LIST) struct NS##__##LIST **
+#endif
+#define GLITE_SECURITY_GSOAP_LIST_CREATE(SOAP, CONTAINER, LIST, TYPE, N) GLITE_SECURITY_GSOAP_LIST_CREATE0(SOAP, (CONTAINER)->LIST, (CONTAINER)->__size##LIST, TYPE, N)
+#define GLITE_SECURITY_GSOAP_LIST_DESTROY(SOAP, CONTAINER, LIST) GLITE_SECURITY_GSOAP_LIST_DESTROY0(SOAP, (CONTAINER)->LIST, (CONTAINER)->__size##LIST)
+
+#endif
index ace9384..c7cc361 100644 (file)
@@ -168,7 +168,7 @@ glite_gsplugin(struct soap *soap, struct soap_plugin *p, void *arg)
        soap->fconnect          = glite_gsplugin_connect;
        soap->fclose            = glite_gsplugin_close;
 #if GSOAP_VERSION >= 20700
-       soap->fclosesocket      = glite_gsplugin_close;
+       soap->fclosesocket      = NULL;
 #endif
        soap->faccept           = glite_gsplugin_accept;
        soap->fsend                     = glite_gsplugin_send;
@@ -236,6 +236,7 @@ glite_gsplugin_connect(
                || (GSOAP_VERSION == 20700
                        && (strlen(GSOAP_MIN_VERSION) < 1 || GSOAP_MIN_VERSION[1] < 'e')) ) {
                fprintf(stderr, "Client connect will work only with gSOAP v2.7.0e and later");
+               soap->errnum = ENOSYS;
                return ENOSYS;
        }
 #endif
@@ -265,17 +266,21 @@ glite_gsplugin_connect(
                goto err;
        }
 
+       soap->errnum = 0;
        return 0;
 
 err:
        pdprintf(("GSLITE_GSPLUGIN: glite_gsplugin_connect() error!\n"));
        switch ( ret ) {
+       case EDG_WLL_GSS_ERROR_GSS: ret = SOAP_CLI_FAULT; break;
        case EDG_WLL_GSS_ERROR_HERRNO: 
-       case EDG_WLL_GSS_ERROR_ERRNO: return errno;
-       case EDG_WLL_GSS_ERROR_EOF: return ECONNREFUSED;
-       case EDG_WLL_GSS_ERROR_TIMEOUT: return ETIMEDOUT;
+       case EDG_WLL_GSS_ERROR_ERRNO: ret = errno; break;
+       case EDG_WLL_GSS_ERROR_EOF: ret = ECONNREFUSED; break;
+       case EDG_WLL_GSS_ERROR_TIMEOUT: ret = ETIMEDOUT; break;
+       default: break;
        }
 
+       soap->errnum = ret;
        return ret;
 }
 
@@ -311,7 +316,7 @@ glite_gsplugin_accept(struct soap *soap, int s, struct sockaddr *a, int *n)
        edg_wll_GssStatus               gss_code;
        int                                             conn;
 
-
+       soap->errnum = 0;
        pdprintf(("GSLITE_GSPLUGIN: glite_gsplugin_accept()\n"));
        ctx = ((int_plugin_data_t *)soap_lookup_plugin(soap, plugin_id))->ctx;
        if ( (conn = accept(s, (struct sockaddr *)&a, n)) < 0 ) return conn;
@@ -320,6 +325,7 @@ glite_gsplugin_accept(struct soap *soap, int s, struct sockaddr *a, int *n)
        if ( edg_wll_gss_accept(ctx->cred, conn, ctx->timeout, ctx->connection, &gss_code)) {
                pdprintf(("GSLITE_GSPLUGIN: Client authentication failed, closing.\n"));
                edg_wll_gss_get_error(&gss_code, "Client authentication failed", &ctx->error_msg);
+               soap->errnum = SOAP_SVR_FAULT;
                return -1;
        }
 
index e13a63d..1bf7fd3 100644 (file)
@@ -587,6 +587,17 @@ end:
    return ret;
 }
 
+/* XXX XXX This is black magic. "Sometimes" server refuses the client with SSL
+ *  * alert "certificate expired" even if it is not true. In this case the server
+ *   * slave terminates (which helps, usually), and we can reconnect transparently.
+ *    */
+
+/* This string appears in the error message in this case */
+#define _EXPIRED_ALERT_MESSAGE "function SSL3_READ_BYTES: sslv3 alert certificate expired"
+#define _EXPIRED_ALERT_RETRY_COUNT 10   /* default number of slaves, hope that not all
+                                                                                     are in the bad state */
+#define _EXPIRED_ALERT_RETRY_DELAY 10   /* ms */
+
 int 
 edg_wll_gss_connect(gss_cred_id_t cred, char const *hostname, int port,
                    struct timeval *timeout, edg_wll_GssConnection *connection,
@@ -600,6 +611,7 @@ edg_wll_gss_connect(gss_cred_id_t cred, char const *hostname, int port,
    gss_name_t server = GSS_C_NO_NAME;
    gss_ctx_id_t context = GSS_C_NO_CONTEXT;
    char *servername = NULL;
+   int retry = _EXPIRED_ALERT_RETRY_COUNT;
 
    maj_stat = min_stat = min_stat2 = req_flags = 0;
    memset(connection, 0, sizeof(*connection));
@@ -633,6 +645,8 @@ edg_wll_gss_connect(gss_cred_id_t cred, char const *hostname, int port,
 
    /* XXX if cred == GSS_C_NO_CREDENTIAL set the ANONYMOUS flag */
 
+   do { /* XXX: the black magic above */
+
    /* XXX prepsat na do {} while (maj_stat == CONT) a osetrit chyby*/
    while (!context_established) {
       /* XXX verify ret_flags match what was requested */
@@ -674,6 +688,27 @@ edg_wll_gss_connect(gss_cred_id_t cred, char const *hostname, int port,
 
    /* XXX check ret_flags matches to what was requested */
 
+   /* retry on false "certificate expired" */
+   if (ret == EDG_WLL_GSS_ERROR_GSS) {
+          edg_wll_GssStatus    gss_stat;
+          char *msg = NULL;
+
+          gss_stat.major_status = maj_stat;
+          gss_stat.minor_status = min_stat;
+          edg_wll_gss_get_error(&gss_stat,"",&msg);
+
+          if (strstr(msg,_EXPIRED_ALERT_MESSAGE)) {
+                  usleep(_EXPIRED_ALERT_RETRY_DELAY);
+                  retry--;
+          }
+          else retry = 0;
+
+          free(msg);
+   }
+   else retry = 0;
+
+   } while (retry);
+
    connection->sock = sock;
    connection->context = context;
    servername = NULL;
diff --git a/org.glite.security.gsoap-plugin/src/stdsoap2_2.7.0f.c b/org.glite.security.gsoap-plugin/src/stdsoap2_2.7.0f.c
new file mode 100644 (file)
index 0000000..b4750a4
--- /dev/null
@@ -0,0 +1,12026 @@
+/*
+
+stdsoap2.c[pp] 2.7.0f
+
+Runtime environment.
+
+gSOAP XML Web services tools
+Copyright (C) 2000-2004, Robert van Engelen, Genivia, Inc., All Rights Reserved.
+
+Contributors:
+
+Wind River Systems, Inc., for the following additions (marked WR[...]):
+  - vxWorks compatible
+  - Support for IPv6.
+
+--------------------------------------------------------------------------------
+
+   This software is released under one of the following three licenses:
+   GPL, the gSOAP public license, or Genivia's license for commercial use.
+
+--------------------------------------------------------------------------------
+gSOAP public license.
+
+The contents of this file are subject to the gSOAP Public License Version 1.3
+(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.cs.fsu.edu/~engelen/soaplicense.html
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the License.
+
+The Initial Developer of the Original Code is Robert A. van Engelen.
+Copyright (C) 2000-2004, Robert van Engelen, Genivia, Inc., All Rights Reserved.
+--------------------------------------------------------------------------------
+GPL license.
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place, Suite 330, Boston, MA 02111-1307 USA
+
+Author contact information:
+engelen@genivia.com / engelen@acm.org
+--------------------------------------------------------------------------------
+A commercial use license is available from Genivia, Inc., contact@genivia.com
+--------------------------------------------------------------------------------
+
+Installation note:
+
+Win32 build needs winsock.dll (Visual C++ "wsock32.lib")
+To do this in Visual C++ 6.0, go to "Project", "settings", select the "Link"
+tab (the project file needs to be selected in the file view) and add
+"wsock32.lib" to the "Object/library modules" entry
+
+On Mac OS X with gcc (GCC) 3.1 20020420 (prerelease) you MUST compile with
+-fstack_check when using -O2 because gcc 3.1 has a bug that smashes the stack
+when locally allocated data exceeds 64K.
+
+*/
+
+#include "stdsoap2.h"
+
+#ifdef __cplusplus
+SOAP_SOURCE_STAMP("@(#) stdsoap2.cpp ver 2.7.0f 2005-02-28 12:00:00 GMT")
+extern "C" {
+#else
+SOAP_SOURCE_STAMP("@(#) stdsoap2.c ver 2.7.0f 2005-02-28 12:00:00 GMT")
+#endif
+
+/* 8bit character representing unknown/nonrepresentable character data (e.g. not supported by current locale) */
+#ifndef SOAP_UNKNOWN_CHAR
+#define SOAP_UNKNOWN_CHAR (127)
+#endif
+
+/*      EOF=-1 */
+#define SOAP_LT (soap_wchar)(-2) /* XML character '<' */
+#define SOAP_TT (soap_wchar)(-3) /* XML character '</' */
+#define SOAP_GT (soap_wchar)(-4) /* XML character '>' */
+#define SOAP_QT (soap_wchar)(-5) /* XML character '"' */
+#define SOAP_AP (soap_wchar)(-6) /* XML character ''' */
+
+#define SOAP_BOM (soap_wchar)(0xFEFF) /* UTF BOM is Unicode FEFF */
+
+#define soap_blank(c)          ((c) >= 0 && (c) <= 32)
+#define soap_notblank(c)       ((c) > 32)
+#define soap_hash_ptr(p)       (((unsigned long)(p) >> 3) & (SOAP_PTRHASH - 1))
+
+static int soap_isxdigit(int);
+static soap_wchar soap_char(struct soap*);
+
+#ifndef WITH_NOIDREF
+static void soap_update_ptrs(struct soap*, char*, char*, long);
+static int soap_has_copies(struct soap*, const char*, const char*);
+static struct soap_ilist *soap_hlookup(struct soap*, const char*);
+static void soap_init_iht(struct soap*);
+static void soap_free_iht(struct soap*);
+static void soap_init_pht(struct soap*);
+static void soap_free_pht(struct soap*);
+#endif
+
+static int soap_set_error(struct soap*, const char*, const char*, const char*, int);
+static int soap_copy_fault(struct soap*, const char*, const char*, const char*);
+static int soap_getattrval(struct soap*, char*, size_t, soap_wchar);
+static void soap_set_local_namespaces(struct soap*);
+static void *fplugin(struct soap*, const char*);
+
+#ifndef WITH_LEAN
+static const char *soap_set_validation_fault(struct soap*, const char*, const char*);
+static int soap_isnumeric(struct soap*, const char*);
+static time_t soap_timegm(struct tm*);
+#endif
+
+#ifdef SOAP_DEBUG
+static void soap_init_logs(struct soap*);
+static void soap_close_logfile(struct soap*, int);
+static void soap_set_logfile(struct soap*, int, const char*);
+#endif
+
+#ifdef WITH_FAST
+static int soap_append_lab(struct soap*, const char*, size_t);
+#endif
+
+#ifndef WITH_LEANER
+static struct soap_multipart *soap_new_multipart(struct soap*, struct soap_multipart**, struct soap_multipart**, char*, size_t);
+static int soap_putdimefield(struct soap*, const char*, size_t);
+static char *soap_getdimefield(struct soap*, size_t);
+static void soap_select_mime_boundary(struct soap*);
+static int soap_valid_mime_boundary(struct soap*);
+#endif
+
+#ifdef WITH_GZIP
+static int soap_getgziphdr(struct soap*);
+#endif
+
+#ifdef WITH_OPENSSL
+static int ssl_auth_init(struct soap*);
+static int ssl_verify_callback(int, X509_STORE_CTX*);
+static int ssl_password(char*, int, int, void *);
+static const char *ssl_error(struct soap*, int);
+/* This callback is included for future references. It should not be deleted
+static DH *ssl_tmp_dh(SSL*, int, int);
+*/
+#endif
+
+#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
+static const char *soap_decode(char*, size_t, const char*, const char*);
+#endif
+
+#ifndef WITH_NOHTTP
+static soap_wchar soap_getchunkchar(struct soap*);
+static const char *http_error(struct soap*, int);
+static int http_post(struct soap*, const char*, const char*, int, const char*, const char*, size_t);
+static int http_get(struct soap*);
+static int http_send_header(struct soap*, const char*);
+static int http_post_header(struct soap*, const char*, const char*);
+static int http_response(struct soap*, int, size_t);
+static int http_parse(struct soap*);
+static int http_parse_header(struct soap*, const char*, const char*);
+#endif
+
+#ifndef WITH_NOIO
+static int fsend(struct soap*, const char*, size_t);
+static size_t frecv(struct soap*, char*, size_t);
+static int tcp_init(struct soap*);
+static const char *tcp_error(struct soap*);
+static int tcp_gethost(struct soap*, const char *addr, struct in_addr *inaddr);
+static int tcp_connect(struct soap*, const char *endpoint, const char *host, int port);
+static int tcp_accept(struct soap*, int, struct sockaddr*, int*);
+static int tcp_disconnect(struct soap*);
+static int tcp_closesocket(struct soap*, SOAP_SOCKET);
+static int tcp_shutdownsocket(struct soap*, SOAP_SOCKET, int);
+static const char *soap_strerror(struct soap*);
+#endif
+
+/* WR[ */
+#ifdef VXWORKS
+static int vx_nonblocking = TRUE; /* ioctl argument */
+#endif
+/* ]WR */
+
+#if defined(PALM) && !defined(PALM_2)
+unsigned short errno;
+#endif
+
+#ifndef PALM_1
+static const char soap_env1[42] = "http://schemas.xmlsoap.org/soap/envelope/";
+static const char soap_enc1[42] = "http://schemas.xmlsoap.org/soap/encoding/";
+static const char soap_env2[40] = "http://www.w3.org/2003/05/soap-envelope";
+static const char soap_enc2[40] = "http://www.w3.org/2003/05/soap-encoding";
+static const char soap_rpc[35] = "http://www.w3.org/2003/05/soap-rpc";
+#endif
+
+#ifndef PALM_1
+const struct soap_double_nan soap_double_nan = {0xFFFFFFFF, 0xFFFFFFFF};
+static const char soap_base64o[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+static const char soap_base64i[81] = "\76XXX\77\64\65\66\67\70\71\72\73\74\75XXXXXXX\00\01\02\03\04\05\06\07\10\11\12\13\14\15\16\17\20\21\22\23\24\25\26\27\30\31XXXXXX\32\33\34\35\36\37\40\41\42\43\44\45\46\47\50\51\52\53\54\55\56\57\60\61\62\63";
+#endif
+
+static const char soap_padding[3] = "\0\0";
+#define SOAP_STR_PADDING (soap_padding)
+#define SOAP_STR_EOS (soap_padding)
+
+#ifndef WITH_LEAN
+static const struct soap_code_map html_entity_codes[] = /* entities for XHTML parsing */
+{ { 160, "nbsp" },
+  { 161, "iexcl" },
+  { 162, "cent" },
+  { 163, "pound" },
+  { 164, "curren" },
+  { 165, "yen" },
+  { 166, "brvbar" },
+  { 167, "sect" },
+  { 168, "uml" },
+  { 169, "copy" },
+  { 170, "ordf" },
+  { 171, "laquo" },
+  { 172, "not" },
+  { 173, "shy" },
+  { 174, "reg" },
+  { 175, "macr" },
+  { 176, "deg" },
+  { 177, "plusmn" },
+  { 178, "sup2" },
+  { 179, "sup3" },
+  { 180, "acute" },
+  { 181, "micro" },
+  { 182, "para" },
+  { 183, "middot" },
+  { 184, "cedil" },
+  { 185, "sup1" },
+  { 186, "ordm" },
+  { 187, "raquo" },
+  { 188, "frac14" },
+  { 189, "frac12" },
+  { 190, "frac34" },
+  { 191, "iquest" },
+  { 192, "Agrave" },
+  { 193, "Aacute" },
+  { 194, "Acirc" },
+  { 195, "Atilde" },
+  { 196, "Auml" },
+  { 197, "Aring" },
+  { 198, "AElig" },
+  { 199, "Ccedil" },
+  { 200, "Egrave" },
+  { 201, "Eacute" },
+  { 202, "Ecirc" },
+  { 203, "Euml" },
+  { 204, "Igrave" },
+  { 205, "Iacute" },
+  { 206, "Icirc" },
+  { 207, "Iuml" },
+  { 208, "ETH" },
+  { 209, "Ntilde" },
+  { 210, "Ograve" },
+  { 211, "Oacute" },
+  { 212, "Ocirc" },
+  { 213, "Otilde" },
+  { 214, "Ouml" },
+  { 215, "times" },
+  { 216, "Oslash" },
+  { 217, "Ugrave" },
+  { 218, "Uacute" },
+  { 219, "Ucirc" },
+  { 220, "Uuml" },
+  { 221, "Yacute" },
+  { 222, "THORN" },
+  { 223, "szlig" },
+  { 224, "agrave" },
+  { 225, "aacute" },
+  { 226, "acirc" },
+  { 227, "atilde" },
+  { 228, "auml" },
+  { 229, "aring" },
+  { 230, "aelig" },
+  { 231, "ccedil" },
+  { 232, "egrave" },
+  { 233, "eacute" },
+  { 234, "ecirc" },
+  { 235, "euml" },
+  { 236, "igrave" },
+  { 237, "iacute" },
+  { 238, "icirc" },
+  { 239, "iuml" },
+  { 240, "eth" },
+  { 241, "ntilde" },
+  { 242, "ograve" },
+  { 243, "oacute" },
+  { 244, "ocirc" },
+  { 245, "otilde" },
+  { 246, "ouml" },
+  { 247, "divide" },
+  { 248, "oslash" },
+  { 249, "ugrave" },
+  { 250, "uacute" },
+  { 251, "ucirc" },
+  { 252, "uuml" },
+  { 253, "yacute" },
+  { 254, "thorn" },
+  { 255, "yuml" },
+  {   0, NULL }
+};
+#endif
+
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+static const struct soap_code_map h_error_codes[] =
+{
+#ifdef HOST_NOT_FOUND   
+  { HOST_NOT_FOUND, "Host not found" },
+#endif
+#ifdef TRY_AGAIN
+  { TRY_AGAIN, "Try Again" },
+#endif
+#ifdef NO_RECOVERY  
+  { NO_RECOVERY, "No Recovery" },
+#endif
+#ifdef NO_DATA
+  { NO_DATA, "No Data" },
+#endif
+#ifdef NO_ADDRESS
+  { NO_ADDRESS, "No Address" },
+#endif
+  { 0, NULL }
+};
+#endif
+#endif
+
+#ifndef WITH_NOHTTP
+#ifndef WITH_LEAN
+static const struct soap_code_map h_http_error_codes[] =
+{ { 201, "Created" },
+  { 202, "Accepted" },
+  { 203, "Non-Authoritative Information" },
+  { 204, "No Content" },
+  { 205, "Reset Content" },
+  { 206, "Partial Content" },
+  { 300, "Multiple Choices" },
+  { 301, "Moved Permanently" },
+  { 302, "Found" },
+  { 303, "See Other" },
+  { 304, "Not Modified" },
+  { 305, "Use Proxy" },
+  { 307, "Temporary Redirect" },
+  { 400, "Bad Request" },
+  { 401, "Unauthorized" },
+  { 402, "Payment Required" },
+  { 403, "Forbidden" },
+  { 404, "Not Found" },
+  { 405, "Method Not Allowed" },
+  { 406, "Not Acceptable" },
+  { 407, "Proxy Authentication Required" },
+  { 408, "Request Time-out" },
+  { 409, "Conflict" },
+  { 410, "Gone" },
+  { 411, "Length Required" },
+  { 412, "Precondition Failed" },
+  { 413, "Request Entity Too Large" },
+  { 414, "Request-URI Too Large" },
+  { 415, "Unsupported Media Type" },
+  { 416, "Requested range not satisfiable" },
+  { 417, "Expectation Failed" },
+  { 500, "Internal Server Error" },
+  { 501, "Not Implemented" },
+  { 502, "Bad Gateway" },
+  { 503, "Service Unavailable" },
+  { 504, "Gateway Time-out" },
+  { 505, "HTTP Version not supported" },
+  {   0, NULL }
+};
+#endif
+#endif
+
+#ifdef WITH_OPENSSL
+static const struct soap_code_map h_ssl_error_codes[] =
+{
+#define _SSL_ERROR(e) { e, #e }
+  _SSL_ERROR(SSL_ERROR_SSL),
+  _SSL_ERROR(SSL_ERROR_ZERO_RETURN),
+  _SSL_ERROR(SSL_ERROR_WANT_READ),
+  _SSL_ERROR(SSL_ERROR_WANT_WRITE),
+  _SSL_ERROR(SSL_ERROR_WANT_CONNECT),
+  _SSL_ERROR(SSL_ERROR_WANT_X509_LOOKUP),
+  _SSL_ERROR(SSL_ERROR_SYSCALL),
+  { 0, NULL }
+};
+#endif
+
+#ifndef WITH_LEANER
+static const struct soap_code_map mime_codes[] =
+{ { SOAP_MIME_7BIT,            "7bit" },
+  { SOAP_MIME_8BIT,            "8bit" },
+  { SOAP_MIME_BINARY,          "binary" },
+  { SOAP_MIME_QUOTED_PRINTABLE, "quoted-printable" },
+  { SOAP_MIME_BASE64,          "base64" },
+  { SOAP_MIME_IETF_TOKEN,      "ietf-token" },
+  { SOAP_MIME_X_TOKEN,         "x-token" },
+  { 0,                         NULL }
+};
+#endif
+
+#ifdef WIN32
+static int tcp_done = 0;
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+fsend(struct soap *soap, const char *s, size_t n)
+{ register int nwritten;
+#if defined(__cplusplus) && !defined(WITH_LEAN)
+  if (soap->os)
+  { soap->os->write(s, n);
+    if (soap->os->good())
+      return SOAP_OK;
+    return SOAP_EOF;
+  }
+#endif
+  while (n)
+  { if (soap_valid_socket(soap->socket))
+    { 
+#ifndef WITH_LEAN
+      if (soap->send_timeout)
+      { struct timeval timeout;
+        fd_set fd;
+        if (soap->send_timeout > 0)
+        { timeout.tv_sec = soap->send_timeout;
+          timeout.tv_usec = 0;
+        }
+        else
+        { timeout.tv_sec = -soap->send_timeout/1000000;
+          timeout.tv_usec = -soap->send_timeout%1000000;
+        }
+        FD_ZERO(&fd);
+        FD_SET((SOAP_SOCKET)soap->socket, &fd);
+        for (;;)
+        { register int r = select((SOAP_SOCKET)(soap->socket + 1), NULL, &fd, &fd, &timeout);
+          if (r > 0)
+            break;
+          if (!r)
+          { soap->errnum = 0;
+            return SOAP_EOF;
+          }
+          if (soap_socket_errno != SOAP_EINTR)
+          { soap->errnum = soap_socket_errno;
+            return SOAP_EOF;
+          }
+        }
+      }
+#endif
+#ifdef WITH_OPENSSL
+      if (soap->ssl)
+        nwritten = SSL_write(soap->ssl, s, n);
+      else
+#endif
+#ifndef PALM
+        nwritten = send((SOAP_SOCKET)soap->socket, s, n, soap->socket_flags);
+#else
+        nwritten = send((SOAP_SOCKET)soap->socket, (void*)s, n, soap->socket_flags);
+#endif
+      if (nwritten <= 0)
+      {
+#ifdef WITH_OPENSSL
+       int err;
+        if (soap->ssl && (err = SSL_get_error(soap->ssl, nwritten)) != SSL_ERROR_NONE && err != SSL_ERROR_WANT_READ && err != SSL_ERROR_WANT_WRITE)
+          return SOAP_EOF;
+#endif
+        if (soap_socket_errno != SOAP_EINTR && soap_socket_errno != SOAP_EWOULDBLOCK && soap_socket_errno != SOAP_EAGAIN)
+        { soap->errnum = soap_socket_errno;
+          return SOAP_EOF;
+        }
+        nwritten = 0; /* and call write() again */
+      }
+    }
+    else
+    {
+#ifdef WITH_FASTCGI
+      nwritten = fwrite((void*)s, 1, n, stdout);
+      fflush(stdout);
+#else
+#ifdef UNDER_CE
+      nwritten = fwrite(s, 1, n, soap->sendfd);
+#else
+/* WR[ */
+#ifdef VXWORKS
+#ifdef WMW_RPM_IO
+      if (soap->rpmreqid)
+      { httpBlockPut(soap->rpmreqid, s, n); 
+        nwritten = n;
+      }
+      else
+        nwritten = fwrite(s, sizeof(char), n, fdopen(soap->sendfd, "w"));
+#else
+      nwritten = fwrite(s, sizeof(char), n, fdopen(soap->sendfd, "w"));
+#endif /* WMW_RPM_IO */
+#else
+/* ]WR */
+      nwritten = write((SOAP_SOCKET)soap->sendfd, s, n);
+/* WR[ */
+#endif
+/* ]WR */
+#endif
+#endif
+      if (nwritten <= 0)
+      { if (soap_errno != SOAP_EINTR && soap_errno != SOAP_EWOULDBLOCK && soap_errno != SOAP_EAGAIN)
+        { soap->errnum = soap_errno;
+          return SOAP_EOF;
+        }
+        nwritten = 0; /* and call write() again */
+      }
+    }
+    n -= nwritten;
+    s += nwritten;
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_flush_raw(struct soap *soap, const char *s, size_t n)
+{ if ((soap->mode & SOAP_IO) == SOAP_IO_STORE)
+  { register char *t;
+    if (!(t = (char*)soap_push_block(soap, n)))
+      return soap->error = SOAP_EOM;
+    memcpy(t, s, n);
+#ifndef WITH_LEANER
+    if (soap->fpreparesend)
+      return soap->fpreparesend(soap, s, n);
+#endif
+    return SOAP_OK;
+  }
+#ifndef WITH_LEANER
+  if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
+  { char t[16];
+    sprintf(t, "\r\n%lX\r\n" + (soap->chunksize ? 0 : 2), (unsigned long)n);
+    DBGMSG(SENT, t, strlen(t));
+    if ((soap->error = soap->fsend(soap, t, strlen(t))))
+      return soap->error;
+    soap->chunksize += n;
+  }
+  DBGMSG(SENT, s, n);
+#endif
+  return soap->error = soap->fsend(soap, s, n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_flush(struct soap *soap)
+{ if (soap->bufidx)
+  {
+#ifdef WITH_ZLIB
+    if (soap->mode & SOAP_ENC_ZLIB)
+    { soap->d_stream.next_in = (Byte*)soap->buf;
+      soap->d_stream.avail_in = (unsigned int)soap->bufidx;
+#ifdef WITH_GZIP
+      soap->z_crc = crc32(soap->z_crc, (Byte*)soap->buf, (unsigned int)soap->bufidx);
+#endif
+      do
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflating %u bytes\n", soap->d_stream.avail_in));
+        if (deflate(&soap->d_stream, Z_NO_FLUSH) != Z_OK)
+        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unable to deflate: %s\n", soap->d_stream.msg?soap->d_stream.msg:""));
+          return soap->error = SOAP_ZLIB_ERROR;
+        }
+        if (!soap->d_stream.avail_out)
+        { if (soap_flush_raw(soap, soap->z_buf, SOAP_BUFLEN))
+            return soap->error;
+          soap->d_stream.next_out = (Byte*)soap->z_buf;
+          soap->d_stream.avail_out = SOAP_BUFLEN;
+        }
+      } while (soap->d_stream.avail_in);
+    }
+    else
+#endif
+    if (soap_flush_raw(soap, soap->buf, soap->bufidx))
+      return soap->error;
+    soap->bufidx = 0;
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_send_raw(struct soap *soap, const char *s, size_t n)
+{ if (!n)
+    return SOAP_OK;
+  if (soap->mode & SOAP_IO_LENGTH)
+  { soap->count += n;
+#ifndef WITH_LEANER
+    if (soap->fpreparesend && (soap->mode & SOAP_IO) != SOAP_IO_STORE)
+      return soap->fpreparesend(soap, s, n);
+#endif
+    return SOAP_OK;
+  }
+  if (soap->mode & SOAP_IO)
+  { register size_t i = SOAP_BUFLEN - soap->bufidx;
+    while (n >= i)
+    { memcpy(soap->buf + soap->bufidx, s, i);
+      soap->bufidx = SOAP_BUFLEN;
+      if (soap_flush(soap))
+        return soap->error;
+      s += i;
+      n -= i;
+      i = SOAP_BUFLEN;
+    }
+    memcpy(soap->buf + soap->bufidx, s, n);
+    soap->bufidx += n;
+    return SOAP_OK;
+  }
+  return soap_flush_raw(soap, s, n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_send(struct soap *soap, const char *s)
+{ if (s)
+    return soap_send_raw(soap, s, strlen(s));
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_send2(struct soap *soap, const char *s1, const char *s2)
+{ if (soap_send(soap, s1))
+    return soap->error;
+  return soap_send(soap, s2);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_send3(struct soap *soap, const char *s1, const char *s2, const char *s3)
+{ if (soap_send(soap, s1)
+   || soap_send(soap, s2))
+    return soap->error;
+  return soap_send(soap, s3);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static size_t
+frecv(struct soap *soap, char *s, size_t n)
+{ register int r;
+  soap->errnum = 0;
+#if defined(__cplusplus) && !defined(WITH_LEAN)
+  if (soap->is)
+  { if (soap->is->good())
+      return soap->is->read(s, n).gcount();
+    return 0;
+  }
+#endif
+  if (soap_valid_socket(soap->socket))
+  { for (;;)
+    { 
+#ifndef WITH_LEAN
+      if (soap->recv_timeout)
+      { struct timeval timeout;
+        fd_set fd;
+        if (soap->recv_timeout > 0)
+        { timeout.tv_sec = soap->recv_timeout;
+          timeout.tv_usec = 0;
+        }
+        else
+        { timeout.tv_sec = -soap->recv_timeout/1000000;
+          timeout.tv_usec = -soap->recv_timeout%1000000;
+        }
+        FD_ZERO(&fd);
+        FD_SET((SOAP_SOCKET)soap->socket, &fd);
+        for (;;)
+        { r = select((SOAP_SOCKET)(soap->socket + 1), &fd, NULL, &fd, &timeout);
+          if (r > 0)
+            break;
+          if (r == 0 || soap_socket_errno != SOAP_EINTR)
+          { soap->errnum = soap_socket_errno;
+            return 0;
+          }
+        }
+      }
+#endif
+#ifdef WITH_OPENSSL
+      if (soap->ssl)
+      { int err;
+       r = SSL_read(soap->ssl, s, n);
+        if ((err = SSL_get_error(soap->ssl, r)) == SSL_ERROR_NONE)
+          return (size_t)r;
+       if (err != SSL_ERROR_WANT_READ && err != SSL_ERROR_WANT_WRITE)
+          return 0;
+      }
+      else
+#endif
+      { r = recv((SOAP_SOCKET)soap->socket, s, n, soap->socket_flags);
+        if (r >= 0)
+          return (size_t)r;
+        if (soap_socket_errno != SOAP_EINTR && soap_socket_errno != SOAP_EAGAIN && soap_socket_errno != SOAP_EWOULDBLOCK)
+        { soap->errnum = soap_socket_errno;
+          return 0;
+        }
+      }
+#ifndef WITH_LEAN
+      { struct timeval timeout;
+        fd_set fd;
+        timeout.tv_sec = 0;
+        timeout.tv_usec = 10000;
+        FD_ZERO(&fd);
+        FD_SET((SOAP_SOCKET)soap->socket, &fd);
+#ifdef WITH_OPENSSL
+        if (soap->ssl && SSL_get_error(soap->ssl, r) == SSL_ERROR_WANT_WRITE)
+          r = select((SOAP_SOCKET)(soap->socket + 1), NULL, &fd, &fd, &timeout);
+        else
+          r = select((SOAP_SOCKET)(soap->socket + 1), &fd, NULL, &fd, &timeout);
+#else
+        r = select((SOAP_SOCKET)(soap->socket + 1), &fd, NULL, &fd, &timeout);
+#endif
+        if (r < 0 && soap_socket_errno != SOAP_EINTR)
+        { soap->errnum = soap_socket_errno;
+          return 0;
+        }
+      }
+#endif
+    }
+  }
+#ifdef WITH_FASTCGI
+  return fread(s, 1, n, stdin);
+#else
+#ifdef UNDER_CE
+  return fread(s, 1, n, soap->recvfd);
+#else
+/* WR[ */
+#ifdef WMW_RPM_IO
+  if (soap->rpmreqid)
+    r = httpBlockRead(soap->rpmreqid, s, n);
+  else
+    r = read(soap->recvfd, s, n);
+  if (r >= 0)
+    return r;
+  return 0;
+#else
+/* ]WR */
+  r = read((SOAP_SOCKET)soap->recvfd, s, n);
+  if (r >= 0)
+    return (size_t)r;
+  soap->errnum = soap_errno;
+  return 0;
+/* WR[ */
+#endif
+/* ]WR */
+#endif
+#endif
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static soap_wchar
+soap_getchunkchar(struct soap *soap)
+{ if (soap->bufidx < soap->buflen)
+    return soap->buf[soap->bufidx++];
+  soap->bufidx = 0;
+  soap->buflen = soap->chunkbuflen = soap->frecv(soap, soap->buf, SOAP_BUFLEN);
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read %u bytes from socket %d\n", (unsigned int)soap->buflen, soap->socket));
+  DBGMSG(RECV, soap->buf, soap->buflen);
+  if (soap->buflen)
+    return soap->buf[soap->bufidx++];
+  return EOF;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static int
+soap_isxdigit(int c)
+{ return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f');
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_recv_raw(struct soap *soap)
+{ register size_t ret;
+#ifdef WITH_ZLIB
+  if (soap->mode & SOAP_ENC_ZLIB)
+  { if (soap->d_stream.next_out == Z_NULL)
+      return EOF;
+    if (soap->d_stream.avail_in || !soap->d_stream.avail_out)
+    { register int r;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflating\n"));
+      soap->d_stream.next_out = (Byte*)soap->buf;
+      soap->d_stream.avail_out = SOAP_BUFLEN;
+      r = inflate(&soap->d_stream, Z_NO_FLUSH);
+      if (r == Z_OK || r == Z_STREAM_END)
+      { soap->bufidx = 0;
+        soap->buflen = SOAP_BUFLEN - soap->d_stream.avail_out;
+        if (soap->zlib_in == SOAP_ZLIB_GZIP)
+          soap->z_crc = crc32(soap->z_crc, (Byte*)soap->buf, (unsigned int)soap->buflen);
+        if (r == Z_STREAM_END)
+        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflated %lu->%lu bytes\n", soap->d_stream.total_in, soap->d_stream.total_out));
+          soap->z_ratio_in = (float)soap->d_stream.total_in / (float)soap->d_stream.total_out;
+          soap->d_stream.next_out = Z_NULL;
+        }
+        if (soap->buflen)
+        { soap->count += soap->buflen;
+          return SOAP_OK;
+        }
+      }
+      else if (r != Z_BUF_ERROR)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflate error: %s\n", soap->d_stream.msg?soap->d_stream.msg:""));
+        soap->d_stream.next_out = Z_NULL;
+        return EOF;
+      }
+    }
+zlib_again:
+    if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK && !soap->chunksize)
+    { memcpy(soap->buf, soap->z_buf, SOAP_BUFLEN);
+      soap->buflen = soap->z_buflen;
+    }
+  }
+#endif
+#ifndef WITH_NOHTTP
+  if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK) /* read HTTP chunked transfer */
+  { 
+chunk_again:
+    if (soap->chunksize)
+    { soap->buflen = ret = soap->frecv(soap, soap->buf, soap->chunksize > SOAP_BUFLEN ? SOAP_BUFLEN : soap->chunksize);
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Getting chunk: read %u bytes\n", (unsigned int)ret));
+      DBGMSG(RECV, soap->buf, ret);
+      soap->bufidx = 0;
+      soap->chunksize -= ret;
+    }
+    else
+    { register soap_wchar c;
+      char *t, tmp[8];
+      t = tmp;
+      if (!soap->chunkbuflen)
+      { soap->chunkbuflen = ret = soap->frecv(soap, soap->buf, SOAP_BUFLEN);
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read %u bytes from socket %d\n", (unsigned int)ret, soap->socket));
+        DBGMSG(RECV, soap->buf, ret);
+        soap->bufidx = 0;
+        if (!ret)
+          return EOF;
+      }
+      else
+        soap->bufidx = soap->buflen;
+      soap->buflen = soap->chunkbuflen;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Getting chunk size (%u %u)\n", (unsigned int)soap->bufidx, (unsigned int)soap->buflen));
+      while (!soap_isxdigit((int)(c = soap_getchunkchar(soap))))
+        if ((int)c == EOF)
+         return EOF;
+      do
+        *t++ = (char)c;
+      while (soap_isxdigit((int)(c = soap_getchunkchar(soap))) && t - tmp < 7);
+      while ((int)c != EOF && c != '\n')
+        c = soap_getchunkchar(soap);
+      if ((int)c == EOF)
+        return EOF;
+      *t = '\0';
+      soap->chunksize = soap_strtoul(tmp, &t, 16);
+      if (!soap->chunksize)
+      { soap->chunkbuflen = 0;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of chunked message\n"));
+       while ((int)c != EOF && c != '\n')
+          c = soap_getchunkchar(soap);
+        return EOF;
+      }
+      soap->buflen = soap->bufidx + soap->chunksize;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Moving buf len to %u (%u %s)\n", (unsigned int)soap->buflen, (unsigned int)soap->bufidx, tmp));
+      if (soap->buflen > soap->chunkbuflen)
+      { soap->buflen = soap->chunkbuflen;
+        soap->chunksize -= soap->buflen - soap->bufidx;
+        soap->chunkbuflen = 0;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Passed end of buffer for chunked HTTP (%lu bytes left)\n", (unsigned long)(soap->buflen - soap->bufidx)));
+      }
+      else if (soap->chunkbuflen)
+        soap->chunksize = 0;
+      ret = soap->buflen - soap->bufidx;
+      if (!ret)
+        goto chunk_again;
+    }
+  }
+  else
+#endif
+  { soap->bufidx = 0;
+    soap->buflen = ret = soap->frecv(soap, soap->buf, SOAP_BUFLEN);
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read %u bytes from socket %d\n", (unsigned int)ret, soap->socket));
+    DBGMSG(RECV, soap->buf, ret);
+  }
+#ifndef WITH_LEANER
+  if (soap->fpreparerecv && (soap->error = soap->fpreparerecv(soap, soap->buf, ret)))
+    return soap->error;
+#endif
+#ifdef WITH_ZLIB
+  if (soap->mode & SOAP_ENC_ZLIB)
+  { register int r;
+    memcpy(soap->z_buf, soap->buf, SOAP_BUFLEN);
+    soap->d_stream.next_in = (Byte*)(soap->z_buf + soap->bufidx);
+    soap->d_stream.avail_in = (unsigned int)ret;
+    soap->d_stream.next_out = (Byte*)soap->buf;
+    soap->d_stream.avail_out = SOAP_BUFLEN;
+    r = inflate(&soap->d_stream, Z_NO_FLUSH);
+    if (r == Z_OK || r == Z_STREAM_END)
+    { soap->bufidx = 0;
+      soap->z_buflen = soap->buflen;
+      soap->buflen = ret = SOAP_BUFLEN - soap->d_stream.avail_out;
+      if (soap->zlib_in == SOAP_ZLIB_GZIP)
+        soap->z_crc = crc32(soap->z_crc, (Byte*)soap->buf, (unsigned int)soap->buflen);
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflated %u bytes\n", (unsigned int)ret));
+      if (!ret)
+        goto zlib_again;
+      if (r == Z_STREAM_END)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflated %lu->%lu bytes\n", soap->d_stream.total_in, soap->d_stream.total_out));
+        soap->z_ratio_in = (float)soap->d_stream.total_in / (float)soap->d_stream.total_out;
+        soap->d_stream.next_out = Z_NULL;
+      }
+    }
+    else
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unable to inflate: (%d) %s\n", r, soap->d_stream.msg?soap->d_stream.msg:""));
+      soap->d_stream.next_out = Z_NULL;
+      return EOF;
+    }
+  }
+#endif
+  soap->count += ret;
+  return !ret;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_recv(struct soap *soap)
+{ 
+#ifndef WITH_LEANER
+  if (soap->mode & SOAP_ENC_DIME)
+  { if (soap->dime.buflen)
+    { char *s;
+      int i;
+      unsigned char tmp[12];
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DIME hdr for chunked DIME is in buffer\n"));
+      soap->count += soap->dime.buflen - soap->buflen;
+      soap->buflen = soap->dime.buflen;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Skip padding (%ld bytes)\n", -(long)soap->dime.size&3));
+      for (i = -(long)soap->dime.size&3; i > 0; i--)
+      { soap->bufidx++;
+        if (soap->bufidx >= soap->buflen)
+          if (soap_recv_raw(soap))
+            return EOF;
+      }
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get DIME hdr for next chunk\n"));
+      s = (char*)tmp;
+      for (i = 12; i > 0; i--)
+      { *s++ = soap->buf[soap->bufidx++];
+        if (soap->bufidx >= soap->buflen)
+          if (soap_recv_raw(soap))
+            return EOF;
+      }
+      soap->dime.flags = tmp[0] & 0x7;
+      soap->dime.size = ((size_t)tmp[8] << 24) | ((size_t)tmp[9] << 16) | ((size_t)tmp[10] << 8) | ((size_t)tmp[11]);
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get DIME chunk (%u bytes)\n", (unsigned int)soap->dime.size));
+      if (soap->dime.flags & SOAP_DIME_CF)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "More chunking\n"));
+        soap->dime.chunksize = soap->dime.size;
+        if (soap->buflen - soap->bufidx >= soap->dime.size)
+        { soap->dime.buflen = soap->buflen;
+          soap->buflen = soap->bufidx + soap->dime.chunksize;
+        }
+        else
+          soap->dime.chunksize -= soap->buflen - soap->bufidx;
+      }
+      else
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Last chunk\n"));
+        soap->dime.buflen = 0;
+        soap->dime.chunksize = 0;
+      }
+      soap->count = soap->buflen - soap->bufidx;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%u bytes remaining\n", (unsigned int)soap->count));
+      return SOAP_OK;
+    }
+    if (soap->dime.chunksize)
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get next DIME hdr for chunked DIME (%u bytes chunk)\n", (unsigned int)soap->dime.chunksize));
+      if (soap_recv_raw(soap))
+        return EOF;
+      if (soap->buflen - soap->bufidx >= soap->dime.chunksize)
+      { soap->dime.buflen = soap->buflen;
+        soap->count -= soap->buflen - soap->bufidx - soap->dime.chunksize;
+        soap->buflen = soap->bufidx + soap->dime.chunksize;
+      }
+      else
+        soap->dime.chunksize -= soap->buflen - soap->bufidx;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%lu bytes remaining, count=%u\n", (unsigned long)(soap->buflen-soap->bufidx), (unsigned int)soap->count));
+      return SOAP_OK;
+    }
+  }
+#endif
+  return soap_recv_raw(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+soap_wchar
+SOAP_FMAC2
+soap_getchar(struct soap *soap)
+{ register soap_wchar c;
+  if (soap->ahead)
+  { c = soap->ahead;
+    soap->ahead = 0;
+    return c;
+  }
+  return soap_get1(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+const struct soap_code_map*
+SOAP_FMAC2
+soap_code(const struct soap_code_map *map, const char *str)
+{ while (map->string)
+  { if (!strcmp(str, map->string)) /* case sensitive */
+      return map;
+    map++;
+  }
+  return NULL;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+long
+SOAP_FMAC2
+soap_int_code(const struct soap_code_map *map, const char *str, long other)
+{ while (map->string)
+  { if (!soap_tag_cmp(str, map->string)) /* case insensitive */
+      return map->code;
+    map++;
+  }
+  return other;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_str_code(const struct soap_code_map *map, long code)
+{ while (map->code != code && map->string)
+    map++;
+  return map->string;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static soap_wchar
+soap_char(struct soap *soap)
+{ char tmp[8];
+  register int i;
+  register soap_wchar c;
+  register char *s = tmp;
+  for (i = 0; i < 7; i++)
+  { c = soap_get1(soap);
+    if (c == ';' || (int)c == EOF)
+      break;
+    *s++ = (char)c;
+  }
+  *s = '\0';
+  if (*tmp == '#')
+  { if (tmp[1] == 'x' || tmp[1] == 'X')
+      return soap_strtol(tmp + 2, NULL, 16);
+    return atol(tmp + 1);
+  }
+  if (!strcmp(tmp, "lt"))
+    return '<';
+  if (!strcmp(tmp, "gt"))
+    return '>';
+  if (!strcmp(tmp, "amp"))
+    return '&';
+  if (!strcmp(tmp, "quot"))
+    return '"';
+  if (!strcmp(tmp, "apos"))
+    return '\'';
+#ifndef WITH_LEAN
+  return (soap_wchar)soap_int_code(html_entity_codes, tmp, SOAP_UNKNOWN_CHAR);
+#else
+  return SOAP_UNKNOWN_CHAR; /* use this to represent unknown code */
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifdef WITH_LEAN
+soap_wchar
+soap_get0(struct soap *soap)
+{ if (soap->bufidx >= soap->buflen && soap_recv(soap))
+    return EOF;
+  return (unsigned char)soap->buf[soap->bufidx];
+}
+#endif
+
+/******************************************************************************/
+#ifdef WITH_LEAN
+soap_wchar
+soap_get1(struct soap *soap)
+{ if (soap->bufidx >= soap->buflen && soap_recv(soap))
+    return EOF;
+  return (unsigned char)soap->buf[soap->bufidx++];
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+soap_wchar
+SOAP_FMAC2
+soap_get(struct soap *soap)
+{ register soap_wchar c;
+  c = soap->ahead;
+  if (c)
+    soap->ahead = 0;
+  else
+    c = soap_get1(soap);
+  for (;;)
+  { if (soap->cdata)
+    { if (c == ']')
+      { c = soap_get1(soap);
+        if (c == ']')
+        { soap->cdata = 0;
+          soap_get1(soap); /* skip > */
+          c = soap_get1(soap);
+        }
+       else
+        { soap_revget1(soap);
+          return ']';
+        }
+      }
+      else
+        return c;
+    }
+    switch (c)
+    { case '<':
+        do c = soap_get1(soap);
+        while (soap_blank(c));
+        if (c == '!' || c == '?' || c == '%')
+        { if (c == '!')
+          { c = soap_get1(soap);
+            if (c == '[')
+            { do c = soap_get1(soap);
+              while ((int)c != EOF && c != '[');
+              if ((int)c == EOF)
+                break;
+              soap->cdata = 1;
+              c = soap_get1(soap);
+             continue;
+            }
+            if (c == '-' && (c = soap_get1(soap)) == '-')
+            { do
+              { c = soap_get1(soap);
+                if (c == '-' && (c = soap_get1(soap)) == '-')
+                  break;
+              } while ((int)c != EOF);
+            }
+          }
+          while ((int)c != EOF && c != '>')
+            c = soap_get1(soap);
+         if ((int)c == EOF)
+           break;
+          c = soap_get1(soap);
+          continue;
+        }
+        if (c == '/')
+          return SOAP_TT;
+        soap_revget1(soap);
+        return SOAP_LT;
+      case '>':
+        return SOAP_GT;
+      case '"':
+        return SOAP_QT;
+      case '\'':
+        return SOAP_AP;
+      case '&':
+        return soap_char(soap) | 0x80000000;
+    }
+    break;
+  }
+  return c;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+soap_wchar
+SOAP_FMAC2
+soap_advance(struct soap *soap)
+{ register soap_wchar c;
+  while ((int)((c = soap_get(soap)) != EOF) && c != SOAP_LT && c != SOAP_TT)
+    ;
+  return c;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+soap_wchar
+SOAP_FMAC2
+soap_skip(struct soap *soap)
+{ register soap_wchar c;
+  do c = soap_get(soap);
+  while (soap_blank(c));
+  return c;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_move(struct soap *soap, long n)
+{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Moving %ld bytes forward\n", (long)n));
+  for (; n > 0; n--)
+    if ((int)soap_getchar(soap) == EOF)
+      return SOAP_EOF;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+size_t
+SOAP_FMAC2
+soap_tell(struct soap *soap)
+{ return soap->count - soap->buflen + soap->bufidx - (soap->ahead != 0);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_pututf8(struct soap *soap, register unsigned long c)
+{ char tmp[16];
+  if (c > 0 && c < 0x80)
+  { *tmp = (char)c;
+    return soap_send_raw(soap, tmp, 1);
+  }
+#ifndef WITH_LEAN
+  if (soap->mode & SOAP_XML_CANONICAL)
+  { register char *t = tmp;
+    if (c < 0x0800)
+      *t++ = (char)(0xC0 | ((c >> 6) & 0x1F));
+    else
+    { if (c < 0x010000)
+        *t++ = (char)(0xE0 | ((c >> 12) & 0x0F));
+      else
+      { if (c < 0x200000)
+          *t++ = (char)(0xF0 | ((c >> 18) & 0x07));
+        else
+        { if (c < 0x04000000)
+            *t++ = (char)(0xF8 | ((c >> 24) & 0x03));
+          else
+          { *t++ = (char)(0xFC | ((c >> 30) & 0x01));
+            *t++ = (char)(0x80 | ((c >> 24) & 0x3F));
+          }
+          *t++ = (char)(0x80 | ((c >> 18) & 0x3F));
+        }     
+        *t++ = (char)(0x80 | ((c >> 12) & 0x3F));
+      }
+      *t++ = (char)(0x80 | ((c >> 6) & 0x3F));
+    }
+    *t++ = (char)(0x80 | (c & 0x3F));
+    *t = '\0';
+  }
+  else
+#endif
+    sprintf(tmp, "&#%lu;", c);
+  return soap_send(soap, tmp);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+soap_wchar
+SOAP_FMAC2
+soap_getutf8(struct soap *soap)
+{ register soap_wchar c, c1, c2, c3, c4;
+  c = soap_get(soap);
+  if (c < 0x80 || (soap->mode & SOAP_ENC_LATIN))
+    return c;
+  c1 = soap_get(soap);
+  if (c1 < 0x80)
+  { soap_unget(soap, c1);
+    return c;
+  }
+  c1 &= 0x3F;
+  if (c < 0xE0)
+    return ((soap_wchar)(c & 0x1F) << 6) | c1;
+  c2 = (soap_wchar)soap_get1(soap) & 0x3F;
+  if (c < 0xF0)
+    return ((soap_wchar)(c & 0x0F) << 12) | (c1 << 6) | c2;
+  c3 = (soap_wchar)soap_get1(soap) & 0x3F;
+  if (c < 0xF8)
+    return ((soap_wchar)(c & 0x07) << 18) | (c1 << 12) | (c2 << 6) | c3;
+  c4 = (soap_wchar)soap_get1(soap) & 0x3F;
+  if (c < 0xFC)
+    return ((soap_wchar)(c & 0x03) << 24) | (c1 << 18) | (c2 << 12) | (c3 << 6) | c4;
+  return ((soap_wchar)(c & 0x01) << 30) | (c1 << 24) | (c2 << 18) | (c3 << 12) | (c4 << 6) | (soap_wchar)(soap_get1(soap) & 0x3F);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_puthex(struct soap *soap, const unsigned char *s, int n)
+{ /* TODO: serialize to DOM (as an option) using new soap_s2hex() */
+  char d[2];
+  register int i;
+  for (i = 0; i < n; i++)
+  { register int m = *s++;
+    d[0] = (char)((m >> 4) + (m > 159 ? '7' : '0'));
+    m &= 0x0F;
+    d[1] = (char)(m + (m > 9 ? '7' : '0'));
+    if (soap_send_raw(soap, d, 2))
+      return soap->error;
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+unsigned char*
+SOAP_FMAC2
+soap_gethex(struct soap *soap, int *n)
+{
+#ifdef WITH_FAST
+  soap->labidx = 0;
+  for (;;)
+  { register char *s;
+    register int i, k;
+    if (soap_append_lab(soap, NULL, 0))
+      return NULL;
+    s = soap->labbuf + soap->labidx;
+    k = soap->lablen - soap->labidx;
+    soap->labidx = soap->lablen;
+    for (i = 0; i < k; i++)
+    { register char d1, d2;
+      register soap_wchar c;
+      c = soap_get(soap);
+      if (soap_isxdigit(c))
+      { d1 = (char)c;
+        c = soap_get(soap); 
+       if (soap_isxdigit(c))
+          d2 = (char)c;
+        else 
+        { soap->error = SOAP_TYPE;
+          return NULL;
+        }
+      }
+      else
+      { unsigned char *p;
+        soap_unget(soap, c);
+        if (n)
+          *n = (int)(soap->lablen - k + i);
+        p = (unsigned char*)soap_malloc(soap, soap->lablen - k + i);
+       if (p)
+         memcpy(p, soap->labbuf, soap->lablen - k + i);
+        return p;
+      }
+      *s++ = ((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0');
+    }
+  }
+#else
+  if (soap_new_block(soap))
+    return NULL;
+  for (;;)
+  { register int i;
+    register char *s = (char*)soap_push_block(soap, SOAP_BLKLEN);
+    if (!s)
+    { soap_end_block(soap);
+      return NULL;
+    }
+    for (i = 0; i < SOAP_BLKLEN; i++)
+    { register char d1, d2;
+      register soap_wchar c = soap_get(soap);
+      if (soap_isxdigit(c))
+      { d1 = (char)c;
+        c = soap_get(soap); 
+       if (soap_isxdigit(c))
+          d2 = (char)c;
+        else 
+        { soap_end_block(soap);
+         soap->error = SOAP_TYPE;
+          return NULL;
+        }
+      }
+      else
+      { unsigned char *p;
+        soap_unget(soap, c);
+        if (n)
+          *n = soap_size_block(soap, i);
+        p = (unsigned char*)soap_save_block(soap, NULL, 0);
+        return p;
+      }
+      *s++ = ((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0');
+    }
+  }
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putbase64(struct soap *soap, const unsigned char *s, int n)
+{ register int i;
+  register unsigned long m;
+  char d[4];
+  if (!s)
+    return SOAP_OK;
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { if (!(soap->dom->data = soap_s2base64(soap, s, soap->dom->data, n)))
+      return soap->error;
+    return SOAP_OK;
+  }
+#endif
+  for (; n > 2; n -= 3, s += 3)
+  { m = s[0];
+    m = (m << 8) | s[1];
+    m = (m << 8) | s[2];
+    for (i = 4; i > 0; m >>= 6)
+      d[--i] = soap_base64o[m & 0x3F];
+    if (soap_send_raw(soap, d, 4))
+      return soap->error;
+  }
+  if (n > 0)
+  { m = 0;
+    for (i = 0; i < n; i++)
+      m = (m << 8) | *s++;
+    for (; i < 3; i++)
+      m <<= 8;
+    for (i++; i > 0; m >>= 6)
+      d[--i] = soap_base64o[m & 0x3F];
+    for (i = 3; i > n; i--)
+      d[i] = '=';
+    if (soap_send_raw(soap, d, 4))
+      return soap->error;
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+unsigned char*
+SOAP_FMAC2
+soap_getbase64(struct soap *soap, int *n, int malloc_flag)
+{ 
+#ifdef WITH_FAST
+  soap->labidx = 0;
+  for (;;)
+  { register int i, k;
+    register char *s;
+    if (soap_append_lab(soap, NULL, 2))
+      return NULL;
+    s = soap->labbuf + soap->labidx;
+    k = 3 * ((soap->lablen - soap->labidx) / 3);
+    soap->labidx = 3 * (soap->lablen / 3);
+    if (!s)
+      return NULL;
+    for (i = 0; i < k; i += 3)
+    { register unsigned long m = 0;
+      register int j = 0;
+      do
+      { register soap_wchar c = soap_get(soap);
+        if (c == '=' || c < 0)
+        { unsigned char *p;
+          switch (j)
+          { case 2:
+              *s++ = (char)((m >> 4) & 0xFF);
+              i++;
+              break;
+            case 3:
+              *s++ = (char)((m >> 10) & 0xFF);
+              *s++ = (char)((m >> 2) & 0xFF);
+              i += 2;
+          }
+          if (n)
+            *n = (int)(soap->lablen - k + i);
+          p = (unsigned char*)soap_malloc(soap, soap->lablen - k + i);
+         if (p)
+           memcpy(p, soap->labbuf, soap->lablen - k + i);
+          if (c >= 0)
+          { while ((int)((c = soap_get(soap)) != EOF) && c != SOAP_LT && c != SOAP_TT)
+              ;
+         }
+          soap_unget(soap, c);
+          return p;
+        }
+        c -= '+';
+        if (c >= 0 && c <= 79)
+        { m = (m << 6) + soap_base64i[c];
+          j++;
+        }
+      } while (j < 4);
+      *s++ = (char)((m >> 16) & 0xFF);
+      *s++ = (char)((m >> 8) & 0xFF);
+      *s++ = (char)(m & 0xFF);
+    }
+  }
+#else
+  if (soap_new_block(soap))
+    return NULL;
+  for (;;)
+  { register int i;
+    register char *s = (char*)soap_push_block(soap, 3 * SOAP_BLKLEN); /* must be multiple of 3 */
+    if (!s)
+    { soap_end_block(soap);
+      return NULL;
+    }
+    for (i = 0; i < SOAP_BLKLEN; i++)
+    { register unsigned long m = 0;
+      register int j = 0;
+      do
+      { register soap_wchar c = soap_get(soap);
+        if (c == '=' || c < 0)
+        { unsigned char *p;
+          i *= 3;
+          switch (j)
+          { case 2:
+              *s++ = (char)((m >> 4) & 0xFF);
+              i++;
+              break;
+            case 3:
+              *s++ = (char)((m >> 10) & 0xFF);
+              *s++ = (char)((m >> 2) & 0xFF);
+              i += 2;
+          }
+          if (n)
+           *n = (int)soap_size_block(soap, i);
+          p = (unsigned char*)soap_save_block(soap, NULL, 0);
+          if (c >= 0)
+          { while ((int)((c = soap_get(soap)) != EOF) && c != SOAP_LT && c != SOAP_TT)
+              ;
+         }
+          soap_unget(soap, c);
+          return p;
+        }
+        c -= '+';
+        if (c >= 0 && c <= 79)
+        { m = (m << 6) + soap_base64i[c];
+          j++;
+        }
+      } while (j < 4);
+      *s++ = (char)((m >> 16) & 0xFF);
+      *s++ = (char)((m >> 8) & 0xFF);
+      *s++ = (char)(m & 0xFF);
+    }
+  }
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_strdup(struct soap *soap, const char *s)
+{ char *t = NULL;
+  if (s && (t = (char*)soap_malloc(soap, strlen(s) + 1)))
+    strcpy(t, s);
+  return t;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_new_block(struct soap *soap)
+{ struct soap_blist *p;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New block sequence (prev=%p)\n", soap->blist));
+  if (!(p = (struct soap_blist*)SOAP_MALLOC(sizeof(struct soap_blist))))
+    return SOAP_EOM;   
+  p->next = soap->blist; 
+  p->ptr = NULL;
+  p->size = 0;
+  soap->blist = p;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void*
+SOAP_FMAC2
+soap_push_block(struct soap *soap, size_t n)
+{ char *p;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push block of %u bytes (%u bytes total)\n", (unsigned int)n, (unsigned int)soap->blist->size + (unsigned int)n));
+  if (!(p = (char*)SOAP_MALLOC(n + sizeof(char*) + sizeof(size_t))))
+  { soap->error = SOAP_EOM;
+    return NULL;
+  }
+  *(char**)p = soap->blist->ptr;
+  *(size_t*)(p + sizeof(char*)) = n;
+  soap->blist->ptr = p;
+  soap->blist->size += n;
+  return p + sizeof(char*) + sizeof(size_t);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_pop_block(struct soap *soap)
+{ char *p;
+  if (!soap->blist->ptr)
+    return;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Pop block\n"));
+  p = soap->blist->ptr;
+  soap->blist->size -= *(size_t*)(p + sizeof(char*));
+  soap->blist->ptr = *(char**)p;
+  SOAP_FREE(p);
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+static void
+soap_update_ptrs(struct soap *soap, char *start, char *end, long offset)
+{ int i;
+  register struct soap_ilist *ip;
+  register struct soap_flist *fp;
+  register void *p, **q;
+  for (i = 0; i < SOAP_IDHASH; i++)
+    for (ip = soap->iht[i]; ip; ip = ip->next)
+    { if (ip->ptr && (char*)ip->ptr >= start && (char*)ip->ptr < end)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Update id='%s' %p -> %p\n", ip->id, ip->ptr, (char*)ip->ptr + offset));
+        ip->ptr = (char*)ip->ptr + offset;
+      }
+      for (q = &ip->link; q; q = (void**)p)
+      { p = *q;
+        if (p && (char*)p >= start && (char*)p < end)
+        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Link update id='%s' %p\n", ip->id, p));
+          *q = (char*)p + offset;
+        }
+      }
+      for (q = &ip->copy; q; q = (void**)p)
+      { p = *q;
+        if (p && (char*)p >= start && (char*)p < end)
+        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy chain update id='%s' %p\n", ip->id, p));
+          *q = (char*)p + offset;
+        }
+      }
+      for (fp = ip->flist; fp; fp = fp->next)
+      { if ((char*)fp->ptr >= start && (char*)fp->ptr < end)
+        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy list update id='%s' %p\n", ip->id, fp));
+          fp->ptr = (char*)fp->ptr + offset;
+        }
+      }
+    }
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+static int
+soap_has_copies(struct soap *soap, register const char *start, register const char *end)
+{ register int i;
+  register struct soap_ilist *ip;
+  register struct soap_flist *fp;
+  register const char *p;
+  for (i = 0; i < SOAP_IDHASH; i++)
+  { for (ip = soap->iht[i]; ip; ip = ip->next)
+    { for (p = (const char*)ip->copy; p; p = *(const char**)p)
+        if (p >= start && p < end)
+          return SOAP_ERR;
+      for (fp = ip->flist; fp; fp = fp->next)
+        if ((const char*)fp->ptr >= start && (const char*)fp->ptr < end)
+         return SOAP_ERR;
+    }
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_resolve(struct soap *soap)
+{ register int i;
+  register struct soap_ilist *ip;
+  register struct soap_flist *fp;
+  short flag;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving forwarded data\n"));
+  for (i = 0; i < SOAP_IDHASH; i++)
+  { for (ip = soap->iht[i]; ip; ip = ip->next)
+    { if (ip->ptr)
+      { register void *p, **q, *r;
+        q = (void**)ip->link;
+        ip->link = NULL;
+        r = ip->ptr;
+        DBGLOG(TEST, if (q) SOAP_MESSAGE(fdebug, "Traversing link chain to resolve id='%s'\n", ip->id));
+        while (q)
+        { p = *q;
+          *q = r;
+          DBGLOG(TEST,SOAP_MESSAGE(fdebug, "... link %p -> %p\n", q, r));
+          q = (void**)p;
+        }
+      }
+      else if (*ip->id == '#')
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Missing data for id='%s'\n", ip->id));
+        strcpy(soap->id, ip->id + 1);
+        return soap->error = SOAP_MISSING_ID;
+      }
+    }
+  }
+  do
+  { flag = 0;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolution phase\n"));
+    for (i = 0; i < SOAP_IDHASH; i++)
+    { for (ip = soap->iht[i]; ip; ip = ip->next)
+      { if (ip->ptr && !soap_has_copies(soap, (const char*)ip->ptr, (const char*)ip->ptr + ip->size))
+        { if (ip->copy)
+          { register void *p, **q = (void**)ip->copy;
+            DBGLOG(TEST, if (q) SOAP_MESSAGE(fdebug, "Traversing copy chain to resolve id='%s'\n", ip->id));
+            ip->copy = NULL;
+            do
+            { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... copy %p -> %p (%u bytes)\n", ip->ptr, q, (unsigned int)ip->size));
+             p = *q;
+              memcpy(q, ip->ptr, ip->size);
+              q = (void**)p;
+            } while (q);
+           flag = 1;
+         }
+          for (fp = ip->flist; fp; fp = ip->flist)
+          { register unsigned int k = fp->level;
+           register void *p = ip->ptr;
+            DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving forwarded data type=%d location=%p level=%u,%u id='%s'\n", ip->type, p, ip->level, fp->level, ip->id));
+           while (ip->level < k)
+            { register void **q = (void**)soap_malloc(soap, sizeof(void*));  
+             if (!q)
+               return soap->error;
+             *q = p;
+              DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Descending one level, new location=%p holds=%p...\n", q, *q));
+              p = (void*)q;
+              k--;
+            }
+           if (fp->fcopy)
+             fp->fcopy(soap, ip->type, fp->type, fp->ptr, p, ip->size);
+           else
+             soap_fcopy(soap, ip->type, fp->type, fp->ptr, p, ip->size);
+           ip->flist = fp->next;
+           SOAP_FREE(fp);
+           flag = 1;
+         }
+        }
+      }
+    }
+  } while (flag);
+#ifdef SOAP_DEBUG
+  for (i = 0; i < SOAP_IDHASH; i++)
+  { for (ip = soap->iht[i]; ip; ip = ip->next)
+    { if (ip->copy || ip->flist)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolution error: forwarded data for id='%s' could not be propagated, please report this problem to the developers\n", ip->id));
+      }
+    }
+  }
+#endif
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolution done\n"));
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+size_t
+SOAP_FMAC2
+soap_size_block(struct soap *soap, size_t n)
+{ if (soap->blist->ptr)
+  { soap->blist->size -= *(size_t*)(soap->blist->ptr + sizeof(char*)) - n;
+    *(size_t*)(soap->blist->ptr + sizeof(char*)) = n;
+  }
+  return soap->blist->size;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+char*
+SOAP_FMAC2
+soap_first_block(struct soap *soap)
+{ char *p, *q, *r;
+  p = soap->blist->ptr;
+  if (!p)
+    return NULL;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "First block\n"));
+  r = NULL;
+  do
+  { q = *(char**)p;
+    *(char**)p = r;
+    r = p;
+    p = q;
+  } while (p);
+  soap->blist->ptr = r;
+  return r + sizeof(char*) + sizeof(size_t);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+char*
+SOAP_FMAC2
+soap_next_block(struct soap *soap)
+{ char *p;
+  p = soap->blist->ptr;
+  if (p)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Next block\n"));
+    soap->blist->ptr = *(char**)p;
+    SOAP_FREE(p);
+    if (soap->blist->ptr)
+      return soap->blist->ptr + sizeof(char*) + sizeof(size_t);
+  }
+  return NULL;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+size_t
+SOAP_FMAC2
+soap_block_size(struct soap *soap)
+{ return *(size_t*)(soap->blist->ptr + sizeof(char*));
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_end_block(struct soap *soap)
+{ struct soap_blist *bp;
+  char *p, *q;
+  bp = soap->blist;
+  if (bp)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of block sequence, free all remaining blocks\n"));
+    for (p = bp->ptr; p; p = q)
+    { q = *(char**)p;
+      SOAP_FREE(p);
+    }
+    soap->blist = bp->next;
+    SOAP_FREE(bp);
+  }
+  DBGLOG(TEST, if (soap->blist) SOAP_MESSAGE(fdebug, "Restore previous block sequence\n"));
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+char*
+SOAP_FMAC2
+soap_save_block(struct soap *soap, char *p, int flag)
+{ register size_t n;
+  register char *q, *s;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Save all blocks in contiguous memory space of %u bytes (%p->%p)\n", (unsigned int)soap->blist->size, soap->blist->ptr, p));
+  if (soap->blist->size)
+  { if (!p)
+      p = (char*)soap_malloc(soap, soap->blist->size);
+    if (p)
+    { for (s = p, q = soap_first_block(soap); q; q = soap_next_block(soap))
+      { n = soap_block_size(soap);
+#ifndef WITH_NOIDREF
+        if (flag)
+         soap_update_ptrs(soap, q, q + n, (long)s - (long)q); /* pointers s and q may or may not be related */
+#endif
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy %u bytes from %p to %p\n", (unsigned int)n, q, s));
+        memcpy(s, q, n);
+        s += n;
+      }
+    }
+    else
+      soap->error = SOAP_EOM;
+  }
+  soap_end_block(soap);
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_putsize(struct soap *soap, const char *type, int size)
+{ return soap_putsizes(soap, type, &size, 1);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_putsizes(struct soap *soap, const char *type, const int *size, int dim)
+{ return soap_putsizesoffsets(soap, type, size, NULL, dim);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_putsizesoffsets(struct soap *soap, const char *type, const int *size, const int *offset, int dim)
+{ int i;
+  if (!type)
+    return NULL;
+  if (soap->version == 2)
+  { sprintf(soap->type, "%s[%d", type, size[0]);
+    for (i = 1; i < dim; i++)
+      sprintf(soap->type + strlen(soap->type), " %d", size[i]);
+  }
+  else
+  { if (offset)
+    { sprintf(soap->type, "%s[%d", type, size[0] + offset[0]);
+      for (i = 1; i < dim; i++)
+        sprintf(soap->type + strlen(soap->type), ",%d", size[i] + offset[i]);
+    }
+    else
+    { sprintf(soap->type, "%s[%d", type, size[0]);
+      for (i = 1; i < dim; i++)
+        sprintf(soap->type + strlen(soap->type), ",%d", size[i]);
+    }
+    strcat(soap->type, "]");
+  }
+  return soap->type;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_putoffset(struct soap *soap, int offset)
+{ return soap_putoffsets(soap, &offset, 1);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_putoffsets(struct soap *soap, const int *offset, int dim)
+{ register int i;
+  sprintf(soap->arrayOffset, "[%d", offset[0]);
+  for (i = 1; i < dim; i++)
+    sprintf(soap->arrayOffset + strlen(soap->arrayOffset), ",%d", offset[i]);
+  strcat(soap->arrayOffset, "]");
+  return soap->arrayOffset;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_size(const int *size, int dim)
+{ register int i, n = size[0];
+  for (i = 1; i < dim; i++)
+    n *= size[i];
+  return n;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getoffsets(const char *attr, const int *size, int *offset, int dim)
+{ register int i, j = 0;
+  if (offset)
+    for (i = 0; i < dim && attr && *attr; i++)
+    { attr++;
+      j *= size[i];
+      j += offset[i] = (int)atol(attr);
+      attr = strchr(attr, ',');
+    }
+  else
+    for (i = 0; i < dim && attr && *attr; i++)
+    { attr++;
+      j *= size[i];
+      j += (int)atol(attr);
+      attr = strchr(attr, ',');
+    }
+  return j;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getsize(const char *attr1, const char *attr2, int *j)
+{ register int n, k;
+  char *s;
+  *j = 0;
+  if (!*attr1)
+    return -1;
+  n = 1;
+  do
+  { attr1++;
+    k = (int)soap_strtol(attr1, &s, 10);
+    n *= k;
+    if (k < 0 || n > SOAP_MAXARRAYSIZE || s == attr1)
+      return -1;
+    attr1 = strchr(s, ',');
+    if (!attr1)
+      attr1 = strchr(s, ' ');
+    if (attr2 && *attr2)
+    { attr2++;
+      *j *= k;
+      k = (int)soap_strtol(attr2, &s, 10);
+      *j += k;
+      if (k < 0)
+        return -1;
+      attr2 = s;
+    }
+  } while (attr1 && *attr1 != ']');
+  return n - *j;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getsizes(const char *attr, int *size, int dim)
+{ register int i, k, n;
+  if (!*attr)
+    return -1;
+  i = strlen(attr);
+  n = 1;
+  do
+  { for (i = i-1; i >= 0; i--)
+      if (attr[i] == '[' || attr[i] == ',' || attr[i] == ' ')
+        break;
+    k = (int)atol(attr + i + 1);
+    n *= size[--dim] = k;
+    if (k < 0 || n > SOAP_MAXARRAYSIZE)
+      return -1;
+  } while (i >= 0 && attr[i] != '[');
+  return n;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getposition(const char *attr, int *pos)
+{ register int i, n;
+  if (!*attr)
+    return -1;
+  n = 0;
+  i = 1;
+  do
+  { pos[n++] = (int)atol(attr + i);
+    while (attr[i] && attr[i] != ',' && attr[i] != ']')
+      i++;
+    if (attr[i] == ',')
+      i++;
+  } while (n < SOAP_MAXDIMS && attr[i] && attr[i] != ']');
+  return n;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_push_namespace(struct soap *soap, const char *id, const char *ns)
+{ register struct soap_nlist *np;
+  register struct Namespace *p;
+  np = (struct soap_nlist*)SOAP_MALLOC(sizeof(struct soap_nlist) + strlen(id));
+  if (!np)
+    return soap->error = SOAP_EOM;
+  np->next = soap->nlist;
+  soap->nlist = np;
+  strcpy(np->id, id);
+  np->level = soap->level;
+  np->index = -1;
+  np->ns = NULL;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push namespace binding (level=%u) '%s' '%s'\n", soap->level, id, ns));
+  p = soap->local_namespaces;
+  if (p)
+  { register short i = 0;
+    for (; p->id; p++, i++)
+    { if (p->ns && !strcmp(ns, p->ns))
+      { if (p->out)
+        { SOAP_FREE(p->out);
+          p->out = NULL;
+        }
+        break;
+      }
+      if (p->out)
+      { if (!SOAP_STRCMP(ns, p->out))
+          break;
+      }
+      else if (p->in)
+      { if (!soap_tag_cmp(ns, p->in))
+        { if ((p->out = (char*)SOAP_MALLOC(strlen(ns) + 1)))
+            strcpy(p->out, ns);
+          break;
+        }
+      }
+    }
+    if (p && p->id)
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push OK ('%s' matches '%s' in namespace table)\n", id, p->id));
+      np->index = i;
+    }
+  }
+  if (!p || !p->id)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push NOT OK: no match found for '%s' in namespace mapping table (added to stack anyway)\n", ns));
+    np->ns = (char*)SOAP_MALLOC(strlen(ns) + 1);
+    if (!np->ns)
+      return soap->error = SOAP_EOM;
+    strcpy(np->ns, ns);
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_pop_namespace(struct soap *soap)
+{ register struct soap_nlist *np;
+  while (soap->nlist && soap->nlist->level >= soap->level)
+  { np = soap->nlist->next;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Popped namespace binding (level=%u) '%s'\n", soap->level, soap->nlist->id));
+    if (soap->nlist->ns)
+      SOAP_FREE(soap->nlist->ns);
+    SOAP_FREE(soap->nlist);
+    soap->nlist = np;
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_match_namespace(struct soap *soap, const char *id1, const char *id2, int n1, int n2) 
+{ register struct soap_nlist *np = soap->nlist;
+  while (np && (strncmp(np->id, id1, n1) || np->id[n1]))
+    np = np->next;
+  if (np)
+  { if (np->index < 0 || (np->index >= 0 && soap->local_namespaces[np->index].id && (strncmp(soap->local_namespaces[np->index].id, id2, n2) || soap->local_namespaces[np->index].id[n2])))
+      return SOAP_NAMESPACE;
+    return SOAP_OK;
+  }
+  if (n1 == 3 && n1 == n2 && !strcmp(id1, "xml") && !strcmp(id1, id2))
+    return SOAP_OK;
+  return SOAP_SYNTAX_ERROR; 
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_tag_cmp(const char *s, const char *t)
+{ for (;;)
+  { register int c1 = *s;
+    register int c2 = *t;
+    if (!c1 || c1 == '"')
+      break;
+    if (c2 != '-')
+    { if (c1 != c2)
+      { if (c1 >= 'A' && c1 <= 'Z')
+          c1 += 'a' - 'A';
+        if (c2 >= 'A' && c2 <= 'Z')
+          c2 += 'a' - 'A';
+      }
+      if (c1 != c2)
+      { if (c2 != '*')
+          return 1;
+       c2 = *++t;
+        if (!c2)
+         return 0;
+        if (c2 >= 'A' && c2 <= 'Z')
+          c2 += 'a' - 'A';
+        for (;;)
+        { c1 = *s;
+         if (!c1 || c1 == '"')
+           break;
+         if (c1 >= 'A' && c1 <= 'Z')
+            c1 += 'a' - 'A';
+          if (c1 == c2)
+            if (!soap_tag_cmp(s + 1, t + 1))
+              return 0;
+         s++;
+        }
+        break;
+      }
+    }
+    s++;
+    t++;
+  }
+  if (*t == '*' && !t[1])
+    return 0;
+  return *t;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_match_tag(struct soap *soap, const char *tag1, const char *tag2)
+{ register const char *s, *t;
+  if (!tag1 || !tag2 || !*tag2)
+    return SOAP_OK;
+  s = strchr(tag1, ':');
+  t = strchr(tag2, ':');
+  if (t)
+  { if (s)
+    { if (t[1] && SOAP_STRCMP(s + 1, t + 1))
+        return SOAP_TAG_MISMATCH;
+      if (t != tag2 && soap_match_namespace(soap, tag1, tag2, s - tag1, t - tag2))
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags '%s' and '%s' match but namespaces differ\n", tag1, tag2));
+        return SOAP_TAG_MISMATCH;
+      }
+    } 
+    else if (SOAP_STRCMP(tag1, t + 1))
+      return SOAP_TAG_MISMATCH;
+    else if (t != tag2 && soap_match_namespace(soap, tag1, tag2, 0, t - tag2))
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags '%s' and '%s' match but namespaces differ\n", tag1, tag2));
+      return SOAP_TAG_MISMATCH;
+    }
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags and (default) namespaces match: '%s' '%s'\n", tag1, tag2));
+    return SOAP_OK;
+  }
+  if (s)
+  { if (SOAP_STRCMP(s + 1, tag2))
+      return SOAP_TAG_MISMATCH;
+  }
+  else if (SOAP_STRCMP(tag1, tag2))
+    return SOAP_TAG_MISMATCH;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags match: '%s' '%s'\n", tag1, tag2));
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_match_array(struct soap *soap, const char *type)
+{ if (*soap->arrayType)
+    if (soap_match_tag(soap, soap->arrayType, type)
+     && soap_match_tag(soap, soap->arrayType, "xsd:anyType")
+     && soap_match_tag(soap, soap->arrayType, "xsd:ur-type")
+    )
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array type mismatch: '%s' '%s'\n", soap->arrayType, type));
+      return SOAP_TAG_MISMATCH;
+    }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+
+#ifdef WITH_OPENSSL
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_ssl_server_context(struct soap *soap, unsigned short flags, const char *keyfile, const char *password, const char *cafile, const char *capath, const char *dhfile, const char *randfile, const char *sid)
+{ int err;
+  soap->keyfile = keyfile;
+  soap->password = password;
+  soap->cafile = cafile;
+  soap->capath = capath;
+  if (dhfile)
+  { soap->dhfile = dhfile;
+    soap->rsa = 0;
+  }
+  else
+  { soap->dhfile = NULL;
+    soap->rsa = 1;
+  }
+  soap->randfile = randfile;
+  soap->require_client_auth = (flags & SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION);
+  if (!(err = soap->fsslauth(soap)))
+    if (sid)
+      SSL_CTX_set_session_id_context(soap->ctx, (unsigned char*)sid, strlen(sid));
+  return err; 
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_ssl_client_context(struct soap *soap, unsigned short flags, const char *keyfile, const char *password, const char *cafile, const char *capath, const char *randfile)
+{ soap->keyfile = keyfile;
+  soap->password = password;
+  soap->cafile = cafile;
+  soap->capath = capath;
+  soap->dhfile = NULL;
+  soap->rsa = 0;
+  soap->randfile = randfile;
+  soap->require_server_auth = (flags & SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION);
+  return soap->fsslauth(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+static void
+ssl_init()
+{ static int done = 0;
+  if (!done)
+  { done = 1;
+    SSL_library_init();
+#ifndef WITH_LEAN
+    SSL_load_error_strings();
+#endif
+    if (!RAND_load_file("/dev/urandom", 1024))
+    { int r;
+#ifdef HAVE_RAND_R
+      unsigned int s = (unsigned int)time(NULL);
+#endif
+      char buf[SOAP_BUFLEN];
+      RAND_seed(buf, sizeof(buf));
+      while (!RAND_status())
+      {
+#ifdef HAVE_RAND_R
+        r = rand_r(&s);
+#else
+        r = rand();
+#endif
+        RAND_seed(&r, sizeof(int));
+      }
+    }
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static const char *
+ssl_error(struct soap *soap, int ret)
+{ int err = SSL_get_error(soap->ssl, ret);
+  const char *msg = soap_str_code(h_ssl_error_codes, err);
+  if (msg)
+    strcpy(soap->msgbuf, msg);
+  else
+    return ERR_error_string(err, soap->msgbuf);
+  if (ERR_peek_error())
+  { unsigned long r;
+    strcat(soap->msgbuf, "\n");
+    while ((r = ERR_get_error()))
+      ERR_error_string_n(r, soap->msgbuf + strlen(soap->msgbuf), sizeof(soap->msgbuf) - strlen(soap->msgbuf));
+  } 
+  else
+  { switch (ret)
+    { case 0:
+        strcpy(soap->msgbuf, "EOF was observed that violates the protocol. The client probably provided invalid authentication information.");
+        break;
+      case -1:
+        sprintf(soap->msgbuf, "Error observed by underlying BIO: %s", strerror(errno));  
+        break;
+    }
+  }
+  return soap->msgbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static int
+ssl_password(char *buf, int num, int rwflag, void *userdata)
+{ if (num < (int)strlen((char*)userdata) + 1)
+    return 0;
+  return strlen(strcpy(buf, (char*)userdata));
+}
+#endif
+
+/******************************************************************************/
+/* This callback is included for future references. It should not be deleted
+#ifndef PALM_2
+static DH *
+ssl_tmp_dh(SSL *ssl, int is_export, int keylength)
+{ static DH *dh512 = NULL;
+  static DH *dh1024 = NULL;
+  DH *dh;
+  switch (keylength)
+  { case 512:
+      if (!dh512)
+      { BIO *bio = BIO_new_file("dh512.pem", "r");
+        if (bio)
+        { dh512 = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);
+          BIO_free(bio);
+          return dh512;
+        }
+      }
+      else
+        return dh512;
+    default:
+      if (!dh1024)
+      { BIO *bio = BIO_new_file("dh1024.pem", "r");
+        if (bio)
+        { dh1024 = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);
+          BIO_free(bio);
+        }
+      }
+      dh = dh1024;
+  }
+  return dh;
+}
+#endif
+*/
+/******************************************************************************/
+#ifndef PALM_1
+static int
+ssl_auth_init(struct soap *soap)
+{ ssl_init();
+  if (!soap->ctx)
+    if (!(soap->ctx = SSL_CTX_new(SSLv23_method())))
+      return soap_set_receiver_error(soap, "SSL error", "Can't setup context", SOAP_SSL_ERROR);
+  if (soap->randfile)
+  { if (!RAND_load_file(soap->randfile, -1))
+      return soap_set_receiver_error(soap, "SSL error", "Can't load randomness", SOAP_SSL_ERROR);
+  }
+  if (soap->cafile || soap->capath)
+    if (!SSL_CTX_load_verify_locations(soap->ctx, soap->cafile, soap->capath))
+      return soap_set_receiver_error(soap, "SSL error", "Can't read CA file and/or directory", SOAP_SSL_ERROR);
+  if (!SSL_CTX_set_default_verify_paths(soap->ctx))
+    return soap_set_receiver_error(soap, "SSL error", "Can't read default CA file and/or directory", SOAP_SSL_ERROR);
+  if (soap->keyfile)
+  { if (!SSL_CTX_use_certificate_chain_file(soap->ctx, soap->keyfile))
+      return soap_set_receiver_error(soap, "SSL error", "Can't read certificate key file", SOAP_SSL_ERROR);
+    if (soap->password)
+    { SSL_CTX_set_default_passwd_cb_userdata(soap->ctx, (void*)soap->password);
+      SSL_CTX_set_default_passwd_cb(soap->ctx, ssl_password);
+      if (!SSL_CTX_use_PrivateKey_file(soap->ctx, soap->keyfile, SSL_FILETYPE_PEM))
+        return soap_set_receiver_error(soap, "SSL error", "Can't read key file", SOAP_SSL_ERROR);
+    }
+  }
+  if (soap->rsa)
+  { RSA *rsa = RSA_generate_key(512, RSA_F4, NULL, NULL);
+    if (!SSL_CTX_set_tmp_rsa(soap->ctx, rsa))
+    { if (rsa)
+        RSA_free(rsa);
+      return soap_set_receiver_error(soap, "SSL error", "Can't set RSA key", SOAP_SSL_ERROR);
+    }
+    RSA_free(rsa);
+  }
+  else if (soap->dhfile)
+  { DH *dh = 0;
+    BIO *bio;
+    bio = BIO_new_file(soap->dhfile, "r");
+    if (!bio)
+      return soap_set_receiver_error(soap, "SSL error", "Can't read DH file", SOAP_SSL_ERROR);
+    dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);
+    BIO_free(bio);
+    if (SSL_CTX_set_tmp_dh(soap->ctx, dh) < 0)
+    { if (dh)
+        DH_free(dh);
+      return soap_set_receiver_error(soap, "SSL error", "Can't set DH parameters", SOAP_SSL_ERROR);
+    }
+    DH_free(dh);
+  }
+  SSL_CTX_set_options(soap->ctx, SSL_OP_ALL | SSL_OP_NO_SSLv2);
+  SSL_CTX_set_verify(soap->ctx, soap->require_client_auth ? (SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT) : soap->require_server_auth ? SSL_VERIFY_PEER : SSL_VERIFY_NONE, soap->fsslverify);
+#if (OPENSSL_VERSION_NUMBER < 0x00905100L)
+  SSL_CTX_set_verify_depth(soap->ctx, 1); 
+#else
+  SSL_CTX_set_verify_depth(soap->ctx, 9); 
+#endif  
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static int
+ssl_verify_callback(int ok, X509_STORE_CTX *store)
+{
+#ifdef SOAP_DEBUG
+  if (!ok) 
+  { char data[256];
+    X509 *cert = X509_STORE_CTX_get_current_cert(store);
+    fprintf(stderr, "SSL Verify error with certificate at depth %d: %s\n", X509_STORE_CTX_get_error_depth(store), X509_verify_cert_error_string(X509_STORE_CTX_get_error(store)));
+    X509_NAME_oneline(X509_get_issuer_name(cert), data, sizeof(data));
+    fprintf(stderr, "certificate issuer %s\n", data);
+    X509_NAME_oneline(X509_get_subject_name(cert), data, sizeof(data));
+    fprintf(stderr, "certificate subject %s\n", data);
+  }
+#endif
+  /* return 1 to always continue, but unsafe progress will be terminated by SSL */
+  return ok;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_ssl_accept(struct soap *soap)
+{ int i, r;
+  if (!soap_valid_socket(soap->socket))
+    return soap_set_receiver_error(soap, "SSL error", "No socket in soap_ssl_accept()", SOAP_SSL_ERROR);
+  if (!soap->ssl)
+  { soap->ssl = SSL_new(soap->ctx);
+    if (!soap->ssl)
+      return soap_set_receiver_error(soap, "SSL error", "SSL_new() failed in soap_ssl_accept()", SOAP_SSL_ERROR);
+  }
+  else
+    SSL_clear(soap->ssl);
+  soap->imode |= SOAP_ENC_SSL;
+  soap->omode |= SOAP_ENC_SSL;
+#ifdef WIN32
+  { u_long nonblocking = 1;
+    ioctlsocket((SOAP_SOCKET)soap->socket, FIONBIO, &nonblocking);
+  }
+#else
+  fcntl((SOAP_SOCKET)soap->socket, F_SETFL, fcntl((SOAP_SOCKET)soap->socket, F_GETFL)|O_NONBLOCK);
+#endif
+  soap->bio = BIO_new_socket((SOAP_SOCKET)soap->socket, BIO_NOCLOSE);
+  SSL_set_bio(soap->ssl, soap->bio, soap->bio);
+  i = 100; /* 100 * 0.1 ms retries */
+  while ((r = SSL_accept(soap->ssl)) <= 0)
+  { int err = SSL_get_error(soap->ssl, r);
+    if (err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE)
+    { struct timeval timeout;
+      fd_set fd;
+      if (i-- <= 0)
+        break;
+      timeout.tv_sec = 0;
+      timeout.tv_usec = 100000;
+      FD_ZERO(&fd);
+      FD_SET((SOAP_SOCKET)soap->socket, &fd);
+      r = select((SOAP_SOCKET)(soap->socket + 1), &fd, NULL, &fd, &timeout);
+      if (r < 0 && soap_socket_errno != SOAP_EINTR)
+      { soap->errnum = soap_socket_errno;
+        return SOAP_EOF;
+      }
+    }
+    else
+    { soap->errnum = err;
+      break;
+    }
+  }
+#ifdef WIN32
+  { u_long blocking = 0;
+    ioctlsocket((SOAP_SOCKET)soap->socket, FIONBIO, &blocking);
+  }
+#else
+  fcntl((SOAP_SOCKET)soap->socket, F_SETFL, fcntl((SOAP_SOCKET)soap->socket, F_GETFL)&~O_NONBLOCK);
+#endif
+  if (r <= 0)
+  { soap_set_receiver_error(soap, ssl_error(soap, r), "SSL_accept() failed in soap_ssl_accept()", SOAP_SSL_ERROR);
+    soap_closesock(soap);
+    return SOAP_SSL_ERROR;
+  }
+  if (soap->require_client_auth)
+  { X509 *peer;
+    int err;
+    if ((err = SSL_get_verify_result(soap->ssl)) != X509_V_OK)
+    { soap_closesock(soap);
+      return soap_set_sender_error(soap, X509_verify_cert_error_string(err), "SSL certificate presented by peer cannot be verified in soap_ssl_accept()", SOAP_SSL_ERROR);
+    }
+    peer = SSL_get_peer_certificate(soap->ssl);
+    if (!peer)
+    { soap_closesock(soap);
+      return soap_set_sender_error(soap, "SSL error", "No SSL certificate was presented by the peer in soap_ssl_accept()", SOAP_SSL_ERROR);
+    }
+    X509_free(peer);
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#endif /* WITH_OPENSSL */
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_init(struct soap *soap)
+{ soap->errmode = 1;
+#ifdef WIN32
+  if (tcp_done)
+    return 0;
+  else
+  { WSADATA w;
+    if (WSAStartup(MAKEWORD(1, 1), &w))
+      return -1;
+    tcp_done = 1;
+  }
+#endif
+  return 0;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_done(struct soap *soap)
+{ 
+#ifdef SOAP_DEBUG
+  int i;
+#endif
+  soap_free(soap);
+  while (soap->clist)
+  { struct soap_clist *p = soap->clist->next;
+    SOAP_FREE(soap->clist);
+    soap->clist = p;
+  }
+  soap->keep_alive = 0; /* to force close the socket */
+  soap_closesock(soap);
+#ifdef WITH_COOKIES
+  soap_free_cookies(soap);
+#endif
+  while (soap->plugins)
+  { register struct soap_plugin *p = soap->plugins->next;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Removing plugin '%s'\n", soap->plugins->id));
+    if (soap->plugins->fcopy || !soap->copy)
+      soap->plugins->fdelete(soap, soap->plugins);
+    SOAP_FREE(soap->plugins);
+    soap->plugins = p;
+  }
+  soap->fplugin = fplugin;
+#ifndef WITH_NOHTTP
+  soap->fpost = http_post;
+  soap->fget = http_get;
+  soap->fposthdr = http_post_header;
+  soap->fresponse = http_response;
+  soap->fparse = http_parse;
+  soap->fparsehdr = http_parse_header;
+#endif
+#ifndef WITH_NOIO
+#ifndef WITH_IPV6
+  soap->fresolve = tcp_gethost;
+#else
+  soap->fresolve = NULL;
+#endif
+  soap->faccept = tcp_accept;
+  soap->fopen = tcp_connect;
+  soap->fclose = tcp_disconnect;
+  soap->fclosesocket = tcp_closesocket;
+  soap->fshutdownsocket = tcp_shutdownsocket;
+  soap->fsend = fsend;
+  soap->frecv = frecv;
+  soap->fpoll = soap_poll;
+#else
+  soap->fopen = NULL;
+  soap->fclose = NULL;
+  soap->fpoll = NULL;
+#endif
+#ifndef WITH_LEANER
+  soap->fprepareinit = NULL;
+  soap->fpreparesend = NULL;
+  soap->fpreparerecv = NULL;
+#endif
+  soap->fignore = NULL;
+  soap->fserveloop = NULL;
+#ifdef WITH_OPENSSL
+  if (soap->session)
+  { SSL_SESSION_free(soap->session);
+    soap->session = NULL;
+  }
+#endif
+  if (!soap->copy)
+  { if (soap_valid_socket(soap->master))
+    { soap->fclosesocket(soap, (SOAP_SOCKET)soap->master);
+      soap->master = SOAP_INVALID_SOCKET;
+    }
+#ifdef WITH_OPENSSL
+    if (soap->ctx)
+    { SSL_CTX_free(soap->ctx);
+      soap->ctx = NULL;
+    }
+#endif
+  }
+#ifdef SOAP_DEBUG
+  for (i = 0; i < SOAP_MAXLOGS; i++)
+  { soap_close_logfile(soap, i);
+    if (soap->logfile[i])
+    { SOAP_FREE((void*)soap->logfile[i]);
+      soap->logfile[i] = NULL;
+    }
+  }
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_cleanup(struct soap *soap)
+{ soap_done(soap);
+#ifdef WIN32
+  if (!tcp_done)
+    return;
+  tcp_done = 0;
+  WSACleanup();
+#endif
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static const char*
+tcp_error(struct soap *soap)
+{ register const char *msg = NULL;
+  switch (soap->errmode)
+  { case 0:
+      msg = soap_strerror(soap);
+      break;
+    case 1:
+      msg = "WSAStartup failed";
+      break;
+    case 2:
+    {
+#ifndef WITH_LEAN
+      msg = soap_str_code(h_error_codes, soap->errnum);
+      if (!msg)
+#endif
+      { sprintf(soap->msgbuf, "TCP error %d", soap->errnum);
+        msg = soap->msgbuf;
+      }
+    }
+  }
+  return msg;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static const char*
+http_error(struct soap *soap, int status)
+{ register const char *msg = SOAP_STR_EOS;
+#ifndef WITH_LEAN
+  msg = soap_str_code(h_http_error_codes, status);
+  if (!msg)
+    msg = SOAP_STR_EOS;
+#endif
+  return msg;
+}
+#endif
+#endif
+
+/******************************************************************************/
+/* WR[ */
+#ifndef WITH_IPV6
+/* ]WR */
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_gethost(struct soap *soap, const char *addr, struct in_addr *inaddr)
+{ unsigned long iadd;
+  struct hostent hostent, *host = &hostent;
+/* WR[ */
+#ifdef VXWORKS
+  int hostint;
+  char *addrcopy = (char*)malloc(strlen(addr) + 1); /*copy of addr. */
+  /* inet_addr(), and hostGetByName() expect "char *"; addr is a "const char *". */
+  strncpy(addrcopy, addr, strlen(addr)+1);
+  iadd = inet_addr(addrcopy);
+#else
+/* ]WR */
+#if defined(_AIXVERSION_431) || defined(TRU64)
+  struct hostent_data ht_data;
+#endif
+  iadd = inet_addr(addr);
+/* WR[ */
+#endif
+/* ]WR */
+  if ((int)iadd != -1)
+  { memcpy(inaddr, &iadd, sizeof(iadd));
+/* WR[ */
+#ifdef VXWORKS
+    free(addrcopy);
+#endif
+/* ]WR */
+    return SOAP_OK;
+  }
+#if defined(__GLIBC__)
+  if (gethostbyname_r(addr, &hostent, soap->buf, SOAP_BUFLEN, &host, &soap->errnum) < 0)
+    host = NULL;
+#elif defined(_AIXVERSION_431) || defined(TRU64)
+  memset((void*)&ht_data, 0, sizeof(ht_data));
+  if (gethostbyname_r(addr, &hostent, &ht_data) < 0)
+  { host = NULL;
+    soap->errnum = h_errno;
+  }
+#elif defined(HAVE_GETHOSTBYNAME_R)
+  host = gethostbyname_r(addr, &hostent, soap->buf, SOAP_BUFLEN, &soap->errnum);
+/* WR[ */
+#elif defined(VXWORKS)
+  /* If the DNS resolver library resolvLib has been configured in the vxWorks
+   * image, a query for the host IP address is sent to the DNS server, if the
+   * name was not found in the local host table. */
+  hostint = hostGetByName(addrcopy);
+  if (hostint == ERROR)
+  { host = NULL;
+    soap->errnum = soap_errno; 
+  }
+  free(addrcopy);  /*free() is placed after the error checking to assure that
+                   * errno captured is that from hostGetByName() */
+/* ]WR */
+#else
+  if (!(host = gethostbyname(addr)))
+    soap->errnum = h_errno;
+#endif
+  if (!host)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Host name not found\n"));
+    return SOAP_ERR;
+  }
+/* WR[ */
+#ifdef VXWORKS
+  inaddr->s_addr = hostint;
+#else
+/* ]WR */
+  memcpy(inaddr, host->h_addr, host->h_length);
+/* WR[ */
+#endif
+/* ]WR */
+  return SOAP_OK;
+}
+#endif
+#endif
+/* WR[ */
+#endif /* WITH_IPV6 */
+/* ]WR */
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_connect(struct soap *soap, const char *endpoint, const char *host, int port)
+{ struct sockaddr_in sockaddr;
+/* WR[ */
+#ifdef WITH_IPV6
+  struct addrinfo *addrinfo;
+  struct addrinfo hints;
+  struct addrinfo resaddr;
+  struct sockaddr_storage addrstorage;
+  int err;
+#endif /* WITH_IPV6 */
+/* ]WR */
+  register int fd;
+#ifndef WITH_LEAN
+  int len = SOAP_BUFLEN;
+  int set = 1;
+#endif
+  if (soap_valid_socket(soap->socket))
+    soap->fclosesocket(soap, (SOAP_SOCKET)soap->socket);
+  soap->socket = SOAP_INVALID_SOCKET;
+  if (tcp_init(soap))
+  { soap_set_sender_error(soap, tcp_error(soap), "TCP initialization failed in tcp_connect()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+  soap->errmode = 0;
+/* WR[ */
+#ifdef WITH_IPV6
+  memset((void*)&hints, 0, sizeof(hints));
+  hints.ai_family = PF_UNSPEC;
+  hints.ai_socktype = SOCK_STREAM;
+  soap->errmode = 2;
+  if (soap->proxy_host)
+    err = getaddrinfo(soap->proxy_host, soap_int2s(soap, soap->proxy_port), &hints, &addrinfo);
+  else
+    err = getaddrinfo(host, soap_int2s(soap, port), &hints, &addrinfo);
+  if (addrinfo)
+  { resaddr = *addrinfo;
+    addrstorage = *((struct sockaddr_storage*)addrinfo->ai_addr);
+    resaddr.ai_addr = (struct sockaddr*)&addrstorage;
+    freeaddrinfo(addrinfo);
+  }
+  if (err)
+  { soap_set_sender_error(soap, gai_strerror(err), "TCP getaddrinfo on proxy host failed in tcp_connect()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+  fd = (int)socket(resaddr.ai_family, resaddr.ai_socktype, resaddr.ai_protocol); /* modified to use fd */
+  soap->errmode = 0;
+#else /* WITH_IPV6 */
+/* ]WR */
+  fd = (int)socket(AF_INET, SOCK_STREAM, 0);
+/* WR[ */
+#endif /* WITH_IPV6 */
+/* ]WR */
+  if (fd < 0)
+  { soap->errnum = soap_socket_errno;
+    soap_set_sender_error(soap, tcp_error(soap), "TCP socket failed in tcp_connect()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+#ifdef SOCKET_CLOSE_ON_EXEC
+#ifdef WIN32
+#ifndef UNDER_CE
+  SetHandleInformation((HANDLE)fd, HANDLE_FLAG_INHERIT, 0);
+#endif
+#else
+  fcntl (fd, F_SETFD, 1);
+#endif
+#endif
+#ifndef WITH_LEAN
+  if (soap->connect_flags & SO_LINGER)
+  { struct linger linger;
+    memset((void*)&linger, 0, sizeof(linger));
+    linger.l_onoff = 1;
+    linger.l_linger = 0;
+    if (setsockopt((SOAP_SOCKET)fd, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(struct linger)))
+    { soap->errnum = soap_socket_errno;
+      soap_set_sender_error(soap, tcp_error(soap), "TCP setsockopt SO_LINGER failed in tcp_connect()", SOAP_TCP_ERROR);
+      soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+      return SOAP_INVALID_SOCKET;
+    }
+  }
+  if ((soap->connect_flags & ~SO_LINGER) && setsockopt((SOAP_SOCKET)fd, SOL_SOCKET, soap->connect_flags & ~SO_LINGER, (char*)&set, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_sender_error(soap, tcp_error(soap), "TCP setsockopt failed in tcp_connect()", SOAP_TCP_ERROR);
+    soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+    return SOAP_INVALID_SOCKET;
+  }
+  if (soap->keep_alive && setsockopt((SOAP_SOCKET)fd, SOL_SOCKET, SO_KEEPALIVE, (char*)&set, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_sender_error(soap, tcp_error(soap), "TCP setsockopt SO_KEEPALIVE failed in tcp_connect()", SOAP_TCP_ERROR);
+    soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+    return SOAP_INVALID_SOCKET;
+  }
+  if (setsockopt((SOAP_SOCKET)fd, SOL_SOCKET, SO_SNDBUF, (char*)&len, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_sender_error(soap, tcp_error(soap), "TCP setsockopt SO_SNDBUF failed in tcp_connect()", SOAP_TCP_ERROR);
+    soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+    return SOAP_INVALID_SOCKET;
+  }
+  if (setsockopt((SOAP_SOCKET)fd, SOL_SOCKET, SO_RCVBUF, (char*)&len, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_sender_error(soap, tcp_error(soap), "TCP setsockopt SO_RCVBUF failed in tcp_connect()", SOAP_TCP_ERROR);
+    soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+    return SOAP_INVALID_SOCKET;
+  }
+#ifdef TCP_NODELAY
+  if (setsockopt((SOAP_SOCKET)fd, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_sender_error(soap, tcp_error(soap), "TCP setsockopt TCP_NODELAY failed in tcp_connect()", SOAP_TCP_ERROR);
+    soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+    return SOAP_INVALID_SOCKET;
+  }
+#endif
+#endif
+/* WR[ */
+#ifndef WITH_IPV6
+/* ]WR */
+  memset((void*)&sockaddr, 0, sizeof(sockaddr));
+  sockaddr.sin_family = AF_INET;
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Open socket %d to host='%s'\n", fd, host));
+  soap->errmode = 2;
+  if (soap->proxy_host)
+  { if (soap->fresolve(soap, soap->proxy_host, &sockaddr.sin_addr))
+    { soap_set_sender_error(soap, tcp_error(soap), "TCP get proxy host by name failed in tcp_connect()", SOAP_TCP_ERROR);
+      soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+      return SOAP_INVALID_SOCKET;
+    }
+    sockaddr.sin_port = htons((short)soap->proxy_port);
+  }
+  else
+  { if (soap->fresolve(soap, host, &sockaddr.sin_addr))
+    { soap_set_sender_error(soap, tcp_error(soap), "TCP get host by name failed in tcp_connect()", SOAP_TCP_ERROR);
+      soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+      return SOAP_INVALID_SOCKET;
+    }
+    sockaddr.sin_port = htons((short)port);
+  }
+  soap->errmode = 0;
+/* WR[ */
+#endif /* WITH_IPV6 */
+/* ]WR */
+#ifndef WITH_LEAN
+  if (soap->connect_timeout)
+#if defined(WIN32)
+  { u_long nonblocking = 1;
+    ioctlsocket((SOAP_SOCKET)fd, FIONBIO, &nonblocking);
+  }
+/* WR[ */
+#elif defined(VXWORKS)
+  { vx_nonblocking = TRUE;
+    ioctl((SOAP_SOCKET)fd, FIONBIO, (int)(&vx_nonblocking)); /* modified to use fd */
+  }
+/* ]WR */
+#else
+    fcntl((SOAP_SOCKET)fd, F_SETFL, fcntl((SOAP_SOCKET)fd, F_GETFL)|O_NONBLOCK);
+#endif
+  else
+#if defined(WIN32)
+  { u_long blocking = 0;
+    ioctlsocket((SOAP_SOCKET)fd, FIONBIO, &blocking);
+  }
+/* WR[ */
+#elif defined(VXWORKS)
+  { vx_nonblocking = FALSE;
+    ioctl((SOAP_SOCKET)fd, FIONBIO, (int)(&vx_nonblocking)); /* modified to use fd */
+  }
+/* ]WR */
+#else
+    fcntl((SOAP_SOCKET)fd, F_SETFL, fcntl((SOAP_SOCKET)fd, F_GETFL)&~O_NONBLOCK);
+#endif
+#endif
+  for (;;)
+  { 
+/* WR[ */
+#ifdef WITH_IPV6
+    if (connect((SOAP_SOCKET)fd, resaddr.ai_addr, resaddr.ai_addrlen)) /* modified to use fd */
+#else /* WITH_IPV6 */
+    if (connect((SOAP_SOCKET)fd, (struct sockaddr*)&sockaddr, sizeof(sockaddr)))
+#endif /* WITH_IPV6 */
+/* ]WR */
+    { 
+#ifndef WITH_LEAN
+      if (soap->connect_timeout && (soap_socket_errno == SOAP_EINPROGRESS || soap_socket_errno == SOAP_EWOULDBLOCK))
+      { struct timeval timeout;
+#if defined(SOCKLEN_T)
+        SOCKLEN_T n = sizeof(struct sockaddr_in);
+#elif defined(__socklen_t_defined) || defined(_SOCKLEN_T) || defined(CYGWIN)
+        socklen_t n = sizeof(struct sockaddr_in);
+#elif defined(WIN32) || defined(__APPLE__) || defined(HP_UX) || defined(SUN_OS) || defined(OPENSERVER) || defined(TRU64) || defined(VXWORKS)
+        int n = sizeof(struct sockaddr_in);
+#else
+        size_t n = sizeof(struct sockaddr_in);
+#endif
+        fd_set fds;
+        if (soap->connect_timeout > 0)
+        { timeout.tv_sec = soap->connect_timeout;
+          timeout.tv_usec = 0;
+        }
+        else
+        { timeout.tv_sec = -soap->connect_timeout/1000000;
+          timeout.tv_usec = -soap->connect_timeout%1000000;
+        }
+        FD_ZERO(&fds);
+        FD_SET((SOAP_SOCKET)fd, &fds);
+        for (;;)
+        { int r = select((SOAP_SOCKET)(fd + 1), NULL, &fds, NULL, &timeout);
+          if (r > 0)
+           break;
+          if (!r)
+          { soap->errnum = 0;
+            DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Connect timeout\n"));
+            soap_set_sender_error(soap, "Timeout", "TCP connect failed in tcp_connect()", SOAP_TCP_ERROR);
+            soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+            return SOAP_INVALID_SOCKET;
+          }
+          if (soap_socket_errno != SOAP_EINTR)
+          { soap->errnum = soap_socket_errno;
+            DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not connect to host\n"));
+            soap_set_sender_error(soap, tcp_error(soap), "TCP connect failed in tcp_connect()", SOAP_TCP_ERROR);
+            soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+            return SOAP_INVALID_SOCKET;
+          }
+        }
+       n = sizeof(soap->errnum);
+        if (!getsockopt((SOAP_SOCKET)fd, SOL_SOCKET, SO_ERROR, (char*)&soap->errnum, &n) && !soap->errnum)
+          break;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not connect to host\n"));
+        soap_set_sender_error(soap, tcp_error(soap), "TCP connect failed in tcp_connect()", SOAP_TCP_ERROR);
+        soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+        return SOAP_INVALID_SOCKET;
+      }
+      else
+#endif
+      if (soap_socket_errno != SOAP_EINTR)
+      { soap->errnum = soap_socket_errno;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not connect to host\n"));
+        soap_set_sender_error(soap, tcp_error(soap), "TCP connect failed in tcp_connect()", SOAP_TCP_ERROR);
+        soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+        return SOAP_INVALID_SOCKET;
+      }
+    }  
+    else
+      break;
+  }
+#ifndef WITH_LEAN
+  if (soap->connect_timeout)
+#if defined(WIN32)
+  { u_long blocking = 0;
+    ioctlsocket((SOAP_SOCKET)fd, FIONBIO, &blocking);
+  }
+/* WR[ */
+#elif defined(VXWORKS)
+  { vx_nonblocking = FALSE;
+    ioctl((SOAP_SOCKET)fd, FIONBIO, (int)(&vx_nonblocking)); /* modified to use fd */
+  }
+/* ]WR */
+#else
+    fcntl((SOAP_SOCKET)fd, F_SETFL, fcntl((SOAP_SOCKET)fd, F_GETFL)&~O_NONBLOCK);
+#endif
+#endif
+  soap->socket = fd;
+#ifdef WITH_OPENSSL
+  soap->imode &= ~SOAP_ENC_SSL;
+  soap->omode &= ~SOAP_ENC_SSL;
+  if (!strncmp(endpoint, "https:", 6))
+  { int r;
+    if (soap->proxy_host)
+    { unsigned int k = soap->omode; /* make sure we only parse HTTP */
+      size_t n = soap->count; /* save the content length */
+      soap->omode &= ~SOAP_ENC; /* mask IO and ENC */
+      soap->omode |= SOAP_IO_BUFFER;
+      soap_begin_send(soap);
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Connecting to proxy server\n"));
+      sprintf(soap->tmpbuf, "CONNECT %s:%d HTTP/%s", host, port, soap->http_version);
+      if ((soap->error = soap->fposthdr(soap, soap->tmpbuf, NULL)))
+        return SOAP_INVALID_SOCKET;
+#ifndef WITH_LEAN
+      if (soap->proxy_userid && soap->proxy_passwd && strlen(soap->proxy_userid) + strlen(soap->proxy_passwd) < 761)
+      { sprintf(soap->tmpbuf + 262, "%s:%s", soap->proxy_userid, soap->proxy_passwd);
+        strcpy(soap->tmpbuf, "Basic ");
+        soap_s2base64(soap, (const unsigned char*)(soap->tmpbuf + 262), soap->tmpbuf + 6, strlen(soap->tmpbuf + 262));
+        if ((soap->error = soap->fposthdr(soap, "Proxy-Authorization", soap->tmpbuf)))
+          return soap->error;
+      }
+#endif
+      if ((soap->error = soap->fposthdr(soap, NULL, NULL))
+       || soap_flush(soap))
+        return SOAP_INVALID_SOCKET;
+      soap->omode = k;
+      k = soap->imode;
+      soap->imode &= ~SOAP_ENC; /* mask IO and ENC */
+      if (soap_begin_recv(soap))
+        return SOAP_INVALID_SOCKET;
+      soap->imode = k;
+      soap->count = n;
+      soap_begin_send(soap);
+    }
+    if (!soap->ctx && (soap->error = soap->fsslauth(soap)))
+    { soap_set_sender_error(soap, "SSL error", "SSL authentication failed in tcp_connect(): check password, key file, and ca file.", SOAP_SSL_ERROR);
+      return SOAP_INVALID_SOCKET;
+    }
+    soap->ssl = SSL_new(soap->ctx);
+    if (!soap->ssl)
+    { soap->error = SOAP_SSL_ERROR;
+      return SOAP_INVALID_SOCKET;
+    }
+    if (soap->session)
+    { if (!strcmp(soap->session_host, host) && soap->session_port == port)
+        SSL_set_session(soap->ssl, soap->session);
+      SSL_SESSION_free(soap->session);
+      soap->session = NULL;
+    }
+    soap->imode |= SOAP_ENC_SSL;
+    soap->omode |= SOAP_ENC_SSL;
+    soap->bio = BIO_new_socket((SOAP_SOCKET)fd, BIO_NOCLOSE);
+    SSL_set_bio(soap->ssl, soap->bio, soap->bio);
+#ifndef WITH_LEAN
+    if (soap->connect_timeout)
+#ifdef WIN32
+    { u_long nonblocking = 1;
+      ioctlsocket((SOAP_SOCKET)fd, FIONBIO, &nonblocking);
+    }
+#else
+      fcntl((SOAP_SOCKET)fd, F_SETFL, fcntl((SOAP_SOCKET)fd, F_GETFL)|O_NONBLOCK);
+#endif
+#endif
+    for (;;)
+    { if ((r = SSL_connect(soap->ssl)) <= 0)
+      { int err = SSL_get_error(soap->ssl, r);
+        if (err != SSL_ERROR_NONE && err != SSL_ERROR_WANT_READ && err != SSL_ERROR_WANT_WRITE)
+        { soap_set_sender_error(soap, ssl_error(soap, r), "SSL connect failed in tcp_connect()", SOAP_SSL_ERROR);
+          return SOAP_INVALID_SOCKET;
+        }
+        if (soap->connect_timeout)
+        { struct timeval timeout;
+          fd_set fds;
+          if (soap->connect_timeout > 0)
+          { timeout.tv_sec = soap->connect_timeout;
+            timeout.tv_usec = 0;
+          }
+          else
+          { timeout.tv_sec = -soap->connect_timeout/1000000;
+            timeout.tv_usec = -soap->connect_timeout%1000000;
+          }
+          FD_ZERO(&fds);
+          FD_SET((SOAP_SOCKET)(soap->socket), &fds);
+          for (;;)
+          { int r = select((SOAP_SOCKET)(soap->socket + 1), &fds, NULL, &fds, &timeout);
+            if (r > 0)
+             break;
+            if (!r)
+            { soap->errnum = 0;
+              DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Connect timeout\n"));
+              soap_set_sender_error(soap, "Timeout", "TCP connect failed in tcp_connect()", SOAP_TCP_ERROR);
+              return SOAP_INVALID_SOCKET;
+            }
+          }
+         continue;
+        }
+      }
+      break;
+    }
+#ifndef WITH_LEAN
+    if (soap->connect_timeout)
+#ifdef WIN32
+    { u_long blocking = 0;
+      ioctlsocket((SOAP_SOCKET)fd, FIONBIO, &blocking);
+    }
+#else
+      fcntl((SOAP_SOCKET)fd, F_SETFL, fcntl((SOAP_SOCKET)fd, F_GETFL)&~O_NONBLOCK);
+#endif
+#endif
+    if (soap->require_server_auth)
+    { X509 *peer;
+      int err;
+      if ((err = SSL_get_verify_result(soap->ssl)) != X509_V_OK)
+      { soap_set_sender_error(soap, X509_verify_cert_error_string(err), "SSL certificate presented by peer cannot be verified in tcp_connect()", SOAP_SSL_ERROR);
+        return SOAP_INVALID_SOCKET;
+      }
+      peer = SSL_get_peer_certificate(soap->ssl);
+      if (!peer)
+      { soap_set_sender_error(soap, "SSL error", "No SSL certificate was presented by the peer in tcp_connect()", SOAP_SSL_ERROR);
+        return SOAP_INVALID_SOCKET;
+      }
+      X509_NAME_get_text_by_NID(X509_get_subject_name(peer), NID_commonName, soap->msgbuf, sizeof(soap->msgbuf));
+      X509_free(peer);
+      if (soap_tag_cmp(soap->msgbuf, host))
+      { soap_set_sender_error(soap, "SSL error", "SSL certificate host name mismatch in tcp_connect()", SOAP_SSL_ERROR);
+        return SOAP_INVALID_SOCKET;
+      }
+    }
+  }
+#endif
+  return fd;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_bind(struct soap *soap, const char *host, int port, int backlog)
+{ struct sockaddr_in sockaddr;
+/* WR[ */
+#ifdef WITH_IPV6
+  struct addrinfo *addrinfo;
+  struct addrinfo hints;
+  struct addrinfo resaddr;
+  struct sockaddr_storage addrstorage;
+  int err;
+#endif /* WITH_IPV6 */
+/* ]WR */
+#ifndef WITH_LEAN
+  int len = SOAP_BUFLEN;
+  int set = 1;
+#endif
+  if (soap_valid_socket(soap->master))
+  { soap->fclosesocket(soap, (SOAP_SOCKET)soap->master);
+    soap->master = SOAP_INVALID_SOCKET;
+  }
+  soap->socket = SOAP_INVALID_SOCKET;
+  soap->errmode = 1;
+  if (tcp_init(soap))
+  { soap_set_receiver_error(soap, tcp_error(soap), "TCP init failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+/* WR[ */
+#ifdef WITH_IPV6
+  memset((void*)&hints, 0, sizeof(hints));
+  hints.ai_family = PF_UNSPEC;
+  hints.ai_socktype = SOCK_STREAM;
+  hints.ai_flags = AI_PASSIVE;
+  soap->errmode = 2;
+  if (host)
+    err = getaddrinfo(host, soap_int2s(soap, port), &hints, &addrinfo);
+  else
+    err = getaddrinfo(NULL, soap_int2s(soap, port), &hints, &addrinfo);
+  if (NULL != addrinfo)
+  {
+    resaddr = *addrinfo;
+    addrstorage = *((struct sockaddr_storage *) addrinfo->ai_addr);
+    resaddr.ai_addr = (struct sockaddr *) &addrstorage;
+    freeaddrinfo(addrinfo);
+  }
+  if (err)
+  { soap_set_receiver_error(soap, gai_strerror(err), "TCP getaddrinfo failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+  soap->errmode = 0;
+  if ((soap->master = socket(resaddr.ai_family, resaddr.ai_socktype, resaddr.ai_protocol)) < 0)
+  { soap->errnum = soap_socket_errno;
+    soap_set_receiver_error(soap, tcp_error(soap), "TCP socket failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+#else /* WITH_IPV6 */
+/* ]WR */
+  soap->errmode = 0;
+  if ((soap->master = (int)socket(AF_INET, SOCK_STREAM, 0)) < 0)
+  { soap->errnum = soap_socket_errno;
+    soap_set_receiver_error(soap, tcp_error(soap), "TCP socket failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+/* WR[ */
+#endif /* WITH_IPV6 */
+/* ]WR */
+#ifdef SOCKET_CLOSE_ON_EXEC
+#ifdef WIN32
+#ifndef UNDER_CE
+  SetHandleInformation((HANDLE)soap->master, HANDLE_FLAG_INHERIT, 0);
+#endif
+#else
+  fcntl (soap->master, F_SETFD, 1);
+#endif
+#endif
+#ifndef WITH_LEAN
+  if (soap->bind_flags && setsockopt((SOAP_SOCKET)soap->master, SOL_SOCKET, soap->bind_flags, (char*)&set, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_receiver_error(soap, tcp_error(soap), "TCP setsockopt failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+  if (soap->keep_alive && setsockopt((SOAP_SOCKET)soap->master, SOL_SOCKET, SO_KEEPALIVE, (char*)&set, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_receiver_error(soap, tcp_error(soap), "TCP setsockopt SO_KEEPALIVE failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+  if (setsockopt((SOAP_SOCKET)soap->master, SOL_SOCKET, SO_SNDBUF, (char*)&len, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_receiver_error(soap, tcp_error(soap), "TCP setsockopt SO_SNDBUF failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+  if (setsockopt((SOAP_SOCKET)soap->master, SOL_SOCKET, SO_RCVBUF, (char*)&len, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_receiver_error(soap, tcp_error(soap), "TCP setsockopt SO_RCVBUF failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+#ifdef TCP_NODELAY
+  if (setsockopt((SOAP_SOCKET)soap->master, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_receiver_error(soap, tcp_error(soap), "TCP setsockopt TCP_NODELAY failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+#endif
+#endif
+/* WR[ */
+#ifdef WITH_IPV6
+  soap->errmode = 0;
+  if (bind(soap->master, resaddr.ai_addr, resaddr.ai_addrlen) || listen(soap->master, backlog))
+  { 
+    soap->errnum = soap_socket_errno;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind to host\n"));
+    soap_closesock(soap);
+    soap_set_receiver_error(soap, tcp_error(soap), "TCP bind failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }  
+#else /* WITH_IPV6 */
+/* ]WR */
+  memset((void*)&sockaddr, 0, sizeof(sockaddr));
+  sockaddr.sin_family = AF_INET;
+  soap->errmode = 2;
+  if (host)
+  { if (soap->fresolve(soap, host, &sockaddr.sin_addr))
+    { soap_set_receiver_error(soap, tcp_error(soap), "TCP get host by name failed in soap_bind()", SOAP_TCP_ERROR);
+      return SOAP_INVALID_SOCKET;
+    }
+  }
+  else
+    sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
+  sockaddr.sin_port = htons((short)port);
+  soap->errmode = 0;
+  if (bind((SOAP_SOCKET)soap->master, (struct sockaddr*)&sockaddr, sizeof(sockaddr)) || listen((SOAP_SOCKET)soap->master, backlog))
+  { soap->errnum = soap_socket_errno;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind to host\n"));
+    soap_closesock(soap);
+    soap_set_receiver_error(soap, tcp_error(soap), "TCP bind failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }  
+/* WR[ */
+#endif /* WITH_IPV6 */
+/* ]WR */
+#ifdef WITH_OPENSSL
+  if (!soap->ctx && (soap->error = soap->fsslauth(soap)))
+    return SOAP_INVALID_SOCKET;
+#endif
+  return soap->master;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_poll(struct soap *soap)
+{ 
+#ifndef WITH_LEAN
+  struct timeval timeout;
+  fd_set sfd, rfd, xfd;
+  int r;
+  timeout.tv_sec = 0;
+  timeout.tv_usec = 0;
+  FD_ZERO(&rfd);
+  FD_ZERO(&sfd);
+  FD_ZERO(&xfd);
+  if (soap_valid_socket(soap->socket))
+  { FD_SET(soap->socket, &rfd);
+    FD_SET(soap->socket, &sfd);
+    FD_SET(soap->socket, &xfd);
+    r = select(soap->socket + 1, &rfd, &sfd, &xfd, &timeout);
+    if (r > 0 && FD_ISSET(soap->socket, &xfd))
+      r = -1;
+  }
+  else if (soap_valid_socket(soap->master))
+  { FD_SET(soap->master, &rfd);
+    r = select(soap->master + 1, &rfd, &sfd, NULL, &timeout);
+  }
+  else
+    return SOAP_OK;
+  if (r > 0)
+  {
+#ifdef WITH_OPENSSL
+    if (soap->ssl)
+    { if (soap_valid_socket(soap->socket) && FD_ISSET(soap->socket, &rfd))
+      { char buf = '\0';
+       if (SSL_peek(soap->ssl, &buf, 1) <= 0)
+         return SOAP_EOF;
+      }
+    }
+#endif   
+    if (soap_valid_socket(soap->socket) && FD_ISSET(soap->socket, &rfd))
+      return SOAP_EOF;
+    return SOAP_OK;
+  }
+  if (r < 0 && (soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) && soap_socket_errno != SOAP_EINTR)
+  { soap->errnum = soap_socket_errno;
+    soap_set_receiver_error(soap, tcp_error(soap), "select failed in soap_poll()", SOAP_TCP_ERROR);
+    return soap->error = SOAP_TCP_ERROR;
+  }
+  else
+    soap->errnum = soap_errno;
+  return SOAP_EOF;
+#else
+  return SOAP_OK;
+#endif
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_accept(struct soap *soap, int s, struct sockaddr *a, int *n)
+{ int fd;
+#if defined(SOCKLEN_T)
+  fd = (int)accept((SOAP_SOCKET)s, a, (SOCKLEN_T*)n);
+#elif defined(__socklen_t_defined) || defined(_SOCKLEN_T) || defined(CYGWIN)
+  fd = (int)accept((SOAP_SOCKET)s, a, (socklen_t*)n);
+#elif defined(WIN32) || defined(__APPLE__) || defined(HP_UX) || defined(SUN_OS) || defined(OPENSERVER) || defined(TRU64) || defined(VXWORKS)
+  fd = (int)accept((SOAP_SOCKET)s, a, n);
+#else
+  fd = (int)accept((SOAP_SOCKET)s, a, (size_t*)n);
+#endif
+#ifdef SOCKET_CLOSE_ON_EXEC
+#ifdef WIN32
+#ifndef UNDER_CE
+  SetHandleInformation((HANDLE)fd, HANDLE_FLAG_INHERIT, 0);
+#endif
+#else
+  fcntl(fd, F_SETFD, FD_CLOEXEC);
+#endif
+#endif
+  return fd;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_accept(struct soap *soap)
+{ 
+/* WR[ */
+#ifdef WITH_IPV6
+  struct sockaddr_storage sockaddr;
+#else /* WITH_IPV6 */
+/* ]WR */
+  struct sockaddr_in sockaddr;
+/* WR[ */
+#endif
+/* ]WR */
+  int n = (int)sizeof(sockaddr);
+#ifndef WITH_LEAN
+  int len = SOAP_BUFLEN;
+  int set = 1;
+#endif
+  soap->error = SOAP_OK;
+  memset((void*)&sockaddr, 0, sizeof(sockaddr));
+  soap->socket = SOAP_INVALID_SOCKET;
+  soap->errmode = 0;
+  if (soap_valid_socket(soap->master))
+  { for (;;)
+    { 
+#ifndef WITH_LEAN
+      if (soap->accept_timeout)
+      { struct timeval timeout;
+        fd_set fd;
+        if (soap->accept_timeout > 0)
+        { timeout.tv_sec = soap->accept_timeout;
+          timeout.tv_usec = 0;
+        }
+        else
+        { timeout.tv_sec = -soap->accept_timeout/1000000;
+          timeout.tv_usec = -soap->accept_timeout%1000000;
+        }
+        FD_ZERO(&fd);
+        FD_SET((SOAP_SOCKET)soap->master, &fd);
+        for (;;)
+        { int r = select((SOAP_SOCKET)(soap->master + 1), &fd, &fd, NULL, &timeout);
+          if (r > 0)
+            break;
+          if (!r)
+          { soap->errnum = 0;
+            soap_set_receiver_error(soap, "Timeout", "TCP accept failed in soap_accept()", SOAP_TCP_ERROR);
+            return SOAP_INVALID_SOCKET;
+          }
+          if (soap_socket_errno != SOAP_EINTR)
+          { soap->errnum = soap_socket_errno;
+            soap_closesock(soap);
+            soap_set_sender_error(soap, tcp_error(soap), "TCP accept failed in soap_accept()", SOAP_TCP_ERROR);
+            return SOAP_INVALID_SOCKET;
+          }
+        }
+#if defined(WIN32)
+       { u_long nonblocking = 1;
+          ioctlsocket((SOAP_SOCKET)soap->master, FIONBIO, &nonblocking);
+        }
+#elif defined(VXWORKS)
+        { vx_nonblocking = TRUE;
+          ioctl((SOAP_SOCKET)soap->master, FIONBIO, (int)(&vx_nonblocking));
+        }
+#else
+        fcntl((SOAP_SOCKET)soap->master, F_SETFL, fcntl((SOAP_SOCKET)soap->master, F_GETFL)|O_NONBLOCK);
+#endif
+      }
+      else
+#if defined(WIN32)
+      { u_long blocking = 0;
+        ioctlsocket((SOAP_SOCKET)soap->master, FIONBIO, &blocking);
+      }
+/* WR[ */
+#elif defined(VXWORKS)
+      { vx_nonblocking = FALSE;
+        ioctl((SOAP_SOCKET)soap->master, FIONBIO, (int)(&vx_nonblocking));
+      }
+/* ]WR */
+#else
+        fcntl((SOAP_SOCKET)soap->master, F_SETFL, fcntl((SOAP_SOCKET)soap->master, F_GETFL)&~O_NONBLOCK);
+#endif
+#endif
+      soap->socket = soap->faccept(soap, soap->master, (struct sockaddr*)&sockaddr, &n);
+      if (soap_valid_socket(soap->socket))
+      {
+/* WR[ */
+#ifdef WITH_IPV6
+/* Use soap->host to store the numeric form of the remote host */
+        getnameinfo((struct sockaddr*)&sockaddr, n, soap->host, sizeof(soap->host), NULL, 0, NI_NUMERICHOST | NI_NUMERICSERV); 
+        DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Accept socket %d from %s\n", soap->socket, soap->host));
+        soap->ip = 0; /* info stored in soap->host */
+        soap->port = 0; /* info stored in soap->host */
+#else /* WITH_IPV6 */
+/* ]WR */
+        soap->ip = ntohl(sockaddr.sin_addr.s_addr);
+        soap->port = (int)ntohs(sockaddr.sin_port); /* does not return port number on some systems */
+        DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Accept socket %d at port %d from IP %d.%d.%d.%d\n", soap->socket, soap->port, (int)(soap->ip>>24)&0xFF, (int)(soap->ip>>16)&0xFF, (int)(soap->ip>>8)&0xFF, (int)soap->ip&0xFF));
+/* WR[ */
+#endif /* WITH_IPV6 */
+/* ]WR */
+        soap->keep_alive = ((soap->imode & SOAP_IO_KEEPALIVE) != 0);
+#ifndef WITH_LEAN
+       if (soap->accept_flags & SO_LINGER)
+        { struct linger linger;
+          memset((void*)&linger, 0, sizeof(linger));
+          linger.l_onoff = 1;
+          linger.l_linger = 0;
+         if (setsockopt((SOAP_SOCKET)soap->socket, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(struct linger)))
+          { soap->errnum = soap_socket_errno;
+           soap_set_receiver_error(soap, tcp_error(soap), "TCP setsockopt SO_LINGER failed in soap_accept()", SOAP_TCP_ERROR);
+            return SOAP_INVALID_SOCKET;
+         }
+        }
+        if ((soap->accept_flags & ~SO_LINGER) && setsockopt((SOAP_SOCKET)soap->socket, SOL_SOCKET, soap->accept_flags & ~SO_LINGER, (char*)&set, sizeof(int)))
+        { soap->errnum = soap_socket_errno;
+          soap_set_receiver_error(soap, tcp_error(soap), "TCP setsockopt failed in soap_accept()", SOAP_TCP_ERROR);
+          return SOAP_INVALID_SOCKET;
+        }
+        if (soap->keep_alive && setsockopt((SOAP_SOCKET)soap->socket, SOL_SOCKET, SO_KEEPALIVE, (char*)&set, sizeof(int)))
+        { soap->errnum = soap_socket_errno;
+          soap_set_receiver_error(soap, tcp_error(soap), "TCP setsockopt SO_KEEPALIVE failed in soap_accept()", SOAP_TCP_ERROR);
+          return SOAP_INVALID_SOCKET;
+        }
+        if (setsockopt((SOAP_SOCKET)soap->socket, SOL_SOCKET, SO_SNDBUF, (char*)&len, sizeof(int)))
+        { soap->errnum = soap_socket_errno;
+          soap_set_receiver_error(soap, tcp_error(soap), "TCP setsockopt SO_SNDBUF failed in soap_accept()", SOAP_TCP_ERROR);
+          return SOAP_INVALID_SOCKET;
+        }
+        if (setsockopt((SOAP_SOCKET)soap->socket, SOL_SOCKET, SO_RCVBUF, (char*)&len, sizeof(int)))
+        { soap->errnum = soap_socket_errno;
+          soap_set_receiver_error(soap, tcp_error(soap), "TCP setsockopt SO_RCVBUF failed in soap_accept()", SOAP_TCP_ERROR);
+          return SOAP_INVALID_SOCKET;
+        }
+#ifdef TCP_NODELAY
+        if (setsockopt((SOAP_SOCKET)soap->socket, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int)))
+        { soap->errnum = soap_socket_errno;
+          soap_set_receiver_error(soap, tcp_error(soap), "TCP setsockopt TCP_NODELAY failed in soap_accept()", SOAP_TCP_ERROR);
+          return SOAP_INVALID_SOCKET;
+        }
+#endif
+#endif
+        if (soap->accept_timeout)
+        {
+#if defined(WIN32)
+          u_long blocking = 0;
+          ioctlsocket((SOAP_SOCKET)soap->master, FIONBIO, &blocking);
+          ioctlsocket((SOAP_SOCKET)soap->socket, FIONBIO, &blocking);
+/* WR[ */
+#elif defined(VXWORKS)
+          vx_nonblocking = FALSE;
+          ioctl((SOAP_SOCKET)soap->master, FIONBIO, (int)(&vx_nonblocking));
+          ioctl((SOAP_SOCKET)soap->socket, FIONBIO, (int)(&vx_nonblocking));
+/* ]WR */
+#elif defined(PALM)
+          fcntl((SOAP_SOCKET)soap->master, F_SETFL, fcntl((SOAP_SOCKET)soap->master, F_GETFL,0)&~O_NONBLOCK);
+          fcntl((SOAP_SOCKET)soap->socket, F_SETFL, fcntl((SOAP_SOCKET)soap->socket, F_GETFL,0)&~O_NONBLOCK);
+#elif defined(SYMBIAN)
+          long blocking = 0;
+          ioctl((SOAP_SOCKET)soap->master, 0/*FIONBIO*/, &blocking);
+#else
+          fcntl((SOAP_SOCKET)soap->master, F_SETFL, fcntl((SOAP_SOCKET)soap->master, F_GETFL)&~O_NONBLOCK);
+          fcntl((SOAP_SOCKET)soap->socket, F_SETFL, fcntl((SOAP_SOCKET)soap->socket, F_GETFL)&~O_NONBLOCK);
+#endif
+       }
+        return soap->socket;
+      }
+      if (soap_socket_errno != SOAP_EINTR && soap_socket_errno != SOAP_EAGAIN)
+      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Accept failed from %s\n", soap->host));
+        soap->errnum = soap_socket_errno;
+        soap_set_receiver_error(soap, tcp_error(soap), "TCP accept failed in soap_accept()", SOAP_TCP_ERROR);
+        return SOAP_INVALID_SOCKET;
+      }
+    }
+  }
+  else
+  { soap_set_receiver_error(soap, tcp_error(soap), "TCP no master socket in soap_accept()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_disconnect(struct soap *soap)
+{
+#ifdef WITH_OPENSSL
+  if (soap->ssl)
+  { int r, s = 0;
+    if (soap->session)
+      SSL_SESSION_free(soap->session);
+    if (*soap->host)
+    { soap->session = SSL_get1_session(soap->ssl);
+      if (soap->session)
+      { strcpy(soap->session_host, soap->host);
+        soap->session_port = soap->port;
+      }
+    }
+    r = SSL_shutdown(soap->ssl);
+    if (r != 1)
+    { s = ERR_get_error();
+      if (s)
+      { if (soap_valid_socket(soap->socket))
+        { soap->fshutdownsocket(soap, (SOAP_SOCKET)soap->socket, 1);
+          soap->socket = SOAP_INVALID_SOCKET;
+        }
+        r = SSL_shutdown(soap->ssl);
+      }
+    }
+    DBGLOG(TEST, if (s) SOAP_MESSAGE(fdebug, "Shutdown failed: %d\n", SSL_get_error(soap->ssl, r)));
+    SSL_free(soap->ssl);
+    soap->ssl = NULL;
+    if (s)
+      return SOAP_SSL_ERROR;
+    ERR_remove_state(0);
+  }
+#endif
+  if (soap_valid_socket(soap->socket))
+  { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Closing socket %d\n", soap->socket));
+    soap->fshutdownsocket(soap, (SOAP_SOCKET)soap->socket, 2);
+    soap->fclosesocket(soap, (SOAP_SOCKET)soap->socket);
+    soap->socket = SOAP_INVALID_SOCKET;
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_closesocket(struct soap *soap, SOAP_SOCKET fd)
+{ return closesocket(fd);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_shutdownsocket(struct soap *soap, SOAP_SOCKET fd, int how)
+{ return shutdown(fd, how);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_closesock(struct soap *soap)
+{ register int status = soap->error;
+  if (status == SOAP_EOF || status == SOAP_TCP_ERROR || status == SOAP_SSL_ERROR || !soap->keep_alive)
+  { if (soap->fclose && (soap->error = soap->fclose(soap)))
+      return soap->error;
+    soap->socket = SOAP_INVALID_SOCKET;
+    soap->keep_alive = 0;
+  }
+#ifdef WITH_ZLIB
+  if (soap->zlib_state == SOAP_ZLIB_DEFLATE)
+    deflateEnd(&soap->d_stream);
+  else if (soap->zlib_state == SOAP_ZLIB_INFLATE)
+    inflateEnd(&soap->d_stream);
+  soap->zlib_state = SOAP_ZLIB_NONE;
+#endif
+  return soap->error = status;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+size_t
+SOAP_FMAC2
+soap_hash(register const char *s)
+{ register size_t h = 0;
+  while (*s)
+    h = 65599*h + *s++;
+  return h % SOAP_IDHASH;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+static void
+soap_init_pht(struct soap *soap)
+{ register int i;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Initializing pointer hashtable\n"));
+  for (i = 0; i < (int)SOAP_PTRHASH; i++)
+    soap->pht[i] = NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap*
+SOAP_FMAC2
+soap_new1(soap_mode mode)
+{ return soap_new2(mode, mode);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap*
+SOAP_FMAC2
+soap_new()
+{ return soap_new2(SOAP_IO_DEFAULT, SOAP_IO_DEFAULT);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap*
+SOAP_FMAC2
+soap_new2(soap_mode imode, soap_mode omode)
+{ struct soap *soap = (struct soap*)SOAP_MALLOC(sizeof(struct soap));
+  if (soap)
+    soap_init2(soap, imode, omode);
+  return soap;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+static void
+soap_free_pht(struct soap *soap)
+{ register struct soap_plist *pp, *next;
+  register int i;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free pointer hashtable\n"));
+  for (i = 0; i < (int)SOAP_PTRHASH; i++)
+  { for (pp = soap->pht[i]; pp; pp = next)
+    { next = pp->next;
+      SOAP_FREE(pp);
+    }
+    soap->pht[i] = NULL;
+  }
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_embed(struct soap *soap, const void *p, const struct soap_array *a, int n, const char *tag, int type)
+{ register int i;
+  struct soap_plist *pp;
+  if (soap->version != 1)
+    soap->encoding = 1;
+  if (a)
+    i = soap_array_pointer_lookup(soap, p, a, n, type, &pp);
+  else
+    i = soap_pointer_lookup(soap, p, type, &pp);
+  if (i)
+  { if (soap_is_embedded(soap, pp)
+     || soap_is_single(soap, pp))
+      return 0;
+    soap_set_embedded(soap, pp);
+  }
+  return i;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_pointer_lookup(struct soap *soap, const void *p, int type, struct soap_plist **ppp)
+{ register struct soap_plist *pp;
+  *ppp = NULL;
+  if (p)
+    for (pp = soap->pht[soap_hash_ptr(p)]; pp; pp = pp->next)
+      if (pp->ptr == p && pp->type == type)
+      { *ppp = pp;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup location=%p type=%d id=%d\n", p, type, pp->id));
+        return pp->id;
+      }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup location=%p type=%d: not found\n", p, type));
+  return 0;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_pointer_enter(struct soap *soap, const void *p, const struct soap_array *a, int n, int type, struct soap_plist **ppp)
+{ register int h;
+  register struct soap_plist *pp = *ppp = (struct soap_plist*)SOAP_MALLOC(sizeof(struct soap_plist));
+  if (!pp)
+    return 0;
+  if (a)
+    h = soap_hash_ptr(a->__ptr);
+  else
+    h = soap_hash_ptr(p);
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Pointer enter location=%p array=%p size=%d dim=%d type=%d id=%lu\n", p, a?a->__ptr:NULL, a?a->__size:0, n, type, soap->idnum+1));
+  pp->next = soap->pht[h];
+  pp->type = type;
+  pp->mark1 = 0;
+  pp->mark2 = 0;
+  pp->ptr = p;
+  pp->array = a;
+  soap->pht[h] = pp;
+  pp->id = ++soap->idnum;
+  return pp->id;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_array_pointer_lookup(struct soap *soap, const void *p, const struct soap_array *a, int n, int type, struct soap_plist **ppp)
+{ register struct soap_plist *pp;
+  *ppp = NULL;
+  if (!p || !a->__ptr)
+    return 0;
+  for (pp = soap->pht[soap_hash_ptr(a->__ptr)]; pp; pp = pp->next)
+  { if (pp->type == type && pp->array && pp->array->__ptr == a->__ptr)
+    { register int i;
+      for (i = 0; i < n; i++)
+        if (((const int*)&pp->array->__size)[i] != ((const int*)&a->__size)[i])
+         break;
+      if (i == n)
+      { *ppp = pp;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array lookup location=%p type=%d id=%d\n", a->__ptr, type, pp->id));
+        return pp->id;
+      }
+    }
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array lookup location=%p type=%d: not found\n", a->__ptr, type));
+  return 0;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_begin_count(struct soap *soap)
+{ soap_clr_attr(soap);
+  soap_set_local_namespaces(soap);
+#ifndef WITH_LEANER
+  if ((soap->mode & SOAP_ENC_DIME) || (soap->omode & SOAP_ENC_DIME))
+    soap->mode = soap->omode | SOAP_IO_LENGTH | SOAP_ENC_DIME;
+  else
+#endif
+  { soap->mode = soap->omode;
+    if ((soap->mode & SOAP_IO) == SOAP_IO_STORE
+     || (((soap->mode & SOAP_IO) == SOAP_IO_CHUNK || (soap->mode & SOAP_ENC_XML))
+#ifndef WITH_LEANER
+      && !soap->fpreparesend
+#endif
+      ))
+      soap->mode &= ~SOAP_IO_LENGTH;
+    else
+      soap->mode |= SOAP_IO_LENGTH;
+  }
+#ifdef WITH_ZLIB
+  if ((soap->mode & SOAP_ENC_ZLIB) && (soap->mode & SOAP_IO) == SOAP_IO_FLUSH)
+  { if (!(soap->mode & SOAP_ENC_DIME))
+      soap->mode &= ~SOAP_IO_LENGTH;
+    if (soap->mode & SOAP_ENC_XML)
+      soap->mode |= SOAP_IO_BUFFER;
+    else
+      soap->mode |= SOAP_IO_STORE;
+  }
+
+#endif
+  if (!soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH))
+    soap->mode |= SOAP_XML_TREE;
+#ifndef WITH_LEANER
+  if (soap->mode & SOAP_ENC_MIME)
+    soap_select_mime_boundary(soap);
+  soap->dime.list = soap->dime.last;   /* keep track of last DIME attachment */
+#endif
+  soap->count = 0;
+  soap->ns = 0;
+  soap->null = 0;
+  soap->position = 0;
+  soap->mustUnderstand = 0;
+  soap->encoding = 0;
+  soap->part = SOAP_BEGIN;
+  soap->idnum = 0;
+#ifndef WITH_LEANER
+  soap->dime.count = 0; /* count # of attachments */
+  soap->dime.size = 0; /* accumulate total size of attachments */
+  if (soap->fprepareinit && (soap->mode & SOAP_IO) != SOAP_IO_STORE)
+    soap->fprepareinit(soap);   
+#endif
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Begin count phase (socket=%d mode=%x count=%lu)\n", soap->socket, soap->mode, (unsigned long)soap->count));
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_begin_send(struct soap *soap)
+{ soap->error = SOAP_OK;
+  soap_clr_attr(soap);
+  soap_set_local_namespaces(soap);
+  soap->mode = soap->omode | (soap->mode & (SOAP_IO_LENGTH | SOAP_ENC_DIME));
+#ifdef WITH_ZLIB
+  if ((soap->mode & SOAP_ENC_ZLIB) && (soap->mode & SOAP_IO) == SOAP_IO_FLUSH)
+  { if (soap->mode & SOAP_ENC_XML)
+      soap->mode |= SOAP_IO_BUFFER;
+    else
+      soap->mode |= SOAP_IO_STORE;
+  }
+#endif
+  if ((soap->mode & SOAP_IO) == SOAP_IO_FLUSH && soap_valid_socket(soap->socket))
+  { if (soap->count || (soap->mode & SOAP_IO_LENGTH) || (soap->mode & SOAP_ENC_XML))
+      soap->mode |= SOAP_IO_BUFFER;
+    else
+      soap->mode |= SOAP_IO_STORE;
+  }
+  soap->mode &= ~SOAP_IO_LENGTH;
+  if ((soap->mode & SOAP_IO) == SOAP_IO_STORE)
+    soap_new_block(soap);
+  if (!(soap->mode & SOAP_IO_KEEPALIVE))
+    soap->keep_alive = 0;
+  if (!soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH))
+    soap->mode |= SOAP_XML_TREE;
+#ifndef WITH_LEANER
+  if (soap->mode & SOAP_ENC_MIME)
+    soap_select_mime_boundary(soap);
+#ifdef WIN32
+#ifndef UNDER_CE
+#ifndef WITH_FASTCGI
+  if (!soap_valid_socket(soap->socket)) /* Set win32 stdout or soap->sendfd to BINARY, e.g. to support DIME */
+#ifdef __BORLANDC__
+    setmode((SOAP_SOCKET)soap->sendfd, O_BINARY);
+#else
+    _setmode((SOAP_SOCKET)soap->sendfd, _O_BINARY);
+#endif
+#endif
+#endif
+#endif
+#endif
+  if (soap->mode & SOAP_IO)
+  { soap->bufidx = 0;
+    soap->buflen = 0;
+  }
+  soap->chunksize = 0;
+  soap->ns = 0;
+  soap->null = 0;
+  soap->position = 0;
+  soap->mustUnderstand = 0;
+  soap->encoding = 0;
+  soap->part = SOAP_BEGIN;
+  soap->idnum = 0;
+  soap->level = 0;
+#ifdef WITH_ZLIB
+  soap->z_ratio_out = 1.0;
+  if ((soap->mode & SOAP_ENC_ZLIB) && soap->zlib_state != SOAP_ZLIB_DEFLATE)
+  {
+#ifdef WITH_GZIP
+    memcpy(soap->z_buf, "\37\213\10\0\0\0\0\0\0\377", 10);
+    soap->d_stream.next_out = (Byte*)soap->z_buf + 10;
+    soap->d_stream.avail_out = SOAP_BUFLEN - 10;
+    soap->z_crc = crc32(0L, NULL, 0);
+    if (deflateInit2(&soap->d_stream, soap->z_level, Z_DEFLATED, -MAX_WBITS, 8, Z_DEFAULT_STRATEGY) != Z_OK)
+#else
+    soap->d_stream.next_out = (Byte*)soap->z_buf;
+    soap->d_stream.avail_out = SOAP_BUFLEN;
+    if (deflateInit(&soap->d_stream, soap->z_level) != Z_OK)
+#endif
+      return soap->error = SOAP_ZLIB_ERROR;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflate initialized\n"));
+    soap->zlib_state = SOAP_ZLIB_DEFLATE;
+  }
+#endif
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Begin send phase (socket=%d mode=%x count=%lu)\n", soap->socket, soap->mode, (unsigned long)soap->count));
+#ifndef WITH_LEANER
+  if (soap->fprepareinit && (soap->mode & SOAP_IO) == SOAP_IO_STORE)
+    soap->fprepareinit(soap);   
+#endif
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_embedded(struct soap *soap, const void *p, int t)
+{ struct soap_plist *pp;
+  if (soap_pointer_lookup(soap, p, t, &pp))
+  { pp->mark1 = 1;
+    pp->mark2 = 1;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded %p type=%d mark set to 1\n", p, t));
+  }
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_reference(struct soap *soap, const void *p, int t)
+{ 
+  struct soap_plist *pp;
+  if (!p || (soap->mode & SOAP_XML_TREE))
+    return 1;
+  if (soap_pointer_lookup(soap, p, t, &pp))
+  { if (pp->mark1 == 0)
+    { pp->mark1 = 2;
+      pp->mark2 = 2;
+    }
+  }
+  else if (soap_pointer_enter(soap, p, NULL, 0, t, &pp))
+  { pp->mark1 = 0;
+    pp->mark2 = 0;
+  }
+  else
+    return 1;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Reference %p type=%d (%d %d)\n", p, t, (int)pp->mark1, (int)pp->mark2));
+  return pp->mark1;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_array_reference(struct soap *soap, const void *p, const struct soap_array *a, int n, int t)
+{ register int i;
+  struct soap_plist *pp;
+  if (!p)
+    return 1;
+  i = soap_array_pointer_lookup(soap, p, a, n, t, &pp);
+  if (i)
+  { if (pp->mark1 == 0)
+    { pp->mark1 = 2;
+      pp->mark2 = 2;
+    }
+  }
+  else if (!soap_pointer_enter(soap, p, a, n, t, &pp))
+    return 1;
+  else
+  { pp->mark1 = 0;
+    pp->mark2 = 0;
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array reference %p ptr=%p dim=%d type=%d (%d %d)\n", p, a->__ptr, n, t, (int)pp->mark1, (int)pp->mark2));
+  return pp->mark1;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_embedded_id(struct soap *soap, int id, const void *p, int t)
+{ struct soap_plist *pp;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded_id %p type=%d id=%d\n", p, t, id));
+  if (soap->mode & SOAP_XML_TREE)
+    return id;
+  if (soap->version == 1 && soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH) && soap->part != SOAP_IN_HEADER)
+  { if (id < 0)
+    { id = soap_pointer_lookup(soap, p, t, &pp);
+      if (id)
+      { if (soap->mode & SOAP_IO_LENGTH)
+          pp->mark1 = 2;
+        else
+          pp->mark2 = 2;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded_id multiref id=%d %p type=%d = (%d %d)\n", id, p, t, (int)pp->mark1, (int)pp->mark2));
+      }
+      return -1;
+    }
+    return id;
+  }
+  if (id < 0)
+    id = soap_pointer_lookup(soap, p, t, &pp);
+  else if (id && !soap_pointer_lookup(soap, p, t, &pp))
+    return 0;
+  if (id && pp)
+  { if (soap->mode & SOAP_IO_LENGTH)
+      pp->mark1 = 1;
+    else
+      pp->mark2 = 1;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded_id embedded ref id=%d %p type=%d = (%d %d)\n", id, p, t, (int)pp->mark1, (int)pp->mark2));
+  }
+  return id;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_is_embedded(struct soap *soap, struct soap_plist *pp)
+{ if (!pp)
+    return 0;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Is embedded? %d %d\n", (int)pp->mark1, (int)pp->mark2));
+  if (soap->version == 1 && soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH) && soap->part != SOAP_IN_HEADER)
+  { if (soap->mode & SOAP_IO_LENGTH)
+      return pp->mark1 != 0;
+    return pp->mark2 != 0;
+  }
+  if (soap->mode & SOAP_IO_LENGTH)
+    return pp->mark1 == 1;
+  return pp->mark2 == 1;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_is_single(struct soap *soap, struct soap_plist *pp)
+{ if (soap->part == SOAP_IN_HEADER)
+    return 1;
+  if (!pp)
+    return 0;
+  if (soap->mode & SOAP_IO_LENGTH)
+    return pp->mark1 == 0;
+  return pp->mark2 == 0;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_embedded(struct soap *soap, struct soap_plist *pp)
+{ if (!pp)
+    return;
+  if (soap->mode & SOAP_IO_LENGTH)
+    pp->mark1 = 1;
+  else
+    pp->mark2 = 1;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_dime(struct soap *soap, const char *tag, int id, const void *p, const struct soap_array *a, const char *aid, const char *atype, const char *aoptions, int n, const char *type, int t) 
+{ struct soap_plist *pp;
+  int i;
+  if (!p || !a->__ptr || (!aid && !atype))
+    return soap_element_id(soap, tag, id, p, a, n, type, t);
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Attachment tag='%s' id='%s' (%d) type='%s'\n", tag, aid?aid:"", id, atype?atype:""));
+  i = soap_array_pointer_lookup(soap, p, a, n, t, &pp);
+  if (!i)
+  { i = soap_pointer_enter(soap, p, a, n, t, &pp);
+    if (!i)
+    { soap->error = SOAP_EOM;
+      return -1;
+    }
+  }
+  if (id < 0)
+    id = i;
+  if (!aid)
+  { sprintf(soap->tmpbuf, soap->dime_id_format, id);
+    aid = soap_strdup(soap, soap->tmpbuf);
+  }
+  if (soap_element_href(soap, tag, 0, "href", aid))
+    return soap->error;
+  if (soap->mode & SOAP_IO_LENGTH)
+  { if (pp->mark1 != 3)
+    { struct soap_multipart *content = soap_new_multipart(soap, &soap->dime.first, &soap->dime.last, (char*)a->__ptr, a->__size);
+      if (!content)
+      { soap->error = SOAP_EOM;
+        return -1;
+      }
+      content->id = aid;
+      content->type = atype;
+      content->options = aoptions;
+      pp->mark1 = 3;
+    }
+  }
+  else
+    pp->mark2 = 3;
+  return -1;
+}
+#endif
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+static void
+soap_init_iht(struct soap *soap)
+{ register int i;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Initializing ID hashtable\n"));
+  for (i = 0; i < SOAP_IDHASH; i++)
+    soap->iht[i] = NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+static void
+soap_free_iht(struct soap *soap)
+{ register int i;
+  register struct soap_ilist *ip, *p;
+  register struct soap_flist *fp, *fq;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free ID hashtable\n"));
+  for (i = 0; i < SOAP_IDHASH; i++)
+  { for (ip = soap->iht[i]; ip; ip = p)
+    { for (fp = ip->flist; fp; fp = fq)
+      { fq = fp->next;
+        SOAP_FREE(fp);
+      }
+      p = ip->next;
+      SOAP_FREE(ip);
+    }
+    soap->iht[i] = NULL;
+  }
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+static struct soap_ilist *
+soap_hlookup(struct soap *soap, const char *id)
+{ register struct soap_ilist *ip;
+  for (ip = soap->iht[soap_hash(id)]; ip; ip = ip->next)
+    if (!strcmp(ip->id, id))
+      return ip;
+  return NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+struct soap_ilist *
+SOAP_FMAC2
+soap_lookup(struct soap *soap, const char *id)
+{ register struct soap_ilist *ip;
+  ip = soap_hlookup(soap, id);
+#ifndef WITH_LEANER
+  if (!ip && *id != '#' && !strchr(id, ':')) /* try content id "cid:" with DIME attachments */
+  { char cid[SOAP_TAGLEN];
+    strcpy(cid, "cid:");
+    strncat(cid + 4, id, sizeof(cid) - 5);
+    cid[sizeof(cid) - 1] = '\0';
+    ip = soap_hlookup(soap, cid);
+  }
+#endif
+  return ip;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+struct soap_ilist *
+SOAP_FMAC2
+soap_enter(struct soap *soap, const char *id)
+{ register size_t h;
+  register struct soap_ilist *ip;
+  ip = (struct soap_ilist*)SOAP_MALLOC(sizeof(struct soap_ilist) + strlen(id));
+  if (ip)
+  { h = soap_hash(id);
+    strcpy(ip->id, id);
+    ip->next = soap->iht[h];
+    soap->iht[h] = ip;
+    return ip;
+  }
+  return NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void*
+SOAP_FMAC2
+soap_malloc(struct soap *soap, size_t n)
+{ register char *p;
+  if (!n)
+    return NULL;
+  if (!soap)
+    return SOAP_MALLOC(n);
+  n += (-(long)n) & 7;
+  if (!(p = (char*)SOAP_MALLOC(n + sizeof(void*) + sizeof(size_t))))
+  { soap->error = SOAP_EOM;
+    return NULL;
+  }
+  /* keep chain of alloced cells for later destruction */
+  soap->alloced = 1;
+  *(void**)(p + n) = soap->alist;
+  *(size_t*)(p + n + sizeof(void*)) = n;
+  soap->alist = p + n;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Malloc %u bytes at location %p\n", (unsigned int)n, p));
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_dealloc(struct soap *soap, void *p)
+{ if (!soap)
+    return;
+  if (p)
+  { register char **q;
+    for (q = (char**)&soap->alist; *q; q = *(char***)q)
+    { if (p == (void*)(*q - *(size_t*)(*q + sizeof(void*))))
+      { *q = **(char***)q;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Freed data at %p\n", p));
+        SOAP_FREE(p);
+        return;
+      }
+    }
+    soap_delete(soap, p);
+  }
+  else
+  { register char *q;
+    while (soap->alist)
+    { q = (char*)soap->alist;
+      soap->alist = *(void**)q;
+      q -= *(size_t*)(q + sizeof(void*));
+      SOAP_FREE(q);
+    }
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Dealloc all data done\n"));
+  }
+  /* we must assume these were deallocated: */
+  soap->action = NULL;
+  soap->fault = NULL;
+  soap->header = NULL;
+  soap->authrealm = NULL;
+#ifndef WITH_LEANER
+  soap_clr_mime(soap);
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_delete(struct soap *soap, void *p)
+{ register struct soap_clist **cp = &soap->clist;
+  if (p)
+  { while (*cp)
+    { if (p == (*cp)->ptr)
+      { register struct soap_clist *q = *cp;
+        *cp = q->next;
+        q->fdelete(q);
+        SOAP_FREE(q);
+        return;
+      }
+      cp = &(*cp)->next;
+    }
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not dealloc data %p: address not in list\n", p));
+  }
+  else
+  { while (*cp)
+    { register struct soap_clist *q = *cp;
+      *cp = q->next;
+      if (q->ptr == (void*)soap->fault)
+        soap->fault = NULL; /* this was deallocated */
+      else if (q->ptr == (void*)soap->header)
+        soap->header = NULL; /* this was deallocated */
+      q->fdelete(q);
+      SOAP_FREE(q);
+    }
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+struct soap_clist *
+SOAP_FMAC2
+soap_link(struct soap *soap, void *p, int t, int n, void (*fdelete)(struct soap_clist*))
+{ register struct soap_clist *cp;
+  if ((cp = (struct soap_clist*)SOAP_MALLOC(sizeof(struct soap_clist))))
+  { cp->next = soap->clist;
+    cp->type = t;
+    cp->size = n; 
+    cp->ptr = p;
+    cp->fdelete = fdelete;
+    soap->clist = cp;
+  }
+  return cp;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_unlink(struct soap *soap, const void *p)
+{ register char **q;
+  register struct soap_clist **cp;
+  if (!soap || !p)
+    return;
+  for (q = (char**)&soap->alist; *q; q = *(char***)q)
+  { if (p == (void*)(*q - *(size_t*)(*q + sizeof(void*))))
+    { *q = **(char***)q;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unlinked data %p\n", p));
+      return;
+    }
+  }
+  for (cp = &soap->clist; *cp; cp = &(*cp)->next)
+  { if (p == (*cp)->ptr)
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unlinked class instance %p\n", p));
+      q = (char**)*cp;
+      *cp = (*cp)->next;
+      SOAP_FREE(q);
+      return;
+    }
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_lookup_type(struct soap *soap, const char *id)
+{ register struct soap_ilist *ip;
+  if (id && *id)
+  { ip = soap_lookup(soap, id);
+    if (ip)
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup id='%s' type=%d\n", id, ip->type));
+      return ip->type;
+    }
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "lookup type id='%s' NOT FOUND! Need to get it from xsi:type\n", id));
+  return 0;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+void*
+SOAP_FMAC2
+soap_id_lookup(struct soap *soap, const char *id, void **p, int t, size_t n, unsigned int k)
+{ struct soap_ilist *ip;
+  void **q;
+  if (!p || !id || !*id)
+    return p;
+  ip = soap_lookup(soap, id); /* lookup pointer to hash table entry for string id */
+  if (!ip)
+  { ip = soap_enter(soap, id); /* new hash table entry for string id */
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding first href='%s' type=%d %p (%u bytes)\n", id, t, p, (unsigned int)n));
+    ip->type = t;
+    ip->size = n; 
+    ip->link = p;
+    ip->copy = NULL;
+    ip->flist = NULL;
+    ip->ptr = NULL;
+    ip->level = k;
+    *p = NULL;
+  }
+  else if (ip->ptr)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolved href='%s' type=%d location=%p (%u bytes)\n", id, t, ip->ptr, (unsigned int)n));
+    if (ip->type != t)
+    { strcpy(soap->id, id);
+      soap->error = SOAP_HREF;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Type incompatibility: id type=%d href type=%d\n", ip->type, t));
+      return NULL;
+    }
+    while (ip->level < k)
+    { q = (void**)soap_malloc(soap, sizeof(void*));  
+      if (!q)
+        return NULL;
+      *p = (void*)q;
+      p = q;
+      k--;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Descending one level...\n"));
+    }
+    *p = ip->ptr;
+  }
+  else if (ip->level > k)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving level %u pointers to href='%s'\n", ip->level, id));
+    while (ip->level > k)
+    { void *s, **r = &ip->link;
+      q = (void**)ip->link;
+      while (q)
+      { *r = (void*)soap_malloc(soap, sizeof(void*));
+        s = *q;
+        *q = *r;
+        r = (void**)*r;
+        q = (void**)s;
+      }
+      *r = NULL;
+      ip->size = n; 
+      ip->copy = NULL;
+      ip->level = ip->level - 1;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Descending one level...\n"));
+    }
+    q = (void**)ip->link;
+    ip->link = p;
+    *p = (void*)q;
+  }
+  else
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarded href='%s' type=%d location=%p (%u bytes)\n", id, t, p, (unsigned int)n));
+    while (ip->level < k)
+    { q = (void**)soap_malloc(soap, sizeof(void*));  
+      *p = q;
+      p = q;
+      k--;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Descending one level...\n"));
+    }
+    q = (void**)ip->link;
+    ip->link = p;
+    *p = (void*)q;
+  }
+  return p;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+void*
+SOAP_FMAC2
+soap_id_forward(struct soap *soap, const char *href, void *p, int st, int tt, size_t n, unsigned int k, void (*fcopy)(struct soap*, int, int, void*, const void*, size_t))
+{ struct soap_ilist *ip;
+  if (!p || !href || !*href)
+    return p;
+  ip = soap_lookup(soap, href); /* lookup pointer to hash table entry for string id */
+  if (!ip)
+  { ip = soap_enter(soap, href); /* new hash table entry for string id */
+    ip->type = st;
+    ip->size = n;
+    ip->link = NULL;
+    ip->copy = NULL;
+    ip->ptr = NULL;
+    ip->level = 0;
+    ip->flist = NULL;
+    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "New entry href='%s' type=%d size=%lu level=%d location=%p\n", href, st, (unsigned long)n, k, p));
+  }
+  else if (ip->type != st || (ip->level == k && ip->size != n))
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Type incompatibility id='%s' expect type=%d size=%lu level=%u got type=%d size=%lu\n", href, ip->type, (unsigned long)ip->size, k, st, (unsigned long)n));
+    strcpy(soap->id, href);
+    soap->error = SOAP_HREF;
+    return NULL;
+  }
+  if (fcopy || n < sizeof(void*) || *href != '#')
+  { register struct soap_flist *fp = (struct soap_flist*)SOAP_MALLOC(sizeof(struct soap_flist));
+    if (!fp)
+    { soap->error = SOAP_EOM;
+      return NULL;
+    }
+    fp->next = ip->flist;
+    fp->type = tt;
+    fp->ptr = p;
+    fp->level = k;
+    if (fcopy)
+      fp->fcopy = fcopy;
+    else
+      fp->fcopy = soap_fcopy;
+    ip->flist = fp;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding type=%d (target type=%d) size=%lu location=%p level=%u href='%s'\n", st, tt, (unsigned long)n, p, k, href));
+  }
+  else
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding copying address %p for type=%d href='%s'\n", p, st, href));
+    *(void**)p = ip->copy;
+    ip->copy = p;
+  }
+  return p;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void*
+SOAP_FMAC2
+soap_id_enter(struct soap *soap, const char *id, void *p, int t, size_t n, unsigned int k, const char *type, const char *arrayType, void *(*finstantiate)(struct soap*, int, const char*, const char*, size_t*))
+{ struct soap_ilist *ip;
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Enter id='%s' type=%d loc=%p size=%lu level=%u\n", id, t, p, (unsigned long)n, k));
+  soap->alloced = 0;
+  if (!p)
+  { if (finstantiate)
+      p = finstantiate(soap, t, type, arrayType, &n);
+    else
+      p = soap_malloc(soap, n);
+    if (p)
+      soap->alloced = 1;
+  }
+#ifndef WITH_NOIDREF
+  if (!id || !*id)
+#endif
+    return p;
+#ifndef WITH_NOIDREF
+  ip = soap_lookup(soap, id); /* lookup pointer to hash table entry for string id */
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Lookup entry id='%s for location=%p'\n", id, p));
+  if (!ip)
+  { ip = soap_enter(soap, id); /* new hash table entry for string id */
+    ip->type = t;
+    ip->link = NULL;
+    ip->copy = NULL;
+    ip->flist = NULL;
+    ip->size = n;
+    ip->ptr = p;
+    ip->level = k;
+    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "New entry id='%s' type=%d size=%lu level=%u location=%p\n", id, t, (unsigned long)n, k, p));
+  }
+  else if ((ip->type != t || (ip->level == k && ip->size != n)) && (ip->copy || ip->flist))
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Type incompatibility id='%s' expect type=%d size=%lu level=%u got type=%d size=%lu\n", id, ip->type, (unsigned long)ip->size, k, t, (unsigned long)n));
+    strcpy(soap->id, id);
+    soap->error = SOAP_HREF;
+    return NULL;
+  }
+  else if (ip->ptr)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Multiply defined id='%s'\n", id));
+    strcpy(soap->id, id);
+    soap->error = SOAP_MULTI_ID;
+    return NULL;
+  }
+  else 
+  { ip->size = n;
+    ip->ptr = p;
+    ip->level = k;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Update entry id='%s' type=%d location=%p size=%lu level=%u\n", id, t, p, (unsigned long)n, k));
+  }
+  return ip->ptr;
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_fcopy(struct soap *soap, int st, int tt, void *p, const void *q, size_t n)
+{ DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Copying data type=%d (target type=%d) %p -> %p (%lu bytes)\n", st, tt, q, p, (unsigned long)n));
+  memcpy(p, q, n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_end_send(struct soap *soap)
+{ 
+#ifndef WITH_LEANER
+  if (soap->dime.list)
+  { /* SOAP body referenced attachments must appear first */
+    soap->dime.last->next = soap->dime.first;
+    soap->dime.first = soap->dime.list->next;
+    soap->dime.list->next = NULL;
+    soap->dime.last = soap->dime.list;
+  }
+  if (soap_putdime(soap) || soap_putmime(soap))
+    return soap->error;
+  soap->mime.list = NULL;
+  soap->mime.first = NULL;
+  soap->mime.last = NULL;
+  soap->dime.list = NULL;
+  soap->dime.first = NULL;
+  soap->dime.last = NULL;
+#endif
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End send\n"));
+  if (soap->mode & SOAP_IO) /* need to flush the remaining data in buffer */
+  { if (soap_flush(soap))
+#ifdef WITH_ZLIB
+    { if (soap->mode & SOAP_ENC_ZLIB && soap->zlib_state == SOAP_ZLIB_DEFLATE)
+      { soap->zlib_state = SOAP_ZLIB_NONE;
+        deflateEnd(&soap->d_stream);
+      }
+      return soap->error;
+    }
+#else
+      return soap->error;
+#endif
+#ifdef WITH_ZLIB
+    if (soap->mode & SOAP_ENC_ZLIB)
+    { int r;
+      soap->d_stream.avail_in = 0;
+      do
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflating remainder\n"));
+        r = deflate(&soap->d_stream, Z_FINISH);
+        if (soap->d_stream.avail_out != SOAP_BUFLEN)
+        { if (soap_flush_raw(soap, soap->z_buf, SOAP_BUFLEN - soap->d_stream.avail_out))
+          { soap->zlib_state = SOAP_ZLIB_NONE;
+            deflateEnd(&soap->d_stream);
+            return soap->error;
+         }
+          soap->d_stream.next_out = (Byte*)soap->z_buf;
+          soap->d_stream.avail_out = SOAP_BUFLEN;
+        }
+      } while (r == Z_OK);
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflated %lu->%lu bytes\n", soap->d_stream.total_in, soap->d_stream.total_out));
+      soap->z_ratio_out = (float)soap->d_stream.total_out / (float)soap->d_stream.total_in;
+      soap->mode &= ~SOAP_ENC_ZLIB;
+      soap->zlib_state = SOAP_ZLIB_NONE;
+      if (deflateEnd(&soap->d_stream) != Z_OK || r != Z_STREAM_END)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unable to end deflate: %s\n", soap->d_stream.msg?soap->d_stream.msg:""));
+        return soap->error = SOAP_ZLIB_ERROR;
+      }
+#ifdef WITH_GZIP
+      soap->z_buf[0] = soap->z_crc & 0xFF;
+      soap->z_buf[1] = (soap->z_crc >> 8) & 0xFF;
+      soap->z_buf[2] = (soap->z_crc >> 16) & 0xFF;
+      soap->z_buf[3] = (soap->z_crc >> 24) & 0xFF;
+      soap->z_buf[4] = soap->d_stream.total_in & 0xFF;
+      soap->z_buf[5] = (soap->d_stream.total_in >> 8) & 0xFF;
+      soap->z_buf[6] = (soap->d_stream.total_in >> 16) & 0xFF;
+      soap->z_buf[7] = (soap->d_stream.total_in >> 24) & 0xFF;
+      if (soap_flush_raw(soap, soap->z_buf, 8))
+        return soap->error;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "gzip crc32=%lu\n", (unsigned long)soap->z_crc));
+#endif
+    }
+#endif
+    if ((soap->mode & SOAP_IO) == SOAP_IO_STORE)
+    { char *p;
+#ifndef WITH_NOHTTP
+      if (!(soap->mode & SOAP_ENC_XML))
+      { soap->mode--;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending buffered message of length %u\n", (unsigned int)soap->blist->size));
+        if (soap->status >= SOAP_POST)
+          soap->error = soap->fpost(soap, soap->endpoint, soap->host, soap->port, soap->path, soap->action, soap->blist->size);
+        else if (soap->status != SOAP_STOP)
+          soap->error = soap->fresponse(soap, soap->status, soap->blist->size);
+        if (soap->error || soap_flush(soap))
+          return soap->error;
+        soap->mode++;
+      }
+#endif
+      for (p = soap_first_block(soap); p; p = soap_next_block(soap))
+      { DBGMSG(SENT, p, soap_block_size(soap));
+        if ((soap->error = soap->fsend(soap, p, soap_block_size(soap))))
+        { soap_end_block(soap);
+          return soap->error;
+        }
+      }
+      soap_end_block(soap);
+    }
+#ifndef WITH_LEANER
+    else if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
+    { DBGMSG(SENT, "\r\n0\r\n\r\n", 7);
+      if ((soap->error = soap->fsend(soap, "\r\n0\r\n\r\n", 7)))
+        return soap->error;
+    }
+#endif
+  }
+#ifdef WITH_OPENSSL
+  if (!soap->ssl && soap_valid_socket(soap->socket) && !soap->keep_alive)
+    soap->fshutdownsocket(soap, (SOAP_SOCKET)soap->socket, 1); /* Send TCP FIN */
+#else
+  if (soap_valid_socket(soap->socket) && !soap->keep_alive)
+    soap->fshutdownsocket(soap, (SOAP_SOCKET)soap->socket, 1); /* Send TCP FIN */
+#endif
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of send message ok\n"));
+  soap->part = SOAP_END;
+  soap->count = 0;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_end_recv(struct soap *soap)
+{ soap->part = SOAP_END;
+#ifndef WITH_LEANER
+  if ((soap->mode & SOAP_ENC_MIME) && soap_getmime(soap))
+    return soap->error;
+  soap->mime.list = soap->mime.first;
+  soap->mime.first = NULL;
+  soap->mime.last = NULL;
+  soap->dime.list = soap->dime.first;
+  soap->dime.first = NULL;
+  soap->dime.last = NULL;
+#endif
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "End of receive message ok\n"));
+#ifdef WITH_ZLIB
+  if (soap->mode & SOAP_ENC_ZLIB)
+  { soap->mode &= ~SOAP_ENC_ZLIB;
+    memcpy(soap->buf, soap->z_buf, SOAP_BUFLEN);
+    soap->bufidx = (char*)soap->d_stream.next_in - soap->z_buf;
+    soap->buflen = soap->z_buflen;
+    soap->zlib_state = SOAP_ZLIB_NONE;
+    if (inflateEnd(&soap->d_stream) != Z_OK)
+      return soap->error = SOAP_ZLIB_ERROR;
+#ifdef WITH_GZIP
+    if (soap->zlib_in == SOAP_ZLIB_GZIP)
+    { soap_wchar c;
+      short i;
+      for (i = 0; i < 8; i++)
+      { if ((int)(c = soap_getchar(soap)) == EOF)
+          return soap->error = SOAP_EOF;
+        soap->z_buf[i] = (char)c;
+      }
+      if (soap->z_crc != ((uLong)(unsigned char)soap->z_buf[0] | ((uLong)(unsigned char)soap->z_buf[1] << 8) | ((uLong)(unsigned char)soap->z_buf[2] << 16) | ((uLong)(unsigned char)soap->z_buf[3] << 24)))
+      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Gzip error: crc check failed, message corrupted? (crc32=%lu)\n", (unsigned long)soap->z_crc));
+        return soap->error = SOAP_ZLIB_ERROR;
+      }
+      if (soap->d_stream.total_out != ((uLong)(unsigned char)soap->z_buf[4] | ((uLong)(unsigned char)soap->z_buf[5] << 8) | ((uLong)(unsigned char)soap->z_buf[6] << 16) | ((uLong)(unsigned char)soap->z_buf[7] << 24)))
+      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Gzip error: incorrect message length\n"));
+        return soap->error = SOAP_ZLIB_ERROR;
+      }
+    }
+#endif
+  }
+#endif
+  if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
+    while ((int)soap_getchar(soap) != EOF) /* advance to last chunk */
+      ;
+  if (soap->fdisconnect && (soap->error = soap->fdisconnect(soap)))
+    return soap->error;
+#ifndef WITH_NOIDREF
+  return soap_resolve(soap);
+#else
+  return SOAP_OK;
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_free(struct soap *soap)
+{ register struct soap_nlist *np;
+  register struct soap_attribute *tp;
+  register struct Namespace *ns;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free namespace stack\n"));
+  while (soap->nlist)
+  { np = soap->nlist->next;
+    if (soap->nlist->ns)
+      SOAP_FREE(soap->nlist->ns);
+    SOAP_FREE(soap->nlist);
+    soap->nlist = np;
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free any remaining temp blocks\n"));
+  while (soap->blist)
+    soap_end_block(soap);
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free attributes\n"));
+  while (soap->attributes)
+  { tp = soap->attributes->next;
+    if (soap->attributes->value)
+      SOAP_FREE(soap->attributes->value);
+    SOAP_FREE(soap->attributes);
+    soap->attributes = tp;
+  }
+#ifdef WITH_FAST
+  if (soap->labbuf)
+    SOAP_FREE(soap->labbuf);
+  soap->labbuf = NULL;
+  soap->lablen = 0;
+  soap->labidx = 0;
+#endif
+#ifndef WITH_NOIDREF
+  soap_free_pht(soap);
+  soap_free_iht(soap);
+#endif
+  ns = soap->local_namespaces;
+  if (ns)
+  { for (; ns->id; ns++)
+    { if (ns->out)
+      { SOAP_FREE(ns->out);
+       if (soap->encodingStyle == ns->out)
+          soap->encodingStyle = SOAP_STR_EOS;
+        ns->out = NULL;
+      }
+      if (soap->encodingStyle == ns->ns)
+        soap->encodingStyle = SOAP_STR_EOS;
+    }
+    SOAP_FREE(soap->local_namespaces);
+    soap->local_namespaces = NULL;
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+static void
+soap_init_logs(struct soap *soap)
+{ int i;
+  for (i = 0; i < SOAP_MAXLOGS; i++)
+  { soap->logfile[i] = NULL;
+    soap->fdebug[i] = NULL;
+  }
+}
+#endif
+
+/******************************************************************************/
+#if !defined(WITH_LEAN) || defined(SOAP_DEBUG)
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_open_logfile(struct soap *soap, int i)
+{ if (soap->logfile[i])
+    soap->fdebug[i] = fopen(soap->logfile[i], i < 2 ? "ab" : "a");
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+static void
+soap_close_logfile(struct soap *soap, int i)
+{ if (soap->fdebug[i])
+  { fclose(soap->fdebug[i]);
+    soap->fdebug[i] = NULL;
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_close_logfiles(struct soap *soap)
+{ int i;
+  for (i = 0; i < SOAP_MAXLOGS; i++)
+    soap_close_logfile(soap, i);
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+static void
+soap_set_logfile(struct soap *soap, int i, const char *logfile)
+{ char *s = NULL;
+  soap_close_logfile(soap, i);
+  if (soap->logfile[i])
+    SOAP_FREE((void*)soap->logfile[i]);
+  if (logfile)
+    if ((s = (char*)SOAP_MALLOC(strlen(logfile) + 1)))
+      strcpy(s, logfile);
+  soap->logfile[i] = s;
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_recv_logfile(struct soap *soap, const char *logfile)
+{ soap_set_logfile(soap, SOAP_INDEX_RECV, logfile);
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_sent_logfile(struct soap *soap, const char *logfile)
+{ soap_set_logfile(soap, SOAP_INDEX_SENT, logfile);
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_test_logfile(struct soap *soap, const char *logfile)
+{ soap_set_logfile(soap, SOAP_INDEX_TEST, logfile);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap*
+SOAP_FMAC2
+soap_copy(struct soap *soap)
+{ return soap_copy_context((struct soap*)SOAP_MALLOC(sizeof(struct soap)), soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap*
+SOAP_FMAC2
+soap_copy_context(struct soap *copy, struct soap *soap)
+{ if (copy)
+  { register struct soap_plugin *p;
+    memcpy(copy, soap, sizeof(struct soap));
+    copy->copy = 1;
+    copy->user = NULL;
+    copy->userid = NULL;
+    copy->passwd = NULL;
+    copy->nlist = NULL;
+    copy->blist = NULL;
+    copy->clist = NULL;
+    copy->alist = NULL;
+    copy->attributes = NULL;
+    copy->local_namespaces = NULL;
+    soap_set_local_namespaces(copy);
+#ifndef WITH_NOIDREF
+    soap_init_iht(copy);
+    soap_init_pht(copy);
+#endif
+    copy->header = NULL;
+    copy->fault = NULL;
+    copy->action = NULL;
+    *copy->host = '\0';
+#ifndef WITH_LEAN
+#ifdef WITH_COOKIES
+    copy->cookies = soap_copy_cookies(soap);
+#else
+    copy->cookies = NULL;
+#endif
+#endif
+#ifdef SOAP_DEBUG
+    soap_init_logs(copy);
+    soap_set_recv_logfile(copy, "RECV.log");
+    soap_set_sent_logfile(copy, "SENT.log");
+    soap_set_test_logfile(copy, "TEST.log");
+#endif
+    copy->plugins = NULL;
+    for (p = soap->plugins; p; p = p->next)
+    { register struct soap_plugin *q = (struct soap_plugin*)SOAP_MALLOC(sizeof(struct soap_plugin));
+      if (!q)
+        return NULL;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying plugin '%s'\n", p->id));
+      *q = *p;
+      if (p->fcopy && (soap->error = p->fcopy(soap, q, p)))
+      { SOAP_FREE(q);
+        return NULL;
+      }
+      q->next = copy->plugins;
+      copy->plugins = q;
+    }
+  }
+  else
+    soap->error = SOAP_EOM;
+  return copy;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_init(struct soap *soap)
+{ soap->version = 0;
+  soap_imode(soap, SOAP_IO_DEFAULT);
+  soap_omode(soap, SOAP_IO_DEFAULT);
+  soap->copy = 0;
+  soap->plugins = NULL;
+  soap->user = NULL;
+  soap->userid = NULL;
+  soap->passwd = NULL;
+#ifndef WITH_NOHTTP
+  soap->fpost = http_post;
+  soap->fget = http_get;
+  soap->fposthdr = http_post_header;
+  soap->fresponse = http_response;
+  soap->fparse = http_parse;
+  soap->fparsehdr = http_parse_header;
+#endif
+  soap->fconnect = NULL;
+  soap->fdisconnect = NULL;
+#ifndef WITH_NOIO
+#ifndef WITH_IPV6
+  soap->fresolve = tcp_gethost;
+#else
+  soap->fresolve = NULL;
+#endif
+  soap->faccept = tcp_accept;
+  soap->fopen = tcp_connect;
+  soap->fclose = tcp_disconnect;
+  soap->fclosesocket = tcp_closesocket;
+  soap->fshutdownsocket = tcp_shutdownsocket;
+  soap->fsend = fsend;
+  soap->frecv = frecv;
+  soap->fpoll = soap_poll;
+#else
+  soap->fopen = NULL;
+  soap->fclose = NULL;
+  soap->fpoll = NULL;
+#endif
+#ifndef WITH_LEANER
+  soap->fprepareinit = NULL;
+  soap->fpreparesend = NULL;
+  soap->fpreparerecv = NULL;
+#endif
+  soap->fignore = NULL;
+  soap->fserveloop = NULL;
+  soap->fplugin = fplugin;
+#ifndef WITH_LEANER
+  soap->fdimereadopen = NULL;
+  soap->fdimewriteopen = NULL;
+  soap->fdimereadclose = NULL;
+  soap->fdimewriteclose = NULL;
+  soap->fdimeread = NULL;
+  soap->fdimewrite = NULL;
+#endif
+  soap->float_format = "%.8g"; /* .8 preserves single FP precision as much as possible, but might not be very efficient */
+  soap->double_format = "%.17lg"; /* .17 preserves double FP precision as much as possible, but might not be very efficient */
+  soap->dime_id_format = "cid:id%d"; /* default DIME id format */
+  soap->http_version = "1.1";
+  soap->actor = NULL;
+  soap->max_keep_alive = SOAP_MAXKEEPALIVE;
+  soap->keep_alive = 0;
+  soap->recv_timeout = 0;
+  soap->send_timeout = 0;
+  soap->connect_timeout = 0;
+  soap->accept_timeout = 0;
+  soap->socket_flags = 0;
+  soap->connect_flags = 0;
+  soap->bind_flags = 0;
+  soap->accept_flags = 0;
+  soap->ip = 0;
+#ifdef WITH_FAST
+  soap->labbuf = NULL;
+  soap->lablen = 0;
+  soap->labidx = 0;
+#endif
+  soap->encodingStyle = SOAP_STR_EOS;
+#ifndef WITH_NONAMESPACES
+  soap->namespaces = namespaces;
+#else
+  soap->namespaces = NULL;
+#endif
+  soap->local_namespaces = NULL;
+  soap->nlist = NULL;
+  soap->blist = NULL;
+  soap->clist = NULL;
+  soap->alist = NULL;
+  soap->attributes = NULL;
+  soap->header = NULL;
+  soap->fault = NULL;
+  soap->master = SOAP_INVALID_SOCKET;
+  soap->socket = SOAP_INVALID_SOCKET;
+  soap->os = NULL;
+  soap->is = NULL;
+#ifndef WITH_LEANER
+  soap->dom = NULL;
+  soap->dime.list = NULL;
+  soap->dime.first = NULL;
+  soap->dime.last = NULL;
+  soap->mime.list = NULL;
+  soap->mime.first = NULL;
+  soap->mime.last = NULL;
+  soap->mime.boundary = NULL;
+  soap->mime.start = NULL;
+#endif
+#ifndef UNDER_CE
+  soap->recvfd = 0;
+  soap->sendfd = 1;
+#else
+  soap->recvfd = stdin;
+  soap->sendfd = stdout;
+#endif 
+  soap->host[0] = '\0';
+  soap->port = 0;
+  soap->action = NULL;
+  soap->proxy_host = NULL;
+  soap->proxy_port = 8080;
+  soap->proxy_userid = NULL;
+  soap->proxy_passwd = NULL;
+  soap->authrealm = NULL;
+  soap->prolog = NULL;
+#ifdef WITH_OPENSSL
+  soap->fsslauth = ssl_auth_init;
+  soap->fsslverify = ssl_verify_callback;
+  soap->bio = NULL;
+  soap->ssl = NULL;
+  soap->ctx = NULL;
+  soap->require_server_auth = 0;
+  soap->require_client_auth = 0;
+  soap->rsa = 0;
+  soap->keyfile = NULL;
+  soap->password = NULL;
+  soap->dhfile = NULL;
+  soap->cafile = NULL;
+  soap->capath = NULL;
+  soap->randfile = NULL;
+  soap->session = NULL;
+#endif
+#ifdef WITH_ZLIB
+  soap->zlib_state = SOAP_ZLIB_NONE;
+  soap->zlib_in = SOAP_ZLIB_NONE;
+  soap->zlib_out = SOAP_ZLIB_NONE;
+  soap->d_stream.zalloc = NULL;
+  soap->d_stream.zfree = NULL;
+  soap->d_stream.opaque = NULL;
+  soap->z_level = 6;
+#endif
+#ifndef WITH_LEAN
+  soap->cookies = NULL;
+  soap->cookie_domain = NULL;
+  soap->cookie_path = NULL;
+  soap->cookie_max = 32;
+#endif
+#ifdef SOAP_DEBUG
+  soap_init_logs(soap);
+  soap_set_recv_logfile(soap, "RECV.log");
+  soap_set_sent_logfile(soap, "SENT.log");
+  soap_set_test_logfile(soap, NULL);
+#endif
+/* WR[ */
+#ifdef WMW_RPM_IO
+  soap->rpmreqid = NULL;
+#endif /* WMW_RPM_IO */
+/* ]WR */
+#ifdef PALM
+  palmNetLibOpen();
+#endif
+#ifndef WITH_NOIDREF
+  soap_init_iht(soap);
+  soap_init_pht(soap);
+#endif
+  soap_begin(soap);
+#ifdef SOAP_DEBUG
+  soap_set_test_logfile(soap, "TEST.log");
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_init1(struct soap *soap, soap_mode mode)
+{ soap_init2(soap, mode, mode);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_init2(struct soap *soap, soap_mode imode, soap_mode omode)
+{ soap_init(soap);
+  soap_imode(soap, imode);
+  soap_omode(soap, omode);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_begin(struct soap *soap)
+{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Initializing\n"));
+  if (!soap->keep_alive)
+  { soap->buflen = 0;
+    soap->bufidx = 0;
+  }
+  soap->keep_alive = (((soap->imode | soap->omode) & SOAP_IO_KEEPALIVE) != 0);
+  soap->null = 0;
+  soap->position = 0;
+  soap->encoding = 0;
+  soap->mustUnderstand = 0;
+  soap->mode = 0;
+  soap->ns = 0;
+  soap->part = SOAP_BEGIN;
+  soap->alloced = 0;
+  soap->count = 0;
+  soap->length = 0;
+  soap->cdata = 0;
+  soap->error = SOAP_OK;
+  soap->peeked = 0;
+  soap->ahead = 0;
+  soap->idnum = 0;
+  soap->level = 0;
+  soap->endpoint[0] = '\0';
+#ifndef WITH_LEANER
+  soap->dime.chunksize = 0;
+  soap->dime.buflen = 0;
+#endif
+  soap_free(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_end(struct soap *soap)
+{ register struct soap_clist *cp;
+  soap_free(soap);
+  soap_dealloc(soap, NULL);
+  while (soap->clist)
+  { cp = soap->clist->next;
+    SOAP_FREE(soap->clist);
+    soap->clist = cp;
+  }
+  soap_closesock(soap);
+#ifdef SOAP_DEBUG
+  soap_close_logfiles(soap);
+#endif
+#ifdef PALM
+  palmNetLibClose();
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_namespaces(struct soap *soap, struct Namespace *p)
+{ struct Namespace *ns = soap->local_namespaces;
+  struct soap_nlist *np, *nq, *nr;
+  unsigned int level = soap->level;
+  soap->namespaces = p;
+  soap->local_namespaces = NULL;
+  soap_set_local_namespaces(soap);
+  /* reverse the list */
+  np = soap->nlist;
+  soap->nlist = NULL;
+  if (np)
+  { nq = np->next;
+    np->next = NULL;
+    while (nq)
+    { nr = nq->next;
+      nq->next = np;
+      np = nq;
+      nq = nr;
+    }
+  }
+  while (np)
+  { soap->level = np->level; /* preserve element nesting level */
+    if (np->ns)
+    { if (soap_push_namespace(soap, np->id, np->ns))
+        return soap->error;
+    }
+    else if (np->index >= 0 && ns)
+    { if (ns[np->index].out)
+      { if (soap_push_namespace(soap, np->id, ns[np->index].out))
+          return soap->error;
+      }
+      else if (soap_push_namespace(soap, np->id, ns[np->index].ns))
+        return soap->error;
+    }
+    if (np->ns)
+      SOAP_FREE(np->ns);
+    nq = np;
+    np = np->next;
+    SOAP_FREE(nq);
+  }
+  if (ns)
+  { int i;
+    for (i = 0; ns[i].id; i++)
+    { if (ns[i].out)
+      { SOAP_FREE(ns[i].out);
+        ns[i].out = NULL;
+      }
+    }
+    SOAP_FREE(ns);
+  }
+  soap->level = level; /* restore level */
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static void
+soap_set_local_namespaces(struct soap *soap)
+{ if (soap->namespaces && !soap->local_namespaces)
+  { register const struct Namespace *ns1;
+    register struct Namespace *ns2;
+    register size_t n = 1;
+    for (ns1 = soap->namespaces; ns1->id; ns1++)
+      n++;
+    n *= sizeof(struct Namespace);
+    ns2 = (struct Namespace*)SOAP_MALLOC(n);
+    if (ns2)
+    { memcpy(ns2, soap->namespaces, n);
+      if (ns2[0].ns)
+      { if (!strcmp(ns2[0].ns, soap_env1))
+          soap->version = 1;
+        else
+          soap->version = 2;
+      }
+      soap->local_namespaces = ns2;
+    }
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element(struct soap *soap, const char *tag, int id, const char *type)
+{ struct Namespace *ns = soap->local_namespaces;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element begin tag='%s' id='%d' type='%s'\n", tag, id, type?type:""));
+/**/
+#ifdef WITH_DOM
+  if (soap->mode & SOAP_XML_DOM)
+  { register struct soap_dom_element *p, *e = (struct soap_dom_element*)soap_malloc(soap, sizeof(struct soap_dom_element));
+    e->next = NULL;
+    e->prnt = soap->dom;
+    e->nstr = NULL;
+    e->name = soap_strdup(soap, tag); /* check EOM? */
+    e->data = NULL;
+    e->type = 0;
+    e->node = NULL;
+    e->elts = NULL;
+    e->atts = NULL;
+    if (soap->dom)
+    { p = soap->dom->elts;
+      if (p)
+      { while (p->next)
+          p = p->next;
+        p->next = e;
+      }
+      else
+        soap->dom->elts = e;
+    }
+    soap->dom = e;
+  }
+  else
+#endif
+{
+  soap->level++;
+  if (!soap->ns && !(soap->mode & SOAP_XML_CANONICAL))
+    if (soap_send(soap, soap->prolog ? soap->prolog : "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"))
+      return soap->error;
+  if (soap_send_raw(soap, "<", 1)
+   || soap_send(soap, tag))
+    return soap->error;
+}
+/**/
+  if (!soap->ns)
+  { for (ns = soap->local_namespaces; ns && ns->id; ns++)
+    { if (*ns->id && (ns->out || ns->ns))
+      { sprintf(soap->tmpbuf, "xmlns:%s", ns->id);
+        if (soap_attribute(soap, soap->tmpbuf, ns->out ? ns->out : ns->ns))
+          return soap->error;
+      }
+    }   
+    soap->ns = 1;
+  }
+  if (id > 0)
+  { sprintf(soap->tmpbuf, "_%d", id);
+    if (soap_attribute(soap, "id", soap->tmpbuf))
+      return soap->error;
+  }
+  if (type && *type)
+  { if (soap_attribute(soap, "xsi:type", type))
+      return soap->error;
+  }
+  if (soap->null && soap->position > 0)
+  { int i;
+    sprintf(soap->tmpbuf, "[%d", soap->positions[0]);
+    for (i = 1; i < soap->position; i++)
+      sprintf(soap->tmpbuf + strlen(soap->tmpbuf), ",%d", soap->positions[i]);
+    strcat(soap->tmpbuf, "]");
+    if (soap_attribute(soap, "SOAP-ENC:position", soap->tmpbuf))
+      return soap->error;
+  }
+  if (soap->mustUnderstand)
+  { if (soap->actor && *soap->actor)
+    { if (soap_attribute(soap, soap->version == 2 ? "SOAP-ENV:role" : "SOAP-ENV:actor", soap->actor))
+        return soap->error;
+    }
+    if (soap_attribute(soap, "SOAP-ENV:mustUnderstand", soap->version == 2 ? "true" : "1"))
+      return soap->error;
+    soap->mustUnderstand = 0;
+  }
+  if (soap->encoding)
+  { if (soap->encodingStyle && soap->local_namespaces)
+    { if (!*soap->encodingStyle)
+      { if (soap->local_namespaces[1].out)
+          soap->encodingStyle = soap->local_namespaces[1].out;
+        else
+          soap->encodingStyle = soap->local_namespaces[1].ns;
+      }
+      if (soap_attribute(soap, "SOAP-ENV:encodingStyle", soap->encodingStyle))
+        return soap->error;
+    }
+    soap->encoding = 0;
+  }
+  soap->null = 0;
+  soap->position = 0;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_begin_out(struct soap *soap, const char *tag, int id, const char *type)
+{ if (*tag == '-')
+    return SOAP_OK;
+  if (soap_element(soap, tag, id, type))
+    return soap->error;
+  return soap_element_start_end_out(soap, NULL);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+#ifndef HAVE_STRRCHR
+SOAP_FMAC1
+char*
+SOAP_FMAC2
+soap_strrchr(const char *s, int t)
+{ register char *r = NULL;
+  while (*s)
+    if (*s++ == t)
+      r = (char*)s - 1;
+  return r;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+#ifndef HAVE_STRTOL
+SOAP_FMAC1
+long
+SOAP_FMAC2
+soap_strtol(const char *s, char **t, int b)
+{ register long n = 0;
+  register int c;
+  while (*s > 0 && *s <= 32)
+    s++;
+  if (b == 10)
+  { short neg = 0;
+    if (*s == '-')
+    { s++;
+      neg = 1;
+    }
+    else if (*s == '+')
+      s++;
+    while ((c = *s) && c >= '0' && c <= '9')
+    { if (n > 214748364)
+        break;
+      n *= 10;
+      n += c - '0';
+      s++;
+    }
+    if (neg)
+      n = -n;
+  }
+  else /* b == 16 and value is always positive */
+  { while ((c = *s))
+    { if (c >= '0' && c <= '9')
+        c -= '0';
+      else if (c >= 'A' && c <= 'F')
+        c -= 'A' - 10;
+      else if (c >= 'a' && c <= 'f')
+        c -= 'a' - 10;
+      if (n > 0x07FFFFFF)
+        break;
+      n <<= 4;
+      n += c;
+      s++;
+    }
+  }
+  if (t)
+    *t = (char*)s;
+  return n;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+#ifndef HAVE_STRTOUL
+SOAP_FMAC1
+unsigned long
+SOAP_FMAC2
+soap_strtoul(const char *s, char **t, int b)
+{ unsigned long n = 0;
+  register int c;
+  while (*s > 0 && *s <= 32)
+    s++;
+  if (b == 10)
+  { if (*s == '+')
+      s++;
+    while ((c = *s) && c >= '0' && c <= '9')
+    { if (n > 429496729)
+        break;
+      n *= 10;
+      n += c - '0';
+      s++;
+    }
+  }
+  else /* b == 16 */
+  { while ((c = *s))
+    { if (c >= '0' && c <= '9')
+        c -= '0';
+      else if (c >= 'A' && c <= 'F')
+        c -= 'A' - 10;
+      else if (c >= 'a' && c <= 'f')
+        c -= 'a' - 10;
+      if (n > 0x0FFFFFFF)
+        break;
+      n <<= 4;
+      n += c;
+      s++;
+    }
+  }
+  if (t)
+    *t = (char*)s;
+  return n;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_array_begin_out(struct soap *soap, const char *tag, int id, const char *type, const char *offset)
+{ if (soap_element(soap, tag, id, "SOAP-ENC:Array"))
+    return soap->error;
+  if (soap->version == 2)
+  { const char *s;
+    s = soap_strrchr(type, '[');
+    if ((size_t)(s - type) < sizeof(soap->tmpbuf))
+    { strncpy(soap->tmpbuf, type, s - type);
+      soap->tmpbuf[s - type] = '\0';
+      if (type && *type && (soap_attribute(soap, "SOAP-ENC:itemType", soap->tmpbuf)))
+        return soap->error;
+      if (s && (soap_attribute(soap, "SOAP-ENC:arraySize", s + 1)))
+        return soap->error;
+    }
+  }
+  else
+  { if (offset && (soap_attribute(soap, "SOAP-ENC:offset", offset)))
+      return soap->error;
+    if (type && *type && (soap_attribute(soap, "SOAP-ENC:arrayType", type)))
+      return soap->error;
+  }
+  return soap_element_start_end_out(soap, NULL);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_start_end_out(struct soap *soap, const char *tag)
+{ register struct soap_attribute *tp;
+/**/
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { for (tp = soap->attributes; tp; tp = tp->next)
+    { if (tp->visible)
+      { register struct soap_dom_attribute *a = (struct soap_dom_attribute*)soap_malloc(soap, sizeof(struct soap_dom_attribute));
+       a->next = soap->dom->atts;
+        a->nstr = NULL;
+        a->name = soap_strdup(soap, tp->name); /* check EOM */
+        a->data = soap_strdup(soap, tp->value); /* check EOM */
+        a->wide = NULL;
+       soap->dom->atts = a;
+        tp->visible = 0;
+      }
+    }
+    return SOAP_OK;
+  }
+#endif
+/**/
+  for (tp = soap->attributes; tp; tp = tp->next)
+  { if (tp->visible)
+    { if (soap_send(soap, " ") || soap_send(soap, tp->name))
+        return soap->error;
+      if (tp->visible == 2 && tp->value)
+        if (soap_send_raw(soap, "=\"", 2)
+        || soap_string_out(soap, tp->value, 1)
+        || soap_send_raw(soap, "\"", 1))
+          return soap->error;
+      tp->visible = 0;
+    }
+  }
+  if (tag)
+  { soap->level--;
+#ifndef WITH_LEAN
+    if (soap->mode & SOAP_XML_CANONICAL)
+    { if (soap_send_raw(soap, ">", 1)
+       || soap_element_end_out(soap, tag))
+        return soap->error;
+      return SOAP_OK;
+    }
+#endif
+    return soap_send_raw(soap, "/>", 2);
+  }
+  return soap_send_raw(soap, ">", 1);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_end_out(struct soap *soap, const char *tag)
+{ if (*tag == '-')
+    return SOAP_OK;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element ending tag='%s'\n", tag));
+/**/
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { if (soap->dom->prnt)
+      soap->dom = soap->dom->prnt;
+    return SOAP_OK;
+  }
+#endif
+/**/
+  soap->level--;
+  if (soap_send_raw(soap, "</", 2)
+   || soap_send(soap, tag))
+    return soap->error;
+  return soap_send_raw(soap, ">", 1);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_ref(struct soap *soap, const char *tag, int id, int href)
+{ register int n = 0;
+  if (soap->version == 2)
+    n = 1;
+  sprintf(soap->href, "#_%d", href);
+  return soap_element_href(soap, tag, id, "href" + n, soap->href + n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_href(struct soap *soap, const char *tag, int id, const char *ref, const char *val)
+{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element '%s' reference %s='%s'\n", tag, ref, val));
+  if (soap_element(soap, tag, id, NULL)
+   || soap_attribute(soap, ref, val)
+   || soap_element_start_end_out(soap, tag))
+    return soap->error;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_null(struct soap *soap, const char *tag, int id, const char *type)
+{ struct soap_attribute *tp;
+  for (tp = soap->attributes; tp; tp = tp->next)
+    if (tp->visible)
+      break;
+  if (tp || (soap->version == 2 && soap->position > 0) || id > 0 || (soap->mode & SOAP_XML_NIL))
+  { if (soap_element(soap, tag, id, type))
+      return soap->error;
+    if (soap->part != SOAP_IN_HEADER && soap->encodingStyle)
+      if (soap_attribute(soap, "xsi:nil", "true"))
+        return soap->error;
+    return soap_element_start_end_out(soap, tag);
+  }
+  soap->null = 1;
+  soap->position = 0;
+  soap->mustUnderstand = 0;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_id(struct soap *soap, const char *tag, int id, const void *p, const struct soap_array *a, int n, const char *type, int t) 
+{ if (!p || (a && !a->__ptr))
+  { soap_element_null(soap, tag, id, type);
+    return -1;
+  }
+#ifndef WITH_NOIDREF
+  if (soap->mode & SOAP_XML_TREE)
+    return 0;
+  if (id < 0)
+  { struct soap_plist *pp;
+    if (a)
+      id = soap_array_pointer_lookup(soap, p, a, n, t, &pp);
+    else
+      id = soap_pointer_lookup(soap, p, t, &pp);
+    if (id)
+    { if (soap_is_embedded(soap, pp))
+      { soap_element_ref(soap, tag, 0, id);
+        return -1;
+      }
+      if (soap_is_single(soap, pp))
+        return 0;
+      soap_set_embedded(soap, pp);
+    }
+  }
+  return id;
+#else
+  return 0;
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_result(struct soap *soap, const char *tag)
+{ if (soap->version == 2 && soap->encodingStyle)
+    if (soap_element(soap, "SOAP-RPC:result", 0, NULL)
+     || soap_attribute(soap, "xmlns:SOAP-RPC", soap_rpc)
+     || soap_element_start_end_out(soap, NULL)
+     || soap_string_out(soap, tag, 0)
+     || soap_element_end_out(soap, "SOAP-RPC:result"))
+      return soap->error;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_attribute(struct soap *soap, const char *name, const char *value)
+{ 
+/**/
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { register struct soap_dom_attribute *a = (struct soap_dom_attribute*)soap_malloc(soap, sizeof(struct soap_dom_attribute));
+    a->next = soap->dom->atts;
+    a->nstr = NULL;
+    a->name = soap_strdup(soap, name); /* check EOM */
+    a->data = soap_strdup(soap, value); /* check EOM */
+    a->wide = NULL;
+    soap->dom->atts = a;
+    return SOAP_OK;
+  }
+#endif
+/**/
+#ifndef WITH_LEAN
+  if (soap->mode & SOAP_XML_CANONICAL)
+  { if (soap_set_attr(soap, name, value))
+      return soap->error;
+  }
+  else
+#endif
+  { if (soap_send(soap, " ") || soap_send(soap, name))
+      return soap->error;
+    if (value)
+      if (soap_send_raw(soap, "=\"", 2)
+       || soap_string_out(soap, value, 1)
+       || soap_send_raw(soap, "\"", 1))
+        return soap->error;
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_begin_in(struct soap *soap, const char *tag, int nillable)
+{ if (!soap_peek_element(soap))
+  { if (soap->other)
+      return soap->error = SOAP_TAG_MISMATCH;
+    if (tag && *tag == '-')
+      return SOAP_OK;
+    if (!(soap->error = soap_match_tag(soap, soap->tag, tag)))
+    { soap->peeked = 0;
+      if (soap->body)
+        soap->level++;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Begin element found (level=%u) '%s'='%s'\n", soap->level, soap->tag, tag?tag:"" ));
+      if (!nillable && soap->null && (soap->mode & SOAP_XML_STRICT))
+        return soap->error = SOAP_NULL;
+    }
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_end_in(struct soap *soap, const char *tag)  
+{ register soap_wchar c;
+  register char *s;
+  register const char *t;
+  register int n = 0;
+  if (tag && *tag == '-')
+    return SOAP_OK;
+  soap->level--;
+  soap_pop_namespace(soap);
+  if (soap->error == SOAP_NO_TAG)
+    soap->error = SOAP_OK;
+  if (soap->peeked && *soap->tag)
+    n++;
+  soap->peeked = 0;
+  do
+  { while (((c = soap_get(soap)) != SOAP_TT))
+    { if ((int)c == EOF)
+        return soap->error = SOAP_EOF;
+      if (c == SOAP_LT)
+        n++;
+    }
+  } while (n--);
+  s = soap->tag;
+  do c = soap_get(soap);
+  while (soap_blank(c));
+  do
+  { *s++ = (char)c;
+    c = soap_get(soap);
+  } while (soap_notblank(c));
+  *s = '\0';
+  if ((int)c == EOF)
+    return soap->error = SOAP_EOF;
+  while (soap_blank(c))
+    c = soap_get(soap);
+  if (c != SOAP_GT)
+    return soap->error = SOAP_SYNTAX_ERROR;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End element found (level=%u) '%s'='%s'\n", soap->level, soap->tag, tag?tag:""));
+  if (!tag)
+    return SOAP_OK;
+  if ((s = strchr(soap->tag, ':')))
+    s++;
+  else
+    s = soap->tag;
+  if ((t = strchr(tag, ':')))
+    t++;
+  else
+    t = tag;
+  if (!SOAP_STRCMP(s, t))
+    return SOAP_OK;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End element tag name does not match\n"));
+  return soap->error = SOAP_SYNTAX_ERROR;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char *
+SOAP_FMAC2
+soap_attr_value(struct soap *soap, const char *name, int flag)
+{ register struct soap_attribute *tp;
+  for (tp = soap->attributes; tp; tp = tp->next)
+    if (!soap_match_tag(soap, tp->name, name))
+      break;
+  if (tp && tp->visible == 2)
+  { if (flag == 2 && (soap->mode & SOAP_XML_STRICT))
+      soap->error = SOAP_PROHIBITED;
+    else
+      return tp->value;
+  }
+  else if (flag == 1 && (soap->mode & SOAP_XML_STRICT))
+    soap->error = SOAP_REQUIRED;
+  return NULL;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_attr(struct soap *soap, const char *name, const char *value)
+{ register struct soap_attribute *tp;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set attribute %s='%s'\n", name, value?value:""));
+  for (tp = soap->attributes; tp; tp = tp->next)
+    if (!strcmp(tp->name, name))
+      break;
+  if (!tp)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Allocate attribute %s\n", name));
+    if (!(tp = (struct soap_attribute*)SOAP_MALLOC(sizeof(struct soap_attribute) + strlen(name))))
+      return soap->error = SOAP_EOM;
+    tp->ns = NULL;
+#ifndef WITH_LEAN
+    if (soap->mode & SOAP_XML_CANONICAL)
+    { struct soap_attribute **tpp = &soap->attributes;
+      const char *s = strchr(name, ':');
+      if (!strncmp(name, "xmlns", 5))
+      { for (; *tpp; tpp = &(*tpp)->next)
+          if (strncmp((*tpp)->name, "xmlns", 5) || strcmp((*tpp)->name + 5, name + 5) > 0)
+            break;
+      }
+      else if (!s)
+      { for (; *tpp; tpp = &(*tpp)->next)
+          if (strncmp((*tpp)->name, "xmlns", 5) && ((*tpp)->ns || strcmp((*tpp)->name, name) > 0))
+            break;
+      }
+      else
+      { int k;
+        for (; *tpp; tpp = &(*tpp)->next)
+       { if (!strncmp((*tpp)->name, "xmlns:", 6) && !strncmp((*tpp)->name + 6, name, s - name) && !(*tpp)->name[6 + s - name])
+         { if (!tp->ns)
+            { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Canonicalization: prefix %s=%p(%s)\n", name, (*tpp)->ns, (*tpp)->ns));
+             tp->ns = (*tpp)->ns;
+           }
+         }
+          else if (strncmp((*tpp)->name, "xmlns", 5) && (*tpp)->ns && tp->ns && ((k = strcmp((*tpp)->ns, tp->ns)) > 0 || (!k && strcmp((*tpp)->name, name) > 0)))
+            break;
+        }
+      }
+      tp->next = *tpp;
+      *tpp = tp;
+    }
+    else
+#endif
+    { tp->next = soap->attributes;
+      soap->attributes = tp;
+    }
+    strcpy(tp->name, name);
+    tp->value = NULL;
+  }
+  else if (value && tp->value && tp->size <= strlen(value))
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free attribute value of %s (free %p)\n", name, tp->value));
+    SOAP_FREE(tp->value);
+    tp->value = NULL;
+    tp->ns = NULL;
+  }
+  if (value)
+  { if (!tp->value)
+    { tp->size = strlen(value) + 1;
+      if (!(tp->value = (char*)SOAP_MALLOC(tp->size)))
+        return soap->error = SOAP_EOM;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Allocate attribute value of %s (%p)\n", tp->name, tp->value));
+    }
+    strcpy(tp->value, value);
+    if (!strncmp(tp->name, "xmlns:", 6))
+      tp->ns = tp->value;
+    tp->visible = 2;
+  }
+  else
+    tp->visible = 1;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_clr_attr(struct soap *soap)
+{ register struct soap_attribute *tp;
+#ifndef WITH_LEAN
+  if (soap->mode & SOAP_XML_CANONICAL)
+  { while (soap->attributes)
+    { tp = soap->attributes->next;
+      SOAP_FREE(soap->attributes->value);
+      SOAP_FREE(soap->attributes);
+      soap->attributes = tp;
+    }
+  }
+  else
+#endif
+  { for (tp = soap->attributes; tp; tp = tp->next)
+      tp->visible = 0;
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+static int
+soap_getattrval(struct soap *soap, char *s, size_t n, soap_wchar d)
+{ size_t i;
+  soap_wchar c;
+  for (i = 0; i < n; i++)
+  { c = soap_getutf8(soap);
+    switch (c)
+    {
+    case SOAP_TT:
+      *s++ = '<';
+      soap_unget(soap, '/');
+      break;
+    case SOAP_LT:
+      *s++ = '<';
+      break;
+    case SOAP_GT:
+      if (d == ' ')
+      { soap_unget(soap, c);
+        *s = '\0';
+        return SOAP_OK;
+      }
+      *s++ = '>';
+      break;
+    case SOAP_QT:
+      if (c == d)
+      { *s = '\0';
+        return SOAP_OK;
+      }
+      *s++ = '"';
+      break;
+    case SOAP_AP:
+      if (c == d)
+      { *s = '\0';
+        return SOAP_OK;
+      }
+      *s++ = '\'';
+      break;
+    case '\t':
+    case '\n':
+    case '\r':
+    case ' ':
+    case '/':
+      if (d == ' ')
+      { soap_unget(soap, c);
+        *s = '\0';
+        return SOAP_OK;
+      }
+    default:
+      if ((int)c == EOF)
+        return soap->error = SOAP_EOF;
+      *s++ = (char)c;
+    }
+  }
+  return soap->error = SOAP_EOM;
+}
+#endif
+
+/******************************************************************************/
+#ifdef WITH_FAST
+#ifndef PALM_2
+static int 
+soap_append_lab(struct soap *soap, const char *s, size_t n)
+{ if (soap->labidx + n >= soap->lablen)
+  { register char *t = soap->labbuf;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Enlarging look-aside buffer to append data, old size=%lu", (unsigned long)soap->lablen));
+    if (soap->lablen == 0)
+      soap->lablen = SOAP_LABLEN;
+    while (soap->labidx + n >= soap->lablen)
+      soap->lablen <<= 1;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, ", new size=%lu\n", (unsigned long)soap->lablen));
+    soap->labbuf = (char*)SOAP_MALLOC(soap->lablen);
+    if (!soap->labbuf)
+    { if (t)
+        free(t);
+      return soap->error = SOAP_EOM;
+    }
+    if (t && soap->labidx)
+    { memcpy(soap->labbuf, t, soap->labidx);
+      free(t);
+    }
+  }
+  if (s)
+  { memcpy(soap->labbuf + soap->labidx, s, n);
+    soap->labidx += n;
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_peek_element(struct soap *soap)
+{ register struct soap_attribute *tp;
+  const char *t;
+  register char *s;
+  register soap_wchar c;
+  register int i;
+  if (soap->peeked)
+  { if (!*soap->tag)
+      return soap->error = SOAP_NO_TAG;
+    return SOAP_OK;
+  }
+  soap->peeked = 1;
+  for (;;)
+  { c = soap_getutf8(soap);
+    if (c == SOAP_BOM)
+      c = soap_getutf8(soap);
+    while (soap_blank(c))
+      c = soap_getutf8(soap);
+    if ((int)c == EOF)
+      return soap->error = SOAP_EOF;
+    if (c != SOAP_LT)
+    { *soap->tag = '\0';
+      soap_unget(soap, c);
+      return soap->error = SOAP_NO_TAG;
+    }
+    s = soap->tag;
+    do c = soap_get(soap);
+    while (soap_blank(c));
+    i = sizeof(soap->tag);
+    while (c != '/' && soap_notblank(c))
+    { if (--i > 0)
+        *s++ = (char)c;
+      c = soap_get(soap);
+    }
+    while (soap_blank(c))
+      c = soap_get(soap);
+    *s = '\0';
+    if (*soap->tag != '?')
+      break;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "XML PI <%s?>\n", soap->tag));
+    while ((int)c != EOF && c != SOAP_GT && c != '?')
+    { s = soap->tmpbuf;
+      i = sizeof(soap->tmpbuf) - 2;
+      while (c != '=' && c != SOAP_GT && c != '?' && soap_notblank(c))
+      { if (--i > 0)
+          *s++ = (char)c;
+        c = soap_get(soap);
+      }
+      while (soap_blank(c))
+        c = soap_get(soap);
+      if (c == '=')
+      { *s++ = '=';
+       do c = soap_get(soap);
+        while (soap_blank(c));
+        if (c != SOAP_QT && c != SOAP_AP)
+        { soap_unget(soap, c);
+          c = ' '; /* blank delimiter */
+        }
+        if (soap_getattrval(soap, s, i, c) == SOAP_EOM)
+         while (soap_getattrval(soap, soap->tmpbuf, sizeof(soap->tmpbuf), c) == SOAP_EOM)
+           ;
+        else if (!strcmp(soap->tag, "?xml") && (!soap_tag_cmp(soap->tmpbuf, "encoding=iso-8859-1") || !soap_tag_cmp(soap->tmpbuf, "encoding=latin1")))
+        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "XML latin1 encoding\n"));
+          soap->mode |= SOAP_ENC_LATIN;
+        }
+      }
+      do c = soap_get(soap);
+      while (soap_blank(c));
+    }
+  }
+  soap->id[0] = '\0';
+  soap->href[0] = '\0';
+  soap->type[0] = '\0';
+  soap->arrayType[0] = '\0';
+  soap->arraySize[0] = '\0';
+  soap->arrayOffset[0] = '\0';
+  soap->other = 0;
+  soap->root = -1;
+  soap->position = 0;
+  soap->null = 0;
+  soap->mustUnderstand = 0;
+  soap_clr_attr(soap);
+  while ((int)c != EOF && c != SOAP_GT && c != '/')
+  { s = soap->tmpbuf;
+    i = sizeof(soap->tmpbuf);
+    while (c != '=' && c != '/' && soap_notblank(c))
+    { if (--i > 0)
+        *s++ = (char)c;
+      c = soap_get(soap);
+    }
+    *s = '\0';
+    if (i == sizeof(soap->tmpbuf))
+      return soap->error = SOAP_SYNTAX_ERROR;
+    if (!strncmp(soap->tmpbuf, "xmlns:", 6))
+    { soap->tmpbuf[5] = '\0';
+      t = soap->tmpbuf + 6;
+    }
+    else if (!strcmp(soap->tmpbuf, "xmlns"))
+      t = SOAP_STR_EOS;
+    else
+      t = NULL;
+    for (tp = soap->attributes; tp; tp = tp->next)
+      if (!SOAP_STRCMP(tp->name, soap->tmpbuf))
+        break;
+    if (!tp)
+    { tp = (struct soap_attribute*)SOAP_MALLOC(sizeof(struct soap_attribute) + strlen(soap->tmpbuf));
+      if (!tp)
+        return soap->error = SOAP_EOM;
+      strcpy(tp->name, soap->tmpbuf);
+      tp->value = NULL;
+      tp->size = 0;
+      tp->next = soap->attributes;
+      soap->attributes = tp;
+    }
+    while (soap_blank(c))
+      c = soap_get(soap);
+    if (c == '=')
+    { do c = soap_get(soap);
+      while (soap_blank(c));
+      if (c != SOAP_QT && c != SOAP_AP)
+      { soap_unget(soap, c);
+        c = ' '; /* blank delimiter */
+      }
+      if (soap_getattrval(soap, tp->value, tp->size, c))
+      {
+#ifdef WITH_FAST
+        if (soap->error != SOAP_EOM)
+          return soap->error;
+        soap->error = SOAP_OK;
+       soap->labidx = 0;
+       if (soap_append_lab(soap, tp->value, tp->size))
+         return soap->error;
+       SOAP_FREE(tp->value);
+       for (;;)
+       { if (soap_getattrval(soap, soap->labbuf + soap->labidx, soap->lablen - soap->labidx, c))
+         { if (soap->error != SOAP_EOM)
+             return soap->error;
+            soap->error = SOAP_OK;
+           soap->labidx = soap->lablen;
+           if (soap_append_lab(soap, NULL, 0))
+             return soap->error;
+         }
+         else
+           break;
+       }
+        tp->size = soap->lablen;
+       if (!(tp->value = (char*)SOAP_MALLOC(tp->size)))
+         return soap->error = SOAP_EOM;
+        memcpy(tp->value, soap->labbuf, soap->lablen);
+#else
+       size_t n;
+        if (soap->error != SOAP_EOM)
+          return soap->error;
+        soap->error = SOAP_OK;
+        if (soap_new_block(soap))
+          return soap->error;
+        for (;;)
+        { if (!(s = (char*)soap_push_block(soap, SOAP_BLKLEN)))
+            return soap->error;
+          if (soap_getattrval(soap, s, SOAP_BLKLEN, c))
+          { if (soap->error != SOAP_EOM)
+              return soap->error;
+            soap->error = SOAP_OK;
+          }
+          else
+            break;
+        }
+       n = tp->size + soap->blist->size;
+        if (!(s = (char*)SOAP_MALLOC(n)))
+          return soap->error = SOAP_EOM;
+        if (tp->value)
+        { memcpy(s, tp->value, tp->size);
+          SOAP_FREE(tp->value);
+        }
+        soap_save_block(soap, s + tp->size, 0);
+        tp->value = s;
+        tp->size = n;
+#endif
+      }
+      do c = soap_get(soap);
+      while (soap_blank(c));
+      tp->visible = 2; /* seen this attribute w/ value */
+    }
+    else
+      tp->visible = 1; /* seen this attribute w/o value */
+    if (t && tp->value)
+    { if (soap_push_namespace(soap, t, tp->value))
+        return soap->error;
+      tp->visible = 0;
+    }
+  }
+  if ((int)c == EOF)
+    return soap->error = SOAP_EOF;
+  for (tp = soap->attributes; tp; tp = tp->next)
+  { if (tp->visible && tp->value)
+    { if (!strcmp(tp->name, "id"))
+      { *soap->id = '#';
+        strncpy(soap->id + 1, tp->value, sizeof(soap->id) - 2);
+        soap->id[sizeof(soap->id)-1] = '\0';
+      }
+      else if (!strcmp(tp->name, "href"))
+      { strncpy(soap->href, tp->value, sizeof(soap->href) - 1);
+        soap->href[sizeof(soap->href)-1] = '\0';
+      }
+      else if ((soap->version == 2 || (soap->mode & SOAP_XML_GRAPH)) && !strcmp(tp->name, "ref"))
+      { *soap->href = '#';
+        strncpy(soap->href + 1, tp->value, sizeof(soap->href) - 2);
+        soap->href[sizeof(soap->href)-1] = '\0';
+      }
+      else if (!soap_match_tag(soap, tp->name, "xsi:type"))
+      { strncpy(soap->type, tp->value, sizeof(soap->type) - 1);
+        soap->type[sizeof(soap->type)-1] = '\0';
+      }
+      else if (soap->version == 1 && !soap_match_tag(soap, tp->name, "SOAP-ENC:arrayType"))
+      { s = soap_strrchr(tp->value, '[');
+        if (s && (size_t)(s - tp->value) < sizeof(soap->arrayType))
+        { strncpy(soap->arrayType, tp->value, s - tp->value);
+          soap->arrayType[s - tp->value] = '\0';
+          strncpy(soap->arraySize, s, sizeof(soap->arraySize) - 1);
+        }
+        else
+          strncpy(soap->arrayType, tp->value, sizeof(soap->arrayType) - 1);
+        soap->arraySize[sizeof(soap->arrayType)-1] = '\0';
+        soap->arrayType[sizeof(soap->arrayType)-1] = '\0';
+      }
+      else if (soap->version == 2 && !soap_match_tag(soap, tp->name, "SOAP-ENC:itemType"))
+        strncpy(soap->arrayType, tp->value, sizeof(soap->arrayType) - 1);
+      else if (soap->version == 2 && !soap_match_tag(soap, tp->name, "SOAP-ENC:arraySize"))
+        strncpy(soap->arraySize, tp->value, sizeof(soap->arraySize) - 1);
+      else if (soap->version == 1 && !soap_match_tag(soap, tp->name, "SOAP-ENC:offset"))
+        strncpy(soap->arrayOffset, tp->value, sizeof(soap->arrayOffset));
+      else if (soap->version == 1 && !soap_match_tag(soap, tp->name, "SOAP-ENC:position"))
+        soap->position = soap_getposition(tp->value, soap->positions);
+      else if (soap->version == 1 && !soap_match_tag(soap, tp->name, "SOAP-ENC:root"))
+        soap->root = ((!strcmp(tp->value, "1") || !strcmp(tp->value, "true")));
+      else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:actor")
+            || !soap_match_tag(soap, tp->name, "SOAP-ENV:role"))
+      { if ((!soap->actor || strcmp(soap->actor, tp->value))
+         && strcmp(tp->value, "http://schemas.xmlsoap.org/soap/actor/next")
+         && strcmp(tp->value, "http://www.w3.org/2003/05/soap-envelope/role/next"))
+          soap->other = 1;
+      }
+      else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:mustUnderstand")
+            && (!strcmp(tp->value, "1") || !strcmp(tp->value, "true")))
+        soap->mustUnderstand = 1;
+      else if ((!soap_match_tag(soap, tp->name, "xsi:null")
+             || !soap_match_tag(soap, tp->name, "xsi:nil"))
+            && (!strcmp(tp->value, "1")
+             || !strcmp(tp->value, "true")))
+        soap->null = 1;
+    }
+  }
+  if (!(soap->body = (c != '/')))
+    do c = soap_get(soap);
+    while (soap_blank(c));
+  return soap->error = SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_retry(struct soap *soap)
+{ soap->peeked = 1;
+  soap->error = SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_revert(struct soap *soap)
+{ if (!soap->peeked)
+  { soap->peeked = 1;
+    if (soap->body)
+      soap->level--;
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Reverting last element (level=%u)\n", soap->level));
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_string_out(struct soap *soap, const char *s, int flag)
+{ register const char *t;
+  register soap_wchar c;
+  register soap_wchar mask = 0xFFFFFF80UL;
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { soap->dom->data = soap_strdup(soap, s); /* check EOM */
+    return SOAP_OK;
+  }
+#endif
+  if (soap->mode & SOAP_C_UTFSTRING)
+    mask = 0;
+  t = s;
+  while ((c = *t++))
+  { switch (c)
+    { 
+    case 9:
+      if (flag)
+      { if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&#x9;", 5))
+         return soap->error;
+        s = t;
+      }
+      break;
+    case 10:
+      if (flag || !(soap->mode & SOAP_XML_CANONICAL))
+      { if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&#xA;", 5))
+         return soap->error;
+        s = t;
+      }
+      break;
+    case 13:
+      if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&#xD;", 5))
+        return soap->error;
+      s = t;
+      break;
+    case '&':
+      if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&amp;", 5))
+        return soap->error;
+      s = t;
+      break;
+    case '<':
+      if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&lt;", 4))
+        return soap->error;
+      s = t;
+      break;
+    case '>':
+      if (!flag)
+      { if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&gt;", 4))
+         return soap->error;
+        s = t;
+      }
+      break;
+    case '"':
+      if (flag)
+      { if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&quot;", 6))
+         return soap->error;
+        s = t;
+      }
+      break;
+    default:
+#ifndef WITH_LEANER
+#ifdef HAVE_MBTOWC
+      if (soap->mode & SOAP_C_MBSTRING)
+      { wchar_t wc;
+        register int m = mbtowc(&wc, t - 1, MB_CUR_MAX);
+        if (m > 0 && wc != c)
+        { if (soap_send_raw(soap, s, t - s - 1) || soap_pututf8(soap, wc))
+            return soap->error;
+         s = t + m - 1;
+         continue;
+        }
+      }
+#endif
+#endif
+      if (c & mask)
+      { if (soap_send_raw(soap, s, t - s - 1) || soap_pututf8(soap, (unsigned char)c))
+          return soap->error;
+        s = t;
+      }
+    }
+  }
+  return soap_send_raw(soap, s, t - s - 1);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_string_in(struct soap *soap, int flag, long minlen, long maxlen)
+{ register char *s;
+  char *t = NULL;
+  register size_t i;
+  register long l = 0;
+  register int n = 0;
+  register size_t m = 0;
+  register soap_wchar c;
+#if !defined(WITH_LEANER) && defined(HAVE_WCTOMB)
+  char buf[MB_LEN_MAX > 8 ? MB_LEN_MAX : 8];
+#else
+  char buf[8];
+#endif
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Reading string content\n"));
+#ifdef WITH_CDATA
+  if (!flag)
+  { register int state = 0;
+#ifdef WITH_FAST
+    soap->labidx = 0;                  /* use look-aside buffer */
+#else
+    if (soap_new_block(soap))
+      return NULL;
+#endif
+    for (;;)
+    { 
+#ifdef WITH_FAST
+      register size_t k;
+      if (soap_append_lab(soap, NULL, 0))      /* allocate more space in look-aside buffer if necessary */
+        return NULL;
+      s = soap->labbuf + soap->labidx; /* space to populate */
+      k = soap->lablen - soap->labidx; /* number of bytes available */
+      soap->labidx = soap->lablen;     /* claim this space */
+#else
+      register size_t k = SOAP_BLKLEN;
+      if (!(s = (char*)soap_push_block(soap, k)))
+        return NULL;
+#endif
+      for (i = 0; i < k; i++)
+      { if (m > 0)
+        { *s++ = *t++; /* copy multibyte characters */
+         m--;
+          continue;
+        }
+        c = soap_getchar(soap);
+       if ((int)c == EOF)
+          goto end;
+        if (c >= 0x80 && !(soap->mode & SOAP_ENC_LATIN))
+        { soap_unget(soap, c);
+         c = soap_getutf8(soap);
+         if (soap->mode & SOAP_C_UTFSTRING)
+          { if ((c & 0x80000000) && c >= -0x7FFFFF80 && c < SOAP_AP)
+            { c &= 0x7FFFFFFF;
+              t = buf;
+              if (c < 0x0800)
+                *t++ = (char)(0xC0 | ((c >> 6) & 0x1F));
+              else
+              { if (c < 0x010000)
+                  *t++ = (char)(0xE0 | ((c >> 12) & 0x0F));
+                else
+                { if (c < 0x200000)
+                    *t++ = (char)(0xF0 | ((c >> 18) & 0x07));
+                  else
+                  { if (c < 0x04000000)
+                      *t++ = (char)(0xF8 | ((c >> 24) & 0x03));
+                    else
+                    { *t++ = (char)(0xFC | ((c >> 30) & 0x01));
+                      *t++ = (char)(0x80 | ((c >> 24) & 0x3F));
+                    }
+                    *t++ = (char)(0x80 | ((c >> 18) & 0x3F));
+                  }     
+                  *t++ = (char)(0x80 | ((c >> 12) & 0x3F));
+                }
+                *t++ = (char)(0x80 | ((c >> 6) & 0x3F));
+              }
+              *t++ = (char)(0x80 | (c & 0x3F));
+             m = (int)(t - buf) - 1;
+              t = buf;
+              *s++ = *t++;
+              continue;
+           }
+          }
+        }
+       switch (state)
+        { case 1:
+            if (c == ']')
+             state = 4;
+           *s++ = c;
+           continue;
+         case 2:
+           if (c == '-')
+              state = 6;
+           *s++ = c;
+           continue;
+         case 3:
+           if (c == '?')
+             state = 8;
+           *s++ = c;
+           continue;
+          /* CDATA */
+         case 4:
+           if (c == ']')
+              state = 5;
+           else
+             state = 1;
+           *s++ = c;
+           continue;
+         case 5:
+           if (c == '>')
+             state = 0;
+           else
+             state = 1;
+           *s++ = c;
+           continue;
+          /* comment */
+          case 6:
+            if (c == '-')
+             state = 7;
+           else
+             state = 2;
+           *s++ = c;
+           continue;
+          case 7:
+            if (c == '>')
+             state = 0;
+           else
+             state = 2;
+           *s++ = c;
+           continue;
+          /* PI */
+         case 8:
+            if (c == '>')
+             state = 0;
+           else
+             state = 3;
+           *s++ = c;
+           continue;
+        }
+        switch (c)
+        {
+        case '/':
+          if (n > 0)
+          { c = soap_getchar(soap);
+            if (c == '>')
+              n--;
+            soap_unget(soap, c);
+          }
+          *s++ = '/';
+          break;
+        case '<':
+         c = soap_getchar(soap);
+         if (c == '/')
+         { if (n == 0)
+           { c = SOAP_TT;
+             goto end;
+           }
+           n--;
+         }
+         else if (c == '!')
+         { c = soap_getchar(soap);
+           if (c == '[')
+            { do c = soap_getchar(soap);
+              while ((int)c != EOF && c != '[');
+              if ((int)c == EOF)
+                 goto end;
+             t = (char*)"![CDATA[";
+             m = 8;
+             state = 1;
+           }
+            else if (c == '-')
+           { if ((c = soap_getchar(soap)) == '-')
+               state = 2;
+             t = (char*)"!-";
+             m = 2;
+             soap_unget(soap, c);
+           }
+           else
+           { t = (char*)"!";
+             m = 1;
+             soap_unget(soap, c);
+           }
+           *s++ = '<';
+           break;
+         }
+         else if (c == '?')
+           state = 3;
+         else
+           n++;
+          soap_unget(soap, c);
+          *s++ = '<';
+          break;
+        case '>':
+          *s++ = '>';
+          break;
+        case '"':
+          *s++ = '"';
+          break;
+        default:
+#ifndef WITH_LEANER
+#ifdef HAVE_WCTOMB
+          if (soap->mode & SOAP_C_MBSTRING)
+          { m = wctomb(buf, c & 0x7FFFFFFF);
+            if (m >= 1)
+            { t = buf;
+              *s++ = *t++;
+              m--;
+            }
+            else
+              *s++ = SOAP_UNKNOWN_CHAR;
+          }
+          else
+#endif
+#endif
+            *s++ = (char)(c & 0xFF);
+        }
+       l++;
+        if ((soap->mode & SOAP_XML_STRICT) && maxlen >= 0 && l > maxlen)
+        { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen));
+          soap->error = SOAP_LENGTH;
+          return NULL;
+        }
+      }
+    }
+  }
+#endif
+#ifdef WITH_FAST
+  soap->labidx = 0;                    /* use look-aside buffer */
+#else
+  if (soap_new_block(soap))
+    return NULL;
+#endif
+  for (;;)
+  { 
+#ifdef WITH_FAST
+    register size_t k;
+    if (soap_append_lab(soap, NULL, 0))        /* allocate more space in look-aside buffer if necessary */
+      return NULL;
+    s = soap->labbuf + soap->labidx;   /* space to populate */
+    k = soap->lablen - soap->labidx;   /* number of bytes available */
+    soap->labidx = soap->lablen;       /* claim this space */
+#else
+    register size_t k = SOAP_BLKLEN;
+    if (!(s = (char*)soap_push_block(soap, k)))
+      return NULL;
+#endif
+    for (i = 0; i < k; i++)
+    { if (m > 0)
+      { *s++ = *t++;   /* copy multibyte characters */
+        m--;
+        continue;
+      }
+      if (soap->mode & SOAP_C_UTFSTRING)
+      { if (((c = soap_get(soap)) & 0x80000000) && c >= -0x7FFFFF80 && c < SOAP_AP)
+        { c &= 0x7FFFFFFF;
+          t = buf;
+          if (c < 0x0800)
+            *t++ = (char)(0xC0 | ((c >> 6) & 0x1F));
+          else
+          { if (c < 0x010000)
+              *t++ = (char)(0xE0 | ((c >> 12) & 0x0F));
+            else
+            { if (c < 0x200000)
+                *t++ = (char)(0xF0 | ((c >> 18) & 0x07));
+              else
+              { if (c < 0x04000000)
+                  *t++ = (char)(0xF8 | ((c >> 24) & 0x03));
+                else
+                { *t++ = (char)(0xFC | ((c >> 30) & 0x01));
+                  *t++ = (char)(0x80 | ((c >> 24) & 0x3F));
+                }
+                *t++ = (char)(0x80 | ((c >> 18) & 0x3F));
+              }     
+              *t++ = (char)(0x80 | ((c >> 12) & 0x3F));
+            }
+            *t++ = (char)(0x80 | ((c >> 6) & 0x3F));
+          }
+          *t++ = (char)(0x80 | (c & 0x3F));
+         m = (int)(t - buf) - 1;
+          t = buf;
+          *s++ = *t++;
+          continue;
+        }
+      }
+      else
+        c = soap_getutf8(soap);
+      switch (c)
+      {
+      case SOAP_TT:
+        if (n == 0)
+          goto end;
+        n--;
+        *s++ = '<';
+        t = (char*)"/";
+       m = 1;
+        break;
+      case SOAP_LT:
+        n++;
+        *s++ = '<';
+        break;
+      case SOAP_GT:
+        *s++ = '>';
+        break;
+      case SOAP_QT:
+        *s++ = '"';
+        break;
+      case SOAP_AP:
+        *s++ = '\'';
+        break;
+      case '/':
+        if (n > 0)
+        { c = soap_get(soap);
+          if (c == SOAP_GT)
+            n--;
+          soap_unget(soap, c);
+        }
+        *s++ = '/';
+        break;
+      case '<' | 0x80000000:
+        if (flag)
+          *s++ = '<';
+        else
+        { *s++ = '&';
+          t = (char*)"lt;";
+         m = 3;
+        }
+        break;
+      case '>' | 0x80000000:
+        if (flag)
+          *s++ = '>';
+        else
+        { *s++ = '&';
+          t = (char*)"gt;";
+         m = 3;
+        }
+        break;
+      case '&' | 0x80000000:
+        if (flag)
+          *s++ = '&';
+        else
+        { *s++ = '&';
+          t = (char*)"amp;";
+         m = 4;
+        }
+        break;
+      case '"' | 0x80000000:
+        if (flag)
+          *s++ = '"';
+        else
+        { *s++ = '&';
+          t = (char*)"quot;";
+         m = 5;
+        }
+        break;
+      case '\'' | 0x80000000:
+        if (flag)
+          *s++ = '\'';
+        else
+        { *s++ = '&';
+          t = (char*)"apos;";
+         m = 5;
+        }
+        break;
+      default:
+        if ((int)c == EOF)
+          goto end;
+#ifndef WITH_LEANER
+#ifdef HAVE_WCTOMB
+        if (soap->mode & SOAP_C_MBSTRING)
+        { m = wctomb(buf, c & 0x7FFFFFFF);
+          if (m >= 1)
+          { t = buf;
+            *s++ = *t++;
+            m--;
+          }
+          else
+            *s++ = SOAP_UNKNOWN_CHAR;
+        }
+        else
+#endif
+#endif
+          *s++ = (char)(c & 0xFF);
+      }
+      l++;
+      if ((soap->mode & SOAP_XML_STRICT) && maxlen >= 0 && l > maxlen)
+      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen));
+        soap->error = SOAP_LENGTH;
+        return NULL;
+      }
+    }
+  }
+end:
+  soap_unget(soap, c);
+  *s = '\0';
+#ifdef WITH_FAST
+  t = soap_strdup(soap, soap->labbuf);
+#else
+  soap_size_block(soap, i+1);
+  t = soap_save_block(soap, NULL, 0);
+#endif
+  if ((soap->mode & SOAP_XML_STRICT) && l < minlen)
+  { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too short: %ld chars, minlen=%ld\n", l, minlen));
+    soap->error = SOAP_LENGTH;
+    return NULL;
+  }
+  if (flag == 2)
+    if (soap_s2QName(soap, t, &t))
+      return NULL;
+  if (soap->peeked && *soap->tag)
+  { soap->peeked = 0;
+    if (soap_element_end_in(soap, NULL))
+      return NULL;
+  }
+  return t;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_wstring_out(struct soap *soap, const wchar_t *s, int flag)
+{ const char *t;
+  char tmp;
+  register soap_wchar c;
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { soap->dom->wide = NULL; /* soap_malloc() ??? */
+    return SOAP_OK;
+  }
+#endif
+  while ((c = *s++))
+  { switch (c)
+    { 
+    case 9:
+      if (flag)
+        t = "&#x9;";
+      else
+        t = "\t";
+      break;
+    case 10:
+      if (flag || !(soap->mode & SOAP_XML_CANONICAL))
+        t = "&#xA;";
+      else
+        t = "\n";
+      break;
+    case 13:
+      t = "&#xD;";
+      break;
+    case '&':
+      t = "&amp;";
+      break;
+    case '<':
+      t = "&lt;";
+      break;
+    case '>':
+      if (flag)
+        t = ">";
+      else
+       t = "&gt;";
+      break;
+    case '"':
+      if (flag)
+        t = "&quot;";
+      else
+        t = "\"";
+      break;
+    default:
+      if (c > 0 && c < 0x80)
+      { tmp = (char)c;
+        if (soap_send_raw(soap, &tmp, 1))
+          return soap->error;
+      }
+      else if (soap_pututf8(soap, (unsigned long)c))
+        return soap->error;
+      continue;
+    }
+    if (soap_send(soap, t))
+      return soap->error;
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_2
+SOAP_FMAC1
+wchar_t *
+SOAP_FMAC2
+soap_wstring_in(struct soap *soap, int flag, long minlen, long maxlen)
+{ wchar_t *s;
+  register int i, n = 0;
+  register long l = 0;
+  register soap_wchar c;
+  const char *t = NULL;
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Reading wide string content\n"));
+  if (soap->peeked && *soap->tag)
+  { n = 1;
+    soap->peeked = 0;
+  }
+  if (soap_new_block(soap))
+    return NULL;
+  for (;;)
+  { if (!(s = (wchar_t*)soap_push_block(soap, sizeof(wchar_t)*SOAP_BLKLEN)))
+      return NULL;
+    for (i = 0; i < SOAP_BLKLEN; i++)
+    { if (t)
+      { *s++ = (wchar_t)*t++;
+        if (!*t)
+          t = NULL;
+        continue;
+      }
+      c = soap_getutf8(soap);
+      switch (c)
+      {
+      case SOAP_TT:
+        if (n == 0)
+          goto end;
+        n--;
+        *s++ = '<';
+        soap_unget(soap, '/');
+        break;
+      case SOAP_LT:
+        n++;
+        *s++ = '<';
+        break;
+      case SOAP_GT:
+        *s++ = '>';
+        break;
+      case SOAP_QT:
+        *s++ = '"';
+        break;
+      case SOAP_AP:
+        *s++ = '\'';
+        break;
+      case '/':
+        if (n > 0)
+        { c = soap_getutf8(soap);
+          if (c == SOAP_GT)
+            n--;
+          soap_unget(soap, c);
+        }
+        *s++ = '/';
+        break;
+      case '<':
+        if (flag)
+          *s++ = (soap_wchar)'<';
+        else
+        { *s++ = (soap_wchar)'&';
+          t = "lt;";
+        }
+        break;
+      case '>':
+        if (flag)
+          *s++ = (soap_wchar)'>';
+        else
+        { *s++ = (soap_wchar)'&';
+          t = "gt;";
+        }
+        break;
+      case '"':
+        if (flag)
+          *s++ = (soap_wchar)'"';
+        else
+        { *s++ = (soap_wchar)'&';
+          t = "quot;";
+        }
+        break;
+      default:
+        if ((int)c == EOF)
+          goto end;
+        *s++ = (wchar_t)c & 0x7FFFFFFF;
+      }
+      l++;
+      if ((soap->mode & SOAP_XML_STRICT) && maxlen >= 0 && l > maxlen)
+      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen));
+        soap->error = SOAP_LENGTH;
+        return NULL;
+      }
+    }
+  }
+end:
+  soap_unget(soap, c);
+  *s = '\0';
+  soap_size_block(soap, sizeof(wchar_t) * (i + 1));
+  if ((soap->mode & SOAP_XML_STRICT) && l < minlen)
+  { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too short: %ld chars, minlen=%ld\n", l, minlen));
+    soap->error = SOAP_LENGTH;
+    return NULL;
+  }
+  if (soap->peeked && *soap->tag)
+  { soap->peeked = 0;
+    if (soap_element_end_in(soap, NULL))
+      return NULL;
+  }
+  return (wchar_t*)soap_save_block(soap, NULL, 0);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_int2s(struct soap *soap, int n)
+{ return soap_long2s(soap, (long)n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outint(struct soap *soap, const char *tag, int id, const int *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_long2s(soap, (long)*p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2int(struct soap *soap, const char *s, int *p)
+{ if (s)
+  { char *r;
+    *p = (int)soap_strtol(s, &r, 10);
+    if (*r)
+      soap->error = SOAP_TYPE;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int *
+SOAP_FMAC2
+soap_inint(struct soap *soap, const char *tag, int *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":int")
+   && soap_match_tag(soap, soap->type, ":short")
+   && soap_match_tag(soap, soap->type, ":byte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (int*)soap_id_enter(soap, soap->id, p, t, sizeof(int), 0, NULL, NULL, NULL);
+  if (p)
+  { if (soap_s2int(soap, soap_value(soap), p))
+      return NULL;
+  }
+  p = (int*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(int), 0, NULL);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_long2s(struct soap *soap, long n)
+{ sprintf(soap->tmpbuf, "%ld", n);
+  return soap->tmpbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outlong(struct soap *soap, const char *tag, int id, const long *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_long2s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2long(struct soap *soap, const char *s, long *p)
+{ if (s)
+  { char *r;
+    *p = soap_strtol(s, &r, 10);
+    if (*r)
+      soap->error = SOAP_TYPE;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+long *
+SOAP_FMAC2
+soap_inlong(struct soap *soap, const char *tag, long *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":int")
+   && soap_match_tag(soap, soap->type, ":short")
+   && soap_match_tag(soap, soap->type, ":byte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (long*)soap_id_enter(soap, soap->id, p, t, sizeof(long), 0, NULL, NULL, NULL);
+  if (p)
+  { if (soap_s2long(soap, soap_value(soap), p))
+      return NULL;
+  }
+  p = (long*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(long), 0, NULL);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_LONG642s(struct soap *soap, LONG64 n)
+{ sprintf(soap->tmpbuf, SOAP_LONG_FORMAT, n);
+  return soap->tmpbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outLONG64(struct soap *soap, const char *tag, int id, const LONG64 *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_LONG642s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2LONG64(struct soap *soap, const char *s, LONG64 *p)
+{ if (s && sscanf(s, SOAP_LONG_FORMAT, p) != 1)
+    soap->error = SOAP_TYPE;
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+LONG64 *
+SOAP_FMAC2
+soap_inLONG64(struct soap *soap, const char *tag, LONG64 *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":integer")
+   && soap_match_tag(soap, soap->type, ":positiveInteger")
+   && soap_match_tag(soap, soap->type, ":negativeInteger")
+   && soap_match_tag(soap, soap->type, ":nonPositiveInteger")
+   && soap_match_tag(soap, soap->type, ":nonNegativeInteger")
+   && soap_match_tag(soap, soap->type, ":long")
+   && soap_match_tag(soap, soap->type, ":int")
+   && soap_match_tag(soap, soap->type, ":short")
+   && soap_match_tag(soap, soap->type, ":byte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (LONG64*)soap_id_enter(soap, soap->id, p, t, sizeof(LONG64), 0, NULL, NULL, NULL);
+  if (p)
+  { if (soap_s2LONG64(soap, soap_value(soap), p))
+      return NULL;
+  }
+  p = (LONG64*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(LONG64), 0, NULL);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_byte2s(struct soap *soap, char n)
+{ return soap_long2s(soap, (long)n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outbyte(struct soap *soap, const char *tag, int id, const char *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_long2s(soap, (long)*p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2byte(struct soap *soap, const char *s, char *p)
+{ if (s)
+  { long n;
+    char *r;
+    n = soap_strtol(s, &r, 10);
+    if (*r || n < -128 || n > 127)
+      soap->error = SOAP_TYPE;
+    *p = (char)n;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_inbyte(struct soap *soap, const char *tag, char *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":byte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (char*)soap_id_enter(soap, soap->id, p, t, sizeof(char), 0, NULL, NULL, NULL);
+  if (p)
+  { if (soap_s2byte(soap, soap_value(soap), p))
+      return NULL;
+  }
+  p = (char*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(char), 0, NULL);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_short2s(struct soap *soap, short n)
+{ return soap_long2s(soap, (long)n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outshort(struct soap *soap, const char *tag, int id, const short *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_long2s(soap, (long)*p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2short(struct soap *soap, const char *s, short *p)
+{ if (s)
+  { long n;
+    char *r;
+    n = soap_strtol(s, &r, 10);
+    if (*r || n < -32768 || n > 32767)
+      soap->error = SOAP_TYPE;
+    *p = (short)n;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+short *
+SOAP_FMAC2
+soap_inshort(struct soap *soap, const char *tag, short *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":short")
+   && soap_match_tag(soap, soap->type, ":byte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (short*)soap_id_enter(soap, soap->id, p, t, sizeof(short), 0, NULL, NULL, NULL);
+  if (p)
+  { if (soap_s2short(soap, soap_value(soap), p))
+      return NULL;
+  }
+  p = (short*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(short), 0, NULL);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_float2s(struct soap *soap, float n)
+{ const char *s;
+  if (soap_isnan((double)n))
+    s = "NaN";
+  else if (soap_ispinff(n))
+    s = "INF";
+  else if (soap_isninff(n))
+    s = "-INF";
+  else
+  { sprintf(soap->tmpbuf, soap->float_format, n);
+    s = soap->tmpbuf;
+  }
+  return s;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outfloat(struct soap *soap, const char *tag, int id, const float *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_float2s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2float(struct soap *soap, const char *s, float *p)
+{ if (s)
+  { if (!soap_tag_cmp(s, "INF"))
+      *p = FLT_PINFTY;
+    else if (!soap_tag_cmp(s, "+INF"))
+      *p = FLT_PINFTY;
+    else if (!soap_tag_cmp(s, "-INF"))
+      *p = FLT_NINFTY;
+    else if (!soap_tag_cmp(s, "NaN"))
+      *p = FLT_NAN;
+    else
+    {
+#if defined(HAVE_STRTOF)
+      char *r;
+      *p = strtof(s, &r);
+      if (*r)
+#elif defined(HAVE_STRTOD)
+      char *r;
+      *p = (float)strtod(s, &r);
+      if (*r)
+#endif
+#ifdef HAVE_SSCANF
+        if (sscanf(s, soap->float_format, p) != 1)
+          soap->error = SOAP_TYPE;
+#else
+        soap->error = SOAP_TYPE;
+#endif
+    }
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+static int soap_isnumeric(struct soap *soap, const char *type)
+{ if (soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":float")
+   && soap_match_tag(soap, soap->type, ":double")
+   && soap_match_tag(soap, soap->type, ":decimal")
+   && soap_match_tag(soap, soap->type, ":integer")
+   && soap_match_tag(soap, soap->type, ":positiveInteger")
+   && soap_match_tag(soap, soap->type, ":negativeInteger")
+   && soap_match_tag(soap, soap->type, ":nonPositiveInteger")
+   && soap_match_tag(soap, soap->type, ":nonNegativeInteger")
+   && soap_match_tag(soap, soap->type, ":long")
+   && soap_match_tag(soap, soap->type, ":int")
+   && soap_match_tag(soap, soap->type, ":short")
+   && soap_match_tag(soap, soap->type, ":byte")
+   && soap_match_tag(soap, soap->type, ":unsignedLong")
+   && soap_match_tag(soap, soap->type, ":unsignedInt")
+   && soap_match_tag(soap, soap->type, ":unsignedShort")
+   && soap_match_tag(soap, soap->type, ":unsignedByte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return SOAP_ERR;
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+float *
+SOAP_FMAC2
+soap_infloat(struct soap *soap, const char *tag, float *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type != '\0' && soap_isnumeric(soap, type))
+    return NULL;
+#endif
+  p = (float*)soap_id_enter(soap, soap->id, p, t, sizeof(float), 0, NULL, NULL, NULL);
+  if (p)
+  { if (soap_s2float(soap, soap_value(soap), p))
+      return NULL;
+  }
+  p = (float*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(float), 0, NULL);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_double2s(struct soap *soap, double n)
+{ const char *s;
+  if (soap_isnan(n))
+    s = "NaN";
+  else if (soap_ispinfd(n))
+    s = "INF";
+  else if (soap_isninfd(n))
+    s = "-INF";
+  else
+  { sprintf(soap->tmpbuf, soap->double_format, n);
+    s = soap->tmpbuf;
+  }
+  return s;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outdouble(struct soap *soap, const char *tag, int id, const double *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_double2s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2double(struct soap *soap, const char *s, double *p)
+{ if (s)
+  { if (!soap_tag_cmp(s, "INF"))
+      *p = DBL_PINFTY;
+    else if (!soap_tag_cmp(s, "+INF"))
+      *p = DBL_PINFTY;
+    else if (!soap_tag_cmp(s, "-INF"))
+      *p = DBL_NINFTY;
+    else if (!soap_tag_cmp(s, "NaN"))
+      *p = DBL_NAN;
+    else
+    {
+#ifdef HAVE_STRTOD
+      char *r;
+      *p = strtod(s, &r);
+      if (*r)
+#endif
+#ifdef HAVE_SSCANF
+        if (sscanf(s, soap->double_format, p) != 1)
+          soap->error = SOAP_TYPE;
+#else
+        soap->error = SOAP_TYPE;
+#endif
+    }
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+double *
+SOAP_FMAC2
+soap_indouble(struct soap *soap, const char *tag, double *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type != '\0' && soap_isnumeric(soap, type))
+    return NULL;
+#endif
+  p = (double*)soap_id_enter(soap, soap->id, p, t, sizeof(double), 0, NULL, NULL, NULL);
+  if (p)
+  { if (soap_s2double(soap, soap_value(soap), p))
+      return NULL;
+  }
+  p = (double*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(double), 0, NULL);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_unsignedByte2s(struct soap *soap, unsigned char n)
+{ return soap_unsignedLong2s(soap, (unsigned long)n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outunsignedByte(struct soap *soap, const char *tag, int id, const unsigned char *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_unsignedLong2s(soap, (unsigned long)*p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2unsignedByte(struct soap *soap, const char *s, unsigned char *p)
+{ if (s)
+  { unsigned long n;
+    char *r;
+    n = soap_strtoul(s, &r, 10);
+    if (*r || n > 255)
+      soap->error = SOAP_TYPE;
+    *p = (unsigned char)n;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+unsigned char *
+SOAP_FMAC2
+soap_inunsignedByte(struct soap *soap, const char *tag, unsigned char *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":unsignedByte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (unsigned char*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned char), 0, NULL, NULL, NULL);
+  if (p)
+  { if (soap_s2unsignedByte(soap, soap_value(soap), p))
+      return NULL;
+  }
+  p = (unsigned char*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(unsigned char), 0, NULL);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_unsignedShort2s(struct soap *soap, unsigned short n)
+{ return soap_unsignedLong2s(soap, (unsigned long)n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outunsignedShort(struct soap *soap, const char *tag, int id, const unsigned short *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_unsignedLong2s(soap, (unsigned long)*p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2unsignedShort(struct soap *soap, const char *s, unsigned short *p)
+{ if (s)
+  { unsigned long n;
+    char *r;
+    n = soap_strtoul(s, &r, 10);
+    if (*r || n > 65535)
+      soap->error = SOAP_TYPE;
+    *p = (unsigned short)n;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+unsigned short *
+SOAP_FMAC2
+soap_inunsignedShort(struct soap *soap, const char *tag, unsigned short *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":unsignedShort")
+   && soap_match_tag(soap, soap->type, ":unsignedByte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (unsigned short*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned short), 0, NULL, NULL, NULL);
+  if (p)
+  { if (soap_s2unsignedShort(soap, soap_value(soap), p))
+      return NULL;
+  }
+  p = (unsigned short*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(unsigned short), 0, NULL);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_unsignedInt2s(struct soap *soap, unsigned int n)
+{ return soap_unsignedLong2s(soap, (unsigned long)n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outunsignedInt(struct soap *soap, const char *tag, int id, const unsigned int *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_unsignedLong2s(soap, (unsigned long)*p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2unsignedInt(struct soap *soap, const char *s, unsigned int *p)
+{ if (s)
+  { char *r;
+    *p = (unsigned int)soap_strtoul(s, &r, 10);
+    if (*r)
+      soap->error = SOAP_TYPE;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+unsigned int *
+SOAP_FMAC2
+soap_inunsignedInt(struct soap *soap, const char *tag, unsigned int *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":unsignedInt")
+   && soap_match_tag(soap, soap->type, ":unsignedShort")
+   && soap_match_tag(soap, soap->type, ":unsignedByte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (unsigned int*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned int), 0, NULL, NULL, NULL);
+  if (p)
+  { if (soap_s2unsignedInt(soap, soap_value(soap), p))
+      return NULL;
+  }
+  p = (unsigned int*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(unsigned int), 0, NULL);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_unsignedLong2s(struct soap *soap, unsigned long n)
+{ sprintf(soap->tmpbuf, "%lu", n);
+  return soap->tmpbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outunsignedLong(struct soap *soap, const char *tag, int id, const unsigned long *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_unsignedLong2s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2unsignedLong(struct soap *soap, const char *s, unsigned long *p)
+{ if (s)
+  { char *r;
+    *p = soap_strtoul(s, &r, 10);
+    if (*r)
+      soap->error = SOAP_TYPE;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+unsigned long *
+SOAP_FMAC2
+soap_inunsignedLong(struct soap *soap, const char *tag, unsigned long *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":unsignedInt")
+   && soap_match_tag(soap, soap->type, ":unsignedShort")
+   && soap_match_tag(soap, soap->type, ":unsignedByte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (unsigned long*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned long), 0, NULL, NULL, NULL);
+  if (p)
+  { if (soap_s2unsignedLong(soap, soap_value(soap), p))
+      return NULL;
+  }
+  p = (unsigned long*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(unsigned long), 0, NULL);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_ULONG642s(struct soap *soap, ULONG64 n)
+{ sprintf(soap->tmpbuf, SOAP_ULONG_FORMAT, n);
+  return soap->tmpbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outULONG64(struct soap *soap, const char *tag, int id, const ULONG64 *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_ULONG642s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2ULONG64(struct soap *soap, const char *s, ULONG64 *p)
+{ if (s && sscanf(s, SOAP_ULONG_FORMAT, p) != 1)
+    soap->error = SOAP_TYPE;
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+ULONG64 *
+SOAP_FMAC2
+soap_inULONG64(struct soap *soap, const char *tag, ULONG64 *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":positiveInteger")
+   && soap_match_tag(soap, soap->type, ":nonNegativeInteger")
+   && soap_match_tag(soap, soap->type, ":unsignedLong")
+   && soap_match_tag(soap, soap->type, ":unsignedInt")
+   && soap_match_tag(soap, soap->type, ":unsignedShort")
+   && soap_match_tag(soap, soap->type, ":unsignedByte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+  p = (ULONG64*)soap_id_enter(soap, soap->id, p, t, sizeof(ULONG64), 0, NULL, NULL, NULL);
+  if (p)
+  { if (soap_s2ULONG64(soap, soap_value(soap), p))
+      return NULL;
+  }
+  p = (ULONG64*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(ULONG64), 0, NULL);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2string(struct soap *soap, const char *s, char **t)
+{ *t = NULL;
+  if (s && !(*t = soap_strdup(soap, s)))
+    soap->error = SOAP_EOM;
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2QName(struct soap *soap, const char *s, char **t)
+{ if (s)
+  { struct soap_nlist *np;
+    const char *p;
+    if (!strncmp(s, "xml:", 4))
+    { *t = soap_strdup(soap, s);
+      return SOAP_OK;
+    }
+    np = soap->nlist;
+    p = strchr(s, ':');
+    if (p)
+    { register int n = p - s;
+      while (np && (strncmp(np->id, s, n) || np->id[n]))
+        np = np->next;
+      p++;
+    }
+    else
+    { while (np && *np->id)
+        np = np->next;
+      p = s;
+    }
+    if (np)
+    { if (np->index >= 0 && soap->local_namespaces)
+      { register const char *q = soap->local_namespaces[np->index].id;
+        if (q)
+        { if ((*t = (char*)soap_malloc(soap, strlen(p) + strlen(q) + 2)))
+            sprintf(*t, "%s:%s", q, p);
+          return SOAP_OK;
+        }
+      }
+      if (np->ns)
+      { if ((*t = (char*)soap_malloc(soap, strlen(p) + strlen(np->ns) + 4)))
+          sprintf(*t, "\"%s\":%s", np->ns, p);
+        return SOAP_OK;
+      }
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Namespace prefix of '%s' not defined (index=%d, URI=%s)\n", s, np->index, np->ns?np->ns:""));
+      return soap->error = SOAP_NAMESPACE; 
+    }
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Namespace prefix of '%s' not defined, assuming empty namespace\n", s));
+    if ((*t = (char*)soap_malloc(soap, strlen(p) + 4)))
+      sprintf(*t, "\"\":%s", p);
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_QName2s(struct soap *soap, const char *s)
+{ struct Namespace *p;
+  char *t;
+  int n;
+  if (!s || *s != '"')
+    return s;
+  s++;
+  if ((p = soap->local_namespaces))
+  { for (; p->id; p++)
+    { if (p->ns)
+        if (!soap_tag_cmp(s, p->ns))
+          break;
+      if (p->in)
+        if (!soap_tag_cmp(s, p->in))
+          break;
+    }
+    if (p && p->id)
+    { s = strchr(s, '"');
+      if (s)
+      { t = (char*)soap_malloc(soap, strlen(p->id) + strlen(s));
+        strcpy(t, p->id);
+       strcat(t, s + 1);
+        return t;
+      }
+    }
+  }
+  t = (char*)strchr(s, '"');
+  if (t)
+    n = t - s;
+  else
+    n = 0;
+  t = soap_strdup(soap, s);
+  t[n] = '\0';
+  sprintf(soap->tmpbuf, "xmlns:_%lu", soap->idnum++);
+  soap_set_attr(soap, soap->tmpbuf, t);
+  s = strchr(s, '"');
+  if (s)
+  { t = (char*)soap_malloc(soap, strlen(soap->tmpbuf) + strlen(s) - 6);
+    strcpy(t, soap->tmpbuf + 6);
+    strcat(t, s + 1);
+  }
+  return t;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outstring(struct soap *soap, const char *tag, int id, char *const*p, const char *type, int n) 
+{ id = soap_element_id(soap, tag, id, *p, NULL, 0, type, n);
+  if (id < 0
+   || soap_element_begin_out(soap, tag, id, type)
+   || soap_string_out(soap, *p, 0)
+   || soap_element_end_out(soap, tag))
+    return soap->error;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char **
+SOAP_FMAC2
+soap_instring(struct soap *soap, const char *tag, char **p, const char *type, int t, int flag, long minlen, long maxlen)
+{ if (soap_element_begin_in(soap, tag, 1))
+  { if (!tag || *tag != '-' || soap->error != SOAP_NO_TAG)
+      return NULL;
+    soap->error = SOAP_OK;
+  }
+  if (!p)
+    if (!(p = (char**)soap_malloc(soap, sizeof(char*))))
+      return NULL;
+  if (soap->body)
+  { *p = soap_string_in(soap, flag, minlen, maxlen);
+    if (!*p || !(char*)soap_id_enter(soap, soap->id, *p, t, sizeof(char*), 0, NULL, NULL, NULL))
+      return NULL;
+  }
+  else
+    *p = NULL;
+  p = (char**)soap_id_lookup(soap, soap->href, (void**)p, t, sizeof(char**), 0);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outwstring(struct soap *soap, const char *tag, int id, wchar_t *const*p, const char *type, int n) 
+{ id = soap_element_id(soap, tag, id, *p, NULL, 0, type, n);
+  if (id < 0
+   || soap_element_begin_out(soap, tag, id, type)
+   || soap_wstring_out(soap, *p, 0)
+   || soap_element_end_out(soap, tag))
+    return soap->error;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_2
+SOAP_FMAC1
+wchar_t **
+SOAP_FMAC2
+soap_inwstring(struct soap *soap, const char *tag, wchar_t **p, const char *type, int t, long minlen, long maxlen)
+{ if (soap_element_begin_in(soap, tag, 1))
+  { if (!tag || *tag != '-' || soap->error != SOAP_NO_TAG)
+      return NULL;
+    soap->error = SOAP_OK;
+  }
+  if (!p)
+    if (!(p = (wchar_t**)soap_malloc(soap, sizeof(wchar_t*))))
+      return NULL;
+  if (soap->body)
+  { *p = soap_wstring_in(soap, 1, minlen, maxlen);
+    if (!*p || !(wchar_t*)soap_id_enter(soap, soap->id, *p, t, sizeof(wchar_t*), 0, NULL, NULL, NULL))
+      return NULL;
+  }
+  else
+    *p = NULL;
+  p = (wchar_t**)soap_id_lookup(soap, soap->href, (void**)p, t, sizeof(wchar_t**), 0);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+static time_t
+soap_timegm(struct tm *T)
+{
+#if defined(HAVE_TIMEGM)
+  return timegm(T);
+#elif defined(HAVE_GETTIMEOFDAY)
+  struct timezone t;
+  struct timeval tv;
+  memset((void*)&t, 0, sizeof(t));
+  gettimeofday(&tv, &t);
+  T->tm_min -= t.tz_minuteswest - (t.tz_dsttime != 0)*60;
+  T->tm_isdst = 0;
+  return mktime(T);
+/* WR[ */
+  /* The following define was added for VxWorks*/
+#elif defined(HAVE_MKTIME)
+  /* FOR VXWORKS:
+  vxWorks does not seem to have any variable representation of time zones, but
+  timezone information can be set in INSTALL_DIR/target/h/private/timeP.h header
+  file, by setting the ZONEBUFFER define.  The ZONEBUFFER define follows this 
+  format:
+    name_of_zone:<(unused)>:time_in_minutes_from_UTC:daylight_start:daylight_end 
+  To calculate local time, the value of time_in_minutes_from_UTC is subtracted
+  from UTC; time_in_minutes_from_UTC must be positive. Daylight information is 
+  expressed as mmddhh (month-day-hour), for example: 
+    UTC::0:040102:100102
+  */
+  return mktime(T);
+/* ]WR */
+#elif defined(HAVE_FTIME)
+  struct timeb t;
+  memset((void*)&t, 0, sizeof(t));
+  t.timezone = 0;
+  t.dstflag = -1;
+  ftime(&t);
+  T->tm_min -= t.timezone - (t.dstflag != 0)*60;
+  T->tm_isdst = 0;
+  return mktime(T);
+#else
+#warning "time_t (de)serialization is not MT safe on this platform"
+  time_t t;
+  char *tz = getenv("TZ");
+  putenv("TZ=UTC");
+  tzset();
+  t = mktime(T);
+  if (tz)
+  { char tmp[16];
+    strcpy(tmp, "TZ=");
+    strncat(tmp, tz, 12);
+    tmp[15] = '\0';
+    putenv(tmp);
+  }
+  else
+    putenv("TZ=");
+  tzset();
+  return t;
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_dateTime2s(struct soap *soap, time_t n)
+{ struct tm T;
+  struct tm *pT = &T;
+#if defined(HAVE_GMTIME_R)
+  if (gmtime_r(&n, pT))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%SZ", pT);
+/* WR[ */
+  /* The following defines were added for VxWorks*/
+#elif defined(HAVE_PGMTIME_R)
+  if (gmtime_r(&n, pT))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%SZ", pT);
+#elif defined(HAVE_PGMTIME)
+  if (gmtime(&n, pT))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%SZ", pT);
+/* ]WR */
+#elif defined(HAVE_GMTIME)
+  if ((pT = gmtime(&n)))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%SZ", pT);
+#elif defined(HAVE_GETTIMEOFDAY)
+  struct timezone tz;
+  memset((void*)&tz, 0, sizeof(tz));
+#if defined(HAVE_LOCALTIME_R)
+  if (localtime_r(&n, pT))
+  { struct timeval tv;
+    gettimeofday(&tv, &tz);
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+    sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -tz.tz_minuteswest/60+(tz.tz_dsttime!=0), abs(tz.tz_minuteswest)%60);
+  }
+#else
+  if ((pT = localtime(&n)))
+  { struct timeval tv;
+    gettimeofday(&tv, &tz);
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+    sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -tz.tz_minuteswest/60+(tz.tz_dsttime!=0), abs(tz.tz_minuteswest)%60);
+  }
+#endif
+#elif defined(HAVE_FTIME)
+  struct timeb t;
+  memset((void*)&t, 0, sizeof(t));
+#if defined(HAVE_LOCALTIME_R)
+  if (localtime_r(&n, pT))
+  { ftime(&t);
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+    sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -t.timezone/60+(t.dstflag!=0), abs(t.timezone)%60);
+  }
+/* WR[ */
+  /* The following defines were added for VxWorks*/
+#elif defined(HAVE_PLOCALTIME_R)
+  if (localtime_r(&n, pT))
+  { strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+    sprintf(soap->tmpbuf+strlen(soap->tmpbuf), "%+03d:%02d", t.timezone/60, abs(t.timezone)%60);
+  }
+/* ]WR */
+#else
+  if ((pT = localtime(&n)))
+  { ftime(&t);
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+    sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -t.timezone/60+(t.dstflag!=0), abs(t.timezone)%60);
+  }
+#endif
+#elif defined(HAVE_LOCALTIME_R)
+  if (localtime_r(&n, pT))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+/* WR[ */
+  /* The following defines were added for VxWorks*/
+#elif defined(HAVE_PLOCALTIME_R)
+  if (localtime_r(&n, pT))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+/* ]WR */
+#else
+  if ((pT = localtime(&n)))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+#endif
+  else
+    strcpy(soap->tmpbuf, "1969-12-31T23:59:59Z");
+  return soap->tmpbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outdateTime(struct soap *soap, const char *tag, int id, const time_t *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_dateTime2s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2dateTime(struct soap *soap, const char *s, time_t *p)
+{ if (s)
+  { struct tm T;
+    char zone[16];
+    memset((void*)&T, 0, sizeof(T));
+    zone[sizeof(zone)-1] = '\0';
+    sscanf(s, "%d-%d-%dT%d:%d:%d%15s", &T.tm_year, &T.tm_mon, &T.tm_mday, &T.tm_hour, &T.tm_min, &T.tm_sec, zone);
+    if (T.tm_year == 1)
+      T.tm_year = 70;
+    else
+      T.tm_year -= 1900;
+    T.tm_mon--;
+    if (*zone)
+    { if (*zone == '.')
+      { for (s = zone + 1; *s; s++)
+          if (*s < '0' || *s > '9')
+            break;
+      }
+      else
+        s = zone;
+      if (*s != 'Z')
+      { int h = 0, m = 0;
+        sscanf(s, "%d:%d", &h, &m);
+        T.tm_hour -= h;
+        if (h >= 0)
+          T.tm_min -= m;
+        else
+          T.tm_min += m;
+      }
+      *p = soap_timegm(&T);
+    }
+    else
+      *p = mktime(&T); /* no time zone: suppose it is localtime? */
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+time_t *
+SOAP_FMAC2
+soap_indateTime(struct soap *soap, const char *tag, time_t *p, const char * type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":dateTime"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+  p = (time_t*)soap_id_enter(soap, soap->id, p, t, sizeof(time_t), 0, NULL, NULL, NULL);
+  if (p)
+  { if (soap_s2dateTime(soap, soap_value(soap), p))
+      return NULL;
+  }
+  p = (time_t*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(time_t), 0, NULL);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outliteral(struct soap *soap, const char *tag, char *const*p)
+{ int i;
+  const char *t = NULL;
+  if (tag && *tag != '-')
+  { if ((t = strchr(tag, ':')))
+    { strncpy(soap->tmpbuf, tag, t-tag);
+      soap->tmpbuf[t-tag] = '\0';
+      for (i = 0; soap->local_namespaces[i].id; i++)
+        if (!strcmp(soap->tmpbuf, soap->local_namespaces[i].id))
+          break;
+      t++;
+      sprintf(soap->tmpbuf, "<%s xmlns=\"%s\">", t, soap->local_namespaces[i].ns ? soap->local_namespaces[i].ns : SOAP_STR_EOS);
+    }
+    else
+    { t = tag;
+      sprintf(soap->tmpbuf, "<%s>", tag);
+    }
+    if (soap_send(soap, soap->tmpbuf))
+      return soap->error;
+  }
+  if (p && *p)
+  { if (soap_send(soap, *p))
+      return soap->error;
+  }
+  if (t)
+  { sprintf(soap->tmpbuf, "</%s>", t);
+    return soap_send(soap, soap->tmpbuf);
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char **
+SOAP_FMAC2
+soap_inliteral(struct soap *soap, const char *tag, char **p)
+{ if (soap_element_begin_in(soap, tag, 1))
+  { if (soap->error != SOAP_NO_TAG || soap_unget(soap, soap_get(soap)) == SOAP_TT)
+      return NULL;
+    soap->error = SOAP_OK;
+  }
+  if (!p)
+    if (!(p = (char**)soap_malloc(soap, sizeof(char*))))
+      return NULL;
+  if (soap->null)
+    *p = NULL;
+  else
+    *p = soap_string_in(soap, 0, -1, -1);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outwliteral(struct soap *soap, const char *tag, wchar_t *const*p)
+{ int i;
+  const char *t = NULL;
+  wchar_t c;
+  const wchar_t *s;
+  if (tag && *tag != '-')
+  { if (tag && (t = strchr(tag, ':')))
+    { strncpy(soap->tmpbuf, tag, t-tag);
+      soap->tmpbuf[t-tag] = '\0';
+      for (i = 0; soap->local_namespaces[i].id; i++)
+        if (!strcmp(soap->tmpbuf, soap->local_namespaces[i].id))
+          break;
+      t++;
+      sprintf(soap->tmpbuf, "<%s xmlns=\"%s\">", t, soap->local_namespaces[i].ns ? soap->local_namespaces[i].ns : SOAP_STR_EOS);
+    }
+    else
+    { t = tag;
+      sprintf(soap->tmpbuf, "<%s>", tag);
+    }
+    if (soap_send(soap, soap->tmpbuf))
+      return soap->error;
+  }
+  if (p)
+  { s = *p;
+    while ((c = *s++))
+      if (soap_pututf8(soap, (unsigned char)c))
+        return soap->error;
+  }
+  if (t)
+  { sprintf(soap->tmpbuf, "</%s>", t);
+    return soap_send(soap, soap->tmpbuf);
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_2
+SOAP_FMAC1
+wchar_t **
+SOAP_FMAC2
+soap_inwliteral(struct soap *soap, const char *tag, wchar_t **p)
+{ if (soap_element_begin_in(soap, tag, 1))
+  { if (soap->error != SOAP_NO_TAG || soap_unget(soap, soap_get(soap)) == SOAP_TT)
+      return NULL;
+    soap->error = SOAP_OK;
+  }
+  if (!p)
+    if (!(p = (wchar_t**)soap_malloc(soap, sizeof(wchar_t*))))
+      return NULL;
+  if (soap->null)
+    *p = NULL;
+  else
+    *p = soap_wstring_in(soap, 0, -1, -1);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char *
+SOAP_FMAC2
+soap_value(struct soap *soap)
+{ size_t i;
+  soap_wchar c = 0;
+  char *s = soap->tmpbuf;
+  if (!soap->body)
+    return SOAP_STR_EOS;
+  for (i = 0; i < sizeof(soap->tmpbuf) - 1; i++)
+  { c = soap_get(soap);
+    if (c == SOAP_TT || (int)c == EOF || soap_blank(c))
+      break;
+    *s++ = (char)c;
+  }
+  if ((int)c == EOF || c == SOAP_TT)
+    soap_unget(soap, c);
+  *s = '\0';
+  return soap->tmpbuf; /* return non-null pointer */
+}
+#endif
+
+/******************************************************************************/
+#if !defined(WITH_LEANER) || !defined(WITH_NOHTTP)
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getline(struct soap *soap, char *s, int len)
+{ int i = len;
+  soap_wchar c = 0;
+  for (;;)
+  { while (--i > 0)
+    { c = soap_getchar(soap);
+      if (c == '\r' || c == '\n')
+        break;
+      if ((int)c == EOF)
+        return soap->error = SOAP_EOF;
+      *s++ = (char)c;
+    }
+    if (c != '\n')
+      c = soap_getchar(soap); /* got \r, now get \n */
+    if (c == '\n')
+    { *s = '\0';
+      if (i+1 == len) /* empty line: end of HTTP/MIME header */
+        break;
+      c = soap_unget(soap, soap_getchar(soap));
+      if (c != ' ' && c != '\t') /* HTTP line continuation? */
+        break;
+    }
+    else if ((int)c == EOF)
+      return soap->error = SOAP_EOF;
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static size_t
+soap_count_attachments(struct soap *soap)
+{ 
+#ifndef WITH_LEANER
+  register struct soap_multipart *content;
+  register size_t count = soap->count;
+  if (soap->mode & SOAP_ENC_DIME)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Calculating the size of DIME attachments\n"));
+    for (content = soap->dime.first; content; content = content->next)
+    { count += 12 + ((content->size+3)&(~3));
+      if (content->id)
+        count += ((strlen(content->id)+3)&(~3));
+      if (content->type)
+        count += ((strlen(content->type)+3)&(~3));
+      if (content->options)
+        count += ((((unsigned char)content->options[2] << 8) | ((unsigned char)content->options[3]))+7)&(~3);
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Size of DIME attachment %lu bytes\n", (unsigned long)content->size));
+    }
+  }
+  if ((soap->mode & SOAP_ENC_MIME) && soap->mime.boundary)
+  { register size_t n = strlen(soap->mime.boundary);
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Calculating the size of MIME attachments\n"));
+    for (content = soap->mime.first; content; content = content->next)
+    { register const char *s;
+      /* count \r\n--boundary\r\n */
+      count += 6 + n;
+      /* count Content-Type: ...\r\n */
+      if (content->type)
+        count += 16 + strlen(content->type);
+      s = soap_str_code(mime_codes, content->encoding);
+      /* count Content-Transfer-Encoding: ...\r\n */
+      if (s)
+        count += 29 + strlen(s);
+      /* count Content-ID: ...\r\n */
+      if (content->id)
+        count += 14 + strlen(content->id);
+      /* count Content-Location: ...\r\n */
+      if (content->location)
+        count += 20 + strlen(content->location);
+      /* count Content-Description: ...\r\n */
+      if (content->description)
+        count += 23 + strlen(content->location);
+      /* count \r\n...content */
+      count += 2 + content->size;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Size of MIME attachment %lu bytes\n", (unsigned long)content->size));
+    }
+    /* count \r\n--boundary--\r\n */
+    count += 8 + n;
+  }
+  return count;
+#else
+  return soap->count;
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+static int
+soap_putdimefield(struct soap *soap, const char *s, size_t n)
+{ if (soap_send_raw(soap, s, n))
+    return soap->error;
+  return soap_send_raw(soap, SOAP_STR_PADDING, -(long)n&3);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_dime_option(struct soap *soap, unsigned short optype, const char *option)
+{ size_t n;
+  char *s = NULL;
+  if (option)
+  { n = strlen(option);
+    s = (char*)soap_malloc(soap, n + 5);
+    if (s)
+    { s[0] = optype >> 8;
+      s[1] = optype & 0xFF;
+      s[2] = n >> 8;
+      s[3] = n & 0xFF;
+      strcpy(s + 4, option);
+    }
+  }
+  return s;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putdimehdr(struct soap *soap)
+{ unsigned char tmp[12];
+  size_t optlen = 0, idlen = 0, typelen = 0;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Put DIME header id='%s'\n", soap->dime.id?soap->dime.id:""));
+  if (soap->dime.options)
+    optlen = (((unsigned char)soap->dime.options[2] << 8) | ((unsigned char)soap->dime.options[3])) + 4;
+  if (soap->dime.id)
+    idlen = strlen(soap->dime.id);
+  if (soap->dime.type)
+    typelen = strlen(soap->dime.type);
+  tmp[0] = SOAP_DIME_VERSION | (soap->dime.flags & 0x7);
+  tmp[1] = soap->dime.flags & 0xF0;
+  tmp[2] = optlen >> 8;
+  tmp[3] = optlen & 0xFF;
+  tmp[4] = idlen >> 8;
+  tmp[5] = idlen & 0xFF;
+  tmp[6] = typelen >> 8;
+  tmp[7] = typelen & 0xFF;
+  tmp[8] = soap->dime.size >> 24;
+  tmp[9] = (soap->dime.size >> 16) & 0xFF;
+  tmp[10] = (soap->dime.size >> 8) & 0xFF;
+  tmp[11] = soap->dime.size & 0xFF;
+  if (soap_send_raw(soap, (char*)tmp, 12)
+   || soap_putdimefield(soap, soap->dime.options, optlen)
+   || soap_putdimefield(soap, soap->dime.id, idlen)
+   || soap_putdimefield(soap, soap->dime.type, typelen))
+    return soap->error;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putdime(struct soap *soap)
+{ struct soap_multipart *content;
+  if (!(soap->mode & SOAP_ENC_DIME))
+    return SOAP_OK;
+  for (content = soap->dime.first; content; content = content->next)
+  { void *handle;
+    soap->dime.size = content->size;
+    soap->dime.id = content->id;
+    soap->dime.type = content->type;
+    soap->dime.options = content->options;
+    soap->dime.flags = SOAP_DIME_VERSION | SOAP_DIME_MEDIA;
+    if (soap->fdimereadopen && ((handle = soap->fdimereadopen(soap, (void*)content->ptr, content->id, content->type, content->options)) || soap->error))
+    { size_t size = content->size;
+      if (!handle)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimereadopen failed\n"));
+        return soap->error;
+      }
+      if (!content->size && ((soap->mode & SOAP_ENC_XML) || (soap->mode & SOAP_IO) == SOAP_IO_CHUNK || (soap->mode & SOAP_IO) == SOAP_IO_STORE))
+      { size_t chunksize = sizeof(soap->tmpbuf);
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked streaming DIME\n"));
+        do 
+        { size = soap->fdimeread(soap, handle, soap->tmpbuf, chunksize);
+          DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimeread returned %lu bytes\n", (unsigned long)size));
+          if (size < chunksize)
+         { soap->dime.flags &= ~SOAP_DIME_CF;
+            if (!content->next)
+              soap->dime.flags |= SOAP_DIME_ME;
+         }
+          else
+            soap->dime.flags |= SOAP_DIME_CF;
+         soap->dime.size = size;
+          if (soap_putdimehdr(soap)
+          || soap_putdimefield(soap, soap->tmpbuf, size))
+            break;
+          if (soap->dime.id)
+         { soap->dime.flags &= ~(SOAP_DIME_MB | SOAP_DIME_MEDIA);
+            soap->dime.id = NULL;
+            soap->dime.type = NULL;
+            soap->dime.options = NULL;
+          }  
+        } while (size >= chunksize);
+      }
+      else
+      { if (!content->next)
+          soap->dime.flags |= SOAP_DIME_ME;
+        if (soap_putdimehdr(soap))
+          return soap->error;
+        do
+        { size_t bufsize;
+         if (size < sizeof(soap->tmpbuf))
+            bufsize = size;
+          else
+            bufsize = sizeof(soap->tmpbuf);
+          if (!(bufsize = soap->fdimeread(soap, handle, soap->tmpbuf, bufsize)))
+          { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimeread failed: insufficient data (%lu bytes remaining from %lu bytes)\n", (unsigned long)size, (unsigned long)soap->dime.size));
+            soap->error = SOAP_EOF;
+           break;
+          }
+          if (soap_send_raw(soap, soap->tmpbuf, bufsize))
+            break;
+          size -= bufsize;
+        } while (size);
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimereadclose\n"));
+        soap_send_raw(soap, SOAP_STR_PADDING, -(long)soap->dime.size&3);
+      }
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimereadclose\n"));
+      if (soap->fdimereadclose)
+        soap->fdimereadclose(soap, handle);
+    }
+    else
+    { if (!content->next)
+        soap->dime.flags |= SOAP_DIME_ME;
+      if (soap_putdimehdr(soap)
+       || soap_putdimefield(soap, (char*)content->ptr, content->size))
+        return soap->error;
+    }
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+static char *
+soap_getdimefield(struct soap *soap, size_t n)
+{ register soap_wchar c;
+  register int i;
+  register char *s;
+  char *p = NULL;
+  if (n)
+  { p = (char*)soap_malloc(soap, n + 1);
+    if (p)
+    { s = p;
+      for (i = n; i > 0; i--)
+      { if ((int)(c = soap_get1(soap)) == EOF)
+        { soap->error = SOAP_EOF;
+          return NULL;
+        }
+        *s++ = (char)c;
+      }
+      *s = '\0';
+      if ((soap->error = soap_move(soap, -(long)n&3)))
+        return NULL;
+    }
+    else
+      soap->error = SOAP_EOM;
+  }
+  return p;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getdimehdr(struct soap *soap)
+{ register soap_wchar c;
+  register char *s;
+  register int i;
+  unsigned char tmp[12];
+  size_t optlen, idlen, typelen;
+  if (!(soap->mode & SOAP_ENC_DIME))
+    return soap->error = SOAP_DIME_END;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get DIME header\n"));
+  if (soap->dime.buflen || soap->dime.chunksize)
+  { if (soap_move(soap, (long)(soap->dime.size - soap_tell(soap))))
+      return soap->error = SOAP_EOF;
+    soap_unget(soap, soap_getchar(soap)); /* skip padding and get hdr */
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... From chunked\n"));
+    return SOAP_OK;
+  }
+  s = (char*)tmp;
+  for (i = 12; i > 0; i--)
+  { if ((int)(c = soap_getchar(soap)) == EOF)
+      return soap->error = SOAP_EOF;
+    *s++ = (char)c;
+  }
+  if ((tmp[0] & 0xF8) != SOAP_DIME_VERSION)
+    return soap->error = SOAP_DIME_MISMATCH;
+  soap->dime.flags = (tmp[0] & 0x7) | (tmp[1] & 0xF0);
+  optlen = (tmp[2] << 8) | tmp[3];
+  idlen = (tmp[4] << 8) | tmp[5];
+  typelen = (tmp[6] << 8) | tmp[7];
+  soap->dime.size = (tmp[8] << 24) | (tmp[9] << 16) | (tmp[10] << 8) | tmp[11];
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DIME size=%lu flags=0x%X\n", (unsigned long)soap->dime.size, soap->dime.flags));
+  if (!(soap->dime.options = soap_getdimefield(soap, optlen)) && soap->error)
+    return soap->error;
+  if (!(soap->dime.id = soap_getdimefield(soap, idlen)) && soap->error)
+    return soap->error;
+  if (!(soap->dime.type = soap_getdimefield(soap, typelen)) && soap->error)
+    return soap->error;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DIME id=%s, type=%s, options=%s\n", soap->dime.id?soap->dime.id:"", soap->dime.type?soap->dime.type:"", soap->dime.options?soap->dime.options+4:""));
+  if (soap->dime.flags & SOAP_DIME_ME)
+    soap->mode &= ~SOAP_ENC_DIME;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getdime(struct soap *soap)
+{ struct soap_multipart *content;
+  if (soap_getdimehdr(soap))
+    return soap->error;
+  if (soap->fdimewriteopen && ((soap->dime.ptr = (char*)soap->fdimewriteopen(soap, soap->dime.id, soap->dime.type, soap->dime.options)) || soap->error))
+  { const char *id, *type, *options;
+    size_t size, n;
+    if (!soap->dime.ptr)
+      return soap->error;
+    id = soap->dime.id;
+    type = soap->dime.type;
+    options = soap->dime.options;
+    for (;;)
+    { size = soap->dime.size;
+      for (;;)
+      { n = soap->buflen - soap->bufidx;
+        if (size < n)
+          n = size;
+        if ((soap->error = soap->fdimewrite(soap, (void*)soap->dime.ptr, soap->buf + soap->bufidx, n)))
+          break;
+       size -= n;
+       if (!size)
+       { soap->bufidx += n;
+         break;
+       }
+       if (soap_recv(soap))
+        { soap->error = SOAP_EOF;
+         goto end;
+        }
+      }
+      if (soap_move(soap, -(long)soap->dime.size&3))
+      { soap->error = SOAP_EOF;
+       break;
+      }
+      if (!(soap->dime.flags & SOAP_DIME_CF))
+        break;
+      if (soap_getdimehdr(soap))
+        break;
+    }
+end:
+    if (soap->fdimewriteclose)
+      soap->fdimewriteclose(soap, (void*)soap->dime.ptr);
+    soap->dime.size = 0;
+    soap->dime.id = id;
+    soap->dime.type = type;
+    soap->dime.options = options;
+  }
+  else if (soap->dime.flags & SOAP_DIME_CF)
+  { const char *id, *type, *options;
+    register soap_wchar c;
+    register char *s;
+    register int i;
+    id = soap->dime.id;
+    type = soap->dime.type;
+    options = soap->dime.options;
+    if (soap_new_block(soap))
+      return SOAP_EOM;
+    for (;;)
+    { s = (char*)soap_push_block(soap, soap->dime.size);
+      if (!s)
+        return soap->error = SOAP_EOM;
+      for (i = soap->dime.size; i > 0; i--)
+      { if ((int)(c = soap_get1(soap)) == EOF)
+          return soap->error = SOAP_EOF;
+        *s++ = (char)c;
+      }
+      if (soap_move(soap, -(long)soap->dime.size&3))
+        return soap->error = SOAP_EOF;
+      if (!(soap->dime.flags & SOAP_DIME_CF))
+        break;
+      if (soap_getdimehdr(soap))
+        return soap->error;
+    }
+    soap->dime.size = soap->blist->size++; /* allocate one more for '\0' */
+    if (!(soap->dime.ptr = soap_save_block(soap, NULL, 0)))
+      return soap->error;
+    soap->dime.ptr[soap->dime.size] = '\0'; /* force 0-terminated */
+    soap->dime.id = id;
+    soap->dime.type = type;
+    soap->dime.options = options;
+  }
+  else
+    soap->dime.ptr = soap_getdimefield(soap, soap->dime.size);
+  content = soap_new_multipart(soap, &soap->dime.first, &soap->dime.last, soap->dime.ptr, soap->dime.size);
+  if (!content)
+    return soap->error = SOAP_EOM;
+  content->id = soap->dime.id;
+  content->type = soap->dime.type;
+  content->options = soap->dime.options;
+  return soap->error;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getmimehdr(struct soap *soap)
+{ struct soap_multipart *content;
+  do
+  { if (soap_getline(soap, soap->msgbuf, sizeof(soap->msgbuf)))
+      return soap->error;
+  }
+  while (!*soap->msgbuf);
+  if (soap->msgbuf[0] == '-' && soap->msgbuf[1] == '-')
+  { char *s = soap->msgbuf + strlen(soap->msgbuf) - 1;
+    /* remove white space */
+    while (soap_blank(*s))
+      s--;
+    s[1] = '\0';
+    if (soap->mime.boundary)
+    { if (strcmp(soap->msgbuf + 2, soap->mime.boundary))
+        return soap->error = SOAP_MIME_ERROR;
+    }
+    else
+      soap->mime.boundary = soap_strdup(soap, soap->msgbuf + 2);
+    if (soap_getline(soap, soap->msgbuf, sizeof(soap->msgbuf)))
+      return soap->error;
+  }
+  if (soap_set_mime_attachment(soap, NULL, 0, SOAP_MIME_NONE, NULL, NULL, NULL, NULL))
+    return soap->error = SOAP_EOM;
+  content = soap->mime.last;
+  for (;;)
+  { register char *key = soap->msgbuf;
+    register char *val;
+    if (!*key)
+      break;
+    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "MIME header: %s\n", key));
+    val = strchr(soap->msgbuf, ':');
+    if (val)
+    { *val = '\0';
+      do val++;
+      while (*val && *val <= 32);
+      if (!soap_tag_cmp(key, "Content-ID"))
+        content->id = soap_strdup(soap, val);
+      else if (!soap_tag_cmp(key, "Content-Location"))
+        content->location = soap_strdup(soap, val);
+      else if (!soap_tag_cmp(key, "Content-Type"))
+        content->type = soap_strdup(soap, val);
+      else if (!soap_tag_cmp(key, "Content-Description"))
+        content->description = soap_strdup(soap, val);
+      else if (!soap_tag_cmp(key, "Content-Transfer-Encoding"))
+        content->encoding = (enum soap_mime_encoding)soap_int_code(mime_codes, val, (long)SOAP_MIME_NONE);
+    }
+    if (soap_getline(soap, key, sizeof(soap->msgbuf)))
+      return soap->error;
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getmime(struct soap *soap)
+{ register soap_wchar c;
+  if (!soap->mime.last)
+    return SOAP_OK;
+  for (;;)
+  { register size_t i, m = 0;
+    register char *s, *t = NULL;
+    struct soap_multipart *content = soap->mime.last;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Parsing MIME content id=%s type=%s\n", content->id?content->id:"", content->type?content->type:""));
+    if (soap_new_block(soap))
+      return soap->error = SOAP_EOM;
+    for (;;)
+    { if (!(s = (char*)soap_push_block(soap, SOAP_BLKLEN)))
+        return soap->error = SOAP_EOM;
+      for (i = 0; i < SOAP_BLKLEN; i++)
+      { if (m > 0)
+        { *s++ = *t++;
+         m--;
+       }
+       else
+        { c = soap_get1(soap);
+         if ((int)c == EOF)
+           return soap->error = SOAP_EOF;
+         if (c == '\r')
+         { t = soap->tmpbuf;
+           memset(t, 0, sizeof(soap->tmpbuf));
+            strcpy(t, "\n--");
+            strncat(t, soap->mime.boundary, sizeof(soap->tmpbuf)-4);
+           do c = soap_getchar(soap);
+           while (c == *t++);
+           if ((int)c == EOF)
+             return soap->error = SOAP_EOF;
+           if (!*--t)
+             goto end;
+           *t = (char)c;
+           m = t - soap->tmpbuf + 1;
+           t = soap->tmpbuf;
+           c = '\r';
+         }
+         *s++ = (char)c;
+        }
+      }
+    }
+end:
+    *s = '\0'; /* force 0-terminated */
+    content->size = soap_size_block(soap, i+1)-1;
+    content->ptr = soap_save_block(soap, NULL, 0);
+    if (c == '-' && soap_getchar(soap) == '-')
+      break;
+    while (c != '\r' && (int)c != EOF && soap_blank(c))
+      c = soap_getchar(soap);
+    if (c != '\r' || soap_getchar(soap) != '\n')
+      return soap->error = SOAP_MIME_ERROR;
+    if (soap_getmimehdr(soap))
+      return soap->error;
+  }
+  do c = soap_getchar(soap);
+  while ((int)c != EOF && c != '\r');
+  if ((int)c == EOF)
+    return soap->error = SOAP_EOF;
+  if (soap_getchar(soap) != '\n')
+    return soap->error = SOAP_MIME_ERROR;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putmimehdr(struct soap *soap, struct soap_multipart *content)
+{ const char *s;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "MIME attachment type=%s\n", content->type?content->type:""));
+  if (soap_send3(soap, "\r\n--", soap->mime.boundary, "\r\n"))
+    return soap->error;
+  if (content->type && soap_send3(soap, "Content-Type: ", content->type, "\r\n"))
+    return soap->error;
+  s = soap_str_code(mime_codes, content->encoding);
+  if (s && soap_send3(soap, "Content-Transfer-Encoding: ", s, "\r\n"))
+    return soap->error;
+  if (content->id && soap_send3(soap, "Content-ID: ", content->id, "\r\n"))
+    return soap->error;
+  if (content->location && soap_send3(soap, "Content-Location: ", content->location, "\r\n"))
+    return soap->error;
+  if (content->description && soap_send3(soap, "Content-Description: ", content->description, "\r\n"))
+    return soap->error;
+  return soap_send_raw(soap, "\r\n", 2);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putmime(struct soap *soap)
+{ struct soap_multipart *content;
+  if (!(soap->mode & SOAP_ENC_MIME) || !soap->mime.boundary)
+    return SOAP_OK;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending MIME attachments\n"));
+  for (content = soap->mime.first; content; content = content->next)
+    if (soap_putmimehdr(soap, content)
+     || soap_send_raw(soap, content->ptr, content->size))
+      return soap->error;
+  return soap_send3(soap, "\r\n--", soap->mime.boundary, "--\r\n");
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_dime(struct soap *soap)
+{ soap->omode |= SOAP_ENC_DIME;
+  soap->dime.first = NULL;
+  soap->dime.last = NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_mime(struct soap *soap, const char *boundary, const char *start)
+{ soap->omode |= SOAP_ENC_MIME;
+  soap->mime.first = NULL;
+  soap->mime.last = NULL;
+  soap->mime.boundary = soap_strdup(soap, boundary);
+  soap->mime.start = soap_strdup(soap, start);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_clr_dime(struct soap *soap)
+{ soap->omode &= ~SOAP_ENC_DIME;
+  soap->dime.first = NULL;
+  soap->dime.last = NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_clr_mime(struct soap *soap)
+{ soap->omode &= ~SOAP_ENC_MIME;
+  soap->mime.first = NULL;
+  soap->mime.last = NULL;
+  soap->mime.boundary = NULL;
+  soap->mime.start = NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+static struct soap_multipart*
+soap_new_multipart(struct soap *soap, struct soap_multipart **first, struct soap_multipart **last, char *ptr, size_t size)
+{ struct soap_multipart *content;
+  content = (struct soap_multipart*)soap_malloc(soap, sizeof(struct soap_multipart));
+  if (content)
+  { content->next = NULL;
+    content->ptr = ptr;
+    content->size = size;
+    content->id = NULL;
+    content->type = NULL;
+    content->options = NULL;
+    content->encoding = SOAP_MIME_NONE;
+    content->location = NULL;
+    content->description = NULL;
+    if (!*first)
+      *first = content;
+    if (*last)
+      (*last)->next = content;
+    *last = content;
+  }
+  return content;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_dime_attachment(struct soap *soap, char *ptr, size_t size, const char *type, const char *id, unsigned short optype, const char *option)
+{ struct soap_multipart *content = soap_new_multipart(soap, &soap->dime.first, &soap->dime.last, ptr, size);
+  if (!content)
+    return SOAP_EOM;
+  content->id = soap_strdup(soap, id);
+  content->type = soap_strdup(soap, type);
+  content->options = soap_dime_option(soap, optype, option);
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_mime_attachment(struct soap *soap, char *ptr, size_t size, enum soap_mime_encoding encoding, const char *type, const char *id, const char *location, const char *description)
+{ struct soap_multipart *content = soap_new_multipart(soap, &soap->mime.first, &soap->mime.last, ptr, size);
+  if (!content)
+    return SOAP_EOM;
+  content->id = soap_strdup(soap, id);
+  content->type = soap_strdup(soap, type);
+  content->encoding = encoding;
+  content->location = soap_strdup(soap, location);
+  content->description = soap_strdup(soap, description);
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap_multipart*
+SOAP_FMAC2
+soap_next_multipart(struct soap_multipart *content)
+{ if (content)
+    return content->next;
+  return NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+static void
+soap_select_mime_boundary(struct soap *soap)
+{ while (!soap->mime.boundary || soap_valid_mime_boundary(soap))
+  { register char *s = soap->mime.boundary;
+    register size_t n = 0;
+    if (s)
+      n = strlen(s);
+    if (n < 16)
+    { n = 72;
+      s = soap->mime.boundary = (char*)soap_malloc(soap, n + 1);
+      if (!s)
+        return;
+    }
+    strcpy(s, "<>");
+    s += 2;
+    n -= 4;
+    while (n)
+    { *s++ = soap_base64o[rand()&0x3F];
+      n--;
+    }
+    strcpy(s, "<>");
+  }
+  if (!soap->mime.start)
+    soap->mime.start = "<SOAP-ENV:Envelope>";
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+static int
+soap_valid_mime_boundary(struct soap *soap)
+{ register struct soap_multipart *content;
+  register size_t k = strlen(soap->mime.boundary);
+  for (content = soap->mime.first; content; content = content->next)
+  { if (content->ptr && content->size >= k)
+    { register const char *p = (const char*)content->ptr; 
+      register size_t i;
+      for (i = 0; i < content->size - k; i++, p++)
+        if (!strncmp(p, soap->mime.boundary, k))
+          return SOAP_ERR;
+    }
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+
+#ifdef WITH_COOKIES
+/******************************************************************************/
+SOAP_FMAC1
+size_t
+SOAP_FMAC2
+soap_encode_cookie(const char *s, char *t, size_t len)
+{ register int c;
+  register size_t n = len;
+  while ((c = *s++) && --n > 0)
+  { if (c > ' ' && c < 128 && !strchr("()<>@,;:\\\"/[]?={}", c))
+      *t++ = c;
+    else if (n > 2)
+    { *t++ = '%';
+      *t++ = (c >> 4) + (c > 159 ? '7' : '0');
+      c &= 0xF;
+      *t++ = c + (c > 9 ? '7' : '0');
+      n -= 2;
+    }
+    else
+      break;
+  }
+  *t = '\0';
+  return len - n;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+struct soap_cookie*
+SOAP_FMAC2
+soap_cookie(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  size_t n;
+  if (!domain)
+    domain = soap->cookie_domain;
+  if (!path)
+    path = soap->cookie_path;
+  if (*path == '/')
+    path++;
+  n = strlen(path);
+  for (p = soap->cookies; p; p = p->next)
+    if (!strcmp(p->name, name)
+     && domain
+     && p->domain
+     && !strcmp(p->domain, domain)
+     && !strncmp(p->path, path, n))
+      break;
+  return p;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+struct soap_cookie*
+SOAP_FMAC2
+soap_set_cookie(struct soap *soap, const char *name, const char *value, const char *domain, const char *path)
+{ struct soap_cookie **p, *q;
+  int n;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set cookie: %s=%s domain=%s path=%s\n", name, value?value:"", domain?domain:"", path?path:""));
+  if (!domain)
+    domain = soap->cookie_domain;
+  if (!path)
+    path = soap->cookie_path;
+  if (!path)
+  { soap_set_receiver_error(soap, "Cookie path not set", NULL, SOAP_HTTP_ERROR);
+    return NULL;
+  }
+  if (*path == '/')
+    path++;
+  q = soap_cookie(soap, name, domain, path);
+  if (!q)
+  { if ((q = (struct soap_cookie*)SOAP_MALLOC(sizeof(struct soap_cookie))))
+    { if ((q->name = (char*)SOAP_MALLOC(strlen(name)+1)))
+        strcpy(q->name, name);
+      q->value = NULL;
+      q->domain = NULL;
+      q->path = NULL;
+      q->expire = -1;
+      q->version = 0;
+      q->secure = 0;
+      q->env = 0;
+      q->modified = 0;
+      for (p = &soap->cookies, n = soap->cookie_max; *p && n; p = &(*p)->next, n--)
+        if (!strcmp((*p)->name, name) && (*p)->path && strcmp((*p)->path, path) < 0)
+          break;
+      if (n)
+      { q->next = *p;
+        *p = q;
+      }
+      else
+      { SOAP_FREE(q->name);
+        SOAP_FREE(q);
+        q = NULL;
+      }
+    }
+  }
+  else
+    q->modified = 1;
+  if (q)
+  { if (q->value)
+    { SOAP_FREE(q->value);
+      q->value = NULL;
+    }
+    if (q->domain)
+    { SOAP_FREE(q->domain);
+      q->domain = NULL;
+    }
+    if (q->path)
+    { SOAP_FREE(q->path);
+      q->path = NULL;
+    }
+    if (value && *value && (q->value = (char*)SOAP_MALLOC(strlen(value)+1)))
+      strcpy(q->value, value);
+    if (domain && *domain && (q->domain = (char*)SOAP_MALLOC(strlen(domain)+1)))
+      strcpy(q->domain, domain);
+    if (path && *path && (q->path = (char*)SOAP_MALLOC(strlen(path)+1)))
+      strcpy(q->path, path);
+    q->session = 1;
+  }
+  return q;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_clr_cookie(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie **p, *q;
+  if (!domain)
+    domain = soap->cookie_domain;
+  if (!domain)
+  { soap_set_receiver_error(soap, "Cookie domain not set", SOAP_STR_EOS, SOAP_HTTP_ERROR);
+    return;
+  }
+  if (!path)
+    path = soap->cookie_path;
+  if (!path)
+  { soap_set_receiver_error(soap, "Cookie path not set", SOAP_STR_EOS, SOAP_HTTP_ERROR);
+    return;
+  }
+  if (*path == '/')
+    path++;
+  for (p = &soap->cookies, q = *p; q; q = *p)
+    if (!strcmp(q->name, name) && !strcmp(q->domain, domain) && !strncmp(q->path, path, strlen(q->path)))
+    { if (q->value)
+        SOAP_FREE(q->value);
+      if (q->domain)
+        SOAP_FREE(q->domain);
+      if (q->path)
+        SOAP_FREE(q->path);
+      *p = q->next;
+      SOAP_FREE(q);
+    }
+    else
+      p = &q->next;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_cookie_value(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  if ((p = soap_cookie(soap, name, domain, path)))
+    return p->value;
+  return NULL;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+long
+SOAP_FMAC2
+soap_cookie_expire(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  if ((p = soap_cookie(soap, name, domain, path)))
+    return p->expire;
+  return -1;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_cookie_expire(struct soap *soap, const char *name, long expire, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  if ((p = soap_cookie(soap, name, domain, path)))
+  { p->expire = expire;
+    p->modified = 1;
+    return SOAP_OK;
+  }
+  return SOAP_ERR;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_cookie_session(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  if ((p = soap_cookie(soap, name, domain, path)))
+  { p->session = 1;
+    p->modified = 1;
+    return SOAP_OK;
+  }
+  return SOAP_ERR;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_clr_cookie_session(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  if ((p = soap_cookie(soap, name, domain, path)))
+  { p->session = 0;
+    p->modified = 1;
+    return SOAP_OK;
+  }
+  return SOAP_ERR;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putsetcookies(struct soap *soap)
+{ struct soap_cookie *p;
+  char *s, tmp[4096];
+  const char *t;
+  for (p = soap->cookies; p; p = p->next)
+  { if (p->modified || !p->env)
+    { s = tmp;
+      if (p->name)
+        s += soap_encode_cookie(p->name, s, tmp-s+4064);
+      if (p->value && *p->value)
+      { *s++ = '=';
+        s += soap_encode_cookie(p->value, s, tmp-s+4064);
+      }
+      if (p->domain && (int)strlen(p->domain) < tmp-s+4064)
+        sprintf(s, ";Domain=\"%s\"", p->domain);
+      else if (soap->cookie_domain && (int)strlen(soap->cookie_domain) < tmp-s+4064)
+        sprintf(s, ";Domain=\"%s\"", soap->cookie_domain);
+      strcat(s, ";Path=\"/");
+      if (p->path)
+        t = p->path;
+      else
+        t = soap->cookie_path;
+      if (t)
+      { if (*t == '/')
+          t++;
+        if ((int)strlen(t) < tmp-s+4064)
+          strcat(s, t);
+      }
+      s += strlen(s);
+      *s++ = '"';
+      if (p->version > 0)
+        sprintf(s, ";Version=%u", p->version);
+      if (p->expire >= 0)
+        sprintf(s, ";Max-Age=%ld", p->expire);
+      if (p->secure)
+        strcat(s, ";Secure");
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set-Cookie: %s\n", tmp));
+      if (soap->fposthdr(soap, "Set-Cookie", tmp))
+        return soap->error;
+    }
+  }
+  return SOAP_OK;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putcookies(struct soap *soap, const char *domain, const char *path, int secure)
+{ struct soap_cookie **p, *q;
+  unsigned int version = 0;
+  time_t now = time(NULL);
+  char *s, tmp[4096];
+  p = &soap->cookies;
+  while ((q = *p))
+  { if (q->expire && now > q->expire)
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Cookie %s expired\n", q->name));
+      SOAP_FREE(q->name);
+      if (q->value)
+        SOAP_FREE(q->value);
+      if (q->domain)
+        SOAP_FREE(q->domain);
+      if (q->path)
+        SOAP_FREE(q->path);
+      *p = q->next;
+      SOAP_FREE(q);
+    }
+    else if ((!q->domain || !strcmp(q->domain, domain))
+          && (!q->path || !strncmp(q->path, path, strlen(q->path)))
+          && (!q->secure || secure))
+    { s = tmp;
+      if (q->version != version)
+      { sprintf(s, "$Version=%u;", q->version);
+        version = q->version;
+      }
+      if (q->name)
+        s += soap_encode_cookie(q->name, s, tmp-s+4080);
+      if (q->value && *q->value)
+      { *s++ = '=';
+        s += soap_encode_cookie(q->value, s, tmp-s+4080);
+      }
+      if (q->path && (int)strlen(q->path) < tmp-s+4080)
+      { sprintf(s, ";$Path=\"/%s\"", q->path);
+        s += strlen(s);
+      }
+      if (q->domain && (int)strlen(q->domain) < tmp-s+4080)
+        sprintf(s, ";$Domain=\"%s\"", q->domain);
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Cookie: %s\n", tmp));
+      if (soap->fposthdr(soap, "Cookie", tmp))
+        return soap->error;
+      p = &q->next;
+    }
+    else
+      p = &q->next;
+  }
+  return SOAP_OK;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_getcookies(struct soap *soap, const char *val)
+{ struct soap_cookie *p = NULL, *q;
+  const char *s;
+  char *t, tmp[4096]; /* cookie size is up to 4096 bytes [RFC2109] */
+  char *domain = NULL;
+  char *path = NULL;
+  unsigned int version = 0;
+  time_t now = time(NULL);
+  if (!val)
+    return;
+  s = val;
+  while (*s)
+  { s = soap_decode_key(tmp, sizeof(tmp), s);
+    if (!soap_tag_cmp(tmp, "$Version"))
+    { if ((s = soap_decode_val(tmp, sizeof(tmp), s)))
+      { if (p)
+          p->version = (int)atol(tmp);
+        else
+          version = (int)atol(tmp);
+      }
+    }
+    else if (!soap_tag_cmp(tmp, "$Path"))
+    { s = soap_decode_val(tmp, sizeof(tmp), s);
+      if (*tmp)
+      { if ((t = (char*)SOAP_MALLOC(strlen(tmp)+1)))
+          strcpy(t, tmp);
+      }
+      else
+        t = NULL;
+      if (p)
+      { if (p->path)
+          SOAP_FREE(p->path);
+        p->path = t;
+      }
+      else
+      { if (path)
+          SOAP_FREE(path);
+        path = t;
+      }
+    }
+    else if (!soap_tag_cmp(tmp, "$Domain"))
+    { s = soap_decode_val(tmp, sizeof(tmp), s);
+      if (*tmp)
+      { if ((t = (char*)SOAP_MALLOC(strlen(tmp)+1)))
+          strcpy(t, tmp);
+      }
+      else
+        t = NULL;
+      if (p)
+      { if (p->domain)
+          SOAP_FREE(p->domain);
+       p->domain = t;
+      }
+      else
+      { if (domain)
+          SOAP_FREE(domain);
+        domain = t;
+      }
+    }
+    else if (p && !soap_tag_cmp(tmp, "Path"))
+    { if (p->path)
+        SOAP_FREE(p->path);
+      s = soap_decode_val(tmp, sizeof(tmp), s);
+      if (*tmp)
+      { if ((p->path = (char*)SOAP_MALLOC(strlen(tmp)+1)))
+          strcpy(p->path, tmp);
+      }
+      else
+        p->path = NULL;
+    }
+    else if (p && !soap_tag_cmp(tmp, "Domain"))
+    { if (p->domain)
+        SOAP_FREE(p->domain);
+      s = soap_decode_val(tmp, sizeof(tmp), s);
+      if (*tmp)
+      { if ((p->domain = (char*)SOAP_MALLOC(strlen(tmp)+1)))
+          strcpy(p->domain, tmp);
+      }
+      else
+        p->domain = NULL;
+    }
+    else if (p && !soap_tag_cmp(tmp, "Version"))
+    { s = soap_decode_val(tmp, sizeof(tmp), s);
+      p->version = (unsigned int)atol(tmp);
+    }
+    else if (p && !soap_tag_cmp(tmp, "Max-Age"))
+    { s = soap_decode_val(tmp, sizeof(tmp), s);
+      p->expire = now + atol(tmp);
+    }
+    else if (p && !soap_tag_cmp(tmp, "Expires"))
+    { struct tm T;
+      char a[3]; 
+      static const char mns[] = "anebarprayunulugepctovec";
+      s = soap_decode_val(tmp, sizeof(tmp), s);
+      if (strlen(tmp) > 20)
+      { memset((void*)&T, 0, sizeof(T));
+        a[0] = tmp[4];
+        a[1] = tmp[5];
+        a[2] = '\0';
+        T.tm_mday = (int)atol(a);
+        a[0] = tmp[8];
+        a[1] = tmp[9];
+        T.tm_mon = (strstr(mns, a) - mns) / 2;
+        a[0] = tmp[11];
+        a[1] = tmp[12];
+        T.tm_year = 100 + (int)atol(a);
+        a[0] = tmp[13];
+        a[1] = tmp[14];
+        T.tm_hour = (int)atol(a);
+        a[0] = tmp[16];
+        a[1] = tmp[17];
+        T.tm_min = (int)atol(a);
+        a[0] = tmp[19];
+        a[1] = tmp[20];
+        T.tm_sec = (int)atol(a);
+        p->expire = soap_timegm(&T);
+      }
+    }
+    else if (p && !soap_tag_cmp(tmp, "Secure"))
+      p->secure = 1;
+    else
+    { if (p)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Got environment cookie %s=%s domain=%s path=%s expire=%ld secure=%d\n", p->name, p->value?p->value:"", p->domain?p->domain:"", p->path?p->path:"", p->expire, p->secure));
+        if ((q = soap_set_cookie(soap, p->name, p->value, p->domain, p->path)))
+        { q->version = p->version;
+          q->expire = p->expire;
+          q->secure = p->secure;
+          q->env = 1;
+        }
+        if (p->name)
+          SOAP_FREE(p->name);
+        if (p->value)
+          SOAP_FREE(p->value);
+        if (p->domain)
+          SOAP_FREE(p->domain);
+        if (p->path)
+          SOAP_FREE(p->path);
+        SOAP_FREE(p);
+      }
+      if ((p = (struct soap_cookie*)SOAP_MALLOC(sizeof(struct soap_cookie))))
+      { p->name = (char*)SOAP_MALLOC(strlen(tmp)+1);
+        strcpy(p->name, tmp);
+        s = soap_decode_val(tmp, sizeof(tmp), s);
+        if (*tmp)
+        { p->value = (char*)SOAP_MALLOC(strlen(tmp)+1);
+          strcpy(p->value, tmp);
+        }
+        else
+          p->value = NULL;
+        p->domain = domain;
+        p->path = path;
+        p->expire = 0;
+        p->secure = 0;
+        p->version = version;
+      }
+    }
+  }
+  if (p)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Got cookie %s=%s domain=%s path=%s expire=%ld secure=%d\n", p->name, p->value?p->value:"", p->domain?p->domain:"", p->path?p->path:"", p->expire, p->secure));
+    if ((q = soap_set_cookie(soap, p->name, p->value, p->domain, p->path)))
+    { q->version = p->version;
+      q->expire = p->expire;
+      q->secure = p->secure;
+    }
+    if (p->name)
+      SOAP_FREE(p->name);
+    if (p->value)
+      SOAP_FREE(p->value);
+    if (p->domain)
+      SOAP_FREE(p->domain);
+    if (p->path)
+      SOAP_FREE(p->path);
+    SOAP_FREE(p);
+  }
+  if (domain)
+    SOAP_FREE(domain);
+  if (path)
+    SOAP_FREE(path);
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getenv_cookies(struct soap *soap)
+{ struct soap_cookie *p;
+  const char *s;
+  char key[4096], val[4096]; /* cookie size is up to 4096 bytes [RFC2109] */
+  if (!(s = getenv("HTTP_COOKIE")))
+    return SOAP_ERR;
+  do
+  { s = soap_decode_key(key, sizeof(key), s);
+    s = soap_decode_val(val, sizeof(val), s);
+    p = soap_set_cookie(soap, key, val, NULL, NULL);
+    if (p)
+      p->env = 1;
+  } while (*s);
+  return SOAP_OK;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+struct soap_cookie*
+SOAP_FMAC2
+soap_copy_cookies(struct soap *soap)
+{ struct soap_cookie *p, **q, *r;
+  q = &r;
+  for (p = soap->cookies; p; p = p->next)
+  { if (!(*q = (struct soap_cookie*)SOAP_MALLOC(sizeof(struct soap_cookie))))
+      return r;
+    **q = *p;
+    if (p->name)
+    { if (((*q)->name = (char*)SOAP_MALLOC(strlen(p->name)+1)))
+        strcpy((*q)->name, p->name);
+    }
+    if (p->value)
+    { if (((*q)->value = (char*)SOAP_MALLOC(strlen(p->value)+1)))
+        strcpy((*q)->value, p->value);
+    }
+    if (p->domain)
+    { if (((*q)->domain = (char*)SOAP_MALLOC(strlen(p->domain)+1)))
+        strcpy((*q)->domain, p->domain);
+    }
+    if (p->path)
+    { if (((*q)->path = (char*)SOAP_MALLOC(strlen(p->path)+1)))
+        strcpy((*q)->path, p->path);
+    }
+    q = &(*q)->next;
+  }
+  *q = NULL;
+  return r;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_free_cookies(struct soap *soap)
+{ struct soap_cookie *p;
+  for (p = soap->cookies; p; p = soap->cookies)
+  { soap->cookies = p->next;
+    SOAP_FREE(p->name);
+    if (p->value)
+      SOAP_FREE(p->value);
+    if (p->domain)
+      SOAP_FREE(p->domain);
+    if (p->path)
+      SOAP_FREE(p->path);
+    SOAP_FREE(p);
+  }
+}
+
+/******************************************************************************/
+#endif /* WITH_COOKIES */
+
+/******************************************************************************/
+#ifdef WITH_GZIP
+#ifndef PALM_1
+static int
+soap_getgziphdr(struct soap *soap)
+{ int i;
+  soap_wchar c, f = 0;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get gzip header\n"));
+  for (i = 0; i < 9; i++)
+  { if ((int)(c = soap_get1(soap) == EOF))
+      return soap->error = SOAP_EOF;
+    if (i == 2)
+      f = c;
+  }
+  if (f & 0x04) /* FEXTRA */
+  { for (i = soap_get1(soap) | (soap_get1(soap) << 8); i; i--)
+      if ((int)soap_get1(soap) == EOF)
+        return soap->error = SOAP_EOF;
+  }
+  if (f & 0x08) /* FNAME */
+    do
+      c = soap_get1(soap);
+    while (c && (int)c != EOF);
+  if ((int)c != EOF && (f & 0x10)) /* FCOMMENT */
+    do
+      c = soap_get1(soap);
+    while (c && (int)f != EOF);
+  if ((int)c != EOF && (f & 0x01)) /* FHCRC */
+  { if ((int)(c = soap_get1(soap)) != EOF)
+      c = soap_get1(soap);
+  }
+  if ((int)c == EOF)
+    return soap->error = SOAP_EOF;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_begin_recv(struct soap *soap)
+{ soap_wchar c;
+  soap->error = SOAP_OK;
+  soap_free(soap);
+  soap_set_local_namespaces(soap);
+  soap->version = 0;   /* don't assume we're parsing SOAP content by default */
+#ifndef WITH_NOIDREF
+  soap_free_iht(soap);
+#endif
+  if ((soap->imode & SOAP_IO) == SOAP_IO_CHUNK)
+    soap->omode |= SOAP_IO_CHUNK;
+  soap->imode &= ~SOAP_IO;
+  soap->mode = soap->imode;
+  if (!soap->keep_alive)
+  { soap->buflen = 0;
+    soap->bufidx = 0;
+  }
+  if (!(soap->mode & SOAP_IO_KEEPALIVE))
+    soap->keep_alive = 0;
+  soap->ahead = 0;
+  soap->peeked = 0;
+  soap->level = 0;
+  soap->part = SOAP_BEGIN;
+  soap->alloced = 0;
+  soap->count = 0;
+  soap->length = 0;
+  soap->cdata = 0;
+  *soap->endpoint = '\0';
+  soap->userid = NULL;
+  soap->passwd = NULL;
+  soap->action = NULL;
+  soap->authrealm = NULL;
+#ifndef WITH_LEANER
+  soap->dime.chunksize = 0;
+  soap->dime.buflen = 0;
+  soap->dime.list = NULL;
+  soap->dime.first = NULL;
+  soap->dime.last = NULL;
+  soap->mime.list = NULL;
+  soap->mime.first = NULL;
+  soap->mime.last = NULL;
+  soap->mime.boundary = NULL;
+  soap->mime.start = NULL;
+#endif
+#ifdef WIN32
+#ifndef UNDER_CE
+#ifndef WITH_FASTCGI
+  if (!soap_valid_socket(soap->socket))
+#ifdef __BORLANDC__
+    setmode((SOAP_SOCKET)soap->recvfd, O_BINARY);
+#else
+    _setmode((SOAP_SOCKET)soap->recvfd, _O_BINARY);
+#endif
+#endif
+#endif
+#endif
+#ifdef WITH_ZLIB
+  soap->mode &= ~SOAP_ENC_ZLIB;
+  soap->zlib_in = SOAP_ZLIB_NONE;
+  soap->zlib_out = SOAP_ZLIB_NONE;
+  soap->d_stream.next_in = Z_NULL;
+  soap->d_stream.avail_in = 0;
+  soap->d_stream.next_out = (Byte*)soap->buf;
+  soap->d_stream.avail_out = SOAP_BUFLEN;
+  soap->z_ratio_in = 1.0;
+#endif
+#ifndef WITH_LEANER
+  if (soap->fprepareinit)
+    soap->fprepareinit(soap);
+#endif
+  c = soap_getchar(soap);
+#ifdef WITH_GZIP
+  if (c == 0x1F)
+  { if (soap_getgziphdr(soap))
+      return soap->error;
+    if (inflateInit2(&soap->d_stream, -MAX_WBITS) != Z_OK)
+      return soap->error = SOAP_ZLIB_ERROR;
+    soap->zlib_state = SOAP_ZLIB_INFLATE;
+    soap->mode |= SOAP_ENC_ZLIB;
+    soap->zlib_in = SOAP_ZLIB_GZIP;
+    soap->z_crc = crc32(0L, NULL, 0);
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "gzip initialized\n"));
+    memcpy(soap->z_buf, soap->buf, SOAP_BUFLEN);
+    /* should not chunk over plain transport, so why bother to check? */
+    /* if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK) */
+    /*   soap->z_buflen = soap->bufidx; */
+    /* else */
+    soap->d_stream.next_in = (Byte*)(soap->z_buf + soap->bufidx);
+    soap->d_stream.avail_in = soap->buflen - soap->bufidx;
+    soap->z_buflen = soap->buflen;
+    soap->buflen = soap->bufidx;
+    c = soap_getchar(soap);
+  }  
+#endif
+#ifndef WITH_LEANER
+  if (c == '-' && soap_get0(soap) == '-')
+    soap->mode |= SOAP_ENC_MIME;
+  else if ((c & 0xFFFC) == (SOAP_DIME_VERSION | SOAP_DIME_MB) && (soap_get0(soap) & 0xFFF0) == 0x20)
+    soap->mode |= SOAP_ENC_DIME;
+  else
+#endif
+  { while (soap_blank(c))
+      c = soap_getchar(soap);
+  }
+  if ((int)c == EOF)
+    return soap->error = SOAP_EOF;
+  soap_unget(soap, c);
+#ifndef WITH_NOHTTP
+  if (c != '<' && !(soap->mode & (SOAP_ENC_DIME | SOAP_ENC_ZLIB)))
+  { soap->mode &= ~SOAP_IO;
+    if ((soap->error = soap->fparse(soap)))
+    { soap->keep_alive = 0; /* force close later */
+      return soap->error;
+    }
+    if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
+    { soap->chunkbuflen = soap->buflen;
+      soap->buflen = soap->bufidx;
+      soap->chunksize = 0;
+    }
+#ifndef WITH_LEANER
+    else if (soap->fpreparerecv && soap->buflen != soap->bufidx)
+      soap->fpreparerecv(soap, soap->buf + soap->bufidx, soap->buflen - soap->bufidx);
+#endif
+#ifdef WITH_ZLIB
+    if (soap->zlib_in)
+    { /* fparse should not use soap_unget to push back last char */
+#ifdef WITH_GZIP
+      c = soap_get1(soap);
+      if (c == 0x1F)
+      { if (soap_getgziphdr(soap))
+          return soap->error;
+        if (inflateInit2(&soap->d_stream, -MAX_WBITS) != Z_OK)
+          return soap->error = SOAP_ZLIB_ERROR;
+        soap->zlib_state = SOAP_ZLIB_INFLATE;
+        soap->z_crc = crc32(0L, NULL, 0);
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "gzip initialized\n"));
+      }
+      else
+      { soap_revget1(soap);
+#else
+      {
+#endif
+        if (inflateInit(&soap->d_stream) != Z_OK)
+          return soap->error = SOAP_ZLIB_ERROR;
+        soap->zlib_state = SOAP_ZLIB_INFLATE;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflate initialized\n"));
+      }
+      soap->mode |= SOAP_ENC_ZLIB;
+      memcpy(soap->z_buf, soap->buf, SOAP_BUFLEN);
+      soap->d_stream.next_in = (Byte*)(soap->z_buf + soap->bufidx);
+      soap->d_stream.avail_in = soap->buflen - soap->bufidx;
+      soap->z_buflen = soap->buflen;
+      soap->buflen = soap->bufidx;
+    }
+#endif
+  }
+#endif
+#ifndef WITH_LEANER
+  if (soap->mode & SOAP_ENC_MIME)
+  { if (soap_getmimehdr(soap))
+      return soap->error;
+    if (soap_get_header_attribute(soap, soap->mime.first->type, "application/dime"))
+      soap->mode |= SOAP_ENC_DIME;
+  }
+  if (soap->mode & SOAP_ENC_DIME)
+  { if (soap_getdimehdr(soap))
+      return soap->error;
+    if (soap->dime.flags & SOAP_DIME_CF)
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked DIME SOAP message\n"));
+      soap->dime.chunksize = soap->dime.size;
+      if (soap->buflen - soap->bufidx >= soap->dime.chunksize)
+      { soap->dime.buflen = soap->buflen;
+        soap->buflen = soap->bufidx + soap->dime.chunksize;
+      }
+      else
+        soap->dime.chunksize -= soap->buflen - soap->bufidx;
+    }
+    soap->count = soap->buflen - soap->bufidx;
+  }
+#endif
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_parse(struct soap *soap)
+{ char header[SOAP_HDRLEN], *s;
+  unsigned short g = 0, k;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Waiting for response...\n"));
+  *soap->endpoint = '\0';
+  soap->length = 0;
+  do
+  { if (soap_getline(soap, soap->msgbuf, sizeof(soap->msgbuf)))
+      return soap->error;
+    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "HTTP status: %s\n", soap->msgbuf));
+    for (;;)
+    { if (soap_getline(soap, header, SOAP_HDRLEN))
+      { if (soap->error == SOAP_EOF)
+       { soap->error = SOAP_OK;
+          DBGLOG(TEST,SOAP_MESSAGE(fdebug, "EOF in HTTP header, continue anyway\n"));
+         break;
+       }
+        return soap->error;
+      }
+      if (!*header)
+        break;
+      DBGLOG(TEST,SOAP_MESSAGE(fdebug, "HTTP header: %s\n", header));
+      s = strchr(header, ':');
+      if (s)
+      { *s = '\0';
+        do s++;
+        while (*s && *s <= 32);
+        if ((soap->error = soap->fparsehdr(soap, header, s)))
+          return soap->error;
+      }
+    }
+    if ((s = strchr(soap->msgbuf, ' ')))
+      k = (unsigned short)soap_strtoul(s, NULL, 10);
+    else
+      k = 0;
+  } while (k == 100);
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Finished HTTP header parsing\n"));
+  s = strstr(soap->msgbuf, "HTTP/");
+  if (s && s[7] != '1')
+  { if (soap->keep_alive == 1)
+      soap->keep_alive = 0;
+    if (k == 0 && (soap->omode & SOAP_IO) == SOAP_IO_CHUNK) /* k == 0 for HTTP request */
+    { soap->imode |= SOAP_IO_CHUNK;
+      soap->omode = (soap->omode & ~SOAP_IO) | SOAP_IO_STORE;
+    }
+  }
+  if (soap->keep_alive < 0)
+    soap->keep_alive = 1;
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Keep alive connection = %d\n", soap->keep_alive));
+  if (s && (((g = !strncmp(soap->msgbuf, "GET ", 4))) || !strncmp(soap->msgbuf, "POST ", 5)))
+  { size_t m = strlen(soap->endpoint);
+    size_t n = m + (s - soap->msgbuf) - 5 - (!g);
+    if (n >= sizeof(soap->endpoint))
+      n = sizeof(soap->endpoint) - 1;
+    strncpy(soap->path, soap->msgbuf + 4 + (!g), n - m);
+    soap->path[n - m] = '\0';
+    strcat(soap->endpoint, soap->path);
+    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Target endpoint='%s'\n", soap->endpoint));
+    if (g)
+    { soap->error = soap->fget(soap);
+      if (soap->error == SOAP_OK)
+        soap->error = SOAP_STOP; /* prevents further processing */
+      return soap->error;
+    }
+    return SOAP_OK;
+  }
+  if (k == 0 || (k >= 200 && k <= 299) || k == 400 || k == 500)
+    return SOAP_OK;
+  return soap_set_receiver_error(soap, "HTTP error", soap->msgbuf, k);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_parse_header(struct soap *soap, const char *key, const char *val)
+{ if (!soap_tag_cmp(key, "Host"))
+  { 
+#ifdef WITH_OPENSSL
+    if (soap->imode & SOAP_ENC_SSL)
+      strcpy(soap->endpoint, "https://");
+    else
+#endif
+      strcpy(soap->endpoint, "http://");
+    strncat(soap->endpoint, val, sizeof(soap->endpoint) - 8);
+    soap->endpoint[sizeof(soap->endpoint) - 1] = '\0';
+  }
+#ifndef WITH_LEANER
+  else if (!soap_tag_cmp(key, "Content-Type"))
+  { if (soap_get_header_attribute(soap, val, "application/dime"))
+      soap->mode |= SOAP_ENC_DIME;
+    else if (soap_get_header_attribute(soap, val, "multipart/related"))
+    { soap->mime.boundary = soap_strdup(soap, soap_get_header_attribute(soap, val, "boundary"));
+      soap->mime.start = soap_strdup(soap, soap_get_header_attribute(soap, val, "start"));
+      soap->mode |= SOAP_ENC_MIME;
+    }
+  }
+#endif
+  else if (!soap_tag_cmp(key, "Content-Length"))
+    soap->length = soap_strtoul(val, NULL, 10);
+  else if (!soap_tag_cmp(key, "Content-Encoding"))
+  { if (!soap_tag_cmp(val, "deflate"))
+#ifdef WITH_ZLIB
+      soap->zlib_in = SOAP_ZLIB_DEFLATE;
+#else
+      return SOAP_ZLIB_ERROR;
+#endif
+    else if (!soap_tag_cmp(val, "gzip"))
+#ifdef WITH_GZIP
+      soap->zlib_in = SOAP_ZLIB_GZIP;
+#else
+      return SOAP_ZLIB_ERROR;
+#endif
+  }
+#ifdef WITH_ZLIB
+  else if (!soap_tag_cmp(key, "Accept-Encoding"))
+  {
+#ifdef WITH_GZIP
+    if (strchr(val, '*') || soap_get_header_attribute(soap, val, "gzip"))
+      soap->zlib_out = SOAP_ZLIB_GZIP;
+    else
+#endif
+    if (strchr(val, '*') || soap_get_header_attribute(soap, val, "deflate"))
+      soap->zlib_out = SOAP_ZLIB_DEFLATE;
+    else
+      soap->zlib_out = SOAP_ZLIB_NONE;
+  }
+#endif
+  else if (!soap_tag_cmp(key, "Transfer-Encoding"))
+  { soap->mode &= ~SOAP_IO;
+    if (!soap_tag_cmp(val, "chunked"))
+      soap->mode |= SOAP_IO_CHUNK;
+  }
+  else if (!soap_tag_cmp(key, "Connection"))
+  { if (!soap_tag_cmp(val, "keep-alive"))
+      soap->keep_alive = -soap->keep_alive;
+    else if (!soap_tag_cmp(val, "close"))
+      soap->keep_alive = 0;
+  }
+#ifndef WITH_LEAN
+  else if (!soap_tag_cmp(key, "Authorization"))
+  { if (!soap_tag_cmp(val, "Basic *"))
+    { size_t n;
+      char *s;
+      soap_base642s(soap, val + 6, soap->tmpbuf, sizeof(soap->tmpbuf) - 1, &n);
+      soap->tmpbuf[n] = '\0';
+      if ((s = strchr(soap->tmpbuf, ':')))
+      { *s = '\0';
+       soap->userid = soap_strdup(soap, soap->tmpbuf);
+       soap->passwd = soap_strdup(soap, s + 1);
+      }
+    }
+  }
+  else if (!soap_tag_cmp(key, "WWW-Authenticate"))
+    soap->authrealm = soap_strdup(soap, soap_get_header_attribute(soap, val+6, "realm"));
+  else if (!soap_tag_cmp(key, "Expect"))
+  { if (!soap_tag_cmp(val, "100-continue"))
+    { if ((soap->error = soap->fposthdr(soap, "HTTP/1.1 100 Continue", NULL))
+       || (soap->error = soap->fposthdr(soap, NULL, NULL)))
+        return soap->error;
+    }
+  }
+#endif
+  else if (!soap_tag_cmp(key, "SOAPAction"))
+  { if (val[0] && val[1])
+    { soap->action = soap_strdup(soap, val + 1);
+      soap->action[strlen(soap->action) - 1] = '\0';
+    }
+  }
+  else if (!soap_tag_cmp(key, "Location"))
+  { strncpy(soap->endpoint, val, sizeof(soap->endpoint));
+    soap->endpoint[sizeof(soap->endpoint) - 1] = '\0';
+  }
+#ifdef WITH_COOKIES
+  else if (!soap_tag_cmp(key, "Cookie") || !soap_tag_cmp(key, "Set-Cookie"))
+    soap_getcookies(soap, val);
+#endif
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
+#ifndef PALM_1
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_get_header_attribute(struct soap *soap, const char *line, const char *key)
+{ register const char *s = line;
+  if (s)
+  { while (*s)
+    { register short flag;
+      s = soap_decode_key(soap->tmpbuf, sizeof(soap->tmpbuf), s);
+      flag = soap_tag_cmp(soap->tmpbuf, key);
+      s = soap_decode_val(soap->tmpbuf, sizeof(soap->tmpbuf), s);
+      if (!flag)
+        return soap->tmpbuf;
+    }
+  }
+  return NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
+#ifndef PALM_1
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_decode_key(char *buf, size_t len, const char *val)
+{ return soap_decode(buf, len, val, "=,;");
+}
+#endif
+#endif
+
+/******************************************************************************/
+#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
+#ifndef PALM_1
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_decode_val(char *buf, size_t len, const char *val)
+{ if (*val != '=')
+  { *buf = '\0';
+    return val;
+  }
+  return soap_decode(buf, len, val + 1, ",;");
+}
+#endif
+#endif
+
+/******************************************************************************/
+#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
+#ifndef PALM_1
+static const char*
+soap_decode(char *buf, size_t len, const char *val, const char *sep)
+{ const char *s;
+  char *t = buf;
+  for (s = val; *s; s++)
+    if (*s != ' ' && *s != '\t' && !strchr(sep, *s))
+      break;
+  if (*s == '"')
+  { s++;
+    while (*s && *s != '"' && --len)
+      *t++ = *s++;
+  }
+  else
+  { while (soap_notblank(*s) && !strchr(sep, *s) && --len)
+    { if (*s == '%')
+      { *t++ = ((s[1] >= 'A' ? (s[1] & 0x7) + 9 : s[1] - '0') << 4)
+              + (s[2] >= 'A' ? (s[2] & 0x7) + 9 : s[2] - '0');
+        s += 3;
+      }
+      else
+        *t++ = *s++;
+    }
+  }
+  *t = '\0';
+  while (*s && !strchr(sep, *s))
+    s++;
+  return s;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_envelope_begin_out(struct soap *soap)
+{
+#ifndef WITH_LEANER
+  size_t n = 0;
+  if ((soap->mode & SOAP_ENC_MIME) && soap->mime.boundary && soap->mime.start)
+  { const char *s;
+    if (soap->mode & SOAP_ENC_DIME)
+      s = "application/dime";
+    else if (soap->version == 2)
+      s = "application/soap+xml; charset=utf-8";
+    else
+      s = "text/xml; charset=utf-8";
+    sprintf(soap->tmpbuf, "--%s\r\nContent-Type: %s\r\nContent-Transfer-Encoding: binary\r\nContent-ID: %s\r\n\r\n", soap->mime.boundary, s, soap->mime.start);
+    n = strlen(soap->tmpbuf);
+    if (soap_send_raw(soap, soap->tmpbuf, n))
+      return soap->error;
+  }
+  if (soap->mode & SOAP_IO_LENGTH)
+    soap->dime.size = soap->count;     /* DIME in MIME correction */
+  if (!(soap->mode & SOAP_IO_LENGTH) && (soap->mode & SOAP_ENC_DIME))
+  { if (soap_putdimehdr(soap))
+      return soap->error;
+  }
+#endif
+  soap->part = SOAP_IN_ENVELOPE;
+  return soap_element_begin_out(soap, "SOAP-ENV:Envelope", 0, NULL);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_envelope_end_out(struct soap *soap)
+{ if (soap_element_end_out(soap, "SOAP-ENV:Envelope"))
+    return soap->error;
+#ifndef WITH_LEANER
+  if ((soap->mode & SOAP_IO_LENGTH) && (soap->mode & SOAP_ENC_DIME))
+  { soap->dime.size = soap->count - soap->dime.size;   /* DIME in MIME correction */
+    sprintf(soap->id, soap->dime_id_format, 0);
+    soap->dime.id = soap->id;
+    if (soap->local_namespaces)
+    { if (soap->local_namespaces[0].out)
+        soap->dime.type = (char*)soap->local_namespaces[0].out;
+      else
+        soap->dime.type = (char*)soap->local_namespaces[0].ns;
+    }
+    soap->dime.options = NULL;
+    soap->dime.flags = SOAP_DIME_MB | SOAP_DIME_ABSURI;
+    if (!soap->dime.first)
+      soap->dime.flags |= SOAP_DIME_ME;
+    soap->count += 12 + ((strlen(soap->dime.id)+3)&(~3)) + ((strlen(soap->dime.type)+3)&(~3));
+  }
+  if (soap->mode & SOAP_ENC_DIME)
+    return soap_send_raw(soap, SOAP_STR_PADDING, -(long)soap->dime.size&3);
+#endif
+  soap->part = SOAP_END_ENVELOPE;
+  return SOAP_OK;
+} 
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_envelope_begin_in(struct soap *soap)
+{ register struct Namespace *p;
+  soap->part = SOAP_IN_ENVELOPE;
+  if (soap_element_begin_in(soap, "SOAP-ENV:Envelope", 0))
+    return soap->error = SOAP_VERSIONMISMATCH;
+  p = soap->local_namespaces;
+  if (p)
+  { const char *ns = p[0].out;
+    if (!ns)
+      ns = p[0].ns;
+    if (!strcmp(ns, soap_env1))
+    { soap->version = 1; /* make sure we use SOAP 1.1 */
+      if (p[1].out)
+        SOAP_FREE(p[1].out);
+      if ((p[1].out = (char*)SOAP_MALLOC(sizeof(soap_enc1))))
+        strcpy(p[1].out, soap_enc1);
+    }
+    else if (!strcmp(ns, soap_env2))
+    { soap->version = 2; /* make sure we use SOAP 1.2 */
+      if (p[1].out)
+        SOAP_FREE(p[1].out);
+      if ((p[1].out = (char*)SOAP_MALLOC(sizeof(soap_enc2))))
+        strcpy(p[1].out, soap_enc2);
+    }
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_envelope_end_in(struct soap *soap)
+{ if (soap_element_end_in(soap, "SOAP-ENV:Envelope"))
+    return soap->error;
+  soap->part = SOAP_END_ENVELOPE;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_body_begin_out(struct soap *soap)
+{ soap->part = SOAP_IN_BODY;
+  if (soap->version == 1)
+    soap->encoding = 1;
+  if (soap_element(soap, "SOAP-ENV:Body", 0, NULL))
+    return soap->error;
+  if ((soap->mode & SOAP_XML_SEC) && soap_attribute(soap, "id", "_0"))
+    return soap->error;
+  return soap_element_start_end_out(soap, NULL);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_body_end_out(struct soap *soap)
+{ if (soap_element_end_out(soap, "SOAP-ENV:Body"))
+    return soap->error;
+  soap->part = SOAP_IN_BODY;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_body_begin_in(struct soap *soap)
+{ soap->part = SOAP_IN_BODY;
+  return soap_element_begin_in(soap, "SOAP-ENV:Body", 0);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_body_end_in(struct soap *soap)
+{ if (soap_element_end_in(soap, "SOAP-ENV:Body"))
+    return soap->error;
+  soap->part = SOAP_END_BODY;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_recv_header(struct soap *soap)
+{ if (soap_getheader(soap) && soap->error == SOAP_TAG_MISMATCH)
+    soap->error = SOAP_OK;
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_endpoint(struct soap *soap, const char *endpoint)
+{ register const char *s;
+  register size_t i, n;
+  *soap->endpoint = '\0';
+  *soap->host = '\0';
+  *soap->path = '\0';
+  soap->port = 80;
+  if (!endpoint || !*endpoint)
+    return;
+#ifdef WITH_OPENSSL
+  if (!strncmp(endpoint, "https:", 6))
+    soap->port = 443;
+#endif
+  strncpy(soap->endpoint, endpoint, sizeof(soap->endpoint) - 1);
+  s = strchr(endpoint, ':');
+  if (s && s[1] == '/' && s[2] == '/')
+    s += 3;
+  else
+    s = endpoint;
+  n = strlen(s);
+  if (n >= sizeof(soap->host))
+    n = sizeof(soap->host) - 1;
+/* WR[ */
+#ifdef WITH_IPV6
+  if ('[' == s[0])
+  { s++;
+    for (i = 0; i < n; i++)
+    { soap->host[i] = s[i];
+      if (']' == s[i])
+      {
+        s++;
+        break; 
+      }
+    }
+  }
+  else
+  { for (i = 0; i < n; i++)
+    { soap->host[i] = s[i];
+      if (s[i] == '/' || s[i] == ':')
+        break; 
+    }
+  }
+#else /* WITH_IPV6 */
+/* ]WR */
+  for (i = 0; i < n; i++)
+  { soap->host[i] = s[i];
+    if (s[i] == '/' || s[i] == ':')
+      break; 
+  }
+/* WR[ */
+#endif /* WITH_IPV6 */
+/* ]WR */
+  soap->host[i] = '\0';
+  if (s[i] == ':')
+  { soap->port = (int)atol(s + i + 1);
+    for (i++; i < n; i++)
+      if (s[i] == '/')
+        break;
+  }
+  if (s[i])
+  { strncpy(soap->path, s + i + 1, sizeof(soap->path));
+    soap->path[sizeof(soap->path) - 1] = '\0';
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_connect(struct soap *soap, const char *endpoint, const char *action)
+{ return soap_connect_command(soap, SOAP_POST, endpoint, action);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_connect_command(struct soap *soap, int http_command, const char *endpoint, const char *action)
+{ char host[sizeof(soap->host)];
+  int port;
+  size_t count;
+  soap->error = SOAP_OK;
+  strcpy(host, soap->host); /* save to compare */
+  port = soap->port; /* save to compare */
+  soap_set_endpoint(soap, endpoint);
+  if (action)
+    soap->action = soap_strdup(soap, action);
+#ifndef WITH_LEANER
+  if (soap->fconnect)
+  { if ((soap->error = soap->fconnect(soap, endpoint, soap->host, soap->port)))
+      return soap->error;
+  }
+  else
+#endif
+  if (soap->fopen && *soap->host)
+  { soap->status = http_command;
+    if (!soap->keep_alive || !soap_valid_socket(soap->socket) || strcmp(soap->host, host) || soap->port != port || !soap->fpoll || soap->fpoll(soap))
+    { soap->keep_alive = 0; /* force close */
+      soap_closesock(soap);
+      DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Connect/reconnect to host='%s' path='%s' port=%d\n", soap->host, soap->path, soap->port));
+      soap->socket = soap->fopen(soap, endpoint, soap->host, soap->port);
+      if (soap->error)
+        return soap->error;
+      soap->keep_alive = ((soap->omode & SOAP_IO_KEEPALIVE) != 0);
+    }
+  }
+  if (soap_begin_send(soap))
+    return soap->error;
+  count = soap_count_attachments(soap);
+#ifndef WITH_NOHTTP
+  if ((soap->mode & SOAP_IO) != SOAP_IO_STORE && !(soap->mode & SOAP_ENC_XML) && endpoint)
+  { unsigned int k = soap->mode;
+    soap->mode &= ~(SOAP_IO | SOAP_ENC_ZLIB);
+    if ((k & SOAP_IO) != SOAP_IO_FLUSH)
+      soap->mode |= SOAP_IO_BUFFER;
+    if ((soap->error = soap->fpost(soap, endpoint, soap->host, soap->port, soap->path, action, count)))
+      return soap->error;
+#ifndef WITH_LEANER
+    if ((k & SOAP_IO) == SOAP_IO_CHUNK)
+    { if (soap_flush(soap))
+        return soap->error;
+    }
+#endif
+    soap->mode = k;
+  }
+  if (http_command != SOAP_POST)
+    return soap_end_send(soap);
+#endif
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+char*
+SOAP_FMAC2
+soap_s2base64(struct soap *soap, const unsigned char *s, char *t, size_t n)
+{ register size_t i;
+  register unsigned long m;
+  register char *p;
+  if (!t)
+    t = (char*)soap_malloc(soap, (n + 2) / 3 * 4 + 1);
+  if (!t)
+  { soap->error = SOAP_EOM;
+    return NULL;
+  }
+  p = t;
+  t[0] = '\0';
+  if (!s)
+    return p;
+  for (; n > 2; n -= 3, s += 3)
+  { m = s[0];
+    m = (m << 8) | s[1];
+    m = (m << 8) | s[2];
+    for (i = 4; i > 0; m >>= 6)
+      t[--i] = soap_base64o[m & 0x3F];
+    t += 4;
+  }
+  t[0] = '\0';
+  if (n > 0)
+  { m = 0;
+    for (i = 0; i < n; i++)
+      m = (m << 8) | *s++;
+    for (; i < 3; i++)
+      m <<= 8;
+    for (i++; i > 0; m >>= 6)
+      t[--i] = soap_base64o[m & 0x3F];
+    for (i = 3; i > n; i--)
+      t[i] = '=';
+    t[4] = '\0';
+  }
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_base642s(struct soap *soap, const char *s, char *t, size_t l, size_t *n)
+{ register int i, j, c;
+  register unsigned long m;
+  char *p = t;
+  if (n)
+    *n = 0;
+  for (;;)
+  { for (i = 0; i < SOAP_BLKLEN; i++)
+    { m = 0;
+      j = 0;
+      while (j < 4)
+      { c = *s++;
+        if (c == '=' || !c)
+        { i *= 3;
+          switch (j)
+          { case 2:
+              *t++ = (char)((m >> 4) & 0xFF);
+              i++;
+              break;
+            case 3:
+              *t++ = (char)((m >> 10) & 0xFF);
+              *t++ = (char)((m >> 2) & 0xFF);
+              i += 2;
+          }
+          if (n)
+           *n += i;
+          return p;
+        }
+        c -= '+';
+        if (c >= 0 && c <= 79)
+        { m = (m << 6) + soap_base64i[c];
+          j++;
+        }
+      }
+      *t++ = (char)((m >> 16) & 0xFF);
+      *t++ = (char)((m >> 8) & 0xFF);
+      *t++ = (char)(m & 0xFF);
+      if (l < 3)
+      { if (n)
+         *n += i;
+        return p;
+      }
+      l -= 3;
+    }
+    if (n)
+      *n += 3 * SOAP_BLKLEN;
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_puthttphdr(struct soap *soap, int status, size_t count)
+{ register const char *s;
+  register int err;
+  if (status == SOAP_FILE && soap->http_content)
+    s = soap->http_content;
+  else if (status == SOAP_HTML)
+    s = "text/html; charset=utf-8";
+#ifndef WITH_LEANER
+  else if (soap->mode & SOAP_ENC_DIME)
+    s = "application/dime";
+#endif
+  else if (soap->version == 2)
+    s = "application/soap+xml; charset=utf-8";
+  else
+    s = "text/xml; charset=utf-8";
+#ifndef WITH_LEANER
+  if ((soap->mode & SOAP_ENC_MIME) && soap->mime.boundary && soap->status != SOAP_GET)
+  { register const char *t = strchr(s, ';');
+    sprintf(soap->tmpbuf, "multipart/related; boundary=\"%s\"; type=\"", soap->mime.boundary);
+    if (t)
+      strncat(soap->tmpbuf, s, t - s);
+    else
+      strcat(soap->tmpbuf, s);
+    if (soap->mime.start)
+    { strcat(soap->tmpbuf, "\"; start=\"");
+      strcat(soap->tmpbuf, soap->mime.start);
+    }
+    strcat(soap->tmpbuf, "\"");
+    s = soap->tmpbuf;
+  }
+#endif
+  if ((err = soap->fposthdr(soap, "Content-Type", s)))
+    return err;
+#ifdef WITH_ZLIB
+  if (soap->omode & SOAP_ENC_ZLIB)
+  {
+#ifdef WITH_GZIP
+    err = soap->fposthdr(soap, "Content-Encoding", "gzip");
+#else
+    err = soap->fposthdr(soap, "Content-Encoding", "deflate");
+#endif
+    if (err)
+      return err;
+  }
+#endif
+#ifndef WITH_LEANER
+  if ((soap->omode & SOAP_IO) == SOAP_IO_CHUNK)
+    err = soap->fposthdr(soap, "Transfer-Encoding", "chunked");
+  else
+#endif
+  if (count > 0)
+  { sprintf(soap->tmpbuf, "%lu", (unsigned long)count);
+    err = soap->fposthdr(soap, "Content-Length", soap->tmpbuf);
+  }
+  if (err)
+    return err;
+  return soap->fposthdr(soap, "Connection", soap->keep_alive ? "keep-alive" : "close");
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_get(struct soap *soap)
+{ return SOAP_GET_METHOD;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_post(struct soap *soap, const char *endpoint, const char *host, int port, const char *path, const char *action, size_t count)
+{ register const char *s;
+  register int err;
+  if (soap->status == SOAP_GET)
+  { s = "GET";
+    count = 0;
+  }
+  else
+    s = "POST";
+#ifdef PALM
+  if (!endpoint || (strncmp(endpoint, "http:", 5) && strncmp(endpoint, "https:", 6) && strncmp(endpoint, "httpg:", 6)) && strncmp(endpoint, "_beam:", 6) && strncmp(endpoint, "_local:", 7) && strncmp(endpoint, "_btobex:", 8))
+#else
+  if (!endpoint || (strncmp(endpoint, "http:", 5) && strncmp(endpoint, "https:", 6) && strncmp(endpoint, "httpg:", 6)))
+#endif
+    return SOAP_OK;
+  if (soap->proxy_host && strncmp(endpoint, "https:", 6))
+    sprintf(soap->tmpbuf, "%s %s HTTP/%s", s, endpoint, soap->http_version);
+  else
+    sprintf(soap->tmpbuf, "%s /%s HTTP/%s", s, path, soap->http_version);
+  if ((err = soap->fposthdr(soap, soap->tmpbuf, NULL)))
+    return err;
+  if (port != 80)
+    sprintf(soap->tmpbuf, "%s:%d", host, port);
+  else
+    strcpy(soap->tmpbuf, host); 
+  if ((err = soap->fposthdr(soap, "Host", soap->tmpbuf))
+   || (err = soap->fposthdr(soap, "User-Agent", "gSOAP/2.7"))
+   || (err = soap_puthttphdr(soap, SOAP_OK, count)))
+    return err;
+#ifdef WITH_ZLIB
+#ifdef WITH_GZIP
+  if ((err = soap->fposthdr(soap, "Accept-Encoding", "gzip, deflate")))
+#else
+  if ((err = soap->fposthdr(soap, "Accept-Encoding", "deflate")))
+#endif
+    return err;
+#endif
+#ifndef WITH_LEAN
+  if (soap->userid && soap->passwd && strlen(soap->userid) + strlen(soap->passwd) < 761)
+  { sprintf(soap->tmpbuf + 262, "%s:%s", soap->userid, soap->passwd);
+    strcpy(soap->tmpbuf, "Basic ");
+    soap_s2base64(soap, (const unsigned char*)(soap->tmpbuf + 262), soap->tmpbuf + 6, strlen(soap->tmpbuf + 262));
+    if ((err = soap->fposthdr(soap, "Authorization", soap->tmpbuf)))
+      return err;
+  }
+  if (soap->proxy_userid && soap->proxy_passwd && strlen(soap->proxy_userid) + strlen(soap->proxy_passwd) < 761)
+  { sprintf(soap->tmpbuf + 262, "%s:%s", soap->proxy_userid, soap->proxy_passwd);
+    strcpy(soap->tmpbuf, "Basic ");
+    soap_s2base64(soap, (const unsigned char*)(soap->tmpbuf + 262), soap->tmpbuf + 6, strlen(soap->tmpbuf + 262));
+    if ((err = soap->fposthdr(soap, "Proxy-Authorization", soap->tmpbuf)))
+      return err;
+  }
+#endif
+#ifdef WITH_COOKIES
+#ifdef WITH_OPENSSL
+  if (soap_putcookies(soap, host, path, soap->ssl != NULL))
+    return soap->error;
+#else
+  if (soap_putcookies(soap, host, path, 0))
+    return soap->error;
+#endif
+#endif
+  if (action && soap->version == 1)
+  { sprintf(soap->tmpbuf, "\"%s\"", action);
+    if ((err = soap->fposthdr(soap, "SOAPAction", soap->tmpbuf)))
+      return err;
+  }
+  return soap->fposthdr(soap, NULL, NULL);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_send_header(struct soap *soap, const char *s)
+{ register const char *t;
+  do
+  { t = strchr(s, '\n'); /* disallow \n in HTTP headers */
+    if (!t)
+      t = s + strlen(s);
+    if (soap_send_raw(soap, s, t - s))
+      return soap->error;
+    s = t + 1;
+  } while (*t);
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_post_header(struct soap *soap, const char *key, const char *val)
+{ if (key)
+  { if (http_send_header(soap, key))
+      return soap->error;
+    if (val && (soap_send_raw(soap, ": ", 2) || http_send_header(soap, val)))
+      return soap->error;
+  }
+  return soap_send_raw(soap, "\r\n", 2);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_response(struct soap *soap, int status, size_t count)
+{ register int err;
+/* WR[ */
+#ifdef WMW_RPM_IO
+  if (soap->rpmreqid)
+    httpOutputEnable(soap->rpmreqid);
+#endif  /* WMW_RPM_IO */
+/* ]WR */
+  if (!status || status == SOAP_HTML || status == SOAP_FILE)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "OK 200\n"));
+/* WR[ */
+#ifdef WMW_RPM_IO
+    if (soap->rpmreqid || soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) /* RPM behaves as if standalone */
+#else
+/* ]WR */
+    if (soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) /* standalone application */
+/* WR[ */
+#endif /* WMW_RPM_IO */
+/* ]WR */
+    { sprintf(soap->tmpbuf, "HTTP/%s 200 OK", soap->http_version);
+      if ((err = soap->fposthdr(soap, soap->tmpbuf, NULL)))
+        return err;
+    }
+    else if ((err = soap->fposthdr(soap, "Status", "200 OK")))
+      return err;
+  }
+  else if (status > 200 && status < 600)
+  { sprintf(soap->tmpbuf, "HTTP/%s %d %s", soap->http_version, status, http_error(soap, status));
+    if ((err = soap->fposthdr(soap, soap->tmpbuf, NULL)))
+      return err;
+#ifndef WITH_LEAN 
+    if (status == 401)
+    { sprintf(soap->tmpbuf, "Basic realm=\"%s\"", soap->authrealm ? soap->authrealm : "gSOAP Web Service");
+      if ((err = soap->fposthdr(soap, "WWW-Authenticate", soap->tmpbuf)))
+        return err;
+    }
+    else if ((status >= 301 && status <= 303) || status == 307)
+    { if ((err = soap->fposthdr(soap, "Location", soap->endpoint)))
+        return err;
+    }
+#endif
+  }
+  else
+  { const char *s = *soap_faultcode(soap);
+    if (soap->version == 2 && !strcmp(s, "SOAP-ENV:Sender"))
+      s = "400 Bad Request";
+    else
+      s = "500 Internal Server Error";
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Error %s (status=%d)\n", s, status));
+/* WR[ */
+#ifdef WMW_RPM_IO
+    if (soap->rpmreqid || soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) /* RPM behaves as if standalone */
+#else
+/* ]WR */
+    if (soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) /* standalone application */
+/* WR[ */
+#endif /* WMW_RPM_IO */
+/* ]WR */
+    { sprintf(soap->tmpbuf, "HTTP/%s %s", soap->http_version, s);
+      if ((err = soap->fposthdr(soap, soap->tmpbuf, NULL)))
+        return err;
+    }
+    else if ((err = soap->fposthdr(soap, "Status", s)))
+      return err;
+  }
+  if ((err = soap->fposthdr(soap, "Server", "gSOAP/2.7"))
+   || (err = soap_puthttphdr(soap, status, count)))
+    return err;
+#ifdef WITH_COOKIES
+  if (soap_putsetcookies(soap))
+    return soap->error;
+#endif
+  return soap->fposthdr(soap, NULL, NULL);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_response(struct soap *soap, int status)
+{ register size_t count;
+  if (!(soap->omode & (SOAP_ENC_XML | SOAP_IO_STORE /* this tests for chunking too */))
+   && (status == SOAP_HTML || status == SOAP_FILE))
+  { soap->omode &= ~SOAP_IO;
+    soap->omode |= SOAP_IO_STORE;
+  }
+  soap->status = status;
+  count = soap_count_attachments(soap);
+  if (soap_begin_send(soap))
+    return soap->error;
+#ifndef WITH_NOHTTP
+  if ((soap->mode & SOAP_IO) != SOAP_IO_STORE && !(soap->mode & SOAP_ENC_XML))
+  { register int n = soap->mode;
+    soap->mode &= ~(SOAP_IO | SOAP_ENC_ZLIB);
+    if ((n & SOAP_IO) != SOAP_IO_FLUSH)
+      soap->mode |= SOAP_IO_BUFFER;
+    if ((soap->error = soap->fresponse(soap, status, count)))
+      return soap->error;
+#ifndef WITH_LEANER
+    if ((n & SOAP_IO) == SOAP_IO_CHUNK)
+    { if (soap_flush(soap))
+        return soap->error;
+    }
+#endif
+    soap->mode = n;
+  }
+#endif
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+static const char*
+soap_set_validation_fault(struct soap *soap, const char *s, const char *t)
+{ sprintf(soap->msgbuf, "Validation constraint violation: %s%s in element <%s>", s, t?t:SOAP_STR_EOS, soap->tag);
+  return soap->msgbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_fault(struct soap *soap)
+{ const char **c = soap_faultcode(soap);
+  const char **s = soap_faultstring(soap);
+  if (!*c)
+  { if (soap->version == 2)
+      *c = "SOAP-ENV:Sender";
+    else
+      *c = "SOAP-ENV:Client";
+  }
+  if (*s)
+    return;
+  switch (soap->error)
+  {
+#ifndef WITH_LEAN
+    case SOAP_CLI_FAULT:
+      *s = "Client fault";
+      break;
+    case SOAP_SVR_FAULT:
+      *s = "Server fault";
+      break;
+    case SOAP_TAG_MISMATCH:
+      *s = soap_set_validation_fault(soap, "tag name or namespace mismatch", NULL);
+      break;
+    case SOAP_TYPE:
+      *s = soap_set_validation_fault(soap, "data type mismatch ", soap->type);
+      break;
+    case SOAP_SYNTAX_ERROR:
+      *s = "Well-formedness constraint violation";
+      break;
+    case SOAP_NO_TAG:
+      *s = "No XML element tag found";
+      break;
+    case SOAP_MUSTUNDERSTAND:
+      *c = "SOAP-ENV:MustUnderstand";
+      sprintf(soap->msgbuf, "The data in element '%s' must be understood but cannot be handled", soap->tag);
+      *s = soap->msgbuf;
+      break;
+    case SOAP_VERSIONMISMATCH:
+      *c = "SOAP-ENV:VersionMismatch";
+      *s = "SOAP version mismatch or invalid SOAP message";
+      break;
+    case SOAP_DATAENCODINGUNKNOWN:
+      *c = "SOAP-ENV:DataEncodingUnknown";
+      *s = "Unsupported SOAP data encoding";
+      break;
+    case SOAP_NAMESPACE:
+      *s = soap_set_validation_fault(soap, "namespace mismatch", NULL);
+      break;
+    case SOAP_FATAL_ERROR:
+      *s = "Fatal error";
+      break;
+    case SOAP_NO_METHOD:
+      sprintf(soap->msgbuf, "Method '%s' not implemented: method name or namespace not recognized", soap->tag);
+      *s = soap->msgbuf;
+      break;
+    case SOAP_GET_METHOD:
+      *s = "HTTP GET method not implemented";
+      break;
+    case SOAP_EOM:
+      *s = "Out of memory";
+      break;
+    case SOAP_IOB:
+      *s = "Array index out of bounds";
+      break;
+    case SOAP_NULL:
+      *s = soap_set_validation_fault(soap, "nil not allowed", NULL);
+      break;
+    case SOAP_MULTI_ID:
+      *s = soap_set_validation_fault(soap, "multiple definitions of id ", soap->id);
+      break;
+    case SOAP_MISSING_ID:
+      *s = soap_set_validation_fault(soap, "missing id for ref ", soap->id);
+      break;
+    case SOAP_HREF:
+      *s = soap_set_validation_fault(soap, "incompatible object ref ", soap->id);
+      break;
+    case SOAP_FAULT:
+      break;
+#ifndef WITH_NOIO
+    case SOAP_TCP_ERROR:
+      *s = tcp_error(soap);
+      break;
+#endif
+    case SOAP_HTTP_ERROR:
+      *s = "HTTP error";
+      break;
+    case SOAP_SSL_ERROR:
+      *s = "SSL error";
+      break;
+    case SOAP_PLUGIN_ERROR:
+      *s = "Plugin registry error";
+      break;
+    case SOAP_DIME_MISMATCH:
+      *s = "DIME version/transmission error";
+      break;
+    case SOAP_DIME_END:
+      *s = "End of DIME error";
+      break;
+    case SOAP_DIME_ERROR:
+      *s = "DIME format error";
+      break;
+    case SOAP_MIME_ERROR:
+      *s = "MIME format error";
+      break;
+    case SOAP_ZLIB_ERROR:
+#ifdef WITH_ZLIB
+      sprintf(soap->msgbuf, "Zlib/gzip error: '%s'", soap->d_stream.msg?soap->d_stream.msg:"");
+      *s = soap->msgbuf;
+#else
+      *s = "Zlib not installed for required message (de)compression";
+#endif
+      break;
+    case SOAP_REQUIRED:
+      *s = soap_set_validation_fault(soap, "missing required attribute", NULL);
+      break;
+    case SOAP_PROHIBITED:
+      *s = soap_set_validation_fault(soap, "prohibited attribute present", NULL);
+      break;
+    case SOAP_OCCURS:
+      *s = soap_set_validation_fault(soap, "a min/maxOccurs violation was detected", NULL);
+      break;
+    case SOAP_LENGTH:
+      *s = soap_set_validation_fault(soap, "content length violation", NULL);
+      break;
+#endif
+    case SOAP_EOF:
+#ifndef WITH_NOIO
+      sprintf(soap->msgbuf, "End of file or no input: '%s'", soap_strerror(soap));
+      *s = soap->msgbuf;
+      break;
+#else
+      *s = "End of file or no input";
+      break;
+#endif
+    default:
+#ifndef WITH_NOHTTP
+#ifndef WITH_LEAN
+      if (soap->error > 200 && soap->error < 600)
+      { sprintf(soap->msgbuf, "HTTP Error: %d %s", soap->error, http_error(soap, soap->error));
+        *s = soap->msgbuf;
+      }
+      else
+#endif
+#endif
+      { sprintf(soap->msgbuf, "Error code %d", soap->error);
+        *s = soap->msgbuf;
+      }
+    }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_send_fault(struct soap *soap)
+{ register int status = soap->error;
+  if (status == SOAP_STOP)
+    return status;
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Sending back fault struct for error code %d\n", soap->error));
+  soap->keep_alive = 0; /* to terminate connection */
+  soap_set_fault(soap);
+  if ((status != SOAP_EOF || (!soap->recv_timeout && !soap->send_timeout)) && (!soap->fpoll || soap->fpoll(soap) == SOAP_OK))
+  { soap->error = SOAP_OK;
+    soap_serializeheader(soap);
+    soap_serializefault(soap);
+    soap_begin_count(soap);
+    if (soap->mode & SOAP_IO_LENGTH)
+    { soap_envelope_begin_out(soap);
+      soap_putheader(soap);
+      soap_body_begin_out(soap);
+      soap_putfault(soap);
+      soap_body_end_out(soap);
+      soap_envelope_end_out(soap);
+    }
+    if (soap_response(soap, status)
+     || soap_envelope_begin_out(soap)
+     || soap_putheader(soap)
+     || soap_body_begin_out(soap)
+     || soap_putfault(soap)
+     || soap_body_end_out(soap)
+     || soap_envelope_end_out(soap))
+      return soap_closesock(soap);
+    soap_end_send(soap);
+  }
+  soap->error = status;
+  return soap_closesock(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_recv_fault(struct soap *soap)
+{ register int status = soap->error;
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Receiving SOAP Fault\n"));
+  soap->error = SOAP_OK;
+  if (soap_getfault(soap))
+  { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Error: soap_get_soapfault() failed. Is this a SOAP message at all?\n"));
+    *soap_faultcode(soap) = (soap->version == 2 ? "SOAP-ENV:Sender" : "SOAP-ENV:Client");
+    soap->error = status;
+    soap_set_fault(soap);
+  }
+  else
+  { register const char *s = *soap_faultcode(soap);
+    if (!soap_match_tag(soap, s, "SOAP-ENV:Server") || !soap_match_tag(soap, s, "SOAP-ENV:Receiver"))
+      status = SOAP_SVR_FAULT; 
+    else if (!soap_match_tag(soap, s, "SOAP-ENV:Client") || !soap_match_tag(soap, s, "SOAP-ENV:Sender"))
+      status = SOAP_CLI_FAULT;
+    else if (!soap_match_tag(soap, s, "SOAP-ENV:MustUnderstand"))
+      status = SOAP_MUSTUNDERSTAND;
+    else if (!soap_match_tag(soap, s, "SOAP-ENV:VersionMismatch"))
+      status = SOAP_VERSIONMISMATCH;
+    else
+    { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Fault code %s\n", s));
+      status = SOAP_FAULT;
+    }
+    if (soap_body_end_in(soap)
+     || soap_envelope_end_in(soap)
+     || soap_end_recv(soap))
+      return soap_closesock(soap);
+    soap->error = status;
+  }
+  return soap_closesock(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_send_empty_response(struct soap *soap)
+{ soap->count = 0;
+  if (soap_response(soap, SOAP_OK) || soap_end_send(soap))
+    return soap_closesock(soap);
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_recv_empty_response(struct soap *soap)
+{ if (soap_begin_recv(soap) || soap_end_recv(soap))
+    return soap_closesock(soap);
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static const char*
+soap_strerror(struct soap *soap)
+{
+  int err = soap->errnum;
+  if (!err)
+    err = soap_errno;
+  if (err)
+  {
+#ifndef WIN32
+    return strerror(err);
+#else
+    FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, 0, (LPTSTR)&soap->errorstr, sizeof(soap->errorstr), NULL);
+    return soap->errorstr;
+#endif
+  }
+  return "Operation interrupted or timed out";
+}
+#endif
+#endif 
+
+/******************************************************************************/
+#ifndef PALM_2
+static int
+soap_set_error(struct soap *soap, const char *faultcode, const char *faultstring, const char *faultdetail, int soaperror)
+{ *soap_faultcode(soap) = faultcode;
+  *soap_faultstring(soap) = faultstring;
+  if (faultdetail && *faultdetail)
+  { register const char **s = soap_faultdetail(soap);
+    if (s)
+      *s = faultdetail;
+  }
+  return soap->error = soaperror;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_sender_error(struct soap *soap, const char *faultstring, const char *faultdetail, int soaperror)
+{ return soap_set_error(soap, soap->version == 2 ? "SOAP-ENV:Sender" : "SOAP-ENV:Client", faultstring, faultdetail, soaperror);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_receiver_error(struct soap *soap, const char *faultstring, const char *faultdetail, int soaperror)
+{ return soap_set_error(soap, soap->version == 2 ? "SOAP-ENV:Receiver" : "SOAP-ENV:Server", faultstring, faultdetail, soaperror);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+static int
+soap_copy_fault(struct soap *soap, const char *faultcode, const char *faultstring, const char *faultdetail)
+{ char *s = NULL, *t = NULL;
+  if (faultstring)
+    s = soap_strdup(soap, faultstring);
+  if (faultdetail)
+    t = soap_strdup(soap, faultdetail);
+  return soap_set_error(soap, faultcode, s, t, SOAP_FAULT);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_sender_fault(struct soap *soap, const char *faultstring, const char *faultdetail)
+{ return soap_copy_fault(soap, soap->version == 2 ? "SOAP-ENV:Sender" : "SOAP-ENV:Client", faultstring, faultdetail);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_receiver_fault(struct soap *soap, const char *faultstring, const char *faultdetail)
+{ return soap_copy_fault(soap, soap->version == 2 ? "SOAP-ENV:Receiver" : "SOAP-ENV:Server", faultstring, faultdetail);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+#ifndef WITH_NOIO
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_print_fault(struct soap *soap, FILE *fd)
+{ if (soap->error)
+  { const char **s;
+    if (!*soap_faultcode(soap))
+      soap_set_fault(soap);
+    fprintf(fd, "SOAP FAULT: %s\n\"%s\"\n", *soap_faultcode(soap), *soap_faultstring(soap));
+    s = soap_faultdetail(soap);
+    if (s && *s)
+      fprintf(fd, "Detail: %s\n", *s);
+  }
+}
+#endif
+#endif
+/******************************************************************************/
+#ifndef PALM_1
+#ifndef WITH_NOIO
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_print_fault_location(struct soap *soap, FILE *fd)
+{ 
+#ifndef WITH_LEAN
+  int c;
+  if (soap->error && soap->buflen > 0)
+  { if (soap->bufidx == 0)
+      soap->bufidx = 1;
+    c = soap->buf[soap->bufidx - 1];
+    soap->buf[soap->bufidx - 1] = '\0';
+    if (soap->buflen - soap->bufidx > 1024)
+      soap->buf[soap->bufidx + 1024] = '\0';
+    else
+      soap->buf[soap->buflen - 1] = '\0';
+    fprintf(fd, "%s%c\n** HERE **\n", soap->buf, c);
+    if (soap->bufidx < soap->buflen)
+      fprintf(fd, "%s\n", soap->buf + soap->bufidx);
+  }
+#endif
+}
+#endif
+#endif
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_register_plugin_arg(struct soap *soap, int (*fcreate)(struct soap*, struct soap_plugin*, void*), void *arg)
+{ register struct soap_plugin *p;
+  register int r;
+  if (!(p = (struct soap_plugin*)SOAP_MALLOC(sizeof(struct soap_plugin))))
+    return soap->error = SOAP_EOM;
+  p->id = NULL;
+  p->data = NULL;
+  p->fcopy = NULL;
+  p->fdelete = NULL;
+  r = fcreate(soap, p, arg);
+  if (!r && p->fdelete)
+  { p->next = soap->plugins;
+    soap->plugins = p;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Registered '%s' plugin\n", p->id));
+    return SOAP_OK;
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not register plugin '%s': plugin returned error %d (or fdelete callback not set)\n", p->id?p->id:"?", r));
+  SOAP_FREE(p);
+  return r;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static void *
+fplugin(struct soap *soap, const char *id)
+{ register struct soap_plugin *p;
+  for (p = soap->plugins; p; p = p->next)
+    if (p->id == id || !strcmp(p->id, id))
+      return p->data;
+  return NULL;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void *
+SOAP_FMAC2
+soap_lookup_plugin(struct soap *soap, const char *id)
+{ return soap->fplugin(soap, id);
+}
+#endif
+
+/******************************************************************************/
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/org.glite.security.gsoap-plugin/src/stdsoap2_2.7.0f.h b/org.glite.security.gsoap-plugin/src/stdsoap2_2.7.0f.h
new file mode 100644 (file)
index 0000000..097b551
--- /dev/null
@@ -0,0 +1,1885 @@
+/*
+
+stdsoap2.h 2.7.0f
+
+gSOAP runtime environment.
+
+gSOAP XML Web services tools
+Copyright (C) 2000-2005, Robert van Engelen, Genivia, Inc., All Rights Reserved.
+
+Contributors:
+
+Wind River Systems, Inc., for the following additions (marked WR[...]) :
+  - vxWorks compatible
+  - Support for IPv6.
+
+--------------------------------------------------------------------------------
+
+   This software is released under one of the following three licenses:
+   GPL, the gSOAP public license, or Genivia's license for commercial use.
+
+--------------------------------------------------------------------------------
+gSOAP public license.
+
+The contents of this file are subject to the gSOAP Public License Version 1.3
+(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.cs.fsu.edu/~engelen/soaplicense.html
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the License.
+
+The Initial Developer of the Original Code is Robert A. van Engelen.
+Copyright (C) 2000-2005, Robert van Engelen, Genivia, Inc., All Rights Reserved.
+--------------------------------------------------------------------------------
+GPL license.
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place, Suite 330, Boston, MA 02111-1307 USA
+
+Author contact information:
+engelen@genivia.com / engelen@acm.org
+--------------------------------------------------------------------------------
+A commercial use license is available from Genivia, Inc., contact@genivia.com
+--------------------------------------------------------------------------------
+*/
+
+#ifdef WITH_SOAPDEFS_H
+# include "soapdefs.h"         /* include user-defined stuff */
+#endif
+
+#ifndef _THREAD_SAFE
+# define _THREAD_SAFE
+#endif
+
+#ifndef OPENSERVER
+# ifndef _REENTRANT
+#  define _REENTRANT
+# endif
+#endif
+
+#ifndef SOAP_BEGIN_NAMESPACE
+# define SOAP_BEGIN_NAMESPACE(name)
+#endif
+
+#ifndef SOAP_END_NAMESPACE
+# define SOAP_END_NAMESPACE(name)
+#endif
+
+#ifndef SOAP_FMAC1     /* stdsoap2.h declaration macro */
+# define SOAP_FMAC1
+#endif
+
+#ifndef SOAP_FMAC2     /* stdsoap2.h declaration macro */
+# define SOAP_FMAC2
+#endif
+
+#ifndef SOAP_FMAC3     /* (de)serializer declaration macro */
+# define SOAP_FMAC3
+#endif
+
+#ifndef SOAP_FMAC3S    /* string converter for (de)serializer declaration macro */
+# define SOAP_FMAC3S SOAP_FMAC3
+#endif
+
+#ifndef SOAP_FMAC4     /* (de)serializer declaration macro */
+# define SOAP_FMAC4
+#endif
+
+#ifndef SOAP_FMAC4S    /* string converter for (de)serializer declaration macro */
+# define SOAP_FMAC4S SOAP_FMAC4
+#endif
+
+#ifndef SOAP_FMAC5     /* stub/skeleton declaration macro */
+# define SOAP_FMAC5
+#endif
+
+#ifndef SOAP_FMAC6     /* stub/skeleton declaration macro */
+# define SOAP_FMAC6
+#endif
+
+#ifndef SOAP_CMAC      /* class declaration macro */
+# define SOAP_CMAC
+#endif
+
+#ifndef SOAP_NMAC      /* namespace table declaration macro */
+# define SOAP_NMAC
+#endif
+
+#ifndef SOAP_SOURCE_STAMP
+# define SOAP_SOURCE_STAMP(str)
+#endif
+
+#ifdef WITH_LEANER
+# ifndef WITH_LEAN
+#  define WITH_LEAN
+# endif
+#endif
+
+#ifdef WITH_LEAN
+# ifdef WITH_COOKIES
+#  error "Cannot build WITH_LEAN code WITH_COOKIES enabled"
+# endif
+#endif
+
+#ifndef STDSOAP_H
+#define STDSOAP_H
+
+#if defined(__vxworks) || defined(__VXWORKS__)
+# define VXWORKS
+#endif
+
+#ifdef _WIN32
+# ifndef WIN32
+#  define WIN32
+# endif
+#endif
+
+#ifdef UNDER_CE
+# ifndef WIN32
+#  define WIN32
+# endif
+#endif
+
+#ifdef __BORLANDC__
+# ifdef __WIN32__
+#  ifndef WIN32
+#   define WIN32
+#  endif
+# endif
+#endif
+
+#ifdef __CYGWIN__
+# ifndef CYGWIN
+#  define CYGWIN
+# endif
+#endif
+
+#ifdef __SYMBIAN32__ 
+# define SYMBIAN
+# undef WIN32
+#endif
+
+#if defined(__palmos__) || defined(PALM_GCC) || defined(__PALMOS_TRAPS__)
+# ifndef PALM
+#  define PALM
+# endif
+#endif
+
+#if defined(__hpux)
+# ifndef HP_UX
+#  define HP_UX
+# endif
+#endif
+
+#ifdef __alpha
+# ifndef TRU64
+#  define TRU64 
+# endif
+#endif
+
+#ifdef __MVS__
+# ifndef OS390
+#  define OS390
+# endif
+#endif
+
+#ifdef _AIX
+# define __socklen_t_defined
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#else
+# if defined(UNDER_CE)
+#  define WITH_LEAN
+#  define HAVE_SSCANF
+# elif defined(WIN32)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(CYGWIN)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(__APPLE__)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_TIMEGM
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(_AIXVERSION_431)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(HP_UX)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(FREEBSD)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_GETTIMEOFDAY
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(__VMS)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(__GLIBC__) || defined(__GNU__)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_TIMEGM
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+#  define HAVE_ISNAN
+# elif defined(TRU64)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_GETTIMEOFDAY
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define __USE_STD_IOSTREAM
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(MAC_CARBON)
+#  define WITH_NOIO
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GETHOSTBYNAME_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(PALM)
+#  define WITH_LEAN
+#  define HAVE_STRTOD   /* strtod() is defined in palmFunctions.h */
+#  include <stdlib.h>  /* Needs to be included before unix headers */
+#  include <sys_types.h>
+#  define IGNORE_STDIO_STUBS
+#  include <StdIOPalm.h>
+#  define O_NONBLOCK FNONBIO
+#  include <sys_socket.h>
+#  include <time.h>
+#  include "palmFunctions.h"
+# elif defined(SYMBIAN)
+#  define WITH_LEAN
+#  define WITH_NONAMESPACES
+#  define HAVE_STRTOD  /* use STRTOD since sscanf doesn't seem to work */
+#  include <e32def.h>
+#  include <sys/ioctl.h>
+# elif defined(VXWORKS)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_RAND_R
+#  define HAVE_PGMTIME_R
+#  define HAVE_PLOCALTIME_R
+#  define HAVE_MKTIME
+# elif defined(OS390)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MB
+# else
+/* Default asumptions on supported functions */
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GETHOSTBYNAME_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# endif
+#endif
+
+#if defined(TRU64)
+# define SOAP_LONG_FORMAT "%ld"
+# define SOAP_ULONG_FORMAT "%lu"
+#elif defined(WIN32)
+# define SOAP_LONG_FORMAT "%I64d"
+# define SOAP_ULONG_FORMAT "%I64u"
+#endif
+
+#ifndef SOAP_LONG_FORMAT
+# define SOAP_LONG_FORMAT "%lld"       /* printf format for 64 bit ints */
+#endif
+
+#ifndef SOAP_ULONG_FORMAT
+# define SOAP_ULONG_FORMAT "%llu"      /* printf format for unsigned 64 bit ints */
+#endif
+
+#ifndef SOAP_MALLOC                    /* use libc malloc */
+# define SOAP_MALLOC(n) malloc(n)
+#endif
+
+#ifndef SOAP_FREE                      /* use libc free */
+# define SOAP_FREE(p) free(p)
+#endif
+
+#include <stdlib.h>
+
+#ifndef PALM
+# include <stdio.h>
+# include <string.h>
+#endif
+
+#include <ctype.h>
+#include <limits.h>
+
+#if defined(__cplusplus) && !defined(WITH_LEAN)
+# include <string>
+# include <iostream>
+  using namespace std;
+#endif
+
+#ifdef WITH_NOHTTP
+# ifndef WITH_NOIO
+#  define WITH_NOIO
+#  undef WITH_COOKIES
+# endif
+#endif
+
+#ifndef UNDER_CE
+# ifndef PALM
+#  ifndef WITH_NOIO
+#   include <errno.h>
+#   include <sys/types.h>
+#  endif
+#  ifndef WITH_LEAN
+#   ifdef HAVE_SYS_TIMEB_H
+#    include <sys/timeb.h>             /* for ftime() */
+#   endif
+#   include <time.h>
+#  endif
+# endif
+#endif
+
+#ifdef OPENSERVER
+# include <sys/socket.h>
+# include <sys/stream.h>
+# include <sys/protosw.h>
+  extern int h_errno;
+#endif
+
+#ifndef WITH_NOIO
+# ifndef WIN32
+#  ifndef PALM
+#   include <sys/socket.h>
+#   ifdef VXWORKS
+#    include <sockLib.h>
+#   endif
+#   ifndef VXWORKS
+#    ifndef SYMBIAN
+#     include <strings.h>
+#    endif
+#   endif
+#   ifdef SUN_OS
+#    include <sys/stream.h>            /* SUN */
+#    include <sys/socketvar.h>         /* SUN < 2.8 (?) */
+#   endif
+#   ifdef VXWORKS
+#    include <sys/times.h>
+#   else
+#    include <sys/time.h>
+#   endif
+#   include <netinet/in.h>
+#   ifdef OS390
+#    include <netinet/tcp_var.h>
+#   else
+#    include <netinet/tcp.h>          /* TCP_NODELAY */
+#   endif
+#   include <arpa/inet.h>
+#  endif
+# endif
+#endif
+
+#ifdef WITH_FASTCGI
+# include <fcgi_stdio.h>
+#endif
+
+#ifdef WITH_OPENSSL
+# define OPENSSL_NO_KRB5
+# include <openssl/ssl.h>
+# include <openssl/err.h>
+# include <openssl/rand.h>
+# ifndef ALLOW_OLD_VERSIONS
+#  if (OPENSSL_VERSION_NUMBER < 0x00905100L)
+#   error "Must use OpenSSL 0.9.6 or later"
+#  endif
+# endif
+#endif
+
+#ifdef WITH_GZIP
+# ifndef WITH_ZLIB
+#  define WITH_ZLIB
+# endif
+#endif
+
+#ifdef WITH_CASEINSENSITIVETAGS
+# define SOAP_STRCMP soap_tag_cmp      /* case insensitve XML element/attribute names */
+#else
+# define SOAP_STRCMP strcmp            /* case sensitive XML element/attribute names */
+#endif
+
+#ifdef WITH_ZLIB
+# include <zlib.h>
+#endif
+
+#ifndef PALM
+# include <math.h>     /* for isnan() */
+#endif
+
+/* #define DEBUG */ /* Uncomment to debug sending (in file SENT.log) receiving (in file RECV.log) and messages (in file TEST.log) */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef WIN32
+# ifndef UNDER_CE
+#  include <io.h>
+#  include <fcntl.h>
+# endif
+# include <winsock.h>
+/* # include <winsock2.h> */ /* Alternative: use winsock2 (not available with eVC) */
+/* WR[ */
+# ifdef WITH_IPV6
+#  include <ws2tcpip.h>
+#  include <wspiapi.h>
+# endif
+#else
+# ifdef VXWORKS
+#  include <hostLib.h>
+#  include <ioctl.h>
+#  include <ioLib.h>
+# endif
+/* ]WR */
+# ifndef WITH_NOIO
+#  ifndef PALM
+#   include <netdb.h>
+#   include <netinet/in.h>
+#   include <unistd.h>
+#   include <fcntl.h>
+#  endif
+# endif
+#endif
+
+#ifdef WIN32
+# define SOAP_SOCKET SOCKET
+#else
+# define SOAP_SOCKET int
+# define closesocket(n) close(n)
+#endif
+
+#define SOAP_INVALID_SOCKET (-1)
+#define soap_valid_socket(n) ((n) != SOAP_INVALID_SOCKET)
+
+#if defined(SYMBIAN)
+# define LONG64 long
+# define ULONG64 unsigned LONG64
+#elif !defined(WIN32) || defined(__GLIBC__) || defined(__GNU__)
+# ifndef LONG64
+#  define LONG64 long long
+#  define ULONG64 unsigned LONG64
+# endif
+#elif defined(UNDER_CE)
+# define LONG64 __int64
+# define ULONG64 unsigned LONG64
+#elif defined(__BORLANDC__)
+# define LONG64 __int64
+# define ULONG64 unsigned LONG64
+#endif
+
+#if defined(WIN32)
+# define soap_int32 __int32
+#elif defined(SYMBIAN)
+# define soap_int32 long
+#elif defined(PALM)
+# define soap_int32 Int32
+#else
+# define soap_int32 int32_t
+#endif
+
+#ifdef WIN32
+# define SOAP_EINTR WSAEINTR
+# define SOAP_EAGAIN WSAEWOULDBLOCK
+# define SOAP_EWOULDBLOCK WSAEWOULDBLOCK
+# define SOAP_EINPROGRESS WSAEINPROGRESS
+#else
+# define SOAP_EINTR EINTR
+# define SOAP_EAGAIN EAGAIN
+# ifdef SYMBIAN
+#  define SOAP_EWOULDBLOCK 9898
+#  define SOAP_EINPROGRESS 9899
+# else
+#  define SOAP_EWOULDBLOCK EWOULDBLOCK
+#  define SOAP_EINPROGRESS EINPROGRESS
+# endif
+#endif
+
+#ifdef WIN32
+# ifdef UNDER_CE
+#  define soap_errno GetLastError()
+#  define soap_socket_errno GetLastError()
+# else
+#  define soap_errno GetLastError()
+#  define soap_socket_errno WSAGetLastError()
+# endif
+#else
+# ifndef WITH_NOIO
+#  define soap_errno errno
+#  define soap_socket_errno errno
+# else
+#  define soap_errno 0
+#  define soap_socket_errno 0
+# endif
+#endif
+
+#ifndef SOAP_BUFLEN
+# ifndef WITH_LEAN
+#  define SOAP_BUFLEN (32768) /* buffer length for socket packets, also used by gethostbyname_r so don't make this too small */
+# else
+#  define SOAP_BUFLEN  (2048)
+# endif
+#endif
+#ifndef SOAP_LABLEN
+# ifndef WITH_LEAN
+#  define SOAP_LABLEN   (256) /* initial look-aside buffer length */
+# else
+#  define SOAP_LABLEN    (32)
+# endif
+#endif
+#ifndef SOAP_PTRHASH
+# ifndef WITH_LEAN
+#  define SOAP_PTRHASH (1024) /* size of pointer analysis hash table (must be power of 2) */
+# else
+#  define SOAP_PTRHASH   (16)
+# endif
+#endif
+#ifndef SOAP_IDHASH
+# ifndef WITH_LEAN
+#  define SOAP_IDHASH  (1999) /* prime size of hash table for parsed id/ref */
+# else
+#  define SOAP_IDHASH    (19) /* 19, 199 */
+# endif
+#endif
+#ifndef SOAP_BLKLEN
+# ifndef WITH_LEAN
+#  define SOAP_BLKLEN   (256) /* size of blocks to collect long strings and XML attributes */
+# else
+#  define SOAP_BLKLEN    (32)
+# endif
+#endif
+#ifndef SOAP_TAGLEN
+# ifndef WITH_LEAN
+#  define SOAP_TAGLEN   (256) /* maximum length of XML element tag/attribute name or host/path name + 1 */
+# else
+#  define SOAP_TAGLEN    (64)
+# endif
+#endif
+#ifndef SOAP_HDRLEN
+# ifndef WITH_LEAN
+#  define SOAP_HDRLEN  (8192) /* maximum length of HTTP header line (must be >4096 to read cookies) */
+# else
+#  define SOAP_HDRLEN  (1024)
+# endif
+#endif
+#ifndef SOAP_MAXDIMS
+# ifndef WITH_LEAN
+#  define SOAP_MAXDIMS  (16) /* maximum array dimensions (array nestings) must be less than 64 to protect soap->tmpbuf */
+# else
+#  define SOAP_MAXDIMS   (4)
+# endif
+#endif
+
+#ifndef SOAP_MAXLOGS
+# define SOAP_MAXLOGS    (3) /* max number of debug logs per struct soap environment */
+# define SOAP_INDEX_RECV  (0)
+# define SOAP_INDEX_SENT  (1)
+# define SOAP_INDEX_TEST  (2)
+#endif
+
+#ifndef SOAP_MAXKEEPALIVE
+# define SOAP_MAXKEEPALIVE (100) /* max iterations to keep server connection alive */
+#endif
+
+#ifndef SOAP_MAXARRAYSIZE
+# define SOAP_MAXARRAYSIZE (100000) /* "trusted" max size of inbound SOAP array for compound array allocation */
+#endif
+
+#ifdef VXWORKS
+# ifdef __INCmathh 
+#  include <private/mathP.h>
+#  ifndef HAVE_ISNAN
+#   define HAVE_ISNAN
+#  endif
+#  define soap_isnan(num) isNan(num)
+# endif
+#endif
+
+#ifdef WIN32 
+# include <float.h>
+# ifndef HAVE_ISNAN
+#  define HAVE_ISNAN
+# endif
+# define soap_isnan(num) _isnan(num)
+#endif
+
+#ifdef SUN_OS
+# define soap_isnan(n) isnan(n)
+#endif
+
+#if !defined(HAVE_ISNAN) && (defined(_MATH_H) || defined(_MATH_INCLUDED))
+# define HAVE_ISNAN
+#endif
+
+#ifndef soap_isnan
+# ifdef HAVE_ISNAN
+#  define soap_isnan(n) isnan(n)
+# else
+#  define soap_isnan(_) (0)
+# endif
+#endif
+
+extern const struct soap_double_nan { unsigned int n1, n2; } soap_double_nan;
+
+#ifdef VXWORKS
+# ifndef FLT_MAX
+#  define FLT_MAX _ARCH_FLT_MAX
+# endif
+# ifndef DBL_MAX
+#  define DBL_MAX _ARCH_DBL_MAX
+# endif
+#endif
+
+#ifndef FLT_NAN
+# ifdef HAVE_ISNAN
+#  define FLT_NAN (*(float*)&soap_double_nan)
+# else
+#  define FLT_NAN (0.0)
+# endif
+#endif
+
+#ifndef FLT_PINFTY
+# ifdef FLT_MAX
+#  define FLT_PINFTY FLT_MAX
+# else
+#  ifdef HUGE_VAL
+#    define FLT_PINFTY (float)HUGE_VAL
+#  else
+#   ifdef FLOAT_MAX
+#    define FLT_PINFTY FLOAT_MAX
+#   else
+#    define FLT_PINFTY (3.40282347e+38F)
+#   endif
+#  endif
+# endif
+#endif
+
+#ifndef FLT_NINFTY
+# define FLT_NINFTY (-FLT_PINFTY)
+#endif
+
+#ifndef DBL_NAN
+# ifdef HAVE_ISNAN
+#  define DBL_NAN (*(double*)&soap_double_nan)
+# else
+#  define DBL_NAN (0.0)
+# endif
+#endif
+
+#ifndef DBL_PINFTY
+# ifdef DBL_MAX
+#  define DBL_PINFTY DBL_MAX
+# else
+#  ifdef HUGE_VAL
+#   define DBL_PINFTY (double)HUGE_VAL
+#  else
+#   ifdef DOUBLE_MAX
+#    define DBL_PINFTY DOUBLE_MAX
+#   else
+#    define DBL_PINFTY (1.7976931348623157e+308)
+#   endif
+#  endif
+# endif
+#endif
+
+#ifndef DBL_NINFTY
+# define DBL_NINFTY (-DBL_PINFTY)
+#endif
+
+#define soap_ispinfd(n) ((n) >= DBL_PINFTY)
+#define soap_ispinff(n) ((n) >= FLT_PINFTY)
+#define soap_isninfd(n) ((n) <= DBL_NINFTY)
+#define soap_isninff(n) ((n) <= FLT_NINFTY)
+
+/* gSOAP error codes */
+
+#define SOAP_EOF                       EOF
+#define SOAP_ERR                       EOF
+#define SOAP_OK                                0
+#define SOAP_CLI_FAULT                 1
+#define SOAP_SVR_FAULT                 2
+#define SOAP_TAG_MISMATCH              3
+#define SOAP_TYPE                      4
+#define SOAP_SYNTAX_ERROR              5
+#define SOAP_NO_TAG                    6
+#define SOAP_IOB                       7
+#define SOAP_MUSTUNDERSTAND            8
+#define SOAP_NAMESPACE                 9
+/* #define SOAP_OBJ_MISMATCH           10      obsolete */
+#define SOAP_FATAL_ERROR               11
+#define SOAP_FAULT                     12
+#define SOAP_NO_METHOD                 13
+#define SOAP_GET_METHOD                        14
+#define SOAP_EOM                       15
+#define SOAP_NULL                      16
+#define SOAP_MULTI_ID                  17
+#define SOAP_MISSING_ID                        18
+#define SOAP_HREF                      19
+#define SOAP_TCP_ERROR                 20
+#define SOAP_HTTP_ERROR                        21
+#define SOAP_SSL_ERROR                 22
+#define SOAP_ZLIB_ERROR                        23
+#define SOAP_DIME_ERROR                        24
+#define SOAP_DIME_HREF                 25
+#define SOAP_DIME_MISMATCH             26
+#define SOAP_DIME_END                  27
+#define SOAP_MIME_ERROR                        28
+#define SOAP_VERSIONMISMATCH           29
+#define SOAP_PLUGIN_ERROR              30
+#define SOAP_DATAENCODINGUNKNOWN       31
+#define SOAP_REQUIRED                  32
+#define SOAP_PROHIBITED                        33
+#define SOAP_OCCURS                    34
+#define SOAP_LENGTH                    35
+
+#define soap_xml_error_check(e) ((e) == SOAP_TAG_MISMATCH || (e) == SOAP_TAG_END || (e) == SOAP_SYNTAX_ERROR || (e) == SOAP_NAMESPACE || (e) == SOAP_MULTI_ID || (e) == SOAP_MISSING_ID || (e) == SOAP_REQUIRED || (e) == SOAP_PROHIBITED || (e) == SOAP_OCCURS || (e) == SOAP_LENGTH || (e) == SOAP_NULL || (e) == SOAP_HREF)
+#define soap_soap_error_check(e) ((e) == SOAP_CLI_FAULT || (e) == SOAP_SVR_FAULT || (e) == SOAP_VERSIONMISMATCH || (e) == SOAP_MUSTUNDERSTAND || (e) == SOAP_FAULT || (e) == SOAP_NO_METHOD)
+#define soap_tcp_error_check(e) ((e) == SOAP_EOF || (e) == SOAP_TCP_ERROR)
+#define soap_ssl_error_check(e) ((e) == SOAP_SSL_ERROR)
+#define soap_zlib_error_check(e) ((e) == SOAP_ZLIB_ERROR)
+#define soap_mime_error_check(e) ((e) == SOAP_MIME_ERROR)
+#define soap_dime_error_check(e) ((e) == SOAP_DIME_ERROR || (e) == SOAP_DIME_MISMATCH)
+#define soap_http_error_check(e) ((e) == SOAP_HTTP_ERROR || (e) == SOAP_GET_METHOD || ((e) >= 100 && (e) < 600))
+
+/* gSOAP HTTP response status codes 100 to 600 are reserved */
+
+/* Special gSOAP HTTP response status codes */
+
+#define SOAP_STOP              1000    /* No HTTP response */
+#define SOAP_HTML              1001    /* Custom HTML response */
+#define SOAP_FILE              1002    /* Custom file-based response */
+
+/* gSOAP HTTP request status codes */
+
+#define SOAP_POST              1003
+#define SOAP_GET               1104
+
+/* gSOAP DIME */
+
+#define SOAP_DIME_CF           0x01
+#define SOAP_DIME_ME           0x02
+#define SOAP_DIME_MB           0x04
+#define SOAP_DIME_VERSION      0x08 /* DIME version 1 */
+#define SOAP_DIME_MEDIA                0x10
+#define SOAP_DIME_ABSURI       0x20
+
+/* gSOAP ZLIB */
+
+#define SOAP_ZLIB_NONE         0x00
+#define SOAP_ZLIB_DEFLATE      0x01
+#define SOAP_ZLIB_INFLATE      0x02
+#define SOAP_ZLIB_GZIP         0x02
+
+/* gSOAP transport, connection, and content encoding modes */
+
+typedef soap_int32 soap_mode;
+
+#define SOAP_IO                        0x00000003      /* IO mask */
+#define SOAP_IO_FLUSH          0x00000000      /* flush output immediately, no buffering */
+#define SOAP_IO_BUFFER         0x00000001      /* buffer output in packets of size SOAP_BUFLEN */
+#define SOAP_IO_STORE          0x00000002      /* store entire output to determine length for transport */
+#define SOAP_IO_CHUNK          0x00000003      /* use HTTP chunked transfer AND buffer packets */
+
+#define SOAP_IO_LENGTH         0x00000004
+#define SOAP_IO_KEEPALIVE      0x00000008
+
+#define SOAP_ENC_LATIN         0x00800010      /* iso-8859-1 encoding */
+#define SOAP_ENC_XML           0x00000020      /* plain XML encoding, no HTTP header */
+#define SOAP_ENC_DIME          0x00000040
+#define SOAP_ENC_MIME          0x00000080
+#define SOAP_ENC_ZLIB          0x00000100
+#define SOAP_ENC_SSL           0x00000200
+
+#define SOAP_ENC               0x00000FFF      /* IO and ENC mask */
+
+#define SOAP_XML_STRICT                0x00001000      /* strict validation */
+#define SOAP_XML_CANONICAL     0x00002000      /* C14N canonical XML */
+#define SOAP_XML_TREE          0x00004000
+#define SOAP_XML_GRAPH         0x00008000
+#define SOAP_XML_NIL           0x00010000
+#define SOAP_XML_DOM           0x00020000
+#define SOAP_XML_SEC           0x00040000      /* reserved for WS security */
+
+#define SOAP_C_NOIOB           0x00100000
+#define SOAP_C_UTFSTRING       0x00200000
+#define SOAP_C_MBSTRING                0x00400000
+
+#define SOAP_DOM_TREE          0x01000000
+#define SOAP_DOM_NODE          0x02000000
+
+#define SOAP_IO_DEFAULT                SOAP_IO_FLUSH
+
+/* SSL client/server authentication settings */
+
+#define SOAP_SSL_NO_AUTHENTICATION             0x00    /* for testing purposes */
+#define SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION 0x01    /* client requires server to authenticate */
+#define SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION 0x02    /* server requires client to authenticate */
+
+#define SOAP_SSL_DEFAULT                       SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION
+
+/* */
+
+#define SOAP_BEGIN             0
+#define SOAP_IN_ENVELOPE       2
+#define SOAP_IN_HEADER         3
+#define SOAP_END_HEADER                4
+#define SOAP_IN_BODY           5
+#define SOAP_END_BODY          6
+#define SOAP_END_ENVELOPE      7
+#define SOAP_END               8
+
+/* DEBUG macros */
+
+#ifndef WITH_LEAN
+# ifdef DEBUG
+#  ifndef SOAP_DEBUG
+#   define SOAP_DEBUG
+#  endif
+# endif
+#endif
+
+#ifdef SOAP_DEBUG
+# ifndef SOAP_MESSAGE
+#  define SOAP_MESSAGE fprintf
+# endif
+# ifndef DBGLOG
+#  define DBGLOG(DBGFILE, CMD) \
+{ if (soap)\
+  { if (!soap->fdebug[SOAP_INDEX_##DBGFILE])\
+      soap_open_logfile(soap, SOAP_INDEX_##DBGFILE);\
+    if (soap->fdebug[SOAP_INDEX_##DBGFILE])\
+    { FILE *fdebug = soap->fdebug[SOAP_INDEX_##DBGFILE];\
+      CMD;\
+      fflush(fdebug);\
+    }\
+  }\
+}
+# endif
+# ifndef DBGMSG
+#  define DBGMSG(DBGFILE, MSG, LEN) \
+{ if (soap)\
+  { if (!soap->fdebug[SOAP_INDEX_##DBGFILE])\
+      soap_open_logfile(soap, SOAP_INDEX_##DBGFILE);\
+    if (soap->fdebug[SOAP_INDEX_##DBGFILE])\
+    { fwrite((MSG), 1, (LEN), soap->fdebug[SOAP_INDEX_##DBGFILE]);\
+      fflush(soap->fdebug[SOAP_INDEX_##DBGFILE]);\
+    }\
+  }\
+}
+# endif
+#else
+# define DBGLOG(DBGFILE, CMD)
+# define DBGMSG(DBGFILE, MSG, LEN)
+#endif
+
+/* UCS-4 requires 32 bits (0-7FFFFFFF, the sign bit is used by gSOAP to distinguish XML entities) */
+typedef soap_int32 soap_wchar;
+
+struct Namespace
+{ const char *id;
+  const char *ns;
+  const char *in;
+  char *out;
+};
+
+struct soap_nlist
+{ struct soap_nlist *next;
+  unsigned int level;
+  short index; /* corresponding entry in ns mapping table */
+  char *ns; /* only set when parsed ns URI is not in the ns mapping table */
+  char id[1]; /* the actual string value flows into the allocated region below this struct */
+};
+
+struct soap_blist
+{ struct soap_blist *next;
+  char *ptr;
+  size_t size;
+};
+
+struct soap_array
+{ void *__ptr;
+  int __size;
+};
+
+/* pointer serialization management */
+struct soap_plist
+{ struct soap_plist *next;
+  const void *ptr;
+  const struct soap_array *array;
+  int type;
+  int id;
+  char mark1;
+  char mark2;
+};
+
+/* class allocation list */
+struct soap_clist
+{ struct soap_clist *next;
+  void *ptr;
+  int type;
+  int size;
+  void (*fdelete)(struct soap_clist*);
+};
+
+struct soap_attribute
+{ struct soap_attribute *next;
+  char *value;
+  size_t size;
+  char *ns;
+  short visible;
+  char name[1]; /* the actual name string flows into the allocated region below this struct */
+};
+
+struct soap_cookie
+{ struct soap_cookie *next;
+  char *name;
+  char *value;
+  char *domain;
+  char *path;
+  long expire;         /* client-side: local time to expire; server-side: seconds to expire */
+  unsigned int version;
+  short secure;
+  short session;       /* server-side */
+  short env;           /* server-side: got cookie from client */
+  short modified;      /* server-side: client cookie was modified */
+};
+
+#ifdef __cplusplus
+SOAP_FMAC1 struct soap_multipart* SOAP_FMAC2 soap_next_multipart(struct soap_multipart*);
+
+class soap_multipart_iterator
+{ public:
+  struct soap_multipart *content;
+  bool operator==(const soap_multipart_iterator& iter) const
+    { return content == iter.content; }
+  bool operator!=(const soap_multipart_iterator& iter) const
+    { return content != iter.content; }
+  struct soap_multipart &operator*() const
+    { return *content; }
+  soap_multipart_iterator &operator++()
+    { content = soap_next_multipart(content); return *this; }
+  soap_multipart_iterator() : content(NULL)
+    { }
+  soap_multipart_iterator(struct soap_multipart *p) : content(p)
+    { }
+};
+#endif
+
+#ifndef WITH_LEANER
+struct soap_dime
+{ size_t count;
+  size_t size;
+  size_t chunksize;
+  size_t buflen;
+  char flags;
+  char *ptr;
+  const char *id;
+  const char *type;
+  const char *options;
+  struct soap_multipart *list;         /* list of DIME attachments received */
+  struct soap_multipart *first, *last; /* temporary in/out queue */
+#ifdef __cplusplus
+  soap_multipart_iterator begin()
+    { soap_multipart_iterator iter(list); return iter; };
+  soap_multipart_iterator end()
+    { soap_multipart_iterator iter(NULL); return iter; };
+#endif
+};
+#endif
+
+#ifndef WITH_LEANER
+struct soap_mime
+{ char *boundary;                      /* MIME boundary */
+  const char *start;                   /* MIME start ID */
+  struct soap_multipart *list;         /* list of DIME attachments received */
+  struct soap_multipart *first, *last; /* temporary in/out queue */
+#ifdef __cplusplus
+  soap_multipart_iterator begin()
+    { soap_multipart_iterator iter(list); return iter; };
+  soap_multipart_iterator end()
+    { soap_multipart_iterator iter(NULL); return iter; };
+#endif
+};
+#endif
+
+#ifndef WITH_LEANER
+/* RFC2045 MIME content transfer encodings */
+enum soap_mime_encoding
+{ SOAP_MIME_NONE,
+  SOAP_MIME_7BIT,
+  SOAP_MIME_8BIT,
+  SOAP_MIME_BINARY,
+  SOAP_MIME_QUOTED_PRINTABLE,
+  SOAP_MIME_BASE64,
+  SOAP_MIME_IETF_TOKEN,
+  SOAP_MIME_X_TOKEN
+};
+#endif
+
+#ifndef WITH_LEANER
+/* DIME/MIME multipart list */
+struct soap_multipart
+{ struct soap_multipart *next;
+  char *ptr;                           /* points to raw data content */
+  size_t size;                         /* size of data content */
+  const char *id;                      /* DIME/MIME content ID */
+  const char *type;                    /* DIME/MIME type (MIME type format) */
+  const char *options;                 /* DIME options */
+  enum soap_mime_encoding encoding;    /* MIME Content-Transfer-Encoding */
+  const char *location;                        /* MIME Content-Location (optional) */
+  const char *description;             /* MIME Content-Description (optional) */
+#ifdef __cplusplus
+  typedef soap_multipart_iterator iterator;
+#endif
+};
+#endif
+
+#ifndef WITH_LEANER
+struct soap_dom_attribute
+{ struct soap_dom_attribute *next;
+  const char *nstr;
+  char *name;
+  char *data;
+  wchar_t *wide;
+  struct soap *soap;
+#ifdef __cplusplus
+  struct soap_dom_attribute &set(const char *nstr, const char *name);  /* set namespace and name */
+  struct soap_dom_attribute &set(const char *data);            /* set data */
+  void unlink();
+  soap_dom_attribute();
+  soap_dom_attribute(struct soap *soap);
+  soap_dom_attribute(struct soap *soap, const char *nstr, const char *name, const char *data);
+  ~soap_dom_attribute();
+#endif
+};
+#endif
+
+#ifndef WITH_LEANER
+#ifdef __cplusplus
+class soap_dom_iterator
+{ public:
+  struct soap_dom_element *elt;
+  const char *nstr;
+  const char *name;
+  int type;
+  bool operator==(const soap_dom_iterator&) const;
+  bool operator!=(const soap_dom_iterator&) const;
+  struct soap_dom_element &operator*() const;
+  soap_dom_iterator &operator++();
+  soap_dom_iterator();
+  soap_dom_iterator(struct soap_dom_element*);
+  ~soap_dom_iterator();
+};
+#endif
+#endif
+
+#ifndef WITH_LEANER
+struct soap_dom_element
+{ struct soap_dom_element *next;       /* next sibling */
+  struct soap_dom_element *prnt;       /* parent */
+  struct soap_dom_element *elts;       /* first child element */
+  struct soap_dom_attribute *atts;     /* first child attribute */
+  const char *nstr;                    /* namespace string */
+  char *name;                          /* element tag name */
+  char *data;                          /* element content data (with SOAP_C_UTFSTRING flag set) */
+  wchar_t *wide;                       /* element content data */
+  int type;                            /* optional: serialized C/C++ data type */
+  void *node;                          /* optional: pointer to serialized C/C++ data */
+  struct soap *soap;
+#ifdef __cplusplus
+  typedef soap_dom_iterator iterator;
+  struct soap_dom_element &set(const char *nstr, const char *name);
+  struct soap_dom_element &set(const char *data);
+  struct soap_dom_element &set(void *node, int type);
+  struct soap_dom_element &add(struct soap_dom_element*);
+  struct soap_dom_element &add(struct soap_dom_element&);
+  struct soap_dom_element &add(struct soap_dom_attribute*);
+  struct soap_dom_element &add(struct soap_dom_attribute&);
+  soap_dom_iterator begin();
+  soap_dom_iterator end();
+  soap_dom_iterator find(const char *nstr, const char *name);
+  soap_dom_iterator find(int type);
+  void unlink();
+  soap_dom_element();
+  soap_dom_element(struct soap *soap);
+  soap_dom_element(struct soap *soap, const char *nstr, const char *name);
+  soap_dom_element(struct soap *soap, const char *nstr, const char *name, const char *data);
+  soap_dom_element(struct soap *soap, const char *nstr, const char *name, void *node, int type);
+  ~soap_dom_element();
+#endif
+};
+#endif
+
+#if defined(__cplusplus) && !defined(WITH_LEAN)
+}
+extern ostream &operator<<(ostream&, const struct soap_dom_element&);
+extern istream &operator>>(istream&, struct soap_dom_element&);
+extern "C" {
+#endif
+
+struct soap
+{ short version;               /* 1 = SOAP1.1 and 2 = SOAP1.2 (set automatically from namespace URI in nsmap table) */
+  short copy;                  /* 1 = copy of another soap struct */
+  soap_mode mode;
+  soap_mode imode;
+  soap_mode omode;
+  const char *float_format;    /* points to user-definable format string for floats (<1024 chars) */
+  const char *double_format;   /* points to user-definable format string for doubles (<1024 chars) */
+  const char *dime_id_format;  /* points to user-definable format string for integer DIME id (<SOAP_TAGLEN chars) */
+  const char *http_version;    /* HTTP version used "1.0" or "1.1" */
+  const char *http_content;    /* optional custom response content type (with SOAP_FILE) */
+  const char *encodingStyle;   /* default = NULL which means that SOAP encoding is used */
+  const char *actor;
+  int recv_timeout;            /* when > 0, gives socket recv timeout in seconds, < 0 in usec */
+  int send_timeout;            /* when > 0, gives socket send timeout in seconds, < 0 in usec */
+  int connect_timeout;         /* when > 0, gives socket connect() timeout in seconds, < 0 in usec */
+  int accept_timeout;          /* when > 0, gives socket accept() timeout in seconds, < 0 in usec */
+  int socket_flags;            /* socket recv() and send() flags, e.g. set to MSG_NOSIGNAL to disable sigpipe */
+  int connect_flags;           /* connect() SOL_SOCKET sockopt flags, e.g. set to SO_DEBUG to debug socket */
+  int bind_flags;              /* bind() SOL_SOCKET sockopt flags, e.g. set to SO_REUSEADDR to enable reuse */
+  int accept_flags;            /* accept() SOL_SOCKET sockopt flags */
+  const struct Namespace *namespaces;  /* Pointer to global namespace mapping table */
+  struct Namespace *local_namespaces;  /* Local namespace mapping table */
+  struct soap_nlist *nlist;    /* namespace stack */
+  struct soap_blist *blist;    /* block allocation stack */
+  struct soap_clist *clist;    /* class instance allocation list */
+  void *alist;                 /* memory allocation list */
+  struct soap_ilist *iht[SOAP_IDHASH];
+  struct soap_plist *pht[SOAP_PTRHASH];
+  struct SOAP_ENV__Header *header;
+  struct SOAP_ENV__Fault *fault;
+  void *user;                  /* to pass user-defined data */
+  struct soap_plugin *plugins; /* linked list of plug-in data */
+  char *userid;                        /* HTTP Basic authorization userid */
+  char *passwd;                        /* HTTP Basic authorization passwd */
+  int (*fpost)(struct soap*, const char*, const char*, int, const char*, const char*, size_t);
+  int (*fget)(struct soap*);
+  int (*fposthdr)(struct soap*, const char*, const char*);
+  int (*fresponse)(struct soap*, int, size_t);
+  int (*fparse)(struct soap*);
+  int (*fparsehdr)(struct soap*, const char*, const char*);
+  int (*fresolve)(struct soap*, const char*, struct in_addr* inaddr);
+  int (*fconnect)(struct soap*, const char*, const char*, int);
+  int (*fdisconnect)(struct soap*);
+  int (*fclosesocket)(struct soap*, SOAP_SOCKET);
+  int (*fshutdownsocket)(struct soap*, SOAP_SOCKET, int);
+  int (*fopen)(struct soap*, const char*, const char*, int);
+  int (*faccept)(struct soap*, int, struct sockaddr*, int *n);
+  int (*fclose)(struct soap*);
+  int (*fsend)(struct soap*, const char*, size_t);
+  size_t (*frecv)(struct soap*, char*, size_t);
+  int (*fpoll)(struct soap*);
+  int (*fignore)(struct soap*, const char*);
+  int (*fserveloop)(struct soap*);
+  void *(*fplugin)(struct soap*, const char*);
+#ifndef WITH_LEANER
+  int (*fprepareinit)(struct soap*);
+  int (*fpreparesend)(struct soap*, const char*, size_t);
+  int (*fpreparerecv)(struct soap*, const char*, size_t);
+  void *(*fdimereadopen)(struct soap*, void*, const char*, const char*, const char*);
+  void *(*fdimewriteopen)(struct soap*, const char*, const char*, const char*);
+  void (*fdimereadclose)(struct soap*, void*);
+  void (*fdimewriteclose)(struct soap*, void*);
+  size_t (*fdimeread)(struct soap*, void*, char*, size_t);
+  int (*fdimewrite)(struct soap*, void*, const char*, size_t);
+#endif
+  int master;
+  int socket;
+#if defined(__cplusplus) && !defined(WITH_LEAN)
+  ostream *os;
+  istream *is;
+#else
+  void *os;    /* preserve alignment */
+  void *is;    /* preserve alignment */
+#endif
+#ifndef UNDER_CE
+  int sendfd;
+  int recvfd;
+#else
+  FILE *sendfd;
+  FILE *recvfd;
+#endif
+#ifdef WIN32
+  char errorstr[256];  /* buf for FormatMessage() */
+#endif
+  size_t bufidx;       /* index in soap.buf[] */
+  size_t buflen;       /* length of soap.buf[] content */
+  soap_wchar ahead;    /* parser lookahead */
+  short cdata;         /* CDATA parser state */
+  short body;
+  unsigned int level;  /* XML nesting level */
+  size_t count;                /* message length counter */
+  size_t length;       /* message length as set by HTTP header */
+#ifdef WITH_FAST
+  char *labbuf;                /* look-aside buffer */
+  size_t lablen;       /* look-aside buffer allocated length */
+  size_t labidx;       /* look-aside buffer index to available part */
+#endif
+  char buf[SOAP_BUFLEN];/* send and receive buffer */
+  char tmpbuf[1024];   /* in/output buffer for HTTP headers, simpleType values, attribute names, and DIME >=1024 bytes */
+  char msgbuf[1024];   /* output buffer for (error) messages <=1024 bytes */
+  char tag[SOAP_TAGLEN];
+  char id[SOAP_TAGLEN];
+  char href[SOAP_TAGLEN];
+  char type[SOAP_TAGLEN];
+  char arrayType[SOAP_TAGLEN];
+  char arraySize[SOAP_TAGLEN];
+  char arrayOffset[SOAP_TAGLEN];
+  short other;
+  short root;
+  short position;
+  int positions[SOAP_MAXDIMS];
+  struct soap_attribute *attributes;   /* attribute list */
+  short encoding;
+  short mustUnderstand;
+  short null;
+  short ns;
+  short part;
+  short alloced;
+  short peeked;
+  short keep_alive;
+  size_t chunksize;
+  size_t chunkbuflen;
+  char endpoint[SOAP_TAGLEN];
+  char path[SOAP_TAGLEN];
+  char host[SOAP_TAGLEN];
+  char *action;
+  char *authrealm;             /* HTTP authentication realm */
+  char *prolog;                        /* XML declaration prolog */
+  int port;
+  unsigned int max_keep_alive;
+  const char *proxy_host;      /* Proxy Server host name */
+  int proxy_port;              /* Proxy Server port (default = 8080) */
+  const char *proxy_userid;    /* Proxy Authorization user name */
+  const char *proxy_passwd;    /* Proxy Authorization password */
+  int status;                  /* -1 when request, else error code to be returned by server */
+  int error;
+  int errmode;
+  int errnum;
+  unsigned long idnum;
+  unsigned long ip;
+#ifndef WITH_LEANER
+  struct soap_dom_element *dom;
+  struct soap_dime dime;
+  struct soap_mime mime;
+#endif
+#if !defined(WITH_LEAN) || defined(SOAP_DEBUG)
+  const char *logfile[SOAP_MAXLOGS];
+  FILE *fdebug[SOAP_MAXLOGS];
+#endif
+#ifndef WITH_LEAN
+  struct soap_cookie *cookies;
+  const char *cookie_domain;
+  const char *cookie_path;
+  int cookie_max;
+#endif
+#ifdef WITH_OPENSSL
+  int (*fsslauth)(struct soap*);
+  int (*fsslverify)(int, X509_STORE_CTX*);
+  BIO *bio;
+  SSL *ssl;
+  SSL_CTX *ctx;
+  short require_server_auth;
+  short require_client_auth;
+  short rsa;                   /* when set, use RSA instead of DH */
+  const char *keyfile;
+  const char *password;
+  const char *dhfile;
+  const char *cafile;
+  const char *capath;
+  const char *randfile;
+  SSL_SESSION *session;
+  char session_host[SOAP_TAGLEN];
+  int session_port;
+#endif
+#ifdef WITH_ZLIB
+  short zlib_state;            /* SOAP_ZLIB_NONE, SOAP_ZLIB_DEFLATE, or SOAP_ZLIB_INFLATE */
+  short zlib_in;               /* SOAP_ZLIB_NONE, SOAP_ZLIB_DEFLATE, or SOAP_ZLIB_GZIP */
+  short zlib_out;              /* SOAP_ZLIB_NONE, SOAP_ZLIB_DEFLATE, or SOAP_ZLIB_GZIP */
+  z_stream d_stream;           /* decompression stream */
+  char z_buf[SOAP_BUFLEN];     /* buffer */
+  size_t z_buflen;
+  unsigned short z_level;      /* compression level to be used (0=none, 1=fast to 9=best) */
+  uLong z_crc;                 /* internal gzip crc */
+  float z_ratio_in;            /* detected compression ratio compressed_length/length of inbound message */
+  float z_ratio_out;           /* detected compression ratio compressed_length/length of outbound message */
+#endif
+/* WR[ */
+#ifdef WMW_RPM_IO
+  void *rpmreqid;
+#endif /* WMW_RPM_IO */
+/* ]WR */
+};
+
+struct soap_code_map
+{ long code;
+  const char *string;
+};
+
+/* forwarding list */
+struct soap_flist
+{ struct soap_flist *next;
+  int type;
+  void *ptr;
+  unsigned int level;
+  void (*fcopy)(struct soap*, int, int, void*, const void*, size_t);
+};
+
+/* id-ref forwarding list */
+struct soap_ilist
+{ struct soap_ilist *next;
+  int type;
+  size_t size;
+  void *link;
+  void *copy;
+  struct soap_flist *flist;
+  void *ptr;
+  unsigned int level;
+  char id[1]; /* the actual id string value flows into the allocated region below this struct */
+};
+
+struct soap_plugin
+{ struct soap_plugin *next;
+  const char *id;
+  void *data;
+  int (*fcopy)(struct soap *soap, struct soap_plugin *dst, struct soap_plugin *src);
+  void (*fdelete)(struct soap *soap, struct soap_plugin *p); /* should delete fields of plugin only and not free(p) */
+};
+
+#ifndef WITH_NONAMESPACES
+extern SOAP_NMAC struct Namespace namespaces[];
+#endif
+
+#ifndef WITH_LEAN
+# define soap_get0(soap) (((soap)->bufidx>=(soap)->buflen && soap_recv(soap)) ? EOF : (unsigned char)(soap)->buf[(soap)->bufidx])
+# define soap_get1(soap) (((soap)->bufidx>=(soap)->buflen && soap_recv(soap)) ? EOF : (unsigned char)(soap)->buf[(soap)->bufidx++])
+#else
+soap_wchar soap_get0(struct soap*);
+soap_wchar soap_get1(struct soap*);
+#endif
+
+#define soap_revget1(soap) ((soap)->bufidx--)
+#define soap_unget(soap, c) ((soap)->ahead = c)
+#define soap_register_plugin(soap, plugin) soap_register_plugin_arg(soap, plugin, NULL)
+#define soap_imode(soap, n) ((soap)->mode = (soap)->imode = (n))
+#define soap_set_imode(soap, n) ((soap)->mode = (soap)->imode |= (n))
+#define soap_clr_imode(soap, n) ((soap)->mode = (soap)->imode &= ~(n))
+#define soap_omode(soap, n) ((soap)->mode = (soap)->omode = (n))
+#define soap_set_omode(soap, n) ((soap)->mode = (soap)->omode |= (n))
+#define soap_clr_omode(soap, n) ((soap)->mode = (soap)->omode &= ~(n))
+#define soap_destroy(soap) soap_delete((soap), NULL)
+
+#ifdef HAVE_STRRCHR
+# define soap_strrchr(s, t) strrchr(s, t)
+#else
+ SOAP_FMAC1 char* SOAP_FMAC2 soap_strrchr(const char *s, int t);
+#endif
+
+#ifdef HAVE_STRTOL
+# define soap_strtol(s, t, b) strtol(s, t, b)
+#else
+ SOAP_FMAC1 long SOAP_FMAC2 soap_strtol(const char *s, char **t, int b);
+#endif
+
+#ifdef HAVE_STRTOUL
+# define soap_strtoul(s, t, b) strtoul(s, t, b)
+#else
+ SOAP_FMAC1 unsigned long SOAP_FMAC2 soap_strtoul(const char *s, char **t, int b);
+#endif
+
+#ifdef WITH_NOIDREF
+# define soap_embedded(s, p, t) (0)
+# define soap_id_lookup(s, i, p, t, n, k) (p)
+# define soap_id_forward(s, h, p, st, tt, n, k, fc) (p)
+# define soap_reference(s, a, t) (1)
+# define soap_array_reference(s, p, a, n, t) (1)
+# define soap_embed(s, p, a, n, t, pp) (0)
+# define soap_embedded_id(s, i, p, t) (i)
+# define soap_is_embedded(s, p) (0)
+# define soap_is_single(s, p) (1)
+# define soap_lookup_type(s, i) (0)
+# define soap_getindependent(s) (0)
+# define soap_putindependent(s) (0)
+# define soap_getelement(s, n) (0)
+# define soap_putelement(s, p, t, i, n) (0)
+# define soap_markelement(s, p, n) (0)
+#endif
+
+SOAP_FMAC1 void SOAP_FMAC2 soap_fault(struct soap*);
+SOAP_FMAC1 const char** SOAP_FMAC2 soap_faultcode(struct soap*);
+SOAP_FMAC1 const char** SOAP_FMAC2 soap_faultstring(struct soap*);
+SOAP_FMAC1 const char** SOAP_FMAC2 soap_faultdetail(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_serializeheader(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_putheader(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getheader(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_serializefault(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_putfault(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getfault(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_poll(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_connect_command(struct soap*, int, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_connect(struct soap*, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_bind(struct soap*, const char*, int, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_accept(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_accept(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_server_context(struct soap*, unsigned short, const char*, const char*, const char*, const char*, const char*, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_client_context(struct soap*, unsigned short, const char*, const char*, const char*, const char*, const char*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_puthttphdr(struct soap*, int status, size_t count);
+
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_get_header_attribute(struct soap*, const char*, const char*);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_decode_key(char*, size_t, const char*);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_decode_val(char*, size_t, const char*);
+
+SOAP_FMAC1 size_t SOAP_FMAC2 soap_hash(const char*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_endpoint(struct soap*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_flush_raw(struct soap*, const char*, size_t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_flush(struct soap*);
+SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_get(struct soap*);
+SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_getchar(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_tag_cmp(const char*, const char*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_fault(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_sender_fault(struct soap*, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_receiver_fault(struct soap*, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_set_sender_error(struct soap*, const char*, const char*, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_set_receiver_error(struct soap*, const char*, const char*, int);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_send_raw(struct soap*, const char*, size_t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_recv_raw(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_recv(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_send(struct soap*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_send2(struct soap*, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_send3(struct soap*, const char*, const char*, const char*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_pututf8(struct soap*, unsigned long);
+SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_getutf8(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_putbase64(struct soap*, const unsigned char*, int);
+SOAP_FMAC1 unsigned char* SOAP_FMAC2 soap_getbase64(struct soap*, int*, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_puthex(struct soap*, const unsigned char*, int);
+SOAP_FMAC1 unsigned char* SOAP_FMAC2 soap_gethex(struct soap*, int*);
+
+
+#ifndef WITH_NOIDREF
+SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_lookup_id(struct soap*, void *p, int t, struct soap_plist**);
+SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_lookup(struct soap*, const void *p, int t, struct soap_plist**);
+SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_enter(struct soap*, const void *p, const struct soap_array *a, int n, int t, struct soap_plist**);
+SOAP_FMAC1 int SOAP_FMAC2 soap_array_pointer_lookup(struct soap*, const void *p, const struct soap_array *a, int n, int t, struct soap_plist**);
+SOAP_FMAC1 int SOAP_FMAC2 soap_embed(struct soap *soap, const void *p, const struct soap_array *a, int n, const char *tag, int type);
+SOAP_FMAC1 struct soap_ilist* SOAP_FMAC2 soap_lookup(struct soap*, const char*);
+SOAP_FMAC1 struct soap_ilist* SOAP_FMAC2 soap_enter(struct soap*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_resolve(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_embedded(struct soap*, const void *p, int t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_reference(struct soap*, const void *p, int t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_array_reference(struct soap*, const void *p, const struct soap_array *a, int n, int t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_embedded_id(struct soap*, int id, const void *p, int t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_is_embedded(struct soap*, struct soap_plist*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_is_single(struct soap*, struct soap_plist*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_embedded(struct soap*, struct soap_plist*);
+#endif
+
+SOAP_FMAC1 void SOAP_FMAC2 soap_begin_count(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_begin_send(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_end_send(struct soap*);
+
+SOAP_FMAC1 const struct soap_code_map* SOAP_FMAC2 soap_code(const struct soap_code_map*, const char *str);
+SOAP_FMAC1 long SOAP_FMAC2 soap_int_code(const struct soap_code_map*, const char *str, long other);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_str_code(const struct soap_code_map*, long code);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_getline(struct soap*, char*, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_begin_recv(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_end_recv(struct soap*);
+
+SOAP_FMAC1 void* SOAP_FMAC2 soap_malloc(struct soap*, size_t);
+SOAP_FMAC1 void SOAP_FMAC2 soap_dealloc(struct soap*, void*);
+SOAP_FMAC1 struct soap_clist * SOAP_FMAC2 soap_link(struct soap*, void*, int, int, void (*fdelete)(struct soap_clist*));
+SOAP_FMAC1 void SOAP_FMAC2 soap_unlink(struct soap*, const void*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_free(struct soap*);
+
+#ifndef WITH_NOIDREF
+SOAP_FMAC1 int SOAP_FMAC2 soap_lookup_type(struct soap*, const char *id);
+SOAP_FMAC1 void* SOAP_FMAC2 soap_id_lookup(struct soap*, const char *id, void **p, int t, size_t n, unsigned int k);
+SOAP_FMAC1 void* SOAP_FMAC2 soap_id_forward(struct soap*, const char *id, void *p, int st, int tt, size_t n, unsigned int k, void(*fcopy)(struct soap*, int, int, void*, const void*, size_t));
+#endif
+SOAP_FMAC1 void* SOAP_FMAC2 soap_id_enter(struct soap*, const char *id, void *p, int t, size_t n, unsigned int k, const char *type, const char *arrayType, void *(*finstantiate)(struct soap*, int, const char*, const char*, size_t*));
+SOAP_FMAC1 void SOAP_FMAC2 soap_fcopy(struct soap *soap, int st, int tt, void *p, const void *q, size_t n);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_size(const int *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getoffsets(const char *, const int *, int *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getsize(const char *, const char *, int *);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getsizes(const char *, int *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getposition(const char *, int *);
+
+SOAP_FMAC1 char* SOAP_FMAC2 soap_putsize(struct soap*, const char *, int);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_putsizesoffsets(struct soap*, const char *, const int *, const int *, int);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_putsizes(struct soap*, const char *, const int *, int);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_putoffset(struct soap*, int);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_putoffsets(struct soap*, const int *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_closesock(struct soap*);
+
+SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_new(void);
+SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_new1(soap_mode);
+SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_new2(soap_mode, soap_mode);
+SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_copy(struct soap*);
+SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_copy_context(struct soap*,struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_init(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_init1(struct soap*, soap_mode);
+SOAP_FMAC1 void SOAP_FMAC2 soap_init2(struct soap*, soap_mode, soap_mode);
+SOAP_FMAC1 void SOAP_FMAC2 soap_done(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_cleanup(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_begin(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_end(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_delete(struct soap*, void*);
+
+#ifdef SOAP_DEBUG
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_recv_logfile(struct soap*, const char*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_sent_logfile(struct soap*, const char*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_test_logfile(struct soap*, const char*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_close_logfiles(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_open_logfile(struct soap*, int);
+#endif
+
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_value(struct soap*);
+
+SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_advance(struct soap*);
+SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_skip(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_match_tag(struct soap*, const char*, const char *);
+SOAP_FMAC1 int SOAP_FMAC2 soap_match_array(struct soap*, const char*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_element(struct soap*, const char*, int, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_begin_out(struct soap*, const char *tag, int id, const char *type);
+SOAP_FMAC1 int SOAP_FMAC2 soap_array_begin_out(struct soap*, const char *tag, int id, const char *type, const char *offset);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_ref(struct soap*, const char *tag, int id, int href);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_href(struct soap*, const char *tag, int id, const char *ref, const char *val);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_null(struct soap*, const char *tag, int id, const char *type);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_id(struct soap*, const char *tag, int id, const void *p, const struct soap_array *a, int d, const char *type, int n);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_result(struct soap*, const char *tag);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_end_out(struct soap*, const char *tag);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_start_end_out(struct soap*, const char *tag);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_attribute(struct soap*, const char*, const char*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_begin_in(struct soap*, const char *tag, int nillable);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_end_in(struct soap*, const char *tag);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_peek_element(struct soap*);
+
+SOAP_FMAC1 void SOAP_FMAC2 soap_retry(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_revert(struct soap*);
+
+SOAP_FMAC1 char* SOAP_FMAC2 soap_strdup(struct soap*, const char*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_string_out(struct soap*, const char *s, int flag);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_string_in(struct soap*, int, long, long);
+
+#ifndef WITH_LEANER
+SOAP_FMAC1 int SOAP_FMAC2 soap_wstring_out(struct soap*, const wchar_t *s, int flag);
+SOAP_FMAC1 wchar_t* SOAP_FMAC2 soap_wstring_in(struct soap*, int, long, long);
+#endif
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_match_namespace(struct soap*, const char *, const char*, int n1, int n2);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_set_namespaces(struct soap*, struct Namespace*);
+
+SOAP_FMAC1 void SOAP_FMAC2 soap_pop_namespace(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_push_namespace(struct soap*, const char *,const char *);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_new_block(struct soap*);
+SOAP_FMAC1 void* SOAP_FMAC2 soap_push_block(struct soap*, size_t);
+SOAP_FMAC1 void SOAP_FMAC2 soap_pop_block(struct soap*);
+SOAP_FMAC1 size_t SOAP_FMAC2 soap_size_block(struct soap*, size_t);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_first_block(struct soap*);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_next_block(struct soap*);
+SOAP_FMAC1 size_t SOAP_FMAC2 soap_block_size(struct soap*);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_save_block(struct soap*, char*, int);
+SOAP_FMAC1 void SOAP_FMAC2 soap_end_block(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_begin_out(struct soap*);
+SOAP_FMAC1 int soap_envelope_end_out(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_begin_in(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_end_in(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_body_begin_out(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_body_end_out(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_body_begin_in(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_body_end_in(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_recv_header(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_response(struct soap*, int);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_send_empty_response(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_recv_empty_response(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_send_fault(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_recv_fault(struct soap*);
+
+SOAP_FMAC1 void SOAP_FMAC2 soap_print_fault(struct soap*, FILE*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_print_fault_location(struct soap*, FILE*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2byte(struct soap*, const char*, char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2short(struct soap*, const char*, short*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2int(struct soap*, const char*, int*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2long(struct soap*, const char*, long*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2LONG64(struct soap*, const char*, LONG64*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2float(struct soap*, const char*, float*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2double(struct soap*, const char*, double*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedByte(struct soap*, const char*, unsigned char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedShort(struct soap*, const char*, unsigned short*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedInt(struct soap*, const char*, unsigned int*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedLong(struct soap*, const char*, unsigned long*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2ULONG64(struct soap*, const char*, ULONG64*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2string(struct soap*, const char*, char**);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2QName(struct soap*, const char*, char**);
+
+#ifndef WITH_LEAN
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2dateTime(struct soap*, const char*, time_t*);
+#endif
+
+SOAP_FMAC1 char* SOAP_FMAC2 soap_s2base64(struct soap*, const unsigned char*, char*, size_t);
+
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_byte2s(struct soap*, char);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_short2s(struct soap*, short);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_int2s(struct soap*, int);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_long2s(struct soap*, long);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_LONG642s(struct soap*, LONG64);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_float2s(struct soap*, float);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_double2s(struct soap*, double);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedByte2s(struct soap*, unsigned char);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedShort2s(struct soap*, unsigned short);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedInt2s(struct soap*, unsigned int);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedLong2s(struct soap*, unsigned long);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_ULONG642s(struct soap*, ULONG64);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_QName2s(struct soap*, const char*);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_base642s(struct soap*, const char*, char*, size_t, size_t*);
+
+#ifndef WITH_LEAN
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_dateTime2s(struct soap*, time_t);
+#endif
+
+
+SOAP_FMAC1 int* SOAP_FMAC2 soap_inint(struct soap*, const char *tag, int *p, const char *, int);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_inbyte(struct soap*, const char *tag, char *p, const char *, int);
+SOAP_FMAC1 long* SOAP_FMAC2 soap_inlong(struct soap*, const char *tag, long *p, const char *, int);
+SOAP_FMAC1 LONG64* SOAP_FMAC2 soap_inLONG64(struct soap*, const char *tag, LONG64 *p, const char *, int);
+SOAP_FMAC1 short* SOAP_FMAC2 soap_inshort(struct soap*, const char *tag, short *p, const char *, int);
+SOAP_FMAC1 float* SOAP_FMAC2 soap_infloat(struct soap*, const char *tag, float *p, const char *, int);
+SOAP_FMAC1 double* SOAP_FMAC2 soap_indouble(struct soap*, const char *tag, double *p, const char *, int);
+SOAP_FMAC1 unsigned char* SOAP_FMAC2 soap_inunsignedByte(struct soap*, const char *tag, unsigned char *p, const char *, int);
+SOAP_FMAC1 unsigned short* SOAP_FMAC2 soap_inunsignedShort(struct soap*, const char *tag, unsigned short *p, const char *, int);
+SOAP_FMAC1 unsigned int* SOAP_FMAC2 soap_inunsignedInt(struct soap*, const char *tag, unsigned int *p, const char *, int);
+SOAP_FMAC1 unsigned long* SOAP_FMAC2 soap_inunsignedLong(struct soap*, const char *tag, unsigned long *p, const char *, int);
+SOAP_FMAC1 ULONG64* SOAP_FMAC2 soap_inULONG64(struct soap*, const char *tag, ULONG64 *p, const char *, int);
+SOAP_FMAC1 char** SOAP_FMAC2 soap_instring(struct soap*, const char *tag, char **p, const char *, int, int, long, long);
+SOAP_FMAC1 char** SOAP_FMAC2 soap_inliteral(struct soap*, const char *tag, char **p);
+
+#ifndef WITH_LEAN
+SOAP_FMAC1 time_t* SOAP_FMAC2 soap_indateTime(struct soap*, const char *tag, time_t *p, const char *, int);
+#endif
+
+#ifndef WITH_LEANER
+SOAP_FMAC1 wchar_t** SOAP_FMAC2 soap_inwstring(struct soap*, const char *tag, wchar_t **p, const char *, int, long, long);
+SOAP_FMAC1 wchar_t** SOAP_FMAC2 soap_inwliteral(struct soap*, const char *tag, wchar_t **p);
+#endif
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_outbyte(struct soap*, const char *tag, int id, const char *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outshort(struct soap*, const char *tag, int id, const short *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outint(struct soap*, const char *tag, int id, const int *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outlong(struct soap*, const char *tag, int id, const long *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outLONG64(struct soap*, const char *tag, int id, const LONG64 *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outfloat(struct soap*, const char *tag, int id, const float *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outdouble(struct soap*, const char *tag, int id, const double *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedByte(struct soap*, const char *tag, int id, const unsigned char *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedShort(struct soap*, const char *tag, int id, const unsigned short *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedInt(struct soap*, const char *tag, int id, const unsigned int *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedLong(struct soap*, const char *tag, int id, const unsigned long *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outULONG64(struct soap*, const char *tag, int id, const ULONG64 *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outstring(struct soap*, const char *tag, int id, char *const*p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outliteral(struct soap*, const char *tag, char *const*p);
+
+#ifndef WITH_LEAN
+SOAP_FMAC1 int SOAP_FMAC2 soap_outdateTime(struct soap*, const char *tag, int id, const time_t *p, const char *, int);
+#endif
+
+#ifndef WITH_LEANER
+SOAP_FMAC1 int SOAP_FMAC2 soap_outwstring(struct soap*, const char *tag, int id, wchar_t *const*p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outwliteral(struct soap*, const char *tag, wchar_t *const*p);
+#endif
+
+#ifndef WITH_LEANER
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_dime(struct soap *, const char*, int, const void*, const struct soap_array*, const char*, const char*, const char*, int, const char*, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_move(struct soap*, long);
+SOAP_FMAC1 size_t SOAP_FMAC2 soap_tell(struct soap*);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_dime_option(struct soap*, unsigned short, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getdimehdr(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getdime(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_putdimehdr(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_putdime(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getmimehdr(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getmime(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_putmimehdr(struct soap*, struct soap_multipart*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_putmime(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_dime(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_mime(struct soap*, const char *boundary, const char *start);
+SOAP_FMAC1 void SOAP_FMAC2 soap_clr_dime(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_clr_mime(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_set_dime_attachment(struct soap*, char *ptr, size_t size, const char *type, const char *id, unsigned short optype, const char *option);
+SOAP_FMAC1 int SOAP_FMAC2 soap_set_mime_attachment(struct soap*, char *ptr, size_t size, enum soap_mime_encoding encoding, const char *type, const char *id, const char *location, const char *description);
+SOAP_FMAC1 struct soap_multipart* SOAP_FMAC2 soap_next_multipart(struct soap_multipart*);
+#endif
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_register_plugin_arg(struct soap*, int (*fcreate)(struct soap*, struct soap_plugin*, void*), void*);
+SOAP_FMAC1 void* SOAP_FMAC2 soap_lookup_plugin(struct soap*, const char*);
+
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_attr_value(struct soap *soap, const char *name, int flag);
+SOAP_FMAC1 int SOAP_FMAC2 soap_set_attr(struct soap *soap, const char *name, const char *value);
+SOAP_FMAC1 void SOAP_FMAC2 soap_clr_attr(struct soap *soap);
+
+#ifdef WITH_COOKIES
+SOAP_FMAC1 size_t SOAP_FMAC2 soap_encode_cookie(const char*, char*, size_t);
+SOAP_FMAC1 extern struct soap_cookie* SOAP_FMAC2 soap_set_cookie(struct soap*, const char*, const char*, const char*, const char*);
+SOAP_FMAC1 extern struct soap_cookie* SOAP_FMAC2 soap_cookie(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern char* SOAP_FMAC2 soap_cookie_value(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern long SOAP_FMAC2 soap_cookie_expire(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern int SOAP_FMAC2 soap_set_cookie_expire(struct soap*, const char*, long, const char*, const char*);
+SOAP_FMAC1 extern int SOAP_FMAC2 soap_set_cookie_session(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern int SOAP_FMAC2 soap_clr_cookie_session(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern void SOAP_FMAC2 soap_clr_cookie(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern int SOAP_FMAC2 soap_getenv_cookies(struct soap*);
+SOAP_FMAC1 extern struct soap_cookie* SOAP_FMAC2 soap_copy_cookies(struct soap*);
+SOAP_FMAC1 extern void SOAP_FMAC2 soap_free_cookies(struct soap*);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/org.glite.security.gsoap-plugin/src/stdsoap2_2.7.6b.c b/org.glite.security.gsoap-plugin/src/stdsoap2_2.7.6b.c
new file mode 100644 (file)
index 0000000..6b7160b
--- /dev/null
@@ -0,0 +1,13101 @@
+/*
+
+stdsoap2.c[pp] 2.7.6b
+
+gSOAP runtime
+
+gSOAP XML Web services tools
+Copyright (C) 2000-2005, Robert van Engelen, Genivia Inc., All Rights Reserved.
+This part of the software is released under one of the following licenses:
+GPL, the gSOAP public license, or Genivia's license for commercial use.
+--------------------------------------------------------------------------------
+Contributors:
+
+Wind River Systems, Inc., for the following additions:
+  - vxWorks compatible
+--------------------------------------------------------------------------------
+gSOAP public license.
+
+The contents of this file are subject to the gSOAP Public License Version 1.3
+(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.cs.fsu.edu/~engelen/soaplicense.html
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the License.
+
+The Initial Developer of the Original Code is Robert A. van Engelen.
+Copyright (C) 2000-2005, Robert van Engelen, Genivia Inc., All Rights Reserved.
+--------------------------------------------------------------------------------
+GPL license.
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place, Suite 330, Boston, MA 02111-1307 USA
+
+Author contact information:
+engelen@genivia.com / engelen@acm.org
+--------------------------------------------------------------------------------
+A commercial use license is available from Genivia, Inc., contact@genivia.com
+--------------------------------------------------------------------------------
+
+Installation note:
+
+Win32 build needs winsock.dll (Visual C++ "wsock32.lib")
+To do this in Visual C++ 6.0, go to "Project", "settings", select the "Link"
+tab (the project file needs to be selected in the file view) and add
+"wsock32.lib" to the "Object/library modules" entry
+
+On Mac OS X with gcc (GCC) 3.1 20020420 (prerelease) you MUST compile with
+-fstack_check when using -O2 because gcc 3.1 has a bug that smashes the stack
+when locally allocated data exceeds 64K.
+
+*/
+
+#include "stdsoap2.h"
+
+#ifdef __cplusplus
+SOAP_SOURCE_STAMP("@(#) stdsoap2.cpp ver 2.7.6b 2005-08-26 12:00:00 GMT")
+extern "C" {
+#else
+SOAP_SOURCE_STAMP("@(#) stdsoap2.c ver 2.7.6b 2005-08-26 12:00:00 GMT")
+#endif
+
+/* 8bit character representing unknown/nonrepresentable character data (e.g. not supported by current locale with multibyte support enabled) */
+#ifndef SOAP_UNKNOWN_CHAR
+#define SOAP_UNKNOWN_CHAR (127)
+#endif
+
+/*      EOF=-1 */
+#define SOAP_LT (soap_wchar)(-2) /* XML character '<' */
+#define SOAP_TT (soap_wchar)(-3) /* XML character '</' */
+#define SOAP_GT (soap_wchar)(-4) /* XML character '>' */
+#define SOAP_QT (soap_wchar)(-5) /* XML character '"' */
+#define SOAP_AP (soap_wchar)(-6) /* XML character ''' */
+
+#define SOAP_BOM (soap_wchar)(0xFEFF) /* UTF BOM is Unicode FEFF */
+
+#define soap_blank(c)          ((c) >= 0 && (c) <= 32)
+#define soap_notblank(c)       ((c) > 32)
+#define soap_hash_ptr(p)       (((unsigned long)(p) >> 3) & (SOAP_PTRHASH - 1))
+
+static int soap_isxdigit(int);
+static soap_wchar soap_char(struct soap*);
+
+#ifndef WITH_NOIDREF
+static void soap_update_ptrs(struct soap*, char*, char*, long);
+static int soap_has_copies(struct soap*, const char*, const char*);
+static void soap_init_iht(struct soap*);
+static void soap_free_iht(struct soap*);
+static void soap_init_pht(struct soap*);
+static void soap_free_pht(struct soap*);
+#endif
+
+#ifdef SOAP_DEBUG
+static void soap_init_logs(struct soap*);
+static void soap_close_logfile(struct soap*, int);
+static void soap_set_logfile(struct soap*, int, const char*);
+static void soap_free_mht(struct soap*);
+static void soap_track_unlink(struct soap*, const void*);
+#endif
+
+static int soap_set_error(struct soap*, const char*, const char*, const char*, const char*, int);
+static int soap_copy_fault(struct soap*, const char*, const char*, const char*, const char*);
+static int soap_getattrval(struct soap*, char*, size_t, soap_wchar);
+static void *fplugin(struct soap*, const char*);
+
+#ifndef WITH_LEAN
+static const char *soap_set_validation_fault(struct soap*, const char*, const char*);
+static int soap_isnumeric(struct soap*, const char*);
+static time_t soap_timegm(struct tm*);
+static struct soap_nlist *soap_lookup_ns(struct soap *soap, const char *tag, size_t n);
+static struct soap_nlist *soap_push_ns(struct soap *soap, const char *id, const char *ns, short utilized);
+static void soap_pop_ns(struct soap *soap);
+static void soap_utilize_ns(struct soap *soap, const char *tag, size_t n);
+#endif
+
+#ifndef WITH_LEANER
+static struct soap_multipart *soap_new_multipart(struct soap*, struct soap_multipart**, struct soap_multipart**, char*, size_t);
+static int soap_putdimefield(struct soap*, const char*, size_t);
+static char *soap_getdimefield(struct soap*, size_t);
+static void soap_select_mime_boundary(struct soap*);
+static int soap_valid_mime_boundary(struct soap*);
+static int soap_match_cid(const char*, const char*);
+static void soap_resolve_attachment(struct soap*, struct soap_multipart*);
+#endif
+
+#ifdef WITH_GZIP
+static int soap_getgziphdr(struct soap*);
+#endif
+
+#ifdef WITH_OPENSSL
+static void ssl_init();
+static int ssl_auth_init(struct soap*);
+static int ssl_verify_callback(int, X509_STORE_CTX*);
+static int ssl_password(char*, int, int, void *);
+static const char *ssl_error(struct soap*, int);
+/* This callback is included for future references. It should not be deleted
+static DH *ssl_tmp_dh(SSL*, int, int);
+*/
+#endif
+
+#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
+static const char *soap_decode(char*, size_t, const char*, const char*);
+#endif
+
+#ifndef WITH_NOHTTP
+static soap_wchar soap_getchunkchar(struct soap*);
+static const char *http_error(struct soap*, int);
+static int http_post(struct soap*, const char*, const char*, int, const char*, const char*, size_t);
+static int http_get(struct soap*);
+static int http_send_header(struct soap*, const char*);
+static int http_post_header(struct soap*, const char*, const char*);
+static int http_response(struct soap*, int, size_t);
+static int http_parse(struct soap*);
+static int http_parse_header(struct soap*, const char*, const char*);
+#endif
+
+#ifndef WITH_NOIO
+static int fsend(struct soap*, const char*, size_t);
+static size_t frecv(struct soap*, char*, size_t);
+static int tcp_init(struct soap*);
+static const char *tcp_error(struct soap*);
+#ifndef WITH_IPV6
+static int tcp_gethost(struct soap*, const char *addr, struct in_addr *inaddr);
+#endif
+static int tcp_connect(struct soap*, const char *endpoint, const char *host, int port);
+static int tcp_accept(struct soap*, int, struct sockaddr*, int*);
+static int tcp_disconnect(struct soap*);
+static int tcp_closesocket(struct soap*, SOAP_SOCKET);
+static int tcp_shutdownsocket(struct soap*, SOAP_SOCKET, int);
+static const char *soap_strerror(struct soap*);
+#endif
+
+#ifdef VXWORKS
+static int vx_nonblocking = TRUE; /* ioctl argument */
+#endif
+
+#if defined(PALM) && !defined(PALM_2)
+unsigned short errno;
+#endif
+
+#ifndef PALM_1
+static const char soap_env1[42] = "http://schemas.xmlsoap.org/soap/envelope/";
+static const char soap_enc1[42] = "http://schemas.xmlsoap.org/soap/encoding/";
+static const char soap_env2[40] = "http://www.w3.org/2003/05/soap-envelope";
+static const char soap_enc2[40] = "http://www.w3.org/2003/05/soap-encoding";
+static const char soap_rpc[35] = "http://www.w3.org/2003/05/soap-rpc";
+#endif
+
+#ifndef PALM_1
+const struct soap_double_nan soap_double_nan = {0xFFFFFFFF, 0xFFFFFFFF};
+static const char soap_base64o[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+static const char soap_base64i[81] = "\76XXX\77\64\65\66\67\70\71\72\73\74\75XXXXXXX\00\01\02\03\04\05\06\07\10\11\12\13\14\15\16\17\20\21\22\23\24\25\26\27\30\31XXXXXX\32\33\34\35\36\37\40\41\42\43\44\45\46\47\50\51\52\53\54\55\56\57\60\61\62\63";
+#endif
+
+#ifndef WITH_LEAN
+static const char soap_indent[11] = "\n\t\t\t\t\t\t\t\t\t";
+/* Alternative indentation form for SOAP_XML_INDENT:
+static const char soap_indent[21] = "\n                   ";
+*/
+#endif
+
+static const char soap_padding[3] = "\0\0";
+#define SOAP_STR_PADDING (soap_padding)
+#define SOAP_STR_EOS (soap_padding)
+#define SOAP_NON_NULL (soap_padding)
+
+#ifndef WITH_LEAN
+static const struct soap_code_map html_entity_codes[] = /* entities for XHTML parsing */
+{ { 160, "nbsp" },
+  { 161, "iexcl" },
+  { 162, "cent" },
+  { 163, "pound" },
+  { 164, "curren" },
+  { 165, "yen" },
+  { 166, "brvbar" },
+  { 167, "sect" },
+  { 168, "uml" },
+  { 169, "copy" },
+  { 170, "ordf" },
+  { 171, "laquo" },
+  { 172, "not" },
+  { 173, "shy" },
+  { 174, "reg" },
+  { 175, "macr" },
+  { 176, "deg" },
+  { 177, "plusmn" },
+  { 178, "sup2" },
+  { 179, "sup3" },
+  { 180, "acute" },
+  { 181, "micro" },
+  { 182, "para" },
+  { 183, "middot" },
+  { 184, "cedil" },
+  { 185, "sup1" },
+  { 186, "ordm" },
+  { 187, "raquo" },
+  { 188, "frac14" },
+  { 189, "frac12" },
+  { 190, "frac34" },
+  { 191, "iquest" },
+  { 192, "Agrave" },
+  { 193, "Aacute" },
+  { 194, "Acirc" },
+  { 195, "Atilde" },
+  { 196, "Auml" },
+  { 197, "Aring" },
+  { 198, "AElig" },
+  { 199, "Ccedil" },
+  { 200, "Egrave" },
+  { 201, "Eacute" },
+  { 202, "Ecirc" },
+  { 203, "Euml" },
+  { 204, "Igrave" },
+  { 205, "Iacute" },
+  { 206, "Icirc" },
+  { 207, "Iuml" },
+  { 208, "ETH" },
+  { 209, "Ntilde" },
+  { 210, "Ograve" },
+  { 211, "Oacute" },
+  { 212, "Ocirc" },
+  { 213, "Otilde" },
+  { 214, "Ouml" },
+  { 215, "times" },
+  { 216, "Oslash" },
+  { 217, "Ugrave" },
+  { 218, "Uacute" },
+  { 219, "Ucirc" },
+  { 220, "Uuml" },
+  { 221, "Yacute" },
+  { 222, "THORN" },
+  { 223, "szlig" },
+  { 224, "agrave" },
+  { 225, "aacute" },
+  { 226, "acirc" },
+  { 227, "atilde" },
+  { 228, "auml" },
+  { 229, "aring" },
+  { 230, "aelig" },
+  { 231, "ccedil" },
+  { 232, "egrave" },
+  { 233, "eacute" },
+  { 234, "ecirc" },
+  { 235, "euml" },
+  { 236, "igrave" },
+  { 237, "iacute" },
+  { 238, "icirc" },
+  { 239, "iuml" },
+  { 240, "eth" },
+  { 241, "ntilde" },
+  { 242, "ograve" },
+  { 243, "oacute" },
+  { 244, "ocirc" },
+  { 245, "otilde" },
+  { 246, "ouml" },
+  { 247, "divide" },
+  { 248, "oslash" },
+  { 249, "ugrave" },
+  { 250, "uacute" },
+  { 251, "ucirc" },
+  { 252, "uuml" },
+  { 253, "yacute" },
+  { 254, "thorn" },
+  { 255, "yuml" },
+  {   0, NULL }
+};
+#endif
+
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+static const struct soap_code_map h_error_codes[] =
+{
+#ifdef HOST_NOT_FOUND   
+  { HOST_NOT_FOUND, "Host not found" },
+#endif
+#ifdef TRY_AGAIN
+  { TRY_AGAIN, "Try Again" },
+#endif
+#ifdef NO_RECOVERY  
+  { NO_RECOVERY, "No Recovery" },
+#endif
+#ifdef NO_DATA
+  { NO_DATA, "No Data" },
+#endif
+#ifdef NO_ADDRESS
+  { NO_ADDRESS, "No Address" },
+#endif
+  { 0, NULL }
+};
+#endif
+#endif
+
+#ifndef WITH_NOHTTP
+#ifndef WITH_LEAN
+static const struct soap_code_map h_http_error_codes[] =
+{ { 201, "Created" },
+  { 202, "Accepted" },
+  { 203, "Non-Authoritative Information" },
+  { 204, "No Content" },
+  { 205, "Reset Content" },
+  { 206, "Partial Content" },
+  { 300, "Multiple Choices" },
+  { 301, "Moved Permanently" },
+  { 302, "Found" },
+  { 303, "See Other" },
+  { 304, "Not Modified" },
+  { 305, "Use Proxy" },
+  { 307, "Temporary Redirect" },
+  { 400, "Bad Request" },
+  { 401, "Unauthorized" },
+  { 402, "Payment Required" },
+  { 403, "Forbidden" },
+  { 404, "Not Found" },
+  { 405, "Method Not Allowed" },
+  { 406, "Not Acceptable" },
+  { 407, "Proxy Authentication Required" },
+  { 408, "Request Time-out" },
+  { 409, "Conflict" },
+  { 410, "Gone" },
+  { 411, "Length Required" },
+  { 412, "Precondition Failed" },
+  { 413, "Request Entity Too Large" },
+  { 414, "Request-URI Too Large" },
+  { 415, "Unsupported Media Type" },
+  { 416, "Requested range not satisfiable" },
+  { 417, "Expectation Failed" },
+  { 500, "Internal Server Error" },
+  { 501, "Not Implemented" },
+  { 502, "Bad Gateway" },
+  { 503, "Service Unavailable" },
+  { 504, "Gateway Time-out" },
+  { 505, "HTTP Version not supported" },
+  {   0, NULL }
+};
+#endif
+#endif
+
+#ifdef WITH_OPENSSL
+static const struct soap_code_map h_ssl_error_codes[] =
+{
+#define _SSL_ERROR(e) { e, #e }
+  _SSL_ERROR(SSL_ERROR_SSL),
+  _SSL_ERROR(SSL_ERROR_ZERO_RETURN),
+  _SSL_ERROR(SSL_ERROR_WANT_READ),
+  _SSL_ERROR(SSL_ERROR_WANT_WRITE),
+  _SSL_ERROR(SSL_ERROR_WANT_CONNECT),
+  _SSL_ERROR(SSL_ERROR_WANT_X509_LOOKUP),
+  _SSL_ERROR(SSL_ERROR_SYSCALL),
+  { 0, NULL }
+};
+#endif
+
+#ifndef WITH_LEANER
+static const struct soap_code_map mime_codes[] =
+{ { SOAP_MIME_7BIT,            "7bit" },
+  { SOAP_MIME_8BIT,            "8bit" },
+  { SOAP_MIME_BINARY,          "binary" },
+  { SOAP_MIME_QUOTED_PRINTABLE, "quoted-printable" },
+  { SOAP_MIME_BASE64,          "base64" },
+  { SOAP_MIME_IETF_TOKEN,      "ietf-token" },
+  { SOAP_MIME_X_TOKEN,         "x-token" },
+  { 0,                         NULL }
+};
+#endif
+
+#ifdef WIN32
+static int tcp_done = 0;
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+fsend(struct soap *soap, const char *s, size_t n)
+{ register int nwritten;
+#if defined(__cplusplus) && !defined(WITH_LEAN)
+  if (soap->os)
+  { soap->os->write(s, n);
+    if (soap->os->good())
+      return SOAP_OK;
+    return SOAP_EOF;
+  }
+#endif
+  while (n)
+  { if (soap_valid_socket(soap->socket))
+    { 
+#ifndef WITH_LEAN
+      if (soap->send_timeout)
+      { struct timeval timeout;
+        fd_set fd;
+        if (soap->send_timeout > 0)
+        { timeout.tv_sec = soap->send_timeout;
+          timeout.tv_usec = 0;
+        }
+        else
+        { timeout.tv_sec = -soap->send_timeout/1000000;
+          timeout.tv_usec = -soap->send_timeout%1000000;
+        }
+        FD_ZERO(&fd);
+        FD_SET((SOAP_SOCKET)soap->socket, &fd);
+        for (;;)
+        { register int r = select((SOAP_SOCKET)(soap->socket + 1), NULL, &fd, &fd, &timeout);
+          if (r > 0)
+            break;
+          if (!r)
+          { soap->errnum = 0;
+            return SOAP_EOF;
+          }
+          if (soap_socket_errno != SOAP_EINTR && soap_socket_errno != SOAP_EAGAIN)
+          { soap->errnum = soap_socket_errno;
+            return SOAP_EOF;
+          }
+        }
+      }
+#endif
+#ifdef WITH_OPENSSL
+      if (soap->ssl)
+        nwritten = SSL_write(soap->ssl, s, n);
+      else if (soap->bio)
+        nwritten = BIO_write(soap->bio, s, n);
+      else
+#endif
+#ifdef WITH_UDP
+      if ((soap->omode & SOAP_IO_UDP))
+      { if (soap->peerlen)
+         nwritten = sendto((SOAP_SOCKET)soap->socket, s, n, soap->socket_flags, (struct sockaddr*)&soap->peer, soap->peerlen);
+        else
+         nwritten = send((SOAP_SOCKET)soap->socket, s, n, soap->socket_flags);
+       /* retry and back-off algorithm */
+       /* TODO: this is not very clear from specs so verify and limit conditions under which we should loop (e.g. ENOBUFS) */
+       if (nwritten < 0)
+        { struct timeval timeout;
+          fd_set fd;
+         int udp_repeat;
+         int udp_delay;
+          if ((soap->connect_flags & SO_BROADCAST))
+           udp_repeat = 3; /* SOAP-over-UDP MULTICAST_UDP_REPEAT - 1 */
+          else
+           udp_repeat = 1; /* SOAP-over-UDP UNICAST_UDP_REPEAT - 1 */
+         udp_delay = (soap_random % 201) + 50; /* UDP_MIN_DELAY .. UDP_MAX_DELAY */
+         do
+          { timeout.tv_sec = 0;
+            timeout.tv_usec = 1000 * udp_delay; /* ms */
+            FD_ZERO(&fd);
+            FD_SET((SOAP_SOCKET)soap->socket, &fd);
+            select((SOAP_SOCKET)(soap->socket + 1), NULL, NULL, &fd, &timeout);
+           if (soap->peerlen)
+             nwritten = sendto((SOAP_SOCKET)soap->socket, s, n, soap->socket_flags, (struct sockaddr*)&soap->peer, soap->peerlen);
+            else
+             nwritten = send((SOAP_SOCKET)soap->socket, s, n, soap->socket_flags);
+           udp_delay <<= 1;
+           if (udp_delay > 500) /* UDP_UPPER_DELAY */
+             udp_delay = 500;
+         }
+         while (nwritten < 0 && --udp_repeat > 0);
+       }
+      }
+      else
+#endif
+#ifndef PALM
+        nwritten = send((SOAP_SOCKET)soap->socket, s, n, soap->socket_flags);
+#else
+        nwritten = send((SOAP_SOCKET)soap->socket, (void*)s, n, soap->socket_flags);
+#endif
+      if (nwritten <= 0)
+      {
+#ifdef WITH_OPENSSL
+       int err;
+        if (soap->ssl && (err = SSL_get_error(soap->ssl, nwritten)) != SSL_ERROR_NONE && err != SSL_ERROR_WANT_READ && err != SSL_ERROR_WANT_WRITE)
+          return SOAP_EOF;
+#endif
+        if (soap_socket_errno != SOAP_EINTR && soap_socket_errno != SOAP_EWOULDBLOCK && soap_socket_errno != SOAP_EAGAIN)
+        { soap->errnum = soap_socket_errno;
+          return SOAP_EOF;
+        }
+        nwritten = 0; /* and call write() again */
+      }
+    }
+    else
+    {
+#ifdef WITH_FASTCGI
+      nwritten = fwrite((void*)s, 1, n, stdout);
+      fflush(stdout);
+#else
+#ifdef UNDER_CE
+      nwritten = fwrite(s, 1, n, soap->sendfd);
+#else
+#ifdef VXWORKS
+#ifdef WMW_RPM_IO
+      if (soap->rpmreqid)
+        nwritten = (httpBlockPut(soap->rpmreqid, s, n) == 0) ? n : -1; 
+      else
+        nwritten = fwrite(s, sizeof(char), n, fdopen(soap->sendfd, "w"));
+#else
+      nwritten = fwrite(s, sizeof(char), n, fdopen(soap->sendfd, "w"));
+#endif /* WMW_RPM_IO */
+#else
+      nwritten = write((SOAP_SOCKET)soap->sendfd, s, n);
+#endif
+#endif
+#endif
+      if (nwritten <= 0)
+      { if (soap_errno != SOAP_EINTR && soap_errno != SOAP_EWOULDBLOCK && soap_errno != SOAP_EAGAIN)
+        { soap->errnum = soap_errno;
+          return SOAP_EOF;
+        }
+        nwritten = 0; /* and call write() again */
+      }
+    }
+    n -= nwritten;
+    s += nwritten;
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_send_raw(struct soap *soap, const char *s, size_t n)
+{ if (!n)
+    return SOAP_OK;
+  if (soap->mode & SOAP_IO_LENGTH)
+  { soap->count += n;
+#ifndef WITH_LEANER
+    if (soap->fpreparesend && (soap->mode & SOAP_IO) != SOAP_IO_STORE)
+      return soap->error = soap->fpreparesend(soap, s, n);
+#endif
+    return SOAP_OK;
+  }
+  if (soap->mode & SOAP_IO)
+  { register size_t i = SOAP_BUFLEN - soap->bufidx;
+    while (n >= i)
+    { memcpy(soap->buf + soap->bufidx, s, i);
+      soap->bufidx = SOAP_BUFLEN;
+      if (soap_flush(soap))
+        return soap->error;
+      s += i;
+      n -= i;
+      i = SOAP_BUFLEN;
+    }
+    memcpy(soap->buf + soap->bufidx, s, n);
+    soap->bufidx += n;
+    return SOAP_OK;
+  }
+  return soap_flush_raw(soap, s, n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_flush(struct soap *soap)
+{ register int n = soap->bufidx;
+  if (n)
+  { soap->bufidx = 0;
+#ifdef WITH_ZLIB
+    if (soap->mode & SOAP_ENC_ZLIB)
+    { soap->d_stream.next_in = (Byte*)soap->buf;
+      soap->d_stream.avail_in = (unsigned int)n;
+#ifdef WITH_GZIP
+      soap->z_crc = crc32(soap->z_crc, (Byte*)soap->buf, (unsigned int)n);
+#endif
+      do
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflating %u bytes\n", soap->d_stream.avail_in));
+        if (deflate(&soap->d_stream, Z_NO_FLUSH) != Z_OK)
+        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unable to deflate: %s\n", soap->d_stream.msg?soap->d_stream.msg:""));
+          return soap->error = SOAP_ZLIB_ERROR;
+        }
+        if (!soap->d_stream.avail_out)
+        { if (soap_flush_raw(soap, soap->z_buf, SOAP_BUFLEN))
+            return soap->error;
+          soap->d_stream.next_out = (Byte*)soap->z_buf;
+          soap->d_stream.avail_out = SOAP_BUFLEN;
+        }
+      } while (soap->d_stream.avail_in);
+    }
+    else
+#endif
+      return soap_flush_raw(soap, soap->buf, n);
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_flush_raw(struct soap *soap, const char *s, size_t n)
+{ if ((soap->mode & SOAP_IO) == SOAP_IO_STORE)
+  { register char *t;
+    if (!(t = (char*)soap_push_block(soap, n)))
+      return soap->error = SOAP_EOM;
+    memcpy(t, s, n);
+#ifndef WITH_LEANER
+    if (soap->fpreparesend)
+      return soap->error = soap->fpreparesend(soap, s, n);
+#endif
+    return SOAP_OK;
+  }
+#ifndef WITH_LEANER
+  if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
+  { char t[16];
+    sprintf(t, "\r\n%lX\r\n" + (soap->chunksize ? 0 : 2), (unsigned long)n);
+    DBGMSG(SENT, t, strlen(t));
+    if ((soap->error = soap->fsend(soap, t, strlen(t))))
+      return soap->error;
+    soap->chunksize += n;
+  }
+  DBGMSG(SENT, s, n);
+#endif
+  return soap->error = soap->fsend(soap, s, n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_send(struct soap *soap, const char *s)
+{ if (s)
+    return soap_send_raw(soap, s, strlen(s));
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_send2(struct soap *soap, const char *s1, const char *s2)
+{ if (soap_send(soap, s1))
+    return soap->error;
+  return soap_send(soap, s2);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_send3(struct soap *soap, const char *s1, const char *s2, const char *s3)
+{ if (soap_send(soap, s1)
+   || soap_send(soap, s2))
+    return soap->error;
+  return soap_send(soap, s3);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static size_t
+frecv(struct soap *soap, char *s, size_t n)
+{ register int r;
+  soap->errnum = 0;
+#if defined(__cplusplus) && !defined(WITH_LEAN)
+  if (soap->is)
+  { if (soap->is->good())
+      return soap->is->read(s, n).gcount();
+    return 0;
+  }
+#endif
+  if (soap_valid_socket(soap->socket))
+  { for (;;)
+    { 
+#ifndef WITH_LEAN
+      if (soap->recv_timeout)
+      { struct timeval timeout;
+        fd_set fd;
+        if (soap->recv_timeout > 0)
+        { timeout.tv_sec = soap->recv_timeout;
+          timeout.tv_usec = 0;
+        }
+        else
+        { timeout.tv_sec = -soap->recv_timeout/1000000;
+          timeout.tv_usec = -soap->recv_timeout%1000000;
+        }
+        FD_ZERO(&fd);
+        FD_SET((SOAP_SOCKET)soap->socket, &fd);
+        for (;;)
+        { r = select((SOAP_SOCKET)(soap->socket + 1), &fd, NULL, &fd, &timeout);
+          if (r > 0)
+            break;
+          if (!r)
+         { soap->errnum = 0;
+            return 0;
+          }
+          if (soap_socket_errno != SOAP_EINTR && soap_socket_errno != SOAP_EAGAIN)
+         { soap->errnum = soap_socket_errno;
+            return 0;
+          }
+        }
+      }
+#endif
+#ifdef WITH_OPENSSL
+      if (soap->ssl)
+      { int err;
+       r = SSL_read(soap->ssl, s, n);
+        if (r > 0)
+          return (size_t)r;
+       err = SSL_get_error(soap->ssl, r);
+       if (err != SSL_ERROR_NONE && err != SSL_ERROR_WANT_READ && err != SSL_ERROR_WANT_WRITE)
+          return 0;
+      }
+      else if (soap->bio)
+      { r = BIO_read(soap->bio, s, n);
+        if (r > 0)
+          return (size_t)r;
+        return 0;
+      }
+      else
+#endif
+      { 
+#ifdef WITH_UDP
+        if ((soap->omode & SOAP_IO_UDP))
+        { SOAP_SOCKLEN_T k = (SOAP_SOCKLEN_T)sizeof(soap->peer);
+         memset((void*)&soap->peer, 0, sizeof(soap->peer));
+          r = recvfrom((SOAP_SOCKET)soap->socket, s, n, soap->socket_flags, (struct sockaddr*)&soap->peer, &k);        /* portability note: see SOAP_SOCKLEN_T definition in stdsoap2.h */
+         soap->peerlen = (size_t)k;
+#ifndef WITH_IPV6
+          soap->ip = ntohl(soap->peer.sin_addr.s_addr);
+          soap->port = (int)ntohs(soap->peer.sin_port);
+#endif
+        }
+       else
+#endif
+          r = recv((SOAP_SOCKET)soap->socket, s, n, soap->socket_flags);
+        if (r >= 0)
+          return (size_t)r;
+        if (soap_socket_errno != SOAP_EINTR && soap_socket_errno != SOAP_EAGAIN && soap_socket_errno != SOAP_EWOULDBLOCK)
+        { soap->errnum = soap_socket_errno;
+          return 0;
+        }
+      }
+#ifndef WITH_LEAN
+      { struct timeval timeout;
+        fd_set fd;
+        timeout.tv_sec = 0;
+        timeout.tv_usec = 10000;
+        FD_ZERO(&fd);
+        FD_SET((SOAP_SOCKET)soap->socket, &fd);
+#ifdef WITH_OPENSSL
+        if (soap->ssl && SSL_get_error(soap->ssl, r) == SSL_ERROR_WANT_WRITE)
+          r = select((SOAP_SOCKET)(soap->socket + 1), NULL, &fd, &fd, &timeout);
+        else
+          r = select((SOAP_SOCKET)(soap->socket + 1), &fd, NULL, &fd, &timeout);
+#else
+        r = select((SOAP_SOCKET)(soap->socket + 1), &fd, NULL, &fd, &timeout);
+#endif
+        if (r < 0 && soap_socket_errno != SOAP_EINTR)
+        { soap->errnum = soap_socket_errno;
+          return 0;
+        }
+      }
+#endif
+    }
+  }
+#ifdef WITH_FASTCGI
+  return fread(s, 1, n, stdin);
+#else
+#ifdef UNDER_CE
+  return fread(s, 1, n, soap->recvfd);
+#else
+#ifdef WMW_RPM_IO
+  if (soap->rpmreqid)
+    r = httpBlockRead(soap->rpmreqid, s, n);
+#endif
+  r = read((SOAP_SOCKET)soap->recvfd, s, n);
+  if (r >= 0)
+    return (size_t)r;
+  soap->errnum = soap_errno;
+  return 0;
+#endif
+#endif
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static soap_wchar
+soap_getchunkchar(struct soap *soap)
+{ if (soap->bufidx < soap->buflen)
+    return soap->buf[soap->bufidx++];
+  soap->bufidx = 0;
+  soap->buflen = soap->chunkbuflen = soap->frecv(soap, soap->buf, SOAP_BUFLEN);
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read %u bytes from socket %d\n", (unsigned int)soap->buflen, soap->socket));
+  DBGMSG(RECV, soap->buf, soap->buflen);
+  if (soap->buflen)
+    return soap->buf[soap->bufidx++];
+  return EOF;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static int
+soap_isxdigit(int c)
+{ return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f');
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_recv_raw(struct soap *soap)
+{ register size_t ret;
+#ifdef WITH_ZLIB
+  if (soap->mode & SOAP_ENC_ZLIB)
+  { if (soap->d_stream.next_out == Z_NULL)
+      return EOF;
+    if (soap->d_stream.avail_in || !soap->d_stream.avail_out)
+    { register int r;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflating\n"));
+      soap->d_stream.next_out = (Byte*)soap->buf;
+      soap->d_stream.avail_out = SOAP_BUFLEN;
+      r = inflate(&soap->d_stream, Z_NO_FLUSH);
+      if (r == Z_OK || r == Z_STREAM_END)
+      { soap->bufidx = 0;
+        soap->buflen = SOAP_BUFLEN - soap->d_stream.avail_out;
+        if (soap->zlib_in == SOAP_ZLIB_GZIP)
+          soap->z_crc = crc32(soap->z_crc, (Byte*)soap->buf, (unsigned int)soap->buflen);
+        if (r == Z_STREAM_END)
+        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflated %lu->%lu bytes\n", soap->d_stream.total_in, soap->d_stream.total_out));
+          soap->z_ratio_in = (float)soap->d_stream.total_in / (float)soap->d_stream.total_out;
+          soap->d_stream.next_out = Z_NULL;
+        }
+        if (soap->buflen)
+        { soap->count += soap->buflen;
+          return SOAP_OK;
+        }
+      }
+      else if (r != Z_BUF_ERROR)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflate error: %s\n", soap->d_stream.msg?soap->d_stream.msg:""));
+        soap->d_stream.next_out = Z_NULL;
+       soap->error = SOAP_ZLIB_ERROR;
+        return EOF;
+      }
+    }
+zlib_again:
+    if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK && !soap->chunksize)
+    { memcpy(soap->buf, soap->z_buf, SOAP_BUFLEN);
+      soap->buflen = soap->z_buflen;
+    }
+  }
+#endif
+#ifndef WITH_NOHTTP
+  if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK) /* read HTTP chunked transfer */
+  { 
+chunk_again:
+    if (soap->chunksize)
+    { soap->buflen = ret = soap->frecv(soap, soap->buf, soap->chunksize > SOAP_BUFLEN ? SOAP_BUFLEN : soap->chunksize);
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Getting chunk: read %u bytes\n", (unsigned int)ret));
+      DBGMSG(RECV, soap->buf, ret);
+      soap->bufidx = 0;
+      soap->chunksize -= ret;
+    }
+    else
+    { register soap_wchar c;
+      char *t, tmp[8];
+      t = tmp;
+      if (!soap->chunkbuflen)
+      { soap->chunkbuflen = ret = soap->frecv(soap, soap->buf, SOAP_BUFLEN);
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read %u bytes (chunked) from socket %d\n", (unsigned int)ret, soap->socket));
+        DBGMSG(RECV, soap->buf, ret);
+        soap->bufidx = 0;
+        if (!ret)
+          return soap->ahead = EOF;
+      }
+      else
+        soap->bufidx = soap->buflen;
+      soap->buflen = soap->chunkbuflen;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Getting chunk size (idx=%u len=%u)\n", (unsigned int)soap->bufidx, (unsigned int)soap->buflen));
+      while (!soap_isxdigit((int)(c = soap_getchunkchar(soap))))
+        if ((int)c == EOF)
+         return soap->ahead = EOF;
+      do
+        *t++ = (char)c;
+      while (soap_isxdigit((int)(c = soap_getchunkchar(soap))) && t - tmp < 7);
+      while ((int)c != EOF && c != '\n')
+        c = soap_getchunkchar(soap);
+      if ((int)c == EOF)
+        return soap->ahead = EOF;
+      *t = '\0';
+      soap->chunksize = soap_strtoul(tmp, &t, 16);
+      if (!soap->chunksize)
+      { soap->chunkbuflen = 0;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of chunked message\n"));
+       while ((int)c != EOF && c != '\n')
+          c = soap_getchunkchar(soap);
+        return soap->ahead = EOF;
+      }
+      soap->buflen = soap->bufidx + soap->chunksize;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Moving buf len to idx=%u len=%u (%s)\n", (unsigned int)soap->bufidx, (unsigned int)soap->buflen, tmp));
+      if (soap->buflen > soap->chunkbuflen)
+      { soap->buflen = soap->chunkbuflen;
+        soap->chunksize -= soap->buflen - soap->bufidx;
+        soap->chunkbuflen = 0;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Passed end of buffer for chunked HTTP (%u bytes left)\n", (unsigned int)(soap->buflen - soap->bufidx)));
+      }
+      else if (soap->chunkbuflen)
+        soap->chunksize = 0;
+      ret = soap->buflen - soap->bufidx;
+      if (!ret)
+        goto chunk_again;
+    }
+  }
+  else
+#endif
+  { soap->bufidx = 0;
+    soap->buflen = ret = soap->frecv(soap, soap->buf, SOAP_BUFLEN);
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read %u bytes from socket %d\n", (unsigned int)ret, soap->socket));
+    DBGMSG(RECV, soap->buf, ret);
+  }
+#ifndef WITH_LEANER
+  if (soap->fpreparerecv && (soap->error = soap->fpreparerecv(soap, soap->buf, ret)))
+    return soap->error;
+#endif
+#ifdef WITH_ZLIB
+  if (soap->mode & SOAP_ENC_ZLIB)
+  { register int r;
+    memcpy(soap->z_buf, soap->buf, SOAP_BUFLEN);
+    soap->d_stream.next_in = (Byte*)(soap->z_buf + soap->bufidx);
+    soap->d_stream.avail_in = (unsigned int)ret;
+    soap->d_stream.next_out = (Byte*)soap->buf;
+    soap->d_stream.avail_out = SOAP_BUFLEN;
+    r = inflate(&soap->d_stream, Z_NO_FLUSH);
+    if (r == Z_OK || r == Z_STREAM_END)
+    { soap->bufidx = 0;
+      soap->z_buflen = soap->buflen;
+      soap->buflen = ret = SOAP_BUFLEN - soap->d_stream.avail_out;
+      if (soap->zlib_in == SOAP_ZLIB_GZIP)
+        soap->z_crc = crc32(soap->z_crc, (Byte*)soap->buf, (unsigned int)soap->buflen);
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflated %u bytes\n", (unsigned int)ret));
+      if (!ret)
+        goto zlib_again;
+      if (r == Z_STREAM_END)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflated %lu->%lu bytes\n", soap->d_stream.total_in, soap->d_stream.total_out));
+        soap->z_ratio_in = (float)soap->d_stream.total_in / (float)soap->d_stream.total_out;
+        soap->d_stream.next_out = Z_NULL;
+      }
+    }
+    else
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unable to inflate: (%d) %s\n", r, soap->d_stream.msg?soap->d_stream.msg:""));
+      soap->d_stream.next_out = Z_NULL;
+      soap->error = SOAP_ZLIB_ERROR;
+      return EOF;
+    }
+  }
+#endif
+  soap->count += ret;
+  return !ret;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_recv(struct soap *soap)
+{ 
+#ifndef WITH_LEANER
+  if (soap->mode & SOAP_ENC_DIME)
+  { if (soap->dime.buflen)
+    { char *s;
+      int i;
+      unsigned char tmp[12];
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DIME hdr for chunked DIME is in buffer\n"));
+      soap->count += soap->dime.buflen - soap->buflen;
+      soap->buflen = soap->dime.buflen;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Skip padding (%ld bytes)\n", -(long)soap->dime.size&3));
+      for (i = -(long)soap->dime.size&3; i > 0; i--)
+      { soap->bufidx++;
+        if (soap->bufidx >= soap->buflen)
+          if (soap_recv_raw(soap))
+            return EOF;
+      }
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get DIME hdr for next chunk\n"));
+      s = (char*)tmp;
+      for (i = 12; i > 0; i--)
+      { *s++ = soap->buf[soap->bufidx++];
+        if (soap->bufidx >= soap->buflen)
+          if (soap_recv_raw(soap))
+            return EOF;
+      }
+      soap->dime.flags = tmp[0] & 0x7;
+      soap->dime.size = ((size_t)tmp[8] << 24) | ((size_t)tmp[9] << 16) | ((size_t)tmp[10] << 8) | ((size_t)tmp[11]);
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get DIME chunk (%u bytes)\n", (unsigned int)soap->dime.size));
+      if (soap->dime.flags & SOAP_DIME_CF)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "More chunking\n"));
+        soap->dime.chunksize = soap->dime.size;
+        if (soap->buflen - soap->bufidx >= soap->dime.size)
+        { soap->dime.buflen = soap->buflen;
+          soap->buflen = soap->bufidx + soap->dime.chunksize;
+        }
+        else
+          soap->dime.chunksize -= soap->buflen - soap->bufidx;
+      }
+      else
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Last chunk\n"));
+        soap->dime.buflen = 0;
+        soap->dime.chunksize = 0;
+      }
+      soap->count = soap->buflen - soap->bufidx;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%u bytes remaining\n", (unsigned int)soap->count));
+      return SOAP_OK;
+    }
+    if (soap->dime.chunksize)
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get next DIME hdr for chunked DIME (%u bytes chunk)\n", (unsigned int)soap->dime.chunksize));
+      if (soap_recv_raw(soap))
+        return EOF;
+      if (soap->buflen - soap->bufidx >= soap->dime.chunksize)
+      { soap->dime.buflen = soap->buflen;
+        soap->count -= soap->buflen - soap->bufidx - soap->dime.chunksize;
+        soap->buflen = soap->bufidx + soap->dime.chunksize;
+      }
+      else
+        soap->dime.chunksize -= soap->buflen - soap->bufidx;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%lu bytes remaining, count=%u\n", (unsigned long)(soap->buflen-soap->bufidx), (unsigned int)soap->count));
+      return SOAP_OK;
+    }
+  }
+#endif
+  return soap_recv_raw(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+soap_wchar
+SOAP_FMAC2
+soap_getchar(struct soap *soap)
+{ register soap_wchar c;
+  c = soap->ahead;
+  if (c)
+  { if (c != EOF)
+      soap->ahead = 0;
+    return c;
+  }
+  return soap_get1(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+const struct soap_code_map*
+SOAP_FMAC2
+soap_code(const struct soap_code_map *map, const char *str)
+{ if (str)
+  { while (map->string)
+    { if (!strcmp(str, map->string)) /* case sensitive */
+        return map;
+      map++;
+    }
+  }
+  return NULL;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+long
+SOAP_FMAC2
+soap_int_code(const struct soap_code_map *map, const char *str, long other)
+{ while (map->string)
+  { if (!soap_tag_cmp(str, map->string)) /* case insensitive */
+      return map->code;
+    map++;
+  }
+  return other;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_str_code(const struct soap_code_map *map, long code)
+{ while (map->code != code && map->string)
+    map++;
+  return map->string;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static soap_wchar
+soap_char(struct soap *soap)
+{ char tmp[8];
+  register int i;
+  register soap_wchar c;
+  register char *s = tmp;
+  for (i = 0; i < 7; i++)
+  { c = soap_get1(soap);
+    if (c == ';' || (int)c == EOF)
+      break;
+    *s++ = (char)c;
+  }
+  *s = '\0';
+  if (*tmp == '#')
+  { if (tmp[1] == 'x' || tmp[1] == 'X')
+      return soap_strtol(tmp + 2, NULL, 16);
+    return atol(tmp + 1);
+  }
+  if (!strcmp(tmp, "lt"))
+    return '<';
+  if (!strcmp(tmp, "gt"))
+    return '>';
+  if (!strcmp(tmp, "amp"))
+    return '&';
+  if (!strcmp(tmp, "quot"))
+    return '"';
+  if (!strcmp(tmp, "apos"))
+    return '\'';
+#ifndef WITH_LEAN
+  return (soap_wchar)soap_int_code(html_entity_codes, tmp, SOAP_UNKNOWN_CHAR);
+#else
+  return SOAP_UNKNOWN_CHAR; /* use this to represent unknown code */
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifdef WITH_LEAN
+soap_wchar
+soap_get0(struct soap *soap)
+{ if (soap->bufidx >= soap->buflen && soap_recv(soap))
+    return EOF;
+  return (unsigned char)soap->buf[soap->bufidx];
+}
+#endif
+
+/******************************************************************************/
+#ifdef WITH_LEAN
+soap_wchar
+soap_get1(struct soap *soap)
+{ if (soap->bufidx >= soap->buflen && soap_recv(soap))
+    return EOF;
+  return (unsigned char)soap->buf[soap->bufidx++];
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+soap_wchar
+SOAP_FMAC2
+soap_get(struct soap *soap)
+{ register soap_wchar c;
+  c = soap->ahead;
+  if (c)
+  { if (c != EOF)
+      soap->ahead = 0;
+  }
+  else
+    c = soap_get1(soap);
+  for (;;)
+  { if (soap->cdata)
+    { if (c == ']')
+      { c = soap_get1(soap);
+        if (c == ']')
+        { soap->cdata = 0;
+          soap_get1(soap); /* skip > */
+          c = soap_get1(soap);
+        }
+       else
+        { soap_revget1(soap);
+          return ']';
+        }
+      }
+      else
+        return c;
+    }
+    switch (c)
+    { case '<':
+        do c = soap_get1(soap);
+        while (soap_blank(c));
+        if (c == '!' || c == '?' || c == '%')
+        { register int k = 1;
+         if (c == '!')
+          { c = soap_get1(soap);
+            if (c == '[')
+            { do c = soap_get1(soap);
+              while ((int)c != EOF && c != '[');
+              if ((int)c == EOF)
+                break;
+              soap->cdata = 1;
+              c = soap_get1(soap);
+             continue;
+            }
+            if (c == '-' && (c = soap_get1(soap)) == '-')
+            { do
+              { c = soap_get1(soap);
+                if (c == '-' && (c = soap_get1(soap)) == '-')
+                  break;
+              } while ((int)c != EOF);
+            }
+          }
+          while ((int)c != EOF)
+          { if (c == '<')
+             k++;
+           else if (c == '>')
+           { if (--k <= 0)
+               break;
+           }
+           c = soap_get1(soap);
+         }
+         if ((int)c == EOF)
+           break;
+          c = soap_get1(soap);
+          continue;
+        }
+        if (c == '/')
+          return SOAP_TT;
+        soap_revget1(soap);
+        return SOAP_LT;
+      case '>':
+        return SOAP_GT;
+      case '"':
+        return SOAP_QT;
+      case '\'':
+        return SOAP_AP;
+      case '&':
+        return soap_char(soap) | 0x80000000;
+    }
+    break;
+  }
+  return c;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_move(struct soap *soap, long n)
+{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Moving %ld bytes forward\n", (long)n));
+  for (; n > 0; n--)
+    if ((int)soap_getchar(soap) == EOF)
+      return SOAP_EOF;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+size_t
+SOAP_FMAC2
+soap_tell(struct soap *soap)
+{ return soap->count - soap->buflen + soap->bufidx - (soap->ahead != 0);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_pututf8(struct soap *soap, register unsigned long c)
+{ char tmp[16];
+  if (c > 0 && c < 0x80)
+  { *tmp = (char)c;
+    return soap_send_raw(soap, tmp, 1);
+  }
+#ifndef WITH_LEAN
+  if (soap->mode & SOAP_XML_CANONICAL)
+  { register char *t = tmp;
+    if (c < 0x0800)
+      *t++ = (char)(0xC0 | ((c >> 6) & 0x1F));
+    else
+    { if (c < 0x010000)
+        *t++ = (char)(0xE0 | ((c >> 12) & 0x0F));
+      else
+      { if (c < 0x200000)
+          *t++ = (char)(0xF0 | ((c >> 18) & 0x07));
+        else
+        { if (c < 0x04000000)
+            *t++ = (char)(0xF8 | ((c >> 24) & 0x03));
+          else
+          { *t++ = (char)(0xFC | ((c >> 30) & 0x01));
+            *t++ = (char)(0x80 | ((c >> 24) & 0x3F));
+          }
+          *t++ = (char)(0x80 | ((c >> 18) & 0x3F));
+        }     
+        *t++ = (char)(0x80 | ((c >> 12) & 0x3F));
+      }
+      *t++ = (char)(0x80 | ((c >> 6) & 0x3F));
+    }
+    *t++ = (char)(0x80 | (c & 0x3F));
+    *t = '\0';
+  }
+  else
+#endif
+    sprintf(tmp, "&#%lu;", c);
+  return soap_send(soap, tmp);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+soap_wchar
+SOAP_FMAC2
+soap_getutf8(struct soap *soap)
+{ register soap_wchar c, c1, c2, c3, c4;
+  c = soap_get(soap);
+  if (c < 0x80 || (soap->mode & SOAP_ENC_LATIN))
+    return c;
+  c1 = soap_get(soap);
+  if (c1 < 0x80)
+  { soap_unget(soap, c1);
+    return c;
+  }
+  c1 &= 0x3F;
+  if (c < 0xE0)
+    return ((soap_wchar)(c & 0x1F) << 6) | c1;
+  c2 = (soap_wchar)soap_get1(soap) & 0x3F;
+  if (c < 0xF0)
+    return ((soap_wchar)(c & 0x0F) << 12) | (c1 << 6) | c2;
+  c3 = (soap_wchar)soap_get1(soap) & 0x3F;
+  if (c < 0xF8)
+    return ((soap_wchar)(c & 0x07) << 18) | (c1 << 12) | (c2 << 6) | c3;
+  c4 = (soap_wchar)soap_get1(soap) & 0x3F;
+  if (c < 0xFC)
+    return ((soap_wchar)(c & 0x03) << 24) | (c1 << 18) | (c2 << 12) | (c3 << 6) | c4;
+  return ((soap_wchar)(c & 0x01) << 30) | (c1 << 24) | (c2 << 18) | (c3 << 12) | (c4 << 6) | (soap_wchar)(soap_get1(soap) & 0x3F);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_puthex(struct soap *soap, const unsigned char *s, int n)
+{ char d[2];
+  register int i;
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { if (!(soap->dom->data = soap_s2hex(soap, s, NULL, n)))
+      return soap->error;
+    return SOAP_OK;
+  }
+#endif
+  for (i = 0; i < n; i++)
+  { register int m = *s++;
+    d[0] = (char)((m >> 4) + (m > 159 ? '7' : '0'));
+    m &= 0x0F;
+    d[1] = (char)(m + (m > 9 ? '7' : '0'));
+    if (soap_send_raw(soap, d, 2))
+      return soap->error;
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+unsigned char*
+SOAP_FMAC2
+soap_gethex(struct soap *soap, int *n)
+{
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { soap->dom->data = soap_string_in(soap, 0, -1, -1);
+    return (unsigned char*)soap_hex2s(soap, soap->dom->data, NULL, 0, n);
+  }
+#endif
+#ifdef WITH_FAST
+  soap->labidx = 0;
+  for (;;)
+  { register char *s;
+    register int i, k;
+    if (soap_append_lab(soap, NULL, 0))
+      return NULL;
+    s = soap->labbuf + soap->labidx;
+    k = soap->lablen - soap->labidx;
+    soap->labidx = soap->lablen;
+    for (i = 0; i < k; i++)
+    { register char d1, d2;
+      register soap_wchar c;
+      c = soap_get(soap);
+      if (soap_isxdigit(c))
+      { d1 = (char)c;
+        c = soap_get(soap); 
+       if (soap_isxdigit(c))
+          d2 = (char)c;
+        else 
+        { soap->error = SOAP_TYPE;
+          return NULL;
+        }
+      }
+      else
+      { unsigned char *p;
+        soap_unget(soap, c);
+        if (n)
+          *n = (int)(soap->lablen - k + i);
+        p = (unsigned char*)soap_malloc(soap, soap->lablen - k + i);
+       if (p)
+         memcpy(p, soap->labbuf, soap->lablen - k + i);
+        return p;
+      }
+      *s++ = ((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0');
+    }
+  }
+#else
+  if (soap_new_block(soap))
+    return NULL;
+  for (;;)
+  { register int i;
+    register char *s = (char*)soap_push_block(soap, SOAP_BLKLEN);
+    if (!s)
+    { soap_end_block(soap);
+      return NULL;
+    }
+    for (i = 0; i < SOAP_BLKLEN; i++)
+    { register char d1, d2;
+      register soap_wchar c = soap_get(soap);
+      if (soap_isxdigit(c))
+      { d1 = (char)c;
+        c = soap_get(soap); 
+       if (soap_isxdigit(c))
+          d2 = (char)c;
+        else 
+        { soap_end_block(soap);
+         soap->error = SOAP_TYPE;
+          return NULL;
+        }
+      }
+      else
+      { unsigned char *p;
+        soap_unget(soap, c);
+        if (n)
+          *n = soap_size_block(soap, i);
+        p = (unsigned char*)soap_save_block(soap, NULL, 0);
+        return p;
+      }
+      *s++ = ((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0');
+    }
+  }
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putbase64(struct soap *soap, const unsigned char *s, int n)
+{ register int i;
+  register unsigned long m;
+  char d[4];
+  if (!s)
+    return SOAP_OK;
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { if (!(soap->dom->data = soap_s2base64(soap, s, NULL, n)))
+      return soap->error;
+    return SOAP_OK;
+  }
+#endif
+  for (; n > 2; n -= 3, s += 3)
+  { m = s[0];
+    m = (m << 8) | s[1];
+    m = (m << 8) | s[2];
+    for (i = 4; i > 0; m >>= 6)
+      d[--i] = soap_base64o[m & 0x3F];
+    if (soap_send_raw(soap, d, 4))
+      return soap->error;
+  }
+  if (n > 0)
+  { m = 0;
+    for (i = 0; i < n; i++)
+      m = (m << 8) | *s++;
+    for (; i < 3; i++)
+      m <<= 8;
+    for (i++; i > 0; m >>= 6)
+      d[--i] = soap_base64o[m & 0x3F];
+    for (i = 3; i > n; i--)
+      d[i] = '=';
+    if (soap_send_raw(soap, d, 4))
+      return soap->error;
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+unsigned char*
+SOAP_FMAC2
+soap_getbase64(struct soap *soap, int *n, int malloc_flag)
+{ 
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { soap->dom->data = soap_string_in(soap, 0, -1, -1);
+    return (unsigned char*)soap_base642s(soap, soap->dom->data, NULL, 0, n);
+  }
+#endif
+#ifdef WITH_FAST
+  soap->labidx = 0;
+  for (;;)
+  { register int i, k;
+    register char *s;
+    if (soap_append_lab(soap, NULL, 2))
+      return NULL;
+    s = soap->labbuf + soap->labidx;
+    k = 3 * ((soap->lablen - soap->labidx) / 3);
+    soap->labidx = 3 * (soap->lablen / 3);
+    if (!s)
+      return NULL;
+    for (i = 0; i < k; i += 3)
+    { register unsigned long m = 0;
+      register int j = 0;
+      do
+      { register soap_wchar c = soap_get(soap);
+        if (c == '=' || c < 0)
+        { unsigned char *p;
+          switch (j)
+          { case 2:
+              *s++ = (char)((m >> 4) & 0xFF);
+              i++;
+              break;
+            case 3:
+              *s++ = (char)((m >> 10) & 0xFF);
+              *s++ = (char)((m >> 2) & 0xFF);
+              i += 2;
+          }
+          if (n)
+            *n = (int)(soap->lablen - k + i - 1);
+          p = (unsigned char*)soap_malloc(soap, soap->lablen - k + i - 1);
+         if (p)
+           memcpy(p, soap->labbuf, soap->lablen - k + i - 1);
+          if (c >= 0)
+          { while ((int)((c = soap_get(soap)) != EOF) && c != SOAP_LT && c != SOAP_TT)
+              ;
+         }
+          soap_unget(soap, c);
+          return p;
+        }
+        c -= '+';
+        if (c >= 0 && c <= 79)
+        { m = (m << 6) + soap_base64i[c];
+          j++;
+        }
+      } while (j < 4);
+      *s++ = (char)((m >> 16) & 0xFF);
+      *s++ = (char)((m >> 8) & 0xFF);
+      *s++ = (char)(m & 0xFF);
+    }
+  }
+#else
+  if (soap_new_block(soap))
+    return NULL;
+  for (;;)
+  { register int i;
+    register char *s = (char*)soap_push_block(soap, 3 * SOAP_BLKLEN); /* must be multiple of 3 */
+    if (!s)
+    { soap_end_block(soap);
+      return NULL;
+    }
+    for (i = 0; i < SOAP_BLKLEN; i++)
+    { register unsigned long m = 0;
+      register int j = 0;
+      do
+      { register soap_wchar c = soap_get(soap);
+        if (c == '=' || c < 0)
+        { unsigned char *p;
+          i *= 3;
+          switch (j)
+          { case 2:
+              *s++ = (char)((m >> 4) & 0xFF);
+              i++;
+              break;
+            case 3:
+              *s++ = (char)((m >> 10) & 0xFF);
+              *s++ = (char)((m >> 2) & 0xFF);
+              i += 2;
+          }
+          if (n)
+           *n = (int)soap_size_block(soap, i);
+          p = (unsigned char*)soap_save_block(soap, NULL, 0);
+          if (c >= 0)
+          { while ((int)((c = soap_get(soap)) != EOF) && c != SOAP_LT && c != SOAP_TT)
+              ;
+         }
+          soap_unget(soap, c);
+          return p;
+        }
+        c -= '+';
+        if (c >= 0 && c <= 79)
+        { m = (m << 6) + soap_base64i[c];
+          j++;
+        }
+      } while (j < 4);
+      *s++ = (char)((m >> 16) & 0xFF);
+      *s++ = (char)((m >> 8) & 0xFF);
+      *s++ = (char)(m & 0xFF);
+    }
+  }
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_xop_forward(struct soap *soap, unsigned char **ptr, int *size, char **id, char **type, char **options)
+{ /* Check MTOM xop:Include element (within hex/base64Binary) */
+  /* TODO: this code to be obsoleted with new import/xop.h conventions */
+  int body = soap->body; /* should save type too? */
+  if (!soap_peek_element(soap))
+  { if (!soap_element_begin_in(soap, "xop:Include", 0) && *soap->href)
+    { if (soap_dime_forward(soap, ptr, size, id, type, options))
+        return soap->error;
+    }
+    if (soap->body && soap_element_end_in(soap, NULL))
+      return soap->error;
+  }
+  soap->body = body;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_dime_forward(struct soap *soap, unsigned char **ptr, int *size, char **id, char **type, char **options)
+{ struct soap_xlist *xp = (struct soap_xlist*)SOAP_MALLOC(soap, sizeof(struct soap_xlist));
+  *ptr = NULL;
+  *size = 0;
+  *id = soap_strdup(soap, soap->href);
+  *type = NULL;
+  *options = NULL;
+  if (!xp)
+    return soap->error = SOAP_EOM;
+  xp->next = soap->xlist;
+  xp->ptr = ptr;
+  xp->size = size;
+  xp->id = *id;
+  xp->type = type;
+  xp->options = options;
+  soap->xlist = xp;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_strdup(struct soap *soap, const char *s)
+{ char *t = NULL;
+  if (s && (t = (char*)soap_malloc(soap, strlen(s) + 1)))
+    strcpy(t, s);
+  return t;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_new_block(struct soap *soap)
+{ struct soap_blist *p;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New block sequence (prev=%p)\n", soap->blist));
+  if (!(p = (struct soap_blist*)SOAP_MALLOC(soap, sizeof(struct soap_blist))))
+    return SOAP_EOM;   
+  p->next = soap->blist; 
+  p->ptr = NULL;
+  p->size = 0;
+  soap->blist = p;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void*
+SOAP_FMAC2
+soap_push_block(struct soap *soap, size_t n)
+{ char *p;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push block of %u bytes (%u bytes total)\n", (unsigned int)n, (unsigned int)soap->blist->size + (unsigned int)n));
+  if (!(p = (char*)SOAP_MALLOC(soap, n + sizeof(char*) + sizeof(size_t))))
+  { soap->error = SOAP_EOM;
+    return NULL;
+  }
+  *(char**)p = soap->blist->ptr;
+  *(size_t*)(p + sizeof(char*)) = n;
+  soap->blist->ptr = p;
+  soap->blist->size += n;
+  return p + sizeof(char*) + sizeof(size_t);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_pop_block(struct soap *soap)
+{ char *p;
+  if (!soap->blist->ptr)
+    return;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Pop block\n"));
+  p = soap->blist->ptr;
+  soap->blist->size -= *(size_t*)(p + sizeof(char*));
+  soap->blist->ptr = *(char**)p;
+  SOAP_FREE(soap, p);
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+static void
+soap_update_ptrs(struct soap *soap, char *start, char *end, long offset)
+{ int i;
+  register struct soap_ilist *ip;
+  register struct soap_flist *fp;
+#ifndef WITH_LEANER
+  register struct soap_xlist *xp;
+#endif
+  register void *p, **q;
+  for (i = 0; i < SOAP_IDHASH; i++)
+  { for (ip = soap->iht[i]; ip; ip = ip->next)
+    { if (ip->ptr && (char*)ip->ptr >= start && (char*)ip->ptr < end)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Update id='%s' %p -> %p\n", ip->id, ip->ptr, (char*)ip->ptr + offset));
+        ip->ptr = (char*)ip->ptr + offset;
+      }
+      for (q = &ip->link; q; q = (void**)p)
+      { p = *q;
+        if (p && (char*)p >= start && (char*)p < end)
+        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Link update id='%s' %p\n", ip->id, p));
+          *q = (char*)p + offset;
+        }
+      }
+      for (q = &ip->copy; q; q = (void**)p)
+      { p = *q;
+        if (p && (char*)p >= start && (char*)p < end)
+        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy chain update id='%s' %p\n", ip->id, p));
+          *q = (char*)p + offset;
+        }
+      }
+      for (fp = ip->flist; fp; fp = fp->next)
+      { if ((char*)fp->ptr >= start && (char*)fp->ptr < end)
+        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy list update id='%s' %p\n", ip->id, fp));
+          fp->ptr = (char*)fp->ptr + offset;
+        }
+      }
+    }
+  }
+#ifndef WITH_LEANER
+  for (xp = soap->xlist; xp; xp = xp->next)
+  { if (xp->ptr && (char*)xp->ptr >= start && (char*)xp->ptr < end)
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Update id='%s' %p -> %p\n", xp->id?xp->id:"", xp->ptr, (char*)xp->ptr + offset));
+      xp->ptr = (unsigned char**)((char*)xp->ptr + offset);
+      xp->size = (int*)((char*)xp->size + offset);
+      xp->type = (char**)((char*)xp->type + offset);
+      xp->options = (char**)((char*)xp->options + offset);
+    }
+  }
+#endif
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+static int
+soap_has_copies(struct soap *soap, register const char *start, register const char *end)
+{ register int i;
+  register struct soap_ilist *ip;
+  register struct soap_flist *fp;
+  register const char *p;
+  for (i = 0; i < SOAP_IDHASH; i++)
+  { for (ip = soap->iht[i]; ip; ip = ip->next)
+    { for (p = (const char*)ip->copy; p; p = *(const char**)p)
+        if (p >= start && p < end)
+          return SOAP_ERR;
+      for (fp = ip->flist; fp; fp = fp->next)
+        if ((const char*)fp->ptr >= start && (const char*)fp->ptr < end)
+         return SOAP_ERR;
+    }
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_resolve(struct soap *soap)
+{ register int i;
+  register struct soap_ilist *ip;
+  register struct soap_flist *fp;
+  short flag;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving forwarded data\n"));
+  for (i = 0; i < SOAP_IDHASH; i++)
+  { for (ip = soap->iht[i]; ip; ip = ip->next)
+    { if (ip->ptr)
+      { register void *p, **q, *r;
+        q = (void**)ip->link;
+        ip->link = NULL;
+        r = ip->ptr;
+        DBGLOG(TEST, if (q) SOAP_MESSAGE(fdebug, "Traversing link chain to resolve id='%s'\n", ip->id));
+        while (q)
+        { p = *q;
+          *q = r;
+          DBGLOG(TEST,SOAP_MESSAGE(fdebug, "... link %p -> %p\n", q, r));
+          q = (void**)p;
+        }
+      }
+      else if (*ip->id == '#')
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Missing data for id='%s'\n", ip->id));
+        strcpy(soap->id, ip->id + 1);
+        return soap->error = SOAP_MISSING_ID;
+      }
+    }
+  }
+  do
+  { flag = 0;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolution phase\n"));
+    for (i = 0; i < SOAP_IDHASH; i++)
+    { for (ip = soap->iht[i]; ip; ip = ip->next)
+      { if (ip->ptr && !soap_has_copies(soap, (const char*)ip->ptr, (const char*)ip->ptr + ip->size))
+        { if (ip->copy)
+          { register void *p, **q = (void**)ip->copy;
+            DBGLOG(TEST, if (q) SOAP_MESSAGE(fdebug, "Traversing copy chain to resolve id='%s'\n", ip->id));
+            ip->copy = NULL;
+            do
+            { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... copy %p -> %p (%u bytes)\n", ip->ptr, q, (unsigned int)ip->size));
+             p = *q;
+              memcpy(q, ip->ptr, ip->size);
+              q = (void**)p;
+            } while (q);
+           flag = 1;
+         }
+          for (fp = ip->flist; fp; fp = ip->flist)
+          { register unsigned int k = fp->level;
+           register void *p = ip->ptr;
+            DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving forwarded data type=%d location=%p level=%u,%u id='%s'\n", ip->type, p, ip->level, fp->level, ip->id));
+           while (ip->level < k)
+            { register void **q = (void**)soap_malloc(soap, sizeof(void*));  
+             if (!q)
+               return soap->error;
+             *q = p;
+              DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Descending one level, new location=%p holds=%p...\n", q, *q));
+              p = (void*)q;
+              k--;
+            }
+           if (fp->fcopy)
+             fp->fcopy(soap, ip->type, fp->type, fp->ptr, p, ip->size);
+           else
+             soap_fcopy(soap, ip->type, fp->type, fp->ptr, p, ip->size);
+           ip->flist = fp->next;
+           SOAP_FREE(soap, fp);
+           flag = 1;
+         }
+        }
+      }
+    }
+  } while (flag);
+#ifdef SOAP_DEBUG
+  for (i = 0; i < SOAP_IDHASH; i++)
+  { for (ip = soap->iht[i]; ip; ip = ip->next)
+    { if (ip->copy || ip->flist)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolution error: forwarded data for id='%s' could not be propagated, please report this problem to the developers\n", ip->id));
+      }
+    }
+  }
+#endif
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolution done\n"));
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+size_t
+SOAP_FMAC2
+soap_size_block(struct soap *soap, size_t n)
+{ if (soap->blist->ptr)
+  { soap->blist->size -= *(size_t*)(soap->blist->ptr + sizeof(char*)) - n;
+    *(size_t*)(soap->blist->ptr + sizeof(char*)) = n;
+  }
+  return soap->blist->size;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+char*
+SOAP_FMAC2
+soap_first_block(struct soap *soap)
+{ char *p, *q, *r;
+  p = soap->blist->ptr;
+  if (!p)
+    return NULL;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "First block\n"));
+  r = NULL;
+  do
+  { q = *(char**)p;
+    *(char**)p = r;
+    r = p;
+    p = q;
+  } while (p);
+  soap->blist->ptr = r;
+  return r + sizeof(char*) + sizeof(size_t);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+char*
+SOAP_FMAC2
+soap_next_block(struct soap *soap)
+{ char *p;
+  p = soap->blist->ptr;
+  if (p)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Next block\n"));
+    soap->blist->ptr = *(char**)p;
+    SOAP_FREE(soap, p);
+    if (soap->blist->ptr)
+      return soap->blist->ptr + sizeof(char*) + sizeof(size_t);
+  }
+  return NULL;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+size_t
+SOAP_FMAC2
+soap_block_size(struct soap *soap)
+{ return *(size_t*)(soap->blist->ptr + sizeof(char*));
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_end_block(struct soap *soap)
+{ struct soap_blist *bp;
+  char *p, *q;
+  bp = soap->blist;
+  if (bp)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of block sequence, free all remaining blocks\n"));
+    for (p = bp->ptr; p; p = q)
+    { q = *(char**)p;
+      SOAP_FREE(soap, p);
+    }
+    soap->blist = bp->next;
+    SOAP_FREE(soap, bp);
+  }
+  DBGLOG(TEST, if (soap->blist) SOAP_MESSAGE(fdebug, "Restore previous block sequence\n"));
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+char*
+SOAP_FMAC2
+soap_save_block(struct soap *soap, char *p, int flag)
+{ register size_t n;
+  register char *q, *s;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Save all blocks in contiguous memory space of %u bytes (%p->%p)\n", (unsigned int)soap->blist->size, soap->blist->ptr, p));
+  if (soap->blist->size)
+  { if (!p)
+      p = (char*)soap_malloc(soap, soap->blist->size);
+    if (p)
+    { for (s = p, q = soap_first_block(soap); q; q = soap_next_block(soap))
+      { n = soap_block_size(soap);
+#ifndef WITH_NOIDREF
+        if (flag)
+         soap_update_ptrs(soap, q, q + n, (long)s - (long)q); /* pointers s and q may or may not be related */
+#endif
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy %u bytes from %p to %p\n", (unsigned int)n, q, s));
+        memcpy(s, q, n);
+        s += n;
+      }
+    }
+    else
+      soap->error = SOAP_EOM;
+  }
+  soap_end_block(soap);
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_putsize(struct soap *soap, const char *type, int size)
+{ return soap_putsizes(soap, type, &size, 1);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_putsizes(struct soap *soap, const char *type, const int *size, int dim)
+{ return soap_putsizesoffsets(soap, type, size, NULL, dim);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_putsizesoffsets(struct soap *soap, const char *type, const int *size, const int *offset, int dim)
+{ int i;
+  if (!type)
+    return NULL;
+  if (soap->version == 2)
+  { sprintf(soap->type, "%s[%d", type, size[0]);
+    for (i = 1; i < dim; i++)
+      sprintf(soap->type + strlen(soap->type), " %d", size[i]);
+  }
+  else
+  { if (offset)
+    { sprintf(soap->type, "%s[%d", type, size[0] + offset[0]);
+      for (i = 1; i < dim; i++)
+        sprintf(soap->type + strlen(soap->type), ",%d", size[i] + offset[i]);
+    }
+    else
+    { sprintf(soap->type, "%s[%d", type, size[0]);
+      for (i = 1; i < dim; i++)
+        sprintf(soap->type + strlen(soap->type), ",%d", size[i]);
+    }
+    strcat(soap->type, "]");
+  }
+  return soap->type;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_putoffset(struct soap *soap, int offset)
+{ return soap_putoffsets(soap, &offset, 1);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_putoffsets(struct soap *soap, const int *offset, int dim)
+{ register int i;
+  sprintf(soap->arrayOffset, "[%d", offset[0]);
+  for (i = 1; i < dim; i++)
+    sprintf(soap->arrayOffset + strlen(soap->arrayOffset), ",%d", offset[i]);
+  strcat(soap->arrayOffset, "]");
+  return soap->arrayOffset;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_size(const int *size, int dim)
+{ register int i, n = size[0];
+  for (i = 1; i < dim; i++)
+    n *= size[i];
+  return n;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getoffsets(const char *attr, const int *size, int *offset, int dim)
+{ register int i, j = 0;
+  if (offset)
+    for (i = 0; i < dim && attr && *attr; i++)
+    { attr++;
+      j *= size[i];
+      j += offset[i] = (int)atol(attr);
+      attr = strchr(attr, ',');
+    }
+  else
+    for (i = 0; i < dim && attr && *attr; i++)
+    { attr++;
+      j *= size[i];
+      j += (int)atol(attr);
+      attr = strchr(attr, ',');
+    }
+  return j;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getsize(const char *attr1, const char *attr2, int *j)
+{ register int n, k;
+  char *s;
+  *j = 0;
+  if (!*attr1)
+    return -1;
+  if (*attr1 == '[')
+    attr1++;
+  n = 1;
+  for (;;)
+  { k = (int)soap_strtol(attr1, &s, 10);
+    n *= k;
+    if (k < 0 || n > SOAP_MAXARRAYSIZE || s == attr1)
+      return -1;
+    attr1 = strchr(s, ',');
+    if (!attr1)
+      attr1 = strchr(s, ' ');
+    if (attr2 && *attr2)
+    { attr2++;
+      *j *= k;
+      k = (int)soap_strtol(attr2, &s, 10);
+      *j += k;
+      if (k < 0)
+        return -1;
+      attr2 = s;
+    }
+    if (!attr1)
+      break;
+    attr1++;
+  }
+  return n - *j;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getsizes(const char *attr, int *size, int dim)
+{ register int i, k, n;
+  if (!*attr)
+    return -1;
+  i = strlen(attr);
+  n = 1;
+  do
+  { for (i = i-1; i >= 0; i--)
+      if (attr[i] == '[' || attr[i] == ',' || attr[i] == ' ')
+        break;
+    k = (int)atol(attr + i + 1);
+    n *= size[--dim] = k;
+    if (k < 0 || n > SOAP_MAXARRAYSIZE)
+      return -1;
+  } while (i >= 0 && attr[i] != '[');
+  return n;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getposition(const char *attr, int *pos)
+{ register int i, n;
+  if (!*attr)
+    return -1;
+  n = 0;
+  i = 1;
+  do
+  { pos[n++] = (int)atol(attr + i);
+    while (attr[i] && attr[i] != ',' && attr[i] != ']')
+      i++;
+    if (attr[i] == ',')
+      i++;
+  } while (n < SOAP_MAXDIMS && attr[i] && attr[i] != ']');
+  return n;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_push_namespace(struct soap *soap, const char *id, const char *ns)
+{ register struct soap_nlist *np;
+  register struct Namespace *p;
+  register short i = -1;
+  register size_t n, k;
+  n = strlen(id);
+  k = strlen(ns) + 1;
+  p = soap->local_namespaces;
+  if (p)
+  { for (i = 0; p->id; p++, i++)
+    { if (p->ns && !strcmp(ns, p->ns))
+      { if (p->out)
+        { SOAP_FREE(soap, p->out);
+          p->out = NULL;
+        }
+        break;
+      }
+      if (p->out)
+      { if (!strcmp(ns, p->out))
+          break;
+      }
+      else if (p->in)
+      { if (!soap_tag_cmp(ns, p->in))
+        { if ((p->out = (char*)SOAP_MALLOC(soap, k)))
+            strcpy(p->out, ns);
+          break;
+        }
+      }
+    }
+    if (!p || !p->id)
+      i = -1;
+  }
+  if (i >= 0)
+    k = 0;
+  np = (struct soap_nlist*)SOAP_MALLOC(soap, sizeof(struct soap_nlist) + n + k);
+  if (!np)
+    return soap->error = SOAP_EOM;
+  np->next = soap->nlist;
+  soap->nlist = np;
+  np->level = soap->level;
+  np->index = i;
+  strcpy(np->id, id);
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push namespace binding (level=%u) '%s' '%s'\n", soap->level, id, ns));
+  if (i < 0)
+  { np->ns = np->id + n + 1;
+    strcpy(np->ns, ns);
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push NOT OK: no match found for '%s' in namespace mapping table (added to stack anyway)\n", ns));
+  }
+  else
+  { np->ns = NULL;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push OK ('%s' matches '%s' in namespace table)\n", id, p->id));
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_pop_namespace(struct soap *soap)
+{ register struct soap_nlist *np;
+  while (soap->nlist && soap->nlist->level >= soap->level)
+  { np = soap->nlist->next;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Popped namespace binding (level=%u) '%s'\n", soap->level, soap->nlist->id));
+    SOAP_FREE(soap, soap->nlist);
+    soap->nlist = np;
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_match_namespace(struct soap *soap, const char *id1, const char *id2, int n1, int n2) 
+{ register struct soap_nlist *np = soap->nlist;
+  while (np && (strncmp(np->id, id1, n1) || np->id[n1]))
+    np = np->next;
+  if (np)
+  { if (np->index < 0
+     || (soap->local_namespaces[np->index].id
+      && (strncmp(soap->local_namespaces[np->index].id, id2, n2)
+       || soap->local_namespaces[np->index].id[n2])))
+      return SOAP_NAMESPACE;
+    return SOAP_OK;
+  }
+  if (n1 == 3 && n1 == n2 && !strcmp(id1, "xml") && !strcmp(id1, id2))
+    return SOAP_OK;
+  return SOAP_SYNTAX_ERROR; 
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_tag_cmp(const char *s, const char *t)
+{ for (;;)
+  { register int c1 = *s;
+    register int c2 = *t;
+    if (!c1 || c1 == '"')
+      break;
+    if (c2 != '-')
+    { if (c1 != c2)
+      { if (c1 >= 'A' && c1 <= 'Z')
+          c1 += 'a' - 'A';
+        if (c2 >= 'A' && c2 <= 'Z')
+          c2 += 'a' - 'A';
+      }
+      if (c1 != c2)
+      { if (c2 != '*')
+          return 1;
+       c2 = *++t;
+        if (!c2)
+         return 0;
+        if (c2 >= 'A' && c2 <= 'Z')
+          c2 += 'a' - 'A';
+        for (;;)
+        { c1 = *s;
+         if (!c1 || c1 == '"')
+           break;
+         if (c1 >= 'A' && c1 <= 'Z')
+            c1 += 'a' - 'A';
+          if (c1 == c2 && !soap_tag_cmp(s + 1, t + 1))
+            return 0;
+         s++;
+        }
+        break;
+      }
+    }
+    s++;
+    t++;
+  }
+  if (*t == '*' && !t[1])
+    return 0;
+  return *t;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_match_tag(struct soap *soap, const char *tag1, const char *tag2)
+{ register const char *s, *t;
+  if (!tag1 || !tag2 || !*tag2)
+    return SOAP_OK;
+  s = strchr(tag1, ':');
+  t = strchr(tag2, ':');
+  if (t)
+  { if (s)
+    { if (t[1] && SOAP_STRCMP(s + 1, t + 1))
+        return SOAP_TAG_MISMATCH;
+      if (t != tag2 && soap_match_namespace(soap, tag1, tag2, s - tag1, t - tag2))
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags '%s' and '%s' match but namespaces differ\n", tag1, tag2));
+        return SOAP_TAG_MISMATCH;
+      }
+    } 
+    else if (SOAP_STRCMP(tag1, t + 1))
+      return SOAP_TAG_MISMATCH;
+    else if (t != tag2 && soap_match_namespace(soap, tag1, tag2, 0, t - tag2))
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags '%s' and '%s' match but namespaces differ\n", tag1, tag2));
+      return SOAP_TAG_MISMATCH;
+    }
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags and (default) namespaces match: '%s' '%s'\n", tag1, tag2));
+    return SOAP_OK;
+  }
+  if (s)
+  { if (SOAP_STRCMP(s + 1, tag2))
+      return SOAP_TAG_MISMATCH;
+  }
+  else if (SOAP_STRCMP(tag1, tag2))
+    return SOAP_TAG_MISMATCH;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags match: '%s' '%s'\n", tag1, tag2));
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_match_array(struct soap *soap, const char *type)
+{ if (*soap->arrayType)
+    if (soap_match_tag(soap, soap->arrayType, type)
+     && soap_match_tag(soap, soap->arrayType, "xsd:anyType")
+     && soap_match_tag(soap, soap->arrayType, "xsd:ur-type")
+    )
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array type mismatch: '%s' '%s'\n", soap->arrayType, type));
+      return SOAP_TAG_MISMATCH;
+    }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+
+#ifdef WITH_OPENSSL
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_rand()
+{ unsigned char buf[4];
+  ssl_init();
+  RAND_pseudo_bytes(buf, 4);
+  return *(int*)buf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_ssl_server_context(struct soap *soap, unsigned short flags, const char *keyfile, const char *password, const char *cafile, const char *capath, const char *dhfile, const char *randfile, const char *sid)
+{ int err;
+  soap->keyfile = keyfile;
+  soap->password = password;
+  soap->cafile = cafile;
+  soap->capath = capath;
+  if (dhfile)
+  { soap->dhfile = dhfile;
+    soap->rsa = 0;
+  }
+  else
+  { soap->dhfile = NULL;
+    soap->rsa = 1;
+  }
+  soap->randfile = randfile;
+  soap->require_client_auth = (flags & SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION);
+  if (!(err = soap->fsslauth(soap)))
+    if (sid)
+      SSL_CTX_set_session_id_context(soap->ctx, (unsigned char*)sid, strlen(sid));
+  return err; 
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_ssl_client_context(struct soap *soap, unsigned short flags, const char *keyfile, const char *password, const char *cafile, const char *capath, const char *randfile)
+{ soap->keyfile = keyfile;
+  soap->password = password;
+  soap->cafile = cafile;
+  soap->capath = capath;
+  soap->dhfile = NULL;
+  soap->rsa = 0;
+  soap->randfile = randfile;
+  soap->require_server_auth = (flags & SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION);
+  return soap->fsslauth(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+static void
+ssl_init()
+{ static int done = 0;
+  if (!done)
+  { done = 1;
+    SSL_library_init();
+#ifndef WITH_LEAN
+    SSL_load_error_strings();
+#endif
+    if (!RAND_load_file("/dev/urandom", 1024))
+    { char buf[1024];
+      RAND_seed(buf, sizeof(buf));
+      while (!RAND_status())
+      { int r = rand();
+        RAND_seed(&r, sizeof(int));
+      }
+    }
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static const char *
+ssl_error(struct soap *soap, int ret)
+{ int err = SSL_get_error(soap->ssl, ret);
+  const char *msg = soap_str_code(h_ssl_error_codes, err);
+  if (msg)
+    strcpy(soap->msgbuf, msg);
+  else
+    return ERR_error_string(err, soap->msgbuf);
+  if (ERR_peek_error())
+  { unsigned long r;
+    strcat(soap->msgbuf, "\n");
+    while ((r = ERR_get_error()))
+      ERR_error_string_n(r, soap->msgbuf + strlen(soap->msgbuf), sizeof(soap->msgbuf) - strlen(soap->msgbuf));
+  } 
+  else
+  { switch (ret)
+    { case 0:
+        strcpy(soap->msgbuf, "EOF was observed that violates the protocol. The client probably provided invalid authentication information.");
+        break;
+      case -1:
+        sprintf(soap->msgbuf, "Error observed by underlying BIO: %s", strerror(errno));  
+        break;
+    }
+  }
+  return soap->msgbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static int
+ssl_password(char *buf, int num, int rwflag, void *userdata)
+{ if (num < (int)strlen((char*)userdata) + 1)
+    return 0;
+  return strlen(strcpy(buf, (char*)userdata));
+}
+#endif
+
+/******************************************************************************/
+/* This callback is included for future references. It should not be deleted
+#ifndef PALM_2
+static DH *
+ssl_tmp_dh(SSL *ssl, int is_export, int keylength)
+{ static DH *dh512 = NULL;
+  static DH *dh1024 = NULL;
+  DH *dh;
+  switch (keylength)
+  { case 512:
+      if (!dh512)
+      { BIO *bio = BIO_new_file("dh512.pem", "r");
+        if (bio)
+        { dh512 = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);
+          BIO_free(bio);
+          return dh512;
+        }
+      }
+      else
+        return dh512;
+    default:
+      if (!dh1024)
+      { BIO *bio = BIO_new_file("dh1024.pem", "r");
+        if (bio)
+        { dh1024 = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);
+          BIO_free(bio);
+        }
+      }
+      dh = dh1024;
+  }
+  return dh;
+}
+#endif
+*/
+
+/******************************************************************************/
+#ifndef PALM_1
+static int
+ssl_auth_init(struct soap *soap)
+{ ssl_init();
+  if (!soap->ctx)
+  { if (!(soap->ctx = SSL_CTX_new(SSLv23_method())))
+      return soap_set_receiver_error(soap, "SSL error", "Can't setup context", SOAP_SSL_ERROR);
+  }
+  if (soap->randfile)
+  { if (!RAND_load_file(soap->randfile, -1))
+      return soap_set_receiver_error(soap, "SSL error", "Can't load randomness", SOAP_SSL_ERROR);
+  }
+  if (soap->cafile || soap->capath)
+  { if (!SSL_CTX_load_verify_locations(soap->ctx, soap->cafile, soap->capath))
+      return soap_set_receiver_error(soap, "SSL error", "Can't read CA file and directory", SOAP_SSL_ERROR);
+  }
+  if (!SSL_CTX_set_default_verify_paths(soap->ctx))
+    return soap_set_receiver_error(soap, "SSL error", "Can't read default CA file and/or directory", SOAP_SSL_ERROR);
+/* See below */
+  if (soap->keyfile)
+  { if (!SSL_CTX_use_certificate_chain_file(soap->ctx, soap->keyfile))
+      return soap_set_receiver_error(soap, "SSL error", "Can't read certificate key file", SOAP_SSL_ERROR);
+    if (soap->password)
+    { SSL_CTX_set_default_passwd_cb_userdata(soap->ctx, (void*)soap->password);
+      SSL_CTX_set_default_passwd_cb(soap->ctx, ssl_password);
+    }
+    if (!SSL_CTX_use_PrivateKey_file(soap->ctx, soap->keyfile, SSL_FILETYPE_PEM))
+      return soap_set_receiver_error(soap, "SSL error", "Can't read key file", SOAP_SSL_ERROR);
+  }
+/* Suggested alternative approach to check cafile first before the key file:
+  if (soap->password)
+  { SSL_CTX_set_default_passwd_cb_userdata(soap->ctx, (void*)soap->password);
+    SSL_CTX_set_default_passwd_cb(soap->ctx, ssl_password);
+  }
+  if (!soap->cafile || !SSL_CTX_use_certificate_chain_file(soap->ctx, soap->cafile))
+  { if (soap->keyfile)
+    { if (!SSL_CTX_use_certificate_chain_file(soap->ctx, soap->keyfile))
+        return soap_set_receiver_error(soap, "SSL error", "Can't read certificate or key file", SOAP_SSL_ERROR);
+      if (!SSL_CTX_use_PrivateKey_file(soap->ctx, soap->keyfile, SSL_FILETYPE_PEM))
+        return soap_set_receiver_error(soap, "SSL error", "Can't read key file", SOAP_SSL_ERROR);
+    }
+  }
+*/
+  if (soap->rsa)
+  { RSA *rsa = RSA_generate_key(512, RSA_F4, NULL, NULL);
+    if (!SSL_CTX_set_tmp_rsa(soap->ctx, rsa))
+    { if (rsa)
+        RSA_free(rsa);
+      return soap_set_receiver_error(soap, "SSL error", "Can't set RSA key", SOAP_SSL_ERROR);
+    }
+    RSA_free(rsa);
+  }
+  else if (soap->dhfile)
+  { DH *dh = 0;
+    BIO *bio;
+    bio = BIO_new_file(soap->dhfile, "r");
+    if (!bio)
+      return soap_set_receiver_error(soap, "SSL error", "Can't read DH file", SOAP_SSL_ERROR);
+    dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);
+    BIO_free(bio);
+    if (SSL_CTX_set_tmp_dh(soap->ctx, dh) < 0)
+    { if (dh)
+        DH_free(dh);
+      return soap_set_receiver_error(soap, "SSL error", "Can't set DH parameters", SOAP_SSL_ERROR);
+    }
+    DH_free(dh);
+  }
+  SSL_CTX_set_options(soap->ctx, SSL_OP_ALL | SSL_OP_NO_SSLv2);
+  SSL_CTX_set_verify(soap->ctx, soap->require_client_auth ? (SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT) : soap->require_server_auth ? SSL_VERIFY_PEER : SSL_VERIFY_NONE, soap->fsslverify);
+#if (OPENSSL_VERSION_NUMBER < 0x00905100L)
+  SSL_CTX_set_verify_depth(soap->ctx, 1); 
+#else
+  SSL_CTX_set_verify_depth(soap->ctx, 9); 
+#endif  
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static int
+ssl_verify_callback(int ok, X509_STORE_CTX *store)
+{
+#ifdef SOAP_DEBUG
+  if (!ok) 
+  { char data[256];
+    X509 *cert = X509_STORE_CTX_get_current_cert(store);
+    fprintf(stderr, "SSL verify error or warning with certificate at depth %d: %s\n", X509_STORE_CTX_get_error_depth(store), X509_verify_cert_error_string(X509_STORE_CTX_get_error(store)));
+    X509_NAME_oneline(X509_get_issuer_name(cert), data, sizeof(data));
+    fprintf(stderr, "certificate issuer %s\n", data);
+    X509_NAME_oneline(X509_get_subject_name(cert), data, sizeof(data));
+    fprintf(stderr, "certificate subject %s\n", data);
+  }
+#endif
+  /* Note: return 1 to continue, but unsafe progress will be terminated by SSL */
+  return ok;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_ssl_accept(struct soap *soap)
+{ BIO *bio;
+  int i, r;
+  if (!soap_valid_socket(soap->socket))
+    return soap_set_receiver_error(soap, "SSL error", "No socket in soap_ssl_accept()", SOAP_SSL_ERROR);
+  if (!soap->ctx && (soap->error = soap->fsslauth(soap)))
+    return SOAP_INVALID_SOCKET;
+  if (!soap->ssl)
+  { soap->ssl = SSL_new(soap->ctx);
+    if (!soap->ssl)
+      return soap_set_receiver_error(soap, "SSL error", "SSL_new() failed in soap_ssl_accept()", SOAP_SSL_ERROR);
+  }
+  else
+    SSL_clear(soap->ssl);
+  soap->imode |= SOAP_ENC_SSL;
+  soap->omode |= SOAP_ENC_SSL;
+#ifdef WIN32
+  { u_long nonblocking = 1;
+    ioctlsocket((SOAP_SOCKET)soap->socket, FIONBIO, &nonblocking);
+  }
+#else
+  fcntl((SOAP_SOCKET)soap->socket, F_SETFL, fcntl((SOAP_SOCKET)soap->socket, F_GETFL)|O_NONBLOCK);
+#endif
+  bio = BIO_new_socket((SOAP_SOCKET)soap->socket, BIO_NOCLOSE);
+  SSL_set_bio(soap->ssl, bio, bio);
+  i = 100; /* 100 * 0.1 ms retries */
+  while ((r = SSL_accept(soap->ssl)) <= 0)
+  { int err = SSL_get_error(soap->ssl, r);
+    if (err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE)
+    { struct timeval timeout;
+      fd_set fd;
+      if (i-- <= 0)
+        break;
+      timeout.tv_sec = 0;
+      timeout.tv_usec = 100000;
+      FD_ZERO(&fd);
+      FD_SET((SOAP_SOCKET)soap->socket, &fd);
+      r = select((SOAP_SOCKET)(soap->socket + 1), &fd, NULL, &fd, &timeout);
+      if (r < 0 && soap_socket_errno != SOAP_EINTR)
+      { soap->errnum = soap_socket_errno;
+        return SOAP_EOF;
+      }
+    }
+    else
+    { soap->errnum = err;
+      break;
+    }
+  }
+#ifdef WIN32
+  { u_long blocking = 0;
+    ioctlsocket((SOAP_SOCKET)soap->socket, FIONBIO, &blocking);
+  }
+#else
+  fcntl((SOAP_SOCKET)soap->socket, F_SETFL, fcntl((SOAP_SOCKET)soap->socket, F_GETFL)&~O_NONBLOCK);
+#endif
+  if (r <= 0)
+  { soap_set_receiver_error(soap, ssl_error(soap, r), "SSL_accept() failed in soap_ssl_accept()", SOAP_SSL_ERROR);
+    soap_closesock(soap);
+    return SOAP_SSL_ERROR;
+  }
+  if (soap->require_client_auth)
+  { X509 *peer;
+    int err;
+    if ((err = SSL_get_verify_result(soap->ssl)) != X509_V_OK)
+    { soap_closesock(soap);
+      return soap_set_sender_error(soap, X509_verify_cert_error_string(err), "SSL certificate presented by peer cannot be verified in soap_ssl_accept()", SOAP_SSL_ERROR);
+    }
+    peer = SSL_get_peer_certificate(soap->ssl);
+    if (!peer)
+    { soap_closesock(soap);
+      return soap_set_sender_error(soap, "SSL error", "No SSL certificate was presented by the peer in soap_ssl_accept()", SOAP_SSL_ERROR);
+    }
+    X509_free(peer);
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#endif /* WITH_OPENSSL */
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_init(struct soap *soap)
+{ soap->errmode = 1;
+#ifdef WIN32
+  if (tcp_done)
+    return 0;
+  else
+  { WSADATA w;
+    if (WSAStartup(MAKEWORD(1, 1), &w))
+      return -1;
+    tcp_done = 1;
+  }
+#endif
+  return 0;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_done(struct soap *soap)
+{ 
+#ifdef SOAP_DEBUG
+  int i;
+#endif
+  soap_free(soap);
+  while (soap->clist)
+  { struct soap_clist *p = soap->clist->next;
+    SOAP_FREE(soap, soap->clist);
+    soap->clist = p;
+  }
+  soap->keep_alive = 0; /* to force close the socket */
+  soap_closesock(soap);
+#ifdef WITH_COOKIES
+  soap_free_cookies(soap);
+#endif
+  while (soap->plugins)
+  { register struct soap_plugin *p = soap->plugins->next;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Removing plugin '%s'\n", soap->plugins->id));
+    if (soap->plugins->fcopy || !soap->copy)
+      soap->plugins->fdelete(soap, soap->plugins);
+    SOAP_FREE(soap, soap->plugins);
+    soap->plugins = p;
+  }
+  soap->fplugin = fplugin;
+#ifndef WITH_NOHTTP
+  soap->fpost = http_post;
+  soap->fget = http_get;
+  soap->fform = NULL;
+  soap->fposthdr = http_post_header;
+  soap->fresponse = http_response;
+  soap->fparse = http_parse;
+  soap->fparsehdr = http_parse_header;
+#endif
+#ifndef WITH_NOIO
+#ifndef WITH_IPV6
+  soap->fresolve = tcp_gethost;
+#else
+  soap->fresolve = NULL;
+#endif
+  soap->faccept = tcp_accept;
+  soap->fopen = tcp_connect;
+  soap->fclose = tcp_disconnect;
+  soap->fclosesocket = tcp_closesocket;
+  soap->fshutdownsocket = tcp_shutdownsocket;
+  soap->fsend = fsend;
+  soap->frecv = frecv;
+  soap->fpoll = soap_poll;
+#else
+  soap->fopen = NULL;
+  soap->fclose = NULL;
+  soap->fpoll = NULL;
+#endif
+#ifndef WITH_LEANER
+  soap->fprepareinit = NULL;
+  soap->fpreparesend = NULL;
+  soap->fpreparerecv = NULL;
+  soap->fpreparefinal = NULL;
+#endif
+  soap->fseterror = NULL;
+  soap->fignore = NULL;
+  soap->fserveloop = NULL;
+#ifdef WITH_OPENSSL
+  if (soap->session)
+  { SSL_SESSION_free(soap->session);
+    soap->session = NULL;
+  }
+#endif
+  if (!soap->copy)
+  { if (soap_valid_socket(soap->master))
+    { soap->fclosesocket(soap, (SOAP_SOCKET)soap->master);
+      soap->master = SOAP_INVALID_SOCKET;
+    }
+#ifdef WITH_OPENSSL
+    if (soap->ctx)
+    { SSL_CTX_free(soap->ctx);
+      soap->ctx = NULL;
+    }
+#endif
+  }
+#ifdef SOAP_DEBUG
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free logfiles\n"));
+  for (i = 0; i < SOAP_MAXLOGS; i++)
+  { if (soap->logfile[i])
+    { SOAP_FREE(soap, (void*)soap->logfile[i]);
+      soap->logfile[i] = NULL;
+    }
+    soap_close_logfile(soap, i);
+  }
+  soap_free_mht(soap);
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_cleanup(struct soap *soap)
+{ soap_done(soap);
+#ifdef WIN32
+  if (!tcp_done)
+    return;
+  tcp_done = 0;
+  WSACleanup();
+#endif
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static const char*
+tcp_error(struct soap *soap)
+{ register const char *msg = NULL;
+  switch (soap->errmode)
+  { case 0:
+      msg = soap_strerror(soap);
+      break;
+    case 1:
+      msg = "WSAStartup failed";
+      break;
+    case 2:
+    {
+#ifndef WITH_LEAN
+      msg = soap_str_code(h_error_codes, soap->errnum);
+      if (!msg)
+#endif
+      { sprintf(soap->msgbuf, "TCP/UDP IP error %d", soap->errnum);
+        msg = soap->msgbuf;
+      }
+    }
+  }
+  return msg;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static const char*
+http_error(struct soap *soap, int status)
+{ register const char *msg = SOAP_STR_EOS;
+#ifndef WITH_LEAN
+  msg = soap_str_code(h_http_error_codes, status);
+  if (!msg)
+    msg = SOAP_STR_EOS;
+#endif
+  return msg;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_IPV6
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_gethost(struct soap *soap, const char *addr, struct in_addr *inaddr)
+{ soap_int32 iadd = -1;
+  struct hostent hostent, *host = &hostent;
+#ifdef VXWORKS
+  int hostint;
+  char *addrcopy = (char*)SOAP_MALLOC(soap, strlen(addr) + 1); /*copy of addr. */
+  /* inet_addr(), and hostGetByName() expect "char *"; addr is a "const char *". */
+  strncpy(addrcopy, addr, strlen(addr)+1);
+  iadd = inet_addr(addrcopy);
+#else
+#if defined(_AIXVERSION_431) || defined(TRU64)
+  struct hostent_data ht_data;
+#endif
+  iadd = inet_addr(addr);
+#endif
+  if (iadd != -1)
+  { memcpy(inaddr, &iadd, sizeof(iadd));
+#ifdef VXWORKS
+    SOAP_FREE(soap, addrcopy);
+#endif
+    return SOAP_OK;
+  }
+#if defined(__GLIBC__)
+  if (gethostbyname_r(addr, &hostent, soap->buf, SOAP_BUFLEN, &host, &soap->errnum) < 0)
+    host = NULL;
+#elif defined(_AIXVERSION_431) || defined(TRU64)
+  memset((void*)&ht_data, 0, sizeof(ht_data));
+  if (gethostbyname_r(addr, &hostent, &ht_data) < 0)
+  { host = NULL;
+    soap->errnum = h_errno;
+  }
+#elif defined(HAVE_GETHOSTBYNAME_R)
+  host = gethostbyname_r(addr, &hostent, soap->buf, SOAP_BUFLEN, &soap->errnum);
+#elif defined(VXWORKS)
+  /* If the DNS resolver library resolvLib has been configured in the vxWorks
+   * image, a query for the host IP address is sent to the DNS server, if the
+   * name was not found in the local host table. */
+  hostint = hostGetByName(addrcopy);
+  if (hostint == ERROR)
+  { host = NULL;
+    soap->errnum = soap_errno; 
+  }
+  SOAP_FREE(soap, addrcopy);  /*free() is placed after the error checking to assure that
+                   * errno captured is that from hostGetByName() */
+#else
+  if (!(host = gethostbyname(addr)))
+    soap->errnum = h_errno;
+#endif
+  if (!host)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Host name not found\n"));
+    return SOAP_ERR;
+  }
+#ifdef VXWORKS
+  inaddr->s_addr = hostint;
+#else
+  memcpy(inaddr, host->h_addr, host->h_length);
+#endif
+  return SOAP_OK;
+}
+#endif
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_connect(struct soap *soap, const char *endpoint, const char *host, int port)
+{
+#ifdef WITH_IPV6
+  struct addrinfo hints, *res, *ressave;
+  int err;
+#endif
+  register int fd;
+#ifndef WITH_LEAN
+  int len = SOAP_BUFLEN;
+  int set = 1;
+#endif
+  if (soap_valid_socket(soap->socket))
+    soap->fclosesocket(soap, (SOAP_SOCKET)soap->socket);
+  soap->socket = SOAP_INVALID_SOCKET;
+  if (tcp_init(soap))
+  { soap->errnum = 0;
+    soap_set_sender_error(soap, tcp_error(soap), "TCP init failed in tcp_connect()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+  soap->errmode = 0;
+#ifdef WITH_IPV6
+  memset((void*)&hints, 0, sizeof(hints));
+  hints.ai_family = PF_UNSPEC;
+#ifdef WITH_UDP
+  if ((soap->omode & SOAP_IO_UDP))
+    hints.ai_socktype = SOCK_DGRAM;
+  else
+#endif
+    hints.ai_socktype = SOCK_STREAM;
+  soap->errmode = 2;
+  if (soap->proxy_host)
+    err = getaddrinfo(soap->proxy_host, soap_int2s(soap, soap->proxy_port), &hints, &res);
+  else
+    err = getaddrinfo(host, soap_int2s(soap, port), &hints, &res);
+  if (err)
+  { soap_set_sender_error(soap, gai_strerror(err), "getaddrinfo failed in tcp_connect()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+  ressave = res;
+again:
+  fd = (int)socket(res->ai_family, res->ai_socktype, res->ai_protocol);
+  soap->errmode = 0;
+#else
+#ifdef WITH_UDP
+  if ((soap->omode & SOAP_IO_UDP))
+    fd = (int)socket(AF_INET, SOCK_DGRAM, 0);
+  else
+#endif
+    fd = (int)socket(AF_INET, SOCK_STREAM, 0);
+#endif
+  if (fd < 0)
+  { soap->errnum = soap_socket_errno;
+    soap_set_sender_error(soap, tcp_error(soap), "socket failed in tcp_connect()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+#ifdef SOCKET_CLOSE_ON_EXEC
+#ifdef WIN32
+#ifndef UNDER_CE
+  SetHandleInformation((HANDLE)fd, HANDLE_FLAG_INHERIT, 0);
+#endif
+#else
+  fcntl(fd, F_SETFD, 1);
+#endif
+#endif
+#ifndef WITH_LEAN
+  if (soap->connect_flags & SO_LINGER)
+  { struct linger linger;
+    memset((void*)&linger, 0, sizeof(linger));
+    linger.l_onoff = 1;
+    linger.l_linger = 0;
+    if (setsockopt((SOAP_SOCKET)fd, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(struct linger)))
+    { soap->errnum = soap_socket_errno;
+      soap_set_sender_error(soap, tcp_error(soap), "setsockopt SO_LINGER failed in tcp_connect()", SOAP_TCP_ERROR);
+      soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+      return SOAP_INVALID_SOCKET;
+    }
+  }
+  if ((soap->connect_flags & ~SO_LINGER) && setsockopt((SOAP_SOCKET)fd, SOL_SOCKET, soap->connect_flags & ~SO_LINGER, (char*)&set, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_sender_error(soap, tcp_error(soap), "setsockopt failed in tcp_connect()", SOAP_TCP_ERROR);
+    soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+    return SOAP_INVALID_SOCKET;
+  }
+  if (soap->keep_alive && setsockopt((SOAP_SOCKET)fd, SOL_SOCKET, SO_KEEPALIVE, (char*)&set, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_sender_error(soap, tcp_error(soap), "setsockopt SO_KEEPALIVE failed in tcp_connect()", SOAP_TCP_ERROR);
+    soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+    return SOAP_INVALID_SOCKET;
+  }
+  if (setsockopt((SOAP_SOCKET)fd, SOL_SOCKET, SO_SNDBUF, (char*)&len, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_sender_error(soap, tcp_error(soap), "setsockopt SO_SNDBUF failed in tcp_connect()", SOAP_TCP_ERROR);
+    soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+    return SOAP_INVALID_SOCKET;
+  }
+  if (setsockopt((SOAP_SOCKET)fd, SOL_SOCKET, SO_RCVBUF, (char*)&len, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_sender_error(soap, tcp_error(soap), "setsockopt SO_RCVBUF failed in tcp_connect()", SOAP_TCP_ERROR);
+    soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+    return SOAP_INVALID_SOCKET;
+  }
+#ifdef TCP_NODELAY
+  if (!(soap->omode & SOAP_IO_UDP) && setsockopt((SOAP_SOCKET)fd, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_sender_error(soap, tcp_error(soap), "setsockopt TCP_NODELAY failed in tcp_connect()", SOAP_TCP_ERROR);
+    soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+    return SOAP_INVALID_SOCKET;
+  }
+#endif
+#endif
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Opening socket %d to host='%s' port=%d\n", fd, host, port));
+#ifndef WITH_IPV6
+  soap->peerlen = sizeof(soap->peer);
+  memset((void*)&soap->peer, 0, sizeof(soap->peer));
+  soap->peer.sin_family = AF_INET;
+  soap->errmode = 2;
+  if (soap->proxy_host)
+  { if (soap->fresolve(soap, soap->proxy_host, &soap->peer.sin_addr))
+    { soap_set_sender_error(soap, tcp_error(soap), "get proxy host by name failed in tcp_connect()", SOAP_TCP_ERROR);
+      soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+      return SOAP_INVALID_SOCKET;
+    }
+    soap->peer.sin_port = htons((short)soap->proxy_port);
+  }
+  else
+  { if (soap->fresolve(soap, host, &soap->peer.sin_addr))
+    { soap_set_sender_error(soap, tcp_error(soap), "get host by name failed in tcp_connect()", SOAP_TCP_ERROR);
+      soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+      return SOAP_INVALID_SOCKET;
+    }
+    soap->peer.sin_port = htons((short)port);
+  }
+  soap->errmode = 0;
+  if ((soap->omode & SOAP_IO_UDP))
+    return fd;
+#endif
+#ifndef WITH_LEAN
+  if (soap->connect_timeout)
+#if defined(WIN32)
+  { u_long nonblocking = 1;
+    ioctlsocket((SOAP_SOCKET)fd, FIONBIO, &nonblocking);
+  }
+#elif defined(VXWORKS)
+  { vx_nonblocking = TRUE;
+    ioctl((SOAP_SOCKET)fd, FIONBIO, (int)(&vx_nonblocking)); /* modified to use fd */
+  }
+#else
+    fcntl((SOAP_SOCKET)fd, F_SETFL, fcntl((SOAP_SOCKET)fd, F_GETFL)|O_NONBLOCK);
+#endif
+  else
+#if defined(WIN32)
+  { u_long blocking = 0;
+    ioctlsocket((SOAP_SOCKET)fd, FIONBIO, &blocking);
+  }
+#elif defined(VXWORKS)
+  { vx_nonblocking = FALSE;
+    ioctl((SOAP_SOCKET)fd, FIONBIO, (int)(&vx_nonblocking)); /* modified to use fd */
+  }
+#else
+    fcntl((SOAP_SOCKET)fd, F_SETFL, fcntl((SOAP_SOCKET)fd, F_GETFL)&~O_NONBLOCK);
+#endif
+#endif
+  for (;;)
+  { 
+#ifdef WITH_IPV6
+    if (connect((SOAP_SOCKET)fd, res->ai_addr, res->ai_addrlen))
+#else
+    if (connect((SOAP_SOCKET)fd, (struct sockaddr*)&soap->peer, sizeof(soap->peer)))
+#endif
+    { 
+#ifndef WITH_LEAN
+      if (soap->connect_timeout && (soap_socket_errno == SOAP_EINPROGRESS || soap_socket_errno == SOAP_EWOULDBLOCK))
+      { struct timeval timeout;
+        SOAP_SOCKLEN_T k;
+        fd_set fds;
+        if (soap->connect_timeout > 0)
+        { timeout.tv_sec = soap->connect_timeout;
+          timeout.tv_usec = 0;
+        }
+        else
+        { timeout.tv_sec = -soap->connect_timeout/1000000;
+          timeout.tv_usec = -soap->connect_timeout%1000000;
+        }
+        FD_ZERO(&fds);
+        FD_SET((SOAP_SOCKET)fd, &fds);
+        for (;;)
+        { int r = select((SOAP_SOCKET)(fd + 1), NULL, &fds, NULL, &timeout);
+          if (r > 0)
+           break;
+          if (!r)
+          { soap->errnum = 0;
+            DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Connect timeout\n"));
+            soap_set_sender_error(soap, "Timeout", "connect failed in tcp_connect()", SOAP_TCP_ERROR);
+            soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+            return SOAP_INVALID_SOCKET;
+          }
+          if (soap_socket_errno != SOAP_EINTR)
+          { soap->errnum = soap_socket_errno;
+            DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not connect to host\n"));
+            soap_set_sender_error(soap, tcp_error(soap), "connect failed in tcp_connect()", SOAP_TCP_ERROR);
+            soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+            return SOAP_INVALID_SOCKET;
+          }
+        }
+       k = (SOAP_SOCKLEN_T)sizeof(soap->errnum);
+        if (!getsockopt((SOAP_SOCKET)fd, SOL_SOCKET, SO_ERROR, (char*)&soap->errnum, &k) && !soap->errnum)     /* portability note: see SOAP_SOCKLEN_T definition in stdsoap2.h */
+          break;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not connect to host\n"));
+        soap->errnum = soap_socket_errno;
+        soap_set_sender_error(soap, tcp_error(soap), "connect failed in tcp_connect()", SOAP_TCP_ERROR);
+        soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+        return SOAP_INVALID_SOCKET;
+      }
+      else
+#endif
+#ifdef WITH_IPV6
+      if (res->ai_next)
+      { res = res->ai_next;
+        soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+        goto again;
+      }
+      else
+#endif
+      if (soap_socket_errno != SOAP_EINTR)
+      { soap->errnum = soap_socket_errno;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not connect to host\n"));
+        soap_set_sender_error(soap, tcp_error(soap), "connect failed in tcp_connect()", SOAP_TCP_ERROR);
+        soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+        return SOAP_INVALID_SOCKET;
+      }
+    }  
+    else
+      break;
+  }
+#ifdef WITH_IPV6
+  soap->peerlen = 0; /* IPv6: already connected so use send() */
+  freeaddrinfo(ressave);
+#endif
+#ifndef WITH_LEAN
+  if (soap->connect_timeout)
+#if defined(WIN32)
+  { u_long blocking = 0;
+    ioctlsocket((SOAP_SOCKET)fd, FIONBIO, &blocking);
+  }
+#elif defined(VXWORKS)
+  { vx_nonblocking = FALSE;
+    ioctl((SOAP_SOCKET)fd, FIONBIO, (int)(&vx_nonblocking)); /* modified to use fd */
+  }
+#else
+    fcntl((SOAP_SOCKET)fd, F_SETFL, fcntl((SOAP_SOCKET)fd, F_GETFL)&~O_NONBLOCK);
+#endif
+#endif
+  soap->socket = fd;
+  soap->imode &= ~SOAP_ENC_SSL;
+  soap->omode &= ~SOAP_ENC_SSL;
+  if (!strncmp(endpoint, "https:", 6))
+  {
+#ifdef WITH_OPENSSL
+    BIO *bio;
+    int r;
+    if (soap->proxy_host)
+    { short v;
+      unsigned int k = soap->omode; /* make sure we only parse HTTP */
+      size_t n = soap->count; /* save the content length */
+      soap->omode &= ~SOAP_ENC; /* mask IO and ENC */
+      soap->omode |= SOAP_IO_BUFFER;
+      soap_begin_send(soap);
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Connecting to proxy server\n"));
+      sprintf(soap->tmpbuf, "CONNECT %s:%d HTTP/%s", host, port, soap->http_version);
+      if ((soap->error = soap->fposthdr(soap, soap->tmpbuf, NULL)))
+        return SOAP_INVALID_SOCKET;
+#ifndef WITH_LEAN
+      if (soap->proxy_userid && soap->proxy_passwd && strlen(soap->proxy_userid) + strlen(soap->proxy_passwd) < 761)
+      { sprintf(soap->tmpbuf + 262, "%s:%s", soap->proxy_userid, soap->proxy_passwd);
+        strcpy(soap->tmpbuf, "Basic ");
+        soap_s2base64(soap, (const unsigned char*)(soap->tmpbuf + 262), soap->tmpbuf + 6, strlen(soap->tmpbuf + 262));
+        if ((soap->error = soap->fposthdr(soap, "Proxy-Authorization", soap->tmpbuf)))
+          return soap->error;
+      }
+#endif
+      if ((soap->error = soap->fposthdr(soap, NULL, NULL))
+       || soap_flush(soap))
+        return SOAP_INVALID_SOCKET;
+      soap->omode = k;
+      k = soap->imode;
+      soap->imode &= ~SOAP_ENC; /* mask IO and ENC */
+      v = soap->version; /* preserve */
+      if (soap_begin_recv(soap))
+        return SOAP_INVALID_SOCKET;
+      soap->version = v; /* restore */
+      soap->imode = k; /* restore */
+      soap->count = n; /* restore */
+      soap_begin_send(soap);
+    }
+    if (!soap->ctx && (soap->error = soap->fsslauth(soap)))
+    { soap_set_sender_error(soap, "SSL error", "SSL authentication failed in tcp_connect(): check password, key file, and ca file.", SOAP_SSL_ERROR);
+      return SOAP_INVALID_SOCKET;
+    }
+    soap->ssl = SSL_new(soap->ctx);
+    if (!soap->ssl)
+    { soap->error = SOAP_SSL_ERROR;
+      return SOAP_INVALID_SOCKET;
+    }
+    if (soap->session)
+    { if (!strcmp(soap->session_host, host) && soap->session_port == port)
+        SSL_set_session(soap->ssl, soap->session);
+      SSL_SESSION_free(soap->session);
+      soap->session = NULL;
+    }
+    soap->imode |= SOAP_ENC_SSL;
+    soap->omode |= SOAP_ENC_SSL;
+    bio = BIO_new_socket((SOAP_SOCKET)fd, BIO_NOCLOSE);
+    SSL_set_bio(soap->ssl, bio, bio);
+#ifndef WITH_LEAN
+    if (soap->connect_timeout)
+#ifdef WIN32
+    { u_long nonblocking = 1;
+      ioctlsocket((SOAP_SOCKET)fd, FIONBIO, &nonblocking);
+    }
+#else
+      fcntl((SOAP_SOCKET)fd, F_SETFL, fcntl((SOAP_SOCKET)fd, F_GETFL)|O_NONBLOCK);
+#endif
+#endif
+    for (;;)
+    { if ((r = SSL_connect(soap->ssl)) <= 0)
+      { int err = SSL_get_error(soap->ssl, r);
+        if (err != SSL_ERROR_NONE && err != SSL_ERROR_WANT_READ && err != SSL_ERROR_WANT_WRITE)
+        { soap_set_sender_error(soap, ssl_error(soap, r), "SSL connect failed in tcp_connect()", SOAP_SSL_ERROR);
+          return SOAP_INVALID_SOCKET;
+        }
+        if (soap->connect_timeout)
+        { struct timeval timeout;
+          fd_set fds;
+          if (soap->connect_timeout > 0)
+          { timeout.tv_sec = soap->connect_timeout;
+            timeout.tv_usec = 0;
+          }
+          else
+          { timeout.tv_sec = -soap->connect_timeout/1000000;
+            timeout.tv_usec = -soap->connect_timeout%1000000;
+          }
+          FD_ZERO(&fds);
+          FD_SET((SOAP_SOCKET)soap->socket, &fds);
+          for (;;)
+          { int r = select((SOAP_SOCKET)(soap->socket + 1), &fds, NULL, &fds, &timeout);
+            if (r > 0)
+             break;
+            if (!r)
+            { soap->errnum = 0;
+              DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Connect timeout\n"));
+              soap_set_sender_error(soap, "Timeout", "connect failed in tcp_connect()", SOAP_TCP_ERROR);
+              return SOAP_INVALID_SOCKET;
+            }
+          }
+         continue;
+        }
+      }
+      break;
+    }
+#ifndef WITH_LEAN
+    if (soap->connect_timeout)
+#ifdef WIN32
+    { u_long blocking = 0;
+      ioctlsocket((SOAP_SOCKET)fd, FIONBIO, &blocking);
+    }
+#else
+      fcntl((SOAP_SOCKET)fd, F_SETFL, fcntl((SOAP_SOCKET)fd, F_GETFL)&~O_NONBLOCK);
+#endif
+#endif
+    if (soap->require_server_auth)
+    { X509 *peer;
+      int err;
+      if ((err = SSL_get_verify_result(soap->ssl)) != X509_V_OK)
+      { soap_set_sender_error(soap, X509_verify_cert_error_string(err), "SSL certificate presented by peer cannot be verified in tcp_connect()", SOAP_SSL_ERROR);
+        return SOAP_INVALID_SOCKET;
+      }
+      peer = SSL_get_peer_certificate(soap->ssl);
+      if (!peer)
+      { soap_set_sender_error(soap, "SSL error", "No SSL certificate was presented by the peer in tcp_connect()", SOAP_SSL_ERROR);
+        return SOAP_INVALID_SOCKET;
+      }
+      X509_NAME_get_text_by_NID(X509_get_subject_name(peer), NID_commonName, soap->msgbuf, sizeof(soap->msgbuf));
+      X509_free(peer);
+      if (soap_tag_cmp(soap->msgbuf, host))
+      { soap_set_sender_error(soap, "SSL error", "SSL certificate host name mismatch in tcp_connect()", SOAP_SSL_ERROR);
+        return SOAP_INVALID_SOCKET;
+      }
+    }
+#else
+    soap->error = SOAP_SSL_ERROR;
+    return SOAP_INVALID_SOCKET;
+#endif
+  }
+  return fd;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_bind(struct soap *soap, const char *host, int port, int backlog)
+{
+#ifdef WITH_IPV6
+  struct addrinfo *addrinfo;
+  struct addrinfo hints;
+  struct addrinfo res;
+  int err;
+#endif
+#ifndef WITH_LEAN
+  int len = SOAP_BUFLEN;
+  int set = 1;
+#endif
+  if (soap_valid_socket(soap->master))
+  { soap->fclosesocket(soap, (SOAP_SOCKET)soap->master);
+    soap->master = SOAP_INVALID_SOCKET;
+  }
+  soap->socket = SOAP_INVALID_SOCKET;
+  soap->errmode = 1;
+  if (tcp_init(soap))
+  { soap_set_receiver_error(soap, tcp_error(soap), "TCP init failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+#ifdef WITH_IPV6
+  memset((void*)&hints, 0, sizeof(hints));
+  hints.ai_family = PF_UNSPEC;
+#ifdef WITH_UDP
+  if ((soap->omode & SOAP_IO_UDP))
+    hints.ai_socktype = SOCK_DGRAM;
+  else
+#endif
+    hints.ai_socktype = SOCK_STREAM;
+  hints.ai_flags = AI_PASSIVE;
+  soap->errmode = 2;
+  err = getaddrinfo(host, soap_int2s(soap, port), &hints, &addrinfo);
+  if (addrinfo)
+  { res = *addrinfo;
+    soap->peer = *((struct sockaddr_storage*)addrinfo->ai_addr);
+    soap->peerlen = addrinfo->ai_addrlen;
+    res.ai_addr = (struct sockaddr*)&soap->peer;
+    res.ai_addrlen = soap->peerlen;
+    freeaddrinfo(addrinfo);
+  }
+  if (err)
+  { soap_set_receiver_error(soap, gai_strerror(err), "getaddrinfo failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+  soap->master = socket(res.ai_family, res.ai_socktype, res.ai_protocol);
+#else
+#ifdef WITH_UDP
+  if ((soap->omode & SOAP_IO_UDP))
+    soap->master = (int)socket(AF_INET, SOCK_DGRAM, 0);
+  else
+#endif
+    soap->master = (int)socket(AF_INET, SOCK_STREAM, 0);
+#endif
+  soap->errmode = 0;
+  if (!soap_valid_socket(soap->master))
+  { soap->errnum = soap_socket_errno;
+    soap_set_receiver_error(soap, tcp_error(soap), "socket failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+#ifdef WITH_UDP
+  if ((soap->omode & SOAP_IO_UDP))
+    soap->socket = soap->master;
+#endif
+#ifdef SOCKET_CLOSE_ON_EXEC
+#ifdef WIN32
+#ifndef UNDER_CE
+  SetHandleInformation((HANDLE)soap->master, HANDLE_FLAG_INHERIT, 0);
+#endif
+#else
+  fcntl(soap->master, F_SETFD, 1);
+#endif
+#endif
+#ifndef WITH_LEAN
+  if (soap->bind_flags && setsockopt((SOAP_SOCKET)soap->master, SOL_SOCKET, soap->bind_flags, (char*)&set, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_receiver_error(soap, tcp_error(soap), "setsockopt failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+  if (((soap->imode | soap->omode) & SOAP_IO_KEEPALIVE) && setsockopt((SOAP_SOCKET)soap->master, SOL_SOCKET, SO_KEEPALIVE, (char*)&set, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_KEEPALIVE failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+  if (setsockopt((SOAP_SOCKET)soap->master, SOL_SOCKET, SO_SNDBUF, (char*)&len, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_SNDBUF failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+  if (setsockopt((SOAP_SOCKET)soap->master, SOL_SOCKET, SO_RCVBUF, (char*)&len, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_RCVBUF failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+#ifdef TCP_NODELAY
+  if (!(soap->omode & SOAP_IO_UDP) && setsockopt((SOAP_SOCKET)soap->master, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int)))
+  { soap->errnum = soap_socket_errno;
+    soap_set_receiver_error(soap, tcp_error(soap), "setsockopt TCP_NODELAY failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+#endif
+#endif
+#ifdef WITH_IPV6
+  soap->errmode = 0;
+  if (bind((SOAP_SOCKET)soap->master, res.ai_addr, res.ai_addrlen))
+  { soap->errnum = soap_socket_errno;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind to host\n"));
+    soap_closesock(soap);
+    soap_set_receiver_error(soap, tcp_error(soap), "bind failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }  
+#else
+  soap->peerlen = sizeof(soap->peer);
+  memset((void*)&soap->peer, 0, sizeof(soap->peer));
+  soap->peer.sin_family = AF_INET;
+  soap->errmode = 2;
+  if (host)
+  { if (soap->fresolve(soap, host, &soap->peer.sin_addr))
+    { soap_set_receiver_error(soap, tcp_error(soap), "get host by name failed in soap_bind()", SOAP_TCP_ERROR);
+      return SOAP_INVALID_SOCKET;
+    }
+  }
+  else
+    soap->peer.sin_addr.s_addr = htonl(INADDR_ANY);
+  soap->peer.sin_port = htons((short)port);
+  soap->errmode = 0;
+  if (bind((SOAP_SOCKET)soap->master, (struct sockaddr*)&soap->peer, soap->peerlen))
+  { soap->errnum = soap_socket_errno;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind to host\n"));
+    soap_closesock(soap);
+    soap_set_receiver_error(soap, tcp_error(soap), "bind failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+#endif
+  if (!(soap->omode & SOAP_IO_UDP) && listen((SOAP_SOCKET)soap->master, backlog))
+  { soap->errnum = soap_socket_errno;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind to host\n"));
+    soap_closesock(soap);
+    soap_set_receiver_error(soap, tcp_error(soap), "listen failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }  
+  return soap->master;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_poll(struct soap *soap)
+{ 
+#ifndef WITH_LEAN
+  struct timeval timeout;
+  fd_set rfd, sfd, xfd;
+  int r;
+  timeout.tv_sec = 0;
+  timeout.tv_usec = 0;
+  FD_ZERO(&rfd);
+  FD_ZERO(&sfd);
+  FD_ZERO(&xfd);
+  if (soap_valid_socket(soap->socket))
+  { FD_SET((SOAP_SOCKET)soap->socket, &rfd);
+    FD_SET((SOAP_SOCKET)soap->socket, &sfd);
+    FD_SET((SOAP_SOCKET)soap->socket, &xfd);
+    r = select((SOAP_SOCKET)(soap->socket + 1), &rfd, &sfd, &xfd, &timeout);
+    if (r > 0 && FD_ISSET((SOAP_SOCKET)soap->socket, &xfd))
+      r = -1;
+  }
+  else if (soap_valid_socket(soap->master))
+  { FD_SET((SOAP_SOCKET)soap->master, &sfd);
+    r = select((SOAP_SOCKET)(soap->master + 1), NULL, &sfd, NULL, &timeout);
+  }
+  else
+    return SOAP_OK;
+  if (r > 0)
+  { if (soap_valid_socket(soap->socket)
+     && FD_ISSET((SOAP_SOCKET)soap->socket, &sfd)
+     && (!FD_ISSET((SOAP_SOCKET)soap->socket, &rfd)
+      || recv((SOAP_SOCKET)soap->socket, soap->tmpbuf, 1, MSG_PEEK) > 0))
+      return SOAP_OK;
+  }
+  else if (r < 0)
+  { soap->errnum = soap_socket_errno;
+    if ((soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) && soap_socket_errno != SOAP_EINTR)
+    { soap_set_receiver_error(soap, tcp_error(soap), "select failed in soap_poll()", SOAP_TCP_ERROR);
+      return soap->error = SOAP_TCP_ERROR;
+    }
+  }
+  else
+    soap->errnum = 0;
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Polling: other end down on socket=%d select=%d\n", soap->socket, r));
+  return SOAP_EOF;
+#else
+  return SOAP_OK;
+#endif
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_accept(struct soap *soap, int s, struct sockaddr *a, int *n)
+{ int fd;
+  fd = (int)accept((SOAP_SOCKET)s, a, (SOAP_SOCKLEN_T*)n);     /* portability note: see SOAP_SOCKLEN_T definition in stdsoap2.h */
+#ifdef SOCKET_CLOSE_ON_EXEC
+#ifdef WIN32
+#ifndef UNDER_CE
+  SetHandleInformation((HANDLE)fd, HANDLE_FLAG_INHERIT, 0);
+#endif
+#else
+  fcntl(fd, F_SETFD, FD_CLOEXEC);
+#endif
+#endif
+  return fd;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_accept(struct soap *soap)
+{ int n = (int)sizeof(soap->peer);
+#ifndef WITH_LEAN
+  int len = SOAP_BUFLEN;
+  int set = 1;
+#endif
+  soap->error = SOAP_OK;
+#ifdef WITH_UDP
+  if ((soap->omode & SOAP_IO_UDP))
+    return soap->socket = soap->master;
+#endif
+  memset((void*)&soap->peer, 0, sizeof(soap->peer));
+  soap->socket = SOAP_INVALID_SOCKET;
+  soap->errmode = 0;
+  soap->keep_alive = 0;
+  if (soap_valid_socket(soap->master))
+  { for (;;)
+    { 
+#ifndef WITH_LEAN
+      if (soap->accept_timeout)
+      { struct timeval timeout;
+        fd_set fd;
+        if (soap->accept_timeout > 0)
+        { timeout.tv_sec = soap->accept_timeout;
+          timeout.tv_usec = 0;
+        }
+        else
+        { timeout.tv_sec = -soap->accept_timeout/1000000;
+          timeout.tv_usec = -soap->accept_timeout%1000000;
+        }
+        FD_ZERO(&fd);
+        FD_SET((SOAP_SOCKET)soap->master, &fd);
+        for (;;)
+        { int r = select((SOAP_SOCKET)(soap->master + 1), &fd, &fd, NULL, &timeout);
+          if (r > 0)
+            break;
+          if (!r)
+          { soap->errnum = 0;
+            soap_set_receiver_error(soap, "Timeout", "accept failed in soap_accept()", SOAP_TCP_ERROR);
+            return SOAP_INVALID_SOCKET;
+          }
+          if (soap_socket_errno != SOAP_EINTR)
+          { soap->errnum = soap_socket_errno;
+            soap_closesock(soap);
+            soap_set_sender_error(soap, tcp_error(soap), "accept failed in soap_accept()", SOAP_TCP_ERROR);
+            return SOAP_INVALID_SOCKET;
+          }
+        }
+#if defined(WIN32)
+       { u_long nonblocking = 1;
+          ioctlsocket((SOAP_SOCKET)soap->master, FIONBIO, &nonblocking);
+        }
+#elif defined(VXWORKS)
+        { vx_nonblocking = TRUE;
+          ioctl((SOAP_SOCKET)soap->master, FIONBIO, (int)(&vx_nonblocking));
+        }
+#else
+        fcntl((SOAP_SOCKET)soap->master, F_SETFL, fcntl((SOAP_SOCKET)soap->master, F_GETFL)|O_NONBLOCK);
+#endif
+      }
+      else
+#if defined(WIN32)
+      { u_long blocking = 0;
+        ioctlsocket((SOAP_SOCKET)soap->master, FIONBIO, &blocking);
+      }
+#elif defined(VXWORKS)
+      { vx_nonblocking = FALSE;
+        ioctl((SOAP_SOCKET)soap->master, FIONBIO, (int)(&vx_nonblocking));
+      }
+#else
+        fcntl((SOAP_SOCKET)soap->master, F_SETFL, fcntl((SOAP_SOCKET)soap->master, F_GETFL)&~O_NONBLOCK);
+#endif
+#endif
+      soap->socket = soap->faccept(soap, soap->master, (struct sockaddr*)&soap->peer, &n);
+      soap->peerlen = (size_t)n;
+      if (soap_valid_socket(soap->socket))
+      {
+#ifdef WITH_IPV6
+/* Use soap->host to store the numeric form of the remote host */
+        getnameinfo((struct sockaddr*)&soap->peer, n, soap->host, sizeof(soap->host), NULL, 0, NI_NUMERICHOST | NI_NUMERICSERV); 
+        DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Accept socket %d from %s\n", soap->socket, soap->host));
+        soap->ip = 0; /* info stored in soap->peer and soap->host */
+        soap->port = 0; /* info stored in soap->peer and soap->host */
+#else
+        soap->ip = ntohl(soap->peer.sin_addr.s_addr);
+        soap->port = (int)ntohs(soap->peer.sin_port); /* does not return port number on some systems */
+        DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Accept socket %d at port %d from IP %d.%d.%d.%d\n", soap->socket, soap->port, (int)(soap->ip>>24)&0xFF, (int)(soap->ip>>16)&0xFF, (int)(soap->ip>>8)&0xFF, (int)soap->ip&0xFF));
+#endif
+#ifndef WITH_LEAN
+       if (soap->accept_flags & SO_LINGER)
+        { struct linger linger;
+          memset((void*)&linger, 0, sizeof(linger));
+          linger.l_onoff = 1;
+          linger.l_linger = 0;
+         if (setsockopt((SOAP_SOCKET)soap->socket, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(struct linger)))
+          { soap->errnum = soap_socket_errno;
+           soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_LINGER failed in soap_accept()", SOAP_TCP_ERROR);
+           soap_closesock(soap);
+            return SOAP_INVALID_SOCKET;
+         }
+        }
+        if ((soap->accept_flags & ~SO_LINGER) && setsockopt((SOAP_SOCKET)soap->socket, SOL_SOCKET, soap->accept_flags & ~SO_LINGER, (char*)&set, sizeof(int)))
+        { soap->errnum = soap_socket_errno;
+          soap_set_receiver_error(soap, tcp_error(soap), "setsockopt failed in soap_accept()", SOAP_TCP_ERROR);
+         soap_closesock(soap);
+          return SOAP_INVALID_SOCKET;
+        }
+        if (((soap->imode | soap->omode) & SOAP_IO_KEEPALIVE) && setsockopt((SOAP_SOCKET)soap->socket, SOL_SOCKET, SO_KEEPALIVE, (char*)&set, sizeof(int)))
+        { soap->errnum = soap_socket_errno;
+          soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_KEEPALIVE failed in soap_accept()", SOAP_TCP_ERROR);
+         soap_closesock(soap);
+          return SOAP_INVALID_SOCKET;
+        }
+        if (setsockopt((SOAP_SOCKET)soap->socket, SOL_SOCKET, SO_SNDBUF, (char*)&len, sizeof(int)))
+        { soap->errnum = soap_socket_errno;
+          soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_SNDBUF failed in soap_accept()", SOAP_TCP_ERROR);
+         soap_closesock(soap);
+          return SOAP_INVALID_SOCKET;
+        }
+        if (setsockopt((SOAP_SOCKET)soap->socket, SOL_SOCKET, SO_RCVBUF, (char*)&len, sizeof(int)))
+        { soap->errnum = soap_socket_errno;
+          soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_RCVBUF failed in soap_accept()", SOAP_TCP_ERROR);
+         soap_closesock(soap);
+          return SOAP_INVALID_SOCKET;
+        }
+#ifdef TCP_NODELAY
+        if (!(soap->omode & SOAP_IO_UDP) && setsockopt((SOAP_SOCKET)soap->socket, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int)))
+        { soap->errnum = soap_socket_errno;
+          soap_set_receiver_error(soap, tcp_error(soap), "setsockopt TCP_NODELAY failed in soap_accept()", SOAP_TCP_ERROR);
+         soap_closesock(soap);
+          return SOAP_INVALID_SOCKET;
+        }
+#endif
+#endif
+        if (soap->accept_timeout)
+        {
+#if defined(WIN32)
+          u_long blocking = 0;
+          ioctlsocket((SOAP_SOCKET)soap->master, FIONBIO, &blocking);
+          ioctlsocket((SOAP_SOCKET)soap->socket, FIONBIO, &blocking);
+#elif defined(VXWORKS)
+          vx_nonblocking = FALSE;
+          ioctl((SOAP_SOCKET)soap->master, FIONBIO, (int)(&vx_nonblocking));
+          ioctl((SOAP_SOCKET)soap->socket, FIONBIO, (int)(&vx_nonblocking));
+#elif defined(PALM)
+          fcntl((SOAP_SOCKET)soap->master, F_SETFL, fcntl((SOAP_SOCKET)soap->master, F_GETFL,0)&~O_NONBLOCK);
+          fcntl((SOAP_SOCKET)soap->socket, F_SETFL, fcntl((SOAP_SOCKET)soap->socket, F_GETFL,0)&~O_NONBLOCK);
+#elif defined(SYMBIAN)
+          long blocking = 0;
+          ioctl((SOAP_SOCKET)soap->master, 0/*FIONBIO*/, &blocking);
+#else
+          fcntl((SOAP_SOCKET)soap->master, F_SETFL, fcntl((SOAP_SOCKET)soap->master, F_GETFL)&~O_NONBLOCK);
+          fcntl((SOAP_SOCKET)soap->socket, F_SETFL, fcntl((SOAP_SOCKET)soap->socket, F_GETFL)&~O_NONBLOCK);
+#endif
+       }
+        soap->keep_alive = (((soap->imode | soap->omode) & SOAP_IO_KEEPALIVE) != 0);
+        return soap->socket;
+      }
+      if (soap_socket_errno != SOAP_EINTR && soap_socket_errno != SOAP_EAGAIN)
+      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Accept failed from %s\n", soap->host));
+        soap->errnum = soap_socket_errno;
+        soap_set_receiver_error(soap, tcp_error(soap), "accept failed in soap_accept()", SOAP_TCP_ERROR);
+       soap_closesock(soap);
+        return SOAP_INVALID_SOCKET;
+      }
+    }
+  }
+  else
+  { soap->errnum = 0;
+    soap_set_receiver_error(soap, tcp_error(soap), "no master socket in soap_accept()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_disconnect(struct soap *soap)
+{
+#ifdef WITH_OPENSSL
+  if (soap->ssl)
+  { int r, s = 0;
+    if (soap->session)
+      SSL_SESSION_free(soap->session);
+    if (*soap->host)
+    { soap->session = SSL_get1_session(soap->ssl);
+      if (soap->session)
+      { strcpy(soap->session_host, soap->host);
+        soap->session_port = soap->port;
+      }
+    }
+    r = SSL_shutdown(soap->ssl);
+    if (r != 1)
+    { s = ERR_get_error();
+      if (s)
+      { if (soap_valid_socket(soap->socket))
+        { soap->fshutdownsocket(soap, (SOAP_SOCKET)soap->socket, 1);
+          soap->socket = SOAP_INVALID_SOCKET;
+        }
+        r = SSL_shutdown(soap->ssl);
+      }
+    }
+    DBGLOG(TEST, if (s) SOAP_MESSAGE(fdebug, "Shutdown failed: %d\n", SSL_get_error(soap->ssl, r)));
+    SSL_free(soap->ssl);
+    soap->ssl = NULL;
+    if (s)
+      return SOAP_SSL_ERROR;
+    ERR_remove_state(0);
+  }
+#endif
+  if (soap_valid_socket(soap->socket) && !(soap->omode & SOAP_IO_UDP))
+  { soap->fshutdownsocket(soap, (SOAP_SOCKET)soap->socket, 2);
+    soap->fclosesocket(soap, (SOAP_SOCKET)soap->socket);
+    soap->socket = SOAP_INVALID_SOCKET;
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_closesocket(struct soap *soap, SOAP_SOCKET fd)
+{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Close socket %d\n", (int)fd));
+  return closesocket(fd);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_shutdownsocket(struct soap *soap, SOAP_SOCKET fd, int how)
+{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Shutdown socket %d how=%d\n", (int)fd, how));
+  return shutdown(fd, how);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_closesock(struct soap *soap)
+{ register int status = soap->error;
+  if (status == SOAP_EOF || status == SOAP_TCP_ERROR || status == SOAP_SSL_ERROR || !soap->keep_alive)
+  { if (soap->fclose && (soap->error = soap->fclose(soap)))
+      return soap->error;
+    soap->keep_alive = 0;
+  }
+#ifdef WITH_ZLIB
+  if (soap->zlib_state == SOAP_ZLIB_DEFLATE)
+    deflateEnd(&soap->d_stream);
+  else if (soap->zlib_state == SOAP_ZLIB_INFLATE)
+    inflateEnd(&soap->d_stream);
+  soap->zlib_state = SOAP_ZLIB_NONE;
+#endif
+  return soap->error = status;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+size_t
+SOAP_FMAC2
+soap_hash(register const char *s)
+{ register size_t h = 0;
+  while (*s)
+    h = 65599*h + *s++;
+  return h % SOAP_IDHASH;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+static void
+soap_init_pht(struct soap *soap)
+{ register int i;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Initializing pointer hashtable\n"));
+  soap->pblk = NULL;
+  soap->pidx = 0;
+  for (i = 0; i < (int)SOAP_PTRHASH; i++)
+    soap->pht[i] = NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap*
+SOAP_FMAC2
+soap_new1(soap_mode mode)
+{ return soap_new2(mode, mode);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap*
+SOAP_FMAC2
+soap_new()
+{ return soap_new2(SOAP_IO_DEFAULT, SOAP_IO_DEFAULT);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap*
+SOAP_FMAC2
+soap_new2(soap_mode imode, soap_mode omode)
+{ struct soap *soap = (struct soap*)malloc(sizeof(struct soap));
+  if (soap)
+    soap_init2(soap, imode, omode);
+  return soap;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+static void
+soap_free_pht(struct soap *soap)
+{ register struct soap_pblk *pb, *next;
+  register int i;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free pointer hashtable\n"));
+  for (pb = soap->pblk; pb; pb = next)
+  { next = pb->next;
+    SOAP_FREE(soap, pb);
+  }
+  soap->pblk = NULL;
+  soap->pidx = 0;
+  for (i = 0; i < (int)SOAP_PTRHASH; i++)
+    soap->pht[i] = NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_embed(struct soap *soap, const void *p, const struct soap_array *a, int n, const char *tag, int type)
+{ register int i;
+  struct soap_plist *pp;
+  if (soap->version != 1)
+    soap->encoding = 1;
+  if (a)
+    i = soap_array_pointer_lookup(soap, p, a, n, type, &pp);
+  else
+    i = soap_pointer_lookup(soap, p, type, &pp);
+  if (i)
+  { if (soap_is_embedded(soap, pp)
+     || soap_is_single(soap, pp))
+      return 0;
+    soap_set_embedded(soap, pp);
+  }
+  return i;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_pointer_lookup(struct soap *soap, const void *p, int type, struct soap_plist **ppp)
+{ register struct soap_plist *pp;
+  *ppp = NULL;
+  if (p)
+  { for (pp = soap->pht[soap_hash_ptr(p)]; pp; pp = pp->next)
+    { if (pp->ptr == p && pp->type == type)
+      { *ppp = pp;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup location=%p type=%d id=%d\n", p, type, pp->id));
+        return pp->id;
+      }
+    }
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup location=%p type=%d: not found\n", p, type));
+  return 0;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_pointer_enter(struct soap *soap, const void *p, const struct soap_array *a, int n, int type, struct soap_plist **ppp)
+{ register int h;
+  register struct soap_plist *pp;
+  if (!soap->pblk || soap->pidx >= SOAP_PTRBLK)
+  { register struct soap_pblk *pb = (struct soap_pblk*)SOAP_MALLOC(soap, sizeof(struct soap_pblk));
+    if (!pb)
+    { soap->error = SOAP_EOM;
+      return 0;
+    }
+    pb->next = soap->pblk;
+    soap->pblk = pb;
+    soap->pidx = 0;
+  }
+  *ppp = pp = &soap->pblk->plist[soap->pidx++];
+  if (a)
+    h = soap_hash_ptr(a->__ptr);
+  else
+    h = soap_hash_ptr(p);
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Pointer enter location=%p array=%p size=%d dim=%d type=%d id=%d\n", p, a?a->__ptr:NULL, a?a->__size:0, n, type, soap->idnum+1));
+  pp->next = soap->pht[h];
+  pp->type = type;
+  pp->mark1 = 0;
+  pp->mark2 = 0;
+  pp->ptr = p;
+  pp->array = a;
+  soap->pht[h] = pp;
+  pp->id = ++soap->idnum;
+  return pp->id;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_array_pointer_lookup(struct soap *soap, const void *p, const struct soap_array *a, int n, int type, struct soap_plist **ppp)
+{ register struct soap_plist *pp;
+  *ppp = NULL;
+  if (!p || !a->__ptr)
+    return 0;
+  for (pp = soap->pht[soap_hash_ptr(a->__ptr)]; pp; pp = pp->next)
+  { if (pp->type == type && pp->array && pp->array->__ptr == a->__ptr)
+    { register int i;
+      for (i = 0; i < n; i++)
+        if (((const int*)&pp->array->__size)[i] != ((const int*)&a->__size)[i])
+         break;
+      if (i == n)
+      { *ppp = pp;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array lookup location=%p type=%d id=%d\n", a->__ptr, type, pp->id));
+        return pp->id;
+      }
+    }
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array lookup location=%p type=%d: not found\n", a->__ptr, type));
+  return 0;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_begin_count(struct soap *soap)
+{ soap_clr_attr(soap);
+  soap_set_local_namespaces(soap);
+#ifndef WITH_LEANER
+  if ((soap->mode & SOAP_ENC_DIME) || (soap->omode & SOAP_ENC_DIME))
+    soap->mode = soap->omode | SOAP_IO_LENGTH | SOAP_ENC_DIME;
+  else
+#endif
+  { soap->mode = soap->omode;
+    if ((soap->mode & SOAP_IO) == SOAP_IO_STORE
+     || (((soap->mode & SOAP_IO) == SOAP_IO_CHUNK || (soap->mode & SOAP_ENC_XML))
+#ifndef WITH_LEANER
+      && !soap->fpreparesend
+#endif
+      ))
+      soap->mode &= ~SOAP_IO_LENGTH;
+    else
+      soap->mode |= SOAP_IO_LENGTH;
+  }
+#ifdef WITH_ZLIB
+  if ((soap->mode & SOAP_ENC_ZLIB) && (soap->mode & SOAP_IO) == SOAP_IO_FLUSH)
+  { if (!(soap->mode & SOAP_ENC_DIME))
+      soap->mode &= ~SOAP_IO_LENGTH;
+    if (soap->mode & SOAP_ENC_XML)
+      soap->mode |= SOAP_IO_BUFFER;
+    else
+      soap->mode |= SOAP_IO_STORE;
+  }
+#endif
+  if (!soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH))
+    soap->mode |= SOAP_XML_TREE;
+#ifndef WITH_LEANER
+  if ((soap->mode & SOAP_ENC_MTOM) && (soap->mode & SOAP_ENC_DIME))
+    soap->mode |= SOAP_ENC_MIME;
+  else
+    soap->mode &= ~SOAP_ENC_MTOM;
+  if (soap->mode & SOAP_ENC_MIME)
+    soap_select_mime_boundary(soap);
+  soap->dime.list = soap->dime.last;   /* keep track of last DIME attachment */
+#endif
+  soap->count = 0;
+  soap->ns = 0;
+  soap->null = 0;
+  soap->position = 0;
+  soap->mustUnderstand = 0;
+  soap->encoding = 0;
+  soap->part = SOAP_BEGIN;
+  soap->idnum = 0;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Begin count phase (socket=%d mode=0x%x count=%lu)\n", soap->socket, soap->mode, (unsigned long)soap->count));
+#ifndef WITH_LEANER
+  soap->dime.count = 0; /* count # of attachments */
+  soap->dime.size = 0; /* accumulate total size of attachments */
+  if (soap->fprepareinit && (soap->mode & SOAP_IO) != SOAP_IO_STORE)
+    return soap->error = soap->fprepareinit(soap);   
+#endif
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_end_count(struct soap *soap)
+{ 
+#ifndef WITH_LEANER
+  if (soap->fpreparefinal)
+    return soap->error = soap->fpreparefinal(soap);
+#endif
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of count phase\n"));
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_begin_send(struct soap *soap)
+{ soap->error = SOAP_OK;
+  soap_clr_attr(soap);
+  soap_set_local_namespaces(soap);
+  soap->mode = soap->omode | (soap->mode & (SOAP_IO_LENGTH | SOAP_ENC_DIME));
+#ifdef WITH_ZLIB
+  if ((soap->mode & SOAP_ENC_ZLIB) && (soap->mode & SOAP_IO) == SOAP_IO_FLUSH)
+  { if (soap->mode & SOAP_ENC_XML)
+      soap->mode |= SOAP_IO_BUFFER;
+    else
+      soap->mode |= SOAP_IO_STORE;
+  }
+#endif
+#ifdef WITH_UDP
+  if ((soap->mode & SOAP_IO_UDP))
+  { soap->mode |= SOAP_ENC_XML;
+    if (soap->count > SOAP_BUFLEN)
+      return soap->error = SOAP_UDP_ERROR;
+  }
+#endif
+  if ((soap->mode & SOAP_IO) == SOAP_IO_FLUSH && soap_valid_socket(soap->socket))
+  { if (soap->count || (soap->mode & SOAP_IO_LENGTH) || (soap->mode & SOAP_ENC_XML))
+      soap->mode |= SOAP_IO_BUFFER;
+    else
+      soap->mode |= SOAP_IO_STORE;
+  }
+  soap->mode &= ~SOAP_IO_LENGTH;
+  if ((soap->mode & SOAP_IO) == SOAP_IO_STORE)
+    soap_new_block(soap);
+  if (!(soap->mode & SOAP_IO_KEEPALIVE))
+    soap->keep_alive = 0;
+  if (!soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH))
+    soap->mode |= SOAP_XML_TREE;
+#ifndef WITH_LEANER
+  if ((soap->mode & SOAP_ENC_MTOM) && (soap->mode & SOAP_ENC_DIME))
+  { soap->mode |= SOAP_ENC_MIME;
+    soap->mode &= ~SOAP_ENC_DIME;
+  }
+  else
+    soap->mode &= ~SOAP_ENC_MTOM;
+  if (soap->mode & SOAP_ENC_MIME)
+    soap_select_mime_boundary(soap);
+#ifdef WIN32
+#ifndef UNDER_CE
+#ifndef WITH_FASTCGI
+  if (!soap_valid_socket(soap->socket)) /* Set win32 stdout or soap->sendfd to BINARY, e.g. to support DIME */
+#ifdef __BORLANDC__
+    setmode((SOAP_SOCKET)soap->sendfd, O_BINARY);
+#else
+    _setmode((SOAP_SOCKET)soap->sendfd, _O_BINARY);
+#endif
+#endif
+#endif
+#endif
+#endif
+  if (soap->mode & SOAP_IO)
+  { soap->bufidx = 0;
+    soap->buflen = 0;
+  }
+  soap->chunksize = 0;
+  soap->ns = 0;
+  soap->null = 0;
+  soap->position = 0;
+  soap->mustUnderstand = 0;
+  soap->encoding = 0;
+  soap->idnum = 0;
+  soap->level = 0;
+#ifdef WITH_ZLIB
+  soap->z_ratio_out = 1.0;
+  if ((soap->mode & SOAP_ENC_ZLIB) && soap->zlib_state != SOAP_ZLIB_DEFLATE)
+  {
+#ifdef WITH_GZIP
+    memcpy(soap->z_buf, "\37\213\10\0\0\0\0\0\0\377", 10);
+    soap->d_stream.next_out = (Byte*)soap->z_buf + 10;
+    soap->d_stream.avail_out = SOAP_BUFLEN - 10;
+    soap->z_crc = crc32(0L, NULL, 0);
+    if (deflateInit2(&soap->d_stream, soap->z_level, Z_DEFLATED, -MAX_WBITS, 8, Z_DEFAULT_STRATEGY) != Z_OK)
+#else
+    soap->d_stream.next_out = (Byte*)soap->z_buf;
+    soap->d_stream.avail_out = SOAP_BUFLEN;
+    if (deflateInit(&soap->d_stream, soap->z_level) != Z_OK)
+#endif
+      return soap->error = SOAP_ZLIB_ERROR;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflate initialized\n"));
+    soap->zlib_state = SOAP_ZLIB_DEFLATE;
+  }
+#endif
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Begin send phase (socket=%d mode=0x%x count=%lu)\n", soap->socket, soap->mode, (unsigned long)soap->count));
+  soap->part = SOAP_BEGIN;
+#ifndef WITH_LEANER
+  if (soap->fprepareinit && (soap->mode & SOAP_IO) == SOAP_IO_STORE)
+    soap->fprepareinit(soap);   
+#endif
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_embedded(struct soap *soap, const void *p, int t)
+{ struct soap_plist *pp;
+  if (soap_pointer_lookup(soap, p, t, &pp))
+  { pp->mark1 = 1;
+    pp->mark2 = 1;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded %p type=%d mark set to 1\n", p, t));
+  }
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_reference(struct soap *soap, const void *p, int t)
+{ struct soap_plist *pp;
+  if (!p || (soap->mode & SOAP_XML_TREE))
+    return 1;
+  if (soap_pointer_lookup(soap, p, t, &pp))
+  { if (pp->mark1 == 0)
+    { pp->mark1 = 2;
+      pp->mark2 = 2;
+    }
+  }
+  else if (soap_pointer_enter(soap, p, NULL, 0, t, &pp))
+  { pp->mark1 = 0;
+    pp->mark2 = 0;
+  }
+  else
+    return 1;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Reference %p type=%d (%d %d)\n", p, t, (int)pp->mark1, (int)pp->mark2));
+  return pp->mark1;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_array_reference(struct soap *soap, const void *p, const struct soap_array *a, int n, int t)
+{ register int i;
+  struct soap_plist *pp;
+  if (!p || !a->__ptr)
+    return 1;
+  i = soap_array_pointer_lookup(soap, p, a, n, t, &pp);
+  if (i)
+  { if (pp->mark1 == 0)
+    { pp->mark1 = 2;
+      pp->mark2 = 2;
+    }
+  }
+  else if (!soap_pointer_enter(soap, p, a, n, t, &pp))
+    return 1;
+  else
+  { pp->mark1 = 0;
+    pp->mark2 = 0;
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array reference %p ptr=%p dim=%d type=%d (%d %d)\n", p, a->__ptr, n, t, (int)pp->mark1, (int)pp->mark2));
+  return pp->mark1;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_embedded_id(struct soap *soap, int id, const void *p, int t)
+{ struct soap_plist *pp;
+  if (soap->mode & SOAP_XML_TREE)
+    return id;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded_id %p type=%d id=%d\n", p, t, id));
+  if (soap->version == 1 && soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH) && soap->part != SOAP_IN_HEADER)
+  { if (id < 0)
+    { id = soap_pointer_lookup(soap, p, t, &pp);
+      if (id)
+      { if (soap->mode & SOAP_IO_LENGTH)
+          pp->mark1 = 2;
+        else
+          pp->mark2 = 2;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded_id multiref id=%d %p type=%d = (%d %d)\n", id, p, t, (int)pp->mark1, (int)pp->mark2));
+      }
+      return -1;
+    }
+    return id;
+  }
+  if (id < 0)
+    id = soap_pointer_lookup(soap, p, t, &pp);
+  else if (id && !soap_pointer_lookup(soap, p, t, &pp))
+    return 0;
+  if (id && pp)
+  { if (soap->mode & SOAP_IO_LENGTH)
+      pp->mark1 = 1;
+    else
+      pp->mark2 = 1;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded_id embedded ref id=%d %p type=%d = (%d %d)\n", id, p, t, (int)pp->mark1, (int)pp->mark2));
+  }
+  return id;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_is_embedded(struct soap *soap, struct soap_plist *pp)
+{ if (!pp)
+    return 0;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Is embedded? %d %d\n", (int)pp->mark1, (int)pp->mark2));
+  if (soap->version == 1 && soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH) && soap->part != SOAP_IN_HEADER)
+  { if (soap->mode & SOAP_IO_LENGTH)
+      return pp->mark1 != 0;
+    return pp->mark2 != 0;
+  }
+  if (soap->mode & SOAP_IO_LENGTH)
+    return pp->mark1 == 1;
+  return pp->mark2 == 1;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_is_single(struct soap *soap, struct soap_plist *pp)
+{ if (soap->part == SOAP_IN_HEADER)
+    return 1;
+  if (!pp)
+    return 0;
+  if (soap->mode & SOAP_IO_LENGTH)
+    return pp->mark1 == 0;
+  return pp->mark2 == 0;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_embedded(struct soap *soap, struct soap_plist *pp)
+{ if (!pp)
+    return;
+  if (soap->mode & SOAP_IO_LENGTH)
+    pp->mark1 = 1;
+  else
+    pp->mark2 = 1;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_attachment(struct soap *soap, const char *tag, int id, const void *p, const struct soap_array *a, const char *aid, const char *atype, const char *aoptions, int n, const char *type, int t) 
+{ struct soap_plist *pp;
+  int i;
+  if (!p || !a->__ptr || (!aid && !atype))
+    return soap_element_id(soap, tag, id, p, a, n, type, t);
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Attachment tag='%s' id='%s' (%d) type='%s'\n", tag, aid?aid:"", id, atype?atype:""));
+  i = soap_array_pointer_lookup(soap, p, a, n, t, &pp);
+  if (!i)
+  { i = soap_pointer_enter(soap, p, a, n, t, &pp);
+    if (!i)
+    { soap->error = SOAP_EOM;
+      return -1;
+    }
+  }
+  if (id < 0)
+    id = i;
+  if (!aid)
+  { sprintf(soap->tmpbuf, soap->dime_id_format, id);
+    aid = soap_strdup(soap, soap->tmpbuf);
+  }
+  /* Add MTOM xop:Include element when necessary */
+  /* TODO: this code to be obsoleted with new import/xop.h conventions */
+  if ((soap->mode & SOAP_ENC_MTOM) && strcmp(tag, "xop:Include"))
+  { if (soap_element_begin_out(soap, tag, 0, type)
+     || soap_element_href(soap, "xop:Include", 0, "href", aid)
+     || soap_element_end_out(soap, tag))
+      return soap->error;
+  }
+  else if (soap_element_href(soap, tag, 0, "href", aid))
+    return soap->error;
+  if (soap->mode & SOAP_IO_LENGTH)
+  { if (pp->mark1 != 3)
+    { struct soap_multipart *content;
+      if (soap->mode & SOAP_ENC_MTOM)
+        content = soap_new_multipart(soap, &soap->mime.first, &soap->mime.last, (char*)a->__ptr, a->__size);
+      else
+        content = soap_new_multipart(soap, &soap->dime.first, &soap->dime.last, (char*)a->__ptr, a->__size);
+      if (!content)
+      { soap->error = SOAP_EOM;
+        return -1;
+      }
+      if (!strncmp(aid, "cid:", 4)) /* RFC 2111 */
+      { if (soap->mode & SOAP_ENC_MTOM)
+        { char *s = (char*)soap_malloc(soap, strlen(aid) - 1);
+         if (s)
+         { *s = '<';
+           strcpy(s + 1, aid + 4);
+           strcat(s, ">");
+           content->id = s;
+          }
+        }
+        else
+          content->id = aid + 4;
+      }
+      else
+        content->id = aid;
+      content->type = atype;
+      content->options = aoptions;
+      content->encoding = SOAP_MIME_BINARY;
+      pp->mark1 = 3;
+    }
+  }
+  else
+    pp->mark2 = 3;
+  return -1;
+}
+#endif
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+static void
+soap_init_iht(struct soap *soap)
+{ register int i;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Initializing ID hashtable\n"));
+  for (i = 0; i < SOAP_IDHASH; i++)
+    soap->iht[i] = NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+static void
+soap_free_iht(struct soap *soap)
+{ register int i;
+  register struct soap_ilist *ip, *p;
+  register struct soap_flist *fp, *fq;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free ID hashtable\n"));
+  for (i = 0; i < SOAP_IDHASH; i++)
+  { for (ip = soap->iht[i]; ip; ip = p)
+    { for (fp = ip->flist; fp; fp = fq)
+      { fq = fp->next;
+        SOAP_FREE(soap, fp);
+      }
+      p = ip->next;
+      SOAP_FREE(soap, ip);
+    }
+    soap->iht[i] = NULL;
+  }
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+struct soap_ilist *
+SOAP_FMAC2
+soap_lookup(struct soap *soap, const char *id)
+{ register struct soap_ilist *ip;
+  for (ip = soap->iht[soap_hash(id)]; ip; ip = ip->next)
+    if (!strcmp(ip->id, id))
+      return ip;
+  return NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+struct soap_ilist *
+SOAP_FMAC2
+soap_enter(struct soap *soap, const char *id)
+{ register size_t h;
+  register struct soap_ilist *ip;
+  ip = (struct soap_ilist*)SOAP_MALLOC(soap, sizeof(struct soap_ilist) + strlen(id));
+  if (ip)
+  { h = soap_hash(id);
+    strcpy(ip->id, id);
+    ip->next = soap->iht[h];
+    soap->iht[h] = ip;
+    return ip;
+  }
+  return NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void*
+SOAP_FMAC2
+soap_malloc(struct soap *soap, size_t n)
+{ register char *p;
+  if (!n)
+    return (void*)SOAP_NON_NULL;
+  if (!soap)
+    return SOAP_MALLOC(soap, n);
+  n += (-(long)n) & 7;
+  if (!(p = (char*)SOAP_MALLOC(soap, n + sizeof(void*) + sizeof(size_t))))
+  { soap->error = SOAP_EOM;
+    return NULL;
+  }
+  /* keep chain of alloced cells for later destruction */
+  soap->alloced = 1;
+  *(void**)(p + n) = soap->alist;
+  *(size_t*)(p + n + sizeof(void*)) = n;
+  soap->alist = p + n;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+static void
+soap_init_mht(struct soap *soap)
+{ register int i;
+  for (i = 0; i < (int)SOAP_PTRHASH; i++)
+    soap->mht[i] = NULL;
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+static void
+soap_free_mht(struct soap *soap)
+{ register int i;
+  register struct soap_mlist *mp, *mq;
+  for (i = 0; i < (int)SOAP_PTRHASH; i++)
+  { for (mp = soap->mht[i]; mp; mp = mq)
+    { mq = mp->next;
+      if (mp->live)
+        fprintf(stderr, "%s(%d): malloc() = %p not freed (memory leak or forgot to call soap_end()?)\n", mp->file, mp->line, mp->ptr);
+      free(mp);
+    }
+    soap->mht[i] = NULL;
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+SOAP_FMAC1
+void*
+SOAP_FMAC2
+soap_track_malloc(struct soap *soap, const char *file, int line, size_t size)
+{ register void *p = malloc(size);
+  if (soap)
+  { register int h = soap_hash_ptr(p);
+    register struct soap_mlist *mp = (struct soap_mlist*)malloc(sizeof(struct soap_mlist));
+    if (soap->fdebug[SOAP_INDEX_TEST])
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): malloc(%lu) = %p\n", file, line, (unsigned long)size, p));
+    mp->next = soap->mht[h];
+    mp->ptr = p;
+    mp->file = file;
+    mp->line = line;
+    mp->live = 1;
+    soap->mht[h] = mp;
+  }
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_track_free(struct soap *soap, const char *file, int line, void *p)
+{ register int h = soap_hash_ptr(p);
+  register struct soap_mlist *mp;
+  for (mp = soap->mht[h]; mp; mp = mp->next)
+    if (mp->ptr == p)
+      break;
+  if (mp)
+  { if (mp->live)
+    { free(p);
+      if (soap->fdebug[SOAP_INDEX_TEST])
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): free(%p)\n", file, line, p));
+      mp->live = 0;
+    }
+    else
+      fprintf(stderr, "%s(%d): free(%p) double free of pointer malloced at %s(%d)\n", file, line, p, mp->file, mp->line);
+  }
+  else
+    fprintf(stderr, "%s(%d): free(%p) pointer not malloced\n", file, line, p);
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+static void
+soap_track_unlink(struct soap *soap, const void *p)
+{ register int h = soap_hash_ptr(p);
+  register struct soap_mlist *mp;
+  for (mp = soap->mht[h]; mp; mp = mp->next)
+    if (mp->ptr == p)
+      break;
+  if (mp)
+    mp->live = 0;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_dealloc(struct soap *soap, void *p)
+{ if (!soap)
+    return;
+  if (p)
+  { register char **q;
+    for (q = (char**)&soap->alist; *q; q = *(char***)q)
+    { if (p == (void*)(*q - *(size_t*)(*q + sizeof(void*))))
+      { *q = **(char***)q;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Freed data at %p\n", p));
+        SOAP_FREE(soap, p);
+        return;
+      }
+    }
+    soap_delete(soap, p);
+  }
+  else
+  { register char *q;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free all soap_malloc() data\n"));
+    while (soap->alist)
+    { q = (char*)soap->alist;
+      soap->alist = *(void**)q;
+      q -= *(size_t*)(q + sizeof(void*));
+      SOAP_FREE(soap, q);
+    }
+  }
+  /* we must assume these were deallocated: */
+  soap->action = NULL;
+  soap->fault = NULL;
+  soap->header = NULL;
+  soap->userid = NULL;
+  soap->passwd = NULL;
+  soap->authrealm = NULL;
+#ifndef WITH_LEANER
+  soap_clr_mime(soap);
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_delete(struct soap *soap, void *p)
+{ register struct soap_clist **cp = &soap->clist;
+  if (p)
+  { while (*cp)
+    { if (p == (*cp)->ptr)
+      { register struct soap_clist *q = *cp;
+        *cp = q->next;
+        q->fdelete(q);
+        SOAP_FREE(soap, q);
+        return;
+      }
+      cp = &(*cp)->next;
+    }
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not dealloc data %p: address not in list\n", p));
+  }
+  else
+  { while (*cp)
+    { register struct soap_clist *q = *cp;
+      *cp = q->next;
+      if (q->ptr == (void*)soap->fault)
+        soap->fault = NULL; /* this was deallocated */
+      else if (q->ptr == (void*)soap->header)
+        soap->header = NULL; /* this was deallocated */
+      q->fdelete(q);
+      SOAP_FREE(soap, q);
+    }
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+struct soap_clist *
+SOAP_FMAC2
+soap_link(struct soap *soap, void *p, int t, int n, void (*fdelete)(struct soap_clist*))
+{ register struct soap_clist *cp;
+  if ((cp = (struct soap_clist*)SOAP_MALLOC(soap, sizeof(struct soap_clist))))
+  { cp->next = soap->clist;
+    cp->type = t;
+    cp->size = n; 
+    cp->ptr = p;
+    cp->fdelete = fdelete;
+    soap->clist = cp;
+  }
+  return cp;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_unlink(struct soap *soap, const void *p)
+{ register char **q;
+  register struct soap_clist **cp;
+  if (!soap || !p)
+    return;
+  for (q = (char**)&soap->alist; *q; q = *(char***)q)
+  { if (p == (void*)(*q - *(size_t*)(*q + sizeof(void*))))
+    { *q = **(char***)q;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unlinked data %p\n", p));
+#ifdef SOAP_DEBUG
+      soap_track_unlink(soap, p);
+#endif
+      return;
+    }
+  }
+  for (cp = &soap->clist; *cp; cp = &(*cp)->next)
+  { if (p == (*cp)->ptr)
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unlinked class instance %p\n", p));
+      q = (char**)*cp;
+      *cp = (*cp)->next;
+      SOAP_FREE(soap, q);
+      return;
+    }
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_lookup_type(struct soap *soap, const char *id)
+{ register struct soap_ilist *ip;
+  if (id && *id)
+  { ip = soap_lookup(soap, id);
+    if (ip)
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup id='%s' type=%d\n", id, ip->type));
+      return ip->type;
+    }
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "lookup type id='%s' NOT FOUND! Need to get it from xsi:type\n", id));
+  return 0;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+void*
+SOAP_FMAC2
+soap_id_lookup(struct soap *soap, const char *id, void **p, int t, size_t n, unsigned int k)
+{ struct soap_ilist *ip;
+  void **q;
+  if (!p || !id || !*id)
+    return p;
+  ip = soap_lookup(soap, id); /* lookup pointer to hash table entry for string id */
+  if (!ip)
+  { ip = soap_enter(soap, id); /* new hash table entry for string id */
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding first href='%s' type=%d %p (%u bytes)\n", id, t, p, (unsigned int)n));
+    ip->type = t;
+    ip->size = n; 
+    ip->link = p;
+    ip->copy = NULL;
+    ip->flist = NULL;
+    ip->ptr = NULL;
+    ip->level = k;
+    *p = NULL;
+  }
+  else if (ip->ptr)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolved href='%s' type=%d location=%p (%u bytes)\n", id, t, ip->ptr, (unsigned int)n));
+    if (ip->type != t)
+    { strcpy(soap->id, id);
+      soap->error = SOAP_HREF;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Type incompatibility: id type=%d href type=%d\n", ip->type, t));
+      return NULL;
+    }
+    while (ip->level < k)
+    { q = (void**)soap_malloc(soap, sizeof(void*));  
+      if (!q)
+        return NULL;
+      *p = (void*)q;
+      p = q;
+      k--;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Descending one level...\n"));
+    }
+    *p = ip->ptr;
+  }
+  else if (ip->level > k)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving level %u pointers to href='%s'\n", ip->level, id));
+    while (ip->level > k)
+    { void *s, **r = &ip->link;
+      q = (void**)ip->link;
+      while (q)
+      { *r = (void*)soap_malloc(soap, sizeof(void*));
+        s = *q;
+        *q = *r;
+        r = (void**)*r;
+        q = (void**)s;
+      }
+      *r = NULL;
+      ip->size = n; 
+      ip->copy = NULL;
+      ip->level = ip->level - 1;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Descending one level...\n"));
+    }
+    q = (void**)ip->link;
+    ip->link = p;
+    *p = (void*)q;
+  }
+  else
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarded href='%s' type=%d location=%p (%u bytes)\n", id, t, p, (unsigned int)n));
+    while (ip->level < k)
+    { q = (void**)soap_malloc(soap, sizeof(void*));  
+      *p = q;
+      p = q;
+      k--;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Descending one level...\n"));
+    }
+    q = (void**)ip->link;
+    ip->link = p;
+    *p = (void*)q;
+  }
+  return p;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+void*
+SOAP_FMAC2
+soap_id_forward(struct soap *soap, const char *href, void *p, int st, int tt, size_t n, unsigned int k, void (*fcopy)(struct soap*, int, int, void*, const void*, size_t))
+{ struct soap_ilist *ip;
+  if (!p || !href || !*href)
+    return p;
+  ip = soap_lookup(soap, href); /* lookup pointer to hash table entry for string id */
+  if (!ip)
+  { ip = soap_enter(soap, href); /* new hash table entry for string id */
+    ip->type = st;
+    ip->size = n;
+    ip->link = NULL;
+    ip->copy = NULL;
+    ip->ptr = NULL;
+    ip->level = 0;
+    ip->flist = NULL;
+    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "New entry href='%s' type=%d size=%lu level=%d location=%p\n", href, st, (unsigned long)n, k, p));
+  }
+  else if (ip->type != st || (ip->level == k && ip->size != n))
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Type incompatibility id='%s' expect type=%d size=%lu level=%u got type=%d size=%lu\n", href, ip->type, (unsigned long)ip->size, k, st, (unsigned long)n));
+    strcpy(soap->id, href);
+    soap->error = SOAP_HREF;
+    return NULL;
+  }
+  if (fcopy || n < sizeof(void*) || *href != '#')
+  { register struct soap_flist *fp = (struct soap_flist*)SOAP_MALLOC(soap, sizeof(struct soap_flist));
+    if (!fp)
+    { soap->error = SOAP_EOM;
+      return NULL;
+    }
+    fp->next = ip->flist;
+    fp->type = tt;
+    fp->ptr = p;
+    fp->level = k;
+    if (fcopy)
+      fp->fcopy = fcopy;
+    else
+      fp->fcopy = soap_fcopy;
+    ip->flist = fp;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding type=%d (target type=%d) size=%lu location=%p level=%u href='%s'\n", st, tt, (unsigned long)n, p, k, href));
+  }
+  else
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding copying address %p for type=%d href='%s'\n", p, st, href));
+    *(void**)p = ip->copy;
+    ip->copy = p;
+  }
+  return p;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void*
+SOAP_FMAC2
+soap_id_enter(struct soap *soap, const char *id, void *p, int t, size_t n, unsigned int k, const char *type, const char *arrayType, void *(*finstantiate)(struct soap*, int, const char*, const char*, size_t*))
+{
+#ifndef WITH_NOIDREF
+  struct soap_ilist *ip;
+#endif
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Enter id='%s' type=%d loc=%p size=%lu level=%u\n", id, t, p, (unsigned long)n, k));
+  soap->alloced = 0;
+  if (!p)
+  { if (finstantiate)
+      p = finstantiate(soap, t, type, arrayType, &n);
+    else
+      p = soap_malloc(soap, n);
+    if (p)
+      soap->alloced = 1;
+  }
+#ifndef WITH_NOIDREF
+  if (!id || !*id)
+#endif
+    return p;
+#ifndef WITH_NOIDREF
+  ip = soap_lookup(soap, id); /* lookup pointer to hash table entry for string id */
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Lookup entry id='%s for location=%p'\n", id, p));
+  if (!ip)
+  { ip = soap_enter(soap, id); /* new hash table entry for string id */
+    ip->type = t;
+    ip->link = NULL;
+    ip->copy = NULL;
+    ip->flist = NULL;
+    ip->size = n;
+    ip->ptr = p;
+    ip->level = k;
+    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "New entry id='%s' type=%d size=%lu level=%u location=%p\n", id, t, (unsigned long)n, k, p));
+  }
+  else if ((ip->type != t || (ip->level == k && ip->size != n)) && (ip->copy || ip->flist))
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Type incompatibility id='%s' expect type=%d size=%lu level=%u got type=%d size=%lu\n", id, ip->type, (unsigned long)ip->size, k, t, (unsigned long)n));
+    strcpy(soap->id, id);
+    soap->error = SOAP_HREF;
+    return NULL;
+  }
+  else if (ip->ptr)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Multiply defined id='%s'\n", id));
+    strcpy(soap->id, id);
+    soap->error = SOAP_DUPLICATE_ID;
+    return NULL;
+  }
+  else 
+  { ip->size = n;
+    ip->ptr = p;
+    ip->level = k;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Update entry id='%s' type=%d location=%p size=%lu level=%u\n", id, t, p, (unsigned long)n, k));
+  }
+  return ip->ptr;
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_fcopy(struct soap *soap, int st, int tt, void *p, const void *q, size_t n)
+{ DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Copying data type=%d (target type=%d) %p -> %p (%lu bytes)\n", st, tt, q, p, (unsigned long)n));
+  memcpy(p, q, n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_end_send(struct soap *soap)
+{ 
+#ifndef WITH_LEANER
+  if (soap->dime.list)
+  { /* SOAP body referenced attachments must appear first */
+    soap->dime.last->next = soap->dime.first;
+    soap->dime.first = soap->dime.list->next;
+    soap->dime.list->next = NULL;
+    soap->dime.last = soap->dime.list;
+  }
+  if (soap_putdime(soap) || soap_putmime(soap))
+    return soap->error;
+  soap->mime.list = NULL;
+  soap->mime.first = NULL;
+  soap->mime.last = NULL;
+  soap->dime.list = NULL;
+  soap->dime.first = NULL;
+  soap->dime.last = NULL;
+#endif
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End send\n"));
+  if (soap->mode & SOAP_IO) /* need to flush the remaining data in buffer */
+  { if (soap_flush(soap))
+#ifdef WITH_ZLIB
+    { if (soap->mode & SOAP_ENC_ZLIB && soap->zlib_state == SOAP_ZLIB_DEFLATE)
+      { soap->zlib_state = SOAP_ZLIB_NONE;
+        deflateEnd(&soap->d_stream);
+      }
+      return soap->error;
+    }
+#else
+      return soap->error;
+#endif
+#ifdef WITH_ZLIB
+    if (soap->mode & SOAP_ENC_ZLIB)
+    { int r;
+      soap->d_stream.avail_in = 0;
+      do
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflating remainder\n"));
+        r = deflate(&soap->d_stream, Z_FINISH);
+        if (soap->d_stream.avail_out != SOAP_BUFLEN)
+        { if (soap_flush_raw(soap, soap->z_buf, SOAP_BUFLEN - soap->d_stream.avail_out))
+          { soap->zlib_state = SOAP_ZLIB_NONE;
+            deflateEnd(&soap->d_stream);
+            return soap->error;
+         }
+          soap->d_stream.next_out = (Byte*)soap->z_buf;
+          soap->d_stream.avail_out = SOAP_BUFLEN;
+        }
+      } while (r == Z_OK);
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflated %lu->%lu bytes\n", soap->d_stream.total_in, soap->d_stream.total_out));
+      soap->z_ratio_out = (float)soap->d_stream.total_out / (float)soap->d_stream.total_in;
+      soap->mode &= ~SOAP_ENC_ZLIB;
+      soap->zlib_state = SOAP_ZLIB_NONE;
+      if (deflateEnd(&soap->d_stream) != Z_OK || r != Z_STREAM_END)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unable to end deflate: %s\n", soap->d_stream.msg?soap->d_stream.msg:""));
+        return soap->error = SOAP_ZLIB_ERROR;
+      }
+#ifdef WITH_GZIP
+      soap->z_buf[0] = soap->z_crc & 0xFF;
+      soap->z_buf[1] = (soap->z_crc >> 8) & 0xFF;
+      soap->z_buf[2] = (soap->z_crc >> 16) & 0xFF;
+      soap->z_buf[3] = (soap->z_crc >> 24) & 0xFF;
+      soap->z_buf[4] = soap->d_stream.total_in & 0xFF;
+      soap->z_buf[5] = (soap->d_stream.total_in >> 8) & 0xFF;
+      soap->z_buf[6] = (soap->d_stream.total_in >> 16) & 0xFF;
+      soap->z_buf[7] = (soap->d_stream.total_in >> 24) & 0xFF;
+      if (soap_flush_raw(soap, soap->z_buf, 8))
+        return soap->error;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "gzip crc32=%lu\n", (unsigned long)soap->z_crc));
+#endif
+    }
+#endif
+    if ((soap->mode & SOAP_IO) == SOAP_IO_STORE)
+    { char *p;
+#ifndef WITH_NOHTTP
+      if (!(soap->mode & SOAP_ENC_XML))
+      { soap->mode--;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending buffered message of length %u\n", (unsigned int)soap->blist->size));
+        if (soap->status >= SOAP_POST)
+          soap->error = soap->fpost(soap, soap->endpoint, soap->host, soap->port, soap->path, soap->action, soap->blist->size);
+        else if (soap->status != SOAP_STOP)
+          soap->error = soap->fresponse(soap, soap->status, soap->blist->size);
+        if (soap->error || soap_flush(soap))
+          return soap->error;
+        soap->mode++;
+      }
+#endif
+      for (p = soap_first_block(soap); p; p = soap_next_block(soap))
+      { DBGMSG(SENT, p, soap_block_size(soap));
+        if ((soap->error = soap->fsend(soap, p, soap_block_size(soap))))
+        { soap_end_block(soap);
+          return soap->error;
+        }
+      }
+      soap_end_block(soap);
+    }
+#ifndef WITH_LEANER
+    else if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
+    { DBGMSG(SENT, "\r\n0\r\n\r\n", 7);
+      if ((soap->error = soap->fsend(soap, "\r\n0\r\n\r\n", 7)))
+        return soap->error;
+    }
+#endif
+  }
+#ifdef WITH_OPENSSL
+  if (!soap->ssl && soap_valid_socket(soap->socket) && !soap->keep_alive && !(soap->omode & SOAP_IO_UDP))
+    soap->fshutdownsocket(soap, (SOAP_SOCKET)soap->socket, 1); /* Send TCP FIN */
+#else
+  if (soap_valid_socket(soap->socket) && !soap->keep_alive && !(soap->omode & SOAP_IO_UDP))
+    soap->fshutdownsocket(soap, (SOAP_SOCKET)soap->socket, 1); /* Send TCP FIN */
+#endif
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of send phase\n"));
+  soap->omode &= ~SOAP_XML_SEC;
+  soap->count = 0;
+  soap->part = SOAP_END;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_end_recv(struct soap *soap)
+{ soap->part = SOAP_END;
+#ifndef WITH_LEANER
+  if ((soap->mode & SOAP_ENC_DIME) && soap_getdime(soap))
+    return soap->error;
+  soap->dime.list = soap->dime.first;
+  soap->dime.first = NULL;
+  soap->dime.last = NULL;
+  if ((soap->mode & SOAP_ENC_MIME) && soap_getmime(soap))
+    return soap->error;
+  soap->mime.list = soap->mime.first;
+  soap->mime.first = NULL;
+  soap->mime.last = NULL;
+  soap->mime.boundary = NULL;
+#endif
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "End of receive message ok\n"));
+#ifdef WITH_ZLIB
+  if (soap->mode & SOAP_ENC_ZLIB)
+  { soap->mode &= ~SOAP_ENC_ZLIB;
+    memcpy(soap->buf, soap->z_buf, SOAP_BUFLEN);
+    soap->bufidx = (char*)soap->d_stream.next_in - soap->z_buf;
+    soap->buflen = soap->z_buflen;
+    soap->zlib_state = SOAP_ZLIB_NONE;
+    if (inflateEnd(&soap->d_stream) != Z_OK)
+      return soap->error = SOAP_ZLIB_ERROR;
+#ifdef WITH_GZIP
+    if (soap->zlib_in == SOAP_ZLIB_GZIP)
+    { soap_wchar c;
+      short i;
+      for (i = 0; i < 8; i++)
+      { if ((int)(c = soap_getchar(soap)) == EOF)
+          return soap->error = SOAP_EOF;
+        soap->z_buf[i] = (char)c;
+      }
+      if (soap->z_crc != ((uLong)(unsigned char)soap->z_buf[0] | ((uLong)(unsigned char)soap->z_buf[1] << 8) | ((uLong)(unsigned char)soap->z_buf[2] << 16) | ((uLong)(unsigned char)soap->z_buf[3] << 24)))
+      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Gzip error: crc check failed, message corrupted? (crc32=%lu)\n", (unsigned long)soap->z_crc));
+        return soap->error = SOAP_ZLIB_ERROR;
+      }
+      if (soap->d_stream.total_out != ((uLong)(unsigned char)soap->z_buf[4] | ((uLong)(unsigned char)soap->z_buf[5] << 8) | ((uLong)(unsigned char)soap->z_buf[6] << 16) | ((uLong)(unsigned char)soap->z_buf[7] << 24)))
+      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Gzip error: incorrect message length\n"));
+        return soap->error = SOAP_ZLIB_ERROR;
+      }
+    }
+#endif
+  }
+#endif
+  if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
+    while ((int)soap_getchar(soap) != EOF) /* advance to last chunk */
+      ;
+  if (soap->fdisconnect && (soap->error = soap->fdisconnect(soap)))
+    return soap->error;
+#ifndef WITH_NOIDREF
+  return soap_resolve(soap);
+#else
+#ifndef WITH_LEANER
+  if (soap->xlist)
+  { if (soap->mode & SOAP_ENC_MTOM)
+      return soap->error = SOAP_MIME_HREF;
+    return soap->error = SOAP_DIME_HREF;
+  }
+#endif
+  return SOAP_OK;
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_free(struct soap *soap)
+{ register struct Namespace *ns;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free namespace stack\n"));
+  while (soap->nlist)
+  { register struct soap_nlist *np = soap->nlist->next;
+    SOAP_FREE(soap, soap->nlist);
+    soap->nlist = np;
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free any remaining temp blocks\n"));
+  while (soap->blist)
+    soap_end_block(soap);
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free attribute storage\n"));
+  while (soap->attributes)
+  { register struct soap_attribute *tp = soap->attributes->next;
+    if (soap->attributes->value)
+      SOAP_FREE(soap, soap->attributes->value);
+    SOAP_FREE(soap, soap->attributes);
+    soap->attributes = tp;
+  }
+#ifdef WITH_FAST
+  if (soap->labbuf)
+    SOAP_FREE(soap, soap->labbuf);
+  soap->labbuf = NULL;
+  soap->lablen = 0;
+  soap->labidx = 0;
+#endif
+  ns = soap->local_namespaces;
+  if (ns)
+  { for (; ns->id; ns++)
+    { if (ns->out)
+      { if (soap->encodingStyle == ns->out)
+          soap->encodingStyle = SOAP_STR_EOS;
+        SOAP_FREE(soap, ns->out);
+        ns->out = NULL;
+      }
+      if (soap->encodingStyle == ns->ns)
+        soap->encodingStyle = SOAP_STR_EOS;
+    }
+    SOAP_FREE(soap, soap->local_namespaces);
+    soap->local_namespaces = NULL;
+  }
+#ifndef WITH_LEANER
+  while (soap->xlist)
+  { struct soap_xlist *xp = soap->xlist->next;
+    SOAP_FREE(soap, soap->xlist);
+    soap->xlist = xp;
+  }
+#endif
+#ifndef WITH_NOIDREF
+  soap_free_pht(soap);
+  soap_free_iht(soap);
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+static void
+soap_init_logs(struct soap *soap)
+{ int i;
+  for (i = 0; i < SOAP_MAXLOGS; i++)
+  { soap->logfile[i] = NULL;
+    soap->fdebug[i] = NULL;
+  }
+}
+#endif
+
+/******************************************************************************/
+#if !defined(WITH_LEAN) || defined(SOAP_DEBUG)
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_open_logfile(struct soap *soap, int i)
+{ if (soap->logfile[i])
+    soap->fdebug[i] = fopen(soap->logfile[i], i < 2 ? "ab" : "a");
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+static void
+soap_close_logfile(struct soap *soap, int i)
+{ if (soap->fdebug[i])
+  { fclose(soap->fdebug[i]);
+    soap->fdebug[i] = NULL;
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_close_logfiles(struct soap *soap)
+{ int i;
+  for (i = 0; i < SOAP_MAXLOGS; i++)
+    soap_close_logfile(soap, i);
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+static void
+soap_set_logfile(struct soap *soap, int i, const char *logfile)
+{ char *s = NULL;
+  soap_close_logfile(soap, i);
+  if (soap->logfile[i])
+    SOAP_FREE(soap, (void*)soap->logfile[i]);
+  if (logfile)
+    if ((s = (char*)SOAP_MALLOC(soap, strlen(logfile) + 1)))
+      strcpy(s, logfile);
+  soap->logfile[i] = s;
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_recv_logfile(struct soap *soap, const char *logfile)
+{ soap_set_logfile(soap, SOAP_INDEX_RECV, logfile);
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_sent_logfile(struct soap *soap, const char *logfile)
+{ soap_set_logfile(soap, SOAP_INDEX_SENT, logfile);
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_test_logfile(struct soap *soap, const char *logfile)
+{ soap_set_logfile(soap, SOAP_INDEX_TEST, logfile);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap*
+SOAP_FMAC2
+soap_copy(struct soap *soap)
+{ return soap_copy_context((struct soap*)malloc(sizeof(struct soap)), soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap*
+SOAP_FMAC2
+soap_copy_context(struct soap *copy, struct soap *soap)
+{ if (copy)
+  { register struct soap_plugin *p;
+    memcpy(copy, soap, sizeof(struct soap));
+    copy->copy = 1;
+    copy->user = NULL;
+    copy->error = SOAP_OK;
+    copy->userid = NULL;
+    copy->passwd = NULL;
+    copy->nlist = NULL;
+    copy->blist = NULL;
+    copy->clist = NULL;
+    copy->alist = NULL;
+    copy->attributes = NULL;
+#ifdef WITH_FAST
+    copy->labbuf = NULL;
+    copy->lablen = 0;
+    copy->labidx = 0;
+#endif
+#ifdef SOAP_DEBUG
+    soap_init_mht(copy);
+#endif
+    copy->local_namespaces = NULL;
+#ifndef WITH_NOIDREF
+    soap_init_iht(copy);
+    soap_init_pht(copy);
+#endif
+    copy->header = NULL;
+    copy->fault = NULL;
+    copy->action = NULL;
+    *copy->host = '\0';
+#ifndef WITH_LEAN
+#ifdef WITH_COOKIES
+    copy->cookies = soap_copy_cookies(copy);
+#else
+    copy->cookies = NULL;
+#endif
+#endif
+#ifdef SOAP_DEBUG
+    soap_init_logs(copy);
+    soap_set_recv_logfile(copy, soap->logfile[SOAP_INDEX_RECV]);
+    soap_set_sent_logfile(copy, soap->logfile[SOAP_INDEX_SENT]);
+    soap_set_test_logfile(copy, soap->logfile[SOAP_INDEX_TEST]);
+#endif
+    copy->plugins = NULL;
+    for (p = soap->plugins; p; p = p->next)
+    { register struct soap_plugin *q = (struct soap_plugin*)SOAP_MALLOC(copy, sizeof(struct soap_plugin));
+      if (!q)
+        return NULL;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying plugin '%s'\n", p->id));
+      *q = *p;
+      if (p->fcopy && (soap->error = p->fcopy(copy, q, p)))
+      { SOAP_FREE(copy, q);
+        return NULL;
+      }
+      q->next = copy->plugins;
+      copy->plugins = q;
+    }
+  }
+  else
+    soap->error = SOAP_EOM;
+  return copy;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_init(struct soap *soap)
+{ soap->version = 0;
+  soap_imode(soap, SOAP_IO_DEFAULT);
+  soap_omode(soap, SOAP_IO_DEFAULT);
+  soap->copy = 0;
+  soap->plugins = NULL;
+  soap->user = NULL;
+  soap->userid = NULL;
+  soap->passwd = NULL;
+#ifndef WITH_NOHTTP
+  soap->fpost = http_post;
+  soap->fget = http_get;
+  soap->fform = NULL;
+  soap->fposthdr = http_post_header;
+  soap->fresponse = http_response;
+  soap->fparse = http_parse;
+  soap->fparsehdr = http_parse_header;
+#endif
+  soap->fconnect = NULL;
+  soap->fdisconnect = NULL;
+#ifndef WITH_NOIO
+#ifndef WITH_IPV6
+  soap->fresolve = tcp_gethost;
+#else
+  soap->fresolve = NULL;
+#endif
+  soap->faccept = tcp_accept;
+  soap->fopen = tcp_connect;
+  soap->fclose = tcp_disconnect;
+  soap->fclosesocket = tcp_closesocket;
+  soap->fshutdownsocket = tcp_shutdownsocket;
+  soap->fsend = fsend;
+  soap->frecv = frecv;
+  soap->fpoll = soap_poll;
+#else
+  soap->fopen = NULL;
+  soap->fclose = NULL;
+  soap->fpoll = NULL;
+#endif
+#ifndef WITH_LEANER
+  soap->fprepareinit = NULL;
+  soap->fpreparesend = NULL;
+  soap->fpreparerecv = NULL;
+  soap->fpreparefinal = NULL;
+#endif
+  soap->fseterror = NULL;
+  soap->fignore = NULL;
+  soap->fserveloop = NULL;
+  soap->fplugin = fplugin;
+#ifndef WITH_LEANER
+  soap->fdimereadopen = NULL;
+  soap->fdimewriteopen = NULL;
+  soap->fdimereadclose = NULL;
+  soap->fdimewriteclose = NULL;
+  soap->fdimeread = NULL;
+  soap->fdimewrite = NULL;
+#endif
+  soap->float_format = "%.8g"; /* .8 preserves single FP precision as much as possible, but might not be very efficient */
+  soap->double_format = "%.17lg"; /* .17 preserves double FP precision as much as possible, but might not be very efficient */
+  soap->dime_id_format = "cid:id%d"; /* default DIME id format */
+  soap->http_version = "1.1";
+  soap->actor = NULL;
+  soap->max_keep_alive = SOAP_MAXKEEPALIVE;
+  soap->keep_alive = 0;
+  soap->recv_timeout = 0;
+  soap->send_timeout = 0;
+  soap->connect_timeout = 0;
+  soap->accept_timeout = 0;
+  soap->socket_flags = 0;
+  soap->connect_flags = 0;
+  soap->bind_flags = 0;
+  soap->accept_flags = 0;
+  soap->ip = 0;
+#ifdef WITH_FAST
+  soap->labbuf = NULL;
+  soap->lablen = 0;
+  soap->labidx = 0;
+#endif
+  soap->encodingStyle = SOAP_STR_EOS;
+#ifndef WITH_NONAMESPACES
+  soap->namespaces = namespaces;
+#else
+  soap->namespaces = NULL;
+#endif
+  soap->local_namespaces = NULL;
+  soap->nlist = NULL;
+  soap->blist = NULL;
+  soap->clist = NULL;
+  soap->alist = NULL;
+  soap->attributes = NULL;
+  soap->header = NULL;
+  soap->fault = NULL;
+  soap->master = SOAP_INVALID_SOCKET;
+  soap->socket = SOAP_INVALID_SOCKET;
+  soap->os = NULL;
+  soap->is = NULL;
+#ifndef WITH_LEANER
+  soap->dom = NULL;
+  soap->dime.list = NULL;
+  soap->dime.first = NULL;
+  soap->dime.last = NULL;
+  soap->mime.list = NULL;
+  soap->mime.first = NULL;
+  soap->mime.last = NULL;
+  soap->mime.boundary = NULL;
+  soap->mime.start = NULL;
+  soap->xlist = NULL;
+#endif
+#ifndef UNDER_CE
+  soap->recvfd = 0;
+  soap->sendfd = 1;
+#else
+  soap->recvfd = stdin;
+  soap->sendfd = stdout;
+#endif 
+  soap->host[0] = '\0';
+  soap->port = 0;
+  soap->action = NULL;
+  soap->proxy_host = NULL;
+  soap->proxy_port = 8080;
+  soap->proxy_userid = NULL;
+  soap->proxy_passwd = NULL;
+  soap->authrealm = NULL;
+  soap->prolog = NULL;
+#ifdef WITH_OPENSSL
+  soap->fsslauth = ssl_auth_init;
+  soap->fsslverify = ssl_verify_callback;
+  soap->bio = NULL;
+  soap->ssl = NULL;
+  soap->ctx = NULL;
+  soap->require_server_auth = 0;
+  soap->require_client_auth = 0;
+  soap->rsa = 0;
+  soap->keyfile = NULL;
+  soap->password = NULL;
+  soap->dhfile = NULL;
+  soap->cafile = NULL;
+  soap->capath = NULL;
+  soap->crlfile = NULL;
+  soap->randfile = NULL;
+  soap->session = NULL;
+#endif
+#ifdef WITH_ZLIB
+  soap->zlib_state = SOAP_ZLIB_NONE;
+  soap->zlib_in = SOAP_ZLIB_NONE;
+  soap->zlib_out = SOAP_ZLIB_NONE;
+  soap->d_stream.zalloc = NULL;
+  soap->d_stream.zfree = NULL;
+  soap->d_stream.opaque = NULL;
+  soap->z_level = 6;
+#endif
+#ifndef WITH_LEAN
+  soap->c14ninclude = NULL;
+  soap->c14nexclude = NULL;
+  soap->cookies = NULL;
+  soap->cookie_domain = NULL;
+  soap->cookie_path = NULL;
+  soap->cookie_max = 32;
+#endif
+#ifdef SOAP_DEBUG
+  soap_init_mht(soap);
+  soap_init_logs(soap);
+  soap_set_recv_logfile(soap, "RECV.log");
+  soap_set_sent_logfile(soap, "SENT.log");
+  soap_set_test_logfile(soap, NULL);
+#endif
+#ifdef WMW_RPM_IO
+  soap->rpmreqid = NULL;
+#endif /* WMW_RPM_IO */
+#ifdef PALM
+  palmNetLibOpen();
+#endif
+#ifndef WITH_NOIDREF
+  soap_init_iht(soap);
+  soap_init_pht(soap);
+#endif
+  soap_begin(soap);
+#ifdef SOAP_DEBUG
+  soap_set_test_logfile(soap, "TEST.log");
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_init1(struct soap *soap, soap_mode mode)
+{ soap_init2(soap, mode, mode);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_init2(struct soap *soap, soap_mode imode, soap_mode omode)
+{ soap_init(soap);
+  soap_imode(soap, imode);
+  soap_omode(soap, omode);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_begin(struct soap *soap)
+{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Initializing\n"));
+  if (!soap->keep_alive)
+  { soap->buflen = 0;
+    soap->bufidx = 0;
+  }
+  soap->keep_alive = (((soap->imode | soap->omode) & SOAP_IO_KEEPALIVE) != 0);
+  soap->null = 0;
+  soap->position = 0;
+  soap->encoding = 0;
+  soap->mustUnderstand = 0;
+  soap->mode = 0;
+  soap->ns = 0;
+  soap->part = SOAP_END;
+  soap->alloced = 0;
+  soap->count = 0;
+  soap->length = 0;
+  soap->cdata = 0;
+  soap->error = SOAP_OK;
+  soap->peeked = 0;
+  soap->ahead = 0;
+  soap->idnum = 0;
+  soap->level = 0;
+  soap->endpoint[0] = '\0';
+#ifndef WITH_LEANER
+  soap->dime.chunksize = 0;
+  soap->dime.buflen = 0;
+#endif
+  soap_free(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_end(struct soap *soap)
+{ register struct soap_clist *cp;
+  soap_free(soap);
+  soap_dealloc(soap, NULL);
+  while (soap->clist)
+  { cp = soap->clist->next;
+    SOAP_FREE(soap, soap->clist);
+    soap->clist = cp;
+  }
+  soap_closesock(soap);
+#ifdef SOAP_DEBUG
+  soap_close_logfiles(soap);
+#endif
+#ifdef PALM
+  palmNetLibClose();
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_namespaces(struct soap *soap, struct Namespace *p)
+{ register struct Namespace *ns = soap->local_namespaces;
+  register struct soap_nlist *np, *nq, *nr;
+  register unsigned int level = soap->level;
+  soap->namespaces = p;
+  soap->local_namespaces = NULL;
+  soap_set_local_namespaces(soap);
+  /* reverse the namespace list */
+  np = soap->nlist;
+  soap->nlist = NULL;
+  if (np)
+  { nq = np->next;
+    np->next = NULL;
+    while (nq)
+    { nr = nq->next;
+      nq->next = np;
+      np = nq;
+      nq = nr;
+    }
+  }
+  /* then push on new stack */
+  while (np)
+  { register const char *s;
+    soap->level = np->level; /* preserve element nesting level */
+    s = np->ns;
+    if (!s && np->index >= 0 && ns)
+    { s = ns[np->index].out;
+      if (!s)
+        s = ns[np->index].ns;
+    }
+    if (s && soap_push_namespace(soap, np->id, s))
+      return soap->error;
+    nq = np;
+    np = np->next;
+    SOAP_FREE(soap, nq);
+  }
+  if (ns)
+  { register int i;
+    for (i = 0; ns[i].id; i++)
+    { if (ns[i].out)
+      { SOAP_FREE(soap, ns[i].out);
+        ns[i].out = NULL;
+      }
+    }
+    SOAP_FREE(soap, ns);
+  }
+  soap->level = level; /* restore level */
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_local_namespaces(struct soap *soap)
+{ if (soap->namespaces && !soap->local_namespaces)
+  { register const struct Namespace *ns1;
+    register struct Namespace *ns2;
+    register size_t n = 1;
+    for (ns1 = soap->namespaces; ns1->id; ns1++)
+      n++;
+    n *= sizeof(struct Namespace);
+    ns2 = (struct Namespace*)SOAP_MALLOC(soap, n);
+    if (ns2)
+    { memcpy(ns2, soap->namespaces, n);
+      if (ns2[0].ns)
+      { if (!strcmp(ns2[0].ns, soap_env1))
+          soap->version = 1;
+        else
+          soap->version = 2;
+      }
+      soap->local_namespaces = ns2;
+    }
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+#ifndef PALM_1
+SOAP_FMAC1
+const char *
+SOAP_FMAC2
+soap_strsearch(const char *big, const char *little)
+{ size_t n = strlen(little);
+  const char *s = big;
+  while (s) 
+  { if (!strncmp(s, little, n) && (s[n] == '\0' || s[n] == ' '))
+      return s;
+    s = strchr(s, ' ');
+    if (s)
+      s++;
+  }
+  return NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+static struct soap_nlist *
+soap_lookup_ns(struct soap *soap, const char *tag, size_t n)
+{ register struct soap_nlist *np;
+  for (np = soap->nlist; np; np = np->next)
+  { if (!strncmp(np->id, tag, n) && !np->id[n])
+      return np;
+  }
+  return NULL;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+static struct soap_nlist *
+soap_push_ns(struct soap *soap, const char *id, const char *ns, short utilized)
+{ register struct soap_nlist *np;
+  size_t n, k;
+  if (soap_strsearch(soap->c14nexclude, id))
+    return NULL;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push namespace binding (level=%u) '%s' '%s'\n", soap->level, id, ns?ns:""));
+  if (!utilized)
+  { for (np = soap->nlist; np; np = np->next)
+    { if (!strcmp(np->id, id) && (!np->ns || !strcmp(np->ns, ns)))
+        break;
+    }
+    if (np)
+    { if (np->index == 1)
+        utilized = np->index;
+      else
+        return NULL;
+    }
+  }
+  n = strlen(id);
+  if (ns)
+    k = strlen(ns);
+  else
+    k = 0;
+  np = (struct soap_nlist*)SOAP_MALLOC(soap, sizeof(struct soap_nlist) + n + k + 1);
+  if (!np)
+  { soap->error = SOAP_EOM;
+    return NULL;
+  }
+  np->next = soap->nlist;
+  soap->nlist = np;
+  strcpy(np->id, id);
+  if (ns)
+  { np->ns = np->id + n + 1;
+    strcpy(np->ns, ns);
+  }
+  else
+    np->ns = NULL;
+  np->level = soap->level;
+  np->index = utilized;
+  return np;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+static void
+soap_utilize_ns(struct soap *soap, const char *tag, size_t n)
+{ register struct soap_nlist *np = soap_lookup_ns(soap, tag, n);
+  if (np)
+  { if (np->index == 0)
+      soap_push_ns(soap, np->id, np->ns, 1);
+  }
+  else
+  { strncpy(soap->tmpbuf, tag, n);
+    soap->tmpbuf[n] = '\0';
+    soap_push_ns(soap, soap->tmpbuf, NULL, 1);
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+static void
+soap_pop_ns(struct soap *soap)
+{ soap_pop_namespace(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element(struct soap *soap, const char *tag, int id, const char *type)
+{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element begin tag='%s' id='%d' type='%s'\n", tag, id, type?type:""));
+#ifdef WITH_DOM
+  if (soap->mode & SOAP_XML_DOM)
+  { register struct soap_dom_element *elt = (struct soap_dom_element*)soap_malloc(soap, sizeof(struct soap_dom_element));
+    if (!elt)
+      return soap->error = SOAP_EOM;
+    elt->soap = soap;
+    elt->next = NULL;
+    elt->prnt = soap->dom;
+    elt->name = soap_strdup(soap, tag);
+    elt->elts = NULL;
+    elt->atts = NULL;
+    elt->nstr = NULL;
+    elt->data = NULL;
+    elt->wide = NULL;
+    elt->node = NULL;
+    elt->type = 0;
+    elt->head = NULL;
+    elt->tail = NULL;
+    if (soap->dom)
+    { struct soap_dom_element *p = soap->dom->elts;
+      if (p)
+      { while (p->next)
+          p = p->next;
+        p->next = elt;
+      }
+      else
+        soap->dom->elts = elt;
+    }
+    soap->dom = elt;
+  }
+  else
+  {
+#endif
+    soap->level++;
+#ifndef WITH_LEAN
+    if (!soap->ns)
+    { if (!(soap->mode & SOAP_XML_CANONICAL)
+       && soap_send(soap, soap->prolog ? soap->prolog : "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"))
+        return soap->error;
+    }
+    else if (soap->mode & SOAP_XML_INDENT)
+    { if (soap->ns == 1 && soap_send_raw(soap, soap_indent, soap->level < sizeof(soap_indent) ? soap->level : sizeof(soap_indent) - 1))
+        return soap->error;
+      soap->body = 1;
+    }
+#endif
+    if (soap_send_raw(soap, "<", 1)
+     || soap_send(soap, tag))
+      return soap->error;
+#ifdef WITH_DOM
+  }
+#endif
+  if (!soap->ns)
+  { struct Namespace *ns;
+    for (ns = soap->local_namespaces; ns && ns->id; ns++)
+    { if (*ns->id && (ns->out || ns->ns))
+      { sprintf(soap->tmpbuf, "xmlns:%s", ns->id);
+        if (soap_attribute(soap, soap->tmpbuf, ns->out ? ns->out : ns->ns))
+          return soap->error;
+      }
+    }   
+  }
+  soap->ns = 1; /* start with 0 or 2, but should be one to continue */
+#ifndef WITH_LEAN
+  if (soap->mode & SOAP_XML_CANONICAL)
+  { const char *s = strchr(tag, ':');
+    if (s)
+      soap_utilize_ns(soap, tag, s - tag);
+  }
+#endif
+  if (id > 0)
+  { sprintf(soap->tmpbuf, "_%d", id);
+    if (soap_attribute(soap, "id", soap->tmpbuf))
+      return soap->error;
+  }
+  if (type && *type)
+  { if (soap_attribute(soap, "xsi:type", type))
+      return soap->error;
+#ifndef WITH_LEAN
+    if (soap->mode & SOAP_XML_CANONICAL)
+    { const char *s = strchr(type, ':');
+      if (s)
+        soap_utilize_ns(soap, type, s - type);
+    }
+#endif
+  }
+  if (soap->null && soap->position > 0)
+  { int i;
+    sprintf(soap->tmpbuf, "[%d", soap->positions[0]);
+    for (i = 1; i < soap->position; i++)
+      sprintf(soap->tmpbuf + strlen(soap->tmpbuf), ",%d", soap->positions[i]);
+    strcat(soap->tmpbuf, "]");
+    if (soap_attribute(soap, "SOAP-ENC:position", soap->tmpbuf))
+      return soap->error;
+  }
+  if (soap->mustUnderstand)
+  { if (soap->actor && *soap->actor)
+    { if (soap_attribute(soap, soap->version == 2 ? "SOAP-ENV:role" : "SOAP-ENV:actor", soap->actor))
+        return soap->error;
+    }
+    if (soap_attribute(soap, "SOAP-ENV:mustUnderstand", soap->version == 2 ? "true" : "1"))
+      return soap->error;
+    soap->mustUnderstand = 0;
+  }
+  if (soap->encoding)
+  { if (soap->encodingStyle && soap->local_namespaces)
+    { if (!*soap->encodingStyle)
+      { if (soap->local_namespaces[1].out)
+          soap->encodingStyle = soap->local_namespaces[1].out;
+        else
+          soap->encodingStyle = soap->local_namespaces[1].ns;
+      }
+      if (soap_attribute(soap, "SOAP-ENV:encodingStyle", soap->encodingStyle))
+        return soap->error;
+    }
+    soap->encoding = 0;
+  }
+  soap->null = 0;
+  soap->position = 0;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_begin_out(struct soap *soap, const char *tag, int id, const char *type)
+{ if (*tag == '-')
+    return SOAP_OK;
+  if (soap_element(soap, tag, id, type))
+    return soap->error;
+  return soap_element_start_end_out(soap, NULL);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+#ifndef HAVE_STRRCHR
+SOAP_FMAC1
+char*
+SOAP_FMAC2
+soap_strrchr(const char *s, int t)
+{ register char *r = NULL;
+  while (*s)
+    if (*s++ == t)
+      r = (char*)s - 1;
+  return r;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+#ifndef HAVE_STRTOL
+SOAP_FMAC1
+long
+SOAP_FMAC2
+soap_strtol(const char *s, char **t, int b)
+{ register long n = 0;
+  register int c;
+  while (*s > 0 && *s <= 32)
+    s++;
+  if (b == 10)
+  { short neg = 0;
+    if (*s == '-')
+    { s++;
+      neg = 1;
+    }
+    else if (*s == '+')
+      s++;
+    while ((c = *s) && c >= '0' && c <= '9')
+    { if (n >= 214748364 && (n > 214748364 || c >= '8'))
+        break;
+      n *= 10;
+      n += c - '0';
+      s++;
+    }
+    if (neg)
+      n = -n;
+  }
+  else /* b == 16 and value is always positive */
+  { while ((c = *s))
+    { if (c >= '0' && c <= '9')
+        c -= '0';
+      else if (c >= 'A' && c <= 'F')
+        c -= 'A' - 10;
+      else if (c >= 'a' && c <= 'f')
+        c -= 'a' - 10;
+      if (n > 0x07FFFFFF)
+        break;
+      n <<= 4;
+      n += c;
+      s++;
+    }
+  }
+  if (t)
+    *t = (char*)s;
+  return n;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+#ifndef HAVE_STRTOUL
+SOAP_FMAC1
+unsigned long
+SOAP_FMAC2
+soap_strtoul(const char *s, char **t, int b)
+{ unsigned long n = 0;
+  register int c;
+  while (*s > 0 && *s <= 32)
+    s++;
+  if (b == 10)
+  { if (*s == '+')
+      s++;
+    while ((c = *s) && c >= '0' && c <= '9')
+    { if (n >= 429496729 && (n > 429496729 || c >= '6'))
+        break;
+      n *= 10;
+      n += c - '0';
+      s++;
+    }
+  }
+  else /* b == 16 */
+  { while ((c = *s))
+    { if (c >= '0' && c <= '9')
+        c -= '0';
+      else if (c >= 'A' && c <= 'F')
+        c -= 'A' - 10;
+      else if (c >= 'a' && c <= 'f')
+        c -= 'a' - 10;
+      if (n > 0x0FFFFFFF)
+        break;
+      n <<= 4;
+      n += c;
+      s++;
+    }
+  }
+  if (t)
+    *t = (char*)s;
+  return n;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_array_begin_out(struct soap *soap, const char *tag, int id, const char *type, const char *offset)
+{ if (soap_element(soap, tag, id, "SOAP-ENC:Array"))
+    return soap->error;
+  if (soap->version == 2)
+  { const char *s;
+    s = soap_strrchr(type, '[');
+    if ((size_t)(s - type) < sizeof(soap->tmpbuf))
+    { strncpy(soap->tmpbuf, type, s - type);
+      soap->tmpbuf[s - type] = '\0';
+      if (type && *type && (soap_attribute(soap, "SOAP-ENC:itemType", soap->tmpbuf)))
+        return soap->error;
+      if (s && (soap_attribute(soap, "SOAP-ENC:arraySize", s + 1)))
+        return soap->error;
+    }
+  }
+  else
+  { if (offset && (soap_attribute(soap, "SOAP-ENC:offset", offset)))
+      return soap->error;
+    if (type && *type && (soap_attribute(soap, "SOAP-ENC:arrayType", type)))
+      return soap->error;
+  }
+#ifndef WITH_LEAN
+  if (type && *type && (soap->mode & SOAP_XML_CANONICAL))
+  { const char *s = strchr(type, ':');
+    if (s)
+      soap_utilize_ns(soap, type, s - type);
+  }
+#endif
+  return soap_element_start_end_out(soap, NULL);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_start_end_out(struct soap *soap, const char *tag)
+{ register struct soap_attribute *tp;
+#ifdef WITH_DOM
+  register struct soap_dom_attribute **att;
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { att = &soap->dom->atts;
+    for (tp = soap->attributes; tp; tp = tp->next)
+    { if (tp->visible)
+      { *att = (struct soap_dom_attribute*)soap_malloc(soap, sizeof(struct soap_dom_attribute));
+       if (!*att)
+         return soap->error = SOAP_EOM;
+       (*att)->next = NULL;
+        (*att)->nstr = NULL;
+        (*att)->name = soap_strdup(soap, tp->name);
+        (*att)->data = soap_strdup(soap, tp->value);
+        (*att)->wide = NULL;
+        (*att)->soap = soap;
+        tp->visible = 0;
+      }
+    }
+    return SOAP_OK;
+  }
+#endif
+#ifndef WITH_LEAN
+  if (soap->mode & SOAP_XML_CANONICAL)
+  { struct soap_nlist *np;
+    for (tp = soap->attributes; tp; tp = tp->next)
+    { if (tp->visible && tp->name)
+      { const char *s = strchr(tp->name, ':');
+        if (s)
+          soap_utilize_ns(soap, tp->name, s - tp->name);
+      }
+    }
+    for (np = soap->nlist; np; np = np->next)
+    { if (np->index == 1 && np->ns)
+      { sprintf(soap->tmpbuf, "xmlns:%s", np->id);
+        soap_set_attr(soap, soap->tmpbuf, np->ns);
+        np->index = 2;
+      }
+    }
+  }
+#endif
+  for (tp = soap->attributes; tp; tp = tp->next)
+  { if (tp->visible)
+    { if (soap_send(soap, " ") || soap_send(soap, tp->name))
+        return soap->error;
+      if (tp->visible == 2 && tp->value)
+        if (soap_send_raw(soap, "=\"", 2)
+        || soap_string_out(soap, tp->value, 1)
+        || soap_send_raw(soap, "\"", 1))
+          return soap->error;
+      tp->visible = 0;
+    }
+  }
+  if (tag)
+  { 
+#ifndef WITH_LEAN
+    if (soap->mode & SOAP_XML_CANONICAL)
+    { if (soap_send_raw(soap, ">", 1)
+       || soap_element_end_out(soap, tag))
+        return soap->error;
+    }
+    else
+#endif
+    soap->level--;     /* decrement level just before /> */
+    if (soap_send_raw(soap, "/>", 2))
+      return soap->error;
+    return SOAP_OK;
+  }
+  return soap_send_raw(soap, ">", 1);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_end_out(struct soap *soap, const char *tag)
+{ if (*tag == '-')
+    return SOAP_OK;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element ending tag='%s'\n", tag));
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { if (soap->dom->prnt)
+      soap->dom = soap->dom->prnt;
+    return SOAP_OK;
+  }
+#endif
+#ifndef WITH_LEAN
+  if (soap->mode & SOAP_XML_CANONICAL)
+    soap_pop_ns(soap);
+  if (soap->mode & SOAP_XML_INDENT)
+  { if (!soap->body)
+    { if (soap_send_raw(soap, soap_indent, soap->level < sizeof(soap_indent) ? soap->level : sizeof(soap_indent) - 1))
+        return soap->error;
+    }
+    soap->body = 0;
+  }
+#endif
+  if (soap_send_raw(soap, "</", 2)
+   || soap_send(soap, tag))
+    return soap->error;
+  soap->level--;       /* decrement level just before > */
+  return soap_send_raw(soap, ">", 1);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_ref(struct soap *soap, const char *tag, int id, int href)
+{ register int n = 0;
+  if (soap->version == 2)
+    n = 1;
+  sprintf(soap->href, "#_%d", href);
+  return soap_element_href(soap, tag, id, "href" + n, soap->href + n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_href(struct soap *soap, const char *tag, int id, const char *ref, const char *val)
+{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element '%s' reference %s='%s'\n", tag, ref, val));
+  if (soap_element(soap, tag, id, NULL)
+   || soap_attribute(soap, ref, val)
+   || soap_element_start_end_out(soap, tag))
+    return soap->error;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_null(struct soap *soap, const char *tag, int id, const char *type)
+{ struct soap_attribute *tp;
+  for (tp = soap->attributes; tp; tp = tp->next)
+    if (tp->visible)
+      break;
+  if (tp || (soap->version == 2 && soap->position > 0) || id > 0 || (soap->mode & SOAP_XML_NIL))
+  { if (soap_element(soap, tag, id, type))
+      return soap->error;
+    if (soap->part != SOAP_IN_HEADER && soap->encodingStyle)
+      if (soap_attribute(soap, "xsi:nil", "true"))
+        return soap->error;
+    return soap_element_start_end_out(soap, tag);
+  }
+  soap->null = 1;
+  soap->position = 0;
+  soap->mustUnderstand = 0;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_id(struct soap *soap, const char *tag, int id, const void *p, const struct soap_array *a, int n, const char *type, int t) 
+{ if (!p || (a && !a->__ptr))
+  { soap_element_null(soap, tag, id, type);
+    return -1;
+  }
+#ifndef WITH_NOIDREF
+  if (soap->mode & SOAP_XML_TREE)
+    return 0;
+  if (id < 0)
+  { struct soap_plist *pp;
+    if (a)
+      id = soap_array_pointer_lookup(soap, p, a, n, t, &pp);
+    else
+      id = soap_pointer_lookup(soap, p, t, &pp);
+    if (id)
+    { if (soap_is_embedded(soap, pp))
+      { soap_element_ref(soap, tag, 0, id);
+        return -1;
+      }
+      if (soap_is_single(soap, pp))
+        return 0;
+      soap_set_embedded(soap, pp);
+    }
+  }
+  return id;
+#else
+  return 0;
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_result(struct soap *soap, const char *tag)
+{ if (soap->version == 2 && soap->encodingStyle)
+    if (soap_element(soap, "SOAP-RPC:result", 0, NULL)
+     || soap_attribute(soap, "xmlns:SOAP-RPC", soap_rpc)
+     || soap_element_start_end_out(soap, NULL)
+     || soap_string_out(soap, tag, 0)
+     || soap_element_end_out(soap, "SOAP-RPC:result"))
+      return soap->error;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_attribute(struct soap *soap, const char *name, const char *value)
+{ 
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { register struct soap_dom_attribute *a = (struct soap_dom_attribute*)soap_malloc(soap, sizeof(struct soap_dom_attribute));
+    a->next = soap->dom->atts;
+    a->nstr = NULL;
+    a->name = soap_strdup(soap, name);
+    a->data = soap_strdup(soap, value);
+    a->wide = NULL;
+    a->soap = soap;
+    soap->dom->atts = a;
+    return SOAP_OK;
+  }
+#endif
+#ifndef WITH_LEAN
+  if (soap->mode & SOAP_XML_CANONICAL)
+  { /* TODO: consider using this code to handle default namespace
+    if (!strncmp(name, "xmlns", 5) && (name[5] == ':' || name[5] == '\0'))
+    { if (name[5] == ':')
+        soap_push_ns(soap, name + 6, value, 0);
+      else
+        soap_push_ns(soap, "", value, 0);
+    }
+    */
+    if (!strncmp(name, "xmlns:", 6))
+      soap_push_ns(soap, name + 6, value, 0);
+    else if (soap_set_attr(soap, name, value))
+      return soap->error;
+  }
+  else
+#endif
+  { if (soap_send(soap, " ") || soap_send(soap, name))
+      return soap->error;
+    if (value)
+      if (soap_send_raw(soap, "=\"", 2)
+       || soap_string_out(soap, value, 1)
+       || soap_send_raw(soap, "\"", 1))
+        return soap->error;
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_begin_in(struct soap *soap, const char *tag, int nillable)
+{ if (!soap_peek_element(soap))
+  { if (soap->other)
+      return soap->error = SOAP_TAG_MISMATCH;
+    if (tag && *tag == '-')
+      return SOAP_OK;
+    if (!(soap->error = soap_match_tag(soap, soap->tag, tag)))
+    { soap->peeked = 0;
+      if (soap->body)
+        soap->level++;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Begin element found (level=%u) '%s'='%s'\n", soap->level, soap->tag, tag?tag:"" ));
+      if (!nillable && soap->null && (soap->mode & SOAP_XML_STRICT))
+        return soap->error = SOAP_NULL;
+    }
+  }
+  else if (soap->error == SOAP_NO_TAG && tag && *tag == '-')
+    soap->error = SOAP_OK;
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_end_in(struct soap *soap, const char *tag)  
+{ register soap_wchar c;
+  register char *s;
+  register const char *t;
+  register int n = 0;
+  if (tag && *tag == '-')
+    return SOAP_OK;
+  soap->level--;
+  soap_pop_namespace(soap);
+#ifdef WITH_DOM
+  /* this whitespace or mixed content is not insignificant for DOM */
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { if (!soap->peeked && !soap_string_in(soap, 3, -1, -1))
+      return soap->error;
+    if (soap->dom->prnt)
+      soap->dom = soap->dom->prnt;
+  }
+#endif
+  if (soap->peeked)
+  { if (soap->error == SOAP_NO_TAG)
+      soap->error = SOAP_OK;
+    if (*soap->tag)
+      n++;
+    soap->peeked = 0;
+  }
+  do
+  { while (((c = soap_get(soap)) != SOAP_TT))
+    { if ((int)c == EOF)
+        return soap->error = SOAP_EOF;
+      if (c == SOAP_LT)
+        n++;
+      else if (c == '/')
+      { c = soap_get(soap);
+        if (c == SOAP_GT)
+         n--;
+        else
+         soap_unget(soap, c);
+      }
+    }
+  } while (n--);
+  s = soap->tag;
+  while (soap_notblank(c = soap_getutf8(soap)))
+    *s++ = (char)c;
+  *s = '\0';
+  if ((int)c == EOF)
+    return soap->error = SOAP_EOF;
+  while (soap_blank(c))
+    c = soap_get(soap);
+  if (c != SOAP_GT)
+    return soap->error = SOAP_SYNTAX_ERROR;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End element found (level=%u) '%s'='%s'\n", soap->level, soap->tag, tag?tag:""));
+  if (!tag || !*tag)
+    return SOAP_OK;
+  if ((s = strchr(soap->tag, ':')))
+    s++;
+  else
+    s = soap->tag;
+  if ((t = strchr(tag, ':')))
+    t++;
+  else
+    t = tag;
+  if (!SOAP_STRCMP(s, t))
+    return SOAP_OK;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End element tag name does not match\n"));
+  return soap->error = SOAP_SYNTAX_ERROR;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char *
+SOAP_FMAC2
+soap_attr_value(struct soap *soap, const char *name, int flag)
+{ register struct soap_attribute *tp;
+  for (tp = soap->attributes; tp; tp = tp->next)
+    if (!soap_match_tag(soap, tp->name, name))
+      break;
+  if (tp && tp->visible == 2)
+  { if (flag == 2 && (soap->mode & SOAP_XML_STRICT))
+      soap->error = SOAP_PROHIBITED;
+    else
+      return tp->value;
+  }
+  else if (flag == 1 && (soap->mode & SOAP_XML_STRICT))
+    soap->error = SOAP_REQUIRED;
+  return NULL;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_attr(struct soap *soap, const char *name, const char *value)
+{ register struct soap_attribute *tp;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set attribute %s='%s'\n", name, value?value:""));
+  for (tp = soap->attributes; tp; tp = tp->next)
+  { if (!strcmp(tp->name, name))
+      break;
+  }
+  if (!tp)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Allocate attribute %s\n", name));
+    if (!(tp = (struct soap_attribute*)SOAP_MALLOC(soap, sizeof(struct soap_attribute) + strlen(name))))
+      return soap->error = SOAP_EOM;
+    tp->ns = NULL;
+#ifndef WITH_LEAN
+    if (soap->mode & SOAP_XML_CANONICAL)
+    { struct soap_attribute **tpp = &soap->attributes;
+      const char *s = strchr(name, ':');
+      if (!strncmp(name, "xmlns", 5))
+      { for (; *tpp; tpp = &(*tpp)->next)
+          if (strncmp((*tpp)->name, "xmlns", 5) || strcmp((*tpp)->name + 5, name + 5) > 0)
+            break;
+      }
+      else if (!s)
+      { for (; *tpp; tpp = &(*tpp)->next)
+          if (strncmp((*tpp)->name, "xmlns", 5) && ((*tpp)->ns || strcmp((*tpp)->name, name) > 0))
+            break;
+      }
+      else
+      { int k;
+        for (; *tpp; tpp = &(*tpp)->next)
+       { if (!strncmp((*tpp)->name, "xmlns:", 6) && !strncmp((*tpp)->name + 6, name, s - name) && !(*tpp)->name[6 + s - name])
+         { if (!tp->ns)
+            { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Canonicalization: prefix %s=%p(%s)\n", name, (*tpp)->ns, (*tpp)->ns));
+             tp->ns = (*tpp)->ns;
+           }
+         }
+          else if (strncmp((*tpp)->name, "xmlns", 5) && (*tpp)->ns && tp->ns && ((k = strcmp((*tpp)->ns, tp->ns)) > 0 || (!k && strcmp((*tpp)->name, name) > 0)))
+            break;
+        }
+      }
+      tp->next = *tpp;
+      *tpp = tp;
+    }
+    else
+#endif
+    { tp->next = soap->attributes;
+      soap->attributes = tp;
+    }
+    strcpy(tp->name, name);
+    tp->value = NULL;
+  }
+  else if (value && tp->value && tp->size <= strlen(value))
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free attribute value of %s (free %p)\n", name, tp->value));
+    SOAP_FREE(soap, tp->value);
+    tp->value = NULL;
+    tp->ns = NULL;
+  }
+  if (value)
+  { if (!tp->value)
+    { tp->size = strlen(value) + 1;
+      if (!(tp->value = (char*)SOAP_MALLOC(soap, tp->size)))
+        return soap->error = SOAP_EOM;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Allocate attribute value of %s (%p)\n", tp->name, tp->value));
+    }
+    strcpy(tp->value, value);
+    if (!strncmp(tp->name, "xmlns:", 6))
+      tp->ns = tp->value;
+    tp->visible = 2;
+#ifndef WITH_LEAN
+    if (!strcmp(name, "wsu:Id"))
+    { soap->part = SOAP_BEGIN_SECURITY;
+      strncpy(soap->id, value, sizeof(soap->id));
+      soap->id[sizeof(soap->id)-1] = '\0';
+    }
+#endif
+  }
+  else
+    tp->visible = 1;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_clr_attr(struct soap *soap)
+{ register struct soap_attribute *tp;
+#ifndef WITH_LEAN
+  if (soap->mode & SOAP_XML_CANONICAL)
+  { while (soap->attributes)
+    { tp = soap->attributes->next;
+      SOAP_FREE(soap, soap->attributes->value);
+      SOAP_FREE(soap, soap->attributes);
+      soap->attributes = tp;
+    }
+  }
+  else
+#endif
+  { for (tp = soap->attributes; tp; tp = tp->next)
+      tp->visible = 0;
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+static int
+soap_getattrval(struct soap *soap, char *s, size_t n, soap_wchar d)
+{ size_t i;
+  soap_wchar c;
+  for (i = 0; i < n; i++)
+  { c = soap_getutf8(soap);
+    switch (c)
+    {
+    case SOAP_TT:
+      *s++ = '<';
+      soap_unget(soap, '/');
+      break;
+    case SOAP_LT:
+      *s++ = '<';
+      break;
+    case SOAP_GT:
+      if (d == ' ')
+      { soap_unget(soap, c);
+        *s = '\0';
+        return SOAP_OK;
+      }
+      *s++ = '>';
+      break;
+    case SOAP_QT:
+      if (c == d)
+      { *s = '\0';
+        return SOAP_OK;
+      }
+      *s++ = '"';
+      break;
+    case SOAP_AP:
+      if (c == d)
+      { *s = '\0';
+        return SOAP_OK;
+      }
+      *s++ = '\'';
+      break;
+    case '\t':
+    case '\n':
+    case '\r':
+    case ' ':
+    case '/':
+      if (d == ' ')
+      { soap_unget(soap, c);
+        *s = '\0';
+        return SOAP_OK;
+      }
+    default:
+      if ((int)c == EOF)
+        return soap->error = SOAP_EOF;
+      *s++ = (char)c;
+    }
+  }
+  return soap->error = SOAP_EOM;
+}
+#endif
+
+/******************************************************************************/
+#ifdef WITH_FAST
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_store_lab(struct soap *soap, const char *s, size_t n)
+{ soap->labidx = 0;
+  return soap_append_lab(soap, s, n);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifdef WITH_FAST
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_append_lab(struct soap *soap, const char *s, size_t n)
+{ if (soap->labidx + n >= soap->lablen)
+  { register char *t = soap->labbuf;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Enlarging look-aside buffer to append data, old size=%lu", (unsigned long)soap->lablen));
+    if (soap->lablen == 0)
+      soap->lablen = SOAP_LABLEN;
+    while (soap->labidx + n >= soap->lablen)
+      soap->lablen <<= 1;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, ", new size=%lu\n", (unsigned long)soap->lablen));
+    soap->labbuf = (char*)SOAP_MALLOC(soap, soap->lablen);
+    if (!soap->labbuf)
+    { if (t)
+        SOAP_FREE(soap, t);
+      return soap->error = SOAP_EOM;
+    }
+    if (t)
+    { memcpy(soap->labbuf, t, soap->labidx);
+      SOAP_FREE(soap, t);
+    }
+  }
+  if (s)
+  { memcpy(soap->labbuf + soap->labidx, s, n);
+    soap->labidx += n;
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_peek_element(struct soap *soap)
+{
+#ifdef WITH_DOM
+  register struct soap_dom_attribute **att = NULL;
+  register char *lead = NULL;
+#endif
+  register struct soap_attribute *tp;
+  const char *t;
+  register char *s;
+  register soap_wchar c;
+  register int i;
+  if (soap->peeked)
+  { if (!*soap->tag)
+      return soap->error = SOAP_NO_TAG;
+    return SOAP_OK;
+  }
+  soap->peeked = 1;
+  for (;;)
+  { c = soap_getutf8(soap);
+    if (c == SOAP_BOM)
+      c = soap_get(soap);
+#ifdef WITH_DOM
+    /* whitespace leading to start tag is not insignificant for DOM */
+    if (soap_blank(c))
+    { soap->labidx = 0;
+      do
+      { if (soap_append_lab(soap, NULL, 0))
+          return SOAP_EOM;
+        s = soap->labbuf + soap->labidx;
+        i = soap->lablen - soap->labidx;
+        soap->labidx = soap->lablen;
+        while (soap_blank(c) && i--)
+       { *s++ = c;
+         c = soap_get(soap);
+       }
+      }
+      while (soap_blank(c));
+      *s = '\0';
+      lead = soap_strdup(soap, soap->labbuf);
+    }
+#else
+    while (soap_blank(c))
+      c = soap_get(soap);
+#endif
+    if (c != SOAP_LT)
+    { *soap->tag = '\0';
+      if ((int)c == EOF)
+        return soap->error = SOAP_EOF;
+      soap_unget(soap, c);
+#ifdef WITH_DOM
+      /* whitespace leading to end tag is not insignificant for DOM */
+      if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+        soap->dom->tail = soap_strdup(soap, lead);
+#endif
+      return soap->error = SOAP_NO_TAG;
+    }
+    s = soap->tag;
+    do c = soap_getutf8(soap);
+    while (soap_blank(c));
+    i = sizeof(soap->tag);
+    while (c != '/' && soap_notblank(c))
+    { if (--i > 0)
+        *s++ = (char)c;
+      c = soap_getutf8(soap);
+    }
+    while (soap_blank(c))
+      c = soap_get(soap);
+    *s = '\0';
+    if (*soap->tag != '?')
+      break;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "XML PI <%s?>\n", soap->tag));
+    while ((int)c != EOF && c != SOAP_GT && c != '?')
+    { s = soap->tmpbuf;
+      i = sizeof(soap->tmpbuf) - 2;
+      while (c != '=' && c != SOAP_GT && c != '?' && soap_notblank(c))
+      { if (--i > 0)
+          *s++ = (char)c;
+        c = soap_get(soap);
+      }
+      while (soap_blank(c))
+        c = soap_get(soap);
+      if (c == '=')
+      { *s++ = '=';
+       do c = soap_get(soap);
+        while (soap_blank(c));
+        if (c != SOAP_QT && c != SOAP_AP)
+        { soap_unget(soap, c);
+          c = ' '; /* blank delimiter */
+        }
+        if (soap_getattrval(soap, s, i, c) == SOAP_EOM)
+       { while (soap_getattrval(soap, soap->tmpbuf, sizeof(soap->tmpbuf), c) == SOAP_EOM)
+           ;
+       }
+        else if (!strcmp(soap->tag, "?xml")
+             && (!soap_tag_cmp(soap->tmpbuf, "encoding=iso-8859-1")
+              || !soap_tag_cmp(soap->tmpbuf, "encoding=latin1")))
+        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "XML latin1 encoding\n"));
+          soap->mode |= SOAP_ENC_LATIN;
+        }
+      }
+      do c = soap_get(soap);
+      while (soap_blank(c));
+    }
+  }
+  soap->id[0] = '\0';
+  soap->href[0] = '\0';
+  soap->type[0] = '\0';
+  soap->arrayType[0] = '\0';
+  soap->arraySize[0] = '\0';
+  soap->arrayOffset[0] = '\0';
+  soap->other = 0;
+  soap->root = -1;
+  soap->position = 0;
+  soap->null = 0;
+  soap->mustUnderstand = 0;
+#ifdef WITH_DOM
+  if (soap->mode & SOAP_XML_DOM)
+  { register struct soap_dom_element *elt;
+    elt = (struct soap_dom_element*)soap_malloc(soap, sizeof(struct soap_dom_element));
+    if (!elt)
+      return soap->error = SOAP_EOM;
+    elt->next = NULL;
+    elt->nstr = NULL;
+    elt->name = soap_strdup(soap, soap->tag);
+    elt->prnt = soap->dom;
+    elt->elts = NULL;
+    elt->atts = NULL;
+    elt->data = NULL;
+    elt->wide = NULL;
+    elt->type = 0;
+    elt->node = NULL;
+    elt->head = lead;
+    elt->tail = NULL;
+    elt->soap = soap;
+    if (soap->dom)
+    { struct soap_dom_element *p = soap->dom->elts;
+      if (p)
+      { while (p->next)
+          p = p->next;
+        p->next = elt;
+      }
+      else
+        soap->dom->elts = elt;
+    }
+    soap->dom = elt;
+    att = &elt->atts;
+  }
+#endif
+  for (tp = soap->attributes; tp; tp = tp->next)
+    tp->visible = 0;
+  while ((int)c != EOF && c != SOAP_GT && c != '/')
+  { s = soap->tmpbuf;
+    i = sizeof(soap->tmpbuf);
+    while (c != '=' && c != '/' && soap_notblank(c))
+    { if (--i > 0)
+        *s++ = (char)c;
+      c = soap_get(soap);
+    }
+    *s = '\0';
+    if (i == sizeof(soap->tmpbuf))
+      return soap->error = SOAP_SYNTAX_ERROR;
+#ifdef WITH_DOM
+    /* add attribute name to dom */
+    if (att)
+    { *att = (struct soap_dom_attribute*)soap_malloc(soap, sizeof(struct soap_dom_attribute));
+       if (!*att)
+         return soap->error = SOAP_EOM;
+       (*att)->next = NULL;
+       (*att)->nstr = NULL;
+       (*att)->name = soap_strdup(soap, soap->tmpbuf);
+       (*att)->data = NULL;
+       (*att)->wide = NULL;
+       (*att)->soap = soap;
+    }
+#endif
+    if (!strncmp(soap->tmpbuf, "xmlns", 5))
+    { if (soap->tmpbuf[5] == ':')
+      { soap->tmpbuf[5] = '\0';
+        t = soap->tmpbuf + 6;
+      }
+      else if (soap->tmpbuf[5])
+        t = NULL;
+      else
+        t = SOAP_STR_EOS;
+    }
+    else
+      t = NULL;
+    for (tp = soap->attributes; tp; tp = tp->next)
+    { if (!SOAP_STRCMP(tp->name, soap->tmpbuf))
+        break;
+    }
+    if (!tp)
+    { tp = (struct soap_attribute*)SOAP_MALLOC(soap, sizeof(struct soap_attribute) + strlen(soap->tmpbuf));
+      if (!tp)
+        return soap->error = SOAP_EOM;
+      strcpy(tp->name, soap->tmpbuf);
+      tp->value = NULL;
+      tp->size = 0;
+      tp->next = soap->attributes;
+      soap->attributes = tp;
+    }
+    while (soap_blank(c))
+      c = soap_get(soap);
+    if (c == '=')
+    { do c = soap_get(soap);
+      while (soap_blank(c));
+      if (c != SOAP_QT && c != SOAP_AP)
+      { soap_unget(soap, c);
+        c = ' '; /* blank delimiter */
+      }
+      if (soap_getattrval(soap, tp->value, tp->size, c))
+      {
+#ifdef WITH_FAST
+        if (soap->error != SOAP_EOM)
+          return soap->error;
+        soap->error = SOAP_OK;
+       if (soap_store_lab(soap, tp->value, tp->size))
+         return soap->error;
+       if (tp->value)
+         SOAP_FREE(soap, tp->value);
+       for (;;)
+       { if (soap_getattrval(soap, soap->labbuf + soap->labidx, soap->lablen - soap->labidx, c))
+         { if (soap->error != SOAP_EOM)
+             return soap->error;
+            soap->error = SOAP_OK;
+           soap->labidx = soap->lablen;
+           if (soap_append_lab(soap, NULL, 0))
+             return soap->error;
+         }
+         else
+           break;
+       }
+       if (soap->labidx)
+          tp->size = soap->lablen;
+       else
+       { tp->size = strlen(soap->labbuf) + 1;
+          if (tp->size < SOAP_LABLEN)
+           tp->size = SOAP_LABLEN;
+        }
+       if (!(tp->value = (char*)SOAP_MALLOC(soap, tp->size)))
+         return soap->error = SOAP_EOM;
+        strcpy(tp->value, soap->labbuf);
+#else
+       size_t n;
+        if (soap->error != SOAP_EOM)
+          return soap->error;
+        soap->error = SOAP_OK;
+        if (soap_new_block(soap))
+          return soap->error;
+        for (;;)
+        { if (!(s = (char*)soap_push_block(soap, SOAP_BLKLEN)))
+            return soap->error;
+          if (soap_getattrval(soap, s, SOAP_BLKLEN, c))
+          { if (soap->error != SOAP_EOM)
+              return soap->error;
+            soap->error = SOAP_OK;
+          }
+          else
+            break;
+        }
+       n = tp->size + soap->blist->size;
+        if (!(s = (char*)SOAP_MALLOC(soap, n)))
+          return soap->error = SOAP_EOM;
+        if (tp->value)
+        { memcpy(s, tp->value, tp->size);
+          SOAP_FREE(soap, tp->value);
+        }
+        soap_save_block(soap, s + tp->size, 0);
+        tp->value = s;
+        tp->size = n;
+#endif
+      }
+      do c = soap_get(soap);
+      while (soap_blank(c));
+      tp->visible = 2; /* seen this attribute w/ value */
+#ifdef WITH_DOM
+      if (att)
+        (*att)->data = soap_strdup(soap, tp->value);
+#endif
+    }
+    else
+      tp->visible = 1; /* seen this attribute w/o value */
+#ifdef WITH_DOM
+    if (att)
+      att = &(*att)->next;
+#endif
+    if (t && tp->value)
+    { if (soap_push_namespace(soap, t, tp->value))
+        return soap->error;
+      tp->visible = 0;
+    }
+  }
+#ifdef WITH_DOM
+  if (att)
+  { soap->dom->nstr = soap_dom_current_nstr(soap, soap->tag);
+    for (att = &soap->dom->atts; *att; att = &(*att)->next)
+      (*att)->nstr = soap_dom_current_nstr(soap, (*att)->name);
+  }
+#endif
+  if ((int)c == EOF)
+    return soap->error = SOAP_EOF;
+  if (!(soap->body = (c != '/')))
+    do c = soap_get(soap);
+    while (soap_blank(c));
+#ifdef WITH_DOM
+  if (soap->mode & SOAP_XML_DOM)
+  { if (!soap->body && soap->dom->prnt)
+      soap->dom = soap->dom->prnt;
+  }
+#endif
+  for (tp = soap->attributes; tp; tp = tp->next)
+  { if (tp->visible && tp->value)
+    { if (!strcmp(tp->name, "id"))
+      { *soap->id = '#';
+        strncpy(soap->id + 1, tp->value, sizeof(soap->id) - 2);
+        soap->id[sizeof(soap->id)-1] = '\0';
+      }
+      else if (!strcmp(tp->name, "href"))
+      { strncpy(soap->href, tp->value, sizeof(soap->href) - 1);
+        soap->href[sizeof(soap->href)-1] = '\0';
+      }
+      else if ((soap->version == 2 || (soap->mode & SOAP_XML_GRAPH)) && !strcmp(tp->name, "ref"))
+      { *soap->href = '#';
+        strncpy(soap->href + 1, tp->value, sizeof(soap->href) - 2);
+        soap->href[sizeof(soap->href)-1] = '\0';
+      }
+      else if (!soap_match_tag(soap, tp->name, "xsi:type"))
+      { strncpy(soap->type, tp->value, sizeof(soap->type) - 1);
+        soap->type[sizeof(soap->type)-1] = '\0';
+      }
+      else if (soap->version == 1 && !soap_match_tag(soap, tp->name, "SOAP-ENC:arrayType"))
+      { s = soap_strrchr(tp->value, '[');
+        if (s && (size_t)(s - tp->value) < sizeof(soap->arrayType))
+        { strncpy(soap->arrayType, tp->value, s - tp->value);
+          soap->arrayType[s - tp->value] = '\0';
+          strncpy(soap->arraySize, s, sizeof(soap->arraySize) - 1);
+        }
+        else
+          strncpy(soap->arrayType, tp->value, sizeof(soap->arrayType) - 1);
+        soap->arraySize[sizeof(soap->arrayType)-1] = '\0';
+        soap->arrayType[sizeof(soap->arrayType)-1] = '\0';
+      }
+      else if (soap->version == 2 && !soap_match_tag(soap, tp->name, "SOAP-ENC:itemType"))
+        strncpy(soap->arrayType, tp->value, sizeof(soap->arrayType) - 1);
+      else if (soap->version == 2 && !soap_match_tag(soap, tp->name, "SOAP-ENC:arraySize"))
+        strncpy(soap->arraySize, tp->value, sizeof(soap->arraySize) - 1);
+      else if (soap->version == 1 && !soap_match_tag(soap, tp->name, "SOAP-ENC:offset"))
+        strncpy(soap->arrayOffset, tp->value, sizeof(soap->arrayOffset));
+      else if (soap->version == 1 && !soap_match_tag(soap, tp->name, "SOAP-ENC:position"))
+        soap->position = soap_getposition(tp->value, soap->positions);
+      else if (soap->version == 1 && !soap_match_tag(soap, tp->name, "SOAP-ENC:root"))
+        soap->root = ((!strcmp(tp->value, "1") || !strcmp(tp->value, "true")));
+      else if ((soap->version == 1 && !soap_match_tag(soap, tp->name, "SOAP-ENV:actor"))
+            || (soap->version == 2 && !soap_match_tag(soap, tp->name, "SOAP-ENV:role")))
+      { if ((!soap->actor || strcmp(soap->actor, tp->value))
+         && strcmp(tp->value, "http://schemas.xmlsoap.org/soap/actor/next")
+         && strcmp(tp->value, "http://www.w3.org/2003/05/soap-envelope/role/next"))
+          soap->other = 1;
+      }
+      else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:mustUnderstand")
+            && (!strcmp(tp->value, "1") || !strcmp(tp->value, "true")))
+        soap->mustUnderstand = 1;
+      else if ((!soap_match_tag(soap, tp->name, "xsi:null")
+             || !soap_match_tag(soap, tp->name, "xsi:nil"))
+            && (!strcmp(tp->value, "1")
+             || !strcmp(tp->value, "true")))
+        soap->null = 1;
+    }
+  }
+  return soap->error = SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_retry(struct soap *soap)
+{ soap->error = SOAP_OK;
+  soap_revert(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_revert(struct soap *soap)
+{ if (!soap->peeked)
+  { soap->peeked = 1;
+    if (soap->body)
+      soap->level--;
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Reverting last element (level=%u)\n", soap->level));
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_string_out(struct soap *soap, const char *s, int flag)
+{ register const char *t;
+  register soap_wchar c;
+  register soap_wchar mask = 0xFFFFFF80UL;
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { soap->dom->data = soap_strdup(soap, s);
+    return SOAP_OK;
+  }
+#endif
+  if (soap->mode & SOAP_C_UTFSTRING)
+    mask = 0;
+  t = s;
+  while ((c = *t++))
+  { switch (c)
+    { 
+    case 9:
+      if (flag)
+      { if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&#x9;", 5))
+         return soap->error;
+        s = t;
+      }
+      break;
+    case 10:
+      if (flag || !(soap->mode & SOAP_XML_CANONICAL))
+      { if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&#xA;", 5))
+         return soap->error;
+        s = t;
+      }
+      break;
+    case 13:
+      if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&#xD;", 5))
+        return soap->error;
+      s = t;
+      break;
+    case '&':
+      if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&amp;", 5))
+        return soap->error;
+      s = t;
+      break;
+    case '<':
+      if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&lt;", 4))
+        return soap->error;
+      s = t;
+      break;
+    case '>':
+      if (!flag)
+      { if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&gt;", 4))
+         return soap->error;
+        s = t;
+      }
+      break;
+    case '"':
+      if (flag)
+      { if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&quot;", 6))
+         return soap->error;
+        s = t;
+      }
+      break;
+    default:
+#ifndef WITH_LEANER
+#ifdef HAVE_MBTOWC
+      if (soap->mode & SOAP_C_MBSTRING)
+      { wchar_t wc;
+        register int m = mbtowc(&wc, t - 1, MB_CUR_MAX);
+        if (m > 0 && wc != c)
+        { if (soap_send_raw(soap, s, t - s - 1) || soap_pututf8(soap, wc))
+            return soap->error;
+         s = t += m - 1;
+         continue;
+        }
+      }
+#endif
+#endif
+      if (c & mask)
+      { if (soap_send_raw(soap, s, t - s - 1) || soap_pututf8(soap, (unsigned char)c))
+          return soap->error;
+        s = t;
+      }
+    }
+  }
+  return soap_send_raw(soap, s, t - s - 1);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_string_in(struct soap *soap, int flag, long minlen, long maxlen)
+{ register char *s;
+  char *t = NULL;
+  register size_t i;
+  register long l = 0;
+  register int n = 0;
+  register int m = 0;
+  register soap_wchar c;
+#if !defined(WITH_LEANER) && defined(HAVE_WCTOMB)
+  char buf[MB_LEN_MAX > 8 ? MB_LEN_MAX : 8];
+#else
+  char buf[8];
+#endif
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Reading string content\n"));
+  if (soap->peeked)
+  { if (!soap->body)
+      return NULL;
+    if (*soap->tag)
+    { n = 1;
+      soap->peeked = 0;
+#ifndef WITH_LEAN
+      t = soap->tmpbuf;
+      t[0] = '<';
+      strncpy(t + 1, soap->tag, sizeof(soap->tmpbuf) - 1);
+      strncat(t, ">", sizeof(soap->tmpbuf));
+      m = strlen(soap->tag) + 2;
+#endif
+    }
+  }
+#ifdef WITH_CDATA
+  if (!flag)
+  { register int state = 0;
+#ifdef WITH_FAST
+    soap->labidx = 0;                  /* use look-aside buffer */
+#else
+    if (soap_new_block(soap))
+      return NULL;
+#endif
+    for (;;)
+    { 
+#ifdef WITH_FAST
+      register size_t k;
+      if (soap_append_lab(soap, NULL, 0))      /* allocate more space in look-aside buffer if necessary */
+        return NULL;
+      s = soap->labbuf + soap->labidx; /* space to populate */
+      k = soap->lablen - soap->labidx; /* number of bytes available */
+      soap->labidx = soap->lablen;     /* claim this space */
+#else
+      register size_t k = SOAP_BLKLEN;
+      if (!(s = (char*)soap_push_block(soap, k)))
+        return NULL;
+#endif
+      for (i = 0; i < k; i++)
+      { if (m > 0)
+        { *s++ = *t++; /* copy multibyte characters */
+         m--;
+          continue;
+        }
+        c = soap_getchar(soap);
+       if ((int)c == EOF)
+          goto end;
+        if (c >= 0x80 && !(soap->mode & SOAP_ENC_LATIN))
+        { soap_unget(soap, c);
+         c = soap_getutf8(soap);
+         if (soap->mode & SOAP_C_UTFSTRING)
+          { if ((c & 0x80000000) && c >= -0x7FFFFF80 && c < SOAP_AP)
+            { c &= 0x7FFFFFFF;
+              t = buf;
+              if (c < 0x0800)
+                *t++ = (char)(0xC0 | ((c >> 6) & 0x1F));
+              else
+              { if (c < 0x010000)
+                  *t++ = (char)(0xE0 | ((c >> 12) & 0x0F));
+                else
+                { if (c < 0x200000)
+                    *t++ = (char)(0xF0 | ((c >> 18) & 0x07));
+                  else
+                  { if (c < 0x04000000)
+                      *t++ = (char)(0xF8 | ((c >> 24) & 0x03));
+                    else
+                    { *t++ = (char)(0xFC | ((c >> 30) & 0x01));
+                      *t++ = (char)(0x80 | ((c >> 24) & 0x3F));
+                    }
+                    *t++ = (char)(0x80 | ((c >> 18) & 0x3F));
+                  }     
+                  *t++ = (char)(0x80 | ((c >> 12) & 0x3F));
+                }
+                *t++ = (char)(0x80 | ((c >> 6) & 0x3F));
+              }
+              *t++ = (char)(0x80 | (c & 0x3F));
+             m = (int)(t - buf) - 1;
+              t = buf;
+              *s++ = *t++;
+              continue;
+           }
+          }
+        }
+       switch (state)
+        { case 1:
+            if (c == ']')
+             state = 4;
+           *s++ = c;
+           continue;
+         case 2:
+           if (c == '-')
+              state = 6;
+           *s++ = c;
+           continue;
+         case 3:
+           if (c == '?')
+             state = 8;
+           *s++ = c;
+           continue;
+          /* CDATA */
+         case 4:
+           if (c == ']')
+              state = 5;
+           else
+             state = 1;
+           *s++ = c;
+           continue;
+         case 5:
+           if (c == '>')
+             state = 0;
+           else
+             state = 1;
+           *s++ = c;
+           continue;
+          /* comment */
+          case 6:
+            if (c == '-')
+             state = 7;
+           else
+             state = 2;
+           *s++ = c;
+           continue;
+          case 7:
+            if (c == '>')
+             state = 0;
+           else
+             state = 2;
+           *s++ = c;
+           continue;
+          /* PI */
+         case 8:
+            if (c == '>')
+             state = 0;
+           else
+             state = 3;
+           *s++ = c;
+           continue;
+        }
+        switch (c)
+        {
+        case '/':
+          if (n > 0)
+          { c = soap_getchar(soap);
+            if (c == '>')
+              n--;
+            soap_unget(soap, c);
+          }
+          *s++ = '/';
+          break;
+        case '<':
+         c = soap_getchar(soap);
+         if (c == '/')
+         { if (n == 0)
+           { c = SOAP_TT;
+             goto end;
+           }
+           n--;
+         }
+         else if (c == '!')
+         { c = soap_getchar(soap);
+           if (c == '[')
+            { do c = soap_getchar(soap);
+              while ((int)c != EOF && c != '[');
+              if ((int)c == EOF)
+                 goto end;
+             t = (char*)"![CDATA[";
+             m = 8;
+             state = 1;
+           }
+            else if (c == '-')
+           { if ((c = soap_getchar(soap)) == '-')
+               state = 2;
+             t = (char*)"!-";
+             m = 2;
+             soap_unget(soap, c);
+           }
+           else
+           { t = (char*)"!";
+             m = 1;
+             soap_unget(soap, c);
+           }
+           *s++ = '<';
+           break;
+         }
+         else if (c == '?')
+           state = 3;
+         else
+           n++;
+          soap_unget(soap, c);
+          *s++ = '<';
+          break;
+        case '>':
+          *s++ = '>';
+          break;
+        case '"':
+          *s++ = '"';
+          break;
+        default:
+#ifndef WITH_LEANER
+#ifdef HAVE_WCTOMB
+          if (soap->mode & SOAP_C_MBSTRING)
+          { m = wctomb(buf, c & 0x7FFFFFFF);
+            if (m >= 1 && m <= (int)MB_CUR_MAX)
+            { t = buf;
+              *s++ = *t++;
+              m--;
+            }
+            else
+            { *s++ = SOAP_UNKNOWN_CHAR;
+             m = 0;
+           }
+          }
+          else
+#endif
+#endif
+            *s++ = (char)(c & 0xFF);
+        }
+       l++;
+        if ((soap->mode & SOAP_XML_STRICT) && maxlen >= 0 && l > maxlen)
+        { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen));
+          soap->error = SOAP_LENGTH;
+          return NULL;
+        }
+      }
+    }
+  }
+#endif
+#ifdef WITH_FAST
+  soap->labidx = 0;                    /* use look-aside buffer */
+#else
+  if (soap_new_block(soap))
+    return NULL;
+#endif
+  for (;;)
+  { 
+#ifdef WITH_FAST
+    register size_t k;
+    if (soap_append_lab(soap, NULL, 0))        /* allocate more space in look-aside buffer if necessary */
+      return NULL;
+    s = soap->labbuf + soap->labidx;   /* space to populate */
+    k = soap->lablen - soap->labidx;   /* number of bytes available */
+    soap->labidx = soap->lablen;       /* claim this space */
+#else
+    register size_t k = SOAP_BLKLEN;
+    if (!(s = (char*)soap_push_block(soap, k)))
+      return NULL;
+#endif
+    for (i = 0; i < k; i++)
+    { if (m > 0)
+      { *s++ = *t++;   /* copy multibyte characters */
+        m--;
+        continue;
+      }
+      if (soap->mode & SOAP_C_UTFSTRING)
+      { if (((c = soap_get(soap)) & 0x80000000) && c >= -0x7FFFFF80 && c < SOAP_AP)
+        { c &= 0x7FFFFFFF;
+          t = buf;
+          if (c < 0x0800)
+            *t++ = (char)(0xC0 | ((c >> 6) & 0x1F));
+          else
+          { if (c < 0x010000)
+              *t++ = (char)(0xE0 | ((c >> 12) & 0x0F));
+            else
+            { if (c < 0x200000)
+                *t++ = (char)(0xF0 | ((c >> 18) & 0x07));
+              else
+              { if (c < 0x04000000)
+                  *t++ = (char)(0xF8 | ((c >> 24) & 0x03));
+                else
+                { *t++ = (char)(0xFC | ((c >> 30) & 0x01));
+                  *t++ = (char)(0x80 | ((c >> 24) & 0x3F));
+                }
+                *t++ = (char)(0x80 | ((c >> 18) & 0x3F));
+              }     
+              *t++ = (char)(0x80 | ((c >> 12) & 0x3F));
+            }
+            *t++ = (char)(0x80 | ((c >> 6) & 0x3F));
+          }
+          *t++ = (char)(0x80 | (c & 0x3F));
+         m = (int)(t - buf) - 1;
+          t = buf;
+          *s++ = *t++;
+          continue;
+        }
+      }
+      else
+        c = soap_getutf8(soap);
+      switch (c)
+      {
+      case SOAP_TT:
+        if (n == 0)
+          goto end;
+        n--;
+        *s++ = '<';
+        t = (char*)"/";
+       m = 1;
+        break;
+      case SOAP_LT:
+        n++;
+        *s++ = '<';
+        break;
+      case SOAP_GT:
+        *s++ = '>';
+        break;
+      case SOAP_QT:
+        *s++ = '"';
+        break;
+      case SOAP_AP:
+        *s++ = '\'';
+        break;
+      case '/':
+        if (n > 0)
+        { c = soap_get(soap);
+          if (c == SOAP_GT)
+            n--;
+          soap_unget(soap, c);
+        }
+        *s++ = '/';
+        break;
+      case '<' | 0x80000000:
+        if (flag)
+          *s++ = '<';
+        else
+        { *s++ = '&';
+          t = (char*)"lt;";
+         m = 3;
+        }
+        break;
+      case '>' | 0x80000000:
+        if (flag)
+          *s++ = '>';
+        else
+        { *s++ = '&';
+          t = (char*)"gt;";
+         m = 3;
+        }
+        break;
+      case '&' | 0x80000000:
+        if (flag)
+          *s++ = '&';
+        else
+        { *s++ = '&';
+          t = (char*)"amp;";
+         m = 4;
+        }
+        break;
+      case '"' | 0x80000000:
+        if (flag)
+          *s++ = '"';
+        else
+        { *s++ = '&';
+          t = (char*)"quot;";
+         m = 5;
+        }
+        break;
+      case '\'' | 0x80000000:
+        if (flag)
+          *s++ = '\'';
+        else
+        { *s++ = '&';
+          t = (char*)"apos;";
+         m = 5;
+        }
+        break;
+      default:
+        if ((int)c == EOF)
+          goto end;
+#ifndef WITH_LEANER
+#ifdef HAVE_WCTOMB
+        if (soap->mode & SOAP_C_MBSTRING)
+        { m = wctomb(buf, c & 0x7FFFFFFF);
+          if (m >= 1 && m <= (int)MB_CUR_MAX)
+          { t = buf;
+            *s++ = *t++;
+            m--;
+          }
+          else
+          { *s++ = SOAP_UNKNOWN_CHAR;
+           m = 0;
+         }
+        }
+        else
+#endif
+#endif
+          *s++ = (char)(c & 0xFF);
+      }
+      l++;
+      if ((soap->mode & SOAP_XML_STRICT) && maxlen >= 0 && l > maxlen)
+      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen));
+        soap->error = SOAP_LENGTH;
+        return NULL;
+      }
+    }
+  }
+end:
+  soap_unget(soap, c);
+  *s = '\0';
+#ifdef WITH_FAST
+  t = soap_strdup(soap, soap->labbuf);
+#else
+  soap_size_block(soap, i+1);
+  t = soap_save_block(soap, NULL, 0);
+#endif
+  if ((soap->mode & SOAP_XML_STRICT) && l < minlen)
+  { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too short: %ld chars, minlen=%ld\n", l, minlen));
+    soap->error = SOAP_LENGTH;
+    return NULL;
+  }
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { if (flag == 3)
+      soap->dom->tail = t;
+    else
+      soap->dom->data = t;
+  }
+#endif
+  if (flag == 2)
+    if (soap_s2QName(soap, t, &t))
+      return NULL;
+  return t;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_wstring_out(struct soap *soap, const wchar_t *s, int flag)
+{ const char *t;
+  char tmp;
+  register soap_wchar c;
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { wchar_t *r = (wchar_t*)s;
+    int n = 1;
+    while (*r++)
+      n++;
+    soap->dom->wide = r = (wchar_t*)soap_malloc(soap, n * sizeof(wchar_t));
+    while (n--)
+      *r++ = *s++;
+    return SOAP_OK;
+  }
+#endif
+  while ((c = *s++))
+  { switch (c)
+    { 
+    case 9:
+      if (flag)
+        t = "&#x9;";
+      else
+        t = "\t";
+      break;
+    case 10:
+      if (flag || !(soap->mode & SOAP_XML_CANONICAL))
+        t = "&#xA;";
+      else
+        t = "\n";
+      break;
+    case 13:
+      t = "&#xD;";
+      break;
+    case '&':
+      t = "&amp;";
+      break;
+    case '<':
+      t = "&lt;";
+      break;
+    case '>':
+      if (flag)
+        t = ">";
+      else
+       t = "&gt;";
+      break;
+    case '"':
+      if (flag)
+        t = "&quot;";
+      else
+        t = "\"";
+      break;
+    default:
+      if (c > 0 && c < 0x80)
+      { tmp = (char)c;
+        if (soap_send_raw(soap, &tmp, 1))
+          return soap->error;
+      }
+      else if (soap_pututf8(soap, (unsigned long)c))
+        return soap->error;
+      continue;
+    }
+    if (soap_send(soap, t))
+      return soap->error;
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_2
+SOAP_FMAC1
+wchar_t *
+SOAP_FMAC2
+soap_wstring_in(struct soap *soap, int flag, long minlen, long maxlen)
+{ wchar_t *s;
+  register int i, n = 0;
+  register long l = 0;
+  register soap_wchar c;
+  const char *t = NULL;
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Reading wide string content\n"));
+  if (soap->peeked)
+  { if (!soap->body)
+      return NULL;
+    if (*soap->tag)
+    { n = 1;
+      soap->peeked = 0;
+    }
+  }
+  if (soap_new_block(soap))
+    return NULL;
+  for (;;)
+  { if (!(s = (wchar_t*)soap_push_block(soap, sizeof(wchar_t)*SOAP_BLKLEN)))
+      return NULL;
+    for (i = 0; i < SOAP_BLKLEN; i++)
+    { if (t)
+      { *s++ = (wchar_t)*t++;
+        if (!*t)
+          t = NULL;
+        continue;
+      }
+      c = soap_getutf8(soap);
+      switch (c)
+      {
+      case SOAP_TT:
+        if (n == 0)
+          goto end;
+        n--;
+        *s++ = '<';
+        soap_unget(soap, '/');
+        break;
+      case SOAP_LT:
+        n++;
+        *s++ = '<';
+        break;
+      case SOAP_GT:
+        *s++ = '>';
+        break;
+      case SOAP_QT:
+        *s++ = '"';
+        break;
+      case SOAP_AP:
+        *s++ = '\'';
+        break;
+      case '/':
+        if (n > 0)
+        { c = soap_getutf8(soap);
+          if (c == SOAP_GT)
+            n--;
+          soap_unget(soap, c);
+        }
+        *s++ = '/';
+        break;
+      case '<':
+        if (flag)
+          *s++ = (soap_wchar)'<';
+        else
+        { *s++ = (soap_wchar)'&';
+          t = "lt;";
+        }
+        break;
+      case '>':
+        if (flag)
+          *s++ = (soap_wchar)'>';
+        else
+        { *s++ = (soap_wchar)'&';
+          t = "gt;";
+        }
+        break;
+      case '"':
+        if (flag)
+          *s++ = (soap_wchar)'"';
+        else
+        { *s++ = (soap_wchar)'&';
+          t = "quot;";
+        }
+        break;
+      default:
+        if ((int)c == EOF)
+          goto end;
+        *s++ = (wchar_t)c & 0x7FFFFFFF;
+      }
+      l++;
+      if ((soap->mode & SOAP_XML_STRICT) && maxlen >= 0 && l > maxlen)
+      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen));
+        soap->error = SOAP_LENGTH;
+        return NULL;
+      }
+    }
+  }
+end:
+  soap_unget(soap, c);
+  *s = '\0';
+  soap_size_block(soap, sizeof(wchar_t) * (i + 1));
+  if ((soap->mode & SOAP_XML_STRICT) && l < minlen)
+  { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too short: %ld chars, minlen=%ld\n", l, minlen));
+    soap->error = SOAP_LENGTH;
+    return NULL;
+  }
+  s = (wchar_t*)soap_save_block(soap, NULL, 0);
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+    soap->dom->wide = s;
+#endif
+  return s;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_int2s(struct soap *soap, int n)
+{ return soap_long2s(soap, (long)n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outint(struct soap *soap, const char *tag, int id, const int *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_long2s(soap, (long)*p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2int(struct soap *soap, const char *s, int *p)
+{ if (s)
+  { char *r;
+    *p = (int)soap_strtol(s, &r, 10);
+    if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+     || soap_errno == SOAP_ERANGE
+#endif
+#endif
+    )
+      soap->error = SOAP_TYPE;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int *
+SOAP_FMAC2
+soap_inint(struct soap *soap, const char *tag, int *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":int")
+   && soap_match_tag(soap, soap->type, ":short")
+   && soap_match_tag(soap, soap->type, ":byte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (int*)soap_id_enter(soap, soap->id, p, t, sizeof(int), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (int*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(int), 0, NULL);
+  else if (p)
+  { if (soap_s2int(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_long2s(struct soap *soap, long n)
+{ sprintf(soap->tmpbuf, "%ld", n);
+  return soap->tmpbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outlong(struct soap *soap, const char *tag, int id, const long *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_long2s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2long(struct soap *soap, const char *s, long *p)
+{ if (s)
+  { char *r;
+    *p = soap_strtol(s, &r, 10);
+    if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+     || soap_errno == SOAP_ERANGE
+#endif
+#endif
+    )
+      soap->error = SOAP_TYPE;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+long *
+SOAP_FMAC2
+soap_inlong(struct soap *soap, const char *tag, long *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":int")
+   && soap_match_tag(soap, soap->type, ":short")
+   && soap_match_tag(soap, soap->type, ":byte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (long*)soap_id_enter(soap, soap->id, p, t, sizeof(long), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (long*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(long), 0, NULL);
+  else if (p)
+  { if (soap_s2long(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_LONG642s(struct soap *soap, LONG64 n)
+{ sprintf(soap->tmpbuf, SOAP_LONG_FORMAT, n);
+  return soap->tmpbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outLONG64(struct soap *soap, const char *tag, int id, const LONG64 *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_LONG642s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2LONG64(struct soap *soap, const char *s, LONG64 *p)
+{ if (s)
+  {
+#ifdef HAVE_STRTOLL
+    char *r;
+    *p = strtoll(s, &r, 10);
+    if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+       || soap_errno == SOAP_ERANGE
+#endif
+#endif
+      )
+#else
+# ifdef HAVE_SSCANF
+    if (sscanf(s, SOAP_LONG_FORMAT, p) != 1)
+# endif
+#endif
+      soap->error = SOAP_TYPE;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+LONG64 *
+SOAP_FMAC2
+soap_inLONG64(struct soap *soap, const char *tag, LONG64 *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":integer")
+   && soap_match_tag(soap, soap->type, ":positiveInteger")
+   && soap_match_tag(soap, soap->type, ":negativeInteger")
+   && soap_match_tag(soap, soap->type, ":nonPositiveInteger")
+   && soap_match_tag(soap, soap->type, ":nonNegativeInteger")
+   && soap_match_tag(soap, soap->type, ":long")
+   && soap_match_tag(soap, soap->type, ":int")
+   && soap_match_tag(soap, soap->type, ":short")
+   && soap_match_tag(soap, soap->type, ":byte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (LONG64*)soap_id_enter(soap, soap->id, p, t, sizeof(LONG64), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (LONG64*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(LONG64), 0, NULL);
+  else if (p)
+  { if (soap_s2LONG64(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_byte2s(struct soap *soap, char n)
+{ return soap_long2s(soap, (long)n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outbyte(struct soap *soap, const char *tag, int id, const char *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_long2s(soap, (long)*p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2byte(struct soap *soap, const char *s, char *p)
+{ if (s)
+  { long n;
+    char *r;
+    n = soap_strtol(s, &r, 10);
+    if (s == r || *r || n < -128 || n > 127)
+      soap->error = SOAP_TYPE;
+    *p = (char)n;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_inbyte(struct soap *soap, const char *tag, char *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":byte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (char*)soap_id_enter(soap, soap->id, p, t, sizeof(char), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (char*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(char), 0, NULL);
+  else if (p)
+  { if (soap_s2byte(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_short2s(struct soap *soap, short n)
+{ return soap_long2s(soap, (long)n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outshort(struct soap *soap, const char *tag, int id, const short *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_long2s(soap, (long)*p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2short(struct soap *soap, const char *s, short *p)
+{ if (s)
+  { long n;
+    char *r;
+    n = soap_strtol(s, &r, 10);
+    if (s == r || *r || n < -32768 || n > 32767)
+      soap->error = SOAP_TYPE;
+    *p = (short)n;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+short *
+SOAP_FMAC2
+soap_inshort(struct soap *soap, const char *tag, short *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":short")
+   && soap_match_tag(soap, soap->type, ":byte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (short*)soap_id_enter(soap, soap->id, p, t, sizeof(short), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (short*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(short), 0, NULL);
+  else if (p)
+  { if (soap_s2short(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_float2s(struct soap *soap, float n)
+{ const char *s;
+  if (soap_isnan((double)n))
+    s = "NaN";
+  else if (soap_ispinff(n))
+    s = "INF";
+  else if (soap_isninff(n))
+    s = "-INF";
+  else
+  { sprintf(soap->tmpbuf, soap->float_format, n);
+    s = soap->tmpbuf;
+  }
+  return s;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outfloat(struct soap *soap, const char *tag, int id, const float *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_float2s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2float(struct soap *soap, const char *s, float *p)
+{ if (s)
+  { if (!*s)
+      return soap->error = SOAP_TYPE;
+    if (!soap_tag_cmp(s, "INF"))
+      *p = FLT_PINFTY;
+    else if (!soap_tag_cmp(s, "+INF"))
+      *p = FLT_PINFTY;
+    else if (!soap_tag_cmp(s, "-INF"))
+      *p = FLT_NINFTY;
+    else if (!soap_tag_cmp(s, "NaN"))
+      *p = FLT_NAN;
+    else
+    {
+/* On some systems, strtof appears to be broken or doesn't link: use with caution */
+#if defined(HAVE_STRTOF)
+      char *r;
+      *p = strtof((char*)s, &r);
+      if (*r)
+#elif defined(HAVE_STRTOD)
+      char *r;
+      *p = (float)strtod(s, &r);
+      if (*r)
+#endif
+#ifdef HAVE_SSCANF
+        if (sscanf(s, "%g", p) != 1)
+          soap->error = SOAP_TYPE;
+#else
+        soap->error = SOAP_TYPE;
+#endif
+    }
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+static int soap_isnumeric(struct soap *soap, const char *type)
+{ if (soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":float")
+   && soap_match_tag(soap, soap->type, ":double")
+   && soap_match_tag(soap, soap->type, ":decimal")
+   && soap_match_tag(soap, soap->type, ":integer")
+   && soap_match_tag(soap, soap->type, ":positiveInteger")
+   && soap_match_tag(soap, soap->type, ":negativeInteger")
+   && soap_match_tag(soap, soap->type, ":nonPositiveInteger")
+   && soap_match_tag(soap, soap->type, ":nonNegativeInteger")
+   && soap_match_tag(soap, soap->type, ":long")
+   && soap_match_tag(soap, soap->type, ":int")
+   && soap_match_tag(soap, soap->type, ":short")
+   && soap_match_tag(soap, soap->type, ":byte")
+   && soap_match_tag(soap, soap->type, ":unsignedLong")
+   && soap_match_tag(soap, soap->type, ":unsignedInt")
+   && soap_match_tag(soap, soap->type, ":unsignedShort")
+   && soap_match_tag(soap, soap->type, ":unsignedByte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return SOAP_ERR;
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+float *
+SOAP_FMAC2
+soap_infloat(struct soap *soap, const char *tag, float *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type != '\0' && soap_isnumeric(soap, type))
+    return NULL;
+#endif
+  p = (float*)soap_id_enter(soap, soap->id, p, t, sizeof(float), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (float*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(float), 0, NULL);
+  else if (p)
+  { if (soap_s2float(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_double2s(struct soap *soap, double n)
+{ const char *s;
+  if (soap_isnan(n))
+    s = "NaN";
+  else if (soap_ispinfd(n))
+    s = "INF";
+  else if (soap_isninfd(n))
+    s = "-INF";
+  else
+  { sprintf(soap->tmpbuf, soap->double_format, n);
+    s = soap->tmpbuf;
+  }
+  return s;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outdouble(struct soap *soap, const char *tag, int id, const double *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_double2s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2double(struct soap *soap, const char *s, double *p)
+{ if (s)
+  { if (!*s)
+      return soap->error = SOAP_TYPE;
+    if (!soap_tag_cmp(s, "INF"))
+      *p = DBL_PINFTY;
+    else if (!soap_tag_cmp(s, "+INF"))
+      *p = DBL_PINFTY;
+    else if (!soap_tag_cmp(s, "-INF"))
+      *p = DBL_NINFTY;
+    else if (!soap_tag_cmp(s, "NaN"))
+      *p = DBL_NAN;
+    else
+    {
+#ifdef HAVE_STRTOD
+      char *r;
+      *p = strtod(s, &r);
+      if (*r)
+#endif
+#ifdef HAVE_SSCANF
+        if (sscanf(s, "%lg", p) != 1)
+          soap->error = SOAP_TYPE;
+#else
+        soap->error = SOAP_TYPE;
+#endif
+    }
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+double *
+SOAP_FMAC2
+soap_indouble(struct soap *soap, const char *tag, double *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type != '\0' && soap_isnumeric(soap, type))
+    return NULL;
+#endif
+  p = (double*)soap_id_enter(soap, soap->id, p, t, sizeof(double), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (double*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(double), 0, NULL);
+  else if (p)
+  { if (soap_s2double(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_unsignedByte2s(struct soap *soap, unsigned char n)
+{ return soap_unsignedLong2s(soap, (unsigned long)n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outunsignedByte(struct soap *soap, const char *tag, int id, const unsigned char *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_unsignedLong2s(soap, (unsigned long)*p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2unsignedByte(struct soap *soap, const char *s, unsigned char *p)
+{ if (s)
+  { unsigned long n;
+    char *r;
+    n = soap_strtoul(s, &r, 10);
+    if (s == r || *r || n > 255)
+      soap->error = SOAP_TYPE;
+    *p = (unsigned char)n;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+unsigned char *
+SOAP_FMAC2
+soap_inunsignedByte(struct soap *soap, const char *tag, unsigned char *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":unsignedByte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (unsigned char*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned char), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (unsigned char*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(unsigned char), 0, NULL);
+  else if (p)
+  { if (soap_s2unsignedByte(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_unsignedShort2s(struct soap *soap, unsigned short n)
+{ return soap_unsignedLong2s(soap, (unsigned long)n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outunsignedShort(struct soap *soap, const char *tag, int id, const unsigned short *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_unsignedLong2s(soap, (unsigned long)*p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2unsignedShort(struct soap *soap, const char *s, unsigned short *p)
+{ if (s)
+  { unsigned long n;
+    char *r;
+    n = soap_strtoul(s, &r, 10);
+    if (s == r || *r || n > 65535)
+      soap->error = SOAP_TYPE;
+    *p = (unsigned short)n;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+unsigned short *
+SOAP_FMAC2
+soap_inunsignedShort(struct soap *soap, const char *tag, unsigned short *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":unsignedShort")
+   && soap_match_tag(soap, soap->type, ":unsignedByte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (unsigned short*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned short), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (unsigned short*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(unsigned short), 0, NULL);
+  else if (p)
+  { if (soap_s2unsignedShort(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_unsignedInt2s(struct soap *soap, unsigned int n)
+{ return soap_unsignedLong2s(soap, (unsigned long)n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outunsignedInt(struct soap *soap, const char *tag, int id, const unsigned int *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_unsignedLong2s(soap, (unsigned long)*p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2unsignedInt(struct soap *soap, const char *s, unsigned int *p)
+{ if (s)
+  { char *r;
+    *p = (unsigned int)soap_strtoul(s, &r, 10);
+    if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+     || soap_errno == SOAP_ERANGE
+#endif
+#endif
+    )
+      soap->error = SOAP_TYPE;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+unsigned int *
+SOAP_FMAC2
+soap_inunsignedInt(struct soap *soap, const char *tag, unsigned int *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":unsignedInt")
+   && soap_match_tag(soap, soap->type, ":unsignedShort")
+   && soap_match_tag(soap, soap->type, ":unsignedByte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (unsigned int*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned int), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (unsigned int*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(unsigned int), 0, NULL);
+  else if (p)
+  { if (soap_s2unsignedInt(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_unsignedLong2s(struct soap *soap, unsigned long n)
+{ sprintf(soap->tmpbuf, "%lu", n);
+  return soap->tmpbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outunsignedLong(struct soap *soap, const char *tag, int id, const unsigned long *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_unsignedLong2s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2unsignedLong(struct soap *soap, const char *s, unsigned long *p)
+{ if (s)
+  { char *r;
+    *p = soap_strtoul(s, &r, 10);
+    if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+     || soap_errno == SOAP_ERANGE
+#endif
+#endif
+    )
+      soap->error = SOAP_TYPE;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+unsigned long *
+SOAP_FMAC2
+soap_inunsignedLong(struct soap *soap, const char *tag, unsigned long *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":unsignedInt")
+   && soap_match_tag(soap, soap->type, ":unsignedShort")
+   && soap_match_tag(soap, soap->type, ":unsignedByte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (unsigned long*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned long), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (unsigned long*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(unsigned long), 0, NULL);
+  else if (p)
+  { if (soap_s2unsignedLong(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_ULONG642s(struct soap *soap, ULONG64 n)
+{ sprintf(soap->tmpbuf, SOAP_ULONG_FORMAT, n);
+  return soap->tmpbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outULONG64(struct soap *soap, const char *tag, int id, const ULONG64 *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_ULONG642s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2ULONG64(struct soap *soap, const char *s, ULONG64 *p)
+{ if (s)
+  {
+#ifdef HAVE_STRTOULL
+    char *r;
+    *p = strtoull(s, &r, 10);
+    if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+       || soap_errno == SOAP_ERANGE
+#endif
+#endif
+      )
+#else
+# ifdef HAVE_SSCANF
+    if (sscanf(s, SOAP_ULONG_FORMAT, p) != 1)
+# endif
+#endif
+      soap->error = SOAP_TYPE;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+ULONG64 *
+SOAP_FMAC2
+soap_inULONG64(struct soap *soap, const char *tag, ULONG64 *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":positiveInteger")
+   && soap_match_tag(soap, soap->type, ":nonNegativeInteger")
+   && soap_match_tag(soap, soap->type, ":unsignedLong")
+   && soap_match_tag(soap, soap->type, ":unsignedInt")
+   && soap_match_tag(soap, soap->type, ":unsignedShort")
+   && soap_match_tag(soap, soap->type, ":unsignedByte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+  p = (ULONG64*)soap_id_enter(soap, soap->id, p, t, sizeof(ULONG64), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (ULONG64*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(ULONG64), 0, NULL);
+  else if (p)
+  { if (soap_s2ULONG64(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2string(struct soap *soap, const char *s, char **t)
+{ *t = NULL;
+  if (s && !(*t = soap_strdup(soap, s)))
+    soap->error = SOAP_EOM;
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2QName(struct soap *soap, const char *s, char **t)
+{ if (s)
+  { struct soap_nlist *np;
+    const char *p;
+    if (!strncmp(s, "xml:", 4))
+    { *t = soap_strdup(soap, s);
+      return SOAP_OK;
+    }
+    np = soap->nlist;
+    p = strchr(s, ':');
+    if (p)
+    { register int n = p - s;
+      while (np && (strncmp(np->id, s, n) || np->id[n]))
+        np = np->next;
+      p++;
+    }
+    else
+    { while (np && *np->id)
+        np = np->next;
+      p = s;
+    }
+    if (np)
+    { if (np->index >= 0 && soap->local_namespaces)
+      { register const char *q = soap->local_namespaces[np->index].id;
+        if (q)
+        { if ((*t = (char*)soap_malloc(soap, strlen(p) + strlen(q) + 2)))
+            sprintf(*t, "%s:%s", q, p);
+          return SOAP_OK;
+        }
+      }
+      if (np->ns)
+      { if ((*t = (char*)soap_malloc(soap, strlen(p) + strlen(np->ns) + 4)))
+          sprintf(*t, "\"%s\":%s", np->ns, p);
+        return SOAP_OK;
+      }
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Namespace prefix of '%s' not defined (index=%d, URI=%s)\n", s, np->index, np->ns?np->ns:""));
+      return soap->error = SOAP_NAMESPACE; 
+    }
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Namespace prefix of '%s' not defined, assuming empty namespace\n", s));
+    if ((*t = (char*)soap_malloc(soap, strlen(p) + 4)))
+      sprintf(*t, "\"\":%s", p);
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_QName2s(struct soap *soap, const char *s)
+{ struct Namespace *p;
+  char *t;
+  int n;
+  if (!s || *s != '"')
+  {
+#ifndef WITH_LEAN
+    if (s && (soap->mode & SOAP_XML_CANONICAL))
+    { t = strchr(s, ':');
+      if (t)
+        soap_utilize_ns(soap, s, t - s);
+    }
+#endif
+    return s;
+  }
+  s++;
+  if ((p = soap->local_namespaces))
+  { for (; p->id; p++)
+    { if (p->ns)
+        if (!soap_tag_cmp(s, p->ns))
+          break;
+      if (p->in)
+        if (!soap_tag_cmp(s, p->in))
+          break;
+    }
+    if (p && p->id)
+    { s = strchr(s, '"');
+      if (s)
+      { t = (char*)soap_malloc(soap, strlen(p->id) + strlen(s));
+        strcpy(t, p->id);
+       strcat(t, s + 1);
+        return t;
+      }
+    }
+  }
+  t = (char*)strchr(s, '"');
+  if (t)
+    n = t - s;
+  else
+    n = 0;
+  t = soap_strdup(soap, s);
+  t[n] = '\0';
+  sprintf(soap->tmpbuf, "xmlns:_%d", soap->idnum++);
+  soap_set_attr(soap, soap->tmpbuf, t);
+  s = strchr(s, '"');
+  if (s)
+  { t = (char*)soap_malloc(soap, strlen(soap->tmpbuf) + strlen(s) - 6);
+    strcpy(t, soap->tmpbuf + 6);
+    strcat(t, s + 1);
+  }
+  return t;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outstring(struct soap *soap, const char *tag, int id, char *const*p, const char *type, int n) 
+{ id = soap_element_id(soap, tag, id, *p, NULL, 0, type, n);
+  if (id < 0
+   || soap_element_begin_out(soap, tag, id, type)
+   || soap_string_out(soap, *p, 0)
+   || soap_element_end_out(soap, tag))
+    return soap->error;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char **
+SOAP_FMAC2
+soap_instring(struct soap *soap, const char *tag, char **p, const char *type, int t, int flag, long minlen, long maxlen)
+{ if (soap_element_begin_in(soap, tag, 1))
+  { if (!tag || *tag != '-' || soap->error != SOAP_NO_TAG)
+      return NULL;
+    soap->error = SOAP_OK;
+  }
+  if (!p)
+    if (!(p = (char**)soap_malloc(soap, sizeof(char*))))
+      return NULL;
+  if (soap->body)
+  { *p = soap_string_in(soap, flag, minlen, maxlen);
+    if (!*p || !(char*)soap_id_enter(soap, soap->id, *p, t, sizeof(char*), 0, NULL, NULL, NULL))
+      return NULL;
+  }
+  else
+    *p = NULL;
+  if (*soap->href)
+    p = (char**)soap_id_lookup(soap, soap->href, (void**)p, t, sizeof(char**), 0);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outwstring(struct soap *soap, const char *tag, int id, wchar_t *const*p, const char *type, int n) 
+{ id = soap_element_id(soap, tag, id, *p, NULL, 0, type, n);
+  if (id < 0
+   || soap_element_begin_out(soap, tag, id, type)
+   || soap_wstring_out(soap, *p, 0)
+   || soap_element_end_out(soap, tag))
+    return soap->error;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_2
+SOAP_FMAC1
+wchar_t **
+SOAP_FMAC2
+soap_inwstring(struct soap *soap, const char *tag, wchar_t **p, const char *type, int t, long minlen, long maxlen)
+{ if (soap_element_begin_in(soap, tag, 1))
+  { if (!tag || *tag != '-' || soap->error != SOAP_NO_TAG)
+      return NULL;
+    soap->error = SOAP_OK;
+  }
+  if (!p)
+    if (!(p = (wchar_t**)soap_malloc(soap, sizeof(wchar_t*))))
+      return NULL;
+  if (soap->body)
+  { *p = soap_wstring_in(soap, 1, minlen, maxlen);
+    if (!*p || !(wchar_t*)soap_id_enter(soap, soap->id, *p, t, sizeof(wchar_t*), 0, NULL, NULL, NULL))
+      return NULL;
+  }
+  else
+    *p = NULL;
+  if (*soap->href)
+    p = (wchar_t**)soap_id_lookup(soap, soap->href, (void**)p, t, sizeof(wchar_t**), 0);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+static time_t
+soap_timegm(struct tm *T)
+{
+#if defined(HAVE_TIMEGM)
+  return timegm(T);
+#else
+  time_t t, g, z;
+#ifdef HAVE_GMTIME_R
+  struct tm tm, *tmp = &tm;
+#else
+  struct tm *tmp;
+#endif
+  t = mktime(T);
+  if (t == -1)
+    return -1;
+#ifdef HAVE_GMTIME_R
+  gmtime_r(&t, tmp);
+#else
+  tmp = gmtime(&t);
+#endif
+  tmp->tm_isdst = 0;
+  g = mktime(tmp);
+  if (g == -1)
+    return -1;
+  z = g - t;
+  return t - z;
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_dateTime2s(struct soap *soap, time_t n)
+{ struct tm T, *pT = &T;
+#if defined(HAVE_GMTIME_R)
+  if (gmtime_r(&n, pT))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%SZ", pT);
+  /* The following defines were added for VxWorks*/
+#elif defined(HAVE_PGMTIME_R)
+  if (gmtime_r(&n, pT))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%SZ", pT);
+#elif defined(HAVE_PGMTIME)
+  if (gmtime(&n, pT))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%SZ", pT);
+#elif defined(HAVE_GMTIME)
+  if ((pT = gmtime(&n)))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%SZ", pT);
+#elif defined(HAVE_GETTIMEOFDAY)
+  struct timezone tz;
+  memset((void*)&tz, 0, sizeof(tz));
+# if defined(HAVE_LOCALTIME_R)
+  if (localtime_r(&n, pT))
+  { struct timeval tv;
+    gettimeofday(&tv, &tz);
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+    sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -tz.tz_minuteswest/60+(pT->tm_isdst!=0), abs(tz.tz_minuteswest)%60);
+  }
+# else
+  if ((pT = localtime(&n)))
+  { struct timeval tv;
+    gettimeofday(&tv, &tz);
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+    sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -tz.tz_minuteswest/60+(pT->tm_isdst!=0), abs(tz.tz_minuteswest)%60);
+  }
+#endif
+#elif defined(HAVE_FTIME)
+  struct timeb t;
+  memset((void*)&t, 0, sizeof(t));
+# if defined(HAVE_LOCALTIME_R)
+  if (localtime_r(&n, pT))
+  { ftime(&t);
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+    sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -t.timezone/60+(pT->tm_isdst!=0), abs(t.timezone)%60);
+  }
+  /* The following defines were added for VxWorks*/
+# elif defined(HAVE_PLOCALTIME_R)
+  if (localtime_r(&n, pT))
+  { strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+    sprintf(soap->tmpbuf+strlen(soap->tmpbuf), "%+03d:%02d", t.timezone/60, abs(t.timezone)%60);
+  }
+# else
+  if ((pT = localtime(&n)))
+  { ftime(&t);
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+    sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -t.timezone/60+(pT->tm_isdst!=0), abs(t.timezone)%60);
+  }
+# endif
+#elif defined(HAVE_LOCALTIME_R)
+  if (localtime_r(&n, pT))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+  /* The following defines were added for VxWorks*/
+#elif defined(HAVE_PLOCALTIME_R)
+  if (localtime_r(&n, pT))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+#else
+  if ((pT = localtime(&n)))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+#endif
+  else
+    strcpy(soap->tmpbuf, "1969-12-31T23:59:59Z");
+  return soap->tmpbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outdateTime(struct soap *soap, const char *tag, int id, const time_t *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_dateTime2s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2dateTime(struct soap *soap, const char *s, time_t *p)
+{ if (s)
+  { struct tm T;
+    char zone[16];
+    const char *t;
+    memset((void*)&T, 0, sizeof(T));
+    zone[sizeof(zone)-1] = '\0';
+    if (strchr(s, '-'))
+      t = "%d-%d-%dT%d:%d:%d%15s";
+    else if (strchr(s, ':'))
+      t = "%4d%2d%2dT%d:%d:%d%15s";
+    else /* parse non-XSD-standard alternative ISO 8601 format */
+      t = "%4d%2d%2dT%2d%2d%2d%15s";
+    sscanf(s, t, &T.tm_year, &T.tm_mon, &T.tm_mday, &T.tm_hour, &T.tm_min, &T.tm_sec, zone);
+    if (T.tm_year == 1)
+      T.tm_year = 70;
+    else
+      T.tm_year -= 1900;
+    T.tm_mon--;
+    if (*zone)
+    { if (*zone == '.')
+      { for (s = zone + 1; *s; s++)
+          if (*s < '0' || *s > '9')
+            break;
+      }
+      else
+        s = zone;
+      if (*s == '+' || *s == '-')
+      { int h = 0, m = 0;
+        if (s[3] == ':')
+       { sscanf(s, "%d:%d", &h, &m);
+         if (h < 0)
+           m = -m;
+       }
+       else
+       { m = (int)atol(s);
+         h = m / 100;
+         m = m % 100;
+       }
+        T.tm_hour -= h;
+        T.tm_min -= m;
+      }
+      *p = soap_timegm(&T);
+    }
+    else
+      *p = mktime(&T); /* no time zone: suppose it is localtime? */
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+time_t *
+SOAP_FMAC2
+soap_indateTime(struct soap *soap, const char *tag, time_t *p, const char * type, int t)
+{ if (soap_element_begin_in(soap, tag, 0))
+    return NULL;
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":dateTime"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+  p = (time_t*)soap_id_enter(soap, soap->id, p, t, sizeof(time_t), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (time_t*)soap_id_forward(soap, soap->href, p, t, 0, sizeof(time_t), 0, NULL);
+  else if (p)
+  { if (soap_s2dateTime(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outliteral(struct soap *soap, const char *tag, char *const*p)
+{ int i;
+  const char *t = NULL;
+  if (tag && *tag != '-')
+  { if (soap->local_namespaces && (t = strchr(tag, ':')))
+    { strncpy(soap->tmpbuf, tag, t-tag);
+      soap->tmpbuf[t-tag] = '\0';
+      for (i = 0; soap->local_namespaces[i].id; i++)
+        if (!strcmp(soap->tmpbuf, soap->local_namespaces[i].id))
+          break;
+      t++;
+      sprintf(soap->tmpbuf, "<%s xmlns=\"%s\">", t, soap->local_namespaces[i].ns ? soap->local_namespaces[i].ns : SOAP_STR_EOS);
+    }
+    else
+    { t = tag;
+      sprintf(soap->tmpbuf, "<%s>", tag);
+    }
+    if (soap_send(soap, soap->tmpbuf))
+      return soap->error;
+  }
+  if (p && *p)
+  { if (soap_send(soap, *p))
+      return soap->error;
+  }
+  if (t)
+  { sprintf(soap->tmpbuf, "</%s>", t);
+    return soap_send(soap, soap->tmpbuf);
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char **
+SOAP_FMAC2
+soap_inliteral(struct soap *soap, const char *tag, char **p)
+{ if (soap_element_begin_in(soap, tag, 1))
+  { if (soap->error != SOAP_NO_TAG || soap_unget(soap, soap_get(soap)) == SOAP_TT)
+      return NULL;
+    soap->error = SOAP_OK;
+  }
+  if (!p)
+    if (!(p = (char**)soap_malloc(soap, sizeof(char*))))
+      return NULL;
+  if (soap->null)
+    *p = NULL;
+  else
+    *p = soap_string_in(soap, 0, -1, -1);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outwliteral(struct soap *soap, const char *tag, wchar_t *const*p)
+{ int i;
+  const char *t = NULL;
+  wchar_t c;
+  const wchar_t *s;
+  if (tag && *tag != '-')
+  { if (soap->local_namespaces && (t = strchr(tag, ':')))
+    { strncpy(soap->tmpbuf, tag, t-tag);
+      soap->tmpbuf[t-tag] = '\0';
+      for (i = 0; soap->local_namespaces[i].id; i++)
+        if (!strcmp(soap->tmpbuf, soap->local_namespaces[i].id))
+          break;
+      t++;
+      sprintf(soap->tmpbuf, "<%s xmlns=\"%s\">", t, soap->local_namespaces[i].ns ? soap->local_namespaces[i].ns : SOAP_STR_EOS);
+    }
+    else
+    { t = tag;
+      sprintf(soap->tmpbuf, "<%s>", tag);
+    }
+    if (soap_send(soap, soap->tmpbuf))
+      return soap->error;
+  }
+  if (p)
+  { s = *p;
+    while ((c = *s++))
+      if (soap_pututf8(soap, (unsigned char)c))
+        return soap->error;
+  }
+  if (t)
+  { sprintf(soap->tmpbuf, "</%s>", t);
+    return soap_send(soap, soap->tmpbuf);
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_2
+SOAP_FMAC1
+wchar_t **
+SOAP_FMAC2
+soap_inwliteral(struct soap *soap, const char *tag, wchar_t **p)
+{ if (soap_element_begin_in(soap, tag, 1))
+  { if (soap->error != SOAP_NO_TAG || soap_unget(soap, soap_get(soap)) == SOAP_TT)
+      return NULL;
+    soap->error = SOAP_OK;
+  }
+  if (!p)
+    if (!(p = (wchar_t**)soap_malloc(soap, sizeof(wchar_t*))))
+      return NULL;
+  if (soap->null)
+    *p = NULL;
+  else
+    *p = soap_wstring_in(soap, 0, -1, -1);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char *
+SOAP_FMAC2
+soap_token(struct soap *soap)
+{ register size_t i;
+  register soap_wchar c = 0;
+  register char *s = soap->tmpbuf;
+  if (!soap->body)
+    return SOAP_STR_EOS;
+  do c = soap_get(soap);
+  while (soap_blank(c));
+  for (i = 0; i < sizeof(soap->tmpbuf) - 1; i++)
+  { if (c == SOAP_TT || (int)c == EOF || soap_blank(c))
+      break;
+    *s++ = (char)c;
+    c = soap_get(soap);
+  }
+  if ((int)c == EOF || c == SOAP_TT)
+    soap_unget(soap, c);
+  *s = '\0';
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element content value='%s'\n", soap->tmpbuf));
+  return soap->tmpbuf; /* return non-null pointer */
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char *
+SOAP_FMAC2
+soap_value(struct soap *soap)
+{ register size_t i;
+  register soap_wchar c = 0;
+  register char *s = soap->tmpbuf;
+  if (!soap->body)
+    return SOAP_STR_EOS;
+  do c = soap_get(soap);
+  while (soap_blank(c));
+  for (i = 0; i < sizeof(soap->tmpbuf) - 1; i++)
+  { if (c == SOAP_TT || (int)c == EOF)
+      break;
+    *s++ = (char)c;
+    c = soap_get(soap);
+  }
+  for (s--; i > 0; i--, s--)
+    if (!soap_blank(*s))
+      break;
+  s[1] = '\0';
+  if ((int)c == EOF || c == SOAP_TT)
+    soap_unget(soap, c);
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element content value='%s'\n", soap->tmpbuf));
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+    soap->dom->data = soap_strdup(soap, soap->tmpbuf);
+#endif
+  return soap->tmpbuf; /* return non-null pointer */
+}
+#endif
+
+/******************************************************************************/
+#if !defined(WITH_LEANER) || !defined(WITH_NOHTTP)
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getline(struct soap *soap, char *s, int len)
+{ int i = len;
+  soap_wchar c = 0;
+  for (;;)
+  { while (--i > 0)
+    { c = soap_getchar(soap);
+      if (c == '\r' || c == '\n')
+        break;
+      if ((int)c == EOF)
+        return soap->error = SOAP_EOF;
+      *s++ = (char)c;
+    }
+    if (c != '\n')
+      c = soap_getchar(soap); /* got \r, now get \n */
+    if (c == '\n')
+    { *s = '\0';
+      if (i+1 == len) /* empty line: end of HTTP/MIME header */
+        break;
+      c = soap_unget(soap, soap_getchar(soap));
+      if (c != ' ' && c != '\t') /* HTTP line continuation? */
+        break;
+    }
+    else if ((int)c == EOF)
+      return soap->error = SOAP_EOF;
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static size_t
+soap_count_attachments(struct soap *soap)
+{ 
+#ifndef WITH_LEANER
+  register struct soap_multipart *content;
+  register size_t count = soap->count;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Calculating the message size with attachments, current count=%lu\n", (unsigned long)count));
+  if ((soap->mode & SOAP_ENC_DIME) && !(soap->mode & SOAP_ENC_MTOM))
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Calculating the size of DIME attachments\n"));
+    for (content = soap->dime.first; content; content = content->next)
+    { count += 12 + ((content->size+3)&(~3));
+      if (content->id)
+        count += ((strlen(content->id)+3)&(~3));
+      if (content->type)
+        count += ((strlen(content->type)+3)&(~3));
+      if (content->options)
+        count += ((((unsigned char)content->options[2] << 8) | ((unsigned char)content->options[3]))+7)&(~3);
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Size of DIME attachment content is %lu bytes\n", (unsigned long)content->size));
+    }
+  }
+  if ((soap->mode & SOAP_ENC_MIME) && soap->mime.boundary)
+  { register size_t n = strlen(soap->mime.boundary);
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Calculating the size of MIME attachments\n"));
+    for (content = soap->mime.first; content; content = content->next)
+    { register const char *s;
+      /* count \r\n--boundary\r\n */
+      count += 6 + n;
+      /* count Content-Type: ...\r\n */
+      if (content->type)
+        count += 16 + strlen(content->type);
+      /* count Content-Transfer-Encoding: ...\r\n */
+      s = soap_str_code(mime_codes, content->encoding);
+      if (s)
+        count += 29 + strlen(s);
+      /* count Content-ID: ...\r\n */
+      if (content->id)
+        count += 14 + strlen(content->id);
+      /* count Content-Location: ...\r\n */
+      if (content->location)
+        count += 20 + strlen(content->location);
+      /* count Content-Description: ...\r\n */
+      if (content->description)
+        count += 23 + strlen(content->location);
+      /* count \r\n...content */
+      count += 2 + content->size;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Size of MIME attachment content is %lu bytes\n", (unsigned long)content->size));
+    }
+    /* count \r\n--boundary-- */
+    count += 6 + n;
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New count is %lu bytes\n", (unsigned long)count));
+  return count;
+#else
+  return soap->count;
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+static int
+soap_putdimefield(struct soap *soap, const char *s, size_t n)
+{ if (soap_send_raw(soap, s, n))
+    return soap->error;
+  return soap_send_raw(soap, SOAP_STR_PADDING, -(long)n&3);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_dime_option(struct soap *soap, unsigned short optype, const char *option)
+{ size_t n;
+  char *s = NULL;
+  if (option)
+  { n = strlen(option);
+    s = (char*)soap_malloc(soap, n + 5);
+    if (s)
+    { s[0] = optype >> 8;
+      s[1] = optype & 0xFF;
+      s[2] = n >> 8;
+      s[3] = n & 0xFF;
+      strcpy(s + 4, option);
+    }
+  }
+  return s;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putdimehdr(struct soap *soap)
+{ unsigned char tmp[12];
+  size_t optlen = 0, idlen = 0, typelen = 0;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Put DIME header id='%s'\n", soap->dime.id?soap->dime.id:""));
+  if (soap->dime.options)
+    optlen = (((unsigned char)soap->dime.options[2] << 8) | ((unsigned char)soap->dime.options[3])) + 4;
+  if (soap->dime.id)
+    idlen = strlen(soap->dime.id);
+  if (soap->dime.type)
+    typelen = strlen(soap->dime.type);
+  tmp[0] = SOAP_DIME_VERSION | (soap->dime.flags & 0x7);
+  tmp[1] = soap->dime.flags & 0xF0;
+  tmp[2] = optlen >> 8;
+  tmp[3] = optlen & 0xFF;
+  tmp[4] = idlen >> 8;
+  tmp[5] = idlen & 0xFF;
+  tmp[6] = typelen >> 8;
+  tmp[7] = typelen & 0xFF;
+  tmp[8] = soap->dime.size >> 24;
+  tmp[9] = (soap->dime.size >> 16) & 0xFF;
+  tmp[10] = (soap->dime.size >> 8) & 0xFF;
+  tmp[11] = soap->dime.size & 0xFF;
+  if (soap_send_raw(soap, (char*)tmp, 12)
+   || soap_putdimefield(soap, soap->dime.options, optlen)
+   || soap_putdimefield(soap, soap->dime.id, idlen)
+   || soap_putdimefield(soap, soap->dime.type, typelen))
+    return soap->error;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putdime(struct soap *soap)
+{ struct soap_multipart *content;
+  if (!(soap->mode & SOAP_ENC_DIME))
+    return SOAP_OK;
+  for (content = soap->dime.first; content; content = content->next)
+  { void *handle;
+    soap->dime.size = content->size;
+    soap->dime.id = content->id;
+    soap->dime.type = content->type;
+    soap->dime.options = content->options;
+    soap->dime.flags = SOAP_DIME_VERSION | SOAP_DIME_MEDIA;
+    if (soap->fdimereadopen && ((handle = soap->fdimereadopen(soap, (void*)content->ptr, content->id, content->type, content->options)) || soap->error))
+    { size_t size = content->size;
+      if (!handle)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimereadopen failed\n"));
+        return soap->error;
+      }
+      if (!content->size && ((soap->mode & SOAP_ENC_XML) || (soap->mode & SOAP_IO) == SOAP_IO_CHUNK || (soap->mode & SOAP_IO) == SOAP_IO_STORE))
+      { size_t chunksize = sizeof(soap->tmpbuf);
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked streaming DIME\n"));
+        do 
+        { size = soap->fdimeread(soap, handle, soap->tmpbuf, chunksize);
+          DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimeread returned %lu bytes\n", (unsigned long)size));
+          if (size < chunksize)
+         { soap->dime.flags &= ~SOAP_DIME_CF;
+            if (!content->next)
+              soap->dime.flags |= SOAP_DIME_ME;
+         }
+          else
+            soap->dime.flags |= SOAP_DIME_CF;
+         soap->dime.size = size;
+          if (soap_putdimehdr(soap)
+          || soap_putdimefield(soap, soap->tmpbuf, size))
+            break;
+          if (soap->dime.id)
+         { soap->dime.flags &= ~(SOAP_DIME_MB | SOAP_DIME_MEDIA);
+            soap->dime.id = NULL;
+            soap->dime.type = NULL;
+            soap->dime.options = NULL;
+          }  
+        } while (size >= chunksize);
+      }
+      else
+      { if (!content->next)
+          soap->dime.flags |= SOAP_DIME_ME;
+        if (soap_putdimehdr(soap))
+          return soap->error;
+        do
+        { size_t bufsize;
+         if (size < sizeof(soap->tmpbuf))
+            bufsize = size;
+          else
+            bufsize = sizeof(soap->tmpbuf);
+          if (!(bufsize = soap->fdimeread(soap, handle, soap->tmpbuf, bufsize)))
+          { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimeread failed: insufficient data (%lu bytes remaining from %lu bytes)\n", (unsigned long)size, (unsigned long)soap->dime.size));
+            soap->error = SOAP_EOF;
+           break;
+          }
+          if (soap_send_raw(soap, soap->tmpbuf, bufsize))
+            break;
+          size -= bufsize;
+        } while (size);
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimereadclose\n"));
+        soap_send_raw(soap, SOAP_STR_PADDING, -(long)soap->dime.size&3);
+      }
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimereadclose\n"));
+      if (soap->fdimereadclose)
+        soap->fdimereadclose(soap, handle);
+    }
+    else
+    { if (!content->next)
+        soap->dime.flags |= SOAP_DIME_ME;
+      if (soap_putdimehdr(soap)
+       || soap_putdimefield(soap, (char*)content->ptr, content->size))
+        return soap->error;
+    }
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+static char *
+soap_getdimefield(struct soap *soap, size_t n)
+{ register soap_wchar c;
+  register int i;
+  register char *s;
+  char *p = NULL;
+  if (n)
+  { p = (char*)soap_malloc(soap, n + 1);
+    if (p)
+    { s = p;
+      for (i = n; i > 0; i--)
+      { if ((int)(c = soap_get1(soap)) == EOF)
+        { soap->error = SOAP_EOF;
+          return NULL;
+        }
+        *s++ = (char)c;
+      }
+      *s = '\0';
+      if ((soap->error = soap_move(soap, -(long)n&3)))
+        return NULL;
+    }
+    else
+      soap->error = SOAP_EOM;
+  }
+  return p;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getdimehdr(struct soap *soap)
+{ register soap_wchar c;
+  register char *s;
+  register int i;
+  unsigned char tmp[12];
+  size_t optlen, idlen, typelen;
+  if (!(soap->mode & SOAP_ENC_DIME))
+    return soap->error = SOAP_DIME_END;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get DIME header\n"));
+  if (soap->dime.buflen || soap->dime.chunksize)
+  { if (soap_move(soap, (long)(soap->dime.size - soap_tell(soap))))
+      return soap->error = SOAP_EOF;
+    soap_unget(soap, soap_getchar(soap)); /* skip padding and get hdr */
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... From chunked\n"));
+    return SOAP_OK;
+  }
+  s = (char*)tmp;
+  for (i = 12; i > 0; i--)
+  { if ((int)(c = soap_getchar(soap)) == EOF)
+      return soap->error = SOAP_EOF;
+    *s++ = (char)c;
+  }
+  if ((tmp[0] & 0xF8) != SOAP_DIME_VERSION)
+    return soap->error = SOAP_DIME_MISMATCH;
+  soap->dime.flags = (tmp[0] & 0x7) | (tmp[1] & 0xF0);
+  optlen = (tmp[2] << 8) | tmp[3];
+  idlen = (tmp[4] << 8) | tmp[5];
+  typelen = (tmp[6] << 8) | tmp[7];
+  soap->dime.size = (tmp[8] << 24) | (tmp[9] << 16) | (tmp[10] << 8) | tmp[11];
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DIME size=%lu flags=0x%X\n", (unsigned long)soap->dime.size, soap->dime.flags));
+  if (!(soap->dime.options = soap_getdimefield(soap, optlen)) && soap->error)
+    return soap->error;
+  if (!(soap->dime.id = soap_getdimefield(soap, idlen)) && soap->error)
+    return soap->error;
+  if (!(soap->dime.type = soap_getdimefield(soap, typelen)) && soap->error)
+    return soap->error;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DIME id=%s, type=%s, options=%s\n", soap->dime.id?soap->dime.id:"", soap->dime.type?soap->dime.type:"", soap->dime.options?soap->dime.options+4:""));
+  if (soap->dime.flags & SOAP_DIME_ME)
+    soap->mode &= ~SOAP_ENC_DIME;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getdime(struct soap *soap)
+{ while (soap->dime.flags & SOAP_DIME_CF)
+  { if (soap_getdimehdr(soap))
+      return soap->error;
+    if (soap_move(soap, soap->dime.size))
+      return soap->error = SOAP_EOF;
+  }
+  if (soap_move(soap, ((soap->dime.size+3)&(~3))-soap_tell(soap)))
+    return soap->error = SOAP_EOF;
+  for (;;)
+  { register struct soap_multipart *content;
+    if (soap_getdimehdr(soap))
+      break;
+    if (soap->fdimewriteopen && ((soap->dime.ptr = (char*)soap->fdimewriteopen(soap, soap->dime.id, soap->dime.type, soap->dime.options)) || soap->error))
+    { const char *id, *type, *options;
+      size_t size, n;
+      if (!soap->dime.ptr)
+        return soap->error;
+      id = soap->dime.id;
+      type = soap->dime.type;
+      options = soap->dime.options;
+      for (;;)
+      { size = soap->dime.size;
+        for (;;)
+        { n = soap->buflen - soap->bufidx;
+          if (size < n)
+            n = size;
+          if ((soap->error = soap->fdimewrite(soap, (void*)soap->dime.ptr, soap->buf + soap->bufidx, n)))
+            break;
+         size -= n;
+         if (!size)
+         { soap->bufidx += n;
+           break;
+         }
+         if (soap_recv(soap))
+          { soap->error = SOAP_EOF;
+           goto end;
+          }
+        }
+        if (soap_move(soap, -(long)soap->dime.size&3))
+        { soap->error = SOAP_EOF;
+         break;
+        }
+        if (!(soap->dime.flags & SOAP_DIME_CF))
+          break;
+        if (soap_getdimehdr(soap))
+          break;
+      }
+end:
+      if (soap->fdimewriteclose)
+        soap->fdimewriteclose(soap, (void*)soap->dime.ptr);
+      soap->dime.size = 0;
+      soap->dime.id = id;
+      soap->dime.type = type;
+      soap->dime.options = options;
+    }
+    else if (soap->dime.flags & SOAP_DIME_CF)
+    { const char *id, *type, *options;
+      register soap_wchar c;
+      register char *s;
+      register int i;
+      id = soap->dime.id;
+      type = soap->dime.type;
+      options = soap->dime.options;
+      if (soap_new_block(soap))
+        return SOAP_EOM;
+      for (;;)
+      { s = (char*)soap_push_block(soap, soap->dime.size);
+        if (!s)
+          return soap->error = SOAP_EOM;
+        for (i = soap->dime.size; i > 0; i--)
+        { if ((int)(c = soap_get1(soap)) == EOF)
+            return soap->error = SOAP_EOF;
+          *s++ = (char)c;
+        }
+        if (soap_move(soap, -(long)soap->dime.size&3))
+          return soap->error = SOAP_EOF;
+        if (!(soap->dime.flags & SOAP_DIME_CF))
+          break;
+        if (soap_getdimehdr(soap))
+          return soap->error;
+      }
+      soap->dime.size = soap->blist->size++; /* allocate one more for '\0' */
+      if (!(soap->dime.ptr = soap_save_block(soap, NULL, 0)))
+        return soap->error;
+      soap->dime.ptr[soap->dime.size] = '\0'; /* force 0-terminated */
+      soap->dime.id = id;
+      soap->dime.type = type;
+      soap->dime.options = options;
+    }
+    else
+      soap->dime.ptr = soap_getdimefield(soap, soap->dime.size);
+    content = soap_new_multipart(soap, &soap->dime.first, &soap->dime.last, soap->dime.ptr, soap->dime.size);
+    if (!content)
+      return soap->error = SOAP_EOM;
+    content->id = soap->dime.id;
+    content->type = soap->dime.type;
+    content->options = soap->dime.options;
+    soap_resolve_attachment(soap, content);
+    if (soap->error)
+      return soap->error;
+  }
+  if (soap->error != SOAP_DIME_END)
+    return soap->error;
+  return soap->error = SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getmimehdr(struct soap *soap)
+{ struct soap_multipart *content;
+  do
+  { if (soap_getline(soap, soap->msgbuf, sizeof(soap->msgbuf)))
+      return soap->error;
+  }
+  while (!*soap->msgbuf);
+  if (soap->msgbuf[0] == '-' && soap->msgbuf[1] == '-')
+  { char *s = soap->msgbuf + strlen(soap->msgbuf) - 1;
+    /* remove white space */
+    while (soap_blank(*s))
+      s--;
+    s[1] = '\0';
+    if (soap->mime.boundary)
+    { if (strcmp(soap->msgbuf + 2, soap->mime.boundary))
+        return soap->error = SOAP_MIME_ERROR;
+    }
+    else
+      soap->mime.boundary = soap_strdup(soap, soap->msgbuf + 2);
+    if (soap_getline(soap, soap->msgbuf, sizeof(soap->msgbuf)))
+      return soap->error;
+  }
+  if (soap_set_mime_attachment(soap, NULL, 0, SOAP_MIME_NONE, NULL, NULL, NULL, NULL))
+    return soap->error = SOAP_EOM;
+  content = soap->mime.last;
+  for (;;)
+  { register char *key = soap->msgbuf;
+    register char *val;
+    if (!*key)
+      break;
+    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "MIME header: %s\n", key));
+    val = strchr(soap->msgbuf, ':');
+    if (val)
+    { *val = '\0';
+      do val++;
+      while (*val && *val <= 32);
+      if (!soap_tag_cmp(key, "Content-ID"))
+        content->id = soap_strdup(soap, val);
+      else if (!soap_tag_cmp(key, "Content-Location"))
+        content->location = soap_strdup(soap, val);
+      else if (!soap_tag_cmp(key, "Content-Disposition"))
+        content->id = soap_strdup(soap, soap_get_header_attribute(soap, val, "name"));
+      else if (!soap_tag_cmp(key, "Content-Type"))
+        content->type = soap_strdup(soap, val);
+      else if (!soap_tag_cmp(key, "Content-Description"))
+        content->description = soap_strdup(soap, val);
+      else if (!soap_tag_cmp(key, "Content-Transfer-Encoding"))
+        content->encoding = (enum soap_mime_encoding)soap_int_code(mime_codes, val, (long)SOAP_MIME_NONE);
+    }
+    if (soap_getline(soap, key, sizeof(soap->msgbuf)))
+      return soap->error;
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getmime(struct soap *soap)
+{ register soap_wchar c = 0;
+  if (!soap->mime.last)
+    return SOAP_OK;
+  for (;;)
+  { register size_t i, m = 0;
+    register char *s, *t = NULL;
+    struct soap_multipart *content = soap->mime.last;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Parsing MIME content id=%s type=%s\n", content->id?content->id:"", content->type?content->type:""));
+    if (soap_new_block(soap))
+      return soap->error = SOAP_EOM;
+    for (;;)
+    { register short flag = 0;
+      if (!(s = (char*)soap_push_block(soap, SOAP_BLKLEN)))
+        return soap->error = SOAP_EOM;
+      for (i = 0; i < SOAP_BLKLEN; i++)
+      { if (m > 0)
+        { flag = (*t == '\r');
+         *s++ = *t++;
+         m--;
+       }
+       else
+        { if (!flag)
+         { c = soap_get1(soap);
+           if ((int)c == EOF)
+             return soap->error = SOAP_EOF;
+         }
+         if (flag || c == '\r')
+         { t = soap->tmpbuf;
+           memset(t, 0, sizeof(soap->tmpbuf));
+            strcpy(t, "\n--");
+            if (soap->mime.boundary)
+             strncat(t, soap->mime.boundary, sizeof(soap->tmpbuf)-4);
+           do c = soap_getchar(soap);
+           while (c == *t++);
+           if ((int)c == EOF)
+             return soap->error = SOAP_EOF;
+           if (!*--t)
+             goto end;
+           *t = (char)c;
+           m = t - soap->tmpbuf + 1;
+           t = soap->tmpbuf;
+           c = '\r';
+         }
+         *s++ = (char)c;
+        }
+      }
+    }
+end:
+    *s = '\0'; /* force 0-terminated */
+    content->size = soap_size_block(soap, i+1)-1;
+    content->ptr = soap_save_block(soap, NULL, 0);
+    soap_resolve_attachment(soap, content);
+    if (c == '-' && soap_getchar(soap) == '-')
+      break;
+    while (c != '\r' && (int)c != EOF && soap_blank(c))
+      c = soap_getchar(soap);
+    if (c != '\r' || soap_getchar(soap) != '\n')
+      return soap->error = SOAP_MIME_ERROR;
+    if (soap_getmimehdr(soap))
+      return soap->error;
+  }
+  /*
+  do c = soap_getchar(soap);
+  while ((int)c != EOF && c != '\r' && c != '\n');
+  if ((int)c != '\r' || soap_getchar(soap) != '\n')
+    return soap->error = SOAP_MIME_ERROR;
+  */
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+static int
+soap_match_cid(const char *s, const char *t)
+{ register size_t n;
+  if (!s)
+    return 1;
+  if (!strcmp(s, t))
+    return 0;
+  if (!strncmp(s, "cid:", 4))
+    s += 4;
+  n = strlen(t);
+  if (*t == '<')
+  { t++;
+    n -= 2;
+  }
+  if (!strncmp(s, t, n) && !s[n])
+    return 0;
+  return 1;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+static void
+soap_resolve_attachment(struct soap *soap, struct soap_multipart *content)
+{ if (content->id)
+  { register struct soap_xlist **xp = &soap->xlist;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving attachment data for id=%s\n", content->id));
+    while (*xp)
+    { register struct soap_xlist *xq = *xp;
+      if (!soap_match_cid(xq->id, content->id))
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Found matching attachment %s for content id=%s\n", xq->id, content->id));
+       *xp = xq->next;
+        *xq->ptr = (unsigned char*)content->ptr;
+        *xq->size = (int)content->size;
+        *xq->type = (char*)content->type;
+       if (content->options)
+          *xq->options = (char*)content->options;
+        else
+          *xq->options = (char*)content->description;
+       SOAP_FREE(soap, xq);
+      }
+      else
+        xp = &(*xp)->next;
+    }
+  }
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putmimehdr(struct soap *soap, struct soap_multipart *content)
+{ const char *s;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "MIME attachment type=%s\n", content->type?content->type:""));
+  if (soap_send3(soap, "\r\n--", soap->mime.boundary, "\r\n"))
+    return soap->error;
+  if (content->type && soap_send3(soap, "Content-Type: ", content->type, "\r\n"))
+    return soap->error;
+  s = soap_str_code(mime_codes, content->encoding);
+  if (s && soap_send3(soap, "Content-Transfer-Encoding: ", s, "\r\n"))
+    return soap->error;
+  if (content->id && soap_send3(soap, "Content-ID: ", content->id, "\r\n"))
+    return soap->error;
+  if (content->location && soap_send3(soap, "Content-Location: ", content->location, "\r\n"))
+    return soap->error;
+  if (content->description && soap_send3(soap, "Content-Description: ", content->description, "\r\n"))
+    return soap->error;
+  return soap_send_raw(soap, "\r\n", 2);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putmime(struct soap *soap)
+{ struct soap_multipart *content;
+  if (!(soap->mode & SOAP_ENC_MIME) || !soap->mime.boundary)
+    return SOAP_OK;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending MIME attachments\n"));
+  for (content = soap->mime.first; content; content = content->next)
+    if (soap_putmimehdr(soap, content)
+     || soap_send_raw(soap, content->ptr, content->size))
+      return soap->error;
+  return soap_send3(soap, "\r\n--", soap->mime.boundary, "--");
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_dime(struct soap *soap)
+{ soap->omode |= SOAP_ENC_DIME;
+  soap->dime.first = NULL;
+  soap->dime.last = NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_mime(struct soap *soap, const char *boundary, const char *start)
+{ soap->omode |= SOAP_ENC_MIME;
+  soap->mime.first = NULL;
+  soap->mime.last = NULL;
+  soap->mime.boundary = soap_strdup(soap, boundary);
+  soap->mime.start = soap_strdup(soap, start);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_clr_dime(struct soap *soap)
+{ soap->omode &= ~SOAP_ENC_DIME;
+  soap->dime.first = NULL;
+  soap->dime.last = NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_clr_mime(struct soap *soap)
+{ soap->omode &= ~SOAP_ENC_MIME;
+  soap->mime.first = NULL;
+  soap->mime.last = NULL;
+  soap->mime.boundary = NULL;
+  soap->mime.start = NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+static struct soap_multipart*
+soap_new_multipart(struct soap *soap, struct soap_multipart **first, struct soap_multipart **last, char *ptr, size_t size)
+{ struct soap_multipart *content;
+  content = (struct soap_multipart*)soap_malloc(soap, sizeof(struct soap_multipart));
+  if (content)
+  { content->next = NULL;
+    content->ptr = ptr;
+    content->size = size;
+    content->id = NULL;
+    content->type = NULL;
+    content->options = NULL;
+    content->encoding = SOAP_MIME_NONE;
+    content->location = NULL;
+    content->description = NULL;
+    if (!*first)
+      *first = content;
+    if (*last)
+      (*last)->next = content;
+    *last = content;
+  }
+  return content;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_dime_attachment(struct soap *soap, char *ptr, size_t size, const char *type, const char *id, unsigned short optype, const char *option)
+{ struct soap_multipart *content = soap_new_multipart(soap, &soap->dime.first, &soap->dime.last, ptr, size);
+  if (!content)
+    return SOAP_EOM;
+  content->id = soap_strdup(soap, id);
+  content->type = soap_strdup(soap, type);
+  content->options = soap_dime_option(soap, optype, option);
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_mime_attachment(struct soap *soap, char *ptr, size_t size, enum soap_mime_encoding encoding, const char *type, const char *id, const char *location, const char *description)
+{ struct soap_multipart *content = soap_new_multipart(soap, &soap->mime.first, &soap->mime.last, ptr, size);
+  if (!content)
+    return SOAP_EOM;
+  content->id = soap_strdup(soap, id);
+  content->type = soap_strdup(soap, type);
+  content->encoding = encoding;
+  content->location = soap_strdup(soap, location);
+  content->description = soap_strdup(soap, description);
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap_multipart*
+SOAP_FMAC2
+soap_next_multipart(struct soap_multipart *content)
+{ if (content)
+    return content->next;
+  return NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+static void
+soap_select_mime_boundary(struct soap *soap)
+{ while (!soap->mime.boundary || soap_valid_mime_boundary(soap))
+  { register char *s = soap->mime.boundary;
+    register size_t n = 0;
+    if (s)
+      n = strlen(s);
+    if (n < 16)
+    { n = 72;
+      s = soap->mime.boundary = (char*)soap_malloc(soap, n + 1);
+      if (!s)
+        return;
+    }
+    strcpy(s, "<>");
+    s += 2;
+    n -= 4;
+    while (n)
+    { *s++ = soap_base64o[soap_random & 0x3F];
+      n--;
+    }
+    strcpy(s, "<>");
+  }
+  if (!soap->mime.start)
+    soap->mime.start = "<SOAP-ENV:Envelope>";
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+static int
+soap_valid_mime_boundary(struct soap *soap)
+{ register struct soap_multipart *content;
+  register size_t k = strlen(soap->mime.boundary);
+  for (content = soap->mime.first; content; content = content->next)
+  { if (content->ptr && content->size >= k)
+    { register const char *p = (const char*)content->ptr; 
+      register size_t i;
+      for (i = 0; i < content->size - k; i++, p++)
+        if (!strncmp(p, soap->mime.boundary, k))
+          return SOAP_ERR;
+    }
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+
+#ifdef WITH_COOKIES
+/******************************************************************************/
+SOAP_FMAC1
+size_t
+SOAP_FMAC2
+soap_encode_cookie(const char *s, char *t, size_t len)
+{ register int c;
+  register size_t n = len;
+  while ((c = *s++) && --n > 0)
+  { if (c > ' ' && c < 128 && !strchr("()<>@,;:\\\"/[]?={}", c))
+      *t++ = c;
+    else if (n > 2)
+    { *t++ = '%';
+      *t++ = (c >> 4) + (c > 159 ? '7' : '0');
+      c &= 0xF;
+      *t++ = c + (c > 9 ? '7' : '0');
+      n -= 2;
+    }
+    else
+      break;
+  }
+  *t = '\0';
+  return len - n;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+struct soap_cookie*
+SOAP_FMAC2
+soap_cookie(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  size_t n;
+  if (!domain)
+    domain = soap->cookie_domain;
+  if (!path)
+    path = soap->cookie_path;
+  if (*path == '/')
+    path++;
+  n = strlen(path);
+  for (p = soap->cookies; p; p = p->next)
+    if (!strcmp(p->name, name)
+     && domain
+     && p->domain
+     && !strcmp(p->domain, domain)
+     && !strncmp(p->path, path, n))
+      break;
+  return p;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+struct soap_cookie*
+SOAP_FMAC2
+soap_set_cookie(struct soap *soap, const char *name, const char *value, const char *domain, const char *path)
+{ struct soap_cookie **p, *q;
+  int n;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set cookie: %s=%s domain=%s path=%s\n", name, value?value:"", domain?domain:"", path?path:""));
+  if (!domain)
+    domain = soap->cookie_domain;
+  if (!path)
+    path = soap->cookie_path;
+  if (!path)
+  { soap_set_receiver_error(soap, "Cookie path not set", NULL, SOAP_HTTP_ERROR);
+    return NULL;
+  }
+  if (*path == '/')
+    path++;
+  q = soap_cookie(soap, name, domain, path);
+  if (!q)
+  { if ((q = (struct soap_cookie*)SOAP_MALLOC(soap, sizeof(struct soap_cookie))))
+    { if ((q->name = (char*)SOAP_MALLOC(soap, strlen(name)+1)))
+        strcpy(q->name, name);
+      q->value = NULL;
+      q->domain = NULL;
+      q->path = NULL;
+      q->expire = -1;
+      q->version = 0;
+      q->secure = 0;
+      q->modified = 0;
+      for (p = &soap->cookies, n = soap->cookie_max; *p && n; p = &(*p)->next, n--)
+        if (!strcmp((*p)->name, name) && (*p)->path && strcmp((*p)->path, path) < 0)
+          break;
+      if (n)
+      { q->next = *p;
+        *p = q;
+      }
+      else
+      { SOAP_FREE(soap, q->name);
+        SOAP_FREE(soap, q);
+        q = NULL;
+      }
+    }
+  }
+  else
+    q->modified = 1;
+  if (q)
+  { if (q->value)
+    { SOAP_FREE(soap, q->value);
+      q->value = NULL;
+    }
+    if (q->domain)
+    { SOAP_FREE(soap, q->domain);
+      q->domain = NULL;
+    }
+    if (q->path)
+    { SOAP_FREE(soap, q->path);
+      q->path = NULL;
+    }
+    if (value && *value && (q->value = (char*)SOAP_MALLOC(soap, strlen(value)+1)))
+      strcpy(q->value, value);
+    if (domain && *domain && (q->domain = (char*)SOAP_MALLOC(soap, strlen(domain)+1)))
+      strcpy(q->domain, domain);
+    if (path && *path && (q->path = (char*)SOAP_MALLOC(soap, strlen(path)+1)))
+      strcpy(q->path, path);
+    q->session = 1;
+    q->env = 0;
+  }
+  return q;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_clr_cookie(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie **p, *q;
+  if (!domain)
+    domain = soap->cookie_domain;
+  if (!domain)
+  { soap_set_receiver_error(soap, "Cookie domain not set", NULL, SOAP_HTTP_ERROR);
+    return;
+  }
+  if (!path)
+    path = soap->cookie_path;
+  if (!path)
+  { soap_set_receiver_error(soap, "Cookie path not set", NULL, SOAP_HTTP_ERROR);
+    return;
+  }
+  if (*path == '/')
+    path++;
+  for (p = &soap->cookies, q = *p; q; q = *p)
+    if (!strcmp(q->name, name) && !strcmp(q->domain, domain) && !strncmp(q->path, path, strlen(q->path)))
+    { if (q->value)
+        SOAP_FREE(soap, q->value);
+      if (q->domain)
+        SOAP_FREE(soap, q->domain);
+      if (q->path)
+        SOAP_FREE(soap, q->path);
+      *p = q->next;
+      SOAP_FREE(soap, q);
+    }
+    else
+      p = &q->next;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_cookie_value(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  if ((p = soap_cookie(soap, name, domain, path)))
+    return p->value;
+  return NULL;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_env_cookie_value(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  if ((p = soap_cookie(soap, name, domain, path)) && p->env)
+    return p->value;
+  return NULL;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+long
+SOAP_FMAC2
+soap_cookie_expire(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  if ((p = soap_cookie(soap, name, domain, path)))
+    return p->expire;
+  return -1;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_cookie_expire(struct soap *soap, const char *name, long expire, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  if ((p = soap_cookie(soap, name, domain, path)))
+  { p->expire = expire;
+    p->modified = 1;
+    return SOAP_OK;
+  }
+  return SOAP_ERR;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_cookie_session(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  if ((p = soap_cookie(soap, name, domain, path)))
+  { p->session = 1;
+    p->modified = 1;
+    return SOAP_OK;
+  }
+  return SOAP_ERR;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_clr_cookie_session(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  if ((p = soap_cookie(soap, name, domain, path)))
+  { p->session = 0;
+    p->modified = 1;
+    return SOAP_OK;
+  }
+  return SOAP_ERR;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putsetcookies(struct soap *soap)
+{ struct soap_cookie *p;
+  char *s, tmp[4096];
+  const char *t;
+  for (p = soap->cookies; p; p = p->next)
+  { if (p->modified || !p->env)
+    { s = tmp;
+      if (p->name)
+        s += soap_encode_cookie(p->name, s, tmp-s+4064);
+      if (p->value && *p->value)
+      { *s++ = '=';
+        s += soap_encode_cookie(p->value, s, tmp-s+4064);
+      }
+      if (p->domain && (int)strlen(p->domain) < tmp-s+4064)
+        sprintf(s, ";Domain=\"%s\"", p->domain);
+      else if (soap->cookie_domain && (int)strlen(soap->cookie_domain) < tmp-s+4064)
+        sprintf(s, ";Domain=\"%s\"", soap->cookie_domain);
+      strcat(s, ";Path=\"/");
+      if (p->path)
+        t = p->path;
+      else
+        t = soap->cookie_path;
+      if (t)
+      { if (*t == '/')
+          t++;
+        if ((int)strlen(t) < tmp-s+4064)
+          strcat(s, t);
+      }
+      s += strlen(s);
+      *s++ = '"';
+      if (p->version > 0)
+        sprintf(s, ";Version=%u", p->version);
+      if (p->expire >= 0)
+        sprintf(s, ";Max-Age=%ld", p->expire);
+      if (p->secure)
+        strcat(s, ";Secure");
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set-Cookie: %s\n", tmp));
+      if ((soap->error = soap->fposthdr(soap, "Set-Cookie", tmp)))
+        return soap->error;
+    }
+  }
+  return SOAP_OK;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putcookies(struct soap *soap, const char *domain, const char *path, int secure)
+{ struct soap_cookie **p, *q;
+  unsigned int version = 0;
+  time_t now = time(NULL);
+  char *s, tmp[4096];
+  p = &soap->cookies;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending cookies for domain=%s path=%s\n", domain, path));
+  if (*path == '/')
+    path++;
+  while ((q = *p))
+  { if (q->expire && now > q->expire)
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Cookie %s expired\n", q->name));
+      SOAP_FREE(soap, q->name);
+      if (q->value)
+        SOAP_FREE(soap, q->value);
+      if (q->domain)
+        SOAP_FREE(soap, q->domain);
+      if (q->path)
+        SOAP_FREE(soap, q->path);
+      *p = q->next;
+      SOAP_FREE(soap, q);
+    }
+    else
+    { size_t domlen = 0;
+      if (q->domain)
+      { const char *s = strchr(q->domain, ':');
+        if (s)
+         domlen = s - q->domain;
+       else
+          domlen = strlen(q->domain);
+      }
+      if ((!q->domain || !strncmp(q->domain, domain, domlen))
+          && (!q->path || !strncmp(q->path, path, strlen(q->path)))
+          && (!q->secure || secure))
+      { s = tmp;
+        if (q->version != version)
+        { sprintf(s, "$Version=%u;", q->version);
+          version = q->version;
+        }
+        if (q->name)
+          s += soap_encode_cookie(q->name, s, tmp-s+4080);
+        if (q->value && *q->value)
+        { *s++ = '=';
+          s += soap_encode_cookie(q->value, s, tmp-s+4080);
+        }
+        if (q->path && (int)strlen(q->path) < tmp-s+4080)
+        { sprintf(s, ";$Path=\"/%s\"", (*q->path == '/' ? q->path + 1 : q->path));
+          s += strlen(s);
+        }
+        if (q->domain && (int)strlen(q->domain) < tmp-s+4080)
+          sprintf(s, ";$Domain=\"%s\"", q->domain);
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Cookie: %s\n", tmp));
+        if ((soap->error = soap->fposthdr(soap, "Cookie", tmp)))
+          return soap->error;
+      }
+      p = &q->next;
+    }
+  }
+  return SOAP_OK;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_getcookies(struct soap *soap, const char *val)
+{ struct soap_cookie *p = NULL, *q;
+  const char *s;
+  char *t, tmp[4096]; /* cookie size is up to 4096 bytes [RFC2109] */
+  char *domain = NULL;
+  char *path = NULL;
+  unsigned int version = 0;
+  time_t now = time(NULL);
+  if (!val)
+    return;
+  s = val;
+  while (*s)
+  { s = soap_decode_key(tmp, sizeof(tmp), s);
+    if (!soap_tag_cmp(tmp, "$Version"))
+    { if ((s = soap_decode_val(tmp, sizeof(tmp), s)))
+      { if (p)
+          p->version = (int)atol(tmp);
+        else
+          version = (int)atol(tmp);
+      }
+    }
+    else if (!soap_tag_cmp(tmp, "$Path"))
+    { s = soap_decode_val(tmp, sizeof(tmp), s);
+      if (*tmp)
+      { if ((t = (char*)SOAP_MALLOC(soap, strlen(tmp)+1)))
+          strcpy(t, tmp);
+      }
+      else
+        t = NULL;
+      if (p)
+      { if (p->path)
+          SOAP_FREE(soap, p->path);
+        p->path = t;
+      }
+      else
+      { if (path)
+          SOAP_FREE(soap, path);
+        path = t;
+      }
+    }
+    else if (!soap_tag_cmp(tmp, "$Domain"))
+    { s = soap_decode_val(tmp, sizeof(tmp), s);
+      if (*tmp)
+      { if ((t = (char*)SOAP_MALLOC(soap, strlen(tmp)+1)))
+          strcpy(t, tmp);
+      }
+      else
+        t = NULL;
+      if (p)
+      { if (p->domain)
+          SOAP_FREE(soap, p->domain);
+       p->domain = t;
+      }
+      else
+      { if (domain)
+          SOAP_FREE(soap, domain);
+        domain = t;
+      }
+    }
+    else if (p && !soap_tag_cmp(tmp, "Path"))
+    { if (p->path)
+        SOAP_FREE(soap, p->path);
+      s = soap_decode_val(tmp, sizeof(tmp), s);
+      if (*tmp)
+      { if ((p->path = (char*)SOAP_MALLOC(soap, strlen(tmp)+1)))
+          strcpy(p->path, tmp);
+      }
+      else
+        p->path = NULL;
+    }
+    else if (p && !soap_tag_cmp(tmp, "Domain"))
+    { if (p->domain)
+        SOAP_FREE(soap, p->domain);
+      s = soap_decode_val(tmp, sizeof(tmp), s);
+      if (*tmp)
+      { if ((p->domain = (char*)SOAP_MALLOC(soap, strlen(tmp)+1)))
+          strcpy(p->domain, tmp);
+      }
+      else
+        p->domain = NULL;
+    }
+    else if (p && !soap_tag_cmp(tmp, "Version"))
+    { s = soap_decode_val(tmp, sizeof(tmp), s);
+      p->version = (unsigned int)atol(tmp);
+    }
+    else if (p && !soap_tag_cmp(tmp, "Max-Age"))
+    { s = soap_decode_val(tmp, sizeof(tmp), s);
+      p->expire = now + atol(tmp);
+    }
+    else if (p && !soap_tag_cmp(tmp, "Expires"))
+    { struct tm T;
+      char a[3]; 
+      static const char mns[] = "anebarprayunulugepctovec";
+      s = soap_decode_val(tmp, sizeof(tmp), s);
+      if (strlen(tmp) > 20)
+      { memset((void*)&T, 0, sizeof(T));
+        a[0] = tmp[4];
+        a[1] = tmp[5];
+        a[2] = '\0';
+        T.tm_mday = (int)atol(a);
+        a[0] = tmp[8];
+        a[1] = tmp[9];
+        T.tm_mon = (strstr(mns, a) - mns) / 2;
+        a[0] = tmp[11];
+        a[1] = tmp[12];
+        T.tm_year = 100 + (int)atol(a);
+        a[0] = tmp[13];
+        a[1] = tmp[14];
+        T.tm_hour = (int)atol(a);
+        a[0] = tmp[16];
+        a[1] = tmp[17];
+        T.tm_min = (int)atol(a);
+        a[0] = tmp[19];
+        a[1] = tmp[20];
+        T.tm_sec = (int)atol(a);
+        p->expire = soap_timegm(&T);
+      }
+    }
+    else if (p && !soap_tag_cmp(tmp, "Secure"))
+      p->secure = 1;
+    else
+    { if (p)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Got environment cookie %s=%s domain=%s path=%s expire=%ld secure=%d\n", p->name, p->value?p->value:"", p->domain?p->domain:"", p->path?p->path:"", p->expire, p->secure));
+        if ((q = soap_set_cookie(soap, p->name, p->value, p->domain, p->path)))
+        { q->version = p->version;
+          q->expire = p->expire;
+          q->secure = p->secure;
+          q->env = 1;
+        }
+        if (p->name)
+          SOAP_FREE(soap, p->name);
+        if (p->value)
+          SOAP_FREE(soap, p->value);
+        if (p->domain)
+          SOAP_FREE(soap, p->domain);
+        if (p->path)
+          SOAP_FREE(soap, p->path);
+        SOAP_FREE(soap, p);
+      }
+      if ((p = (struct soap_cookie*)SOAP_MALLOC(soap, sizeof(struct soap_cookie))))
+      { p->name = (char*)SOAP_MALLOC(soap, strlen(tmp)+1);
+        strcpy(p->name, tmp);
+        s = soap_decode_val(tmp, sizeof(tmp), s);
+        if (*tmp)
+        { p->value = (char*)SOAP_MALLOC(soap, strlen(tmp)+1);
+          strcpy(p->value, tmp);
+        }
+        else
+          p->value = NULL;
+        p->domain = domain;
+        p->path = path;
+        p->expire = 0;
+        p->secure = 0;
+        p->version = version;
+      }
+    }
+  }
+  if (p)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Got environment cookie %s=%s domain=%s path=%s expire=%ld secure=%d\n", p->name, p->value?p->value:"", p->domain?p->domain:"", p->path?p->path:"", p->expire, p->secure));
+    if ((q = soap_set_cookie(soap, p->name, p->value, p->domain, p->path)))
+    { q->version = p->version;
+      q->expire = p->expire;
+      q->secure = p->secure;
+      q->env = 1;
+    }
+    if (p->name)
+      SOAP_FREE(soap, p->name);
+    if (p->value)
+      SOAP_FREE(soap, p->value);
+    if (p->domain)
+      SOAP_FREE(soap, p->domain);
+    if (p->path)
+      SOAP_FREE(soap, p->path);
+    SOAP_FREE(soap, p);
+  }
+  if (domain)
+    SOAP_FREE(soap, domain);
+  if (path)
+    SOAP_FREE(soap, path);
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getenv_cookies(struct soap *soap)
+{ struct soap_cookie *p;
+  const char *s;
+  char key[4096], val[4096]; /* cookie size is up to 4096 bytes [RFC2109] */
+  if (!(s = getenv("HTTP_COOKIE")))
+    return SOAP_ERR;
+  do
+  { s = soap_decode_key(key, sizeof(key), s);
+    s = soap_decode_val(val, sizeof(val), s);
+    p = soap_set_cookie(soap, key, val, NULL, NULL);
+    if (p)
+      p->env = 1;
+  } while (*s);
+  return SOAP_OK;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+struct soap_cookie*
+SOAP_FMAC2
+soap_copy_cookies(struct soap *soap)
+{ struct soap_cookie *p, **q, *r;
+  q = &r;
+  for (p = soap->cookies; p; p = p->next)
+  { if (!(*q = (struct soap_cookie*)SOAP_MALLOC(soap, sizeof(struct soap_cookie))))
+      return r;
+    **q = *p;
+    if (p->name)
+    { if (((*q)->name = (char*)SOAP_MALLOC(soap, strlen(p->name)+1)))
+        strcpy((*q)->name, p->name);
+    }
+    if (p->value)
+    { if (((*q)->value = (char*)SOAP_MALLOC(soap, strlen(p->value)+1)))
+        strcpy((*q)->value, p->value);
+    }
+    if (p->domain)
+    { if (((*q)->domain = (char*)SOAP_MALLOC(soap, strlen(p->domain)+1)))
+        strcpy((*q)->domain, p->domain);
+    }
+    if (p->path)
+    { if (((*q)->path = (char*)SOAP_MALLOC(soap, strlen(p->path)+1)))
+        strcpy((*q)->path, p->path);
+    }
+    q = &(*q)->next;
+  }
+  *q = NULL;
+  return r;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_free_cookies(struct soap *soap)
+{ struct soap_cookie *p;
+  for (p = soap->cookies; p; p = soap->cookies)
+  { soap->cookies = p->next;
+    SOAP_FREE(soap, p->name);
+    if (p->value)
+      SOAP_FREE(soap, p->value);
+    if (p->domain)
+      SOAP_FREE(soap, p->domain);
+    if (p->path)
+      SOAP_FREE(soap, p->path);
+    SOAP_FREE(soap, p);
+  }
+}
+
+/******************************************************************************/
+#endif /* WITH_COOKIES */
+
+/******************************************************************************/
+#ifdef WITH_GZIP
+#ifndef PALM_1
+static int
+soap_getgziphdr(struct soap *soap)
+{ int i;
+  soap_wchar c, f = 0;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get gzip header\n"));
+  for (i = 0; i < 9; i++)
+  { if ((int)(c = soap_get1(soap) == EOF))
+      return soap->error = SOAP_EOF;
+    if (i == 2)
+      f = c;
+  }
+  if (f & 0x04) /* FEXTRA */
+  { for (i = soap_get1(soap) | (soap_get1(soap) << 8); i; i--)
+      if ((int)soap_get1(soap) == EOF)
+        return soap->error = SOAP_EOF;
+  }
+  if (f & 0x08) /* FNAME */
+    do
+      c = soap_get1(soap);
+    while (c && (int)c != EOF);
+  if ((int)c != EOF && (f & 0x10)) /* FCOMMENT */
+    do
+      c = soap_get1(soap);
+    while (c && (int)f != EOF);
+  if ((int)c != EOF && (f & 0x01)) /* FHCRC */
+  { if ((int)(c = soap_get1(soap)) != EOF)
+      c = soap_get1(soap);
+  }
+  if ((int)c == EOF)
+    return soap->error = SOAP_EOF;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_begin_recv(struct soap *soap)
+{ soap_wchar c;
+  soap->error = SOAP_OK;
+  soap_free(soap);
+  soap_set_local_namespaces(soap);
+  soap->version = 0;   /* don't assume we're parsing SOAP content by default */
+#ifndef WITH_NOIDREF
+  soap_free_iht(soap);
+#endif
+  if ((soap->imode & SOAP_IO) == SOAP_IO_CHUNK)
+    soap->omode |= SOAP_IO_CHUNK;
+  soap->imode &= ~SOAP_IO;
+  soap->mode = soap->imode;
+  if (!soap->keep_alive)
+  { soap->buflen = 0;
+    soap->bufidx = 0;
+  }
+  if (!(soap->mode & SOAP_IO_KEEPALIVE))
+    soap->keep_alive = 0;
+  soap->ahead = 0;
+  soap->peeked = 0;
+  soap->level = 0;
+  soap->part = SOAP_BEGIN;
+  soap->alloced = 0;
+  soap->count = 0;
+  soap->length = 0;
+  soap->cdata = 0;
+  *soap->endpoint = '\0';
+  soap->action = NULL;
+#ifndef WITH_LEANER
+  soap->dom = NULL;
+  soap->dime.chunksize = 0;
+  soap->dime.buflen = 0;
+  soap->dime.list = NULL;
+  soap->dime.first = NULL;
+  soap->dime.last = NULL;
+  soap->mime.list = NULL;
+  soap->mime.first = NULL;
+  soap->mime.last = NULL;
+  soap->mime.boundary = NULL;
+  soap->mime.start = NULL;
+  soap->xlist = NULL;
+#endif
+#ifdef WIN32
+#ifndef UNDER_CE
+#ifndef WITH_FASTCGI
+  if (!soap_valid_socket(soap->socket))
+#ifdef __BORLANDC__
+    setmode((SOAP_SOCKET)soap->recvfd, O_BINARY);
+#else
+    _setmode((SOAP_SOCKET)soap->recvfd, _O_BINARY);
+#endif
+#endif
+#endif
+#endif
+#ifdef WITH_ZLIB
+  soap->mode &= ~SOAP_ENC_ZLIB;
+  soap->zlib_in = SOAP_ZLIB_NONE;
+  soap->zlib_out = SOAP_ZLIB_NONE;
+  soap->d_stream.next_in = Z_NULL;
+  soap->d_stream.avail_in = 0;
+  soap->d_stream.next_out = (Byte*)soap->buf;
+  soap->d_stream.avail_out = SOAP_BUFLEN;
+  soap->z_ratio_in = 1.0;
+#endif
+#ifndef WITH_LEANER
+  if (soap->fprepareinit)
+    soap->fprepareinit(soap);
+#endif
+  c = soap_getchar(soap);
+#ifdef WITH_GZIP
+  if (c == 0x1F)
+  { if (soap_getgziphdr(soap))
+      return soap->error;
+    if (inflateInit2(&soap->d_stream, -MAX_WBITS) != Z_OK)
+      return soap->error = SOAP_ZLIB_ERROR;
+    soap->zlib_state = SOAP_ZLIB_INFLATE;
+    soap->mode |= SOAP_ENC_ZLIB;
+    soap->zlib_in = SOAP_ZLIB_GZIP;
+    soap->z_crc = crc32(0L, NULL, 0);
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "gzip initialized\n"));
+    memcpy(soap->z_buf, soap->buf, SOAP_BUFLEN);
+    /* should not chunk over plain transport, so why bother to check? */
+    /* if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK) */
+    /*   soap->z_buflen = soap->bufidx; */
+    /* else */
+    soap->d_stream.next_in = (Byte*)(soap->z_buf + soap->bufidx);
+    soap->d_stream.avail_in = soap->buflen - soap->bufidx;
+    soap->z_buflen = soap->buflen;
+    soap->buflen = soap->bufidx;
+    c = soap_getchar(soap);
+  }  
+#endif
+#ifndef WITH_LEANER
+  if (c == '-' && soap_get0(soap) == '-')
+    soap->mode |= SOAP_ENC_MIME;
+  else if ((c & 0xFFFC) == (SOAP_DIME_VERSION | SOAP_DIME_MB) && (soap_get0(soap) & 0xFFF0) == 0x20)
+    soap->mode |= SOAP_ENC_DIME;
+  else
+#endif
+  { while (soap_blank(c))
+      c = soap_getchar(soap);
+  }
+  if ((int)c == EOF)
+    return soap->error = SOAP_EOF;
+  soap_unget(soap, c);
+#ifndef WITH_NOHTTP
+  /* if not XML or (start of)BOM or MIME/DIME/ZLIB, assume HTTP header */
+  if (c != '<' && c != 0xEF && !(soap->mode & (SOAP_ENC_MIME | SOAP_ENC_DIME | SOAP_ENC_ZLIB)))
+  { soap->mode &= ~SOAP_IO;
+    soap->error = soap->fparse(soap);
+    if (soap->error && soap->error < SOAP_STOP)
+    { soap->keep_alive = 0; /* force close later */
+      return soap->error;
+    }
+    if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
+    { soap->chunkbuflen = soap->buflen;
+      soap->buflen = soap->bufidx;
+      soap->chunksize = 0;
+    }
+#ifndef WITH_LEANER
+    else if (soap->fpreparerecv && soap->buflen != soap->bufidx)
+      soap->fpreparerecv(soap, soap->buf + soap->bufidx, soap->buflen - soap->bufidx);
+#endif
+#ifdef WITH_ZLIB
+    if (soap->zlib_in != SOAP_ZLIB_NONE)
+    { /* fparse should not use soap_unget to push back last char */
+#ifdef WITH_GZIP
+      c = soap_get1(soap);
+      if (c == 0x1F)
+      { if (soap_getgziphdr(soap))
+          return soap->error;
+        if (inflateInit2(&soap->d_stream, -MAX_WBITS) != Z_OK)
+          return soap->error = SOAP_ZLIB_ERROR;
+        soap->zlib_state = SOAP_ZLIB_INFLATE;
+        soap->z_crc = crc32(0L, NULL, 0);
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "gzip initialized\n"));
+      }
+      else
+      { soap_revget1(soap);
+#else
+      {
+#endif
+        if (inflateInit(&soap->d_stream) != Z_OK)
+          return soap->error = SOAP_ZLIB_ERROR;
+        soap->zlib_state = SOAP_ZLIB_INFLATE;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflate initialized\n"));
+      }
+      soap->mode |= SOAP_ENC_ZLIB;
+      memcpy(soap->z_buf, soap->buf, SOAP_BUFLEN);
+      soap->d_stream.next_in = (Byte*)(soap->z_buf + soap->bufidx);
+      soap->d_stream.avail_in = soap->buflen - soap->bufidx;
+      soap->z_buflen = soap->buflen;
+      soap->buflen = soap->bufidx;
+    }
+#endif
+    if (soap->error)
+    { if (soap->error == SOAP_FORM && soap->fform)
+      { soap->error = soap->fform(soap);
+        if (soap->error == SOAP_OK)
+          soap->error = SOAP_STOP; /* prevents further processing */
+      }
+      return soap->error;
+    }
+  }
+#endif
+#ifndef WITH_LEANER
+  if (soap->mode & SOAP_ENC_MIME)
+  { if (soap_getmimehdr(soap))
+      return soap->error;
+    if (soap_get_header_attribute(soap, soap->mime.first->type, "application/dime"))
+      soap->mode |= SOAP_ENC_DIME;
+  }
+  if (soap->mode & SOAP_ENC_DIME)
+  { if (soap_getdimehdr(soap))
+      return soap->error;
+    if (soap->dime.flags & SOAP_DIME_CF)
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked DIME SOAP message\n"));
+      soap->dime.chunksize = soap->dime.size;
+      if (soap->buflen - soap->bufidx >= soap->dime.chunksize)
+      { soap->dime.buflen = soap->buflen;
+        soap->buflen = soap->bufidx + soap->dime.chunksize;
+      }
+      else
+        soap->dime.chunksize -= soap->buflen - soap->bufidx;
+    }
+    soap->count = soap->buflen - soap->bufidx;
+  }
+#endif
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_parse(struct soap *soap)
+{ char header[SOAP_HDRLEN], *s;
+  unsigned short get = 0, status = 0, k = 0;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Waiting for HTTP request/response...\n"));
+  *soap->endpoint = '\0';
+  soap->length = 0;
+  soap->userid = NULL;
+  soap->passwd = NULL;
+  soap->action = NULL;
+  soap->authrealm = NULL;
+  do
+  { if (soap_getline(soap, soap->msgbuf, sizeof(soap->msgbuf)))
+      return soap->error;
+    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "HTTP status: %s\n", soap->msgbuf));
+    for (;;)
+    { if (soap_getline(soap, header, SOAP_HDRLEN))
+      { if (soap->error == SOAP_EOF)
+       { soap->error = SOAP_OK;
+          DBGLOG(TEST,SOAP_MESSAGE(fdebug, "EOF in HTTP header, continue anyway\n"));
+         break;
+       }
+        return soap->error;
+      }
+      if (!*header)
+        break;
+      DBGLOG(TEST,SOAP_MESSAGE(fdebug, "HTTP header: %s\n", header));
+      s = strchr(header, ':');
+      if (s)
+      { *s = '\0';
+        do s++;
+        while (*s && *s <= 32);
+        if ((soap->error = soap->fparsehdr(soap, header, s)))
+        { if (soap->error < SOAP_STOP)
+           return soap->error;
+         status = soap->error;
+         soap->error = SOAP_OK;
+        }
+      }
+    }
+    if ((s = strchr(soap->msgbuf, ' ')))
+    { k = (unsigned short)soap_strtoul(s, &s, 10);
+      if (!soap_blank(*s))
+        k = 0;
+    }
+    else
+      k = 0;
+  } while (k == 100);
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Finished HTTP header parsing\n"));
+  s = strstr(soap->msgbuf, "HTTP/");
+  if (s && s[7] != '1')
+  { if (soap->keep_alive == 1)
+      soap->keep_alive = 0;
+    if (k == 0 && (soap->omode & SOAP_IO) == SOAP_IO_CHUNK) /* k == 0 for HTTP request */
+    { soap->imode |= SOAP_IO_CHUNK;
+      soap->omode = (soap->omode & ~SOAP_IO) | SOAP_IO_STORE;
+    }
+  }
+  if (soap->keep_alive < 0)
+    soap->keep_alive = 1;
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Keep alive connection = %d\n", soap->keep_alive));
+  if (s && (((get = !strncmp(soap->msgbuf, "GET ", 4))) || !strncmp(soap->msgbuf, "POST ", 5)))
+  { size_t m = strlen(soap->endpoint);
+    size_t n = m + (s - soap->msgbuf) - 5 - (!get);
+    if (n >= sizeof(soap->endpoint))
+      n = sizeof(soap->endpoint) - 1;
+    strncpy(soap->path, soap->msgbuf + 4 + (!get), n - m);
+    soap->path[n - m] = '\0';
+    strcat(soap->endpoint, soap->path);
+    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Target endpoint='%s'\n", soap->endpoint));
+    if (get)
+    { soap->error = soap->fget(soap);
+      if (soap->error == SOAP_OK)
+        soap->error = SOAP_STOP; /* prevents further processing */
+      return soap->error;
+    }
+    if (status)
+      return soap->error = status;
+    return SOAP_OK;
+  }
+  if (k == 0 || (k >= 200 && k <= 299) || k == 400 || k == 500)
+    return SOAP_OK;
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "HTTP error %d\n", k));
+  return soap_set_receiver_error(soap, "HTTP error", soap->msgbuf, k);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_parse_header(struct soap *soap, const char *key, const char *val)
+{ if (!soap_tag_cmp(key, "Host"))
+  { 
+#ifdef WITH_OPENSSL
+    if (soap->imode & SOAP_ENC_SSL)
+      strcpy(soap->endpoint, "https://");
+    else
+#endif
+      strcpy(soap->endpoint, "http://");
+    strncat(soap->endpoint, val, sizeof(soap->endpoint) - 8);
+    soap->endpoint[sizeof(soap->endpoint) - 1] = '\0';
+  }
+#ifndef WITH_LEANER
+  else if (!soap_tag_cmp(key, "Content-Type"))
+  { if (soap_get_header_attribute(soap, val, "application/dime"))
+      soap->mode |= SOAP_ENC_DIME;
+    else if (soap_get_header_attribute(soap, val, "multipart/related")
+          || soap_get_header_attribute(soap, val, "multipart/form-data"))
+    { soap->mime.boundary = soap_strdup(soap, soap_get_header_attribute(soap, val, "boundary"));
+      soap->mime.start = soap_strdup(soap, soap_get_header_attribute(soap, val, "start"));
+      soap->mode |= SOAP_ENC_MIME;
+    }
+  }
+#endif
+  else if (!soap_tag_cmp(key, "Content-Length"))
+    soap->length = soap_strtoul(val, NULL, 10);
+  else if (!soap_tag_cmp(key, "Content-Encoding"))
+  { if (!soap_tag_cmp(val, "deflate"))
+#ifdef WITH_ZLIB
+      soap->zlib_in = SOAP_ZLIB_DEFLATE;
+#else
+      return SOAP_ZLIB_ERROR;
+#endif
+    else if (!soap_tag_cmp(val, "gzip"))
+#ifdef WITH_GZIP
+      soap->zlib_in = SOAP_ZLIB_GZIP;
+#else
+      return SOAP_ZLIB_ERROR;
+#endif
+  }
+#ifdef WITH_ZLIB
+  else if (!soap_tag_cmp(key, "Accept-Encoding"))
+  {
+#ifdef WITH_GZIP
+    if (strchr(val, '*') || soap_get_header_attribute(soap, val, "gzip"))
+      soap->zlib_out = SOAP_ZLIB_GZIP;
+    else
+#endif
+    if (strchr(val, '*') || soap_get_header_attribute(soap, val, "deflate"))
+      soap->zlib_out = SOAP_ZLIB_DEFLATE;
+    else
+      soap->zlib_out = SOAP_ZLIB_NONE;
+  }
+#endif
+  else if (!soap_tag_cmp(key, "Transfer-Encoding"))
+  { soap->mode &= ~SOAP_IO;
+    if (!soap_tag_cmp(val, "chunked"))
+      soap->mode |= SOAP_IO_CHUNK;
+  }
+  else if (!soap_tag_cmp(key, "Connection"))
+  { if (!soap_tag_cmp(val, "keep-alive"))
+      soap->keep_alive = -soap->keep_alive;
+    else if (!soap_tag_cmp(val, "close"))
+      soap->keep_alive = 0;
+  }
+#ifndef WITH_LEAN
+  else if (!soap_tag_cmp(key, "Authorization"))
+  { if (!soap_tag_cmp(val, "Basic *"))
+    { int n;
+      char *s;
+      soap_base642s(soap, val + 6, soap->tmpbuf, sizeof(soap->tmpbuf) - 1, &n);
+      soap->tmpbuf[n] = '\0';
+      if ((s = strchr(soap->tmpbuf, ':')))
+      { *s = '\0';
+       soap->userid = soap_strdup(soap, soap->tmpbuf);
+       soap->passwd = soap_strdup(soap, s + 1);
+      }
+    }
+  }
+  else if (!soap_tag_cmp(key, "WWW-Authenticate"))
+    soap->authrealm = soap_strdup(soap, soap_get_header_attribute(soap, val + 6, "realm"));
+  else if (!soap_tag_cmp(key, "Expect"))
+  { if (!soap_tag_cmp(val, "100-continue"))
+    { if ((soap->error = soap->fposthdr(soap, "HTTP/1.1 100 Continue", NULL))
+       || (soap->error = soap->fposthdr(soap, NULL, NULL)))
+        return soap->error;
+    }
+  }
+#endif
+  else if (!soap_tag_cmp(key, "SOAPAction"))
+  { if (*val == '"')
+    { soap->action = soap_strdup(soap, val + 1);
+      soap->action[strlen(soap->action) - 1] = '\0';
+    }
+  }
+  else if (!soap_tag_cmp(key, "Location"))
+  { strncpy(soap->endpoint, val, sizeof(soap->endpoint));
+    soap->endpoint[sizeof(soap->endpoint) - 1] = '\0';
+  }
+#ifdef WITH_COOKIES
+  else if (!soap_tag_cmp(key, "Cookie") || !soap_tag_cmp(key, "Set-Cookie"))
+    soap_getcookies(soap, val);
+#endif
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
+#ifndef PALM_1
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_get_header_attribute(struct soap *soap, const char *line, const char *key)
+{ register const char *s = line;
+  if (s)
+  { while (*s)
+    { register short flag;
+      s = soap_decode_key(soap->tmpbuf, sizeof(soap->tmpbuf), s);
+      flag = soap_tag_cmp(soap->tmpbuf, key);
+      s = soap_decode_val(soap->tmpbuf, sizeof(soap->tmpbuf), s);
+      if (!flag)
+        return soap->tmpbuf;
+    }
+  }
+  return NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
+#ifndef PALM_1
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_decode_key(char *buf, size_t len, const char *val)
+{ return soap_decode(buf, len, val, "=,;");
+}
+#endif
+#endif
+
+/******************************************************************************/
+#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
+#ifndef PALM_1
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_decode_val(char *buf, size_t len, const char *val)
+{ if (*val != '=')
+  { *buf = '\0';
+    return val;
+  }
+  return soap_decode(buf, len, val + 1, ",;");
+}
+#endif
+#endif
+
+/******************************************************************************/
+#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
+#ifndef PALM_1
+static const char*
+soap_decode(char *buf, size_t len, const char *val, const char *sep)
+{ const char *s;
+  char *t = buf;
+  for (s = val; *s; s++)
+    if (*s != ' ' && *s != '\t' && !strchr(sep, *s))
+      break;
+  if (*s == '"')
+  { s++;
+    while (*s && *s != '"' && --len)
+      *t++ = *s++;
+  }
+  else
+  { while (soap_notblank(*s) && !strchr(sep, *s) && --len)
+    { if (*s == '%')
+      { *t++ = ((s[1] >= 'A' ? (s[1] & 0x7) + 9 : s[1] - '0') << 4)
+              + (s[2] >= 'A' ? (s[2] & 0x7) + 9 : s[2] - '0');
+        s += 3;
+      }
+      else
+        *t++ = *s++;
+    }
+  }
+  *t = '\0';
+  while (*s && !strchr(sep, *s))
+    s++;
+  return s;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_envelope_begin_out(struct soap *soap)
+{
+#ifndef WITH_LEANER
+  size_t n = 0;
+  if ((soap->mode & SOAP_ENC_MIME) && soap->mime.boundary && soap->mime.start)
+  { const char *s;
+    if ((soap->mode & SOAP_ENC_DIME) && !(soap->mode & SOAP_ENC_MTOM))
+      s = "application/dime";
+    else if (soap->version == 2)
+      s = "application/soap+xml; charset=utf-8";
+    else
+      s = "text/xml; charset=utf-8";
+    sprintf(soap->tmpbuf, "--%s\r\nContent-Type: %s\r\nContent-Transfer-Encoding: binary\r\nContent-ID: %s\r\n\r\n", soap->mime.boundary, s, soap->mime.start);
+    n = strlen(soap->tmpbuf);
+    if (soap_send_raw(soap, soap->tmpbuf, n))
+      return soap->error;
+  }
+  if (soap->mode & SOAP_IO_LENGTH)
+    soap->dime.size = soap->count;     /* DIME in MIME correction */
+  if (!(soap->mode & SOAP_IO_LENGTH) && (soap->mode & SOAP_ENC_DIME))
+  { if (soap_putdimehdr(soap))
+      return soap->error;
+  }
+#endif
+  soap->part = SOAP_IN_ENVELOPE;
+  return soap_element_begin_out(soap, "SOAP-ENV:Envelope", 0, NULL);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_envelope_end_out(struct soap *soap)
+{ if (soap_element_end_out(soap, "SOAP-ENV:Envelope"))
+    return soap->error;
+#ifndef WITH_LEANER
+  if ((soap->mode & SOAP_IO_LENGTH) && (soap->mode & SOAP_ENC_DIME) && !(soap->mode & SOAP_ENC_MTOM))
+  { soap->dime.size = soap->count - soap->dime.size;   /* DIME in MIME correction */
+    sprintf(soap->id, soap->dime_id_format, 0);
+    soap->dime.id = soap->id;
+    if (soap->local_namespaces)
+    { if (soap->local_namespaces[0].out)
+        soap->dime.type = (char*)soap->local_namespaces[0].out;
+      else
+        soap->dime.type = (char*)soap->local_namespaces[0].ns;
+    }
+    soap->dime.options = NULL;
+    soap->dime.flags = SOAP_DIME_MB | SOAP_DIME_ABSURI;
+    if (!soap->dime.first)
+      soap->dime.flags |= SOAP_DIME_ME;
+    soap->count += 12 + ((strlen(soap->dime.id)+3)&(~3)) + ((strlen(soap->dime.type)+3)&(~3));
+  }
+  if ((soap->mode & SOAP_ENC_DIME) && !(soap->mode & SOAP_ENC_MTOM))
+    return soap_send_raw(soap, SOAP_STR_PADDING, -(long)soap->dime.size&3);
+#endif
+  soap->part = SOAP_END_ENVELOPE;
+  return SOAP_OK;
+} 
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_envelope_begin_in(struct soap *soap)
+{ register struct Namespace *p;
+  soap->part = SOAP_IN_ENVELOPE;
+  if (soap_element_begin_in(soap, "SOAP-ENV:Envelope", 0))
+    return soap->error = SOAP_VERSIONMISMATCH;
+  p = soap->local_namespaces;
+  if (p)
+  { const char *ns = p[0].out;
+    if (!ns)
+      ns = p[0].ns;
+    if (!strcmp(ns, soap_env1))
+    { soap->version = 1; /* make sure we use SOAP 1.1 */
+      if (p[1].out)
+        SOAP_FREE(soap, p[1].out);
+      if ((p[1].out = (char*)SOAP_MALLOC(soap, sizeof(soap_enc1))))
+        strcpy(p[1].out, soap_enc1);
+    }
+    else if (!strcmp(ns, soap_env2))
+    { soap->version = 2; /* make sure we use SOAP 1.2 */
+      if (p[1].out)
+        SOAP_FREE(soap, p[1].out);
+      if ((p[1].out = (char*)SOAP_MALLOC(soap, sizeof(soap_enc2))))
+        strcpy(p[1].out, soap_enc2);
+    }
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_envelope_end_in(struct soap *soap)
+{ soap->part = SOAP_END_ENVELOPE;
+  return soap_element_end_in(soap, "SOAP-ENV:Envelope");
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_body_begin_out(struct soap *soap)
+{ soap->part = SOAP_IN_BODY;
+  if (soap->version == 1)
+    soap->encoding = 1;
+#ifndef WITH_LEAN
+  if ((soap->mode & SOAP_XML_SEC) && soap_set_attr(soap, "wsu:Id", "Body"))
+    return soap->error;
+#endif
+  if (soap_element(soap, "SOAP-ENV:Body", 0, NULL))
+    return soap->error;
+  return soap_element_start_end_out(soap, NULL);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_body_end_out(struct soap *soap)
+{ if (soap_element_end_out(soap, "SOAP-ENV:Body"))
+    return soap->error;
+  soap->part = SOAP_END_BODY;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_body_begin_in(struct soap *soap)
+{ soap->part = SOAP_IN_BODY;
+  if (soap_element_begin_in(soap, "SOAP-ENV:Body", 0))
+    return soap->error;
+  if (!soap->body)
+    soap->part = SOAP_NO_BODY;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_body_end_in(struct soap *soap)
+{ if (soap->part == SOAP_NO_BODY)
+    return SOAP_OK;
+  soap->part = SOAP_END_BODY;
+  return soap_element_end_in(soap, "SOAP-ENV:Body");
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_recv_header(struct soap *soap)
+{ if (soap_getheader(soap) && soap->error == SOAP_TAG_MISMATCH)
+    soap->error = SOAP_OK;
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_endpoint(struct soap *soap, const char *endpoint)
+{ register const char *s;
+  register size_t i, n;
+  soap->endpoint[0] = '\0';
+  soap->host[0] = '\0';
+  soap->path[0] = '/';
+  soap->path[1] = '\0';
+  soap->port = 80;
+  if (!endpoint || !*endpoint)
+    return;
+  if (!strncmp(endpoint, "https:", 6))
+    soap->port = 443;
+  strncpy(soap->endpoint, endpoint, sizeof(soap->endpoint) - 1);
+  s = strchr(endpoint, ':');
+  if (s && s[1] == '/' && s[2] == '/')
+    s += 3;
+  else
+    s = endpoint;
+  n = strlen(s);
+  if (n >= sizeof(soap->host))
+    n = sizeof(soap->host) - 1;
+#ifdef WITH_IPV6
+  if (s[0] == '[')
+  { s++;
+    for (i = 0; i < n; i++)
+    { soap->host[i] = s[i];
+      if (s[i] == ']')
+      { s++;
+        break; 
+      }
+    }
+  }
+  else
+  { for (i = 0; i < n; i++)
+    { soap->host[i] = s[i];
+      if (s[i] == '/' || s[i] == ':')
+        break; 
+    }
+  }
+#else
+  for (i = 0; i < n; i++)
+  { soap->host[i] = s[i];
+    if (s[i] == '/' || s[i] == ':')
+      break; 
+  }
+#endif
+  soap->host[i] = '\0';
+  if (s[i] == ':')
+  { soap->port = (int)atol(s + i + 1);
+    for (i++; i < n; i++)
+      if (s[i] == '/')
+        break;
+  }
+  if (s[i])
+  { strncpy(soap->path, s + i, sizeof(soap->path));
+    soap->path[sizeof(soap->path) - 1] = '\0';
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_connect(struct soap *soap, const char *endpoint, const char *action)
+{ return soap_connect_command(soap, SOAP_POST, endpoint, action);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_connect_command(struct soap *soap, int http_command, const char *endpoint, const char *action)
+{ char host[sizeof(soap->host)];
+  int port;
+  size_t count;
+  soap->error = SOAP_OK;
+  strcpy(host, soap->host); /* save to compare */
+  port = soap->port; /* save to compare */
+  soap_set_endpoint(soap, endpoint);
+#ifndef WITH_LEANER
+  if (soap->fconnect)
+  { if ((soap->error = soap->fconnect(soap, endpoint, soap->host, soap->port)))
+      return soap->error;
+  }
+  else
+#endif
+  if (soap->fopen && *soap->host)
+  { soap->status = http_command;
+    if (!soap->keep_alive || !soap_valid_socket(soap->socket) || strcmp(soap->host, host) || soap->port != port || !soap->fpoll || soap->fpoll(soap))
+    { soap->keep_alive = 0; /* to force close */
+      soap->omode &= ~SOAP_IO_UDP; /* to force close */
+      soap_closesock(soap);
+      DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Connect/reconnect to host='%s' path='%s' port=%d\n", soap->host, soap->path, soap->port));
+#ifdef WITH_UDP
+      if (!strncmp(endpoint, "soap.udp:", 9))
+        soap->omode |= SOAP_IO_UDP;
+#endif
+      soap->socket = soap->fopen(soap, endpoint, soap->host, soap->port);
+      if (soap->error)
+        return soap->error;
+      soap->keep_alive = ((soap->omode & SOAP_IO_KEEPALIVE) != 0);
+    }
+  }
+  count = soap_count_attachments(soap);
+  if (soap_begin_send(soap))
+    return soap->error;
+#ifndef WITH_NOHTTP
+  if ((soap->mode & SOAP_IO) != SOAP_IO_STORE && !(soap->mode & SOAP_ENC_XML) && endpoint)
+  { unsigned int k = soap->mode;
+    soap->mode &= ~(SOAP_IO | SOAP_ENC_ZLIB);
+    if ((k & SOAP_IO) != SOAP_IO_FLUSH)
+      soap->mode |= SOAP_IO_BUFFER;
+    if ((soap->error = soap->fpost(soap, endpoint, soap->host, soap->port, soap->path, action, count)))
+      return soap->error;
+#ifndef WITH_LEANER
+    if ((k & SOAP_IO) == SOAP_IO_CHUNK)
+    { if (soap_flush(soap))
+        return soap->error;
+    }
+#endif
+    soap->mode = k;
+  }
+  else if (action)
+    soap->action = soap_strdup(soap, action);
+  if (http_command != SOAP_POST)
+    return soap_end_send(soap);
+#endif
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+char*
+SOAP_FMAC2
+soap_s2base64(struct soap *soap, const unsigned char *s, char *t, int n)
+{ register int i;
+  register unsigned long m;
+  register char *p;
+  if (!t)
+    t = (char*)soap_malloc(soap, (n + 2) / 3 * 4 + 1);
+  if (!t)
+  { soap->error = SOAP_EOM;
+    return NULL;
+  }
+  p = t;
+  t[0] = '\0';
+  if (!s)
+    return p;
+  for (; n > 2; n -= 3, s += 3)
+  { m = s[0];
+    m = (m << 8) | s[1];
+    m = (m << 8) | s[2];
+    for (i = 4; i > 0; m >>= 6)
+      t[--i] = soap_base64o[m & 0x3F];
+    t += 4;
+  }
+  t[0] = '\0';
+  if (n > 0)
+  { m = 0;
+    for (i = 0; i < n; i++)
+      m = (m << 8) | *s++;
+    for (; i < 3; i++)
+      m <<= 8;
+    for (i++; i > 0; m >>= 6)
+      t[--i] = soap_base64o[m & 0x3F];
+    for (i = 3; i > n; i--)
+      t[i] = '=';
+    t[4] = '\0';
+  }
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_base642s(struct soap *soap, const char *s, char *t, size_t l, int *n)
+{ register int i, j, c;
+  register unsigned long m;
+  register const char *p;
+  if (!s || !*s)
+  { if (n)
+      *n = 0;
+    if (soap->error)
+      return NULL;
+    return SOAP_NON_NULL;
+  }
+  if (!t)
+  { l = (strlen(s) + 3) / 4 * 3;
+    t = (char*)soap_malloc(soap, l);
+  }
+  if (!t)
+  { soap->error = SOAP_EOM;
+    return NULL;
+  }
+  p = t;
+  if (n)
+    *n = 0;
+  for (;;)
+  { for (i = 0; i < SOAP_BLKLEN; i++)
+    { m = 0;
+      j = 0;
+      while (j < 4)
+      { c = *s++;
+        if (c == '=' || !c)
+        { i *= 3;
+          switch (j)
+          { case 2:
+              *t++ = (char)((m >> 4) & 0xFF);
+              i++;
+              break;
+            case 3:
+              *t++ = (char)((m >> 10) & 0xFF);
+              *t++ = (char)((m >> 2) & 0xFF);
+              i += 2;
+          }
+          if (n)
+           *n += i;
+          return p;
+        }
+        c -= '+';
+        if (c >= 0 && c <= 79)
+        { m = (m << 6) + soap_base64i[c];
+          j++;
+        }
+      }
+      *t++ = (char)((m >> 16) & 0xFF);
+      *t++ = (char)((m >> 8) & 0xFF);
+      *t++ = (char)(m & 0xFF);
+      if (l < 3)
+      { if (n)
+         *n += i;
+        return p;
+      }
+      l -= 3;
+    }
+    if (n)
+      *n += 3 * SOAP_BLKLEN;
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+char*
+SOAP_FMAC2
+soap_s2hex(struct soap *soap, const unsigned char *s, char *t, int n)
+{ register char *p;
+  if (!t)
+    t = (char*)soap_malloc(soap, 2 * n + 1);
+  if (!t)
+  { soap->error = SOAP_EOM;
+    return NULL;
+  }
+  p = t;
+  t[0] = '\0';
+  if (s)
+  { for (; n > 0; n--)
+    { register int m = *s++;
+      *t++ = (char)((m >> 4) + (m > 159 ? 'a' - 10 : '0'));
+      m &= 0x0F;
+      *t++ = (char)(m + (m > 9 ? 'a' - 10 : '0'));
+    }
+  }
+  *t++ = '\0';
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_hex2s(struct soap *soap, const char *s, char *t, size_t l, int *n)
+{ register const char *p;
+  if (!s || !*s)
+  { if (n)
+      *n = 0;
+    if (soap->error)
+      return NULL;
+    return SOAP_NON_NULL;
+  }
+  if (!t)
+  { l = strlen(s) / 2;
+    t = (char*)soap_malloc(soap, l);
+  }
+  if (!t)
+  { soap->error = SOAP_EOM;
+    return NULL;
+  }
+  p = t;
+  while (l)
+  { register int d1, d2;
+    d1 = *s++;
+    if (!d1)
+      break;
+    d2 = *s++;
+    if (!d2)
+      break;
+    *t++ = ((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0');
+    l--;
+  }
+  if (n)
+    *n = t - p;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_puthttphdr(struct soap *soap, int status, size_t count)
+{ register const char *s;
+#ifndef WITH_LEANER
+  register const char *r = NULL;
+#endif
+  register int err;
+  if (status == SOAP_FILE && soap->http_content)
+    s = soap->http_content;
+  else if (status == SOAP_HTML)
+    s = "text/html; charset=utf-8";
+  else if (soap->version == 2)
+    s = "application/soap+xml; charset=utf-8";
+  else
+    s = "text/xml; charset=utf-8";
+#ifndef WITH_LEANER
+  if (soap->mode & (SOAP_ENC_DIME | SOAP_ENC_MTOM))
+  { if (soap->mode & SOAP_ENC_MTOM)
+    { r = s;
+      s = "application/xop+xml; charset=utf-8";
+    }
+    else
+      s = "application/dime";
+  }
+  if ((soap->mode & SOAP_ENC_MIME) && soap->mime.boundary && soap->status != SOAP_GET)
+  { register const char *t = strchr(s, ';');
+    sprintf(soap->tmpbuf, "multipart/related; boundary=\"%s\"; type=\"", soap->mime.boundary);
+    if (t)
+      strncat(soap->tmpbuf, s, t - s);
+    else
+      strcat(soap->tmpbuf, s);
+    if (soap->mime.start)
+    { strcat(soap->tmpbuf, "\"; start=\"");
+      strcat(soap->tmpbuf, soap->mime.start);
+    }
+    strcat(soap->tmpbuf, "\"");
+    if (r)
+    { strcat(soap->tmpbuf, "; start-info=\"");
+      strcat(soap->tmpbuf, r);
+      strcat(soap->tmpbuf, "\"");
+    }
+    s = soap->tmpbuf;
+  }
+#endif
+  if ((err = soap->fposthdr(soap, "Content-Type", s)))
+    return err;
+#ifdef WITH_ZLIB
+  if (soap->omode & SOAP_ENC_ZLIB)
+  {
+#ifdef WITH_GZIP
+    err = soap->fposthdr(soap, "Content-Encoding", "gzip");
+#else
+    err = soap->fposthdr(soap, "Content-Encoding", "deflate");
+#endif
+    if (err)
+      return err;
+  }
+#endif
+#ifndef WITH_LEANER
+  if ((soap->omode & SOAP_IO) == SOAP_IO_CHUNK)
+    err = soap->fposthdr(soap, "Transfer-Encoding", "chunked");
+  else
+#endif
+  if (count > 0)
+  { sprintf(soap->tmpbuf, "%lu", (unsigned long)count);
+    err = soap->fposthdr(soap, "Content-Length", soap->tmpbuf);
+  }
+  if (err)
+    return err;
+  return soap->fposthdr(soap, "Connection", soap->keep_alive ? "keep-alive" : "close");
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_get(struct soap *soap)
+{ return SOAP_GET_METHOD;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_post(struct soap *soap, const char *endpoint, const char *host, int port, const char *path, const char *action, size_t count)
+{ register const char *s;
+  register int err;
+  if (soap->status == SOAP_GET)
+  { s = "GET";
+    count = 0;
+  }
+  else
+    s = "POST";
+#ifdef PALM
+  if (!endpoint || (strncmp(endpoint, "http:", 5) && strncmp(endpoint, "https:", 6) && strncmp(endpoint, "httpg:", 6)) && strncmp(endpoint, "_beam:", 6) && strncmp(endpoint, "_local:", 7) && strncmp(endpoint, "_btobex:", 8))
+#else
+  if (!endpoint || (strncmp(endpoint, "http:", 5) && strncmp(endpoint, "https:", 6) && strncmp(endpoint, "httpg:", 6)))
+#endif
+    return SOAP_OK;
+  if (soap->proxy_host && strncmp(endpoint, "https:", 6))
+    sprintf(soap->tmpbuf, "%s %s HTTP/%s", s, endpoint, soap->http_version);
+  else
+    sprintf(soap->tmpbuf, "%s /%s HTTP/%s", s, (*path == '/' ? path + 1 : path), soap->http_version);
+  if ((err = soap->fposthdr(soap, soap->tmpbuf, NULL)))
+    return err;
+  if (port != 80)
+    sprintf(soap->tmpbuf, "%s:%d", host, port);
+  else
+    strcpy(soap->tmpbuf, host); 
+  if ((err = soap->fposthdr(soap, "Host", soap->tmpbuf))
+   || (err = soap->fposthdr(soap, "User-Agent", "gSOAP/2.7"))
+   || (err = soap_puthttphdr(soap, SOAP_OK, count)))
+    return err;
+#ifdef WITH_ZLIB
+#ifdef WITH_GZIP
+  if ((err = soap->fposthdr(soap, "Accept-Encoding", "gzip, deflate")))
+#else
+  if ((err = soap->fposthdr(soap, "Accept-Encoding", "deflate")))
+#endif
+    return err;
+#endif
+#ifndef WITH_LEAN
+  if (soap->userid && soap->passwd && strlen(soap->userid) + strlen(soap->passwd) < 761)
+  { sprintf(soap->tmpbuf + 262, "%s:%s", soap->userid, soap->passwd);
+    strcpy(soap->tmpbuf, "Basic ");
+    soap_s2base64(soap, (const unsigned char*)(soap->tmpbuf + 262), soap->tmpbuf + 6, strlen(soap->tmpbuf + 262));
+    if ((err = soap->fposthdr(soap, "Authorization", soap->tmpbuf)))
+      return err;
+  }
+  if (soap->proxy_userid && soap->proxy_passwd && strlen(soap->proxy_userid) + strlen(soap->proxy_passwd) < 761)
+  { sprintf(soap->tmpbuf + 262, "%s:%s", soap->proxy_userid, soap->proxy_passwd);
+    strcpy(soap->tmpbuf, "Basic ");
+    soap_s2base64(soap, (const unsigned char*)(soap->tmpbuf + 262), soap->tmpbuf + 6, strlen(soap->tmpbuf + 262));
+    if ((err = soap->fposthdr(soap, "Proxy-Authorization", soap->tmpbuf)))
+      return err;
+  }
+#endif
+#ifdef WITH_COOKIES
+#ifdef WITH_OPENSSL
+  if (soap_putcookies(soap, host, path, soap->ssl != NULL))
+    return soap->error;
+#else
+  if (soap_putcookies(soap, host, path, 0))
+    return soap->error;
+#endif
+#endif
+  if (action && soap->version == 1)
+  { sprintf(soap->tmpbuf, "\"%s\"", action);
+    if ((err = soap->fposthdr(soap, "SOAPAction", soap->tmpbuf)))
+      return err;
+  }
+  return soap->fposthdr(soap, NULL, NULL);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_send_header(struct soap *soap, const char *s)
+{ register const char *t;
+  do
+  { t = strchr(s, '\n'); /* disallow \n in HTTP headers */
+    if (!t)
+      t = s + strlen(s);
+    if (soap_send_raw(soap, s, t - s))
+      return soap->error;
+    s = t + 1;
+  } while (*t);
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_post_header(struct soap *soap, const char *key, const char *val)
+{ if (key)
+  { if (http_send_header(soap, key))
+      return soap->error;
+    if (val && (soap_send_raw(soap, ": ", 2) || http_send_header(soap, val)))
+      return soap->error;
+  }
+  return soap_send_raw(soap, "\r\n", 2);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_response(struct soap *soap, int status, size_t count)
+{ register int err;
+#ifdef WMW_RPM_IO
+  if (soap->rpmreqid)
+    httpOutputEnable(soap->rpmreqid);
+#endif  /* WMW_RPM_IO */
+  if (!status || status == SOAP_HTML || status == SOAP_FILE)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "OK 200\n"));
+#ifdef WMW_RPM_IO
+    if (soap->rpmreqid || soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) /* RPM behaves as if standalone */
+#else
+    if (soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) /* standalone application */
+#endif /* WMW_RPM_IO */
+    { sprintf(soap->tmpbuf, "HTTP/%s 200 OK", soap->http_version);
+      if ((err = soap->fposthdr(soap, soap->tmpbuf, NULL)))
+        return err;
+    }
+    else if ((err = soap->fposthdr(soap, "Status", "200 OK")))
+      return err;
+  }
+  else if (status > 200 && status < 600)
+  { sprintf(soap->tmpbuf, "HTTP/%s %d %s", soap->http_version, status, http_error(soap, status));
+    if ((err = soap->fposthdr(soap, soap->tmpbuf, NULL)))
+      return err;
+#ifndef WITH_LEAN 
+    if (status == 401)
+    { sprintf(soap->tmpbuf, "Basic realm=\"%s\"", soap->authrealm ? soap->authrealm : "gSOAP Web Service");
+      if ((err = soap->fposthdr(soap, "WWW-Authenticate", soap->tmpbuf)))
+        return err;
+    }
+    else if ((status >= 301 && status <= 303) || status == 307)
+    { if ((err = soap->fposthdr(soap, "Location", soap->endpoint)))
+        return err;
+    }
+#endif
+  }
+  else
+  { const char *s = *soap_faultcode(soap);
+    if (soap->version == 2 && !strcmp(s, "SOAP-ENV:Sender"))
+      s = "400 Bad Request";
+    else
+      s = "500 Internal Server Error";
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Error %s (status=%d)\n", s, status));
+#ifdef WMW_RPM_IO
+    if (soap->rpmreqid || soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) /* RPM behaves as if standalone */
+#else
+    if (soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) /* standalone application */
+#endif /* WMW_RPM_IO */
+    { sprintf(soap->tmpbuf, "HTTP/%s %s", soap->http_version, s);
+      if ((err = soap->fposthdr(soap, soap->tmpbuf, NULL)))
+        return err;
+    }
+    else if ((err = soap->fposthdr(soap, "Status", s)))
+      return err;
+  }
+  if ((err = soap->fposthdr(soap, "Server", "gSOAP/2.7"))
+   || (err = soap_puthttphdr(soap, status, count)))
+    return err;
+#ifdef WITH_COOKIES
+  if (soap_putsetcookies(soap))
+    return soap->error;
+#endif
+  return soap->fposthdr(soap, NULL, NULL);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_response(struct soap *soap, int status)
+{ register size_t count;
+  if (!(soap->omode & (SOAP_ENC_XML | SOAP_IO_STORE /* this tests for chunking too */))
+   && (status == SOAP_HTML || status == SOAP_FILE))
+  { soap->omode &= ~SOAP_IO;
+    soap->omode |= SOAP_IO_STORE;
+  }
+  soap->status = status;
+  count = soap_count_attachments(soap);
+  if (soap_begin_send(soap))
+    return soap->error;
+#ifndef WITH_NOHTTP
+  if ((soap->mode & SOAP_IO) != SOAP_IO_STORE && !(soap->mode & SOAP_ENC_XML))
+  { register int n = soap->mode;
+    soap->mode &= ~(SOAP_IO | SOAP_ENC_ZLIB);
+    if ((n & SOAP_IO) != SOAP_IO_FLUSH)
+      soap->mode |= SOAP_IO_BUFFER;
+    if ((soap->error = soap->fresponse(soap, status, count)))
+      return soap->error;
+#ifndef WITH_LEANER
+    if ((n & SOAP_IO) == SOAP_IO_CHUNK)
+    { if (soap_flush(soap))
+        return soap->error;
+    }
+#endif
+    soap->mode = n;
+  }
+#endif
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+static const char*
+soap_set_validation_fault(struct soap *soap, const char *s, const char *t)
+{ if (*soap->tag)
+    sprintf(soap->msgbuf, "Validation constraint violation: %s%s in element <%s>", s, t?t:SOAP_STR_EOS, soap->tag);
+  else
+    sprintf(soap->msgbuf, "Validation constraint violation: %s%s", s, t?t:SOAP_STR_EOS);
+  return soap->msgbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_fault(struct soap *soap)
+{ const char **c = soap_faultcode(soap);
+  const char **s = soap_faultstring(soap);
+  if (!*c && !*s && soap->fseterror)
+    soap->fseterror(soap, c, s);
+  if (!*c)
+  { if (soap->version == 2)
+      *c = "SOAP-ENV:Sender";
+    else
+      *c = "SOAP-ENV:Client";
+  }
+  if (*s)
+    return;
+  switch (soap->error)
+  {
+#ifndef WITH_LEAN
+    case SOAP_CLI_FAULT:
+      *s = "Client fault";
+      break;
+    case SOAP_SVR_FAULT:
+      *s = "Server fault";
+      break;
+    case SOAP_TAG_MISMATCH:
+      *s = soap_set_validation_fault(soap, "tag name or namespace mismatch", NULL);
+      break;
+    case SOAP_TYPE:
+      *s = soap_set_validation_fault(soap, "data type mismatch ", soap->type);
+      break;
+    case SOAP_SYNTAX_ERROR:
+      *s = "Well-formedness violation";
+      break;
+    case SOAP_NO_TAG:
+      *s = "No XML element tag";
+      break;
+    case SOAP_MUSTUNDERSTAND:
+      *c = "SOAP-ENV:MustUnderstand";
+      sprintf(soap->msgbuf, "The data in element '%s' must be understood but cannot be handled", soap->tag);
+      *s = soap->msgbuf;
+      break;
+    case SOAP_VERSIONMISMATCH:
+      *c = "SOAP-ENV:VersionMismatch";
+      *s = "SOAP version mismatch or invalid SOAP message";
+      break;
+    case SOAP_DATAENCODINGUNKNOWN:
+      *c = "SOAP-ENV:DataEncodingUnknown";
+      *s = "Unsupported SOAP data encoding";
+      break;
+    case SOAP_NAMESPACE:
+      *s = soap_set_validation_fault(soap, "namespace mismatch", NULL);
+      break;
+    case SOAP_USER_ERROR:
+      *s = "User error";
+      break;
+    case SOAP_FATAL_ERROR:
+      *s = "Fatal error";
+      break;
+    case SOAP_NO_METHOD:
+      sprintf(soap->msgbuf, "Method '%s' not implemented: method name or namespace not recognized", soap->tag);
+      *s = soap->msgbuf;
+      break;
+    case SOAP_GET_METHOD:
+      *s = "HTTP GET method not implemented";
+      break;
+    case SOAP_EOM:
+      *s = "Out of memory";
+      break;
+    case SOAP_IOB:
+      *s = "Array index out of bounds";
+      break;
+    case SOAP_NULL:
+      *s = soap_set_validation_fault(soap, "nil not allowed", NULL);
+      break;
+    case SOAP_DUPLICATE_ID:
+      *s = soap_set_validation_fault(soap, "multiple definitions of id ", soap->id);
+      if (soap->version == 2)
+        *soap_faultsubcode(soap) = "SOAP-ENC:DuplicateID";
+      break;
+    case SOAP_MISSING_ID:
+      *s = soap_set_validation_fault(soap, "missing id for ref ", soap->id);
+      if (soap->version == 2)
+        *soap_faultsubcode(soap) = "SOAP-ENC:MissingID";
+      break;
+    case SOAP_HREF:
+      *s = soap_set_validation_fault(soap, "incompatible object ref ", soap->id);
+      break;
+    case SOAP_FAULT:
+      break;
+#ifndef WITH_NOIO
+    case SOAP_UDP_ERROR:
+      *s = "Message too large for UDP packet";
+      break;
+    case SOAP_TCP_ERROR:
+      *s = tcp_error(soap);
+      break;
+#endif
+    case SOAP_HTTP_ERROR:
+      *s = "HTTP error";
+      break;
+    case SOAP_SSL_ERROR:
+#ifdef WITH_OPENSSL
+      *s = "SSL error";
+#else
+      *s = "OpenSSL not installed: recompile with -DWITH_OPENSSL";
+#endif
+      break;
+    case SOAP_PLUGIN_ERROR:
+      *s = "Plugin registry error";
+      break;
+    case SOAP_DIME_ERROR:
+      *s = "DIME format error";
+      break;
+    case SOAP_DIME_HREF:
+      *s = "DIME href to missing attachment";
+      break;
+    case SOAP_DIME_MISMATCH:
+      *s = "DIME version/transmission error";
+      break;
+    case SOAP_DIME_END:
+      *s = "End of DIME error";
+      break;
+    case SOAP_MIME_ERROR:
+      *s = "MIME format error";
+      break;
+    case SOAP_MIME_HREF:
+      *s = "MIME href to missing attachment";
+      break;
+    case SOAP_MIME_END:
+      *s = "End of MIME error";
+      break;
+    case SOAP_ZLIB_ERROR:
+#ifdef WITH_ZLIB
+      sprintf(soap->msgbuf, "Zlib/gzip error: '%s'", soap->d_stream.msg?soap->d_stream.msg:"");
+      *s = soap->msgbuf;
+#else
+      *s = "Zlib/gzip not installed for (de)compression: recompile with -DWITH_GZIP";
+#endif
+      break;
+    case SOAP_REQUIRED:
+      *s = soap_set_validation_fault(soap, "missing required attribute", NULL);
+      break;
+    case SOAP_PROHIBITED:
+      *s = soap_set_validation_fault(soap, "prohibited attribute present", NULL);
+      break;
+    case SOAP_OCCURS:
+      *s = soap_set_validation_fault(soap, "min/maxOccurs violation", NULL);
+      break;
+    case SOAP_LENGTH:
+      *s = soap_set_validation_fault(soap, "content length violation", NULL);
+      break;
+    case SOAP_STOP:
+      *s = "Stopped: no response sent";
+      break;
+#endif
+    case SOAP_EOF:
+#ifndef WITH_NOIO
+      sprintf(soap->msgbuf, "End of file or no input: '%s'", soap_strerror(soap));
+      *s = soap->msgbuf;
+      break;
+#else
+      *s = "End of file or no input";
+      break;
+#endif
+    default:
+#ifndef WITH_NOHTTP
+#ifndef WITH_LEAN
+      if (soap->error > 200 && soap->error < 600)
+      { sprintf(soap->msgbuf, "HTTP Error: %d %s", soap->error, http_error(soap, soap->error));
+        *s = soap->msgbuf;
+      }
+      else
+#endif
+#endif
+      { sprintf(soap->msgbuf, "Error %d", soap->error);
+        *s = soap->msgbuf;
+      }
+    }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_send_fault(struct soap *soap)
+{ register int status = soap->error;
+  int r = 1;
+  if (status == SOAP_STOP)
+    return status;
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Sending back fault struct for error code %d\n", soap->error));
+  soap->keep_alive = 0; /* to terminate connection */
+  soap_set_fault(soap);
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+  if (soap_valid_socket(soap->socket))
+  { struct timeval timeout;
+    fd_set rfd, sfd;
+    timeout.tv_sec = 0;
+    timeout.tv_usec = 0;
+    FD_ZERO(&rfd);
+    FD_ZERO(&sfd);
+    FD_SET((SOAP_SOCKET)soap->socket, &rfd);
+    FD_SET((SOAP_SOCKET)soap->socket, &sfd);
+    r = select((SOAP_SOCKET)(soap->socket + 1), &rfd, &sfd, NULL, &timeout);
+    if (r > 0)
+    { if (!FD_ISSET((SOAP_SOCKET)soap->socket, &sfd)
+       || (FD_ISSET((SOAP_SOCKET)soap->socket, &rfd)
+        && recv((SOAP_SOCKET)soap->socket, soap->tmpbuf, 1, MSG_PEEK) < 0))
+        r = 0;
+    }
+  }
+#endif
+#endif
+  if ((status != SOAP_EOF || (!soap->recv_timeout && !soap->send_timeout)) && r > 0)
+  { soap->error = SOAP_OK;
+    soap_serializeheader(soap);
+    soap_serializefault(soap);
+    soap_begin_count(soap);
+    if (soap->mode & SOAP_IO_LENGTH)
+    { soap_envelope_begin_out(soap);
+      soap_putheader(soap);
+      soap_body_begin_out(soap);
+      soap_putfault(soap);
+      soap_body_end_out(soap);
+      soap_envelope_end_out(soap);
+    }
+    soap_end_count(soap);
+    if (soap_response(soap, status)
+     || soap_envelope_begin_out(soap)
+     || soap_putheader(soap)
+     || soap_body_begin_out(soap)
+     || soap_putfault(soap)
+     || soap_body_end_out(soap)
+     || soap_envelope_end_out(soap))
+      return soap_closesock(soap);
+    soap_end_send(soap);
+  }
+  soap->error = status;
+  return soap_closesock(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_recv_fault(struct soap *soap)
+{ register int status = soap->error;
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Receiving SOAP Fault\n"));
+  soap->error = SOAP_OK;
+  if (soap_getfault(soap))
+  { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Error: soap_get_soapfault() failed. Is this a SOAP message at all?\n"));
+    *soap_faultcode(soap) = (soap->version == 2 ? "SOAP-ENV:Sender" : "SOAP-ENV:Client");
+    soap->error = status;
+    soap_set_fault(soap);
+  }
+  else
+  { register const char *s = *soap_faultcode(soap);
+    if (!soap_match_tag(soap, s, "SOAP-ENV:Server") || !soap_match_tag(soap, s, "SOAP-ENV:Receiver"))
+      status = SOAP_SVR_FAULT; 
+    else if (!soap_match_tag(soap, s, "SOAP-ENV:Client") || !soap_match_tag(soap, s, "SOAP-ENV:Sender"))
+      status = SOAP_CLI_FAULT;
+    else if (!soap_match_tag(soap, s, "SOAP-ENV:MustUnderstand"))
+      status = SOAP_MUSTUNDERSTAND;
+    else if (!soap_match_tag(soap, s, "SOAP-ENV:VersionMismatch"))
+      status = SOAP_VERSIONMISMATCH;
+    else
+    { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Fault code %s\n", s));
+      status = SOAP_FAULT;
+    }
+    if (soap_body_end_in(soap)
+     || soap_envelope_end_in(soap)
+     || soap_end_recv(soap))
+      return soap_closesock(soap);
+    soap->error = status;
+  }
+  return soap_closesock(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_send_empty_response(struct soap *soap)
+{ soap->count = 0;
+  if (soap_response(soap, SOAP_OK) || soap_end_send(soap))
+    return soap_closesock(soap);
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_recv_empty_response(struct soap *soap)
+{ if (soap_begin_recv(soap) || soap_end_recv(soap))
+    return soap_closesock(soap);
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static const char*
+soap_strerror(struct soap *soap)
+{ register int err = soap->errnum;
+  if (err)
+  {
+#ifndef WIN32
+    return strerror(err);
+#else
+    FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, 0, (LPTSTR)&soap->errorstr, sizeof(soap->errorstr), NULL);
+    return soap->errorstr;
+#endif
+  }
+  return "Operation interrupted or timed out";
+}
+#endif
+#endif 
+
+/******************************************************************************/
+#ifndef PALM_2
+static int
+soap_set_error(struct soap *soap, const char *faultcode, const char *faultsubcode, const char *faultstring, const char *faultdetail, int soaperror)
+{ *soap_faultcode(soap) = faultcode;
+  if (faultsubcode)
+    *soap_faultsubcode(soap) = faultsubcode;
+  *soap_faultstring(soap) = faultstring;
+  if (faultdetail && *faultdetail)
+  { register const char **s = soap_faultdetail(soap);
+    if (s)
+      *s = faultdetail;
+  }
+  return soap->error = soaperror;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_sender_error(struct soap *soap, const char *faultstring, const char *faultdetail, int soaperror)
+{ return soap_set_error(soap, soap->version == 2 ? "SOAP-ENV:Sender" : "SOAP-ENV:Client", NULL, faultstring, faultdetail, soaperror);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_receiver_error(struct soap *soap, const char *faultstring, const char *faultdetail, int soaperror)
+{ return soap_set_error(soap, soap->version == 2 ? "SOAP-ENV:Receiver" : "SOAP-ENV:Server", NULL, faultstring, faultdetail, soaperror);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+static int
+soap_copy_fault(struct soap *soap, const char *faultcode, const char *faultsubcode, const char *faultstring, const char *faultdetail)
+{ char *r = NULL, *s = NULL, *t = NULL;
+  if (faultsubcode)
+    r = soap_strdup(soap, faultsubcode);
+  if (faultstring)
+    s = soap_strdup(soap, faultstring);
+  if (faultdetail)
+    t = soap_strdup(soap, faultdetail);
+  return soap_set_error(soap, faultcode, r, s, t, SOAP_FAULT);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_sender_fault(struct soap *soap, const char *faultstring, const char *faultdetail)
+{ return soap_sender_fault_subcode(soap, NULL, faultstring, faultdetail);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_sender_fault_subcode(struct soap *soap, const char *faultsubcode, const char *faultstring, const char *faultdetail)
+{ return soap_copy_fault(soap, soap->version == 2 ? "SOAP-ENV:Sender" : "SOAP-ENV:Client", faultsubcode, faultstring, faultdetail);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_receiver_fault(struct soap *soap, const char *faultstring, const char *faultdetail)
+{ return soap_receiver_fault_subcode(soap, NULL, faultstring, faultdetail);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_receiver_fault_subcode(struct soap *soap, const char *faultsubcode, const char *faultstring, const char *faultdetail)
+{ return soap_copy_fault(soap, soap->version == 2 ? "SOAP-ENV:Receiver" : "SOAP-ENV:Server", faultsubcode, faultstring, faultdetail);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+#ifndef WITH_NOSTDLIB
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_print_fault(struct soap *soap, FILE *fd)
+{ if (soap->error)
+  { const char *c, *v = NULL, *s, **d;
+    d = soap_faultcode(soap);
+    if (!*d)
+      soap_set_fault(soap);
+    c = *d;
+    if (soap->version == 2)
+      v = *soap_faultsubcode(soap);
+    s = *soap_faultstring(soap);
+    d = soap_faultdetail(soap);
+    fprintf(fd, "%s%d fault: %s [%s]\n\"%s\"\nDetail: %s\n", soap->version ? "SOAP 1." : "Error ", soap->version ? (int)soap->version : soap->error, c, v ? v : "no subcode", s ? s : "[no reason]", d && *d ? *d : "[no detail]");
+  }
+}
+#endif
+#endif
+/******************************************************************************/
+#ifndef PALM_1
+#ifndef WITH_NOSTDLIB
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_print_fault_location(struct soap *soap, FILE *fd)
+{ 
+#ifndef WITH_LEAN
+  int i, j, c1, c2;
+  if (soap->error && soap->buflen > 0)
+  { i = (int)soap->bufidx - 1;
+    if (i <= 0)
+      i = 0;
+    c1 = soap->buf[i];
+    soap->buf[i] = '\0';
+    if ((int)soap->buflen >= i + 1024)
+      j = i + 1023;
+    else
+      j = (int)soap->buflen - 1;
+    c2 = soap->buf[j];
+    soap->buf[j] = '\0';
+    fprintf(fd, "%s%c\n** HERE **\n", soap->buf, c1);
+    if (soap->bufidx < soap->buflen)
+      fprintf(fd, "%s\n", soap->buf + soap->bufidx);
+    soap->buf[i] = c1;
+    soap->buf[j] = c2;
+  }
+#endif
+}
+#endif
+#endif
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_register_plugin_arg(struct soap *soap, int (*fcreate)(struct soap*, struct soap_plugin*, void*), void *arg)
+{ register struct soap_plugin *p;
+  register int r;
+  if (!(p = (struct soap_plugin*)SOAP_MALLOC(soap, sizeof(struct soap_plugin))))
+    return soap->error = SOAP_EOM;
+  p->id = NULL;
+  p->data = NULL;
+  p->fcopy = NULL;
+  p->fdelete = NULL;
+  r = fcreate(soap, p, arg);
+  if (!r && p->fdelete)
+  { p->next = soap->plugins;
+    soap->plugins = p;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Registered '%s' plugin\n", p->id));
+    return SOAP_OK;
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not register plugin '%s': plugin returned error %d (or fdelete callback not set)\n", p->id?p->id:"?", r));
+  SOAP_FREE(soap, p);
+  return r;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static void *
+fplugin(struct soap *soap, const char *id)
+{ register struct soap_plugin *p;
+  for (p = soap->plugins; p; p = p->next)
+    if (p->id == id || !strcmp(p->id, id))
+      return p->data;
+  return NULL;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void *
+SOAP_FMAC2
+soap_lookup_plugin(struct soap *soap, const char *id)
+{ return soap->fplugin(soap, id);
+}
+#endif
+
+/******************************************************************************/
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/org.glite.security.gsoap-plugin/src/stdsoap2_2.7.6b.h b/org.glite.security.gsoap-plugin/src/stdsoap2_2.7.6b.h
new file mode 100644 (file)
index 0000000..17ef597
--- /dev/null
@@ -0,0 +1,2053 @@
+/*
+
+stdsoap2.h 2.7.6b
+
+gSOAP runtime
+
+gSOAP XML Web services tools
+Copyright (C) 2000-2005, Robert van Engelen, Genivia Inc., All Rights Reserved.
+This part of the software is released under one of the following licenses:
+GPL, the gSOAP public license, or Genivia's license for commercial use.
+--------------------------------------------------------------------------------
+Contributors:
+
+Wind River Systems, Inc., for the following additions (marked WR[...]):
+  - vxWorks compatible
+--------------------------------------------------------------------------------
+gSOAP public license.
+
+The contents of this file are subject to the gSOAP Public License Version 1.3
+(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.cs.fsu.edu/~engelen/soaplicense.html
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the License.
+
+The Initial Developer of the Original Code is Robert A. van Engelen.
+Copyright (C) 2000-2005, Robert van Engelen, Genivia Inc., All Rights Reserved.
+--------------------------------------------------------------------------------
+GPL license.
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place, Suite 330, Boston, MA 02111-1307 USA
+
+Author contact information:
+engelen@genivia.com / engelen@acm.org
+--------------------------------------------------------------------------------
+A commercial use license is available from Genivia, Inc., contact@genivia.com
+--------------------------------------------------------------------------------
+*/
+
+#ifdef WITH_SOAPDEFS_H
+# include "soapdefs.h"         /* include user-defined stuff */
+#endif
+
+#ifndef _THREAD_SAFE
+# define _THREAD_SAFE
+#endif
+
+#ifndef OPENSERVER
+# ifndef _REENTRANT
+#  define _REENTRANT
+# endif
+#endif
+
+#ifndef SOAP_FMAC1     /* stdsoap2.h declaration macro */
+# define SOAP_FMAC1
+#endif
+
+#ifndef SOAP_FMAC2     /* stdsoap2.h declaration macro */
+# define SOAP_FMAC2
+#endif
+
+#ifndef SOAP_FMAC3     /* (de)serializer declaration macro */
+# define SOAP_FMAC3
+#endif
+
+#ifndef SOAP_FMAC3S    /* string converter for (de)serializer declaration macro */
+# define SOAP_FMAC3S SOAP_FMAC3
+#endif
+
+#ifndef SOAP_FMAC4     /* (de)serializer declaration macro */
+# define SOAP_FMAC4
+#endif
+
+#ifndef SOAP_FMAC4S    /* string converter for (de)serializer declaration macro */
+# define SOAP_FMAC4S SOAP_FMAC4
+#endif
+
+#ifndef SOAP_FMAC5     /* stub/skeleton declaration macro */
+# define SOAP_FMAC5
+#endif
+
+#ifndef SOAP_FMAC6     /* stub/skeleton declaration macro */
+# define SOAP_FMAC6
+#endif
+
+#ifndef SOAP_CMAC      /* class declaration macro */
+# define SOAP_CMAC
+#endif
+
+#ifndef SOAP_NMAC      /* namespace table declaration macro */
+# define SOAP_NMAC
+#endif
+
+#ifndef SOAP_SOURCE_STAMP
+# define SOAP_SOURCE_STAMP(str)
+#endif
+
+/* gSOAP 2.7.4 and higher: fast look-aside buffering is stable */
+#ifndef WITH_FAST
+# define WITH_FAST
+#endif
+
+#ifdef WITH_LEANER
+# ifndef WITH_LEAN
+#  define WITH_LEAN
+# endif
+#endif
+
+#ifdef WITH_LEAN
+# ifdef WITH_COOKIES
+#  error "Cannot build WITH_LEAN code WITH_COOKIES enabled"
+# endif
+#endif
+
+#ifndef STDSOAP_H
+#define STDSOAP_H
+
+#if defined(__vxworks) || defined(__VXWORKS__)
+# define VXWORKS
+#endif
+
+#ifdef _WIN32
+# ifndef WIN32
+#  define WIN32
+# endif
+#endif
+
+#ifdef UNDER_CE
+# ifndef WIN32
+#  define WIN32
+# endif
+#endif
+
+#ifdef __BORLANDC__
+# ifdef __WIN32__
+#  ifndef WIN32
+#   define WIN32
+#  endif
+# endif
+#endif
+
+#ifdef __CYGWIN__
+# ifndef CYGWIN
+#  define CYGWIN
+# endif
+#endif
+
+#ifdef __SYMBIAN32__ 
+# define SYMBIAN
+# undef WIN32
+#endif
+
+#if defined(__palmos__) || defined(PALM_GCC) || defined(__PALMOS_TRAPS__)
+# ifndef PALM
+#  define PALM
+# endif
+#endif
+
+#if defined(__hpux)
+# ifndef HP_UX
+#  define HP_UX
+# endif
+#endif
+
+#if defined(__alpha) && !defined(__VMS)
+# ifndef TRU64
+#  define TRU64 
+# endif
+#endif
+
+#ifdef __MVS__
+# ifndef OS390
+#  define OS390
+# endif
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+# ifdef WITH_OPENSSL
+#  ifndef HAVE_OPENSSL_SSL_H
+#   undef WITH_OPENSSL
+#  endif
+# endif
+#else
+# if defined(UNDER_CE)
+#  define WITH_LEAN
+#  define HAVE_SSCANF
+# elif defined(WIN32)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+#  define SOAP_LONG_FORMAT "%I64d"
+#  define SOAP_ULONG_FORMAT "%I64u"
+# elif defined(CYGWIN)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(__APPLE__)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_TIMEGM
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(_AIXVERSION_431)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(HP_UX)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(FREEBSD) || defined(__FreeBSD__)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_STRTOLL
+#  define HAVE_STRTOULL
+#  define HAVE_GETTIMEOFDAY
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+#  define SOAP_LONG_FORMAT "%qd"
+#  define SOAP_ULONG_FORMAT "%qu"
+# elif defined(__VMS)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(__GLIBC__) || defined(__GNU__)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_STRTOLL
+#  define HAVE_STRTOULL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_TIMEGM
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+#  define HAVE_ISNAN
+# elif defined(TRU64)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_STRTOLL
+#  define HAVE_STRTOULL
+#  define HAVE_GETTIMEOFDAY
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define __USE_STD_IOSTREAM
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+#  define SOAP_LONG_FORMAT "%ld"
+#  define SOAP_ULONG_FORMAT "%lu"
+# elif defined(MAC_CARBON)
+#  define WITH_NOIO
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GETHOSTBYNAME_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(PALM)
+#  define WITH_LEAN
+#  define HAVE_STRTOD   /* strtod() is defined in palmFunctions.h */
+#  include <stdlib.h>  /* Needs to be included before unix headers */
+#  include <sys_types.h>
+#  define IGNORE_STDIO_STUBS
+#  include <StdIOPalm.h>
+#  define O_NONBLOCK FNONBIO
+#  include <sys_socket.h>
+#  include "palmFunctions.h"
+# elif defined(SYMBIAN)
+#  define WITH_LEAN
+#  define WITH_NONAMESPACES
+#  define HAVE_STRTOD  /* use STRTOD since sscanf doesn't seem to work */
+#  include <e32def.h>
+#  include <sys/ioctl.h>
+# elif defined(VXWORKS)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_PGMTIME_R
+#  define HAVE_PLOCALTIME_R
+#  define HAVE_MKTIME
+# elif defined(OS390)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MB
+# else
+/* Default asumptions on supported functions */
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GETHOSTBYNAME_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# endif
+#endif
+
+/* QNX does not have a working version of strtof */
+#if defined(__QNX__) || defined(QNX)
+# undef HAVE_STRTOF
+#endif
+
+#ifndef SOAP_LONG_FORMAT
+# define SOAP_LONG_FORMAT "%lld"       /* printf format for 64 bit ints */
+#endif
+
+#ifndef SOAP_ULONG_FORMAT
+# define SOAP_ULONG_FORMAT "%llu"      /* printf format for unsigned 64 bit ints */
+#endif
+
+#ifndef WITH_NOSTDLIB
+# include <stdlib.h>
+# ifndef PALM
+#  include <stdio.h>
+#  include <string.h>
+# endif
+# include <ctype.h>
+# include <limits.h>
+#endif
+
+#if defined(__cplusplus) && !defined(WITH_LEAN)
+# include <string>
+# include <iostream>
+#endif
+
+#ifdef WITH_NOHTTP
+# ifndef WITH_NOIO
+#  define WITH_NOIO
+#  undef WITH_COOKIES
+# endif
+#endif
+
+#ifndef UNDER_CE
+# ifndef PALM
+#  ifndef WITH_NOIO
+#   include <errno.h>
+#   include <sys/types.h>
+#  endif
+#  ifndef WITH_LEAN
+#   ifdef HAVE_SYS_TIMEB_H
+#    include <sys/timeb.h>             /* for ftime() */
+#   endif
+#   include <time.h>
+#  endif
+# endif
+#endif
+
+#ifdef OPENSERVER
+# include <sys/socket.h>
+# include <sys/stream.h>
+# include <sys/protosw.h>
+  extern int h_errno;
+#endif
+
+#ifndef WITH_NOIO
+# ifndef WIN32
+#  ifndef PALM
+#   include <sys/socket.h>
+#   ifdef VXWORKS
+#    include <sockLib.h>
+#    include <selectLib.h>
+#   endif
+#   ifndef VXWORKS
+#    ifndef SYMBIAN
+#     include <strings.h>
+#    endif
+#   endif
+#   ifdef SUN_OS
+#    include <sys/stream.h>            /* SUN */
+#    include <sys/socketvar.h>         /* SUN < 2.8 (?) */
+#   endif
+#   ifdef VXWORKS
+#    ifdef _WRS_KERNEL
+#     include <sys/times.h>
+#    endif
+#   else
+#    include <sys/time.h>
+#   endif
+#   include <netinet/in.h>
+#   ifdef OS390
+#    include <netinet/tcp_var.h>
+#   else
+#    include <netinet/tcp.h>          /* TCP_NODELAY */
+#   endif
+#   include <arpa/inet.h>
+#  endif
+# endif
+#endif
+
+#ifdef WITH_FASTCGI
+# include <fcgi_stdio.h>
+#endif
+
+#ifdef WITH_OPENSSL
+# define OPENSSL_NO_KRB5
+# include <openssl/ssl.h>
+# include <openssl/err.h>
+# include <openssl/rand.h>
+# ifndef ALLOW_OLD_VERSIONS
+#  if (OPENSSL_VERSION_NUMBER < 0x00905100L)
+#   error "Must use OpenSSL 0.9.6 or later"
+#  endif
+# endif
+#endif
+
+#ifdef WITH_GZIP
+# ifndef WITH_ZLIB
+#  define WITH_ZLIB
+# endif
+#endif
+
+#ifdef WITH_CASEINSENSITIVETAGS
+# define SOAP_STRCMP soap_tag_cmp      /* case insensitve XML element/attribute names */
+#else
+# define SOAP_STRCMP strcmp            /* case sensitive XML element/attribute names */
+#endif
+
+#ifdef WITH_ZLIB
+# include <zlib.h>
+#endif
+
+#ifndef WITH_NOSTDLIB
+# ifndef PALM
+#  include <math.h>    /* for isnan() */
+# endif
+#endif
+
+/* #define DEBUG */ /* Uncomment to debug sending (in file SENT.log) receiving (in file RECV.log) and messages (in file TEST.log) */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef WIN32
+# ifndef UNDER_CE
+#  include <io.h>
+#  include <fcntl.h>
+# endif
+# include <winsock.h>
+/* # include <winsock2.h> */ /* Alternative: use winsock2 (not available with eVC) */
+# ifdef WITH_IPV6
+#  include <ws2tcpip.h>
+#  include <wspiapi.h>
+# endif
+#else
+# ifdef VXWORKS
+#  include <hostLib.h>
+#  include <ioctl.h>
+#  include <ioLib.h>
+# endif
+# ifndef WITH_NOIO
+#  ifndef PALM
+#   include <netdb.h>
+#   include <netinet/in.h>
+#   include <unistd.h>
+#   include <fcntl.h>
+#  endif
+# endif
+#endif
+
+/* Portability: define SOAP_SOCKLEN_T */
+#if defined(SOCKLEN_T)
+# define SOAP_SOCKLEN_T SOCKLEN_T
+#elif defined(__socklen_t_defined) || defined(_SOCKLEN_T) || defined(CYGWIN) || defined(FREEBSD) || defined(__FreeBSD__) || defined(__QNX__) || defined(QNX) || defined(_AIX)
+# define SOAP_SOCKLEN_T socklen_t
+#elif defined(IRIX) || defined(WIN32) || defined(__APPLE__) || defined(HP_UX) || defined(SUN_OS) || defined(OPENSERVER) || defined(TRU64) || defined(VXWORKS)
+# define SOAP_SOCKLEN_T int
+#else
+# define SOAP_SOCKLEN_T size_t
+#endif
+
+#ifdef WIN32
+# define SOAP_SOCKET SOCKET
+#else
+# define SOAP_SOCKET int
+# define closesocket(n) close(n)
+#endif
+
+#define SOAP_INVALID_SOCKET (-1)
+#define soap_valid_socket(n) ((n) != SOAP_INVALID_SOCKET)
+
+#if defined(SYMBIAN)
+# define LONG64 long
+# define ULONG64 unsigned LONG64
+#elif !defined(WIN32) || defined(__GLIBC__) || defined(__GNU__)
+# ifndef LONG64
+#  define LONG64 long long
+#  define ULONG64 unsigned LONG64
+# endif
+#elif defined(UNDER_CE)
+# define LONG64 __int64
+# define ULONG64 unsigned LONG64
+#elif defined(__BORLANDC__)
+# define LONG64 __int64
+# define ULONG64 unsigned LONG64
+#endif
+
+#if defined(WIN32)
+# define soap_int32 __int32
+#elif defined(SYMBIAN)
+# define soap_int32 long
+#elif defined(PALM)
+# define soap_int32 Int32
+#else
+# define soap_int32 int32_t
+#endif
+
+#ifdef WIN32
+# define SOAP_ERANGE ERANGE
+# define SOAP_EINTR WSAEINTR
+# define SOAP_EAGAIN WSAEWOULDBLOCK
+# define SOAP_EWOULDBLOCK WSAEWOULDBLOCK
+# define SOAP_EINPROGRESS WSAEINPROGRESS
+#else
+# define SOAP_ERANGE ERANGE
+# define SOAP_EINTR EINTR
+# define SOAP_EAGAIN EAGAIN
+# ifdef SYMBIAN
+#  define SOAP_EWOULDBLOCK 9898
+#  define SOAP_EINPROGRESS 9899
+# else
+#  define SOAP_EWOULDBLOCK EWOULDBLOCK
+#  define SOAP_EINPROGRESS EINPROGRESS
+# endif
+#endif
+
+#ifdef WIN32
+# ifdef UNDER_CE
+#  define soap_errno GetLastError()
+#  define soap_socket_errno GetLastError()
+# else
+#  define soap_errno GetLastError()
+#  define soap_socket_errno WSAGetLastError()
+# endif
+#else
+# ifndef WITH_NOIO
+#  define soap_errno errno
+#  define soap_socket_errno errno
+# else
+#  define soap_errno 0
+#  define soap_socket_errno 0
+# endif
+#endif
+
+#ifndef SOAP_BUFLEN
+# ifdef WITH_UDP
+#  define SOAP_BUFLEN (65536) /* max UDP packet size */
+# else
+#  ifndef WITH_LEAN
+#   define SOAP_BUFLEN (65536) /* buffer length for socket packets, also used by gethostbyname_r so don't make this too small */
+#  else
+#   define SOAP_BUFLEN  (2048)
+#  endif
+# endif
+#endif
+#ifndef SOAP_LABLEN
+# define SOAP_LABLEN     (64) /* initial look-aside buffer length */
+#endif
+#ifndef SOAP_PTRBLK
+# define SOAP_PTRBLK     (32) /* block allocation for pointer hash table chains */
+#endif
+#ifndef SOAP_PTRHASH
+# ifndef WITH_LEAN
+#  define SOAP_PTRHASH (1024) /* size of pointer analysis hash table (must be power of 2) */
+# else
+#  define SOAP_PTRHASH   (32)
+# endif
+#endif
+#ifndef SOAP_IDHASH
+# ifndef WITH_LEAN
+#  define SOAP_IDHASH  (1999) /* prime size of hash table for parsed id/ref */
+# else
+#  define SOAP_IDHASH    (19) /* 19, 199 */
+# endif
+#endif
+#ifndef SOAP_BLKLEN
+# ifndef WITH_LEAN
+#  define SOAP_BLKLEN   (256) /* size of blocks to collect long strings and XML attributes */
+# else
+#  define SOAP_BLKLEN    (32)
+# endif
+#endif
+#ifndef SOAP_TAGLEN
+# ifndef WITH_LEAN
+#  define SOAP_TAGLEN   (256) /* maximum length of XML element tag/attribute name or host/path name + 1 */
+# else
+#  define SOAP_TAGLEN    (64)
+# endif
+#endif
+#ifndef SOAP_HDRLEN
+# ifndef WITH_LEAN
+#  define SOAP_HDRLEN  (8192) /* maximum length of HTTP header line (must be >4096 to read cookies) */
+# else
+#  define SOAP_HDRLEN  (1024)
+# endif
+#endif
+#ifndef SOAP_MAXDIMS
+# ifndef WITH_LEAN
+#  define SOAP_MAXDIMS  (16) /* maximum array dimensions (array nestings) must be less than 64 to protect soap->tmpbuf */
+# else
+#  define SOAP_MAXDIMS   (4)
+# endif
+#endif
+
+#ifndef SOAP_MAXLOGS
+# define SOAP_MAXLOGS    (3) /* max number of debug logs per struct soap environment */
+# define SOAP_INDEX_RECV  (0)
+# define SOAP_INDEX_SENT  (1)
+# define SOAP_INDEX_TEST  (2)
+#endif
+
+#ifndef SOAP_MAXKEEPALIVE
+# define SOAP_MAXKEEPALIVE (100) /* max iterations to keep server connection alive */
+#endif
+
+#ifndef SOAP_MAXARRAYSIZE
+# define SOAP_MAXARRAYSIZE (100000) /* "trusted" max size of inbound SOAP array for compound array allocation */
+#endif
+
+#ifdef VXWORKS
+# ifdef __INCmathh 
+#  include <private/mathP.h>
+#  ifndef HAVE_ISNAN
+#   define HAVE_ISNAN
+#  endif
+#  define soap_isnan(num) isNan(num)
+# endif
+#endif
+
+#ifdef WIN32 
+# include <float.h>
+# ifndef HAVE_ISNAN
+#  define HAVE_ISNAN
+# endif
+# define soap_isnan(num) _isnan(num)
+#endif
+
+#ifdef SUN_OS
+# define soap_isnan(n) isnan(n)
+#endif
+
+#if !defined(HAVE_ISNAN) && (defined(_MATH_H) || defined(_MATH_INCLUDED))
+# define HAVE_ISNAN
+#endif
+
+#ifndef soap_isnan
+# ifdef HAVE_ISNAN
+#  define soap_isnan(n) isnan(n)
+# else
+#  define soap_isnan(_) (0)
+# endif
+#endif
+
+extern const struct soap_double_nan { unsigned int n1, n2; } soap_double_nan;
+
+#ifdef VXWORKS
+# ifndef FLT_MAX
+#  define FLT_MAX _ARCH_FLT_MAX
+# endif
+# ifndef DBL_MAX
+#  define DBL_MAX _ARCH_DBL_MAX
+# endif
+#endif
+
+#ifndef FLT_NAN
+# ifdef HAVE_ISNAN
+#  define FLT_NAN (*(float*)(void*)&soap_double_nan)
+# else
+#  define FLT_NAN (0.0)
+# endif
+#endif
+
+#ifndef FLT_PINFTY
+# if defined(FLT_MAX)
+#  define FLT_PINFTY FLT_MAX
+# elif defined(HUGE_VALF)
+#  define FLT_PINFTY (float)HUGE_VALF
+# elif defined(HUGE_VAL)
+#  define FLT_PINFTY (float)HUGE_VAL
+# elif defined(FLOAT_MAX)
+#  define FLT_PINFTY FLOAT_MAX
+# else
+#  define FLT_PINFTY (3.40282347e+38F)
+# endif
+#endif
+
+#ifndef FLT_NINFTY
+# define FLT_NINFTY (-FLT_PINFTY)
+#endif
+
+#ifndef DBL_NAN
+# ifdef HAVE_ISNAN
+#  define DBL_NAN (*(double*)(void*)&soap_double_nan)
+# else
+#  define DBL_NAN (0.0)
+# endif
+#endif
+
+#ifndef DBL_PINFTY
+# if defined(DBL_MAX)
+#  define DBL_PINFTY DBL_MAX
+# elif defined(HUGE_VALF)
+#  define DBL_PINFTY (double)HUGE_VALF
+# elif defined(HUGE_VAL)
+#  define DBL_PINFTY (double)HUGE_VAL
+# elif defined(DOUBLE_MAX)
+#  define DBL_PINFTY DOUBLE_MAX
+# else
+#  define DBL_PINFTY (1.7976931348623157e+308)
+# endif
+#endif
+
+#ifndef DBL_NINFTY
+# define DBL_NINFTY (-DBL_PINFTY)
+#endif
+
+#define soap_ispinfd(n) ((n) >= DBL_PINFTY)
+#define soap_ispinff(n) ((n) >= FLT_PINFTY)
+#define soap_isninfd(n) ((n) <= DBL_NINFTY)
+#define soap_isninff(n) ((n) <= FLT_NINFTY)
+
+/* gSOAP error codes */
+
+#define SOAP_EOF                       EOF
+#define SOAP_ERR                       EOF
+#define SOAP_OK                                0
+#define SOAP_CLI_FAULT                 1
+#define SOAP_SVR_FAULT                 2
+#define SOAP_TAG_MISMATCH              3
+#define SOAP_TYPE                      4
+#define SOAP_SYNTAX_ERROR              5
+#define SOAP_NO_TAG                    6
+#define SOAP_IOB                       7
+#define SOAP_MUSTUNDERSTAND            8
+#define SOAP_NAMESPACE                 9
+#define SOAP_USER_ERROR                        10
+#define SOAP_FATAL_ERROR               11
+#define SOAP_FAULT                     12
+#define SOAP_NO_METHOD                 13
+#define SOAP_GET_METHOD                        14
+#define SOAP_EOM                       15
+#define SOAP_NULL                      16
+#define SOAP_DUPLICATE_ID              17
+#define SOAP_MISSING_ID                        18
+#define SOAP_HREF                      19
+#define SOAP_UDP_ERROR                 20
+#define SOAP_TCP_ERROR                 21
+#define SOAP_HTTP_ERROR                        22
+#define SOAP_SSL_ERROR                 23
+#define SOAP_ZLIB_ERROR                        24
+#define SOAP_DIME_ERROR                        25
+#define SOAP_DIME_HREF                 26
+#define SOAP_DIME_MISMATCH             27
+#define SOAP_DIME_END                  28
+#define SOAP_MIME_ERROR                        29
+#define SOAP_MIME_HREF                 30
+#define SOAP_MIME_END                  31
+#define SOAP_VERSIONMISMATCH           32
+#define SOAP_PLUGIN_ERROR              33
+#define SOAP_DATAENCODINGUNKNOWN       34
+#define SOAP_REQUIRED                  35
+#define SOAP_PROHIBITED                        36
+#define SOAP_OCCURS                    37
+#define SOAP_LENGTH                    38
+
+#define soap_xml_error_check(e) ((e) == SOAP_TAG_MISMATCH || (e) == SOAP_TAG_END || (e) == SOAP_SYNTAX_ERROR || (e) == SOAP_NAMESPACE || (e) == SOAP_DUPLICATE_ID || (e) == SOAP_MISSING_ID || (e) == SOAP_REQUIRED || (e) == SOAP_PROHIBITED || (e) == SOAP_OCCURS || (e) == SOAP_LENGTH || (e) == SOAP_NULL || (e) == SOAP_HREF)
+#define soap_soap_error_check(e) ((e) == SOAP_CLI_FAULT || (e) == SOAP_SVR_FAULT || (e) == SOAP_VERSIONMISMATCH || (e) == SOAP_MUSTUNDERSTAND || (e) == SOAP_FAULT || (e) == SOAP_NO_METHOD)
+#define soap_tcp_error_check(e) ((e) == SOAP_EOF || (e) == SOAP_TCP_ERROR)
+#define soap_ssl_error_check(e) ((e) == SOAP_SSL_ERROR)
+#define soap_zlib_error_check(e) ((e) == SOAP_ZLIB_ERROR)
+#define soap_http_error_check(e) ((e) == SOAP_HTTP_ERROR || (e) == SOAP_GET_METHOD || ((e) >= 100 && (e) < 600))
+
+/* gSOAP HTTP response status codes 100 to 599 are reserved */
+
+/* Codes 600 to 999 are user definable */
+
+/* Exceptional gSOAP HTTP response status codes >= 1000 */
+
+#define SOAP_STOP              1000    /* No HTTP response */
+#define SOAP_FORM              1001    /* Form request/response */
+#define SOAP_HTML              1002    /* Custom HTML response */
+#define SOAP_FILE              1003    /* Custom file-based response */
+
+/* gSOAP HTTP method codes */
+
+#define SOAP_POST              2000
+#define SOAP_GET               2001
+
+/* gSOAP DIME */
+
+#define SOAP_DIME_CF           0x01
+#define SOAP_DIME_ME           0x02
+#define SOAP_DIME_MB           0x04
+#define SOAP_DIME_VERSION      0x08 /* DIME version 1 */
+#define SOAP_DIME_MEDIA                0x10
+#define SOAP_DIME_ABSURI       0x20
+
+/* gSOAP ZLIB */
+
+#define SOAP_ZLIB_NONE         0x00
+#define SOAP_ZLIB_DEFLATE      0x01
+#define SOAP_ZLIB_INFLATE      0x02
+#define SOAP_ZLIB_GZIP         0x02
+
+/* gSOAP transport, connection, and content encoding modes */
+
+typedef soap_int32 soap_mode;
+
+#define SOAP_IO                        0x00000003      /* IO mask */
+#define SOAP_IO_FLUSH          0x00000000      /* flush output immediately, no buffering */
+#define SOAP_IO_BUFFER         0x00000001      /* buffer output in packets of size SOAP_BUFLEN */
+#define SOAP_IO_STORE          0x00000002      /* store entire output to determine length for transport */
+#define SOAP_IO_CHUNK          0x00000003      /* use HTTP chunked transfer AND buffer packets */
+
+#define SOAP_IO_UDP            0x00000004
+#define SOAP_IO_LENGTH         0x00000008
+#define SOAP_IO_KEEPALIVE      0x00000010
+
+#define SOAP_ENC_LATIN         0x00800020      /* iso-8859-1 encoding */
+#define SOAP_ENC_XML           0x00000040      /* plain XML encoding, no HTTP header */
+#define SOAP_ENC_DIME          0x00000080
+#define SOAP_ENC_MIME          0x00000100
+#define SOAP_ENC_MTOM          0x00000200
+#define SOAP_ENC_ZLIB          0x00000400
+#define SOAP_ENC_SSL           0x00000800
+
+#define SOAP_ENC               0x00000FFF      /* IO and ENC mask */
+
+#define SOAP_XML_STRICT                0x00001000      /* strict validation */
+#define SOAP_XML_INDENT                0x00002000
+#define SOAP_XML_CANONICAL     0x00004000      /* EXC C14N canonical XML */
+#define SOAP_XML_TREE          0x00008000
+#define SOAP_XML_GRAPH         0x00010000
+#define SOAP_XML_NIL           0x00020000
+#define SOAP_XML_DOM           0x00040000
+#define SOAP_XML_SEC           0x00080000      /* reserved for WS security */
+
+#define SOAP_C_NOIOB           0x00100000
+#define SOAP_C_UTFSTRING       0x00200000
+#define SOAP_C_MBSTRING                0x00400000
+
+#define SOAP_DOM_TREE          0x01000000
+#define SOAP_DOM_NODE          0x02000000
+#define SOAP_DOM_ASIS          0x04000000
+
+#define SOAP_IO_DEFAULT                SOAP_IO_FLUSH
+
+/* SSL client/server authentication settings */
+
+#define SOAP_SSL_NO_AUTHENTICATION             0x00    /* for testing purposes */
+#define SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION 0x01    /* client requires server to authenticate */
+#define SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION 0x02    /* server requires client to authenticate */
+
+#define SOAP_SSL_DEFAULT                       SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION
+
+/* */
+
+#define SOAP_BEGIN             0
+#define SOAP_IN_ENVELOPE       2
+#define SOAP_IN_HEADER         3
+#define SOAP_END_HEADER                4
+#define SOAP_NO_BODY           5
+#define SOAP_IN_BODY           6
+#define SOAP_END_BODY          7
+#define SOAP_END_ENVELOPE      8
+#define SOAP_END               9
+#define SOAP_BEGIN_SECURITY    10
+#define SOAP_IN_SECURITY       11
+#define SOAP_END_SECURITY      12
+
+/* DEBUG macros */
+
+#ifndef WITH_LEAN
+# ifdef DEBUG
+#  ifndef SOAP_DEBUG
+#   define SOAP_DEBUG
+#  endif
+# endif
+#endif
+
+#ifdef SOAP_DEBUG
+# define SOAP_MALLOC(soap, size) soap_track_malloc(soap, __FILE__, __LINE__, size)
+# define SOAP_FREE(soap, ptr) soap_track_free(soap, __FILE__, __LINE__, ptr)
+#endif
+
+#ifndef SOAP_MALLOC                    /* use libc malloc */
+# define SOAP_MALLOC(soap, size) malloc(size)
+#endif
+
+#ifndef SOAP_FREE                      /* use libc free */
+# define SOAP_FREE(soap, ptr) free(ptr)
+#endif
+
+#ifdef SOAP_DEBUG
+# ifndef SOAP_MESSAGE
+#  define SOAP_MESSAGE fprintf
+# endif
+# ifndef DBGLOG
+#  define DBGLOG(DBGFILE, CMD) \
+{ if (soap)\
+  { if (!soap->fdebug[SOAP_INDEX_##DBGFILE])\
+      soap_open_logfile(soap, SOAP_INDEX_##DBGFILE);\
+    if (soap->fdebug[SOAP_INDEX_##DBGFILE])\
+    { FILE *fdebug = soap->fdebug[SOAP_INDEX_##DBGFILE];\
+      CMD;\
+      fflush(fdebug);\
+    }\
+  }\
+}
+# endif
+# ifndef DBGMSG
+#  define DBGMSG(DBGFILE, MSG, LEN) \
+{ if (soap)\
+  { if (!soap->fdebug[SOAP_INDEX_##DBGFILE])\
+      soap_open_logfile(soap, SOAP_INDEX_##DBGFILE);\
+    if (soap->fdebug[SOAP_INDEX_##DBGFILE])\
+    { fwrite((MSG), 1, (LEN), soap->fdebug[SOAP_INDEX_##DBGFILE]);\
+      fflush(soap->fdebug[SOAP_INDEX_##DBGFILE]);\
+    }\
+  }\
+}
+# endif
+# ifndef DGBFUN
+#  define DBGFUN(FNAME) DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): %s()\n", __FILE__, __LINE__, FNAME))
+#  define DBGFUN1(FNAME, FMT, ARG) DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): %s("FMT")\n", __FILE__, __LINE__, FNAME, (ARG)))
+#  define DBGFUN2(FNAME, FMT1, ARG1, FMT2, ARG2) DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): %s("FMT1", "FMT2")\n", __FILE__, __LINE__, FNAME, (ARG1), (ARG2)))
+#  define DBGFUN3(FNAME, FMT1, ARG1, FMT2, ARG2, FMT3, ARG3) DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): %s("FMT1", "FMT2", "FMT3")\n", __FILE__, __LINE__, FNAME, (ARG1), (ARG2), (ARG3)))
+# endif
+# ifndef DBGHEX
+#  define DBGHEX(DBGFILE, MSG, LEN) \
+{ if (soap)\
+  { if (!soap->fdebug[SOAP_INDEX_##DBGFILE])\
+      soap_open_logfile(soap, SOAP_INDEX_##DBGFILE);\
+    if (soap->fdebug[SOAP_INDEX_##DBGFILE])\
+    { int i; char *s;\
+      for (s = (char*)(MSG), i = (LEN); i; i--)\
+        fprintf(soap->fdebug[SOAP_INDEX_##DBGFILE], "%2.2hhX  ", *s++);\
+      fflush(soap->fdebug[SOAP_INDEX_##DBGFILE]);\
+    }\
+  }\
+}
+# endif
+#else
+# define DBGLOG(DBGFILE, CMD)
+# define DBGMSG(DBGFILE, MSG, LEN)
+# define DBGFUN(FNAME)
+# define DBGFUN1(FNAME, FMT, ARG)
+# define DBGFUN2(FNAME, FMT1, ARG1, FMT2, ARG2)
+# define DBGFUN3(FNAME, FMT1, ARG1, FMT2, ARG2, FMT3, ARG3)
+# define DBGHEX(DBGFILE, MSG, LEN)
+#endif
+
+/* UCS-4 requires 32 bits (0-7FFFFFFF, the sign bit is used by gSOAP to distinguish XML entities) */
+typedef soap_int32 soap_wchar;
+
+/* namespace table row */
+struct Namespace
+{ const char *id;
+  const char *ns;
+  const char *in;
+  char *out;
+};
+
+/* namespace stack */
+struct soap_nlist
+{ struct soap_nlist *next;
+  unsigned int level; /* nesting depth level */
+  short index; /* corresponding entry in ns mapping table */
+  char *ns; /* only set when parsed ns URI is not in the ns mapping table */
+  char id[1]; /* the actual string value flows into the allocated region below this struct */
+};
+
+/* block stack for nested block allocations */
+struct soap_blist
+{ struct soap_blist *next;
+  char *ptr;
+  size_t size;
+};
+
+/* array layout */
+struct soap_array
+{ void *__ptr;
+  int __size;
+};
+
+/* pointer serialization management */
+struct soap_plist
+{ struct soap_plist *next;
+  const void *ptr;
+  const struct soap_array *array;
+  int type;
+  int id;
+  char mark1;
+  char mark2;
+};
+
+/* block allocation for pointer serialization management */
+struct soap_pblk
+{ struct soap_pblk *next;
+  struct soap_plist plist[SOAP_PTRBLK];
+};
+
+#ifdef SOAP_DEBUG
+/* malloc/free tracking for debugging */
+struct soap_mlist
+{ struct soap_mlist *next;
+  const void *ptr;
+  const char *file;
+  int line;
+  short live;
+};
+#endif
+
+/* class allocation list */
+struct soap_clist
+{ struct soap_clist *next;
+  void *ptr;
+  int type;
+  int size;
+  void (*fdelete)(struct soap_clist*);
+};
+
+/* attributes */
+struct soap_attribute
+{ struct soap_attribute *next;
+  char *value;
+  size_t size;
+  char *ns;
+  short visible;
+  char name[1]; /* the actual name string flows into the allocated region below this struct */
+};
+
+struct soap_cookie
+{ struct soap_cookie *next;
+  char *name;
+  char *value;
+  char *domain;
+  char *path;
+  long expire;         /* client-side: local time to expire; server-side: seconds to expire */
+  unsigned int version;
+  short secure;
+  short session;       /* server-side */
+  short env;           /* server-side: got cookie from client and should not be (re)send */
+  short modified;      /* server-side: client cookie was modified and should be send */
+};
+
+#ifdef __cplusplus
+SOAP_FMAC1 struct soap_multipart* SOAP_FMAC2 soap_next_multipart(struct soap_multipart*);
+
+class soap_multipart_iterator
+{ public:
+  struct soap_multipart *content;
+  bool operator==(const soap_multipart_iterator& iter) const
+    { return content == iter.content; }
+  bool operator!=(const soap_multipart_iterator& iter) const
+    { return content != iter.content; }
+  struct soap_multipart &operator*() const
+    { return *content; }
+  soap_multipart_iterator &operator++()
+    { content = soap_next_multipart(content); return *this; }
+  soap_multipart_iterator() : content(NULL)
+    { }
+  soap_multipart_iterator(struct soap_multipart *p) : content(p)
+    { }
+};
+#endif
+
+#ifndef WITH_LEANER
+struct soap_dime
+{ size_t count;
+  size_t size;
+  size_t chunksize;
+  size_t buflen;
+  char flags;
+  char *ptr;
+  const char *id;
+  const char *type;
+  const char *options;
+  struct soap_multipart *list;         /* list of DIME attachments received */
+  struct soap_multipart *first, *last; /* temporary in/out queue */
+#ifdef __cplusplus
+  soap_multipart_iterator begin()
+    { soap_multipart_iterator iter(list); return iter; };
+  soap_multipart_iterator end()
+    { soap_multipart_iterator iter(NULL); return iter; };
+#endif
+};
+#endif
+
+#ifndef WITH_LEANER
+struct soap_mime
+{ char *boundary;                      /* MIME boundary */
+  const char *start;                   /* MIME start ID */
+  struct soap_multipart *list;         /* list of MIME attachments received */
+  struct soap_multipart *first, *last; /* temporary in/out queue */
+#ifdef __cplusplus
+  soap_multipart_iterator begin()
+    { soap_multipart_iterator iter(list); return iter; };
+  soap_multipart_iterator end()
+    { soap_multipart_iterator iter(NULL); return iter; };
+#endif
+};
+#endif
+
+#ifndef WITH_LEANER
+/* RFC2045 MIME content transfer encodings */
+enum soap_mime_encoding
+{ SOAP_MIME_NONE,
+  SOAP_MIME_7BIT,
+  SOAP_MIME_8BIT,
+  SOAP_MIME_BINARY,
+  SOAP_MIME_QUOTED_PRINTABLE,
+  SOAP_MIME_BASE64,
+  SOAP_MIME_IETF_TOKEN,
+  SOAP_MIME_X_TOKEN
+};
+#endif
+
+#ifndef WITH_LEANER
+/* DIME/MIME multipart list */
+struct soap_multipart
+{ struct soap_multipart *next;
+  char *ptr;                           /* points to raw data content */
+  size_t size;                         /* size of data content */
+  const char *id;                      /* DIME/MIME content ID or form data name */
+  const char *type;                    /* DIME/MIME type (MIME type format) */
+  const char *options;                 /* DIME options */
+  enum soap_mime_encoding encoding;    /* MIME Content-Transfer-Encoding */
+  const char *location;                        /* MIME Content-Location (optional) */
+  const char *description;             /* MIME Content-Description (optional) */
+#ifdef __cplusplus
+  typedef soap_multipart_iterator iterator;
+#endif
+};
+#endif
+
+#ifndef WITH_LEANER
+/* attachment DIME and MTOM XOP forwarding */
+struct soap_xlist
+{ struct soap_xlist *next;
+  unsigned char **ptr;
+  int *size;
+  char *id;
+  char **type;
+  char **options;
+};
+#endif
+
+/******************************************************************************/
+
+#ifndef WITH_LEANER
+#ifdef __cplusplus
+class soap_dom_attribute_iterator
+{ public:
+  struct soap_dom_attribute *att;
+  const char *nstr;
+  const char *name;
+  bool operator==(const soap_dom_attribute_iterator&) const;
+  bool operator!=(const soap_dom_attribute_iterator&) const;
+  struct soap_dom_attribute &operator*() const;
+  soap_dom_attribute_iterator &operator++();
+  soap_dom_attribute_iterator();
+  soap_dom_attribute_iterator(struct soap_dom_attribute*);
+  ~soap_dom_attribute_iterator();
+};
+#endif
+#endif
+
+#ifndef WITH_LEANER
+struct soap_dom_attribute
+{ struct soap_dom_attribute *next;
+  const char *nstr;
+  char *name;
+  char *data;
+  wchar_t *wide;
+  struct soap *soap;
+#ifdef __cplusplus
+  typedef soap_dom_attribute_iterator iterator;
+  struct soap_dom_attribute &set(const char *nstr, const char *name);  /* set namespace and name */
+  struct soap_dom_attribute &set(const char *data);            /* set data */
+  soap_dom_attribute_iterator begin();
+  soap_dom_attribute_iterator end();
+  soap_dom_attribute_iterator find(const char *nstr, const char *name);
+  void unlink();
+  soap_dom_attribute();
+  soap_dom_attribute(struct soap *soap);
+  soap_dom_attribute(struct soap *soap, const char *nstr, const char *name, const char *data);
+  ~soap_dom_attribute();
+#endif
+};
+#endif
+
+#ifndef WITH_LEANER
+#ifdef __cplusplus
+class soap_dom_element_iterator
+{ public:
+  struct soap_dom_element *elt;
+  const char *nstr;
+  const char *name;
+  int type;
+  bool operator==(const soap_dom_element_iterator&) const;
+  bool operator!=(const soap_dom_element_iterator&) const;
+  struct soap_dom_element &operator*() const;
+  soap_dom_element_iterator &operator++();
+  soap_dom_element_iterator();
+  soap_dom_element_iterator(struct soap_dom_element*);
+  ~soap_dom_element_iterator();
+};
+#endif
+#endif
+
+#ifndef WITH_LEANER
+struct soap_dom_element
+{ struct soap_dom_element *next;       /* next sibling */
+  struct soap_dom_element *prnt;       /* parent */
+  struct soap_dom_element *elts;       /* list of child elements */
+  struct soap_dom_attribute *atts;     /* list of attributes */
+  const char *nstr;                    /* namespace string */
+  char *name;                          /* element tag name */
+  char *data;                          /* element content data (with SOAP_C_UTFSTRING flag set) */
+  wchar_t *wide;                       /* element content data */
+  int type;                            /* optional: serialized C/C++ data type */
+  void *node;                          /* optional: pointer to serialized C/C++ data */
+  char *head;                          /* leading whitespace to start tag */
+  char *tail;                          /* leading whitespace to end tag */
+  struct soap *soap;                   /* soap context that manages this node */
+#ifdef __cplusplus
+  typedef soap_dom_element_iterator iterator;
+  struct soap_dom_element &set(const char *nstr, const char *name);
+  struct soap_dom_element &set(const char *data);
+  struct soap_dom_element &set(void *node, int type);
+  struct soap_dom_element &add(struct soap_dom_element*);
+  struct soap_dom_element &add(struct soap_dom_element&);
+  struct soap_dom_element &add(struct soap_dom_attribute*);
+  struct soap_dom_element &add(struct soap_dom_attribute&);
+  soap_dom_element_iterator begin();
+  soap_dom_element_iterator end();
+  soap_dom_element_iterator find(const char *nstr, const char *name);
+  soap_dom_element_iterator find(int type);
+  void unlink();
+  soap_dom_element();
+  soap_dom_element(struct soap *soap);
+  soap_dom_element(struct soap *soap, const char *nstr, const char *name);
+  soap_dom_element(struct soap *soap, const char *nstr, const char *name, const char *data);
+  soap_dom_element(struct soap *soap, const char *nstr, const char *name, void *node, int type);
+  ~soap_dom_element();
+#endif
+};
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_dom_current_nstr(struct soap *soap, const char *tag);
+SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_dom_next_element(struct soap_dom_element *elt);
+SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_dom_next_attribute(struct soap_dom_attribute *att);
+#endif
+
+#if defined(__cplusplus) && !defined(WITH_LEAN)
+}
+extern std::ostream &operator<<(std::ostream&, const struct soap_dom_element&);
+extern std::istream &operator>>(std::istream&, struct soap_dom_element&);
+extern "C" {
+#endif
+
+/******************************************************************************/
+
+struct soap
+{ short version;               /* 1 = SOAP1.1 and 2 = SOAP1.2 (set automatically from namespace URI in nsmap table) */
+  short copy;                  /* 1 = copy of another soap struct */
+  soap_mode mode;
+  soap_mode imode;
+  soap_mode omode;
+  const char *float_format;    /* user-definable format string for floats (<1024 chars) */
+  const char *double_format;   /* user-definable format string for doubles (<1024 chars) */
+  const char *dime_id_format;  /* user-definable format string for integer DIME id (<SOAP_TAGLEN chars) */
+  const char *http_version;    /* HTTP version used "1.0" or "1.1" */
+  const char *http_content;    /* optional custom response content type (with SOAP_FILE) */
+  const char *encodingStyle;   /* default = NULL which means that SOAP encoding is used */
+  const char *actor;           /* SOAP-ENV:actor or role attribute value */
+  int recv_timeout;            /* when > 0, gives socket recv timeout in seconds, < 0 in usec */
+  int send_timeout;            /* when > 0, gives socket send timeout in seconds, < 0 in usec */
+  int connect_timeout;         /* when > 0, gives socket connect() timeout in seconds, < 0 in usec */
+  int accept_timeout;          /* when > 0, gives socket accept() timeout in seconds, < 0 in usec */
+  int socket_flags;            /* socket recv() and send() flags, e.g. set to MSG_NOSIGNAL to disable sigpipe */
+  int connect_flags;           /* connect() SOL_SOCKET sockopt flags, e.g. set to SO_DEBUG to debug socket */
+  int bind_flags;              /* bind() SOL_SOCKET sockopt flags, e.g. set to SO_REUSEADDR to enable reuse */
+  int accept_flags;            /* accept() SOL_SOCKET sockopt flags */
+  const struct Namespace *namespaces;  /* Pointer to global namespace mapping table */
+  struct Namespace *local_namespaces;  /* Local namespace mapping table */
+  struct soap_nlist *nlist;    /* namespace stack */
+  struct soap_blist *blist;    /* block allocation stack */
+  struct soap_clist *clist;    /* class instance allocation list */
+  void *alist;                 /* memory allocation (malloc) list */
+  struct soap_ilist *iht[SOAP_IDHASH];
+  struct soap_plist *pht[SOAP_PTRHASH];
+  struct soap_pblk *pblk;      /* plist block allocation */
+  short pidx;                  /* plist block allocation */
+  struct SOAP_ENV__Header *header;
+  struct SOAP_ENV__Fault *fault;
+  int idnum;
+  void *user;                  /* to pass user-defined data */
+  struct soap_plugin *plugins; /* linked list of plug-in data */
+  char *userid;                        /* HTTP Basic authorization userid */
+  char *passwd;                        /* HTTP Basic authorization passwd */
+  int (*fpost)(struct soap*, const char*, const char*, int, const char*, const char*, size_t);
+  int (*fget)(struct soap*);
+  int (*fform)(struct soap*);
+  int (*fposthdr)(struct soap*, const char*, const char*);
+  int (*fresponse)(struct soap*, int, size_t);
+  int (*fparse)(struct soap*);
+  int (*fparsehdr)(struct soap*, const char*, const char*);
+  int (*fresolve)(struct soap*, const char*, struct in_addr* inaddr);
+  int (*fconnect)(struct soap*, const char*, const char*, int);
+  int (*fdisconnect)(struct soap*);
+  int (*fclosesocket)(struct soap*, SOAP_SOCKET);
+  int (*fshutdownsocket)(struct soap*, SOAP_SOCKET, int);
+  int (*fopen)(struct soap*, const char*, const char*, int);
+  int (*faccept)(struct soap*, int, struct sockaddr*, int *n);
+  int (*fclose)(struct soap*);
+  int (*fsend)(struct soap*, const char*, size_t);
+  size_t (*frecv)(struct soap*, char*, size_t);
+  int (*fpoll)(struct soap*);
+  void (*fseterror)(struct soap*, const char **c, const char **s);
+  int (*fignore)(struct soap*, const char*);
+  int (*fserveloop)(struct soap*);
+  void *(*fplugin)(struct soap*, const char*);
+#ifndef WITH_LEANER
+  int (*fprepareinit)(struct soap*);
+  int (*fpreparesend)(struct soap*, const char*, size_t);
+  int (*fpreparerecv)(struct soap*, const char*, size_t);
+  int (*fpreparefinal)(struct soap*);
+  void *(*fdimereadopen)(struct soap*, void*, const char*, const char*, const char*);
+  void *(*fdimewriteopen)(struct soap*, const char*, const char*, const char*);
+  void (*fdimereadclose)(struct soap*, void*);
+  void (*fdimewriteclose)(struct soap*, void*);
+  size_t (*fdimeread)(struct soap*, void*, char*, size_t);
+  int (*fdimewrite)(struct soap*, void*, const char*, size_t);
+#endif
+  int master;
+  int socket;
+#if defined(__cplusplus) && !defined(WITH_LEAN)
+  std::ostream *os;
+  std::istream *is;
+#else
+  void *os;    /* preserve alignment */
+  void *is;    /* preserve alignment */
+#endif
+#ifndef UNDER_CE
+  int sendfd;
+  int recvfd;
+#else
+  FILE *sendfd;
+  FILE *recvfd;
+#endif
+#ifdef WIN32
+  char errorstr[256];  /* buf for FormatMessage() */
+#endif
+  size_t bufidx;       /* index in soap.buf[] */
+  size_t buflen;       /* length of soap.buf[] content */
+  soap_wchar ahead;    /* parser lookahead */
+  short cdata;         /* CDATA parser state */
+  short body;          /* parsed XML element has a body or not */
+  unsigned int level;  /* XML nesting level */
+  size_t count;                /* message length counter */
+  size_t length;       /* message length as set by HTTP header */
+#ifdef WITH_FAST
+  char *labbuf;                /* look-aside buffer */
+  size_t lablen;       /* look-aside buffer allocated length */
+  size_t labidx;       /* look-aside buffer index to available part */
+#endif
+  char buf[SOAP_BUFLEN];/* send and receive buffer */
+  char tmpbuf[1024];   /* in/output buffer for HTTP headers, simpleType values, attribute names, and DIME >=1024 bytes */
+  char msgbuf[1024];   /* output buffer for (error) messages <=1024 bytes */
+  char tag[SOAP_TAGLEN];
+  char id[SOAP_TAGLEN];
+  char href[SOAP_TAGLEN];
+  char type[SOAP_TAGLEN];
+  char arrayType[SOAP_TAGLEN];
+  char arraySize[SOAP_TAGLEN];
+  char arrayOffset[SOAP_TAGLEN];
+  short other;
+  short position;
+  int positions[SOAP_MAXDIMS];
+  short root;
+  struct soap_attribute *attributes;   /* attribute list */
+  short encoding;      /* when set, output encodingStyle */
+  short mustUnderstand;        /* a mustUnderstand element was parsed or is output */
+  short keep_alive;    /* connection should be kept open */
+  short null;          /* parsed XML is xsi:nil */
+  short ns;            /* when not set, output full xmlns bindings */
+  short part;          /* parsing state */
+  short alloced;
+  short peeked;
+  size_t chunksize;
+  size_t chunkbuflen;
+  char endpoint[SOAP_TAGLEN];
+  char path[SOAP_TAGLEN];
+  char host[SOAP_TAGLEN];
+  char *action;
+  char *authrealm;             /* HTTP authentication realm */
+  char *prolog;                        /* XML declaration prolog */
+  unsigned long ip;            /* IP number */
+  int port;                    /* port number */
+  unsigned int max_keep_alive;
+  const char *proxy_host;      /* Proxy Server host name */
+  int proxy_port;              /* Proxy Server port (default = 8080) */
+  const char *proxy_userid;    /* Proxy Authorization user name */
+  const char *proxy_passwd;    /* Proxy Authorization password */
+  int status;                  /* -1 when request, else error code to be returned by server */
+  int error;
+  int errmode;
+  int errnum;
+#ifndef WITH_LEANER
+  struct soap_dom_element *dom;
+  struct soap_dime dime;
+  struct soap_mime mime;
+  struct soap_xlist *xlist;
+#endif
+#if !defined(WITH_LEAN) || defined(SOAP_DEBUG)
+  const char *logfile[SOAP_MAXLOGS];
+  FILE *fdebug[SOAP_MAXLOGS];
+  struct soap_mlist *mht[SOAP_PTRHASH];
+#endif
+#ifndef WITH_LEAN
+  const char *c14ninclude;
+  const char *c14nexclude;
+  struct soap_cookie *cookies;
+  const char *cookie_domain;
+  const char *cookie_path;
+  int cookie_max;
+#endif
+#ifndef WITH_NOIO
+#ifdef WITH_IPV6
+  struct sockaddr_storage peer;        /* IPv6: set by soap_accept and by UDP recv */
+#else
+  struct sockaddr_in peer;     /* IPv4: set by soap_connect/soap_accept and by UDP recv */
+#endif
+  size_t peerlen;
+#endif
+#ifdef WITH_OPENSSL
+  int (*fsslauth)(struct soap*);
+  int (*fsslverify)(int, X509_STORE_CTX*);
+  BIO *bio;
+  SSL *ssl;
+  SSL_CTX *ctx;
+  short require_server_auth;
+  short require_client_auth;
+  short rsa;                   /* when set, use RSA instead of DH */
+  const char *keyfile;
+  const char *password;
+  const char *dhfile;
+  const char *cafile;
+  const char *capath;
+  const char *crlfile;
+  const char *randfile;
+  SSL_SESSION *session;
+  char session_host[SOAP_TAGLEN];
+  int session_port;
+#endif
+#ifdef WITH_ZLIB
+  short zlib_state;            /* SOAP_ZLIB_NONE, SOAP_ZLIB_DEFLATE, or SOAP_ZLIB_INFLATE */
+  short zlib_in;               /* SOAP_ZLIB_NONE, SOAP_ZLIB_DEFLATE, or SOAP_ZLIB_GZIP */
+  short zlib_out;              /* SOAP_ZLIB_NONE, SOAP_ZLIB_DEFLATE, or SOAP_ZLIB_GZIP */
+  z_stream d_stream;           /* decompression stream */
+  char z_buf[SOAP_BUFLEN];     /* buffer */
+  size_t z_buflen;
+  unsigned short z_level;      /* compression level to be used (0=none, 1=fast to 9=best) */
+  uLong z_crc;                 /* internal gzip crc */
+  float z_ratio_in;            /* detected compression ratio compressed_length/length of inbound message */
+  float z_ratio_out;           /* detected compression ratio compressed_length/length of outbound message */
+#endif
+/* WR[ */
+#ifdef WMW_RPM_IO
+  void *rpmreqid;
+#endif /* WMW_RPM_IO */
+/* ]WR */
+};
+
+struct soap_code_map
+{ long code;
+  const char *string;
+};
+
+/* forwarding list */
+struct soap_flist
+{ struct soap_flist *next;
+  int type;
+  void *ptr;
+  unsigned int level;
+  void (*fcopy)(struct soap*, int, int, void*, const void*, size_t);
+};
+
+/* id-ref forwarding list */
+struct soap_ilist
+{ struct soap_ilist *next;
+  int type;
+  size_t size;
+  void *link;
+  void *copy;
+  struct soap_flist *flist;
+  void *ptr;
+  unsigned int level;
+  char id[1]; /* the actual id string value flows into the allocated region below this struct */
+};
+
+struct soap_plugin
+{ struct soap_plugin *next;
+  const char *id;
+  void *data;
+  int (*fcopy)(struct soap *soap, struct soap_plugin *dst, struct soap_plugin *src);
+  void (*fdelete)(struct soap *soap, struct soap_plugin *p); /* should delete fields of plugin only and not free(p) */
+};
+
+#ifndef WITH_NONAMESPACES
+extern SOAP_NMAC struct Namespace namespaces[];
+#endif
+
+#ifndef WITH_LEAN
+# define soap_get0(soap) (((soap)->bufidx>=(soap)->buflen && soap_recv(soap)) ? EOF : (unsigned char)(soap)->buf[(soap)->bufidx])
+# define soap_get1(soap) (((soap)->bufidx>=(soap)->buflen && soap_recv(soap)) ? EOF : (unsigned char)(soap)->buf[(soap)->bufidx++])
+#else
+soap_wchar soap_get0(struct soap*);
+soap_wchar soap_get1(struct soap*);
+#endif
+
+#define soap_revget1(soap) ((soap)->bufidx--)
+#define soap_unget(soap, c) ((soap)->ahead = c)
+#define soap_register_plugin(soap, plugin) soap_register_plugin_arg(soap, plugin, NULL)
+#define soap_imode(soap, n) ((soap)->mode = (soap)->imode = (n))
+#define soap_set_imode(soap, n) ((soap)->imode |= (n))
+#define soap_clr_imode(soap, n) ((soap)->imode &= ~(n))
+#define soap_omode(soap, n) ((soap)->mode = (soap)->omode = (n))
+#define soap_set_omode(soap, n) ((soap)->omode |= (n))
+#define soap_clr_omode(soap, n) ((soap)->omode &= ~(n))
+#define soap_set_mode(soap, n) ((soap)->imode |= (n), (soap)->omode |= (n))
+#define soap_clr_mode(soap, n) ((soap)->imode &= ~(n), (soap)->omode &= ~(n))
+#define soap_destroy(soap) soap_delete((soap), NULL)
+
+#ifdef HAVE_STRRCHR
+# define soap_strrchr(s, t) strrchr(s, t)
+#else
+ SOAP_FMAC1 char* SOAP_FMAC2 soap_strrchr(const char *s, int t);
+#endif
+
+#ifdef HAVE_STRTOL
+# define soap_strtol(s, t, b) strtol(s, t, b)
+#else
+ SOAP_FMAC1 long SOAP_FMAC2 soap_strtol(const char *s, char **t, int b);
+#endif
+
+#ifdef HAVE_STRTOUL
+# define soap_strtoul(s, t, b) strtoul(s, t, b)
+#else
+ SOAP_FMAC1 unsigned long SOAP_FMAC2 soap_strtoul(const char *s, char **t, int b);
+#endif
+
+#if defined(WITH_OPENSSL)
+# define soap_random soap_rand()
+SOAP_FMAC1 int SOAP_FMAC2 soap_rand();
+#elif defined(HAVE_RANDOM)
+# define soap_random (int)random()
+#else
+# define soap_random rand()
+#endif
+
+#ifdef WITH_NOIDREF
+# define soap_embedded(s, p, t) (0)
+# define soap_id_lookup(s, i, p, t, n, k) (p)
+# define soap_id_forward(s, h, p, st, tt, n, k, fc) (p)
+# define soap_reference(s, a, t) (1)
+# define soap_array_reference(s, p, a, n, t) (1)
+# define soap_embed(s, p, a, n, t, pp) (0)
+# define soap_embedded_id(s, i, p, t) (i)
+# define soap_is_embedded(s, p) (0)
+# define soap_is_single(s, p) (1)
+# define soap_lookup_type(s, i) (0)
+# define soap_getindependent(s) (0)
+# define soap_putindependent(s) (0)
+# define soap_getelement(s, n) (n)
+# define soap_putelement(s, p, t, i, n) (0)
+# define soap_markelement(s, p, n) (0)
+#endif
+
+SOAP_FMAC1 void SOAP_FMAC2 soap_fault(struct soap*);
+SOAP_FMAC1 const char** SOAP_FMAC2 soap_faultcode(struct soap*);
+SOAP_FMAC1 const char** SOAP_FMAC2 soap_faultsubcode(struct soap*);
+SOAP_FMAC1 const char** SOAP_FMAC2 soap_faultstring(struct soap*);
+SOAP_FMAC1 const char** SOAP_FMAC2 soap_faultdetail(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_serializeheader(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_putheader(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getheader(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_serializefault(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_putfault(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getfault(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_poll(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_connect_command(struct soap*, int, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_connect(struct soap*, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_bind(struct soap*, const char*, int, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_accept(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_accept(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_server_context(struct soap*, unsigned short, const char*, const char*, const char*, const char*, const char*, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_client_context(struct soap*, unsigned short, const char*, const char*, const char*, const char*, const char*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_puthttphdr(struct soap*, int status, size_t count);
+
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_get_header_attribute(struct soap*, const char*, const char*);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_decode_key(char*, size_t, const char*);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_decode_val(char*, size_t, const char*);
+
+SOAP_FMAC1 size_t SOAP_FMAC2 soap_hash(const char*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_endpoint(struct soap*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_flush_raw(struct soap*, const char*, size_t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_flush(struct soap*);
+SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_get(struct soap*);
+SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_getchar(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_tag_cmp(const char*, const char*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_fault(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_sender_fault(struct soap*, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_sender_fault_subcode(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_receiver_fault(struct soap*, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_receiver_fault_subcode(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_set_sender_error(struct soap*, const char*, const char*, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_set_receiver_error(struct soap*, const char*, const char*, int);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_send_raw(struct soap*, const char*, size_t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_recv_raw(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_recv(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_send(struct soap*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_send2(struct soap*, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_send3(struct soap*, const char*, const char*, const char*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_pututf8(struct soap*, unsigned long);
+SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_getutf8(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_putbase64(struct soap*, const unsigned char*, int);
+SOAP_FMAC1 unsigned char* SOAP_FMAC2 soap_getbase64(struct soap*, int*, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_puthex(struct soap*, const unsigned char*, int);
+SOAP_FMAC1 unsigned char* SOAP_FMAC2 soap_gethex(struct soap*, int*);
+
+#ifndef WITH_LEANER
+SOAP_FMAC1 int SOAP_FMAC2 soap_xop_forward(struct soap*, unsigned char**, int*, char**, char**, char**);
+SOAP_FMAC1 int SOAP_FMAC2 soap_dime_forward(struct soap*, unsigned char**, int*, char**, char**, char**);
+#endif
+
+#ifndef WITH_NOIDREF
+SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_lookup_id(struct soap*, void *p, int t, struct soap_plist**);
+SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_lookup(struct soap*, const void *p, int t, struct soap_plist**);
+SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_enter(struct soap*, const void *p, const struct soap_array *a, int n, int t, struct soap_plist**);
+SOAP_FMAC1 int SOAP_FMAC2 soap_array_pointer_lookup(struct soap*, const void *p, const struct soap_array *a, int n, int t, struct soap_plist**);
+SOAP_FMAC1 int SOAP_FMAC2 soap_embed(struct soap *soap, const void *p, const struct soap_array *a, int n, const char *tag, int type);
+SOAP_FMAC1 struct soap_ilist* SOAP_FMAC2 soap_lookup(struct soap*, const char*);
+SOAP_FMAC1 struct soap_ilist* SOAP_FMAC2 soap_enter(struct soap*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_resolve(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_embedded(struct soap*, const void *p, int t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_reference(struct soap*, const void *p, int t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_array_reference(struct soap*, const void *p, const struct soap_array *a, int n, int t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_embedded_id(struct soap*, int id, const void *p, int t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_is_embedded(struct soap*, struct soap_plist*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_is_single(struct soap*, struct soap_plist*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_embedded(struct soap*, struct soap_plist*);
+#endif
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_begin_count(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_end_count(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_begin_send(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_end_send(struct soap*);
+
+SOAP_FMAC1 const struct soap_code_map* SOAP_FMAC2 soap_code(const struct soap_code_map*, const char *str);
+SOAP_FMAC1 long SOAP_FMAC2 soap_int_code(const struct soap_code_map*, const char *str, long other);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_str_code(const struct soap_code_map*, long code);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_getline(struct soap*, char*, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_begin_recv(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_end_recv(struct soap*);
+
+SOAP_FMAC1 void* SOAP_FMAC2 soap_malloc(struct soap*, size_t);
+SOAP_FMAC1 void SOAP_FMAC2 soap_dealloc(struct soap*, void*);
+SOAP_FMAC1 struct soap_clist * SOAP_FMAC2 soap_link(struct soap*, void*, int, int, void (*fdelete)(struct soap_clist*));
+SOAP_FMAC1 void SOAP_FMAC2 soap_unlink(struct soap*, const void*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_free(struct soap*);
+
+SOAP_FMAC1 void* SOAP_FMAC2 soap_track_malloc(struct soap*, const char*, int, size_t);
+SOAP_FMAC1 void SOAP_FMAC2 soap_track_free(struct soap*, const char*, int, void*);
+
+#ifndef WITH_NOIDREF
+SOAP_FMAC1 int SOAP_FMAC2 soap_lookup_type(struct soap*, const char *id);
+SOAP_FMAC1 void* SOAP_FMAC2 soap_id_lookup(struct soap*, const char *id, void **p, int t, size_t n, unsigned int k);
+SOAP_FMAC1 void* SOAP_FMAC2 soap_id_forward(struct soap*, const char *id, void *p, int st, int tt, size_t n, unsigned int k, void(*fcopy)(struct soap*, int, int, void*, const void*, size_t));
+#endif
+SOAP_FMAC1 void* SOAP_FMAC2 soap_id_enter(struct soap*, const char *id, void *p, int t, size_t n, unsigned int k, const char *type, const char *arrayType, void *(*finstantiate)(struct soap*, int, const char*, const char*, size_t*));
+SOAP_FMAC1 void SOAP_FMAC2 soap_fcopy(struct soap *soap, int st, int tt, void *p, const void *q, size_t n);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_size(const int *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getoffsets(const char *, const int *, int *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getsize(const char *, const char *, int *);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getsizes(const char *, int *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getposition(const char *, int *);
+
+SOAP_FMAC1 char* SOAP_FMAC2 soap_putsize(struct soap*, const char *, int);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_putsizesoffsets(struct soap*, const char *, const int *, const int *, int);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_putsizes(struct soap*, const char *, const int *, int);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_putoffset(struct soap*, int);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_putoffsets(struct soap*, const int *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_closesock(struct soap*);
+
+SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_new(void);
+SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_new1(soap_mode);
+SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_new2(soap_mode, soap_mode);
+SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_copy(struct soap*);
+SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_copy_context(struct soap*,struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_init(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_init1(struct soap*, soap_mode);
+SOAP_FMAC1 void SOAP_FMAC2 soap_init2(struct soap*, soap_mode, soap_mode);
+SOAP_FMAC1 void SOAP_FMAC2 soap_done(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_cleanup(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_begin(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_end(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_delete(struct soap*, void*);
+
+#ifdef SOAP_DEBUG
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_recv_logfile(struct soap*, const char*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_sent_logfile(struct soap*, const char*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_test_logfile(struct soap*, const char*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_close_logfiles(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_open_logfile(struct soap*, int);
+#endif
+
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_token(struct soap*);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_value(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_match_tag(struct soap*, const char*, const char *);
+SOAP_FMAC1 int SOAP_FMAC2 soap_match_array(struct soap*, const char*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_element(struct soap*, const char*, int, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_begin_out(struct soap*, const char *tag, int id, const char *type);
+SOAP_FMAC1 int SOAP_FMAC2 soap_array_begin_out(struct soap*, const char *tag, int id, const char *type, const char *offset);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_ref(struct soap*, const char *tag, int id, int href);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_href(struct soap*, const char *tag, int id, const char *ref, const char *val);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_null(struct soap*, const char *tag, int id, const char *type);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_id(struct soap*, const char *tag, int id, const void *p, const struct soap_array *a, int d, const char *type, int n);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_result(struct soap*, const char *tag);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_end_out(struct soap*, const char *tag);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_start_end_out(struct soap*, const char *tag);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_attribute(struct soap*, const char*, const char*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_begin_in(struct soap*, const char *tag, int nillable);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_end_in(struct soap*, const char *tag);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_peek_element(struct soap*);
+
+SOAP_FMAC1 void SOAP_FMAC2 soap_retry(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_revert(struct soap*);
+
+SOAP_FMAC1 char* SOAP_FMAC2 soap_strdup(struct soap*, const char*);
+SOAP_FMAC1 const char * SOAP_FMAC2 soap_strsearch(const char *big, const char *little);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_string_out(struct soap*, const char *s, int flag);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_string_in(struct soap*, int, long, long);
+
+#ifndef WITH_LEANER
+SOAP_FMAC1 int SOAP_FMAC2 soap_wstring_out(struct soap*, const wchar_t *s, int flag);
+SOAP_FMAC1 wchar_t* SOAP_FMAC2 soap_wstring_in(struct soap*, int, long, long);
+#endif
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_match_namespace(struct soap*, const char *, const char*, int n1, int n2);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_set_namespaces(struct soap*, struct Namespace*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_local_namespaces(struct soap*);
+
+SOAP_FMAC1 void SOAP_FMAC2 soap_pop_namespace(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_push_namespace(struct soap*, const char *,const char *);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_store_lab(struct soap*, const char*, size_t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_append_lab(struct soap*, const char*, size_t);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_new_block(struct soap*);
+SOAP_FMAC1 void* SOAP_FMAC2 soap_push_block(struct soap*, size_t);
+SOAP_FMAC1 void SOAP_FMAC2 soap_pop_block(struct soap*);
+SOAP_FMAC1 size_t SOAP_FMAC2 soap_size_block(struct soap*, size_t);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_first_block(struct soap*);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_next_block(struct soap*);
+SOAP_FMAC1 size_t SOAP_FMAC2 soap_block_size(struct soap*);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_save_block(struct soap*, char*, int);
+SOAP_FMAC1 void SOAP_FMAC2 soap_end_block(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_begin_out(struct soap*);
+SOAP_FMAC1 int soap_envelope_end_out(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_begin_in(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_end_in(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_body_begin_out(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_body_end_out(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_body_begin_in(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_body_end_in(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_recv_header(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_response(struct soap*, int);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_send_empty_response(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_recv_empty_response(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_send_fault(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_recv_fault(struct soap*);
+
+#ifndef WITH_NOSTDLIB
+SOAP_FMAC1 void SOAP_FMAC2 soap_print_fault(struct soap*, FILE*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_print_fault_location(struct soap*, FILE*);
+#endif
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2byte(struct soap*, const char*, char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2short(struct soap*, const char*, short*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2int(struct soap*, const char*, int*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2long(struct soap*, const char*, long*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2LONG64(struct soap*, const char*, LONG64*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2float(struct soap*, const char*, float*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2double(struct soap*, const char*, double*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedByte(struct soap*, const char*, unsigned char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedShort(struct soap*, const char*, unsigned short*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedInt(struct soap*, const char*, unsigned int*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedLong(struct soap*, const char*, unsigned long*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2ULONG64(struct soap*, const char*, ULONG64*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2string(struct soap*, const char*, char**);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2QName(struct soap*, const char*, char**);
+
+#ifndef WITH_LEAN
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2dateTime(struct soap*, const char*, time_t*);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_s2base64(struct soap*, const unsigned char*, char*, int);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_s2hex(struct soap*, const unsigned char*, char*, int);
+#endif
+
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_byte2s(struct soap*, char);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_short2s(struct soap*, short);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_int2s(struct soap*, int);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_long2s(struct soap*, long);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_LONG642s(struct soap*, LONG64);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_float2s(struct soap*, float);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_double2s(struct soap*, double);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedByte2s(struct soap*, unsigned char);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedShort2s(struct soap*, unsigned short);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedInt2s(struct soap*, unsigned int);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedLong2s(struct soap*, unsigned long);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_ULONG642s(struct soap*, ULONG64);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_QName2s(struct soap*, const char*);
+
+#ifndef WITH_LEAN
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_dateTime2s(struct soap*, time_t);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_base642s(struct soap*, const char*, char*, size_t, int*);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_hex2s(struct soap*, const char*, char*, size_t, int*);
+#endif
+
+
+SOAP_FMAC1 int* SOAP_FMAC2 soap_inint(struct soap*, const char *tag, int *p, const char *, int);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_inbyte(struct soap*, const char *tag, char *p, const char *, int);
+SOAP_FMAC1 long* SOAP_FMAC2 soap_inlong(struct soap*, const char *tag, long *p, const char *, int);
+SOAP_FMAC1 LONG64* SOAP_FMAC2 soap_inLONG64(struct soap*, const char *tag, LONG64 *p, const char *, int);
+SOAP_FMAC1 short* SOAP_FMAC2 soap_inshort(struct soap*, const char *tag, short *p, const char *, int);
+SOAP_FMAC1 float* SOAP_FMAC2 soap_infloat(struct soap*, const char *tag, float *p, const char *, int);
+SOAP_FMAC1 double* SOAP_FMAC2 soap_indouble(struct soap*, const char *tag, double *p, const char *, int);
+SOAP_FMAC1 unsigned char* SOAP_FMAC2 soap_inunsignedByte(struct soap*, const char *tag, unsigned char *p, const char *, int);
+SOAP_FMAC1 unsigned short* SOAP_FMAC2 soap_inunsignedShort(struct soap*, const char *tag, unsigned short *p, const char *, int);
+SOAP_FMAC1 unsigned int* SOAP_FMAC2 soap_inunsignedInt(struct soap*, const char *tag, unsigned int *p, const char *, int);
+SOAP_FMAC1 unsigned long* SOAP_FMAC2 soap_inunsignedLong(struct soap*, const char *tag, unsigned long *p, const char *, int);
+SOAP_FMAC1 ULONG64* SOAP_FMAC2 soap_inULONG64(struct soap*, const char *tag, ULONG64 *p, const char *, int);
+SOAP_FMAC1 char** SOAP_FMAC2 soap_instring(struct soap*, const char *tag, char **p, const char *, int, int, long, long);
+SOAP_FMAC1 char** SOAP_FMAC2 soap_inliteral(struct soap*, const char *tag, char **p);
+
+#ifndef WITH_LEAN
+SOAP_FMAC1 time_t* SOAP_FMAC2 soap_indateTime(struct soap*, const char *tag, time_t *p, const char *, int);
+#endif
+
+#ifndef WITH_LEANER
+SOAP_FMAC1 wchar_t** SOAP_FMAC2 soap_inwstring(struct soap*, const char *tag, wchar_t **p, const char *, int, long, long);
+SOAP_FMAC1 wchar_t** SOAP_FMAC2 soap_inwliteral(struct soap*, const char *tag, wchar_t **p);
+#endif
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_outbyte(struct soap*, const char *tag, int id, const char *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outshort(struct soap*, const char *tag, int id, const short *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outint(struct soap*, const char *tag, int id, const int *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outlong(struct soap*, const char *tag, int id, const long *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outLONG64(struct soap*, const char *tag, int id, const LONG64 *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outfloat(struct soap*, const char *tag, int id, const float *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outdouble(struct soap*, const char *tag, int id, const double *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedByte(struct soap*, const char *tag, int id, const unsigned char *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedShort(struct soap*, const char *tag, int id, const unsigned short *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedInt(struct soap*, const char *tag, int id, const unsigned int *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedLong(struct soap*, const char *tag, int id, const unsigned long *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outULONG64(struct soap*, const char *tag, int id, const ULONG64 *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outstring(struct soap*, const char *tag, int id, char *const*p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outliteral(struct soap*, const char *tag, char *const*p);
+
+#ifndef WITH_LEAN
+SOAP_FMAC1 int SOAP_FMAC2 soap_outdateTime(struct soap*, const char *tag, int id, const time_t *p, const char *, int);
+#endif
+
+#ifndef WITH_LEANER
+SOAP_FMAC1 int SOAP_FMAC2 soap_outwstring(struct soap*, const char *tag, int id, wchar_t *const*p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outwliteral(struct soap*, const char *tag, wchar_t *const*p);
+#endif
+
+#ifndef WITH_LEANER
+SOAP_FMAC1 int SOAP_FMAC2 soap_attachment(struct soap *, const char*, int, const void*, const struct soap_array*, const char*, const char*, const char*, int, const char*, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_move(struct soap*, long);
+SOAP_FMAC1 size_t SOAP_FMAC2 soap_tell(struct soap*);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_dime_option(struct soap*, unsigned short, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getdimehdr(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getdime(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_putdimehdr(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_putdime(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getmimehdr(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getmime(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_putmimehdr(struct soap*, struct soap_multipart*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_putmime(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_dime(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_mime(struct soap*, const char *boundary, const char *start);
+SOAP_FMAC1 void SOAP_FMAC2 soap_clr_dime(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_clr_mime(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_set_dime_attachment(struct soap*, char *ptr, size_t size, const char *type, const char *id, unsigned short optype, const char *option);
+SOAP_FMAC1 int SOAP_FMAC2 soap_set_mime_attachment(struct soap*, char *ptr, size_t size, enum soap_mime_encoding encoding, const char *type, const char *id, const char *location, const char *description);
+SOAP_FMAC1 struct soap_multipart* SOAP_FMAC2 soap_next_multipart(struct soap_multipart*);
+#endif
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_register_plugin_arg(struct soap*, int (*fcreate)(struct soap*, struct soap_plugin*, void*), void*);
+SOAP_FMAC1 void* SOAP_FMAC2 soap_lookup_plugin(struct soap*, const char*);
+
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_attr_value(struct soap *soap, const char *name, int flag);
+SOAP_FMAC1 int SOAP_FMAC2 soap_set_attr(struct soap *soap, const char *name, const char *value);
+SOAP_FMAC1 void SOAP_FMAC2 soap_clr_attr(struct soap *soap);
+
+#ifdef WITH_COOKIES
+SOAP_FMAC1 size_t SOAP_FMAC2 soap_encode_cookie(const char*, char*, size_t);
+SOAP_FMAC1 extern struct soap_cookie* SOAP_FMAC2 soap_set_cookie(struct soap*, const char*, const char*, const char*, const char*);
+SOAP_FMAC1 extern struct soap_cookie* SOAP_FMAC2 soap_cookie(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern char* SOAP_FMAC2 soap_cookie_value(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern char* SOAP_FMAC2 soap_env_cookie_value(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern long SOAP_FMAC2 soap_cookie_expire(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern int SOAP_FMAC2 soap_set_cookie_expire(struct soap*, const char*, long, const char*, const char*);
+SOAP_FMAC1 extern int SOAP_FMAC2 soap_set_cookie_session(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern int SOAP_FMAC2 soap_clr_cookie_session(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern void SOAP_FMAC2 soap_clr_cookie(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern int SOAP_FMAC2 soap_getenv_cookies(struct soap*);
+SOAP_FMAC1 extern struct soap_cookie* SOAP_FMAC2 soap_copy_cookies(struct soap*);
+SOAP_FMAC1 extern void SOAP_FMAC2 soap_free_cookies(struct soap*);
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
+
diff --git a/org.glite.security.gsoap-plugin/src/stdsoap2_2.7.9b.c b/org.glite.security.gsoap-plugin/src/stdsoap2_2.7.9b.c
new file mode 100644 (file)
index 0000000..959147e
--- /dev/null
@@ -0,0 +1,14172 @@
+/*
+
+stdsoap2.c[pp] 2.7.9b
+
+gSOAP runtime
+
+gSOAP XML Web services tools
+Copyright (C) 2000-2007, Robert van Engelen, Genivia Inc., All Rights Reserved.
+This part of the software is released under one of the following licenses:
+GPL, the gSOAP public license, or Genivia's license for commercial use.
+--------------------------------------------------------------------------------
+Contributors:
+
+Wind River Systems Inc., for the following additions under gSOAP public license:
+  - vxWorks compatible (#define VXWORKS)
+--------------------------------------------------------------------------------
+gSOAP public license.
+
+The contents of this file are subject to the gSOAP Public License Version 1.3
+(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.cs.fsu.edu/~engelen/soaplicense.html
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the License.
+
+The Initial Developer of the Original Code is Robert A. van Engelen.
+Copyright (C) 2000-2007, Robert van Engelen, Genivia Inc., All Rights Reserved.
+--------------------------------------------------------------------------------
+GPL license.
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place, Suite 330, Boston, MA 02111-1307 USA
+
+Author contact information:
+engelen@genivia.com / engelen@acm.org
+--------------------------------------------------------------------------------
+A commercial use license is available from Genivia, Inc., contact@genivia.com
+--------------------------------------------------------------------------------
+
+Installation note:
+
+Win32 build needs winsock.dll (Visual C++ "wsock32.lib")
+To do this in Visual C++ 6.0, go to "Project", "settings", select the "Link"
+tab (the project file needs to be selected in the file view) and add
+"wsock32.lib" to the "Object/library modules" entry
+
+On Mac OS X with gcc (GCC) 3.1 20020420 (prerelease) you MUST compile with
+-fstack_check when using -O2 because gcc 3.1 has a bug that smashes the stack
+when locally allocated data exceeds 64K.
+
+*/
+
+#ifdef AS400
+# pragma convert(819)  /* EBCDIC to ASCII */
+#endif
+
+#include "stdsoap2.h"
+
+#ifdef WIN32
+# pragma comment(lib, "wsock32.lib")
+#endif
+
+#ifdef __cplusplus
+SOAP_SOURCE_STAMP("@(#) stdsoap2.cpp ver 2.7.9b 2007-01-01 12:00:00 GMT")
+extern "C" {
+#else
+SOAP_SOURCE_STAMP("@(#) stdsoap2.c ver 2.7.9 2007-01-01 12:00:00 GMT")
+#endif
+
+/* 8bit character representing unknown/nonrepresentable character data (e.g. not supported by current locale with multibyte support enabled) */
+#ifndef SOAP_UNKNOWN_CHAR
+#define SOAP_UNKNOWN_CHAR (127)
+#endif
+
+/*      EOF=-1 */
+#define SOAP_LT (soap_wchar)(-2) /* XML character '<' */
+#define SOAP_TT (soap_wchar)(-3) /* XML character '</' */
+#define SOAP_GT (soap_wchar)(-4) /* XML character '>' */
+#define SOAP_QT (soap_wchar)(-5) /* XML character '"' */
+#define SOAP_AP (soap_wchar)(-6) /* XML character ''' */
+
+#define soap_blank(c)          ((c) >= 0 && (c) <= 32)
+#define soap_notblank(c)       ((c) > 32)
+
+#define soap_hash_ptr(p)       ((size_t)(((unsigned long)(p) >> 3) & (SOAP_PTRHASH-1)))
+
+#ifdef SOAP_DEBUG
+static void soap_init_logs(struct soap*);
+static void soap_close_logfile(struct soap*, int);
+static void soap_set_logfile(struct soap*, int, const char*);
+#endif
+
+#ifdef SOAP_MEM_DEBUG
+static void soap_init_mht(struct soap*);
+static void soap_free_mht(struct soap*);
+static void soap_track_unlink(struct soap*, const void*);
+#endif
+
+#ifndef PALM_2
+static int soap_set_error(struct soap*, const char*, const char*, const char*, const char*, int);
+static int soap_copy_fault(struct soap*, const char*, const char*, const char*, const char*);
+static int soap_getattrval(struct soap*, char*, size_t, soap_wchar);
+#endif
+
+#ifndef PALM_1
+static soap_wchar soap_char(struct soap*);
+static soap_wchar soap_get_pi(struct soap*);
+static int soap_isxdigit(int);
+static void *fplugin(struct soap*, const char*);
+#ifndef WITH_NOIDREF
+static void soap_update_ptrs(struct soap*, char*, char*, char*, char*);
+static int soap_has_copies(struct soap*, const char*, const char*);
+static void soap_init_iht(struct soap*);
+static void soap_free_iht(struct soap*);
+static void soap_init_pht(struct soap*);
+static void soap_free_pht(struct soap*);
+#endif
+#endif
+
+#ifndef WITH_LEAN
+static const char *soap_set_validation_fault(struct soap*, const char*, const char*);
+static int soap_isnumeric(struct soap*, const char*);
+static time_t soap_timegm(struct tm*);
+static struct soap_nlist *soap_push_ns(struct soap *soap, const char *id, const char *ns, short utilized);
+static void soap_pop_ns(struct soap *soap);
+static void soap_utilize_ns(struct soap *soap, const char *tag, size_t n);
+#endif
+
+#ifndef WITH_LEANER
+#ifndef PALM_1
+static struct soap_multipart *soap_new_multipart(struct soap*, struct soap_multipart**, struct soap_multipart**, char*, size_t);
+static int soap_putdimefield(struct soap*, const char*, size_t);
+static char *soap_getdimefield(struct soap*, size_t);
+static void soap_select_mime_boundary(struct soap*);
+static int soap_valid_mime_boundary(struct soap*);
+static void soap_resolve_attachment(struct soap*, struct soap_multipart*);
+#endif
+#endif
+
+#ifdef WITH_GZIP
+static int soap_getgziphdr(struct soap*);
+#endif
+
+#ifdef WITH_OPENSSL
+static int ssl_init_done = 0;
+static int ssl_auth_init(struct soap*);
+static int ssl_verify_callback(int, X509_STORE_CTX*);
+static int ssl_password(char*, int, int, void *);
+/* This callback is included for future references. It should not be deleted
+static DH *ssl_tmp_dh(SSL*, int, int);
+*/
+#endif
+
+#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
+#ifndef PALM_1
+static const char *soap_decode(char*, size_t, const char*, const char*);
+#endif
+#endif
+
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static soap_wchar soap_getchunkchar(struct soap*);
+static const char *http_error(struct soap*, int);
+static int http_post(struct soap*, const char*, const char*, int, const char*, const char*, size_t);
+static int http_get(struct soap*);
+static int http_send_header(struct soap*, const char*);
+static int http_post_header(struct soap*, const char*, const char*);
+static int http_response(struct soap*, int, size_t);
+static int http_parse(struct soap*);
+static int http_parse_header(struct soap*, const char*, const char*);
+#endif
+#endif
+
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int fsend(struct soap*, const char*, size_t);
+static size_t frecv(struct soap*, char*, size_t);
+static int tcp_init(struct soap*);
+static const char *tcp_error(struct soap*);
+#ifndef WITH_LEAN
+static size_t frecv_stop(struct soap*, char*, size_t);
+#endif
+#ifndef WITH_IPV6
+static int tcp_gethost(struct soap*, const char *addr, struct in_addr *inaddr);
+#endif
+static int tcp_connect(struct soap*, const char *endpoint, const char *host, int port);
+static int tcp_accept(struct soap*, int, struct sockaddr*, int*);
+static int tcp_disconnect(struct soap*);
+static int tcp_closesocket(struct soap*, SOAP_SOCKET);
+static int tcp_shutdownsocket(struct soap*, SOAP_SOCKET, int);
+static const char *soap_strerror(struct soap*);
+#endif
+#endif
+
+#if defined(PALM) && !defined(PALM_2)
+unsigned short errno;
+#endif
+
+#ifndef PALM_1
+static const char soap_env1[42] = "http://schemas.xmlsoap.org/soap/envelope/";
+static const char soap_enc1[42] = "http://schemas.xmlsoap.org/soap/encoding/";
+static const char soap_env2[40] = "http://www.w3.org/2003/05/soap-envelope";
+static const char soap_enc2[40] = "http://www.w3.org/2003/05/soap-encoding";
+static const char soap_rpc[35] = "http://www.w3.org/2003/05/soap-rpc";
+#endif
+
+#ifndef PALM_1
+const struct soap_double_nan soap_double_nan = {0xFFFFFFFF, 0xFFFFFFFF};
+static const char soap_base64o[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+static const char soap_base64i[81] = "\76XXX\77\64\65\66\67\70\71\72\73\74\75XXXXXXX\00\01\02\03\04\05\06\07\10\11\12\13\14\15\16\17\20\21\22\23\24\25\26\27\30\31XXXXXX\32\33\34\35\36\37\40\41\42\43\44\45\46\47\50\51\52\53\54\55\56\57\60\61\62\63";
+#endif
+
+#ifndef WITH_LEAN
+static const char soap_indent[11] = "\n\t\t\t\t\t\t\t\t\t";
+/* Alternative indentation form for SOAP_XML_INDENT:
+static const char soap_indent[21] = "\n                   ";
+*/
+#endif
+
+#ifndef SOAP_CANARY
+# define SOAP_CANARY (0xC0DE)
+#endif
+
+static const char soap_padding[4] = "\0\0\0";
+#define SOAP_STR_PADDING (soap_padding)
+#define SOAP_STR_EOS (soap_padding)
+#define SOAP_NON_NULL (soap_padding)
+
+#ifndef WITH_LEAN
+static const struct soap_code_map html_entity_codes[] = /* entities for XHTML parsing */
+{ { 160, "nbsp" },
+  { 161, "iexcl" },
+  { 162, "cent" },
+  { 163, "pound" },
+  { 164, "curren" },
+  { 165, "yen" },
+  { 166, "brvbar" },
+  { 167, "sect" },
+  { 168, "uml" },
+  { 169, "copy" },
+  { 170, "ordf" },
+  { 171, "laquo" },
+  { 172, "not" },
+  { 173, "shy" },
+  { 174, "reg" },
+  { 175, "macr" },
+  { 176, "deg" },
+  { 177, "plusmn" },
+  { 178, "sup2" },
+  { 179, "sup3" },
+  { 180, "acute" },
+  { 181, "micro" },
+  { 182, "para" },
+  { 183, "middot" },
+  { 184, "cedil" },
+  { 185, "sup1" },
+  { 186, "ordm" },
+  { 187, "raquo" },
+  { 188, "frac14" },
+  { 189, "frac12" },
+  { 190, "frac34" },
+  { 191, "iquest" },
+  { 192, "Agrave" },
+  { 193, "Aacute" },
+  { 194, "Acirc" },
+  { 195, "Atilde" },
+  { 196, "Auml" },
+  { 197, "Aring" },
+  { 198, "AElig" },
+  { 199, "Ccedil" },
+  { 200, "Egrave" },
+  { 201, "Eacute" },
+  { 202, "Ecirc" },
+  { 203, "Euml" },
+  { 204, "Igrave" },
+  { 205, "Iacute" },
+  { 206, "Icirc" },
+  { 207, "Iuml" },
+  { 208, "ETH" },
+  { 209, "Ntilde" },
+  { 210, "Ograve" },
+  { 211, "Oacute" },
+  { 212, "Ocirc" },
+  { 213, "Otilde" },
+  { 214, "Ouml" },
+  { 215, "times" },
+  { 216, "Oslash" },
+  { 217, "Ugrave" },
+  { 218, "Uacute" },
+  { 219, "Ucirc" },
+  { 220, "Uuml" },
+  { 221, "Yacute" },
+  { 222, "THORN" },
+  { 223, "szlig" },
+  { 224, "agrave" },
+  { 225, "aacute" },
+  { 226, "acirc" },
+  { 227, "atilde" },
+  { 228, "auml" },
+  { 229, "aring" },
+  { 230, "aelig" },
+  { 231, "ccedil" },
+  { 232, "egrave" },
+  { 233, "eacute" },
+  { 234, "ecirc" },
+  { 235, "euml" },
+  { 236, "igrave" },
+  { 237, "iacute" },
+  { 238, "icirc" },
+  { 239, "iuml" },
+  { 240, "eth" },
+  { 241, "ntilde" },
+  { 242, "ograve" },
+  { 243, "oacute" },
+  { 244, "ocirc" },
+  { 245, "otilde" },
+  { 246, "ouml" },
+  { 247, "divide" },
+  { 248, "oslash" },
+  { 249, "ugrave" },
+  { 250, "uacute" },
+  { 251, "ucirc" },
+  { 252, "uuml" },
+  { 253, "yacute" },
+  { 254, "thorn" },
+  { 255, "yuml" },
+  {   0, NULL }
+};
+#endif
+
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+static const struct soap_code_map h_error_codes[] =
+{
+#ifdef HOST_NOT_FOUND   
+  { HOST_NOT_FOUND, "Host not found" },
+#endif
+#ifdef TRY_AGAIN
+  { TRY_AGAIN, "Try Again" },
+#endif
+#ifdef NO_RECOVERY  
+  { NO_RECOVERY, "No Recovery" },
+#endif
+#ifdef NO_DATA
+  { NO_DATA, "No Data" },
+#endif
+#ifdef NO_ADDRESS
+  { NO_ADDRESS, "No Address" },
+#endif
+  { 0, NULL }
+};
+#endif
+#endif
+
+#ifndef WITH_NOHTTP
+#ifndef WITH_LEAN
+static const struct soap_code_map h_http_error_codes[] =
+{ { 200, "OK" },
+  { 201, "Created" },
+  { 202, "Accepted" },
+  { 203, "Non-Authoritative Information" },
+  { 204, "No Content" },
+  { 205, "Reset Content" },
+  { 206, "Partial Content" },
+  { 300, "Multiple Choices" },
+  { 301, "Moved Permanently" },
+  { 302, "Found" },
+  { 303, "See Other" },
+  { 304, "Not Modified" },
+  { 305, "Use Proxy" },
+  { 307, "Temporary Redirect" },
+  { 400, "Bad Request" },
+  { 401, "Unauthorized" },
+  { 402, "Payment Required" },
+  { 403, "Forbidden" },
+  { 404, "Not Found" },
+  { 405, "Method Not Allowed" },
+  { 406, "Not Acceptable" },
+  { 407, "Proxy Authentication Required" },
+  { 408, "Request Time-out" },
+  { 409, "Conflict" },
+  { 410, "Gone" },
+  { 411, "Length Required" },
+  { 412, "Precondition Failed" },
+  { 413, "Request Entity Too Large" },
+  { 414, "Request-URI Too Large" },
+  { 415, "Unsupported Media Type" },
+  { 416, "Requested range not satisfiable" },
+  { 417, "Expectation Failed" },
+  { 500, "Internal Server Error" },
+  { 501, "Not Implemented" },
+  { 502, "Bad Gateway" },
+  { 503, "Service Unavailable" },
+  { 504, "Gateway Time-out" },
+  { 505, "HTTP Version not supported" },
+  {   0, NULL }
+};
+#endif
+#endif
+
+#ifdef WITH_OPENSSL
+static const struct soap_code_map h_ssl_error_codes[] =
+{
+#define _SSL_ERROR(e) { e, #e }
+  _SSL_ERROR(SSL_ERROR_SSL),
+  _SSL_ERROR(SSL_ERROR_ZERO_RETURN),
+  _SSL_ERROR(SSL_ERROR_WANT_READ),
+  _SSL_ERROR(SSL_ERROR_WANT_WRITE),
+  _SSL_ERROR(SSL_ERROR_WANT_CONNECT),
+  _SSL_ERROR(SSL_ERROR_WANT_X509_LOOKUP),
+  _SSL_ERROR(SSL_ERROR_SYSCALL),
+  { 0, NULL }
+};
+#endif
+
+#ifndef WITH_LEANER
+static const struct soap_code_map mime_codes[] =
+{ { SOAP_MIME_7BIT,            "7bit" },
+  { SOAP_MIME_8BIT,            "8bit" },
+  { SOAP_MIME_BINARY,          "binary" },
+  { SOAP_MIME_QUOTED_PRINTABLE, "quoted-printable" },
+  { SOAP_MIME_BASE64,          "base64" },
+  { SOAP_MIME_IETF_TOKEN,      "ietf-token" },
+  { SOAP_MIME_X_TOKEN,         "x-token" },
+  { 0,                         NULL }
+};
+#endif
+
+#ifdef WIN32
+static int tcp_done = 0;
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+fsend(struct soap *soap, const char *s, size_t n)
+{ register int nwritten, err;
+#if defined(__cplusplus) && !defined(WITH_LEAN)
+  if (soap->os)
+  { soap->os->write(s, n);
+    if (soap->os->good())
+      return SOAP_OK;
+    return SOAP_EOF;
+  }
+#endif
+  while (n)
+  { if (soap_valid_socket(soap->socket))
+    { 
+#ifndef WITH_LEAN
+      if (soap->send_timeout)
+      { struct timeval timeout;
+        fd_set fd;
+        if (soap->send_timeout > 0)
+        { timeout.tv_sec = soap->send_timeout;
+          timeout.tv_usec = 0;
+        }
+        else
+        { timeout.tv_sec = -soap->send_timeout/1000000;
+          timeout.tv_usec = -soap->send_timeout%1000000;
+        }
+#ifndef WIN32
+        if ((int)soap->socket >= (int)FD_SETSIZE)
+          return SOAP_FD_EXCEEDED;     /* Hint: MUST increase FD_SETSIZE */
+#endif
+        FD_ZERO(&fd);
+        FD_SET((SOAP_SOCKET)soap->socket, &fd);
+        for (;;)
+        { register int r = select((SOAP_SOCKET)(soap->socket + 1), NULL, &fd, &fd, &timeout);
+          if (r > 0)
+            break;
+          if (!r)
+          { soap->errnum = 0;
+            return SOAP_EOF;
+          }
+          err = soap_socket_errno(soap->socket);
+          if (err != SOAP_EINTR && err != SOAP_EAGAIN)
+          { soap->errnum = err;
+            return SOAP_EOF;
+          }
+        }
+      }
+#endif
+#ifdef WITH_OPENSSL
+      if (soap->ssl)
+        nwritten = SSL_write(soap->ssl, s, n);
+      else if (soap->bio)
+        nwritten = BIO_write(soap->bio, s, n);
+      else
+#endif
+#ifdef WITH_UDP
+      if ((soap->omode & SOAP_IO_UDP))
+      { if (soap->peerlen)
+          nwritten = sendto((SOAP_SOCKET)soap->socket, s, n, soap->socket_flags, (struct sockaddr*)&soap->peer, soap->peerlen);
+        else
+          nwritten = send((SOAP_SOCKET)soap->socket, s, n, soap->socket_flags);
+        /* retry and back-off algorithm */
+        /* TODO: this is not very clear from specs so verify and limit conditions under which we should loop (e.g. ENOBUFS) */
+        if (nwritten < 0)
+        { struct timeval timeout;
+          fd_set fd;
+          int udp_repeat;
+          int udp_delay;
+#ifndef WIN32
+          if ((int)soap->socket >= (int)FD_SETSIZE)
+            return SOAP_FD_EXCEEDED;   /* Hint: MUST increase FD_SETSIZE */
+#endif
+          if ((soap->connect_flags & SO_BROADCAST))
+            udp_repeat = 3; /* SOAP-over-UDP MULTICAST_UDP_REPEAT - 1 */
+          else
+            udp_repeat = 1; /* SOAP-over-UDP UNICAST_UDP_REPEAT - 1 */
+          udp_delay = (soap_random % 201) + 50; /* UDP_MIN_DELAY .. UDP_MAX_DELAY */
+          do
+          { timeout.tv_sec = 0;
+            timeout.tv_usec = 1000 * udp_delay; /* ms */
+            FD_ZERO(&fd);
+            FD_SET((SOAP_SOCKET)soap->socket, &fd);
+            select((SOAP_SOCKET)(soap->socket + 1), NULL, NULL, &fd, &timeout);
+            if (soap->peerlen)
+              nwritten = sendto((SOAP_SOCKET)soap->socket, s, n, soap->socket_flags, (struct sockaddr*)&soap->peer, soap->peerlen);
+            else
+              nwritten = send((SOAP_SOCKET)soap->socket, s, n, soap->socket_flags);
+            udp_delay <<= 1;
+            if (udp_delay > 500) /* UDP_UPPER_DELAY */
+              udp_delay = 500;
+          }
+          while (nwritten < 0 && --udp_repeat > 0);
+        }
+      }
+      else
+#endif
+#if !defined(PALM) && !defined(AS400)
+        nwritten = send((SOAP_SOCKET)soap->socket, s, n, soap->socket_flags);
+#else
+        nwritten = send((SOAP_SOCKET)soap->socket, (void*)s, n, soap->socket_flags);
+#endif
+      if (nwritten <= 0)
+      {
+#ifdef WITH_OPENSSL
+        int err;
+        if (soap->ssl && (err = SSL_get_error(soap->ssl, nwritten)) != SSL_ERROR_NONE && err != SSL_ERROR_WANT_READ && err != SSL_ERROR_WANT_WRITE)
+          return SOAP_EOF;
+#endif
+        err = soap_socket_errno(soap->socket);
+        if (err && err != SOAP_EINTR && err != SOAP_EWOULDBLOCK && err != SOAP_EAGAIN)
+        { soap->errnum = err;
+          return SOAP_EOF;
+        }
+        nwritten = 0; /* and call write() again */
+      }
+    }
+    else
+    {
+#ifdef WITH_FASTCGI
+      nwritten = fwrite((void*)s, 1, n, stdout);
+      fflush(stdout);
+#else
+#ifdef UNDER_CE
+      nwritten = fwrite(s, 1, n, soap->sendfd);
+#else
+#ifdef VXWORKS
+#ifdef WMW_RPM_IO
+      if (soap->rpmreqid)
+        nwritten = (httpBlockPut(soap->rpmreqid, s, n) == 0) ? n : -1; 
+      else
+#endif
+        nwritten = fwrite(s, sizeof(char), n, fdopen(soap->sendfd, "w"));
+#else
+      nwritten = write((SOAP_SOCKET)soap->sendfd, s, n);
+#endif
+#endif
+#endif
+      if (nwritten <= 0)
+      { err = soap_errno;
+        if (err && err != SOAP_EINTR && err != SOAP_EWOULDBLOCK && err != SOAP_EAGAIN)
+        { soap->errnum = err;
+          return SOAP_EOF;
+        }
+        nwritten = 0; /* and call write() again */
+      }
+    }
+    n -= nwritten;
+    s += nwritten;
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_send_raw(struct soap *soap, const char *s, size_t n)
+{ if (!n)
+    return SOAP_OK;
+  if (soap->mode & SOAP_IO_LENGTH)
+  { soap->count += n;
+#ifndef WITH_LEANER
+    if (soap->fpreparesend && (soap->mode & SOAP_IO) != SOAP_IO_STORE)
+      return soap->error = soap->fpreparesend(soap, s, n);
+#endif
+    return SOAP_OK;
+  }
+  if (soap->mode & SOAP_IO)
+  { register size_t i = SOAP_BUFLEN - soap->bufidx;
+    while (n >= i)
+    { memcpy(soap->buf + soap->bufidx, s, i);
+      soap->bufidx = SOAP_BUFLEN;
+      if (soap_flush(soap))
+        return soap->error;
+      s += i;
+      n -= i;
+      i = SOAP_BUFLEN;
+    }
+    memcpy(soap->buf + soap->bufidx, s, n);
+    soap->bufidx += n;
+    return SOAP_OK;
+  }
+  return soap_flush_raw(soap, s, n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_flush(struct soap *soap)
+{ register int n = soap->bufidx;
+  if (n)
+  { soap->bufidx = 0;
+#ifdef WITH_ZLIB
+    if (soap->mode & SOAP_ENC_ZLIB)
+    { soap->d_stream.next_in = (Byte*)soap->buf;
+      soap->d_stream.avail_in = (unsigned int)n;
+#ifdef WITH_GZIP
+      soap->z_crc = crc32(soap->z_crc, (Byte*)soap->buf, (unsigned int)n);
+#endif
+      do
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflating %u bytes\n", soap->d_stream.avail_in));
+        if (deflate(&soap->d_stream, Z_NO_FLUSH) != Z_OK)
+        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unable to deflate: %s\n", soap->d_stream.msg?soap->d_stream.msg:""));
+          return soap->error = SOAP_ZLIB_ERROR;
+        }
+        if (!soap->d_stream.avail_out)
+        { if (soap_flush_raw(soap, soap->z_buf, SOAP_BUFLEN))
+            return soap->error;
+          soap->d_stream.next_out = (Byte*)soap->z_buf;
+          soap->d_stream.avail_out = SOAP_BUFLEN;
+        }
+      } while (soap->d_stream.avail_in);
+    }
+    else
+#endif
+      return soap_flush_raw(soap, soap->buf, n);
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_flush_raw(struct soap *soap, const char *s, size_t n)
+{ if ((soap->mode & SOAP_IO) == SOAP_IO_STORE)
+  { register char *t;
+    if (!(t = (char*)soap_push_block(soap, n)))
+      return soap->error = SOAP_EOM;
+    memcpy(t, s, n);
+#ifndef WITH_LEANER
+    if (soap->fpreparesend)
+      return soap->error = soap->fpreparesend(soap, s, n);
+#endif
+    return SOAP_OK;
+  }
+#ifndef WITH_LEANER
+  if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
+  { char t[16];
+    sprintf(t, "\r\n%lX\r\n" + (soap->chunksize ? 0 : 2), (unsigned long)n);
+    DBGMSG(SENT, t, strlen(t));
+    if ((soap->error = soap->fsend(soap, t, strlen(t))))
+      return soap->error;
+    soap->chunksize += n;
+  }
+  DBGMSG(SENT, s, n);
+#endif
+  return soap->error = soap->fsend(soap, s, n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_send(struct soap *soap, const char *s)
+{ if (s)
+    return soap_send_raw(soap, s, strlen(s));
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_send2(struct soap *soap, const char *s1, const char *s2)
+{ if (soap_send(soap, s1))
+    return soap->error;
+  return soap_send(soap, s2);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_send3(struct soap *soap, const char *s1, const char *s2, const char *s3)
+{ if (soap_send(soap, s1)
+   || soap_send(soap, s2))
+    return soap->error;
+  return soap_send(soap, s3);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static size_t
+frecv(struct soap *soap, char *s, size_t n)
+{ register int r;
+#ifdef PALM
+  register int timeouts = 0;  
+#endif
+  soap->errnum = 0;
+#if defined(__cplusplus) && !defined(WITH_LEAN)
+  if (soap->is)
+  { if (soap->is->good())
+      return soap->is->read(s, n).gcount();
+    return 0;
+  }
+#endif
+  if (soap_valid_socket(soap->socket))
+  { for (;;)
+    { 
+#ifndef WITH_LEAN
+      if (soap->recv_timeout)
+      { struct timeval timeout;
+        fd_set fd;
+        if (soap->recv_timeout > 0)
+        { timeout.tv_sec = soap->recv_timeout;
+          timeout.tv_usec = 0;
+        }
+        else
+        { timeout.tv_sec = -soap->recv_timeout/1000000;
+          timeout.tv_usec = -soap->recv_timeout%1000000;
+        }
+#ifndef WIN32
+        if ((int)soap->socket >= (int)FD_SETSIZE)
+        { soap->error = SOAP_FD_EXCEEDED;
+          return 0;    /* Hint: MUST increase FD_SETSIZE */
+        }
+#endif
+        FD_ZERO(&fd);
+        FD_SET((SOAP_SOCKET)soap->socket, &fd);
+        for (;;)
+        { r = select((SOAP_SOCKET)(soap->socket + 1), &fd, NULL, &fd, &timeout);
+          if (r > 0)
+            break;
+          if (!r)
+          { soap->errnum = 0;
+            return 0;
+          }
+          r = soap_socket_errno(soap->socket);
+          if (r != SOAP_EINTR && r != SOAP_EAGAIN)
+          { soap->errnum = r;
+            return 0;
+          }
+        }
+      }
+#endif
+#ifdef WITH_OPENSSL
+      if (soap->ssl)
+      { int err;
+        r = SSL_read(soap->ssl, s, n);
+        if (r > 0)
+          return (size_t)r;
+        err = SSL_get_error(soap->ssl, r);
+        if (err != SSL_ERROR_NONE && err != SSL_ERROR_WANT_READ && err != SSL_ERROR_WANT_WRITE)
+          return 0;
+      }
+      else if (soap->bio)
+      { r = BIO_read(soap->bio, s, n);
+        if (r > 0)
+          return (size_t)r;
+        return 0;
+      }
+      else
+#endif
+      { 
+#ifdef WITH_UDP
+        if ((soap->omode & SOAP_IO_UDP))
+        { SOAP_SOCKLEN_T k = (SOAP_SOCKLEN_T)sizeof(soap->peer);
+          memset((void*)&soap->peer, 0, sizeof(soap->peer));
+          r = recvfrom((SOAP_SOCKET)soap->socket, s, n, soap->socket_flags, (struct sockaddr*)&soap->peer, &k);        /* portability note: see SOAP_SOCKLEN_T definition in stdsoap2.h */
+          soap->peerlen = (size_t)k;
+#ifndef WITH_IPV6
+          soap->ip = ntohl(soap->peer.sin_addr.s_addr);
+#endif
+        }
+        else
+#endif
+          r = recv((SOAP_SOCKET)soap->socket, s, n, soap->socket_flags);
+#ifdef PALM
+        /* CycleSyncDisplay(curStatusMsg); */
+#endif
+        if (r >= 0)
+          return (size_t)r;
+        r = soap_socket_errno(soap->socket);
+        if (r != SOAP_EINTR && r != SOAP_EAGAIN && r != SOAP_EWOULDBLOCK)
+        { soap->errnum = r;
+          return 0;
+        }
+      }
+#ifndef WITH_LEAN
+      { struct timeval timeout;
+        fd_set fd;
+        timeout.tv_sec = 0;
+        timeout.tv_usec = 10000;
+#ifndef WIN32
+        if ((int)soap->socket >= (int)FD_SETSIZE)
+        { soap->error = SOAP_FD_EXCEEDED;
+          return 0;    /* Hint: MUST increase FD_SETSIZE */
+        }
+#endif
+        FD_ZERO(&fd);
+        FD_SET((SOAP_SOCKET)soap->socket, &fd);
+#ifdef WITH_OPENSSL
+        if (soap->ssl && SSL_get_error(soap->ssl, r) == SSL_ERROR_WANT_WRITE)
+          r = select((SOAP_SOCKET)(soap->socket + 1), NULL, &fd, &fd, &timeout);
+        else
+          r = select((SOAP_SOCKET)(soap->socket + 1), &fd, NULL, &fd, &timeout);
+#else
+        r = select((SOAP_SOCKET)(soap->socket + 1), &fd, NULL, &fd, &timeout);
+#endif
+        if (r < 0 && (r = soap_socket_errno(soap->socket)) != SOAP_EINTR)
+        { soap->errnum = r;
+          return 0;
+        }
+      }
+#endif
+#ifdef PALM
+      if (r < 0 && (r = soap_socket_errno(soap->socket)) == SOAP_EINTR)
+      { timeouts++;
+        if (timeouts > 10)
+        { soap->errnum = r;
+          return 0;
+        }
+      }
+#endif
+    }
+  }
+#ifdef WITH_FASTCGI
+  return fread(s, 1, n, stdin);
+#else
+#ifdef UNDER_CE
+  return fread(s, 1, n, soap->recvfd);
+#else
+#ifdef WMW_RPM_IO
+  if (soap->rpmreqid)
+    r = httpBlockRead(soap->rpmreqid, s, n);
+  else
+#endif
+  r = read((SOAP_SOCKET)soap->recvfd, s, n);
+  if (r >= 0)
+    return (size_t)r;
+  soap->errnum = soap_errno;
+  return 0;
+#endif
+#endif
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static size_t
+frecv_stop(struct soap *soap, char *s, size_t n)
+{ return 0;
+}
+#endif
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static soap_wchar
+soap_getchunkchar(struct soap *soap)
+{ if (soap->bufidx < soap->buflen)
+    return soap->buf[soap->bufidx++];
+  soap->bufidx = 0;
+  soap->buflen = soap->chunkbuflen = soap->frecv(soap, soap->buf, SOAP_BUFLEN);
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read %u bytes from socket %d\n", (unsigned int)soap->buflen, soap->socket));
+  DBGMSG(RECV, soap->buf, soap->buflen);
+  if (soap->buflen)
+    return soap->buf[soap->bufidx++];
+  return EOF;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static int
+soap_isxdigit(int c)
+{ return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f');
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_recv_raw(struct soap *soap)
+{ register size_t ret;
+#ifdef WITH_ZLIB
+  if (soap->mode & SOAP_ENC_ZLIB)
+  { if (soap->d_stream.next_out == Z_NULL)
+      return EOF;
+    if (soap->d_stream.avail_in || !soap->d_stream.avail_out)
+    { register int r;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflating\n"));
+      soap->d_stream.next_out = (Byte*)soap->buf;
+      soap->d_stream.avail_out = SOAP_BUFLEN;
+      r = inflate(&soap->d_stream, Z_NO_FLUSH);
+      if (r == Z_OK || r == Z_STREAM_END)
+      { soap->bufidx = 0;
+        ret = soap->buflen = SOAP_BUFLEN - soap->d_stream.avail_out;
+        if (soap->zlib_in == SOAP_ZLIB_GZIP)
+          soap->z_crc = crc32(soap->z_crc, (Byte*)soap->buf, (unsigned int)ret);
+        if (r == Z_STREAM_END)
+        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflated %lu->%lu bytes\n", soap->d_stream.total_in, soap->d_stream.total_out));
+          soap->z_ratio_in = (float)soap->d_stream.total_in / (float)soap->d_stream.total_out;
+          soap->d_stream.next_out = Z_NULL;
+        }
+        if (ret)
+        { soap->count += ret;
+          DBGLOG(RECV, SOAP_MESSAGE(fdebug, "\n---- decompressed ----\n"));
+          DBGMSG(RECV, soap->buf, ret);
+          return SOAP_OK;
+        }
+      }
+      else if (r != Z_BUF_ERROR)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflate error: %s\n", soap->d_stream.msg?soap->d_stream.msg:""));
+        soap->d_stream.next_out = Z_NULL;
+        soap->error = SOAP_ZLIB_ERROR;
+        return EOF;
+      }
+    }
+zlib_again:
+    if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK && !soap->chunksize)
+    { memcpy(soap->buf, soap->z_buf, SOAP_BUFLEN);
+      soap->buflen = soap->z_buflen;
+    }
+    DBGLOG(RECV, SOAP_MESSAGE(fdebug, "\n---- compressed ----\n"));
+  }
+#endif
+#ifndef WITH_NOHTTP
+  if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK) /* read HTTP chunked transfer */
+  { 
+chunk_again:
+    if (soap->chunksize)
+    { soap->buflen = ret = soap->frecv(soap, soap->buf, soap->chunksize > SOAP_BUFLEN ? SOAP_BUFLEN : soap->chunksize);
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Getting chunk: read %u bytes\n", (unsigned int)ret));
+      DBGMSG(RECV, soap->buf, ret);
+      soap->bufidx = 0;
+      soap->chunksize -= ret;
+    }
+    else
+    { register soap_wchar c;
+      char *t, tmp[8];
+      t = tmp;
+      if (!soap->chunkbuflen)
+      { soap->chunkbuflen = ret = soap->frecv(soap, soap->buf, SOAP_BUFLEN);
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read %u bytes (chunked) from socket %d\n", (unsigned int)ret, soap->socket));
+        DBGMSG(RECV, soap->buf, ret);
+        soap->bufidx = 0;
+        if (!ret)
+          return soap->ahead = EOF;
+      }
+      else
+        soap->bufidx = soap->buflen;
+      soap->buflen = soap->chunkbuflen;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Getting chunk size (idx=%u len=%u)\n", (unsigned int)soap->bufidx, (unsigned int)soap->buflen));
+      while (!soap_isxdigit((int)(c = soap_getchunkchar(soap))))
+      { if ((int)c == EOF)
+          return soap->ahead = EOF;
+      }
+      do
+        *t++ = (char)c;
+      while (soap_isxdigit((int)(c = soap_getchunkchar(soap))) && t - tmp < 7);
+      while ((int)c != EOF && c != '\n')
+        c = soap_getchunkchar(soap);
+      if ((int)c == EOF)
+        return soap->ahead = EOF;
+      *t = '\0';
+      soap->chunksize = soap_strtoul(tmp, &t, 16);
+      if (!soap->chunksize)
+      { soap->chunkbuflen = 0;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of chunked message\n"));
+        while ((int)c != EOF && c != '\n')
+          c = soap_getchunkchar(soap);
+        return soap->ahead = EOF;
+      }
+      soap->buflen = soap->bufidx + soap->chunksize;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Moving buf len to idx=%u len=%u (%s)\n", (unsigned int)soap->bufidx, (unsigned int)soap->buflen, tmp));
+      if (soap->buflen > soap->chunkbuflen)
+      { soap->buflen = soap->chunkbuflen;
+        soap->chunksize -= soap->buflen - soap->bufidx;
+        soap->chunkbuflen = 0;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Passed end of buffer for chunked HTTP (%u bytes left)\n", (unsigned int)(soap->buflen - soap->bufidx)));
+      }
+      else if (soap->chunkbuflen)
+        soap->chunksize = 0;
+      ret = soap->buflen - soap->bufidx;
+      if (!ret)
+        goto chunk_again;
+    }
+  }
+  else
+#endif
+  { soap->bufidx = 0;
+    soap->buflen = ret = soap->frecv(soap, soap->buf, SOAP_BUFLEN);
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read %u bytes from socket %d\n", (unsigned int)ret, soap->socket));
+    DBGMSG(RECV, soap->buf, ret);
+  }
+#ifndef WITH_LEANER
+  if (soap->fpreparerecv && (soap->error = soap->fpreparerecv(soap, soap->buf, ret)))
+    return soap->error;
+#endif
+#ifdef WITH_ZLIB
+  if (soap->mode & SOAP_ENC_ZLIB)
+  { register int r;
+    memcpy(soap->z_buf, soap->buf, SOAP_BUFLEN);
+    soap->d_stream.next_in = (Byte*)(soap->z_buf + soap->bufidx);
+    soap->d_stream.avail_in = (unsigned int)ret;
+    soap->d_stream.next_out = (Byte*)soap->buf;
+    soap->d_stream.avail_out = SOAP_BUFLEN;
+    r = inflate(&soap->d_stream, Z_NO_FLUSH);
+    if (r == Z_OK || r == Z_STREAM_END)
+    { soap->bufidx = 0;
+      soap->z_buflen = soap->buflen;
+      soap->buflen = ret = SOAP_BUFLEN - soap->d_stream.avail_out;
+      if (soap->zlib_in == SOAP_ZLIB_GZIP)
+        soap->z_crc = crc32(soap->z_crc, (Byte*)soap->buf, (unsigned int)soap->buflen);
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflated %u bytes\n", (unsigned int)ret));
+      if (!ret)
+        goto zlib_again;
+      if (r == Z_STREAM_END)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflated %lu->%lu bytes\n", soap->d_stream.total_in, soap->d_stream.total_out));
+        soap->z_ratio_in = (float)soap->d_stream.total_in / (float)soap->d_stream.total_out;
+        soap->d_stream.next_out = Z_NULL;
+      }
+      DBGLOG(RECV, SOAP_MESSAGE(fdebug, "\n---- decompressed ----\n"));
+      DBGMSG(RECV, soap->buf, ret);
+    }
+    else
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unable to inflate: (%d) %s\n", r, soap->d_stream.msg?soap->d_stream.msg:""));
+      soap->d_stream.next_out = Z_NULL;
+      soap->error = SOAP_ZLIB_ERROR;
+      return EOF;
+    }
+  }
+#endif
+  soap->count += ret;
+  return !ret;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_recv(struct soap *soap)
+{ 
+#ifndef WITH_LEANER
+  if (soap->mode & SOAP_ENC_DIME)
+  { if (soap->dime.buflen)
+    { char *s;
+      int i;
+      unsigned char tmp[12];
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DIME hdr for chunked DIME is in buffer\n"));
+      soap->count += soap->dime.buflen - soap->buflen;
+      soap->buflen = soap->dime.buflen;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Skip padding (%ld bytes)\n", -(long)soap->dime.size&3));
+      for (i = -(long)soap->dime.size&3; i > 0; i--)
+      { soap->bufidx++;
+        if (soap->bufidx >= soap->buflen)
+          if (soap_recv_raw(soap))
+            return EOF;
+      }
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get DIME hdr for next chunk\n"));
+      s = (char*)tmp;
+      for (i = 12; i > 0; i--)
+      { *s++ = soap->buf[soap->bufidx++];
+        if (soap->bufidx >= soap->buflen)
+          if (soap_recv_raw(soap))
+            return EOF;
+      }
+      soap->dime.flags = tmp[0] & 0x7;
+      soap->dime.size = ((size_t)tmp[8] << 24) | ((size_t)tmp[9] << 16) | ((size_t)tmp[10] << 8) | ((size_t)tmp[11]);
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get DIME chunk (%u bytes)\n", (unsigned int)soap->dime.size));
+      if (soap->dime.flags & SOAP_DIME_CF)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "More chunking\n"));
+        soap->dime.chunksize = soap->dime.size;
+        if (soap->buflen - soap->bufidx >= soap->dime.size)
+        { soap->dime.buflen = soap->buflen;
+          soap->buflen = soap->bufidx + soap->dime.chunksize;
+        }
+        else
+          soap->dime.chunksize -= soap->buflen - soap->bufidx;
+      }
+      else
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Last chunk\n"));
+        soap->dime.buflen = 0;
+        soap->dime.chunksize = 0;
+      }
+      soap->count = soap->buflen - soap->bufidx;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%u bytes remaining\n", (unsigned int)soap->count));
+      return SOAP_OK;
+    }
+    if (soap->dime.chunksize)
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get next DIME hdr for chunked DIME (%u bytes chunk)\n", (unsigned int)soap->dime.chunksize));
+      if (soap_recv_raw(soap))
+        return EOF;
+      if (soap->buflen - soap->bufidx >= soap->dime.chunksize)
+      { soap->dime.buflen = soap->buflen;
+        soap->count -= soap->buflen - soap->bufidx - soap->dime.chunksize;
+        soap->buflen = soap->bufidx + soap->dime.chunksize;
+      }
+      else
+        soap->dime.chunksize -= soap->buflen - soap->bufidx;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%lu bytes remaining, count=%u\n", (unsigned long)(soap->buflen-soap->bufidx), (unsigned int)soap->count));
+      return SOAP_OK;
+    }
+  }
+#endif
+  return soap_recv_raw(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+soap_wchar
+SOAP_FMAC2
+soap_getchar(struct soap *soap)
+{ register soap_wchar c;
+  c = soap->ahead;
+  if (c)
+  { if (c != EOF)
+      soap->ahead = 0;
+    return c;
+  }
+  return soap_get1(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+const struct soap_code_map*
+SOAP_FMAC2
+soap_code(const struct soap_code_map *code_map, const char *str)
+{ if (code_map && str)
+  { while (code_map->string)
+    { if (!strcmp(str, code_map->string)) /* case sensitive */
+        return code_map;
+      code_map++;
+    }
+  }
+  return NULL;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+long
+SOAP_FMAC2
+soap_code_int(const struct soap_code_map *code_map, const char *str, long other)
+{ if (code_map)
+  { while (code_map->string)
+    { if (!soap_tag_cmp(str, code_map->string)) /* case insensitive */
+        return code_map->code;
+      code_map++;
+    }
+  }
+  return other;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_code_str(const struct soap_code_map *code_map, long code)
+{ if (!code_map)
+    return NULL;
+  while (code_map->code != code && code_map->string)
+    code_map++;
+  return code_map->string;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+long
+SOAP_FMAC2
+soap_code_bits(const struct soap_code_map *code_map, const char *str)
+{ register long bits = 0;
+  if (code_map)
+  { while (str && *str)
+    { const struct soap_code_map *p;
+      for (p = code_map; p->string; p++)
+      { register size_t n = strlen(p->string);
+        if (!strncmp(p->string, str, n) && soap_blank(str[n]))
+        { bits |= p->code;
+          str += n;
+          while (*str > 0 && *str <= 32)
+            str++;
+          break;
+        }
+      }
+      if (!p->string)
+        return 0;
+    }
+  }
+  return bits;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_code_list(struct soap *soap, const struct soap_code_map *code_map, long code)
+{ register char *t = soap->tmpbuf;
+  if (code_map)
+  { while (code_map->string)
+    { if (code_map->code & code)
+      { register const char *s = code_map->string;
+        if (t != soap->tmpbuf)
+          *t++ = ' ';
+        while (*s && t < soap->tmpbuf + sizeof(soap->tmpbuf) - 1)
+          *t++ = *s++;
+        if (t == soap->tmpbuf + sizeof(soap->tmpbuf) - 1)
+          break;
+      }
+      code_map++;
+    }
+  }
+  *t = '\0';
+  return soap->tmpbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static soap_wchar
+soap_char(struct soap *soap)
+{ char tmp[8];
+  register int i;
+  register soap_wchar c;
+  register char *s = tmp;
+  for (i = 0; i < 7; i++)
+  { c = soap_get1(soap);
+    if (c == ';' || (int)c == EOF)
+      break;
+    *s++ = (char)c;
+  }
+  *s = '\0';
+  if (*tmp == '#')
+  { if (tmp[1] == 'x' || tmp[1] == 'X')
+      return soap_strtol(tmp + 2, NULL, 16);
+    return atol(tmp + 1);
+  }
+  if (!strcmp(tmp, "lt"))
+    return '<';
+  if (!strcmp(tmp, "gt"))
+    return '>';
+  if (!strcmp(tmp, "amp"))
+    return '&';
+  if (!strcmp(tmp, "quot"))
+    return '"';
+  if (!strcmp(tmp, "apos"))
+    return '\'';
+#ifndef WITH_LEAN
+  return (soap_wchar)soap_code_int(html_entity_codes, tmp, SOAP_UNKNOWN_CHAR);
+#else
+  return SOAP_UNKNOWN_CHAR; /* use this to represent unknown code */
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifdef WITH_LEAN
+#ifndef PALM_1
+soap_wchar
+soap_get0(struct soap *soap)
+{ if (soap->bufidx >= soap->buflen && soap_recv(soap))
+    return EOF;
+  return (unsigned char)soap->buf[soap->bufidx];
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifdef WITH_LEAN
+#ifndef PALM_1
+soap_wchar
+soap_get1(struct soap *soap)
+{ if (soap->bufidx >= soap->buflen && soap_recv(soap))
+    return EOF;
+  return (unsigned char)soap->buf[soap->bufidx++];
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+soap_wchar
+SOAP_FMAC2
+soap_get(struct soap *soap)
+{ register soap_wchar c;
+  c = soap->ahead;
+  if (c)
+  { if ((int)c != EOF)
+      soap->ahead = 0;
+  }
+  else
+    c = soap_get1(soap);
+  while ((int)c != EOF)
+  { if (soap->cdata)
+    { if (c == ']')
+      { c = soap_get1(soap);
+        if (c == ']')
+        { c = soap_get0(soap);
+          if (c == '>')
+          { soap->cdata = 0;
+            soap_get1(soap);
+            c = soap_get1(soap);
+          }
+          else
+          { soap_unget(soap, ']');
+            return ']';
+          }
+        }
+        else
+        { soap_revget1(soap);
+          return ']';
+        }
+      }
+      else
+        return c;
+    }
+    switch (c)
+    { case '<':
+        do c = soap_get1(soap);
+        while (soap_blank(c));
+        if (c == '!' || c == '?' || c == '%')
+        { register int k = 1;
+          if (c == '!')
+          { c = soap_get1(soap);
+            if (c == '[')
+            { do c = soap_get1(soap);
+              while ((int)c != EOF && c != '[');
+              if ((int)c == EOF)
+                break;
+              soap->cdata = 1;
+              c = soap_get1(soap);
+              continue;
+            }
+            if (c == '-' && (c = soap_get1(soap)) == '-')
+            { do
+              { c = soap_get1(soap);
+                if (c == '-' && (c = soap_get1(soap)) == '-')
+                  break;
+              } while ((int)c != EOF);
+            }
+          }
+          else if (c == '?')
+            c = soap_get_pi(soap);
+          while ((int)c != EOF)
+          { if (c == '<')
+              k++;
+            else if (c == '>')
+            { if (--k <= 0)
+                break;
+            }
+            c = soap_get1(soap);
+          }
+          if ((int)c == EOF)
+            break;
+          c = soap_get1(soap);
+          continue;
+        }
+        if (c == '/')
+          return SOAP_TT;
+        soap_revget1(soap);
+        return SOAP_LT;
+      case '>':
+        return SOAP_GT;
+      case '"':
+        return SOAP_QT;
+      case '\'':
+        return SOAP_AP;
+      case '&':
+        return soap_char(soap) | 0x80000000;
+    }
+    break;
+  }
+  return c;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static soap_wchar
+soap_get_pi(struct soap *soap)
+{ char buf[64];
+  register char *s = buf;
+  register int i = sizeof(buf);
+  register soap_wchar c = soap_getchar(soap);
+  /* This is a quick way to parse XML PI and we could use a callback instead to
+   * enable applications to intercept processing instructions */
+  while ((int)c != EOF && c != '?')
+  { if (--i > 0)
+    { if (soap_blank(c))
+        c = ' ';
+      *s++ = (char)c;
+    }
+    c = soap_getchar(soap);
+  }
+  *s = '\0';
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "XML PI <?%s?>\n", buf));
+  if (!strncmp(buf, "xml ", 4))
+  { s = strstr(buf, " encoding=");
+    if (s && s[10])
+    { if (!soap_tag_cmp(s + 11, "iso-8859-1*")
+       || !soap_tag_cmp(s + 11, "latin1*"))
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Switching to latin1 encoding\n"));
+        soap->mode |= SOAP_ENC_LATIN;
+      }
+      else if (!soap_tag_cmp(s + 11, "utf-8*"))
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Switching to utf-8 encoding\n"));
+        soap->mode &= ~SOAP_ENC_LATIN;
+      }
+    }
+  }
+  if ((int)c != EOF)
+    c = soap_getchar(soap);
+  return c;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_move(struct soap *soap, long n)
+{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Moving %ld bytes forward\n", (long)n));
+  for (; n > 0; n--)
+    if ((int)soap_getchar(soap) == EOF)
+      return SOAP_EOF;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+size_t
+SOAP_FMAC2
+soap_tell(struct soap *soap)
+{ return soap->count - soap->buflen + soap->bufidx - (soap->ahead != 0);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_pututf8(struct soap *soap, register unsigned long c)
+{ char tmp[16];
+  if (c < 0x80 && c >= 0x20)
+  { *tmp = (char)c;
+    return soap_send_raw(soap, tmp, 1);
+  }
+#ifndef WITH_LEAN
+  if (c >= 0x80 && (soap->mode & SOAP_XML_CANONICAL))
+  { register char *t = tmp;
+    if (c < 0x0800)
+      *t++ = (char)(0xC0 | ((c >> 6) & 0x1F));
+    else
+    { if (c < 0x010000)
+        *t++ = (char)(0xE0 | ((c >> 12) & 0x0F));
+      else
+      { if (c < 0x200000)
+          *t++ = (char)(0xF0 | ((c >> 18) & 0x07));
+        else
+        { if (c < 0x04000000)
+            *t++ = (char)(0xF8 | ((c >> 24) & 0x03));
+          else
+          { *t++ = (char)(0xFC | ((c >> 30) & 0x01));
+            *t++ = (char)(0x80 | ((c >> 24) & 0x3F));
+          }
+          *t++ = (char)(0x80 | ((c >> 18) & 0x3F));
+        }     
+        *t++ = (char)(0x80 | ((c >> 12) & 0x3F));
+      }
+      *t++ = (char)(0x80 | ((c >> 6) & 0x3F));
+    }
+    *t++ = (char)(0x80 | (c & 0x3F));
+    *t = '\0';
+  }
+  else
+#endif
+    sprintf(tmp, "&#%lu;", c);
+  return soap_send(soap, tmp);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+soap_wchar
+SOAP_FMAC2
+soap_getutf8(struct soap *soap)
+{ register soap_wchar c, c1, c2, c3, c4;
+  c = soap->ahead;
+  if (c > 0xFF)
+  { soap->ahead = 0;
+    return c;
+  }
+again:
+  c = soap_get(soap);
+  if (c < 0x80 || (soap->mode & SOAP_ENC_LATIN))
+    return c;
+  c1 = soap_get1(soap);
+  if (c1 < 0x80)
+  { soap_revget1(soap); /* doesn't look like this is UTF8 */
+    return c;
+  }
+  c1 &= 0x3F;
+  if (c < 0xE0)
+    return ((soap_wchar)(c & 0x1F) << 6) | c1;
+  c2 = (soap_wchar)soap_get1(soap) & 0x3F;
+  if (c == 0xEF && c1 == 0x3B && c2 == 0x3F)   /* ignore UTF-8 BOM */
+    goto again;
+  if (c < 0xF0)
+    return ((soap_wchar)(c & 0x0F) << 12) | (c1 << 6) | c2;
+  c3 = (soap_wchar)soap_get1(soap) & 0x3F;
+  if (c < 0xF8)
+    return ((soap_wchar)(c & 0x07) << 18) | (c1 << 12) | (c2 << 6) | c3;
+  c4 = (soap_wchar)soap_get1(soap) & 0x3F;
+  if (c < 0xFC)
+    return ((soap_wchar)(c & 0x03) << 24) | (c1 << 18) | (c2 << 12) | (c3 << 6) | c4;
+  return ((soap_wchar)(c & 0x01) << 30) | (c1 << 24) | (c2 << 18) | (c3 << 12) | (c4 << 6) | (soap_wchar)(soap_get1(soap) & 0x3F);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_puthex(struct soap *soap, const unsigned char *s, int n)
+{ char d[2];
+  register int i;
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { if (!(soap->dom->data = soap_s2hex(soap, s, NULL, n)))
+      return soap->error;
+    return SOAP_OK;
+  }
+#endif
+  for (i = 0; i < n; i++)
+  { register int m = *s++;
+    d[0] = (char)((m >> 4) + (m > 159 ? '7' : '0'));
+    m &= 0x0F;
+    d[1] = (char)(m + (m > 9 ? '7' : '0'));
+    if (soap_send_raw(soap, d, 2))
+      return soap->error;
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+unsigned char*
+SOAP_FMAC2
+soap_gethex(struct soap *soap, int *n)
+{
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { soap->dom->data = soap_string_in(soap, 0, -1, -1);
+    return (unsigned char*)soap_hex2s(soap, soap->dom->data, NULL, 0, n);
+  }
+#endif
+#ifdef WITH_FAST
+  soap->labidx = 0;
+  for (;;)
+  { register char *s;
+    register int i, k;
+    if (soap_append_lab(soap, NULL, 0))
+      return NULL;
+    s = soap->labbuf + soap->labidx;
+    k = soap->lablen - soap->labidx;
+    soap->labidx = soap->lablen;
+    for (i = 0; i < k; i++)
+    { register char d1, d2;
+      register soap_wchar c;
+      c = soap_get(soap);
+      if (soap_isxdigit(c))
+      { d1 = (char)c;
+        c = soap_get(soap); 
+        if (soap_isxdigit(c))
+          d2 = (char)c;
+        else 
+        { soap->error = SOAP_TYPE;
+          return NULL;
+        }
+      }
+      else
+      { unsigned char *p;
+        soap_unget(soap, c);
+        if (n)
+          *n = (int)(soap->lablen - k + i);
+        p = (unsigned char*)soap_malloc(soap, soap->lablen - k + i);
+        if (p)
+          memcpy(p, soap->labbuf, soap->lablen - k + i);
+        return p;
+      }
+      *s++ = ((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0');
+    }
+  }
+#else
+  if (soap_new_block(soap))
+    return NULL;
+  for (;;)
+  { register int i;
+    register char *s = (char*)soap_push_block(soap, SOAP_BLKLEN);
+    if (!s)
+    { soap_end_block(soap);
+      return NULL;
+    }
+    for (i = 0; i < SOAP_BLKLEN; i++)
+    { register char d1, d2;
+      register soap_wchar c = soap_get(soap);
+      if (soap_isxdigit(c))
+      { d1 = (char)c;
+        c = soap_get(soap); 
+        if (soap_isxdigit(c))
+          d2 = (char)c;
+        else 
+        { soap_end_block(soap);
+          soap->error = SOAP_TYPE;
+          return NULL;
+        }
+      }
+      else
+      { unsigned char *p;
+        soap_unget(soap, c);
+        if (n)
+          *n = soap_size_block(soap, i);
+        p = (unsigned char*)soap_save_block(soap, NULL, 0);
+        return p;
+      }
+      *s++ = ((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0');
+    }
+  }
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putbase64(struct soap *soap, const unsigned char *s, int n)
+{ register int i;
+  register unsigned long m;
+  char d[4];
+  if (!s)
+    return SOAP_OK;
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { if (!(soap->dom->data = soap_s2base64(soap, s, NULL, n)))
+      return soap->error;
+    return SOAP_OK;
+  }
+#endif
+  for (; n > 2; n -= 3, s += 3)
+  { m = s[0];
+    m = (m << 8) | s[1];
+    m = (m << 8) | s[2];
+    for (i = 4; i > 0; m >>= 6)
+      d[--i] = soap_base64o[m & 0x3F];
+    if (soap_send_raw(soap, d, 4))
+      return soap->error;
+  }
+  if (n > 0)
+  { m = 0;
+    for (i = 0; i < n; i++)
+      m = (m << 8) | *s++;
+    for (; i < 3; i++)
+      m <<= 8;
+    for (i++; i > 0; m >>= 6)
+      d[--i] = soap_base64o[m & 0x3F];
+    for (i = 3; i > n; i--)
+      d[i] = '=';
+    if (soap_send_raw(soap, d, 4))
+      return soap->error;
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+unsigned char*
+SOAP_FMAC2
+soap_getbase64(struct soap *soap, int *n, int malloc_flag)
+{ 
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { soap->dom->data = soap_string_in(soap, 0, -1, -1);
+    return (unsigned char*)soap_base642s(soap, soap->dom->data, NULL, 0, n);
+  }
+#endif
+#ifdef WITH_FAST
+  soap->labidx = 0;
+  for (;;)
+  { register int i, k;
+    register char *s;
+    if (soap_append_lab(soap, NULL, 2))
+      return NULL;
+    s = soap->labbuf + soap->labidx;
+    k = soap->lablen - soap->labidx;
+    soap->labidx = 3 * (soap->lablen / 3);
+    if (!s)
+      return NULL;
+    for (i = 0; i < k - 2; i += 3)
+    { register unsigned long m = 0;
+      register int j = 0;
+      do
+      { register soap_wchar c = soap_get(soap);
+        if (c == '=' || c < 0)
+        { unsigned char *p;
+          switch (j)
+          { case 2:
+              *s++ = (char)((m >> 4) & 0xFF);
+              i++;
+              break;
+            case 3:
+              *s++ = (char)((m >> 10) & 0xFF);
+              *s++ = (char)((m >> 2) & 0xFF);
+              i += 2;
+          }
+          if (n)
+            *n = (int)(soap->lablen - k + i);
+          p = (unsigned char*)soap_malloc(soap, soap->lablen - k + i);
+          if (p)
+            memcpy(p, soap->labbuf, soap->lablen - k + i);
+          if (c >= 0)
+          { while ((int)((c = soap_get(soap)) != EOF) && c != SOAP_LT && c != SOAP_TT)
+              ;
+          }
+          soap_unget(soap, c);
+          return p;
+        }
+        c -= '+';
+        if (c >= 0 && c <= 79)
+        { int b = soap_base64i[c];
+         if (b >= 64)
+         { soap->error = SOAP_TYPE;
+           return NULL;  
+          }
+          m = (m << 6) + b;
+          j++;
+        }
+       else if (!soap_blank(c))
+       { soap->error = SOAP_TYPE;
+         return NULL;  
+        }
+      } while (j < 4);
+      *s++ = (char)((m >> 16) & 0xFF);
+      *s++ = (char)((m >> 8) & 0xFF);
+      *s++ = (char)(m & 0xFF);
+    }
+  }
+#else
+  if (soap_new_block(soap))
+    return NULL;
+  for (;;)
+  { register int i;
+    register char *s = (char*)soap_push_block(soap, 3 * SOAP_BLKLEN); /* must be multiple of 3 */
+    if (!s)
+    { soap_end_block(soap);
+      return NULL;
+    }
+    for (i = 0; i < SOAP_BLKLEN; i++)
+    { register unsigned long m = 0;
+      register int j = 0;
+      do
+      { register soap_wchar c = soap_get(soap);
+        if (c == '=' || c < 0)
+        { unsigned char *p;
+          i *= 3;
+          switch (j)
+          { case 2:
+              *s++ = (char)((m >> 4) & 0xFF);
+              i++;
+              break;
+            case 3:
+              *s++ = (char)((m >> 10) & 0xFF);
+              *s++ = (char)((m >> 2) & 0xFF);
+              i += 2;
+          }
+          if (n)
+            *n = (int)soap_size_block(soap, i);
+          p = (unsigned char*)soap_save_block(soap, NULL, 0);
+          if (c >= 0)
+          { while ((int)((c = soap_get(soap)) != EOF) && c != SOAP_LT && c != SOAP_TT)
+              ;
+          }
+          soap_unget(soap, c);
+          return p;
+        }
+        c -= '+';
+        if (c >= 0 && c <= 79)
+        { int b = soap_base64i[c];
+         if (b >= 64)
+         { soap->error = SOAP_TYPE;
+           return NULL;  
+          }
+          m = (m << 6) + b;
+          j++;
+        }
+       else if (!soap_blank(c))
+       { soap->error = SOAP_TYPE;
+         return NULL;  
+        }
+      } while (j < 4);
+      *s++ = (char)((m >> 16) & 0xFF);
+      *s++ = (char)((m >> 8) & 0xFF);
+      *s++ = (char)(m & 0xFF);
+    }
+  }
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_xop_forward(struct soap *soap, unsigned char **ptr, int *size, char **id, char **type, char **options)
+{ /* Check MTOM xop:Include element (within hex/base64Binary) */
+  /* TODO: this code to be obsoleted with new import/xop.h conventions */
+  int body = soap->body; /* should save type too? */
+  if (!soap_peek_element(soap))
+  { if (!soap_element_begin_in(soap, "xop:Include", 0, NULL) && *soap->href)
+    { if (soap_dime_forward(soap, ptr, size, id, type, options))
+        return soap->error;
+    }
+    if (soap->body && soap_element_end_in(soap, NULL))
+      return soap->error;
+  }
+  soap->body = body;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_dime_forward(struct soap *soap, unsigned char **ptr, int *size, char **id, char **type, char **options)
+{ struct soap_xlist *xp = (struct soap_xlist*)SOAP_MALLOC(soap, sizeof(struct soap_xlist));
+  *ptr = NULL;
+  *size = 0;
+  *id = soap_strdup(soap, soap->href);
+  *type = NULL;
+  *options = NULL;
+  if (!xp)
+    return soap->error = SOAP_EOM;
+  xp->next = soap->xlist;
+  xp->ptr = ptr;
+  xp->size = size;
+  xp->id = *id;
+  xp->type = type;
+  xp->options = options;
+  soap->xlist = xp;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_strdup(struct soap *soap, const char *s)
+{ char *t = NULL;
+  if (s && (t = (char*)soap_malloc(soap, strlen(s) + 1)))
+    strcpy(t, s);
+  return t;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_new_block(struct soap *soap)
+{ struct soap_blist *p;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New block sequence (prev=%p)\n", soap->blist));
+  if (!(p = (struct soap_blist*)SOAP_MALLOC(soap, sizeof(struct soap_blist))))
+    return SOAP_EOM;   
+  p->next = soap->blist; 
+  p->ptr = NULL;
+  p->size = 0;
+  soap->blist = p;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void*
+SOAP_FMAC2
+soap_push_block(struct soap *soap, size_t n)
+{ char *p;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push block of %u bytes (%u bytes total)\n", (unsigned int)n, (unsigned int)soap->blist->size + (unsigned int)n));
+  if (!(p = (char*)SOAP_MALLOC(soap, n + sizeof(char*) + sizeof(size_t))))
+  { soap->error = SOAP_EOM;
+    return NULL;
+  }
+  *(char**)p = soap->blist->ptr;
+  *(size_t*)(p + sizeof(char*)) = n;
+  soap->blist->ptr = p;
+  soap->blist->size += n;
+  return p + sizeof(char*) + sizeof(size_t);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_pop_block(struct soap *soap)
+{ char *p;
+  if (!soap->blist->ptr)
+    return;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Pop block\n"));
+  p = soap->blist->ptr;
+  soap->blist->size -= *(size_t*)(p + sizeof(char*));
+  soap->blist->ptr = *(char**)p;
+  SOAP_FREE(soap, p);
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+static void
+soap_update_ptrs(struct soap *soap, char *start, char *end, char *p1, char *p2)
+{ int i;
+  register struct soap_ilist *ip;
+  register struct soap_flist *fp;
+#ifndef WITH_LEANER
+  register struct soap_xlist *xp;
+#endif
+  register void *p, **q;
+  for (i = 0; i < SOAP_IDHASH; i++)
+  { for (ip = soap->iht[i]; ip; ip = ip->next)
+    { if (ip->ptr && (char*)ip->ptr >= start && (char*)ip->ptr < end)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Update id='%s' %p -> %p\n", ip->id, ip->ptr, (char*)ip->ptr + (p1-p2)));
+        ip->ptr = (char*)ip->ptr + (p1-p2);
+      }
+      for (q = &ip->link; q; q = (void**)p)
+      { p = *q;
+        if (p && (char*)p >= start && (char*)p < end)
+        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Link update id='%s' %p\n", ip->id, p));
+          *q = (char*)p + (p1-p2);
+        }
+      }
+      for (q = &ip->copy; q; q = (void**)p)
+      { p = *q;
+        if (p && (char*)p >= start && (char*)p < end)
+        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy chain update id='%s' %p\n", ip->id, p));
+          *q = (char*)p + (p1-p2);
+        }
+      }
+      for (fp = ip->flist; fp; fp = fp->next)
+      { if ((char*)fp->ptr >= start && (char*)fp->ptr < end)
+        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy list update id='%s' %p\n", ip->id, fp));
+          fp->ptr = (char*)fp->ptr + (p1-p2);
+        }
+      }
+    }
+  }
+#ifndef WITH_LEANER
+  for (xp = soap->xlist; xp; xp = xp->next)
+  { if (xp->ptr && (char*)xp->ptr >= start && (char*)xp->ptr < end)
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Update id='%s' %p -> %p\n", xp->id?xp->id:"", xp->ptr, (char*)xp->ptr + (p1-p2)));
+      xp->ptr = (unsigned char**)((char*)xp->ptr + (p1-p2));
+      xp->size = (int*)((char*)xp->size + (p1-p2));
+      xp->type = (char**)((char*)xp->type + (p1-p2));
+      xp->options = (char**)((char*)xp->options + (p1-p2));
+    }
+  }
+#endif
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+static int
+soap_has_copies(struct soap *soap, register const char *start, register const char *end)
+{ register int i;
+  register struct soap_ilist *ip;
+  register struct soap_flist *fp;
+  register const char *p;
+  for (i = 0; i < SOAP_IDHASH; i++)
+  { for (ip = soap->iht[i]; ip; ip = ip->next)
+    { for (p = (const char*)ip->copy; p; p = *(const char**)p)
+        if (p >= start && p < end)
+          return SOAP_ERR;
+      for (fp = ip->flist; fp; fp = fp->next)
+        if ((const char*)fp->ptr >= start && (const char*)fp->ptr < end)
+          return SOAP_ERR;
+    }
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_resolve(struct soap *soap)
+{ register int i;
+  register struct soap_ilist *ip;
+  register struct soap_flist *fp;
+  short flag;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving forwarded data\n"));
+  for (i = 0; i < SOAP_IDHASH; i++)
+  { for (ip = soap->iht[i]; ip; ip = ip->next)
+    { if (ip->ptr)
+      { register void *p, **q, *r;
+        q = (void**)ip->link;
+        ip->link = NULL;
+        r = ip->ptr;
+        DBGLOG(TEST, if (q) SOAP_MESSAGE(fdebug, "Traversing link chain to resolve id='%s'\n", ip->id));
+        while (q)
+        { p = *q;
+          *q = r;
+          DBGLOG(TEST,SOAP_MESSAGE(fdebug, "... link %p -> %p\n", q, r));
+          q = (void**)p;
+        }
+      }
+      else if (*ip->id == '#')
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Missing data for id='%s'\n", ip->id));
+        strcpy(soap->id, ip->id + 1);
+        return soap->error = SOAP_MISSING_ID;
+      }
+    }
+  }
+  do
+  { flag = 0;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolution phase\n"));
+    for (i = 0; i < SOAP_IDHASH; i++)
+    { for (ip = soap->iht[i]; ip; ip = ip->next)
+      { if (ip->ptr && !soap_has_copies(soap, (const char*)ip->ptr, (const char*)ip->ptr + ip->size))
+        { if (ip->copy)
+          { register void *p, **q = (void**)ip->copy;
+            DBGLOG(TEST, if (q) SOAP_MESSAGE(fdebug, "Traversing copy chain to resolve id='%s'\n", ip->id));
+            ip->copy = NULL;
+            do
+            { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... copy %p -> %p (%u bytes)\n", ip->ptr, q, (unsigned int)ip->size));
+              p = *q;
+              memcpy(q, ip->ptr, ip->size);
+              q = (void**)p;
+            } while (q);
+            flag = 1;
+          }
+          for (fp = ip->flist; fp; fp = ip->flist)
+          { register unsigned int k = fp->level;
+            register void *p = ip->ptr;
+            DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving forwarded data type=%d location=%p level=%u,%u id='%s'\n", ip->type, p, ip->level, fp->level, ip->id));
+            while (ip->level < k)
+            { register void **q = (void**)soap_malloc(soap, sizeof(void*));  
+              if (!q)
+                return soap->error;
+              *q = p;
+              DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Descending one level, new location=%p holds=%p...\n", q, *q));
+              p = (void*)q;
+              k--;
+            }
+            if (fp->fcopy)
+              fp->fcopy(soap, ip->type, fp->type, fp->ptr, fp->len, p, ip->size);
+            else
+              soap_fcopy(soap, ip->type, fp->type, fp->ptr, fp->len, p, ip->size);
+            ip->flist = fp->next;
+            SOAP_FREE(soap, fp);
+            flag = 1;
+          }
+        }
+      }
+    }
+  } while (flag);
+#ifdef SOAP_DEBUG
+  for (i = 0; i < SOAP_IDHASH; i++)
+  { for (ip = soap->iht[i]; ip; ip = ip->next)
+    { if (ip->copy || ip->flist)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolution error: forwarded data for id='%s' could not be propagated, please report this problem to the developers\n", ip->id));
+      }
+    }
+  }
+#endif
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolution done\n"));
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+size_t
+SOAP_FMAC2
+soap_size_block(struct soap *soap, size_t n)
+{ if (soap->blist->ptr)
+  { soap->blist->size -= *(size_t*)(soap->blist->ptr + sizeof(char*)) - n;
+    *(size_t*)(soap->blist->ptr + sizeof(char*)) = n;
+  }
+  return soap->blist->size;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+char*
+SOAP_FMAC2
+soap_first_block(struct soap *soap)
+{ char *p, *q, *r;
+  p = soap->blist->ptr;
+  if (!p)
+    return NULL;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "First block\n"));
+  r = NULL;
+  do
+  { q = *(char**)p;
+    *(char**)p = r;
+    r = p;
+    p = q;
+  } while (p);
+  soap->blist->ptr = r;
+  return r + sizeof(char*) + sizeof(size_t);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+char*
+SOAP_FMAC2
+soap_next_block(struct soap *soap)
+{ char *p;
+  p = soap->blist->ptr;
+  if (p)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Next block\n"));
+    soap->blist->ptr = *(char**)p;
+    SOAP_FREE(soap, p);
+    if (soap->blist->ptr)
+      return soap->blist->ptr + sizeof(char*) + sizeof(size_t);
+  }
+  return NULL;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+size_t
+SOAP_FMAC2
+soap_block_size(struct soap *soap)
+{ return *(size_t*)(soap->blist->ptr + sizeof(char*));
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_end_block(struct soap *soap)
+{ struct soap_blist *bp;
+  char *p, *q;
+  bp = soap->blist;
+  if (bp)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of block sequence, free all remaining blocks\n"));
+    for (p = bp->ptr; p; p = q)
+    { q = *(char**)p;
+      SOAP_FREE(soap, p);
+    }
+    soap->blist = bp->next;
+    SOAP_FREE(soap, bp);
+  }
+  DBGLOG(TEST, if (soap->blist) SOAP_MESSAGE(fdebug, "Restore previous block sequence\n"));
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+char*
+SOAP_FMAC2
+soap_save_block(struct soap *soap, char *p, int flag)
+{ register size_t n;
+  register char *q, *s;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Save all blocks in contiguous memory space of %u bytes (%p->%p)\n", (unsigned int)soap->blist->size, soap->blist->ptr, p));
+  if (soap->blist->size)
+  { if (!p)
+      p = (char*)soap_malloc(soap, soap->blist->size);
+    if (p)
+    { for (s = p, q = soap_first_block(soap); q; q = soap_next_block(soap))
+      { n = soap_block_size(soap);
+#ifndef WITH_NOIDREF
+        if (flag)
+          soap_update_ptrs(soap, q, q + n, s, q);
+#endif
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy %u bytes from %p to %p\n", (unsigned int)n, q, s));
+        memcpy(s, q, n);
+        s += n;
+      }
+    }
+    else
+      soap->error = SOAP_EOM;
+  }
+  soap_end_block(soap);
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_putsize(struct soap *soap, const char *type, int size)
+{ return soap_putsizes(soap, type, &size, 1);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_putsizes(struct soap *soap, const char *type, const int *size, int dim)
+{ return soap_putsizesoffsets(soap, type, size, NULL, dim);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_putsizesoffsets(struct soap *soap, const char *type, const int *size, const int *offset, int dim)
+{ int i;
+  if (!type)
+    return NULL;
+  if (soap->version == 2)
+  { sprintf(soap->type, "%s[%d", type, size[0]);
+    for (i = 1; i < dim; i++)
+      sprintf(soap->type + strlen(soap->type), " %d", size[i]);
+  }
+  else
+  { if (offset)
+    { sprintf(soap->type, "%s[%d", type, size[0] + offset[0]);
+      for (i = 1; i < dim; i++)
+        sprintf(soap->type + strlen(soap->type), ",%d", size[i] + offset[i]);
+    }
+    else
+    { sprintf(soap->type, "%s[%d", type, size[0]);
+      for (i = 1; i < dim; i++)
+        sprintf(soap->type + strlen(soap->type), ",%d", size[i]);
+    }
+    strcat(soap->type, "]");
+  }
+  return soap->type;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_putoffset(struct soap *soap, int offset)
+{ return soap_putoffsets(soap, &offset, 1);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_putoffsets(struct soap *soap, const int *offset, int dim)
+{ register int i;
+  sprintf(soap->arrayOffset, "[%d", offset[0]);
+  for (i = 1; i < dim; i++)
+    sprintf(soap->arrayOffset + strlen(soap->arrayOffset), ",%d", offset[i]);
+  strcat(soap->arrayOffset, "]");
+  return soap->arrayOffset;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_size(const int *size, int dim)
+{ register int i, n = size[0];
+  for (i = 1; i < dim; i++)
+    n *= size[i];
+  return n;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getoffsets(const char *attr, const int *size, int *offset, int dim)
+{ register int i, j = 0;
+  if (offset)
+    for (i = 0; i < dim && attr && *attr; i++)
+    { attr++;
+      j *= size[i];
+      j += offset[i] = (int)atol(attr);
+      attr = strchr(attr, ',');
+    }
+  else
+    for (i = 0; i < dim && attr && *attr; i++)
+    { attr++;
+      j *= size[i];
+      j += (int)atol(attr);
+      attr = strchr(attr, ',');
+    }
+  return j;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getsize(const char *attr1, const char *attr2, int *j)
+{ register int n, k;
+  char *s;
+  *j = 0;
+  if (!*attr1)
+    return -1;
+  if (*attr1 == '[')
+    attr1++;
+  n = 1;
+  for (;;)
+  { k = (int)soap_strtol(attr1, &s, 10);
+    n *= k;
+    if (k < 0 || n > SOAP_MAXARRAYSIZE || s == attr1)
+      return -1;
+    attr1 = strchr(s, ',');
+    if (!attr1)
+      attr1 = strchr(s, ' ');
+    if (attr2 && *attr2)
+    { attr2++;
+      *j *= k;
+      k = (int)soap_strtol(attr2, &s, 10);
+      *j += k;
+      if (k < 0)
+        return -1;
+      attr2 = s;
+    }
+    if (!attr1)
+      break;
+    attr1++;
+  }
+  return n - *j;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getsizes(const char *attr, int *size, int dim)
+{ register int i, k, n;
+  if (!*attr)
+    return -1;
+  i = strlen(attr);
+  n = 1;
+  do
+  { for (i = i-1; i >= 0; i--)
+      if (attr[i] == '[' || attr[i] == ',' || attr[i] == ' ')
+        break;
+    k = (int)atol(attr + i + 1);
+    n *= size[--dim] = k;
+    if (k < 0 || n > SOAP_MAXARRAYSIZE)
+      return -1;
+  } while (i >= 0 && attr[i] != '[');
+  return n;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getposition(const char *attr, int *pos)
+{ register int i, n;
+  if (!*attr)
+    return -1;
+  n = 0;
+  i = 1;
+  do
+  { pos[n++] = (int)atol(attr + i);
+    while (attr[i] && attr[i] != ',' && attr[i] != ']')
+      i++;
+    if (attr[i] == ',')
+      i++;
+  } while (n < SOAP_MAXDIMS && attr[i] && attr[i] != ']');
+  return n;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_push_namespace(struct soap *soap, const char *id, const char *ns)
+{ register struct soap_nlist *np;
+  register struct Namespace *p;
+  register short i = -1;
+  register size_t n, k;
+  n = strlen(id);
+  k = strlen(ns) + 1;
+  p = soap->local_namespaces;
+  if (p)
+  { for (i = 0; p->id; p++, i++)
+    { if (p->ns && !strcmp(ns, p->ns))
+      { if (p->out)
+        { SOAP_FREE(soap, p->out);
+          p->out = NULL;
+        }
+        break;
+      }
+      if (p->out)
+      { if (!strcmp(ns, p->out))
+          break;
+      }
+      else if (p->in)
+      { if (!soap_tag_cmp(ns, p->in))
+        { if ((p->out = (char*)SOAP_MALLOC(soap, k)))
+            strcpy(p->out, ns);
+          break;
+        }
+      }
+    }
+    if (!p || !p->id)
+      i = -1;
+  }
+  if (i >= 0)
+    k = 0;
+  np = (struct soap_nlist*)SOAP_MALLOC(soap, sizeof(struct soap_nlist) + n + k);
+  if (!np)
+    return soap->error = SOAP_EOM;
+  np->next = soap->nlist;
+  soap->nlist = np;
+  np->level = soap->level;
+  np->index = i;
+  strcpy(np->id, id);
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push namespace binding (level=%u) '%s' '%s'\n", soap->level, id, ns));
+  if (i < 0)
+  { np->ns = np->id + n + 1;
+    strcpy(np->ns, ns);
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push NOT OK: no match found for '%s' in namespace mapping table (added to stack anyway)\n", ns));
+  }
+  else
+  { np->ns = NULL;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push OK ('%s' matches '%s' in namespace table)\n", id, p->id));
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_pop_namespace(struct soap *soap)
+{ register struct soap_nlist *np;
+  while (soap->nlist && soap->nlist->level >= soap->level)
+  { np = soap->nlist->next;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Popped namespace binding (level=%u) '%s'\n", soap->level, soap->nlist->id));
+    SOAP_FREE(soap, soap->nlist);
+    soap->nlist = np;
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_match_namespace(struct soap *soap, const char *id1, const char *id2, int n1, int n2) 
+{ register struct soap_nlist *np = soap->nlist;
+  while (np && (strncmp(np->id, id1, n1) || np->id[n1]))
+    np = np->next;
+  if (np)
+  { if (np->index < 0
+     || (soap->local_namespaces[np->index].id
+      && (strncmp(soap->local_namespaces[np->index].id, id2, n2)
+       || soap->local_namespaces[np->index].id[n2])))
+      return SOAP_NAMESPACE;
+    return SOAP_OK;
+  }
+  if (n1 == 3 && n1 == n2 && !strcmp(id1, "xml") && !strcmp(id1, id2))
+    return SOAP_OK;
+  return SOAP_SYNTAX_ERROR; 
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_current_namespace(struct soap *soap, const char *tag)
+{ register struct soap_nlist *np;
+  register const char *s;
+  np = soap->nlist;
+  if (!(s = strchr(tag, ':')))
+  { while (np && *np->id) /* find default namespace, if present */
+      np = np->next;
+  }
+  else
+  { while (np && (strncmp(np->id, tag, s - tag) || np->id[s - tag]))
+      np = np->next;
+    if (!np)
+      soap->error = SOAP_NAMESPACE;
+  }
+  if (np)
+  { if (np->index >= 0)
+      return soap->namespaces[np->index].ns;
+    if (np->ns)
+      return soap_strdup(soap, np->ns);
+  }
+  return NULL;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_tag_cmp(const char *s, const char *t)
+{ for (;;)
+  { register int c1 = *s;
+    register int c2 = *t;
+    if (!c1 || c1 == '"')
+      break;
+    if (c2 != '-')
+    { if (c1 != c2)
+      { if (c1 >= 'A' && c1 <= 'Z')
+          c1 += 'a' - 'A';
+        if (c2 >= 'A' && c2 <= 'Z')
+          c2 += 'a' - 'A';
+      }
+      if (c1 != c2)
+      { if (c2 != '*')
+          return 1;
+        c2 = *++t;
+        if (!c2)
+          return 0;
+        if (c2 >= 'A' && c2 <= 'Z')
+          c2 += 'a' - 'A';
+        for (;;)
+        { c1 = *s;
+          if (!c1 || c1 == '"')
+            break;
+          if (c1 >= 'A' && c1 <= 'Z')
+            c1 += 'a' - 'A';
+          if (c1 == c2 && !soap_tag_cmp(s + 1, t + 1))
+            return 0;
+          s++;
+        }
+        break;
+      }
+    }
+    s++;
+    t++;
+  }
+  if (*t == '*' && !t[1])
+    return 0;
+  return *t;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_match_tag(struct soap *soap, const char *tag1, const char *tag2)
+{ register const char *s, *t;
+  if (!tag1 || !tag2 || !*tag2)
+    return SOAP_OK;
+  s = strchr(tag1, ':');
+  t = strchr(tag2, ':');
+  if (t)
+  { if (s)
+    { if (t[1] && SOAP_STRCMP(s + 1, t + 1))
+        return SOAP_TAG_MISMATCH;
+      if (t != tag2 && soap_match_namespace(soap, tag1, tag2, s - tag1, t - tag2))
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags '%s' and '%s' match but namespaces differ\n", tag1, tag2));
+        return SOAP_TAG_MISMATCH;
+      }
+    } 
+    else if (SOAP_STRCMP(tag1, t + 1))
+      return SOAP_TAG_MISMATCH;
+    else if (t != tag2 && soap_match_namespace(soap, tag1, tag2, 0, t - tag2))
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags '%s' and '%s' match but namespaces differ\n", tag1, tag2));
+      return SOAP_TAG_MISMATCH;
+    }
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags and (default) namespaces match: '%s' '%s'\n", tag1, tag2));
+    return SOAP_OK;
+  }
+  if (s)
+  { if (SOAP_STRCMP(s + 1, tag2))
+      return SOAP_TAG_MISMATCH;
+  }
+  else if (SOAP_STRCMP(tag1, tag2))
+    return SOAP_TAG_MISMATCH;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags match: '%s' '%s'\n", tag1, tag2));
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_match_array(struct soap *soap, const char *type)
+{ if (*soap->arrayType)
+    if (soap_match_tag(soap, soap->arrayType, type)
+     && soap_match_tag(soap, soap->arrayType, "xsd:anyType")
+     && soap_match_tag(soap, soap->arrayType, "xsd:ur-type")
+    )
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array type mismatch: '%s' '%s'\n", soap->arrayType, type));
+      return SOAP_TAG_MISMATCH;
+    }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************\
+ *
+ *     SSL
+ *
+\******************************************************************************/
+
+#ifdef WITH_OPENSSL
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_rand()
+{ unsigned char buf[4];
+  if (!ssl_init_done)
+    soap_ssl_init();
+  RAND_pseudo_bytes(buf, 4);
+  return *(int*)buf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_ssl_server_context(struct soap *soap, unsigned short flags, const char *keyfile, const char *password, const char *cafile, const char *capath, const char *dhfile, const char *randfile, const char *sid)
+{ int err;
+  soap->keyfile = keyfile;
+  soap->password = password;
+  soap->cafile = cafile;
+  soap->capath = capath;
+  soap->dhfile = dhfile;
+  soap->randfile = randfile;
+  soap->ssl_flags = flags | (dhfile == NULL ? SOAP_SSL_RSA : 0);
+  if (!(err = soap->fsslauth(soap)))
+  { if (sid)
+      SSL_CTX_set_session_id_context(soap->ctx, (unsigned char*)sid, strlen(sid));
+  }
+  return err; 
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_ssl_client_context(struct soap *soap, unsigned short flags, const char *keyfile, const char *password, const char *cafile, const char *capath, const char *randfile)
+{ soap->keyfile = keyfile;
+  soap->password = password;
+  soap->cafile = cafile;
+  soap->capath = capath;
+  soap->dhfile = NULL;
+  soap->ssl_flags = flags;
+  soap->randfile = randfile;
+  return soap->fsslauth(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_ssl_init()
+{ /* Note: for MT systems, the main program MUST call soap_ssl_init() before any threads are started */
+  if (!ssl_init_done)
+  { ssl_init_done = 1;
+    SSL_library_init();
+#ifndef WITH_LEAN
+    SSL_load_error_strings();
+#endif
+    if (!RAND_load_file("/dev/urandom", 1024))
+    { char buf[1024];
+      RAND_seed(buf, sizeof(buf));
+      while (!RAND_status())
+      { int r = rand();
+        RAND_seed(&r, sizeof(int));
+      }
+    }
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+const char *
+SOAP_FMAC2
+soap_ssl_error(struct soap *soap, int ret)
+{ int err = SSL_get_error(soap->ssl, ret);
+  const char *msg = soap_code_str(h_ssl_error_codes, err);
+  if (msg)
+    strcpy(soap->msgbuf, msg);
+  else
+    return ERR_error_string(err, soap->msgbuf);
+  if (ERR_peek_error())
+  { unsigned long r;
+    strcat(soap->msgbuf, "\n");
+    while ((r = ERR_get_error()))
+      ERR_error_string_n(r, soap->msgbuf + strlen(soap->msgbuf), sizeof(soap->msgbuf) - strlen(soap->msgbuf));
+  } 
+  else
+  { switch (ret)
+    { case 0:
+        strcpy(soap->msgbuf, "EOF was observed that violates the protocol. The client probably provided invalid authentication information.");
+        break;
+      case -1:
+        sprintf(soap->msgbuf, "Error observed by underlying BIO: %s", strerror(errno));  
+        break;
+    }
+  }
+  return soap->msgbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static int
+ssl_password(char *buf, int num, int rwflag, void *userdata)
+{ if (num < (int)strlen((char*)userdata) + 1)
+    return 0;
+  return strlen(strcpy(buf, (char*)userdata));
+}
+#endif
+
+/******************************************************************************/
+/* This callback is included for future references. It should not be deleted
+#ifndef PALM_2
+static DH *
+ssl_tmp_dh(SSL *ssl, int is_export, int keylength)
+{ static DH *dh512 = NULL;
+  static DH *dh1024 = NULL;
+  DH *dh;
+  switch (keylength)
+  { case 512:
+      if (!dh512)
+      { BIO *bio = BIO_new_file("dh512.pem", "r");
+        if (bio)
+        { dh512 = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);
+          BIO_free(bio);
+          return dh512;
+        }
+      }
+      else
+        return dh512;
+    default:
+      if (!dh1024)
+      { BIO *bio = BIO_new_file("dh1024.pem", "r");
+        if (bio)
+        { dh1024 = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);
+          BIO_free(bio);
+        }
+      }
+      dh = dh1024;
+  }
+  return dh;
+}
+#endif
+*/
+
+/******************************************************************************/
+#ifndef PALM_1
+static int
+ssl_auth_init(struct soap *soap)
+{ long flags;
+  int mode;
+  if (!ssl_init_done)
+    soap_ssl_init();
+  if (!soap->ctx)
+  { if (!(soap->ctx = SSL_CTX_new(SSLv23_method())))
+      return soap_set_receiver_error(soap, "SSL error", "Can't setup context", SOAP_SSL_ERROR);
+  }
+  if (soap->randfile)
+  { if (!RAND_load_file(soap->randfile, -1))
+      return soap_set_receiver_error(soap, "SSL error", "Can't load randomness", SOAP_SSL_ERROR);
+  }
+  if (soap->cafile || soap->capath)
+  { if (!SSL_CTX_load_verify_locations(soap->ctx, soap->cafile, soap->capath))
+      return soap_set_receiver_error(soap, "SSL error", "Can't read CA file and directory", SOAP_SSL_ERROR);
+    if (soap->cafile && (soap->ssl_flags & SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION))
+      SSL_CTX_set_client_CA_list(soap->ctx, SSL_load_client_CA_file(soap->cafile));
+  }
+  if (!SSL_CTX_set_default_verify_paths(soap->ctx))
+    return soap_set_receiver_error(soap, "SSL error", "Can't read default CA file and/or directory", SOAP_SSL_ERROR);
+/* This code assumes a typical scenario, see alternative code below */
+  if (soap->keyfile)
+  { if (!SSL_CTX_use_certificate_chain_file(soap->ctx, soap->keyfile))
+      return soap_set_receiver_error(soap, "SSL error", "Can't read certificate key file", SOAP_SSL_ERROR);
+    if (soap->password)
+    { SSL_CTX_set_default_passwd_cb_userdata(soap->ctx, (void*)soap->password);
+      SSL_CTX_set_default_passwd_cb(soap->ctx, ssl_password);
+    }
+    if (!SSL_CTX_use_PrivateKey_file(soap->ctx, soap->keyfile, SSL_FILETYPE_PEM))
+      return soap_set_receiver_error(soap, "SSL error", "Can't read key file", SOAP_SSL_ERROR);
+  }
+/* Suggested alternative approach to check cafile first before the key file:
+  if (soap->password)
+  { SSL_CTX_set_default_passwd_cb_userdata(soap->ctx, (void*)soap->password);
+    SSL_CTX_set_default_passwd_cb(soap->ctx, ssl_password);
+  }
+  if (!soap->cafile || !SSL_CTX_use_certificate_chain_file(soap->ctx, soap->cafile))
+  { if (soap->keyfile)
+    { if (!SSL_CTX_use_certificate_chain_file(soap->ctx, soap->keyfile))
+        return soap_set_receiver_error(soap, "SSL error", "Can't read certificate or key file", SOAP_SSL_ERROR);
+      if (!SSL_CTX_use_PrivateKey_file(soap->ctx, soap->keyfile, SSL_FILETYPE_PEM))
+        return soap_set_receiver_error(soap, "SSL error", "Can't read key file", SOAP_SSL_ERROR);
+    }
+  }
+*/
+  if ((soap->ssl_flags & SOAP_SSL_RSA))
+  { RSA *rsa = RSA_generate_key(1024, RSA_F4, NULL, NULL);
+    if (!SSL_CTX_set_tmp_rsa(soap->ctx, rsa))
+    { if (rsa)
+        RSA_free(rsa);
+      return soap_set_receiver_error(soap, "SSL error", "Can't set RSA key", SOAP_SSL_ERROR);
+    }
+    RSA_free(rsa);
+  }
+  else if (soap->dhfile)
+  { DH *dh = 0;
+    BIO *bio;
+    bio = BIO_new_file(soap->dhfile, "r");
+    if (!bio)
+      return soap_set_receiver_error(soap, "SSL error", "Can't read DH file", SOAP_SSL_ERROR);
+    dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);
+    BIO_free(bio);
+    if (SSL_CTX_set_tmp_dh(soap->ctx, dh) < 0)
+    { if (dh)
+        DH_free(dh);
+      return soap_set_receiver_error(soap, "SSL error", "Can't set DH parameters", SOAP_SSL_ERROR);
+    }
+    DH_free(dh);
+  }
+  flags = (SSL_OP_ALL | SSL_OP_NO_SSLv2);
+  if ((soap->ssl_flags & SOAP_SSLv3))
+    flags |= SSL_OP_NO_TLSv1;
+  if ((soap->ssl_flags & SOAP_TLSv1))
+    flags |= SSL_OP_NO_SSLv3;
+  SSL_CTX_set_options(soap->ctx, flags);
+  if ((soap->ssl_flags & SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION))
+    mode = (SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT);
+  else if ((soap->ssl_flags & SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION))
+    mode = SSL_VERIFY_PEER;
+  else
+    mode = SSL_VERIFY_NONE;
+  SSL_CTX_set_verify(soap->ctx, mode, soap->fsslverify);
+#if (OPENSSL_VERSION_NUMBER < 0x00905100L)
+  SSL_CTX_set_verify_depth(soap->ctx, 1); 
+#else
+  SSL_CTX_set_verify_depth(soap->ctx, 9); 
+#endif  
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static int
+ssl_verify_callback(int ok, X509_STORE_CTX *store)
+{
+#ifdef SOAP_DEBUG
+  if (!ok) 
+  { char data[256];
+    X509 *cert = X509_STORE_CTX_get_current_cert(store);
+    fprintf(stderr, "SSL verify error or warning with certificate at depth %d: %s\n", X509_STORE_CTX_get_error_depth(store), X509_verify_cert_error_string(X509_STORE_CTX_get_error(store)));
+    X509_NAME_oneline(X509_get_issuer_name(cert), data, sizeof(data));
+    fprintf(stderr, "certificate issuer %s\n", data);
+    X509_NAME_oneline(X509_get_subject_name(cert), data, sizeof(data));
+    fprintf(stderr, "certificate subject %s\n", data);
+  }
+#endif
+  /* Note: return 1 to continue, but unsafe progress will be terminated by SSL */
+  return ok;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_ssl_accept(struct soap *soap)
+{ BIO *bio;
+  int i, r;
+  if (!soap_valid_socket(soap->socket))
+    return soap_set_receiver_error(soap, "SSL error", "No socket in soap_ssl_accept()", SOAP_SSL_ERROR);
+  if (!soap->ctx && (soap->error = soap->fsslauth(soap)))
+    return SOAP_INVALID_SOCKET;
+  if (!soap->ssl)
+  { soap->ssl = SSL_new(soap->ctx);
+    if (!soap->ssl)
+      return soap_set_receiver_error(soap, "SSL error", "SSL_new() failed in soap_ssl_accept()", SOAP_SSL_ERROR);
+  }
+  else
+    SSL_clear(soap->ssl);
+  soap->imode |= SOAP_ENC_SSL;
+  soap->omode |= SOAP_ENC_SSL;
+#if defined(WIN32)
+  { u_long nonblocking = 1;
+    ioctlsocket((SOAP_SOCKET)soap->socket, FIONBIO, &nonblocking);
+  }
+#elif defined(VXWORKS)
+  { u_long nonblocking = 1;
+    ioctl((SOAP_SOCKET)soap->socket, FIONBIO, (int)&nonblocking);
+  }
+#else
+  fcntl((SOAP_SOCKET)soap->socket, F_SETFL, fcntl((SOAP_SOCKET)soap->socket, F_GETFL)|O_NONBLOCK);
+#endif
+  bio = BIO_new_socket((SOAP_SOCKET)soap->socket, BIO_NOCLOSE);
+  SSL_set_bio(soap->ssl, bio, bio);
+  i = 100; /* 100 * 0.1 ms retries */
+  while ((r = SSL_accept(soap->ssl)) <= 0)
+  { int err = SSL_get_error(soap->ssl, r);
+    if (err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE)
+    { struct timeval timeout;
+      fd_set fd;
+      if (i-- <= 0)
+        break;
+      timeout.tv_sec = 0;
+      timeout.tv_usec = 100000;
+#ifndef WIN32
+      if ((int)soap->socket >= (int)FD_SETSIZE)
+        return SOAP_FD_EXCEEDED;       /* Hint: MUST increase FD_SETSIZE */
+#endif
+      FD_ZERO(&fd);
+      FD_SET((SOAP_SOCKET)soap->socket, &fd);
+      r = select((SOAP_SOCKET)(soap->socket + 1), &fd, NULL, &fd, &timeout);
+      if (r < 0 && (r = soap_socket_errno(soap->socket)) != SOAP_EINTR)
+      { soap->errnum = r;
+        return SOAP_EOF;
+      }
+    }
+    else
+    { soap->errnum = err;
+      break;
+    }
+  }
+#if defined(WIN32)
+  { u_long blocking = 0;
+    ioctlsocket((SOAP_SOCKET)soap->socket, FIONBIO, &blocking);
+  }
+#elif defined(VXWORKS)
+  { u_long blocking = 0;
+    ioctl((SOAP_SOCKET)soap->socket, FIONBIO, (int)&blocking);
+  }
+#else
+  fcntl((SOAP_SOCKET)soap->socket, F_SETFL, fcntl((SOAP_SOCKET)soap->socket, F_GETFL)&~O_NONBLOCK);
+#endif
+  if (r <= 0)
+  { soap_set_receiver_error(soap, soap_ssl_error(soap, r), "SSL_accept() failed in soap_ssl_accept()", SOAP_SSL_ERROR);
+    soap_closesock(soap);
+    return SOAP_SSL_ERROR;
+  }
+  if ((soap->ssl_flags & SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION))
+  { X509 *peer;
+    int err;
+    if ((err = SSL_get_verify_result(soap->ssl)) != X509_V_OK)
+    { soap_closesock(soap);
+      return soap_set_sender_error(soap, X509_verify_cert_error_string(err), "SSL certificate presented by peer cannot be verified in soap_ssl_accept()", SOAP_SSL_ERROR);
+    }
+    peer = SSL_get_peer_certificate(soap->ssl);
+    if (!peer)
+    { soap_closesock(soap);
+      return soap_set_sender_error(soap, "SSL error", "No SSL certificate was presented by the peer in soap_ssl_accept()", SOAP_SSL_ERROR);
+    }
+    X509_free(peer);
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#endif /* WITH_OPENSSL */
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_init(struct soap *soap)
+{ soap->errmode = 1;
+#ifdef WIN32
+  if (tcp_done)
+    return 0;
+  else
+  { WSADATA w;
+    if (WSAStartup(MAKEWORD(1, 1), &w))
+      return -1;
+    tcp_done = 1;
+  }
+#endif
+  return 0;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_done(struct soap *soap)
+{ 
+#ifdef SOAP_DEBUG
+  int i;
+#endif
+  if (soap_check_state(soap))
+    return;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Done with context\n"));
+  soap_free_temp(soap);
+  while (soap->clist)
+  { struct soap_clist *p = soap->clist->next;
+    SOAP_FREE(soap, soap->clist);
+    soap->clist = p;
+  }
+  soap->keep_alive = 0; /* to force close the socket */
+  soap_closesock(soap);
+#ifdef WITH_COOKIES
+  soap_free_cookies(soap);
+#endif
+  while (soap->plugins)
+  { register struct soap_plugin *p = soap->plugins->next;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Removing plugin '%s'\n", soap->plugins->id));
+    if (soap->plugins->fcopy || soap->state == SOAP_INIT)
+      soap->plugins->fdelete(soap, soap->plugins);
+    SOAP_FREE(soap, soap->plugins);
+    soap->plugins = p;
+  }
+  soap->fplugin = fplugin;
+  soap->fmalloc = NULL;
+#ifndef WITH_NOHTTP
+  soap->fpost = http_post;
+  soap->fget = http_get;
+  soap->fform = NULL;
+  soap->fposthdr = http_post_header;
+  soap->fresponse = http_response;
+  soap->fparse = http_parse;
+  soap->fparsehdr = http_parse_header;
+#endif
+  soap->fheader = NULL;
+#ifndef WITH_NOIO
+#ifndef WITH_IPV6
+  soap->fresolve = tcp_gethost;
+#else
+  soap->fresolve = NULL;
+#endif
+  soap->faccept = tcp_accept;
+  soap->fopen = tcp_connect;
+  soap->fclose = tcp_disconnect;
+  soap->fclosesocket = tcp_closesocket;
+  soap->fshutdownsocket = tcp_shutdownsocket;
+  soap->fsend = fsend;
+  soap->frecv = frecv;
+  soap->fpoll = soap_poll;
+#else
+  soap->fopen = NULL;
+  soap->fclose = NULL;
+  soap->fpoll = NULL;
+#endif
+#ifndef WITH_LEANER
+  soap->fprepareinit = NULL;
+  soap->fpreparesend = NULL;
+  soap->fpreparerecv = NULL;
+  soap->fpreparefinal = NULL;
+#endif
+  soap->fseterror = NULL;
+  soap->fignore = NULL;
+  soap->fserveloop = NULL;
+#ifdef WITH_OPENSSL
+  if (soap->session)
+  { SSL_SESSION_free(soap->session);
+    soap->session = NULL;
+  }
+#endif
+  if (soap->state == SOAP_INIT)
+  { if (soap_valid_socket(soap->master))
+    { soap->fclosesocket(soap, (SOAP_SOCKET)soap->master);
+      soap->master = SOAP_INVALID_SOCKET;
+    }
+#ifdef WITH_OPENSSL
+    if (soap->ctx)
+    { SSL_CTX_free(soap->ctx);
+      soap->ctx = NULL;
+    }
+#endif
+  }
+#ifdef SOAP_DEBUG
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free logfiles\n"));
+  for (i = 0; i < SOAP_MAXLOGS; i++)
+  { if (soap->logfile[i])
+    { SOAP_FREE(soap, (void*)soap->logfile[i]);
+      soap->logfile[i] = NULL;
+    }
+    soap_close_logfile(soap, i);
+  }
+  soap_free_mht(soap);
+  soap->state = 0;
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_cleanup(struct soap *soap)
+{ soap_done(soap);
+#ifdef WIN32
+  if (!tcp_done)
+    return;
+  tcp_done = 0;
+  WSACleanup();
+#endif
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static const char*
+tcp_error(struct soap *soap)
+{ register const char *msg = NULL;
+  switch (soap->errmode)
+  { case 0:
+      msg = soap_strerror(soap);
+      break;
+    case 1:
+      msg = "WSAStartup failed";
+      break;
+    case 2:
+    {
+#ifndef WITH_LEAN
+      msg = soap_code_str(h_error_codes, soap->errnum);
+      if (!msg)
+#endif
+      { sprintf(soap->msgbuf, "TCP/UDP IP error %d", soap->errnum);
+        msg = soap->msgbuf;
+      }
+    }
+  }
+  return msg;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static const char*
+http_error(struct soap *soap, int status)
+{ register const char *msg = SOAP_STR_EOS;
+#ifndef WITH_LEAN
+  msg = soap_code_str(h_http_error_codes, status);
+  if (!msg)
+    msg = SOAP_STR_EOS;
+#endif
+  return msg;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_IPV6
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_gethost(struct soap *soap, const char *addr, struct in_addr *inaddr)
+{ soap_int32 iadd = -1;
+  struct hostent hostent, *host = &hostent;
+#ifdef VXWORKS
+  int hostint;
+  /* inet_addr(), and hostGetByName() expect "char *"; addr is a "const char *". */
+  iadd = inet_addr((char*)addr);
+#else
+#if defined(_AIXVERSION_431) || defined(TRU64)
+  struct hostent_data ht_data;
+#endif
+#ifdef AS400
+  iadd = inet_addr((void*)addr);
+#else
+  iadd = inet_addr(addr);
+#endif
+#endif
+  if (iadd != -1)
+  { memcpy(inaddr, &iadd, sizeof(iadd));
+    return SOAP_OK;
+  }
+#if defined(__GLIBC__)
+  if (gethostbyname_r(addr, &hostent, soap->buf, SOAP_BUFLEN, &host, &soap->errnum) < 0)
+    host = NULL;
+#elif defined(_AIXVERSION_431) || defined(TRU64)
+  memset((void*)&ht_data, 0, sizeof(ht_data));
+  if (gethostbyname_r(addr, &hostent, &ht_data) < 0)
+  { host = NULL;
+    soap->errnum = h_errno;
+  }
+#elif defined(HAVE_GETHOSTBYNAME_R)
+  host = gethostbyname_r(addr, &hostent, soap->buf, SOAP_BUFLEN, &soap->errnum);
+#elif defined(VXWORKS)
+  /* If the DNS resolver library resolvLib has been configured in the vxWorks
+   * image, a query for the host IP address is sent to the DNS server, if the
+   * name was not found in the local host table. */
+  hostint = hostGetByName((char*)addr);
+  if (hostint == ERROR)
+  { host = NULL;
+    soap->errnum = soap_errno; 
+  }
+#else
+#ifdef AS400
+  if (!(host = gethostbyname((void*)addr)))
+    soap->errnum = h_errno;
+#else
+  if (!(host = gethostbyname(addr)))
+    soap->errnum = h_errno;
+#endif
+#endif
+  if (!host)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Host name not found\n"));
+    return SOAP_ERR;
+  }
+#ifdef VXWORKS
+  inaddr->s_addr = hostint;
+#else
+  memcpy(inaddr, host->h_addr, host->h_length);
+#endif
+  return SOAP_OK;
+}
+#endif
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_connect(struct soap *soap, const char *endpoint, const char *host, int port)
+{
+#ifdef WITH_IPV6
+  struct addrinfo hints, *res, *ressave;
+#endif
+  register int err, fd;
+#ifndef WITH_LEAN
+  int len = SOAP_BUFLEN;
+  int set = 1;
+#endif
+  if (soap_valid_socket(soap->socket))
+    soap->fclosesocket(soap, (SOAP_SOCKET)soap->socket);
+  soap->socket = SOAP_INVALID_SOCKET;
+  if (tcp_init(soap))
+  { soap->errnum = 0;
+    soap_set_sender_error(soap, tcp_error(soap), "TCP init failed in tcp_connect()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+  soap->errmode = 0;
+#ifdef WITH_IPV6
+  memset((void*)&hints, 0, sizeof(hints));
+  hints.ai_family = PF_UNSPEC;
+#ifdef WITH_UDP
+  if ((soap->omode & SOAP_IO_UDP))
+    hints.ai_socktype = SOCK_DGRAM;
+  else
+#endif
+    hints.ai_socktype = SOCK_STREAM;
+  soap->errmode = 2;
+  if (soap->proxy_host)
+    err = getaddrinfo(soap->proxy_host, soap_int2s(soap, soap->proxy_port), &hints, &res);
+  else
+    err = getaddrinfo(host, soap_int2s(soap, port), &hints, &res);
+  if (err)
+  { soap_set_sender_error(soap, gai_strerror(err), "getaddrinfo failed in tcp_connect()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+  ressave = res;
+again:
+  fd = (int)socket(res->ai_family, res->ai_socktype, res->ai_protocol);
+  soap->errmode = 0;
+#else
+#ifdef WITH_UDP
+  if ((soap->omode & SOAP_IO_UDP))
+    fd = (int)socket(AF_INET, SOCK_DGRAM, 0);
+  else
+#endif
+    fd = (int)socket(AF_INET, SOCK_STREAM, 0);
+#endif
+  if (fd < 0)
+  { soap->errnum = soap_socket_errno(fd);
+    soap_set_sender_error(soap, tcp_error(soap), "socket failed in tcp_connect()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+#ifdef SOCKET_CLOSE_ON_EXEC
+#ifdef WIN32
+#ifndef UNDER_CE
+  SetHandleInformation((HANDLE)fd, HANDLE_FLAG_INHERIT, 0);
+#endif
+#else
+  fcntl(fd, F_SETFD, 1);
+#endif
+#endif
+#ifndef WITH_LEAN
+  if (soap->connect_flags == SO_LINGER)
+  { struct linger linger;
+    memset((void*)&linger, 0, sizeof(linger));
+    linger.l_onoff = 1;
+    linger.l_linger = 0;
+    if (setsockopt((SOAP_SOCKET)fd, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(struct linger)))
+    { soap->errnum = soap_socket_errno(fd);
+      soap_set_sender_error(soap, tcp_error(soap), "setsockopt SO_LINGER failed in tcp_connect()", SOAP_TCP_ERROR);
+      soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+      return SOAP_INVALID_SOCKET;
+    }
+  }
+  else if (soap->connect_flags && setsockopt((SOAP_SOCKET)fd, SOL_SOCKET, soap->connect_flags, (char*)&set, sizeof(int)))
+  { soap->errnum = soap_socket_errno(fd);
+    soap_set_sender_error(soap, tcp_error(soap), "setsockopt failed in tcp_connect()", SOAP_TCP_ERROR);
+    soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+    return SOAP_INVALID_SOCKET;
+  }
+  if (soap->keep_alive && setsockopt((SOAP_SOCKET)fd, SOL_SOCKET, SO_KEEPALIVE, (char*)&set, sizeof(int)))
+  { soap->errnum = soap_socket_errno(fd);
+    soap_set_sender_error(soap, tcp_error(soap), "setsockopt SO_KEEPALIVE failed in tcp_connect()", SOAP_TCP_ERROR);
+    soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+    return SOAP_INVALID_SOCKET;
+  }
+  if (setsockopt((SOAP_SOCKET)fd, SOL_SOCKET, SO_SNDBUF, (char*)&len, sizeof(int)))
+  { soap->errnum = soap_socket_errno(fd);
+    soap_set_sender_error(soap, tcp_error(soap), "setsockopt SO_SNDBUF failed in tcp_connect()", SOAP_TCP_ERROR);
+    soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+    return SOAP_INVALID_SOCKET;
+  }
+  if (setsockopt((SOAP_SOCKET)fd, SOL_SOCKET, SO_RCVBUF, (char*)&len, sizeof(int)))
+  { soap->errnum = soap_socket_errno(fd);
+    soap_set_sender_error(soap, tcp_error(soap), "setsockopt SO_RCVBUF failed in tcp_connect()", SOAP_TCP_ERROR);
+    soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+    return SOAP_INVALID_SOCKET;
+  }
+#ifdef TCP_NODELAY
+  if (!(soap->omode & SOAP_IO_UDP) && setsockopt((SOAP_SOCKET)fd, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int)))
+  { soap->errnum = soap_socket_errno(fd);
+    soap_set_sender_error(soap, tcp_error(soap), "setsockopt TCP_NODELAY failed in tcp_connect()", SOAP_TCP_ERROR);
+    soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+    return SOAP_INVALID_SOCKET;
+  }
+#endif
+#endif
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Opening socket %d to host='%s' port=%d\n", fd, host, port));
+#ifndef WITH_IPV6
+  soap->peerlen = sizeof(soap->peer);
+  memset((void*)&soap->peer, 0, sizeof(soap->peer));
+  soap->peer.sin_family = AF_INET;
+  soap->errmode = 2;
+  if (soap->proxy_host)
+  { if (soap->fresolve(soap, soap->proxy_host, &soap->peer.sin_addr))
+    { soap_set_sender_error(soap, tcp_error(soap), "get proxy host by name failed in tcp_connect()", SOAP_TCP_ERROR);
+      soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+      return SOAP_INVALID_SOCKET;
+    }
+    soap->peer.sin_port = htons((short)soap->proxy_port);
+  }
+  else
+  { if (soap->fresolve(soap, host, &soap->peer.sin_addr))
+    { soap_set_sender_error(soap, tcp_error(soap), "get host by name failed in tcp_connect()", SOAP_TCP_ERROR);
+      soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+      return SOAP_INVALID_SOCKET;
+    }
+    soap->peer.sin_port = htons((short)port);
+  }
+  soap->errmode = 0;
+  if ((soap->omode & SOAP_IO_UDP))
+    return fd;
+#endif
+#ifndef WITH_LEAN
+  if (soap->connect_timeout)
+#if defined(WIN32)
+  { u_long nonblocking = 1;
+    ioctlsocket((SOAP_SOCKET)fd, FIONBIO, &nonblocking);
+  }
+#elif defined(VXWORKS)
+  { u_long nonblocking = 1;
+    ioctl((SOAP_SOCKET)fd, FIONBIO, (int)(&nonblocking)); /* modified to use fd */
+  }
+#else
+    fcntl((SOAP_SOCKET)fd, F_SETFL, fcntl((SOAP_SOCKET)fd, F_GETFL)|O_NONBLOCK);
+#endif
+  else
+#if defined(WIN32)
+  { u_long blocking = 0;
+    ioctlsocket((SOAP_SOCKET)fd, FIONBIO, &blocking);
+  }
+#elif defined(VXWORKS)
+  { u_long blocking = 0;
+    ioctl((SOAP_SOCKET)fd, FIONBIO, (int)(&blocking));
+  }
+#else
+    fcntl((SOAP_SOCKET)fd, F_SETFL, fcntl((SOAP_SOCKET)fd, F_GETFL)&~O_NONBLOCK);
+#endif
+#endif
+  for (;;)
+  { 
+#ifdef WITH_IPV6
+    if (connect((SOAP_SOCKET)fd, res->ai_addr, res->ai_addrlen))
+#else
+    if (connect((SOAP_SOCKET)fd, (struct sockaddr*)&soap->peer, sizeof(soap->peer)))
+#endif
+    { 
+#ifndef WITH_LEAN
+      if (soap->connect_timeout && (soap_socket_errno(fd) == SOAP_EINPROGRESS || soap_socket_errno(fd) == SOAP_EWOULDBLOCK))
+      { struct timeval timeout;
+        SOAP_SOCKLEN_T k;
+        fd_set fds;
+        if (soap->connect_timeout > 0)
+        { timeout.tv_sec = soap->connect_timeout;
+          timeout.tv_usec = 0;
+        }
+        else
+        { timeout.tv_sec = -soap->connect_timeout/1000000;
+          timeout.tv_usec = -soap->connect_timeout%1000000;
+        }
+#ifndef WIN32
+        if ((int)soap->socket >= (int)FD_SETSIZE)
+        { soap->error = SOAP_FD_EXCEEDED;
+          return SOAP_INVALID_SOCKET;  /* Hint: MUST increase FD_SETSIZE */
+        }
+#endif
+        FD_ZERO(&fds);
+        FD_SET((SOAP_SOCKET)fd, &fds);
+        for (;;)
+        { register int r = select((SOAP_SOCKET)(fd + 1), NULL, &fds, NULL, &timeout);
+          if (r > 0)
+            break;
+          if (!r)
+          { soap->errnum = 0;
+            DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Connect timeout\n"));
+            soap_set_sender_error(soap, "Timeout", "connect failed in tcp_connect()", SOAP_TCP_ERROR);
+            soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+            return SOAP_INVALID_SOCKET;
+          }
+          r = soap_socket_errno(fd);
+          if (r != SOAP_EINTR)
+          { soap->errnum = r;
+            DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not connect to host\n"));
+            soap_set_sender_error(soap, tcp_error(soap), "connect failed in tcp_connect()", SOAP_TCP_ERROR);
+            soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+            return SOAP_INVALID_SOCKET;
+          }
+        }
+        k = (SOAP_SOCKLEN_T)sizeof(soap->errnum);
+        if (!getsockopt((SOAP_SOCKET)fd, SOL_SOCKET, SO_ERROR, (char*)&soap->errnum, &k) && !soap->errnum)     /* portability note: see SOAP_SOCKLEN_T definition in stdsoap2.h */
+          break;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not connect to host\n"));
+        if (!soap->errnum)
+         soap->errnum = soap_socket_errno(fd);
+        soap_set_sender_error(soap, tcp_error(soap), "connect failed in tcp_connect()", SOAP_TCP_ERROR);
+        soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+        return SOAP_INVALID_SOCKET;
+      }
+      else
+#endif
+#ifdef WITH_IPV6
+      if (res->ai_next)
+      { res = res->ai_next;
+        soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+        goto again;
+      }
+      else
+#endif
+      err = soap_socket_errno(fd);
+      if (err && err != SOAP_EINTR)
+      { soap->errnum = err;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not connect to host\n"));
+        soap_set_sender_error(soap, tcp_error(soap), "connect failed in tcp_connect()", SOAP_TCP_ERROR);
+        soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+        return SOAP_INVALID_SOCKET;
+      }
+    }  
+    else
+      break;
+  }
+#ifdef WITH_IPV6
+  soap->peerlen = 0; /* IPv6: already connected so use send() */
+  freeaddrinfo(ressave);
+#endif
+#ifndef WITH_LEAN
+  if (soap->connect_timeout)
+#if defined(WIN32)
+  { u_long blocking = 0;
+    ioctlsocket((SOAP_SOCKET)fd, FIONBIO, &blocking);
+  }
+#elif defined(VXWORKS)
+  { u_long blocking = 0;
+    ioctl((SOAP_SOCKET)fd, FIONBIO, (int)(&blocking));
+  }
+#else
+    fcntl((SOAP_SOCKET)fd, F_SETFL, fcntl((SOAP_SOCKET)fd, F_GETFL)&~O_NONBLOCK);
+#endif
+#endif
+  soap->socket = fd;
+  soap->imode &= ~SOAP_ENC_SSL;
+  soap->omode &= ~SOAP_ENC_SSL;
+  if (!soap_tag_cmp(endpoint, "https:*"))
+  {
+#ifdef WITH_OPENSSL
+    BIO *bio;
+    int r;
+    if (soap->proxy_host)
+    { unsigned int k = soap->omode; /* make sure we only parse HTTP */
+      size_t n = soap->count; /* save the content length */
+      char *userid, *passwd;
+      char endp[sizeof(soap->endpoint)];
+      soap->omode &= ~SOAP_ENC; /* mask IO and ENC */
+      soap->omode |= SOAP_IO_BUFFER;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Connecting to %s proxy server\n", soap->proxy_http_version));
+      sprintf(soap->tmpbuf, "CONNECT %s:%d HTTP/%s", host, port, soap->proxy_http_version);
+      if (soap_begin_send(soap)
+       || (soap->error = soap->fposthdr(soap, soap->tmpbuf, NULL)))
+      { soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+        return SOAP_INVALID_SOCKET;
+      }
+#ifndef WITH_LEAN
+      if (soap->proxy_userid && soap->proxy_passwd && strlen(soap->proxy_userid) + strlen(soap->proxy_passwd) < 761)
+      { sprintf(soap->tmpbuf + 262, "%s:%s", soap->proxy_userid, soap->proxy_passwd);
+        strcpy(soap->tmpbuf, "Basic ");
+        soap_s2base64(soap, (const unsigned char*)(soap->tmpbuf + 262), soap->tmpbuf + 6, strlen(soap->tmpbuf + 262));
+        if ((soap->error = soap->fposthdr(soap, "Proxy-Authorization", soap->tmpbuf)))
+        { soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+          return soap->error;
+        }
+      }
+#endif
+      if ((soap->error = soap->fposthdr(soap, NULL, NULL))
+       || soap_flush(soap))
+      { soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+        return SOAP_INVALID_SOCKET;
+      }
+      soap->omode = k;
+      k = soap->imode;
+      soap->imode &= ~SOAP_ENC; /* mask IO and ENC */
+      strcpy(endp, soap->endpoint);
+      userid = soap->userid; /* preserve */
+      passwd = soap->passwd; /* preserve */
+      if ((soap->error = soap->fparse(soap)))
+      { soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+        return SOAP_INVALID_SOCKET;
+      }
+      strcpy(soap->endpoint, endp); /* restore */
+      soap->userid = userid; /* restore */
+      soap->passwd = passwd; /* restore */
+      soap->imode = k; /* restore */
+      soap->count = n; /* restore */
+      if (soap_begin_send(soap))
+      { soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+        return SOAP_INVALID_SOCKET;
+      }
+    }
+    if (!soap->ctx && (soap->error = soap->fsslauth(soap)))
+    { soap_set_sender_error(soap, "SSL error", "SSL authentication failed in tcp_connect(): check password, key file, and ca file.", SOAP_SSL_ERROR);
+      soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+      return SOAP_INVALID_SOCKET;
+    }
+    soap->ssl = SSL_new(soap->ctx);
+    if (!soap->ssl)
+    { soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+      soap->error = SOAP_SSL_ERROR;
+      return SOAP_INVALID_SOCKET;
+    }
+    if (soap->session)
+    { if (!strcmp(soap->session_host, host) && soap->session_port == port)
+        SSL_set_session(soap->ssl, soap->session);
+      SSL_SESSION_free(soap->session);
+      soap->session = NULL;
+    }
+    soap->imode |= SOAP_ENC_SSL;
+    soap->omode |= SOAP_ENC_SSL;
+    bio = BIO_new_socket((SOAP_SOCKET)fd, BIO_NOCLOSE);
+    SSL_set_bio(soap->ssl, bio, bio);
+#ifndef WITH_LEAN
+    if (soap->connect_timeout)
+#if defined(WIN32)
+    { u_long nonblocking = 1;
+      ioctlsocket((SOAP_SOCKET)fd, FIONBIO, &nonblocking);
+    }
+#elif defined(VXWORKS)
+    { u_long nonblocking = 1;
+      ioctl((SOAP_SOCKET)fd, FIONBIO, (int)(&nonblocking));
+    }
+#else
+      fcntl((SOAP_SOCKET)fd, F_SETFL, fcntl((SOAP_SOCKET)fd, F_GETFL)|O_NONBLOCK);
+#endif
+#endif
+    for (;;)
+    { if ((r = SSL_connect(soap->ssl)) <= 0)
+      { int err = SSL_get_error(soap->ssl, r);
+        if (err != SSL_ERROR_NONE && err != SSL_ERROR_WANT_READ && err != SSL_ERROR_WANT_WRITE)
+        { soap_set_sender_error(soap, soap_ssl_error(soap, r), "SSL connect failed in tcp_connect()", SOAP_SSL_ERROR);
+          soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+          return SOAP_INVALID_SOCKET;
+        }
+        if (soap->connect_timeout)
+        { struct timeval timeout;
+          fd_set fds;
+          if (soap->connect_timeout > 0)
+          { timeout.tv_sec = soap->connect_timeout;
+            timeout.tv_usec = 0;
+          }
+          else
+          { timeout.tv_sec = -soap->connect_timeout/1000000;
+            timeout.tv_usec = -soap->connect_timeout%1000000;
+          }
+#ifndef WIN32
+          if ((int)soap->socket >= (int)FD_SETSIZE)
+          { soap->error = SOAP_FD_EXCEEDED;
+            return SOAP_INVALID_SOCKET;        /* Hint: MUST increase FD_SETSIZE */
+          }
+#endif
+          FD_ZERO(&fds);
+          FD_SET((SOAP_SOCKET)fd, &fds);
+          for (;;)
+          { int r = select((SOAP_SOCKET)(fd + 1), &fds, NULL, &fds, &timeout);
+            if (r > 0)
+              break;
+            if (!r)
+            { soap->errnum = 0;
+              DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Connect timeout\n"));
+              soap_set_sender_error(soap, "Timeout", "connect failed in tcp_connect()", SOAP_TCP_ERROR);
+              soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+              return SOAP_INVALID_SOCKET;
+            }
+          }
+          continue;
+        }
+      }
+      break;
+    }
+#ifndef WITH_LEAN
+    if (soap->connect_timeout)
+#ifdef WIN32
+    { u_long blocking = 0;
+      ioctlsocket((SOAP_SOCKET)fd, FIONBIO, &blocking);
+    }
+#elif defined(VXWORKS)
+    { u_long blocking = 0;
+      ioctl((SOAP_SOCKET)fd, FIONBIO, (int)(&blocking));
+    }
+#else
+      fcntl((SOAP_SOCKET)fd, F_SETFL, fcntl((SOAP_SOCKET)fd, F_GETFL)&~O_NONBLOCK);
+#endif
+#endif
+    if ((soap->ssl_flags & SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION))
+    { int err;
+      // TODO: add callback to verify server
+      if ((err = SSL_get_verify_result(soap->ssl)) != X509_V_OK)
+      { soap_set_sender_error(soap, X509_verify_cert_error_string(err), "SSL certificate presented by peer cannot be verified in tcp_connect()", SOAP_SSL_ERROR);
+        soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+        return SOAP_INVALID_SOCKET;
+      }
+      if (!(soap->ssl_flags & SOAP_SSL_SKIP_HOST_CHECK))
+      { X509_NAME *subj;
+        int ext_count;
+        int ok = 0;
+        X509 *peer;
+        peer = SSL_get_peer_certificate(soap->ssl);
+        if (!peer)
+        { soap_set_sender_error(soap, "SSL error", "No SSL certificate was presented by the peer in tcp_connect()", SOAP_SSL_ERROR);
+          soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+          return SOAP_INVALID_SOCKET;
+        }
+        ext_count = X509_get_ext_count(peer);
+        if (ext_count > 0)
+        { int i;
+          for (i = 0; i < ext_count; i++)
+          { X509_EXTENSION *ext = X509_get_ext(peer, i);
+            const char *ext_str = OBJ_nid2sn(OBJ_obj2nid(X509_EXTENSION_get_object(ext)));
+            if (ext_str && !strcmp(ext_str, "subjectAltName"))
+            { X509V3_EXT_METHOD *meth = X509V3_EXT_get(ext);
+             void *ext_data;
+             unsigned char *data;
+              STACK_OF(CONF_VALUE) *val;
+              int j;
+              if (!meth)
+                break;
+              data = ext->value->data;
+#if (OPENSSL_VERSION_NUMBER > 0x00907000L)
+              if (meth->it) 
+                ext_data = ASN1_item_d2i(NULL, &data, ext->value->length, ASN1_ITEM_ptr(meth->it));
+              else
+             { /* OpenSSL not perfectly portable at this point (?):
+                   Some compilers appear to prefer
+                   meth->d2i(NULL, (const unsigned char**)&data, ...
+               */
+                ext_data = meth->d2i(NULL, &data, ext->value->length);
+             }
+#else
+              ext_data = meth->d2i(NULL, &data, ext->value->length);
+#endif
+              val = meth->i2v(meth, ext_data, NULL);
+              for (j = 0; j < sk_CONF_VALUE_num(val); j++)
+              { CONF_VALUE *nval = sk_CONF_VALUE_value(val, j);
+                if (nval && !strcmp(nval->name, "DNS") && !strcmp(nval->value, host))
+                { ok = 1;
+                  break;
+                }
+              }
+            }
+            if (ok)
+              break;
+          }
+        }
+        if (!ok && (subj = X509_get_subject_name(peer)))
+        { int i = -1;
+          do
+          { ASN1_STRING *name;
+            i = X509_NAME_get_index_by_NID(subj, NID_commonName, i);
+            if (i == -1)
+              break;
+            name = X509_NAME_ENTRY_get_data(X509_NAME_get_entry(subj, i));
+            if (name && !soap_tag_cmp((const char*)name, host))
+              ok = 1;
+            else
+            { unsigned char *tmp = NULL;
+              ASN1_STRING_to_UTF8(&tmp, name);
+              if (tmp)
+             { if (!soap_tag_cmp((const char*)tmp, host))
+                  ok = 1;
+                OPENSSL_free(tmp);
+             }
+            }
+          } while (!ok);
+        }
+        X509_free(peer);
+        if (!ok)
+        { soap_set_sender_error(soap, "SSL error", "SSL certificate host name mismatch in tcp_connect()", SOAP_SSL_ERROR);
+          soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+          return SOAP_INVALID_SOCKET;
+        }
+      }
+    }
+#else
+    soap->fclosesocket(soap, (SOAP_SOCKET)fd);
+    soap->error = SOAP_SSL_ERROR;
+    return SOAP_INVALID_SOCKET;
+#endif
+  }
+  return fd;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_bind(struct soap *soap, const char *host, int port, int backlog)
+{
+#ifdef WITH_IPV6
+  struct addrinfo *addrinfo = NULL;
+  struct addrinfo hints;
+  struct addrinfo res;
+  int err;
+#endif
+#ifndef WITH_LEAN
+  int len = SOAP_BUFLEN;
+  int set = 1;
+#endif
+  if (soap_valid_socket(soap->master))
+  { soap->fclosesocket(soap, (SOAP_SOCKET)soap->master);
+    soap->master = SOAP_INVALID_SOCKET;
+  }
+  soap->socket = SOAP_INVALID_SOCKET;
+  soap->errmode = 1;
+  if (tcp_init(soap))
+  { soap_set_receiver_error(soap, tcp_error(soap), "TCP init failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+#ifdef WITH_IPV6
+  memset((void*)&hints, 0, sizeof(hints));
+  hints.ai_family = PF_UNSPEC;
+#ifdef WITH_UDP
+  if ((soap->omode & SOAP_IO_UDP))
+    hints.ai_socktype = SOCK_DGRAM;
+  else
+#endif
+    hints.ai_socktype = SOCK_STREAM;
+  hints.ai_flags = AI_PASSIVE;
+  soap->errmode = 2;
+  err = getaddrinfo(host, soap_int2s(soap, port), &hints, &addrinfo);
+  if (addrinfo)
+  { res = *addrinfo;
+    soap->peer = *((struct sockaddr_storage*)addrinfo->ai_addr);
+    soap->peerlen = addrinfo->ai_addrlen;
+    res.ai_addr = (struct sockaddr*)&soap->peer;
+    res.ai_addrlen = soap->peerlen;
+    freeaddrinfo(addrinfo);
+  }
+  if (err)
+  { soap_set_receiver_error(soap, gai_strerror(err), "getaddrinfo failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+  soap->master = socket(res.ai_family, res.ai_socktype, res.ai_protocol);
+#else
+#ifdef WITH_UDP
+  if ((soap->omode & SOAP_IO_UDP))
+    soap->master = (int)socket(AF_INET, SOCK_DGRAM, 0);
+  else
+#endif
+    soap->master = (int)socket(AF_INET, SOCK_STREAM, 0);
+#endif
+  soap->errmode = 0;
+  if (!soap_valid_socket(soap->master))
+  { soap->errnum = soap_socket_errno(soap->master);
+    soap_set_receiver_error(soap, tcp_error(soap), "socket failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+#ifdef WITH_UDP
+  if ((soap->omode & SOAP_IO_UDP))
+    soap->socket = soap->master;
+#endif
+#ifdef SOCKET_CLOSE_ON_EXEC
+#ifdef WIN32
+#ifndef UNDER_CE
+  SetHandleInformation((HANDLE)soap->master, HANDLE_FLAG_INHERIT, 0);
+#endif
+#else
+  fcntl(soap->master, F_SETFD, 1);
+#endif
+#endif
+#ifndef WITH_LEAN
+  if (soap->bind_flags && setsockopt((SOAP_SOCKET)soap->master, SOL_SOCKET, soap->bind_flags, (char*)&set, sizeof(int)))
+  { soap->errnum = soap_socket_errno(soap->master);
+    soap_set_receiver_error(soap, tcp_error(soap), "setsockopt failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+  if (((soap->imode | soap->omode) & SOAP_IO_KEEPALIVE) && setsockopt((SOAP_SOCKET)soap->master, SOL_SOCKET, SO_KEEPALIVE, (char*)&set, sizeof(int)))
+  { soap->errnum = soap_socket_errno(soap->master);
+    soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_KEEPALIVE failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+  if (setsockopt((SOAP_SOCKET)soap->master, SOL_SOCKET, SO_SNDBUF, (char*)&len, sizeof(int)))
+  { soap->errnum = soap_socket_errno(soap->master);
+    soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_SNDBUF failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+  if (setsockopt((SOAP_SOCKET)soap->master, SOL_SOCKET, SO_RCVBUF, (char*)&len, sizeof(int)))
+  { soap->errnum = soap_socket_errno(soap->master);
+    soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_RCVBUF failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+#ifdef TCP_NODELAY
+  if (!(soap->omode & SOAP_IO_UDP) && setsockopt((SOAP_SOCKET)soap->master, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int)))
+  { soap->errnum = soap_socket_errno(soap->master);
+    soap_set_receiver_error(soap, tcp_error(soap), "setsockopt TCP_NODELAY failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+#endif
+#endif
+#ifdef WITH_IPV6
+  soap->errmode = 0;
+  if (bind((SOAP_SOCKET)soap->master, res.ai_addr, res.ai_addrlen))
+  { soap->errnum = soap_socket_errno(soap->master);
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind to host\n"));
+    soap_closesock(soap);
+    soap_set_receiver_error(soap, tcp_error(soap), "bind failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }  
+#else
+  soap->peerlen = sizeof(soap->peer);
+  memset((void*)&soap->peer, 0, sizeof(soap->peer));
+  soap->peer.sin_family = AF_INET;
+  soap->errmode = 2;
+  if (host)
+  { if (soap->fresolve(soap, host, &soap->peer.sin_addr))
+    { soap_set_receiver_error(soap, tcp_error(soap), "get host by name failed in soap_bind()", SOAP_TCP_ERROR);
+      return SOAP_INVALID_SOCKET;
+    }
+  }
+  else
+    soap->peer.sin_addr.s_addr = htonl(INADDR_ANY);
+  soap->peer.sin_port = htons((short)port);
+  soap->errmode = 0;
+  if (bind((SOAP_SOCKET)soap->master, (struct sockaddr*)&soap->peer, soap->peerlen))
+  { soap->errnum = soap_socket_errno(soap->master);
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind to host\n"));
+    soap_closesock(soap);
+    soap_set_receiver_error(soap, tcp_error(soap), "bind failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+#endif
+  if (!(soap->omode & SOAP_IO_UDP) && listen((SOAP_SOCKET)soap->master, backlog))
+  { soap->errnum = soap_socket_errno(soap->master);
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind to host\n"));
+    soap_closesock(soap);
+    soap_set_receiver_error(soap, tcp_error(soap), "listen failed in soap_bind()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }  
+  return soap->master;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_poll(struct soap *soap)
+{ 
+#ifndef WITH_LEAN
+  struct timeval timeout;
+  fd_set rfd, sfd, xfd;
+  int r;
+  timeout.tv_sec = 0;
+  timeout.tv_usec = 0;
+#ifndef WIN32
+  if ((int)soap->socket >= (int)FD_SETSIZE)
+    return SOAP_FD_EXCEEDED;   /* Hint: MUST increase FD_SETSIZE */
+#endif
+  FD_ZERO(&rfd);
+  FD_ZERO(&sfd);
+  FD_ZERO(&xfd);
+  if (soap_valid_socket(soap->socket))
+  { FD_SET((SOAP_SOCKET)soap->socket, &rfd);
+    FD_SET((SOAP_SOCKET)soap->socket, &sfd);
+    FD_SET((SOAP_SOCKET)soap->socket, &xfd);
+    r = select((SOAP_SOCKET)(soap->socket + 1), &rfd, &sfd, &xfd, &timeout);
+    if (r > 0 && FD_ISSET((SOAP_SOCKET)soap->socket, &xfd))
+      r = -1;
+  }
+  else if (soap_valid_socket(soap->master))
+  { FD_SET((SOAP_SOCKET)soap->master, &sfd);
+    r = select((SOAP_SOCKET)(soap->master + 1), NULL, &sfd, NULL, &timeout);
+  }
+  else
+    return SOAP_OK;
+  if (r > 0)
+  {
+#ifdef WITH_OPENSSL
+    if (soap->imode & SOAP_ENC_SSL)
+    {
+      if (soap_valid_socket(soap->socket)
+       && FD_ISSET((SOAP_SOCKET)soap->socket, &sfd)
+       && (!FD_ISSET((SOAP_SOCKET)soap->socket, &rfd)
+        || SSL_peek(soap->ssl, soap->tmpbuf, 1) > 0))
+        return SOAP_OK;
+    }
+    else
+#endif
+      if (soap_valid_socket(soap->socket)
+       && FD_ISSET((SOAP_SOCKET)soap->socket, &sfd)
+       && (!FD_ISSET((SOAP_SOCKET)soap->socket, &rfd)
+        || recv((SOAP_SOCKET)soap->socket, soap->tmpbuf, 1, MSG_PEEK) > 0))
+        return SOAP_OK;
+  }
+  else if (r < 0)
+  { soap->errnum = soap_socket_errno(soap->master);
+    if ((soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) && soap_socket_errno(soap->master) != SOAP_EINTR)
+    { soap_set_receiver_error(soap, tcp_error(soap), "select failed in soap_poll()", SOAP_TCP_ERROR);
+      return soap->error = SOAP_TCP_ERROR;
+    }
+  }
+  else
+    soap->errnum = 0;
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Polling: other end down on socket=%d select=%d\n", soap->socket, r));
+  return SOAP_EOF;
+#else
+  return SOAP_OK;
+#endif
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_accept(struct soap *soap, int s, struct sockaddr *a, int *n)
+{ int fd;
+  fd = (int)accept((SOAP_SOCKET)s, a, (SOAP_SOCKLEN_T*)n);     /* portability note: see SOAP_SOCKLEN_T definition in stdsoap2.h */
+#ifdef SOCKET_CLOSE_ON_EXEC
+#ifdef WIN32
+#ifndef UNDER_CE
+  SetHandleInformation((HANDLE)fd, HANDLE_FLAG_INHERIT, 0);
+#endif
+#else
+  fcntl(fd, F_SETFD, FD_CLOEXEC);
+#endif
+#endif
+  return fd;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_accept(struct soap *soap)
+{ int n = (int)sizeof(soap->peer);
+#ifndef WITH_LEAN
+  int len = SOAP_BUFLEN;
+  int set = 1;
+#endif
+  soap->error = SOAP_OK;
+#ifdef WITH_UDP
+  if ((soap->omode & SOAP_IO_UDP))
+    return soap->socket = soap->master;
+#endif
+  memset((void*)&soap->peer, 0, sizeof(soap->peer));
+  soap->socket = SOAP_INVALID_SOCKET;
+  soap->errmode = 0;
+  soap->keep_alive = 0;
+  if (soap_valid_socket(soap->master))
+  { register int err;
+    for (;;)
+    { 
+#ifndef WITH_LEAN
+      if (soap->accept_timeout)
+      { struct timeval timeout;
+        fd_set fd;
+        if (soap->accept_timeout > 0)
+        { timeout.tv_sec = soap->accept_timeout;
+          timeout.tv_usec = 0;
+        }
+        else
+        { timeout.tv_sec = -soap->accept_timeout/1000000;
+          timeout.tv_usec = -soap->accept_timeout%1000000;
+        }
+#ifndef WIN32
+        if ((int)soap->socket >= (int)FD_SETSIZE)
+        { soap->error = SOAP_FD_EXCEEDED;
+          return SOAP_INVALID_SOCKET;  /* Hint: MUST increase FD_SETSIZE */
+        }
+#endif
+        FD_ZERO(&fd);
+        FD_SET((SOAP_SOCKET)soap->master, &fd);
+        for (;;)
+        { register int r = select((SOAP_SOCKET)(soap->master + 1), &fd, &fd, NULL, &timeout);
+          if (r > 0)
+            break;
+          if (!r)
+          { soap->errnum = 0;
+            soap_set_receiver_error(soap, "Timeout", "accept failed in soap_accept()", SOAP_TCP_ERROR);
+            return SOAP_INVALID_SOCKET;
+          }
+          r = soap_socket_errno(soap->master);
+          if (r != SOAP_EINTR)
+          { soap->errnum = r;
+            soap_closesock(soap);
+            soap_set_sender_error(soap, tcp_error(soap), "accept failed in soap_accept()", SOAP_TCP_ERROR);
+            return SOAP_INVALID_SOCKET;
+          }
+        }
+#if defined(WIN32)
+        { u_long nonblocking = 1;
+          ioctlsocket((SOAP_SOCKET)soap->master, FIONBIO, &nonblocking);
+        }
+#elif defined(VXWORKS)
+        { u_long nonblocking = 1;
+          ioctl((SOAP_SOCKET)soap->master, FIONBIO, (int)(&nonblocking));
+        }
+#else
+        fcntl((SOAP_SOCKET)soap->master, F_SETFL, fcntl((SOAP_SOCKET)soap->master, F_GETFL)|O_NONBLOCK);
+#endif
+      }
+      else
+#if defined(WIN32)
+      { u_long blocking = 0;
+        ioctlsocket((SOAP_SOCKET)soap->master, FIONBIO, &blocking);
+      }
+#elif defined(VXWORKS)
+      { u_long blocking = 0;
+        ioctl((SOAP_SOCKET)soap->master, FIONBIO, (int)(&blocking));
+      }
+#else
+        fcntl((SOAP_SOCKET)soap->master, F_SETFL, fcntl((SOAP_SOCKET)soap->master, F_GETFL)&~O_NONBLOCK);
+#endif
+#endif
+      soap->socket = soap->faccept(soap, soap->master, (struct sockaddr*)&soap->peer, &n);
+      soap->peerlen = (size_t)n;
+      if (soap_valid_socket(soap->socket))
+      {
+#ifdef WITH_IPV6
+/* Use soap->host to store the numeric form of the remote host */
+        getnameinfo((struct sockaddr*)&soap->peer, n, soap->host, sizeof(soap->host), NULL, 0, NI_NUMERICHOST | NI_NUMERICSERV); 
+        DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Accept socket %d from %s\n", soap->socket, soap->host));
+        soap->ip = 0; /* info stored in soap->peer and soap->host */
+        soap->port = 0; /* info stored in soap->peer and soap->host */
+#else
+        soap->ip = ntohl(soap->peer.sin_addr.s_addr);
+        soap->port = (int)ntohs(soap->peer.sin_port); /* does not return port number on some systems */
+        DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Accept socket %d at port %d from IP %d.%d.%d.%d\n", soap->socket, soap->port, (int)(soap->ip>>24)&0xFF, (int)(soap->ip>>16)&0xFF, (int)(soap->ip>>8)&0xFF, (int)soap->ip&0xFF));
+#endif
+#ifndef WITH_LEAN
+        if (soap->accept_flags == SO_LINGER)
+        { struct linger linger;
+          memset((void*)&linger, 0, sizeof(linger));
+          linger.l_onoff = 1;
+          linger.l_linger = 0;
+          if (setsockopt((SOAP_SOCKET)soap->socket, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(struct linger)))
+          { soap->errnum = soap_socket_errno(soap->socket);
+            soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_LINGER failed in soap_accept()", SOAP_TCP_ERROR);
+            soap_closesock(soap);
+            return SOAP_INVALID_SOCKET;
+          }
+        }
+        else if (soap->accept_flags && setsockopt((SOAP_SOCKET)soap->socket, SOL_SOCKET, soap->accept_flags, (char*)&set, sizeof(int)))
+        { soap->errnum = soap_socket_errno(soap->socket);
+          soap_set_receiver_error(soap, tcp_error(soap), "setsockopt failed in soap_accept()", SOAP_TCP_ERROR);
+          soap_closesock(soap);
+          return SOAP_INVALID_SOCKET;
+        }
+        if (((soap->imode | soap->omode) & SOAP_IO_KEEPALIVE) && setsockopt((SOAP_SOCKET)soap->socket, SOL_SOCKET, SO_KEEPALIVE, (char*)&set, sizeof(int)))
+        { soap->errnum = soap_socket_errno(soap->socket);
+          soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_KEEPALIVE failed in soap_accept()", SOAP_TCP_ERROR);
+          soap_closesock(soap);
+          return SOAP_INVALID_SOCKET;
+        }
+        if (setsockopt((SOAP_SOCKET)soap->socket, SOL_SOCKET, SO_SNDBUF, (char*)&len, sizeof(int)))
+        { soap->errnum = soap_socket_errno(soap->socket);
+          soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_SNDBUF failed in soap_accept()", SOAP_TCP_ERROR);
+          soap_closesock(soap);
+          return SOAP_INVALID_SOCKET;
+        }
+        if (setsockopt((SOAP_SOCKET)soap->socket, SOL_SOCKET, SO_RCVBUF, (char*)&len, sizeof(int)))
+        { soap->errnum = soap_socket_errno(soap->socket);
+          soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_RCVBUF failed in soap_accept()", SOAP_TCP_ERROR);
+          soap_closesock(soap);
+          return SOAP_INVALID_SOCKET;
+        }
+#ifdef TCP_NODELAY
+        if (!(soap->omode & SOAP_IO_UDP) && setsockopt((SOAP_SOCKET)soap->socket, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int)))
+        { soap->errnum = soap_socket_errno(soap->socket);
+          soap_set_receiver_error(soap, tcp_error(soap), "setsockopt TCP_NODELAY failed in soap_accept()", SOAP_TCP_ERROR);
+          soap_closesock(soap);
+          return SOAP_INVALID_SOCKET;
+        }
+#endif
+#endif
+        if (soap->accept_timeout)
+        {
+#if defined(WIN32)
+          u_long blocking = 0;
+          ioctlsocket((SOAP_SOCKET)soap->master, FIONBIO, &blocking);
+          ioctlsocket((SOAP_SOCKET)soap->socket, FIONBIO, &blocking);
+#elif defined(VXWORKS)
+          u_long blocking = 0;
+          ioctl((SOAP_SOCKET)soap->master, FIONBIO, (int)(&blocking));
+          ioctl((SOAP_SOCKET)soap->socket, FIONBIO, (int)(&blocking));
+#elif defined(PALM)
+          fcntl((SOAP_SOCKET)soap->master, F_SETFL, fcntl((SOAP_SOCKET)soap->master, F_GETFL,0)&~O_NONBLOCK);
+          fcntl((SOAP_SOCKET)soap->socket, F_SETFL, fcntl((SOAP_SOCKET)soap->socket, F_GETFL,0)&~O_NONBLOCK);
+#elif defined(SYMBIAN)
+          long blocking = 0;
+          ioctl((SOAP_SOCKET)soap->master, 0/*FIONBIO*/, &blocking);
+#else
+          fcntl((SOAP_SOCKET)soap->master, F_SETFL, fcntl((SOAP_SOCKET)soap->master, F_GETFL)&~O_NONBLOCK);
+          fcntl((SOAP_SOCKET)soap->socket, F_SETFL, fcntl((SOAP_SOCKET)soap->socket, F_GETFL)&~O_NONBLOCK);
+#endif
+        }
+        soap->keep_alive = (((soap->imode | soap->omode) & SOAP_IO_KEEPALIVE) != 0);
+        return soap->socket;
+      }
+      err = soap_socket_errno(soap->socket);
+      if (err != 0 && err != SOAP_EINTR && err != SOAP_EAGAIN)
+      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Accept failed from %s\n", soap->host));
+        soap->errnum = err;
+        soap_set_receiver_error(soap, tcp_error(soap), "accept failed in soap_accept()", SOAP_TCP_ERROR);
+        soap_closesock(soap);
+        return SOAP_INVALID_SOCKET;
+      }
+    }
+  }
+  else
+  { soap->errnum = 0;
+    soap_set_receiver_error(soap, tcp_error(soap), "no master socket in soap_accept()", SOAP_TCP_ERROR);
+    return SOAP_INVALID_SOCKET;
+  }
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_disconnect(struct soap *soap)
+{
+#ifdef WITH_OPENSSL
+  if (soap->ssl)
+  { int r, s = 0;
+    if (soap->session)
+      SSL_SESSION_free(soap->session);
+    if (*soap->host)
+    { soap->session = SSL_get1_session(soap->ssl);
+      if (soap->session)
+      { strcpy(soap->session_host, soap->host);
+        soap->session_port = soap->port;
+      }
+    }
+    r = SSL_shutdown(soap->ssl);
+    if (r != 1)
+    { s = ERR_get_error();
+      if (s)
+      { if (soap_valid_socket(soap->socket))
+        { soap->fshutdownsocket(soap, (SOAP_SOCKET)soap->socket, 1);
+          soap->socket = SOAP_INVALID_SOCKET;
+        }
+        r = SSL_shutdown(soap->ssl);
+      }
+    }
+    DBGLOG(TEST, if (s) SOAP_MESSAGE(fdebug, "Shutdown failed: %d\n", SSL_get_error(soap->ssl, r)));
+    SSL_free(soap->ssl);
+    soap->ssl = NULL;
+    if (s)
+      return SOAP_SSL_ERROR;
+    ERR_remove_state(0);
+  }
+#endif
+  if (soap_valid_socket(soap->socket) && !(soap->omode & SOAP_IO_UDP))
+  { soap->fshutdownsocket(soap, (SOAP_SOCKET)soap->socket, 2);
+    soap->fclosesocket(soap, (SOAP_SOCKET)soap->socket);
+    soap->socket = SOAP_INVALID_SOCKET;
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_closesocket(struct soap *soap, SOAP_SOCKET fd)
+{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Close socket %d\n", (int)fd));
+  return soap_closesocket(fd);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static int
+tcp_shutdownsocket(struct soap *soap, SOAP_SOCKET fd, int how)
+{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Shutdown socket %d how=%d\n", (int)fd, how));
+  return shutdown(fd, how);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_closesock(struct soap *soap)
+{ register int status = soap->error;
+  if (status == SOAP_EOF || status == SOAP_TCP_ERROR || status == SOAP_SSL_ERROR || !soap->keep_alive)
+  { if (soap->fclose && (soap->error = soap->fclose(soap)))
+      return soap->error;
+    soap->keep_alive = 0;
+  }
+#ifdef WITH_ZLIB
+  if (soap->zlib_state == SOAP_ZLIB_DEFLATE)
+    deflateEnd(&soap->d_stream);
+  else if (soap->zlib_state == SOAP_ZLIB_INFLATE)
+    inflateEnd(&soap->d_stream);
+  soap->zlib_state = SOAP_ZLIB_NONE;
+#endif
+  return soap->error = status;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+size_t
+SOAP_FMAC2
+soap_hash(register const char *s)
+{ register size_t h = 0;
+  while (*s)
+    h = 65599*h + *s++;
+  return h % SOAP_IDHASH;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+static void
+soap_init_pht(struct soap *soap)
+{ register int i;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Initializing pointer hashtable\n"));
+  soap->pblk = NULL;
+  soap->pidx = 0;
+  for (i = 0; i < (int)SOAP_PTRHASH; i++)
+    soap->pht[i] = NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap*
+SOAP_FMAC2
+soap_new1(soap_mode mode)
+{ return soap_new2(mode, mode);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap*
+SOAP_FMAC2
+soap_new()
+{ return soap_new2(SOAP_IO_DEFAULT, SOAP_IO_DEFAULT);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap*
+SOAP_FMAC2
+soap_new2(soap_mode imode, soap_mode omode)
+{ struct soap *soap = (struct soap*)malloc(sizeof(struct soap));
+  if (soap)
+    soap_init2(soap, imode, omode);
+  return soap;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_free(struct soap *soap)
+{ soap_done(soap);
+  free(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_del(struct soap *soap)
+{ free(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+static void
+soap_free_pht(struct soap *soap)
+{ register struct soap_pblk *pb, *next;
+  register int i;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free pointer hashtable\n"));
+  for (pb = soap->pblk; pb; pb = next)
+  { next = pb->next;
+    SOAP_FREE(soap, pb);
+  }
+  soap->pblk = NULL;
+  soap->pidx = 0;
+  for (i = 0; i < (int)SOAP_PTRHASH; i++)
+    soap->pht[i] = NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_embed(struct soap *soap, const void *p, const struct soap_array *a, int n, const char *tag, int type)
+{ register int i;
+  struct soap_plist *pp;
+  if (soap->version != 1)
+    soap->encoding = 1;
+  if (a)
+    i = soap_array_pointer_lookup(soap, p, a, n, type, &pp);
+  else
+    i = soap_pointer_lookup(soap, p, type, &pp);
+  if (i)
+  { if (soap_is_embedded(soap, pp)
+     || soap_is_single(soap, pp))
+      return 0;
+    soap_set_embedded(soap, pp);
+  }
+  return i;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_pointer_lookup(struct soap *soap, const void *p, int type, struct soap_plist **ppp)
+{ register struct soap_plist *pp;
+  *ppp = NULL;
+  if (p)
+  { for (pp = soap->pht[soap_hash_ptr(p)]; pp; pp = pp->next)
+    { if (pp->ptr == p && pp->type == type)
+      { *ppp = pp;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup location=%p type=%d id=%d\n", p, type, pp->id));
+        return pp->id;
+      }
+    }
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup location=%p type=%d: not found\n", p, type));
+  return 0;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_pointer_enter(struct soap *soap, const void *p, const struct soap_array *a, int n, int type, struct soap_plist **ppp)
+{ register size_t h;
+  register struct soap_plist *pp;
+  if (!soap->pblk || soap->pidx >= SOAP_PTRBLK)
+  { register struct soap_pblk *pb = (struct soap_pblk*)SOAP_MALLOC(soap, sizeof(struct soap_pblk));
+    if (!pb)
+    { soap->error = SOAP_EOM;
+      return 0;
+    }
+    pb->next = soap->pblk;
+    soap->pblk = pb;
+    soap->pidx = 0;
+  }
+  *ppp = pp = &soap->pblk->plist[soap->pidx++];
+  if (a)
+    h = soap_hash_ptr(a->__ptr);
+  else
+    h = soap_hash_ptr(p);
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Pointer enter location=%p array=%p size=%d dim=%d type=%d id=%d\n", p, a?a->__ptr:NULL, a?a->__size:0, n, type, soap->idnum+1));
+  pp->next = soap->pht[h];
+  pp->type = type;
+  pp->mark1 = 0;
+  pp->mark2 = 0;
+  pp->ptr = p;
+  pp->array = a;
+  soap->pht[h] = pp;
+  pp->id = ++soap->idnum;
+  return pp->id;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_array_pointer_lookup(struct soap *soap, const void *p, const struct soap_array *a, int n, int type, struct soap_plist **ppp)
+{ register struct soap_plist *pp;
+  *ppp = NULL;
+  if (!p || !a->__ptr)
+    return 0;
+  for (pp = soap->pht[soap_hash_ptr(a->__ptr)]; pp; pp = pp->next)
+  { if (pp->type == type && pp->array && pp->array->__ptr == a->__ptr)
+    { register int i;
+      for (i = 0; i < n; i++)
+        if (((const int*)&pp->array->__size)[i] != ((const int*)&a->__size)[i])
+          break;
+      if (i == n)
+      { *ppp = pp;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array lookup location=%p type=%d id=%d\n", a->__ptr, type, pp->id));
+        return pp->id;
+      }
+    }
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array lookup location=%p type=%d: not found\n", a->__ptr, type));
+  return 0;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_begin_count(struct soap *soap)
+{
+#ifndef WITH_LEANER
+  if ((soap->mode & SOAP_ENC_DIME) || (soap->omode & SOAP_ENC_DIME))
+    soap->mode = soap->omode | SOAP_IO_LENGTH | SOAP_ENC_DIME;
+  else
+#endif
+  { soap->mode = soap->omode;
+    if ((soap->mode & SOAP_IO) == SOAP_IO_STORE
+     || (((soap->mode & SOAP_IO) == SOAP_IO_CHUNK || (soap->mode & SOAP_ENC_XML))
+#ifndef WITH_LEANER
+      && !soap->fpreparesend
+#endif
+      ))
+      soap->mode &= ~SOAP_IO_LENGTH;
+    else
+      soap->mode |= SOAP_IO_LENGTH;
+  }
+#ifdef WITH_ZLIB
+  if ((soap->mode & SOAP_ENC_ZLIB) && (soap->mode & SOAP_IO) == SOAP_IO_FLUSH)
+  { if (!(soap->mode & SOAP_ENC_DIME))
+      soap->mode &= ~SOAP_IO_LENGTH;
+    if (soap->mode & SOAP_ENC_XML)
+      soap->mode |= SOAP_IO_BUFFER;
+    else
+      soap->mode |= SOAP_IO_STORE;
+  }
+#endif
+  if (!soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH))
+    soap->mode |= SOAP_XML_TREE;
+#ifndef WITH_LEANER
+  if ((soap->mode & SOAP_ENC_MTOM) && (soap->mode & SOAP_ENC_DIME))
+    soap->mode |= SOAP_ENC_MIME;
+  else
+    soap->mode &= ~SOAP_ENC_MTOM;
+  if (soap->mode & SOAP_ENC_MIME)
+    soap_select_mime_boundary(soap);
+  soap->dime.list = soap->dime.last;   /* keep track of last DIME attachment */
+#endif
+  soap->count = 0;
+  soap->ns = 0;
+  soap->null = 0;
+  soap->position = 0;
+  soap->mustUnderstand = 0;
+  soap->encoding = 0;
+  soap->part = SOAP_BEGIN;
+  soap->idnum = 0;
+  soap_clr_attr(soap);
+  soap_set_local_namespaces(soap);
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Begin count phase (socket=%d mode=0x%x count=%lu)\n", soap->socket, soap->mode, (unsigned long)soap->count));
+#ifndef WITH_LEANER
+  soap->dime.count = 0; /* count # of attachments */
+  soap->dime.size = 0; /* accumulate total size of attachments */
+  if (soap->fprepareinit && (soap->mode & SOAP_IO) != SOAP_IO_STORE)
+    return soap->error = soap->fprepareinit(soap);   
+#endif
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_end_count(struct soap *soap)
+{ 
+#ifndef WITH_LEANER
+  if (soap->fpreparefinal)
+    return soap->error = soap->fpreparefinal(soap);
+#endif
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of count phase\n"));
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_begin_send(struct soap *soap)
+{ soap->error = SOAP_OK;
+  soap->mode = soap->omode | (soap->mode & (SOAP_IO_LENGTH | SOAP_ENC_DIME));
+#ifdef WITH_ZLIB
+  if ((soap->mode & SOAP_ENC_ZLIB) && (soap->mode & SOAP_IO) == SOAP_IO_FLUSH)
+  { if (soap->mode & SOAP_ENC_XML)
+      soap->mode |= SOAP_IO_BUFFER;
+    else
+      soap->mode |= SOAP_IO_STORE;
+  }
+#endif
+#ifdef WITH_UDP
+  if ((soap->mode & SOAP_IO_UDP))
+  { soap->mode |= SOAP_ENC_XML;
+    if (soap->count > SOAP_BUFLEN)
+      return soap->error = SOAP_UDP_ERROR;
+  }
+#endif
+  if ((soap->mode & SOAP_IO) == SOAP_IO_FLUSH && soap_valid_socket(soap->socket))
+  { if (soap->count || (soap->mode & SOAP_IO_LENGTH) || (soap->mode & SOAP_ENC_XML))
+      soap->mode |= SOAP_IO_BUFFER;
+    else
+      soap->mode |= SOAP_IO_STORE;
+  }
+  soap->mode &= ~SOAP_IO_LENGTH;
+  if ((soap->mode & SOAP_IO) == SOAP_IO_STORE)
+    soap_new_block(soap);
+  if (!(soap->mode & SOAP_IO_KEEPALIVE))
+    soap->keep_alive = 0;
+  if (!soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH))
+    soap->mode |= SOAP_XML_TREE;
+#ifndef WITH_LEANER
+  if ((soap->mode & SOAP_ENC_MTOM) && (soap->mode & SOAP_ENC_DIME))
+  { soap->mode |= SOAP_ENC_MIME;
+    soap->mode &= ~SOAP_ENC_DIME;
+  }
+  else
+    soap->mode &= ~SOAP_ENC_MTOM;
+  if (soap->mode & SOAP_ENC_MIME)
+    soap_select_mime_boundary(soap);
+#ifdef WIN32
+#ifndef UNDER_CE
+#ifndef WITH_FASTCGI
+  if (!soap_valid_socket(soap->socket)) /* Set win32 stdout or soap->sendfd to BINARY, e.g. to support DIME */
+#ifdef __BORLANDC__
+    setmode((SOAP_SOCKET)soap->sendfd, O_BINARY);
+#else
+    _setmode((SOAP_SOCKET)soap->sendfd, _O_BINARY);
+#endif
+#endif
+#endif
+#endif
+#endif
+  if (soap->mode & SOAP_IO)
+  { soap->bufidx = 0;
+    soap->buflen = 0;
+  }
+  soap->chunksize = 0;
+  soap->ns = 0;
+  soap->null = 0;
+  soap->position = 0;
+  soap->mustUnderstand = 0;
+  soap->encoding = 0;
+  soap->idnum = 0;
+  soap->level = 0;
+  soap_clr_attr(soap);
+  soap_set_local_namespaces(soap);
+#ifdef WITH_ZLIB
+  soap->z_ratio_out = 1.0;
+  if ((soap->mode & SOAP_ENC_ZLIB) && soap->zlib_state != SOAP_ZLIB_DEFLATE)
+  {
+#ifdef WITH_GZIP
+    memcpy(soap->z_buf, "\37\213\10\0\0\0\0\0\0\377", 10);
+    soap->d_stream.next_out = (Byte*)soap->z_buf + 10;
+    soap->d_stream.avail_out = SOAP_BUFLEN - 10;
+    soap->z_crc = crc32(0L, NULL, 0);
+    if (deflateInit2(&soap->d_stream, soap->z_level, Z_DEFLATED, -MAX_WBITS, 8, Z_DEFAULT_STRATEGY) != Z_OK)
+#else
+    soap->d_stream.next_out = (Byte*)soap->z_buf;
+    soap->d_stream.avail_out = SOAP_BUFLEN;
+    if (deflateInit(&soap->d_stream, soap->z_level) != Z_OK)
+#endif
+      return soap->error = SOAP_ZLIB_ERROR;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflate initialized\n"));
+    soap->zlib_state = SOAP_ZLIB_DEFLATE;
+  }
+#endif
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Begin send phase (socket=%d mode=0x%x count=%lu)\n", soap->socket, soap->mode, (unsigned long)soap->count));
+  soap->part = SOAP_BEGIN;
+#ifndef WITH_LEANER
+  if (soap->fprepareinit && (soap->mode & SOAP_IO) == SOAP_IO_STORE)
+    soap->fprepareinit(soap);   
+#endif
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_embedded(struct soap *soap, const void *p, int t)
+{ struct soap_plist *pp;
+  if (soap_pointer_lookup(soap, p, t, &pp))
+  { pp->mark1 = 1;
+    pp->mark2 = 1;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded %p type=%d mark set to 1\n", p, t));
+  }
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_reference(struct soap *soap, const void *p, int t)
+{ struct soap_plist *pp;
+  if (!p || (soap->mode & SOAP_XML_TREE))
+    return 1;
+  if (soap_pointer_lookup(soap, p, t, &pp))
+  { if (pp->mark1 == 0)
+    { pp->mark1 = 2;
+      pp->mark2 = 2;
+    }
+  }
+  else if (soap_pointer_enter(soap, p, NULL, 0, t, &pp))
+  { pp->mark1 = 0;
+    pp->mark2 = 0;
+  }
+  else
+    return 1;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Reference %p type=%d (%d %d)\n", p, t, (int)pp->mark1, (int)pp->mark2));
+  return pp->mark1;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_array_reference(struct soap *soap, const void *p, const struct soap_array *a, int n, int t)
+{ register int i;
+  struct soap_plist *pp;
+  if (!p || !a->__ptr)
+    return 1;
+  i = soap_array_pointer_lookup(soap, p, a, n, t, &pp);
+  if (i)
+  { if (pp->mark1 == 0)
+    { pp->mark1 = 2;
+      pp->mark2 = 2;
+    }
+  }
+  else if (!soap_pointer_enter(soap, p, a, n, t, &pp))
+    return 1;
+  else
+  { pp->mark1 = 0;
+    pp->mark2 = 0;
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array reference %p ptr=%p dim=%d type=%d (%d %d)\n", p, a->__ptr, n, t, (int)pp->mark1, (int)pp->mark2));
+  return pp->mark1;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_embedded_id(struct soap *soap, int id, const void *p, int t)
+{ struct soap_plist *pp;
+  if (soap->mode & SOAP_XML_TREE)
+    return id;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded_id %p type=%d id=%d\n", p, t, id));
+  if (soap->version == 1 && soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH) && soap->part != SOAP_IN_HEADER)
+  { if (id < 0)
+    { id = soap_pointer_lookup(soap, p, t, &pp);
+      if (id)
+      { if (soap->mode & SOAP_IO_LENGTH)
+          pp->mark1 = 2;
+        else
+          pp->mark2 = 2;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded_id multiref id=%d %p type=%d = (%d %d)\n", id, p, t, (int)pp->mark1, (int)pp->mark2));
+      }
+      return -1;
+    }
+    return id;
+  }
+  if (id < 0)
+    id = soap_pointer_lookup(soap, p, t, &pp);
+  else if (id && !soap_pointer_lookup(soap, p, t, &pp))
+    return 0;
+  if (id && pp)
+  { if (soap->mode & SOAP_IO_LENGTH)
+      pp->mark1 = 1;
+    else
+      pp->mark2 = 1;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded_id embedded ref id=%d %p type=%d = (%d %d)\n", id, p, t, (int)pp->mark1, (int)pp->mark2));
+  }
+  return id;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_is_embedded(struct soap *soap, struct soap_plist *pp)
+{ if (!pp)
+    return 0;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Is embedded? %d %d\n", (int)pp->mark1, (int)pp->mark2));
+  if (soap->version == 1 && soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH) && soap->part != SOAP_IN_HEADER)
+  { if (soap->mode & SOAP_IO_LENGTH)
+      return pp->mark1 != 0;
+    return pp->mark2 != 0;
+  }
+  if (soap->mode & SOAP_IO_LENGTH)
+    return pp->mark1 == 1;
+  return pp->mark2 == 1;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_is_single(struct soap *soap, struct soap_plist *pp)
+{ if (soap->part == SOAP_IN_HEADER)
+    return 1;
+  if (!pp)
+    return 0;
+  if (soap->mode & SOAP_IO_LENGTH)
+    return pp->mark1 == 0;
+  return pp->mark2 == 0;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_embedded(struct soap *soap, struct soap_plist *pp)
+{ if (!pp)
+    return;
+  if (soap->mode & SOAP_IO_LENGTH)
+    pp->mark1 = 1;
+  else
+    pp->mark2 = 1;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_attachment(struct soap *soap, const char *tag, int id, const void *p, const struct soap_array *a, const char *aid, const char *atype, const char *aoptions, int n, const char *type, int t) 
+{ struct soap_plist *pp;
+  int i;
+  if (!p || !a->__ptr || (!aid && !atype))
+    return soap_element_id(soap, tag, id, p, a, n, type, t);
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Attachment tag='%s' id='%s' (%d) type='%s'\n", tag, aid?aid:"", id, atype?atype:""));
+  i = soap_array_pointer_lookup(soap, p, a, n, t, &pp);
+  if (!i)
+  { i = soap_pointer_enter(soap, p, a, n, t, &pp);
+    if (!i)
+    { soap->error = SOAP_EOM;
+      return -1;
+    }
+  }
+  if (id <= 0)
+    id = i;
+  if (!aid)
+  { sprintf(soap->tmpbuf, soap->dime_id_format, id);
+    aid = soap_strdup(soap, soap->tmpbuf);
+  }
+  /* Add MTOM xop:Include element when necessary */
+  /* TODO: this code to be obsoleted with new import/xop.h conventions */
+  if ((soap->mode & SOAP_ENC_MTOM) && strcmp(tag, "xop:Include"))
+  { if (soap_element_begin_out(soap, tag, 0, type)
+     || soap_element_href(soap, "xop:Include", 0, "href", aid)
+     || soap_element_end_out(soap, tag))
+      return soap->error;
+  }
+  else if (soap_element_href(soap, tag, 0, "href", aid))
+    return soap->error;
+  if (soap->mode & SOAP_IO_LENGTH)
+  { if (pp->mark1 != 3)
+    { struct soap_multipart *content;
+      if (soap->mode & SOAP_ENC_MTOM)
+        content = soap_new_multipart(soap, &soap->mime.first, &soap->mime.last, (char*)a->__ptr, a->__size);
+      else
+        content = soap_new_multipart(soap, &soap->dime.first, &soap->dime.last, (char*)a->__ptr, a->__size);
+      if (!content)
+      { soap->error = SOAP_EOM;
+        return -1;
+      }
+      if (!strncmp(aid, "cid:", 4)) /* RFC 2111 */
+      { if (soap->mode & SOAP_ENC_MTOM)
+        { char *s = (char*)soap_malloc(soap, strlen(aid) - 1);
+          if (s)
+          { *s = '<';
+            strcpy(s + 1, aid + 4);
+            strcat(s, ">");
+            content->id = s;
+          }
+        }
+        else
+          content->id = aid + 4;
+      }
+      else
+        content->id = aid;
+      content->type = atype;
+      content->options = aoptions;
+      content->encoding = SOAP_MIME_BINARY;
+      pp->mark1 = 3;
+    }
+  }
+  else
+    pp->mark2 = 3;
+  return -1;
+}
+#endif
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+static void
+soap_init_iht(struct soap *soap)
+{ register int i;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Initializing ID hashtable\n"));
+  for (i = 0; i < SOAP_IDHASH; i++)
+    soap->iht[i] = NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_1
+static void
+soap_free_iht(struct soap *soap)
+{ register int i;
+  register struct soap_ilist *ip, *p;
+  register struct soap_flist *fp, *fq;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free ID hashtable\n"));
+  for (i = 0; i < SOAP_IDHASH; i++)
+  { for (ip = soap->iht[i]; ip; ip = p)
+    { for (fp = ip->flist; fp; fp = fq)
+      { fq = fp->next;
+        SOAP_FREE(soap, fp);
+      }
+      p = ip->next;
+      SOAP_FREE(soap, ip);
+    }
+    soap->iht[i] = NULL;
+  }
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+struct soap_ilist *
+SOAP_FMAC2
+soap_lookup(struct soap *soap, const char *id)
+{ register struct soap_ilist *ip;
+  for (ip = soap->iht[soap_hash(id)]; ip; ip = ip->next)
+    if (!strcmp(ip->id, id))
+      return ip;
+  return NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+struct soap_ilist *
+SOAP_FMAC2
+soap_enter(struct soap *soap, const char *id)
+{ register size_t h;
+  register struct soap_ilist *ip;
+  ip = (struct soap_ilist*)SOAP_MALLOC(soap, sizeof(struct soap_ilist) + strlen(id));
+  if (ip)
+  { h = soap_hash(id);
+    strcpy(ip->id, id);
+    ip->next = soap->iht[h];
+    soap->iht[h] = ip;
+    return ip;
+  }
+  return NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void*
+SOAP_FMAC2
+soap_malloc(struct soap *soap, size_t n)
+{ register char *p;
+  if (!n)
+    return (void*)SOAP_NON_NULL;
+  if (!soap)
+    return SOAP_MALLOC(soap, n);
+  if (soap->fmalloc)
+    p = (char*)soap->fmalloc(soap, n);
+  else
+  { n += sizeof(short);
+    n += (-(long)n) & (sizeof(void*)-1); /* align at 4-, 8- or 16-byte boundary */
+    if (!(p = (char*)SOAP_MALLOC(soap, n + sizeof(void*) + sizeof(size_t))))
+    { soap->error = SOAP_EOM;
+      return NULL;
+    }
+    /* set the canary to detect corruption */
+    *(short*)(p + n - sizeof(short)) = (short)SOAP_CANARY;
+    /* keep chain of alloced cells for destruction */
+    *(void**)(p + n) = soap->alist;
+    *(size_t*)(p + n + sizeof(void*)) = n;
+    soap->alist = p + n;
+  }
+  soap->alloced = 1;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_MEM_DEBUG
+static void
+soap_init_mht(struct soap *soap)
+{ register int i;
+  for (i = 0; i < (int)SOAP_PTRHASH; i++)
+    soap->mht[i] = NULL;
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_MEM_DEBUG
+static void
+soap_free_mht(struct soap *soap)
+{ register int i;
+  register struct soap_mlist *mp, *mq;
+  for (i = 0; i < (int)SOAP_PTRHASH; i++)
+  { for (mp = soap->mht[i]; mp; mp = mq)
+    { mq = mp->next;
+      if (mp->live)
+        fprintf(stderr, "%s(%d): malloc() = %p not freed (memory leak or forgot to call soap_end()?)\n", mp->file, mp->line, mp->ptr);
+      free(mp);
+    }
+    soap->mht[i] = NULL;
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_MEM_DEBUG
+SOAP_FMAC1
+void*
+SOAP_FMAC2
+soap_track_malloc(struct soap *soap, const char *file, int line, size_t size)
+{ register void *p = malloc(size);
+  if (soap)
+  { register size_t h = soap_hash_ptr(p);
+    register struct soap_mlist *mp = (struct soap_mlist*)malloc(sizeof(struct soap_mlist));
+    if (soap->fdebug[SOAP_INDEX_TEST])
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): malloc(%lu) = %p\n", file, line, (unsigned long)size, p));
+    mp->next = soap->mht[h];
+    mp->ptr = p;
+    mp->file = file;
+    mp->line = line;
+    mp->live = 1;
+    soap->mht[h] = mp;
+  }
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_MEM_DEBUG
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_track_free(struct soap *soap, const char *file, int line, void *p)
+{ register size_t h = soap_hash_ptr(p);
+  register struct soap_mlist *mp;
+  for (mp = soap->mht[h]; mp; mp = mp->next)
+    if (mp->ptr == p)
+      break;
+  if (mp)
+  { if (mp->live)
+    { free(p);
+      if (soap->fdebug[SOAP_INDEX_TEST])
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): free(%p)\n", file, line, p));
+      mp->live = 0;
+    }
+    else
+      fprintf(stderr, "%s(%d): free(%p) double free of pointer malloced at %s(%d)\n", file, line, p, mp->file, mp->line);
+  }
+  else
+    fprintf(stderr, "%s(%d): free(%p) pointer not malloced\n", file, line, p);
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_MEM_DEBUG
+static void
+soap_track_unlink(struct soap *soap, const void *p)
+{ register size_t h = soap_hash_ptr(p);
+  register struct soap_mlist *mp;
+  for (mp = soap->mht[h]; mp; mp = mp->next)
+    if (mp->ptr == p)
+      break;
+  if (mp)
+    mp->live = 0;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_dealloc(struct soap *soap, void *p)
+{ if (soap_check_state(soap))
+    return;
+  if (p)
+  { register char **q;
+    for (q = (char**)&soap->alist; *q; q = *(char***)q)
+    { 
+      if (*(short*)(char*)(*q - sizeof(short)) != (short)SOAP_CANARY)
+      { fprintf(stderr, "Data corruption in dynamic allocation (see logs)\n");
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Data corruption:\n"));
+        DBGHEX(TEST, *q - 200, 200);
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "\n"));
+       soap->error = SOAP_MOE;
+        return;
+      }
+      if (p == (void*)(*q - *(size_t*)(*q + sizeof(void*))))
+      { *q = **(char***)q;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Freed data at %p\n", p));
+        SOAP_FREE(soap, p);
+        return;
+      }
+    }
+    soap_delete(soap, p);
+  }
+  else
+  { register char *q;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free all soap_malloc() data\n"));
+    while (soap->alist)
+    { q = (char*)soap->alist;
+      if (*(short*)(char*)(q - sizeof(short)) != (short)SOAP_CANARY)
+      { fprintf(stderr, "Data corruption in dynamic allocation (see logs)\n");
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Data corruption:\n"));
+        DBGHEX(TEST, q - 200, 200);
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "\n"));
+       soap->error = SOAP_MOE;
+        return;
+      }
+      soap->alist = *(void**)q;
+      q -= *(size_t*)(q + sizeof(void*));
+      SOAP_FREE(soap, q);
+    }
+  }
+  /* we must assume these were deallocated: */
+  soap->action = NULL;
+  soap->fault = NULL;
+  soap->header = NULL;
+  soap->userid = NULL;
+  soap->passwd = NULL;
+  soap->authrealm = NULL;
+#ifndef WITH_LEANER
+  soap_clr_mime(soap);
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_delete(struct soap *soap, void *p)
+{ register struct soap_clist **cp;
+  if (soap_check_state(soap))
+    return;
+  cp = &soap->clist;
+  if (p)
+  { while (*cp)
+    { if (p == (*cp)->ptr)
+      { register struct soap_clist *q = *cp;
+        *cp = q->next;
+        q->fdelete(q);
+        SOAP_FREE(soap, q);
+        return;
+      }
+      cp = &(*cp)->next;
+    }
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not dealloc data %p: address not in list\n", p));
+  }
+  else
+  { while (*cp)
+    { register struct soap_clist *q = *cp;
+      *cp = q->next;
+      q->fdelete(q);
+      SOAP_FREE(soap, q);
+    }
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+struct soap_clist *
+SOAP_FMAC2
+soap_link(struct soap *soap, void *p, int t, int n, void (*fdelete)(struct soap_clist*))
+{ register struct soap_clist *cp;
+  if ((cp = (struct soap_clist*)SOAP_MALLOC(soap, sizeof(struct soap_clist))))
+  { cp->next = soap->clist;
+    cp->type = t;
+    cp->size = n; 
+    cp->ptr = p;
+    cp->fdelete = fdelete;
+    soap->clist = cp;
+  }
+  return cp;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_unlink(struct soap *soap, const void *p)
+{ register char **q;
+  register struct soap_clist **cp;
+  if (!soap || !p)
+    return;
+  for (q = (char**)&soap->alist; *q; q = *(char***)q)
+  { if (p == (void*)(*q - *(size_t*)(*q + sizeof(void*))))
+    { *q = **(char***)q;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unlinked data %p\n", p));
+#ifdef SOAP_DEBUG
+      soap_track_unlink(soap, p);
+#endif
+      return;
+    }
+  }
+  for (cp = &soap->clist; *cp; cp = &(*cp)->next)
+  { if (p == (*cp)->ptr)
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unlinked class instance %p\n", p));
+      q = (char**)*cp;
+      *cp = (*cp)->next;
+      SOAP_FREE(soap, q);
+      return;
+    }
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_lookup_type(struct soap *soap, const char *id)
+{ register struct soap_ilist *ip;
+  if (id && *id)
+  { ip = soap_lookup(soap, id);
+    if (ip)
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup id='%s' type=%d\n", id, ip->type));
+      return ip->type;
+    }
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "lookup type id='%s' NOT FOUND! Need to get it from xsi:type\n", id));
+  return 0;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+void*
+SOAP_FMAC2
+soap_id_lookup(struct soap *soap, const char *id, void **p, int t, size_t n, unsigned int k)
+{ struct soap_ilist *ip;
+  void **q;
+  if (!p || !id || !*id)
+    return p;
+  ip = soap_lookup(soap, id); /* lookup pointer to hash table entry for string id */
+  if (!ip)
+  { ip = soap_enter(soap, id); /* new hash table entry for string id */
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding first href='%s' type=%d %p (%u bytes)\n", id, t, p, (unsigned int)n));
+    ip->type = t;
+    ip->size = n; 
+    ip->link = p;
+    ip->copy = NULL;
+    ip->flist = NULL;
+    ip->ptr = NULL;
+    ip->level = k;
+    *p = NULL;
+  }
+  else if (ip->ptr)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolved href='%s' type=%d location=%p (%u bytes)\n", id, t, ip->ptr, (unsigned int)n));
+    if (ip->type != t)
+    { strcpy(soap->id, id);
+      soap->error = SOAP_HREF;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Type incompatibility: id type=%d href type=%d\n", ip->type, t));
+      return NULL;
+    }
+    while (ip->level < k)
+    { q = (void**)soap_malloc(soap, sizeof(void*));  
+      if (!q)
+        return NULL;
+      *p = (void*)q;
+      p = q;
+      k--;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Descending one level...\n"));
+    }
+    *p = ip->ptr;
+  }
+  else if (ip->level > k)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving level %u pointers to href='%s'\n", ip->level, id));
+    while (ip->level > k)
+    { void *s, **r = &ip->link;
+      q = (void**)ip->link;
+      while (q)
+      { *r = (void*)soap_malloc(soap, sizeof(void*));
+        s = *q;
+        *q = *r;
+        r = (void**)*r;
+        q = (void**)s;
+      }
+      *r = NULL;
+      ip->size = n; 
+      ip->copy = NULL;
+      ip->level = ip->level - 1;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Descending one level...\n"));
+    }
+    q = (void**)ip->link;
+    ip->link = p;
+    *p = (void*)q;
+  }
+  else
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarded href='%s' type=%d location=%p (%u bytes)\n", id, t, p, (unsigned int)n));
+    while (ip->level < k)
+    { q = (void**)soap_malloc(soap, sizeof(void*));  
+      *p = q;
+      p = q;
+      k--;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Descending one level...\n"));
+    }
+    q = (void**)ip->link;
+    ip->link = p;
+    *p = (void*)q;
+  }
+  return p;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIDREF
+#ifndef PALM_2
+SOAP_FMAC1
+void*
+SOAP_FMAC2
+soap_id_forward(struct soap *soap, const char *href, void *p, size_t len, int st, int tt, size_t n, unsigned int k, void (*fcopy)(struct soap*, int, int, void*, size_t, const void*, size_t))
+{ struct soap_ilist *ip;
+  if (!p || !href || !*href)
+    return p;
+  ip = soap_lookup(soap, href); /* lookup pointer to hash table entry for string id */
+  if (!ip)
+  { ip = soap_enter(soap, href); /* new hash table entry for string id */
+    ip->type = st;
+    ip->size = n;
+    ip->link = NULL;
+    ip->copy = NULL;
+    ip->ptr = NULL;
+    ip->level = 0;
+    ip->flist = NULL;
+    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "New entry href='%s' type=%d size=%lu level=%d location=%p\n", href, st, (unsigned long)n, k, p));
+  }
+  else if (ip->type != st || (ip->level == k && ip->size != n))
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Type incompatibility id='%s' expect type=%d size=%lu level=%u got type=%d size=%lu\n", href, ip->type, (unsigned long)ip->size, k, st, (unsigned long)n));
+    strcpy(soap->id, href);
+    soap->error = SOAP_HREF;
+    return NULL;
+  }
+  if (fcopy || n < sizeof(void*) || *href != '#')
+  { register struct soap_flist *fp = (struct soap_flist*)SOAP_MALLOC(soap, sizeof(struct soap_flist));
+    if (!fp)
+    { soap->error = SOAP_EOM;
+      return NULL;
+    }
+    fp->next = ip->flist;
+    fp->type = tt;
+    fp->ptr = p;
+    fp->level = k;
+    fp->len = len;
+    if (fcopy)
+      fp->fcopy = fcopy;
+    else
+      fp->fcopy = soap_fcopy;
+    ip->flist = fp;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding type=%d (target type=%d) size=%lu location=%p level=%u len=%lu href='%s'\n", st, tt, (unsigned long)n, p, k, (unsigned long)len, href));
+  }
+  else
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding copying address %p for type=%d href='%s'\n", p, st, href));
+    *(void**)p = ip->copy;
+    ip->copy = p;
+  }
+  return p;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void*
+SOAP_FMAC2
+soap_id_enter(struct soap *soap, const char *id, void *p, int t, size_t n, unsigned int k, const char *type, const char *arrayType, void *(*finstantiate)(struct soap*, int, const char*, const char*, size_t*))
+{
+#ifndef WITH_NOIDREF
+  struct soap_ilist *ip;
+#endif
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Enter id='%s' type=%d loc=%p size=%lu level=%u\n", id, t, p, (unsigned long)n, k));
+  soap->alloced = 0;
+  if (!p)
+  { if (finstantiate)
+      p = finstantiate(soap, t, type, arrayType, &n);
+    else
+      p = soap_malloc(soap, n);
+    if (p)
+      soap->alloced = 1;
+  }
+#ifndef WITH_NOIDREF
+  if (!id || !*id)
+#endif
+    return p;
+#ifndef WITH_NOIDREF
+  ip = soap_lookup(soap, id); /* lookup pointer to hash table entry for string id */
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Lookup entry id='%s for location=%p'\n", id, p));
+  if (!ip)
+  { ip = soap_enter(soap, id); /* new hash table entry for string id */
+    ip->type = t;
+    ip->link = NULL;
+    ip->copy = NULL;
+    ip->flist = NULL;
+    ip->size = n;
+    ip->ptr = p;
+    ip->level = k;
+    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "New entry id='%s' type=%d size=%lu level=%u location=%p\n", id, t, (unsigned long)n, k, p));
+  }
+  else if ((ip->type != t || (ip->level == k && ip->size != n)) && (ip->copy || ip->flist))
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Type incompatibility id='%s' expect type=%d size=%lu level=%u got type=%d size=%lu\n", id, ip->type, (unsigned long)ip->size, k, t, (unsigned long)n));
+    strcpy(soap->id, id);
+    soap->error = SOAP_HREF;
+    return NULL;
+  }
+  else if (ip->ptr)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Multiply defined id='%s'\n", id));
+    strcpy(soap->id, id);
+    soap->error = SOAP_DUPLICATE_ID;
+    return NULL;
+  }
+  else 
+  { ip->size = n;
+    ip->ptr = p;
+    ip->level = k;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Update entry id='%s' type=%d location=%p size=%lu level=%u\n", id, t, p, (unsigned long)n, k));
+  }
+  return ip->ptr;
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_fcopy(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
+{ DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Copying data type=%d (target type=%d) %p -> %p (%lu bytes)\n", st, tt, q, p, (unsigned long)n));
+  memcpy(p, q, n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_end_send(struct soap *soap)
+{ 
+#ifndef WITH_LEANER
+  if (soap->dime.list)
+  { /* SOAP body referenced attachments must appear first */
+    soap->dime.last->next = soap->dime.first;
+    soap->dime.first = soap->dime.list->next;
+    soap->dime.list->next = NULL;
+    soap->dime.last = soap->dime.list;
+  }
+  if (soap_putdime(soap) || soap_putmime(soap))
+    return soap->error;
+  soap->mime.list = NULL;
+  soap->mime.first = NULL;
+  soap->mime.last = NULL;
+  soap->dime.list = NULL;
+  soap->dime.first = NULL;
+  soap->dime.last = NULL;
+#endif
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End send\n"));
+  if (soap->mode & SOAP_IO) /* need to flush the remaining data in buffer */
+  { if (soap_flush(soap))
+#ifdef WITH_ZLIB
+    { if (soap->mode & SOAP_ENC_ZLIB && soap->zlib_state == SOAP_ZLIB_DEFLATE)
+      { soap->zlib_state = SOAP_ZLIB_NONE;
+        deflateEnd(&soap->d_stream);
+      }
+      return soap->error;
+    }
+#else
+      return soap->error;
+#endif
+#ifdef WITH_ZLIB
+    if (soap->mode & SOAP_ENC_ZLIB)
+    { int r;
+      soap->d_stream.avail_in = 0;
+      do
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflating remainder\n"));
+        r = deflate(&soap->d_stream, Z_FINISH);
+        if (soap->d_stream.avail_out != SOAP_BUFLEN)
+        { if (soap_flush_raw(soap, soap->z_buf, SOAP_BUFLEN - soap->d_stream.avail_out))
+          { soap->zlib_state = SOAP_ZLIB_NONE;
+            deflateEnd(&soap->d_stream);
+            return soap->error;
+          }
+          soap->d_stream.next_out = (Byte*)soap->z_buf;
+          soap->d_stream.avail_out = SOAP_BUFLEN;
+        }
+      } while (r == Z_OK);
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflated %lu->%lu bytes\n", soap->d_stream.total_in, soap->d_stream.total_out));
+      soap->z_ratio_out = (float)soap->d_stream.total_out / (float)soap->d_stream.total_in;
+      soap->mode &= ~SOAP_ENC_ZLIB;
+      soap->zlib_state = SOAP_ZLIB_NONE;
+      if (deflateEnd(&soap->d_stream) != Z_OK || r != Z_STREAM_END)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unable to end deflate: %s\n", soap->d_stream.msg?soap->d_stream.msg:""));
+        return soap->error = SOAP_ZLIB_ERROR;
+      }
+#ifdef WITH_GZIP
+      soap->z_buf[0] = soap->z_crc & 0xFF;
+      soap->z_buf[1] = (soap->z_crc >> 8) & 0xFF;
+      soap->z_buf[2] = (soap->z_crc >> 16) & 0xFF;
+      soap->z_buf[3] = (soap->z_crc >> 24) & 0xFF;
+      soap->z_buf[4] = soap->d_stream.total_in & 0xFF;
+      soap->z_buf[5] = (soap->d_stream.total_in >> 8) & 0xFF;
+      soap->z_buf[6] = (soap->d_stream.total_in >> 16) & 0xFF;
+      soap->z_buf[7] = (soap->d_stream.total_in >> 24) & 0xFF;
+      if (soap_flush_raw(soap, soap->z_buf, 8))
+        return soap->error;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "gzip crc32=%lu\n", (unsigned long)soap->z_crc));
+#endif
+    }
+#endif
+    if ((soap->mode & SOAP_IO) == SOAP_IO_STORE)
+    { char *p;
+#ifndef WITH_NOHTTP
+      if (!(soap->mode & SOAP_ENC_XML))
+      { soap->mode--;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending buffered message of length %u\n", (unsigned int)soap->blist->size));
+        if (soap->status >= SOAP_POST)
+          soap->error = soap->fpost(soap, soap->endpoint, soap->host, soap->port, soap->path, soap->action, soap->blist->size);
+        else if (soap->status != SOAP_STOP)
+          soap->error = soap->fresponse(soap, soap->status, soap->blist->size);
+        if (soap->error || soap_flush(soap))
+          return soap->error;
+        soap->mode++;
+      }
+#endif
+      for (p = soap_first_block(soap); p; p = soap_next_block(soap))
+      { DBGMSG(SENT, p, soap_block_size(soap));
+        if ((soap->error = soap->fsend(soap, p, soap_block_size(soap))))
+        { soap_end_block(soap);
+          return soap->error;
+        }
+      }
+      soap_end_block(soap);
+    }
+#ifndef WITH_LEANER
+    else if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
+    { DBGMSG(SENT, "\r\n0\r\n\r\n", 7);
+      if ((soap->error = soap->fsend(soap, "\r\n0\r\n\r\n", 7)))
+        return soap->error;
+    }
+#endif
+  }
+#ifdef WITH_TCPFIN
+#ifdef WITH_OPENSSL
+  if (!soap->ssl && soap_valid_socket(soap->socket) && !soap->keep_alive && !(soap->omode & SOAP_IO_UDP))
+    soap->fshutdownsocket(soap, (SOAP_SOCKET)soap->socket, 1); /* Send TCP FIN */
+#else
+  if (soap_valid_socket(soap->socket) && !soap->keep_alive && !(soap->omode & SOAP_IO_UDP))
+    soap->fshutdownsocket(soap, (SOAP_SOCKET)soap->socket, 1); /* Send TCP FIN */
+#endif
+#endif
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of send phase\n"));
+  soap->omode &= ~SOAP_XML_SEC;
+  soap->count = 0;
+  soap->part = SOAP_END;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_end_recv(struct soap *soap)
+{ soap->part = SOAP_END;
+#ifndef WITH_LEANER
+  if ((soap->mode & SOAP_ENC_DIME) && soap_getdime(soap))
+    return soap->error;
+  soap->dime.list = soap->dime.first;
+  soap->dime.first = NULL;
+  soap->dime.last = NULL;
+  /* Check if MIME attachments and mime-post-check flag is set, if set call soap_resolve() and return */
+  if (soap->mode & SOAP_ENC_MIME)
+  { if (soap->mode & SOAP_MIME_POSTCHECK)
+    { soap_resolve(soap);
+      return SOAP_OK;
+    }
+    if (soap_getmime(soap))
+      return soap->error;
+  }
+  soap->mime.list = soap->mime.first;
+  soap->mime.first = NULL;
+  soap->mime.last = NULL;
+  soap->mime.boundary = NULL;
+  if (soap->xlist)
+  { struct soap_multipart *content;
+    for (content = soap->mime.list; content; content = content->next)
+      soap_resolve_attachment(soap, content);
+  }
+#endif
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "End of receive message ok\n"));
+#ifdef WITH_ZLIB
+  if (soap->mode & SOAP_ENC_ZLIB)
+  { soap->mode &= ~SOAP_ENC_ZLIB;
+    memcpy(soap->buf, soap->z_buf, SOAP_BUFLEN);
+    soap->bufidx = (char*)soap->d_stream.next_in - soap->z_buf;
+    soap->buflen = soap->z_buflen;
+    soap->zlib_state = SOAP_ZLIB_NONE;
+    if (inflateEnd(&soap->d_stream) != Z_OK)
+      return soap->error = SOAP_ZLIB_ERROR;
+#ifdef WITH_GZIP
+    if (soap->zlib_in == SOAP_ZLIB_GZIP)
+    { soap_wchar c;
+      short i;
+      for (i = 0; i < 8; i++)
+      { if ((int)(c = soap_getchar(soap)) == EOF)
+          return soap->error = SOAP_EOF;
+        soap->z_buf[i] = (char)c;
+      }
+      if (soap->z_crc != ((uLong)(unsigned char)soap->z_buf[0] | ((uLong)(unsigned char)soap->z_buf[1] << 8) | ((uLong)(unsigned char)soap->z_buf[2] << 16) | ((uLong)(unsigned char)soap->z_buf[3] << 24)))
+      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Gzip error: crc check failed, message corrupted? (crc32=%lu)\n", (unsigned long)soap->z_crc));
+        return soap->error = SOAP_ZLIB_ERROR;
+      }
+      if (soap->d_stream.total_out != ((uLong)(unsigned char)soap->z_buf[4] | ((uLong)(unsigned char)soap->z_buf[5] << 8) | ((uLong)(unsigned char)soap->z_buf[6] << 16) | ((uLong)(unsigned char)soap->z_buf[7] << 24)))
+      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Gzip error: incorrect message length\n"));
+        return soap->error = SOAP_ZLIB_ERROR;
+      }
+    }
+#endif
+  }
+#endif
+  if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
+    while ((int)soap_getchar(soap) != EOF) /* advance to last chunk */
+      ;
+  if (soap->fdisconnect && (soap->error = soap->fdisconnect(soap)))
+    return soap->error;
+#ifndef WITH_NOIDREF
+  if (soap_resolve(soap))
+    return soap->error;
+#endif
+#ifndef WITH_LEANER
+  if (soap->xlist)
+  { if (soap->mode & SOAP_ENC_MTOM)
+      return soap->error = SOAP_MIME_HREF;
+    return soap->error = SOAP_DIME_HREF;
+  }
+#endif
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_free_temp(struct soap *soap)
+{ register struct Namespace *ns;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free namespace stack\n"));
+  while (soap->nlist)
+  { register struct soap_nlist *np = soap->nlist->next;
+    SOAP_FREE(soap, soap->nlist);
+    soap->nlist = np;
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free any remaining temp blocks\n"));
+  while (soap->blist)
+    soap_end_block(soap);
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free attribute storage\n"));
+  while (soap->attributes)
+  { register struct soap_attribute *tp = soap->attributes->next;
+    if (soap->attributes->value)
+      SOAP_FREE(soap, soap->attributes->value);
+    SOAP_FREE(soap, soap->attributes);
+    soap->attributes = tp;
+  }
+#ifdef WITH_FAST
+  if (soap->labbuf)
+    SOAP_FREE(soap, soap->labbuf);
+  soap->labbuf = NULL;
+  soap->lablen = 0;
+  soap->labidx = 0;
+#endif
+  ns = soap->local_namespaces;
+  if (ns)
+  { for (; ns->id; ns++)
+    { if (ns->out)
+      { if (soap->encodingStyle == ns->out)
+          soap->encodingStyle = SOAP_STR_EOS;
+        SOAP_FREE(soap, ns->out);
+        ns->out = NULL;
+      }
+      if (soap->encodingStyle == ns->ns)
+        soap->encodingStyle = SOAP_STR_EOS;
+    }
+    SOAP_FREE(soap, soap->local_namespaces);
+    soap->local_namespaces = NULL;
+  }
+#ifndef WITH_LEANER
+  while (soap->xlist)
+  { struct soap_xlist *xp = soap->xlist->next;
+    SOAP_FREE(soap, soap->xlist);
+    soap->xlist = xp;
+  }
+#endif
+#ifndef WITH_NOIDREF
+  soap_free_pht(soap);
+  soap_free_iht(soap);
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+static void
+soap_init_logs(struct soap *soap)
+{ int i;
+  for (i = 0; i < SOAP_MAXLOGS; i++)
+  { soap->logfile[i] = NULL;
+    soap->fdebug[i] = NULL;
+  }
+}
+#endif
+
+/******************************************************************************/
+#if !defined(WITH_LEAN) || defined(SOAP_DEBUG)
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_open_logfile(struct soap *soap, int i)
+{ if (soap->logfile[i])
+    soap->fdebug[i] = fopen(soap->logfile[i], i < 2 ? "ab" : "a");
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+static void
+soap_close_logfile(struct soap *soap, int i)
+{ if (soap->fdebug[i])
+  { fclose(soap->fdebug[i]);
+    soap->fdebug[i] = NULL;
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_close_logfiles(struct soap *soap)
+{ int i;
+  for (i = 0; i < SOAP_MAXLOGS; i++)
+    soap_close_logfile(soap, i);
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+static void
+soap_set_logfile(struct soap *soap, int i, const char *logfile)
+{ char *s = NULL;
+  soap_close_logfile(soap, i);
+  if (soap->logfile[i])
+    SOAP_FREE(soap, (void*)soap->logfile[i]);
+  if (logfile)
+    if ((s = (char*)SOAP_MALLOC(soap, strlen(logfile) + 1)))
+      strcpy(s, logfile);
+  soap->logfile[i] = s;
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_recv_logfile(struct soap *soap, const char *logfile)
+{ soap_set_logfile(soap, SOAP_INDEX_RECV, logfile);
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_sent_logfile(struct soap *soap, const char *logfile)
+{ soap_set_logfile(soap, SOAP_INDEX_SENT, logfile);
+}
+#endif
+
+/******************************************************************************/
+#ifdef SOAP_DEBUG
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_test_logfile(struct soap *soap, const char *logfile)
+{ soap_set_logfile(soap, SOAP_INDEX_TEST, logfile);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap*
+SOAP_FMAC2
+soap_copy(struct soap *soap)
+{ return soap_copy_context((struct soap*)malloc(sizeof(struct soap)), soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap*
+SOAP_FMAC2
+soap_copy_context(struct soap *copy, struct soap *soap)
+{ if (soap_check_state(soap))
+    return NULL;
+  if (copy)
+  { register struct soap_plugin *p;
+    memcpy(copy, soap, sizeof(struct soap));
+    copy->state = SOAP_COPY;
+    copy->error = SOAP_OK;
+    copy->userid = NULL;
+    copy->passwd = NULL;
+    copy->nlist = NULL;
+    copy->blist = NULL;
+    copy->clist = NULL;
+    copy->alist = NULL;
+    copy->attributes = NULL;
+    copy->labbuf = NULL;
+    copy->lablen = 0;
+    copy->labidx = 0;
+#ifdef SOAP_DEBUG
+    soap_init_mht(copy);
+#endif
+    copy->local_namespaces = NULL;
+#ifndef WITH_NOIDREF
+    soap_init_iht(copy);
+    soap_init_pht(copy);
+#endif
+    copy->header = NULL;
+    copy->fault = NULL;
+    copy->action = NULL;
+#ifndef WITH_LEAN
+#ifdef WITH_COOKIES
+    copy->cookies = soap_copy_cookies(copy, soap);
+#else
+    copy->cookies = NULL;
+#endif
+#endif
+#ifdef SOAP_DEBUG
+    soap_init_logs(copy);
+    soap_set_recv_logfile(copy, soap->logfile[SOAP_INDEX_RECV]);
+    soap_set_sent_logfile(copy, soap->logfile[SOAP_INDEX_SENT]);
+    soap_set_test_logfile(copy, soap->logfile[SOAP_INDEX_TEST]);
+#endif
+    copy->plugins = NULL;
+    for (p = soap->plugins; p; p = p->next)
+    { register struct soap_plugin *q = (struct soap_plugin*)SOAP_MALLOC(copy, sizeof(struct soap_plugin));
+      if (!q)
+        return NULL;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying plugin '%s'\n", p->id));
+      *q = *p;
+      if (p->fcopy && (soap->error = p->fcopy(copy, q, p)))
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not copy plugin '%s'\n", p->id));
+        SOAP_FREE(copy, q);
+        return NULL;
+      }
+      q->next = copy->plugins;
+      copy->plugins = q;
+    }
+  }
+  else
+    soap->error = SOAP_EOM;
+  return copy;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_copy_stream(struct soap *copy, struct soap *soap)
+{ copy->mode = soap->mode;
+  copy->imode = soap->imode;
+  copy->omode = soap->omode;
+  copy->socket = soap->socket;
+  copy->recv_timeout = soap->recv_timeout;
+  copy->send_timeout = soap->send_timeout;
+#if defined(__cplusplus) && !defined(WITH_LEAN)
+  copy->os = soap->os;
+  copy->is = soap->is;
+#endif
+  copy->sendfd = soap->sendfd;
+  copy->recvfd = soap->recvfd;
+  copy->bufidx = soap->bufidx;
+  copy->buflen = soap->buflen;
+  copy->ahead = soap->ahead;
+  copy->cdata = soap->cdata;
+  copy->chunksize = soap->chunksize;
+  copy->chunkbuflen = soap->chunkbuflen;
+  copy->keep_alive = soap->keep_alive;
+  copy->max_keep_alive = soap->max_keep_alive;
+#ifndef WITH_NOIO
+  copy->peer = soap->peer;
+  copy->peerlen = soap->peerlen;
+#endif
+#ifdef WITH_OPENSSL
+  copy->bio = soap->bio;
+  copy->ssl = soap->ssl;
+  copy->ctx = soap->ctx;
+#endif
+#ifdef WITH_ZLIB
+  copy->zlib_state = soap->zlib_state;
+  copy->zlib_in = soap->zlib_in;
+  copy->zlib_out = soap->zlib_out;
+  copy->d_stream = soap->d_stream;
+  copy->z_buflen = soap->z_buflen;
+  copy->z_level = soap->z_level;
+  copy->z_crc = soap->z_crc;
+  copy->z_ratio_in = soap->z_ratio_in;
+  copy->z_ratio_out = soap->z_ratio_out;
+  memcpy(copy->z_buf, soap->z_buf, sizeof(soap->z_buf));
+#endif
+  memcpy(copy->buf, soap->buf, sizeof(soap->buf));
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_init(struct soap *soap)
+{ soap->state = SOAP_INIT;
+  soap->version = 0;
+  soap_imode(soap, SOAP_IO_DEFAULT);
+  soap_omode(soap, SOAP_IO_DEFAULT);
+  soap->plugins = NULL;
+  soap->user = NULL;
+  soap->userid = NULL;
+  soap->passwd = NULL;
+#ifndef WITH_NOHTTP
+  soap->fpost = http_post;
+  soap->fget = http_get;
+  soap->fform = NULL;
+  soap->fposthdr = http_post_header;
+  soap->fresponse = http_response;
+  soap->fparse = http_parse;
+  soap->fparsehdr = http_parse_header;
+#endif
+  soap->fheader = NULL;
+  soap->fconnect = NULL;
+  soap->fdisconnect = NULL;
+#ifndef WITH_NOIO
+#ifndef WITH_IPV6
+  soap->fresolve = tcp_gethost;
+#else
+  soap->fresolve = NULL;
+#endif
+  soap->faccept = tcp_accept;
+  soap->fopen = tcp_connect;
+  soap->fclose = tcp_disconnect;
+  soap->fclosesocket = tcp_closesocket;
+  soap->fshutdownsocket = tcp_shutdownsocket;
+  soap->fsend = fsend;
+  soap->frecv = frecv;
+  soap->fpoll = soap_poll;
+#else
+  soap->fopen = NULL;
+  soap->fclose = NULL;
+  soap->fpoll = NULL;
+#endif
+  soap->fseterror = NULL;
+  soap->fignore = NULL;
+  soap->fserveloop = NULL;
+  soap->fplugin = fplugin;
+  soap->fmalloc = NULL;
+#ifndef WITH_LEANER
+  soap->fprepareinit = NULL;
+  soap->fpreparesend = NULL;
+  soap->fpreparerecv = NULL;
+  soap->fpreparefinal = NULL;
+  soap->fdimereadopen = NULL;
+  soap->fdimewriteopen = NULL;
+  soap->fdimereadclose = NULL;
+  soap->fdimewriteclose = NULL;
+  soap->fdimeread = NULL;
+  soap->fdimewrite = NULL;
+  soap->fmimereadopen = NULL;
+  soap->fmimewriteopen = NULL;
+  soap->fmimereadclose = NULL;
+  soap->fmimewriteclose = NULL;
+  soap->fmimeread = NULL;
+  soap->fmimewrite = NULL;
+#endif
+  soap->float_format = "%G";
+  soap->double_format = "%lG";
+  soap->dime_id_format = "cid:id%d"; /* default DIME id format */
+  soap->http_version = "1.1";
+  soap->proxy_http_version = "1.0";
+  soap->http_content = NULL;
+  soap->actor = NULL;
+  soap->max_keep_alive = SOAP_MAXKEEPALIVE;
+  soap->keep_alive = 0;
+  soap->recv_timeout = 0;
+  soap->send_timeout = 0;
+  soap->connect_timeout = 0;
+  soap->accept_timeout = 0;
+  soap->socket_flags = 0;
+  soap->connect_flags = 0;
+  soap->bind_flags = 0;
+  soap->accept_flags = 0;
+  soap->ip = 0;
+  soap->labbuf = NULL;
+  soap->lablen = 0;
+  soap->labidx = 0;
+  soap->encodingStyle = SOAP_STR_EOS;
+#ifndef WITH_NONAMESPACES
+  soap->namespaces = namespaces;
+#else
+  soap->namespaces = NULL;
+#endif
+  soap->local_namespaces = NULL;
+  soap->nlist = NULL;
+  soap->blist = NULL;
+  soap->clist = NULL;
+  soap->alist = NULL;
+  soap->attributes = NULL;
+  soap->header = NULL;
+  soap->fault = NULL;
+  soap->master = SOAP_INVALID_SOCKET;
+  soap->socket = SOAP_INVALID_SOCKET;
+  soap->os = NULL;
+  soap->is = NULL;
+#ifndef WITH_LEANER
+  soap->dom = NULL;
+  soap->dime.list = NULL;
+  soap->dime.first = NULL;
+  soap->dime.last = NULL;
+  soap->mime.list = NULL;
+  soap->mime.first = NULL;
+  soap->mime.last = NULL;
+  soap->mime.boundary = NULL;
+  soap->mime.start = NULL;
+  soap->xlist = NULL;
+#endif
+#ifndef UNDER_CE
+  soap->recvfd = 0;
+  soap->sendfd = 1;
+#else
+  soap->recvfd = stdin;
+  soap->sendfd = stdout;
+#endif 
+  soap->host[0] = '\0';
+  soap->port = 0;
+  soap->action = NULL;
+  soap->proxy_host = NULL;
+  soap->proxy_port = 8080;
+  soap->proxy_userid = NULL;
+  soap->proxy_passwd = NULL;
+  soap->authrealm = NULL;
+  soap->prolog = NULL;
+#ifdef WITH_OPENSSL
+  if (!ssl_init_done)
+    soap_ssl_init();
+  soap->fsslauth = ssl_auth_init;
+  soap->fsslverify = ssl_verify_callback;
+  soap->bio = NULL;
+  soap->ssl = NULL;
+  soap->ctx = NULL;
+  soap->ssl_flags = SOAP_SSL_DEFAULT;
+  soap->keyfile = NULL;
+  soap->password = NULL;
+  soap->dhfile = NULL;
+  soap->cafile = NULL;
+  soap->capath = NULL;
+  soap->crlfile = NULL;
+  soap->randfile = NULL;
+  soap->session = NULL;
+#endif
+#ifdef WITH_ZLIB
+  soap->zlib_state = SOAP_ZLIB_NONE;
+  soap->zlib_in = SOAP_ZLIB_NONE;
+  soap->zlib_out = SOAP_ZLIB_NONE;
+  soap->d_stream.zalloc = NULL;
+  soap->d_stream.zfree = NULL;
+  soap->d_stream.opaque = NULL;
+  soap->z_level = 6;
+#endif
+#ifndef WITH_LEAN
+  soap->c14ninclude = NULL;
+  soap->c14nexclude = NULL;
+  soap->cookies = NULL;
+  soap->cookie_domain = NULL;
+  soap->cookie_path = NULL;
+  soap->cookie_max = 32;
+#endif
+#ifdef SOAP_DEBUG
+  soap_init_mht(soap);
+  soap_init_logs(soap);
+#endif
+#ifdef WMW_RPM_IO
+  soap->rpmreqid = NULL;
+#endif
+#ifdef PALM
+  palmNetLibOpen();
+#endif
+#ifndef WITH_NOIDREF
+  soap_init_iht(soap);
+  soap_init_pht(soap);
+#endif
+#ifdef SOAP_DEBUG
+  soap_set_recv_logfile(soap, "RECV.log");
+  soap_set_sent_logfile(soap, "SENT.log");
+  soap_set_test_logfile(soap, "TEST.log");
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Initializing context\n"));
+#endif
+  soap_begin(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_init1(struct soap *soap, soap_mode mode)
+{ soap_init2(soap, mode, mode);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_init2(struct soap *soap, soap_mode imode, soap_mode omode)
+{ soap_init(soap);
+  soap_imode(soap, imode);
+  soap_omode(soap, omode);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_begin(struct soap *soap)
+{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Reinitializing context\n"));
+  if (!soap->keep_alive)
+  { soap->buflen = 0;
+    soap->bufidx = 0;
+  }
+  soap->keep_alive = (((soap->imode | soap->omode) & SOAP_IO_KEEPALIVE) != 0);
+  soap->null = 0;
+  soap->position = 0;
+  soap->encoding = 0;
+  soap->mustUnderstand = 0;
+  soap->mode = 0;
+  soap->ns = 0;
+  soap->part = SOAP_END;
+  soap->alloced = 0;
+  soap->count = 0;
+  soap->length = 0;
+  soap->cdata = 0;
+  soap->error = SOAP_OK;
+  soap->peeked = 0;
+  soap->ahead = 0;
+  soap->idnum = 0;
+  soap->level = 0;
+  soap->endpoint[0] = '\0';
+#ifndef WITH_LEANER
+  soap->dime.chunksize = 0;
+  soap->dime.buflen = 0;
+#endif
+  soap_free_temp(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_end(struct soap *soap)
+{ register struct soap_clist *cp;
+  if (soap_check_state(soap))
+    return;
+  soap_free_temp(soap);
+  soap_dealloc(soap, NULL);
+  while (soap->clist)
+  { cp = soap->clist->next;
+    SOAP_FREE(soap, soap->clist);
+    soap->clist = cp;
+  }
+  soap_closesock(soap);
+#ifdef SOAP_DEBUG
+  soap_close_logfiles(soap);
+#endif
+#ifdef PALM
+  palmNetLibClose();
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_namespaces(struct soap *soap, const struct Namespace *p)
+{ register struct Namespace *ns = soap->local_namespaces;
+  register struct soap_nlist *np, *nq, *nr;
+  register unsigned int level = soap->level;
+  soap->namespaces = p;
+  soap->local_namespaces = NULL;
+  soap_set_local_namespaces(soap);
+  /* reverse the namespace list */
+  np = soap->nlist;
+  soap->nlist = NULL;
+  if (np)
+  { nq = np->next;
+    np->next = NULL;
+    while (nq)
+    { nr = nq->next;
+      nq->next = np;
+      np = nq;
+      nq = nr;
+    }
+  }
+  /* then push on new stack */
+  while (np)
+  { register const char *s;
+    soap->level = np->level; /* preserve element nesting level */
+    s = np->ns;
+    if (!s && np->index >= 0 && ns)
+    { s = ns[np->index].out;
+      if (!s)
+        s = ns[np->index].ns;
+    }
+    if (s && soap_push_namespace(soap, np->id, s))
+      return soap->error;
+    nq = np;
+    np = np->next;
+    SOAP_FREE(soap, nq);
+  }
+  if (ns)
+  { register int i;
+    for (i = 0; ns[i].id; i++)
+    { if (ns[i].out)
+      { SOAP_FREE(soap, ns[i].out);
+        ns[i].out = NULL;
+      }
+    }
+    SOAP_FREE(soap, ns);
+  }
+  soap->level = level; /* restore level */
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_local_namespaces(struct soap *soap)
+{ if (soap->namespaces && !soap->local_namespaces)
+  { register const struct Namespace *ns1;
+    register struct Namespace *ns2;
+    register size_t n = 1;
+    for (ns1 = soap->namespaces; ns1->id; ns1++)
+      n++;
+    n *= sizeof(struct Namespace);
+    ns2 = (struct Namespace*)SOAP_MALLOC(soap, n);
+    if (ns2)
+    { memcpy(ns2, soap->namespaces, n);
+      if (ns2[0].ns)
+      { if (!strcmp(ns2[0].ns, soap_env1))
+          soap->version = 1;
+        else
+          soap->version = 2;
+      }
+      soap->local_namespaces = ns2;
+    }
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+#ifndef PALM_1
+SOAP_FMAC1
+const char *
+SOAP_FMAC2
+soap_strsearch(const char *big, const char *little)
+{ size_t n = strlen(little);
+  const char *s = big;
+  while (s) 
+  { if (!strncmp(s, little, n) && (s[n] == '\0' || s[n] == ' '))
+      return s;
+    s = strchr(s, ' ');
+    if (s)
+      s++;
+  }
+  return NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap_nlist *
+SOAP_FMAC2
+soap_lookup_ns(struct soap *soap, const char *tag, size_t n)
+{ register struct soap_nlist *np;
+  for (np = soap->nlist; np; np = np->next)
+  { if (!strncmp(np->id, tag, n) && !np->id[n])
+      return np;
+  }
+  return NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+static struct soap_nlist *
+soap_push_ns(struct soap *soap, const char *id, const char *ns, short utilized)
+{ register struct soap_nlist *np;
+  size_t n, k;
+  if (soap_strsearch(soap->c14nexclude, id))
+    return NULL;
+  if (!utilized)
+  { for (np = soap->nlist; np; np = np->next)
+    { if (!strcmp(np->id, id) && (!np->ns || !strcmp(np->ns, ns)))
+        break;
+    }
+    if (np)
+    { if ((np->level < soap->level || !np->ns) && np->index == 1)
+        utilized = 1;
+      else
+        return NULL;
+    }
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Adding namespace binding (level=%u) '%s' '%s' utilized=%d\n", soap->level, id, ns?ns:"(null)", utilized));
+  n = strlen(id);
+  if (ns)
+    k = strlen(ns);
+  else
+    k = 0;
+  np = (struct soap_nlist*)SOAP_MALLOC(soap, sizeof(struct soap_nlist) + n + k + 1);
+  if (!np)
+  { soap->error = SOAP_EOM;
+    return NULL;
+  }
+  np->next = soap->nlist;
+  soap->nlist = np;
+  strcpy(np->id, id);
+  if (ns)
+  { np->ns = np->id + n + 1;
+    strcpy(np->ns, ns);
+  }
+  else
+    np->ns = NULL;
+  np->level = soap->level;
+  np->index = utilized;
+  return np;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+static void
+soap_utilize_ns(struct soap *soap, const char *tag, size_t n)
+{ register struct soap_nlist *np = soap_lookup_ns(soap, tag, n);
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Utilizing namespace of '%s'\n", tag));
+  if (np)
+  { if (np->index == 0)
+      soap_push_ns(soap, np->id, np->ns, 1);
+  }
+  else if (strncmp(tag, "xml", 3))
+  { strncpy(soap->tmpbuf, tag, n);
+    soap->tmpbuf[n] = '\0';
+    soap_push_ns(soap, soap->tmpbuf, NULL, 1);
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+static void
+soap_pop_ns(struct soap *soap)
+{ soap_pop_namespace(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element(struct soap *soap, const char *tag, int id, const char *type)
+{
+#ifdef WITH_XMLNS
+  register const char *s;
+#endif
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element begin tag='%s' id='%d' type='%s'\n", tag, id, type?type:""));
+#ifdef WITH_DOM
+  if (soap->part == SOAP_BEGIN_SECURITY && (soap->mode & SOAP_XML_CANONICAL) && !(soap->mode & SOAP_DOM_ASIS))
+  { register struct soap_nlist *np;
+    /* wsu:Id found: clear xmlns renderings, so re-emit them for exc-c14n */
+    for (np = soap->nlist; np; np = np->next)
+    { if (np->index == 2)
+        np->index = 0;
+    }
+  }
+  if (soap->mode & SOAP_XML_DOM)
+  { register struct soap_dom_element *elt = (struct soap_dom_element*)soap_malloc(soap, sizeof(struct soap_dom_element));
+    if (!elt)
+      return soap->error = SOAP_EOM;
+    elt->soap = soap;
+    elt->next = NULL;
+    elt->prnt = soap->dom;
+    elt->name = soap_strdup(soap, tag);
+    elt->elts = NULL;
+    elt->atts = NULL;
+    elt->nstr = NULL;
+    elt->data = NULL;
+    elt->wide = NULL;
+    elt->node = NULL;
+    elt->type = 0;
+    elt->head = NULL;
+    elt->tail = NULL;
+    if (soap->dom)
+    { struct soap_dom_element *p = soap->dom->elts;
+      if (p)
+      { while (p->next)
+          p = p->next;
+        p->next = elt;
+      }
+      else
+        soap->dom->elts = elt;
+    }
+    soap->dom = elt;
+  }
+  else
+  {
+#endif
+    soap->level++;
+#ifndef WITH_LEAN
+    if (!soap->ns)
+    { if (!(soap->mode & SOAP_XML_CANONICAL)
+       && soap_send(soap, soap->prolog ? soap->prolog : "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"))
+        return soap->error;
+    }
+    else if (soap->mode & SOAP_XML_INDENT)
+    { if (soap->ns == 1 && soap_send_raw(soap, soap_indent, soap->level < sizeof(soap_indent) ? soap->level : sizeof(soap_indent) - 1))
+        return soap->error;
+      soap->body = 1;
+    }
+#endif
+#ifdef WITH_XMLNS
+    s = strchr(tag, ':');
+    if (s && strncmp(tag, "SOAP-ENV", s - tag))
+    { struct Namespace *ns = soap->local_namespaces;
+      size_t n = s - tag;
+      if (soap_send_raw(soap, "<", 1)
+       || soap_send(soap, s + 1))
+        return soap->error;
+      if (soap->nlist && !strncmp(soap->nlist->id, tag, n) && !soap->nlist->id[n])
+        ns = NULL;
+      for (; ns && ns->id; ns++)
+      { if (*ns->id && (ns->out || ns->ns) && !strncmp(ns->id, tag, n) && !ns->id[n])
+        { soap_push_ns(soap, ns->id, ns->out ? ns->out : ns->ns, 0);
+          if (soap_attribute(soap, "xmlns", ns->out ? ns->out : ns->ns))
+            return soap->error;
+          break;
+        }
+      }   
+    }
+    else
+#endif
+    if (soap_send_raw(soap, "<", 1)
+     || soap_send(soap, tag))
+      return soap->error;
+#ifdef WITH_DOM
+  }
+#endif
+  if (!soap->ns)
+  { struct Namespace *ns;
+    for (ns = soap->local_namespaces; ns && ns->id; ns++)
+    { if (*ns->id && (ns->out || ns->ns))
+      { sprintf(soap->tmpbuf, "xmlns:%s", ns->id);
+        if (soap_attribute(soap, soap->tmpbuf, ns->out ? ns->out : ns->ns))
+          return soap->error;
+      }
+    }   
+  }
+  soap->ns = 1; /* start with 0 or 2, but should be one to continue */
+#ifndef WITH_LEAN
+  if (soap->mode & SOAP_XML_CANONICAL)
+  { const char *t = strchr(tag, ':');
+    if (t)
+      soap_utilize_ns(soap, tag, t - tag);
+  }
+#endif
+  if (id > 0)
+  { sprintf(soap->tmpbuf, "_%d", id);
+    if (soap_attribute(soap, "id", soap->tmpbuf))
+      return soap->error;
+  }
+  if (type && *type && (!(soap->mode & SOAP_XML_SEC) || soap->part == SOAP_IN_BODY))
+  { if (soap_attribute(soap, "xsi:type", type))
+      return soap->error;
+#ifndef WITH_LEAN
+    if (soap->mode & SOAP_XML_CANONICAL)
+    { const char *t = strchr(type, ':');
+      if (t)
+        soap_utilize_ns(soap, type, t - type);
+    }
+#endif
+  }
+  if (soap->null && soap->position > 0)
+  { register int i;
+    sprintf(soap->tmpbuf, "[%d", soap->positions[0]);
+    for (i = 1; i < soap->position; i++)
+      sprintf(soap->tmpbuf + strlen(soap->tmpbuf), ",%d", soap->positions[i]);
+    strcat(soap->tmpbuf, "]");
+    if (soap_attribute(soap, "SOAP-ENC:position", soap->tmpbuf))
+      return soap->error;
+  }
+  if (soap->mustUnderstand)
+  { if (soap->actor && *soap->actor)
+    { if (soap_attribute(soap, soap->version == 2 ? "SOAP-ENV:role" : "SOAP-ENV:actor", soap->actor))
+        return soap->error;
+    }
+    if (soap_attribute(soap, "SOAP-ENV:mustUnderstand", soap->version == 2 ? "true" : "1"))
+      return soap->error;
+    soap->mustUnderstand = 0;
+  }
+  if (soap->encoding)
+  { if (soap->encodingStyle && soap->local_namespaces)
+    { if (!*soap->encodingStyle)
+      { if (soap->local_namespaces[1].out)
+          soap->encodingStyle = soap->local_namespaces[1].out;
+        else
+          soap->encodingStyle = soap->local_namespaces[1].ns;
+      }
+      if (soap_attribute(soap, "SOAP-ENV:encodingStyle", soap->encodingStyle))
+        return soap->error;
+    }
+    soap->encoding = 0;
+  }
+  soap->null = 0;
+  soap->position = 0;
+  if (soap->part == SOAP_BEGIN_SECURITY && (soap->mode & SOAP_XML_CANONICAL))
+    soap->part = SOAP_IN_SECURITY;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_begin_out(struct soap *soap, const char *tag, int id, const char *type)
+{ if (*tag == '-')
+    return SOAP_OK;
+  if (soap_element(soap, tag, id, type))
+    return soap->error;
+  return soap_element_start_end_out(soap, NULL);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+#ifndef HAVE_STRRCHR
+SOAP_FMAC1
+char*
+SOAP_FMAC2
+soap_strrchr(const char *s, int t)
+{ register char *r = NULL;
+  while (*s)
+    if (*s++ == t)
+      r = (char*)s - 1;
+  return r;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+#ifndef HAVE_STRTOL
+SOAP_FMAC1
+long
+SOAP_FMAC2
+soap_strtol(const char *s, char **t, int b)
+{ register long n = 0;
+  register int c;
+  while (*s > 0 && *s <= 32)
+    s++;
+  if (b == 10)
+  { short neg = 0;
+    if (*s == '-')
+    { s++;
+      neg = 1;
+    }
+    else if (*s == '+')
+      s++;
+    while ((c = *s) && c >= '0' && c <= '9')
+    { if (n >= 214748364 && (n > 214748364 || c >= '8'))
+        break;
+      n *= 10;
+      n += c - '0';
+      s++;
+    }
+    if (neg)
+      n = -n;
+  }
+  else /* b == 16 and value is always positive */
+  { while ((c = *s))
+    { if (c >= '0' && c <= '9')
+        c -= '0';
+      else if (c >= 'A' && c <= 'F')
+        c -= 'A' - 10;
+      else if (c >= 'a' && c <= 'f')
+        c -= 'a' - 10;
+      if (n > 0x07FFFFFF)
+        break;
+      n <<= 4;
+      n += c;
+      s++;
+    }
+  }
+  if (t)
+    *t = (char*)s;
+  return n;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+#ifndef HAVE_STRTOUL
+SOAP_FMAC1
+unsigned long
+SOAP_FMAC2
+soap_strtoul(const char *s, char **t, int b)
+{ unsigned long n = 0;
+  register int c;
+  while (*s > 0 && *s <= 32)
+    s++;
+  if (b == 10)
+  { if (*s == '+')
+      s++;
+    while ((c = *s) && c >= '0' && c <= '9')
+    { if (n >= 429496729 && (n > 429496729 || c >= '6'))
+        break;
+      n *= 10;
+      n += c - '0';
+      s++;
+    }
+  }
+  else /* b == 16 */
+  { while ((c = *s))
+    { if (c >= '0' && c <= '9')
+        c -= '0';
+      else if (c >= 'A' && c <= 'F')
+        c -= 'A' - 10;
+      else if (c >= 'a' && c <= 'f')
+        c -= 'a' - 10;
+      if (n > 0x0FFFFFFF)
+        break;
+      n <<= 4;
+      n += c;
+      s++;
+    }
+  }
+  if (t)
+    *t = (char*)s;
+  return n;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_array_begin_out(struct soap *soap, const char *tag, int id, const char *type, const char *offset)
+{ if (soap_element(soap, tag, id, "SOAP-ENC:Array"))
+    return soap->error;
+  if (soap->version == 2)
+  { const char *s;
+    s = soap_strrchr(type, '[');
+    if ((size_t)(s - type) < sizeof(soap->tmpbuf))
+    { strncpy(soap->tmpbuf, type, s - type);
+      soap->tmpbuf[s - type] = '\0';
+      if (type && *type && (soap_attribute(soap, "SOAP-ENC:itemType", soap->tmpbuf)))
+        return soap->error;
+      if (s && (soap_attribute(soap, "SOAP-ENC:arraySize", s + 1)))
+        return soap->error;
+    }
+  }
+  else
+  { if (offset && (soap_attribute(soap, "SOAP-ENC:offset", offset)))
+      return soap->error;
+    if (type && *type && (soap_attribute(soap, "SOAP-ENC:arrayType", type)))
+      return soap->error;
+  }
+#ifndef WITH_LEAN
+  if (type && *type && (soap->mode & SOAP_XML_CANONICAL))
+  { const char *s = strchr(type, ':');
+    if (s)
+      soap_utilize_ns(soap, type, s - type);
+  }
+#endif
+  return soap_element_start_end_out(soap, NULL);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_start_end_out(struct soap *soap, const char *tag)
+{ register struct soap_attribute *tp;
+#ifndef WITH_LEAN
+  if (soap->mode & SOAP_XML_CANONICAL)
+  { struct soap_nlist *np;
+    for (tp = soap->attributes; tp; tp = tp->next)
+    { if (tp->visible && tp->name)
+      { const char *s = strchr(tp->name, ':');
+        if (s)
+          soap_utilize_ns(soap, tp->name, s - tp->name);
+      }
+    }
+    for (np = soap->nlist; np; np = np->next)
+    { if (np->index == 1 && np->ns)
+      { sprintf(soap->tmpbuf, "xmlns:%s", np->id);
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Enabling utilized binding (level=%u) %s='%s'\n", np->level, soap->tmpbuf, np->ns));
+        soap_set_attr(soap, soap->tmpbuf, np->ns);
+        np->index = 2;
+      }
+    }
+  }
+#endif
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { register struct soap_dom_attribute **att;
+    att = &soap->dom->atts;
+    for (tp = soap->attributes; tp; tp = tp->next)
+    { if (tp->visible)
+      { *att = (struct soap_dom_attribute*)soap_malloc(soap, sizeof(struct soap_dom_attribute));
+        if (!*att)
+          return soap->error = SOAP_EOM;
+        (*att)->next = NULL;
+        (*att)->nstr = NULL;
+        (*att)->name = soap_strdup(soap, tp->name);
+        (*att)->data = soap_strdup(soap, tp->value);
+        (*att)->wide = NULL;
+        (*att)->soap = soap;
+        att = &(*att)->next;
+        tp->visible = 0;
+      }
+    }
+    return SOAP_OK;
+  }
+#endif
+  for (tp = soap->attributes; tp; tp = tp->next)
+  { if (tp->visible)
+    {
+#ifdef WITH_XMLNS
+      const char *s = strchr(tp->name, ':');
+      if (s)
+      { size_t n = s - tp->name;
+        if (soap->nlist && !strncmp(soap->nlist->id, tp->name, n) && !soap->nlist->id[n])
+          s++;
+        else
+          s = tp->name;
+        if (soap_send(soap, " ") || soap_send(soap, s))
+          return soap->error;
+      }
+      else
+#endif
+      if (soap_send(soap, " ") || soap_send(soap, tp->name))
+        return soap->error;
+      if (tp->visible == 2 && tp->value)
+        if (soap_send_raw(soap, "=\"", 2)
+         || soap_string_out(soap, tp->value, 1)
+         || soap_send_raw(soap, "\"", 1))
+          return soap->error;
+      tp->visible = 0;
+    }
+  }
+  if (tag)
+  { 
+#ifndef WITH_LEAN
+    if (soap->mode & SOAP_XML_CANONICAL)
+    { if (soap_send_raw(soap, ">", 1)
+       || soap_element_end_out(soap, tag))
+        return soap->error;
+      return SOAP_OK;
+    }
+#endif
+    soap->level--;     /* decrement level just before /> */
+    if (soap_send_raw(soap, "/>", 2))
+      return soap->error;
+    return SOAP_OK;
+  }
+  return soap_send_raw(soap, ">", 1);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_end_out(struct soap *soap, const char *tag)
+{ if (*tag == '-')
+    return SOAP_OK;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element ending tag='%s'\n", tag));
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { if (soap->dom->prnt)
+      soap->dom = soap->dom->prnt;
+    return SOAP_OK;
+  }
+#endif
+#ifndef WITH_LEAN
+  if (soap->mode & SOAP_XML_CANONICAL)
+    soap_pop_ns(soap);
+  if (soap->mode & SOAP_XML_INDENT)
+  { if (!soap->body)
+    { if (soap_send_raw(soap, soap_indent, soap->level < sizeof(soap_indent) ? soap->level : sizeof(soap_indent) - 1))
+        return soap->error;
+    }
+    soap->body = 0;
+  }
+#endif
+#ifdef WITH_XMLNS
+  { const char *s = strchr(tag, ':');
+    if (s && strncmp(tag, "SOAP-ENV", s - tag))
+    { soap_pop_ns(soap);
+      tag = s + 1;
+    }
+  }
+#endif
+  if (soap_send_raw(soap, "</", 2)
+   || soap_send(soap, tag))
+    return soap->error;
+  soap->level--;       /* decrement level just before > */
+  return soap_send_raw(soap, ">", 1);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_ref(struct soap *soap, const char *tag, int id, int href)
+{ register int n = 0;
+  const char *s = "href";
+  if (soap->version == 2)
+  { s = "SOAP-ENC:ref";
+    n = 1;
+  }
+  sprintf(soap->href, "#_%d", href);
+  return soap_element_href(soap, tag, id, s, soap->href + n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_href(struct soap *soap, const char *tag, int id, const char *ref, const char *val)
+{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element '%s' reference %s='%s'\n", tag, ref, val));
+  if (soap_element(soap, tag, id, NULL)
+   || soap_attribute(soap, ref, val)
+   || soap_element_start_end_out(soap, tag))
+    return soap->error;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_null(struct soap *soap, const char *tag, int id, const char *type)
+{ struct soap_attribute *tp;
+  for (tp = soap->attributes; tp; tp = tp->next)
+    if (tp->visible)
+      break;
+  if (tp || (soap->version == 2 && soap->position > 0) || id > 0 || (soap->mode & SOAP_XML_NIL))
+  { if (soap_element(soap, tag, id, type))
+      return soap->error;
+    if (soap->part != SOAP_IN_HEADER && soap->encodingStyle)
+      if (soap_attribute(soap, "xsi:nil", "true"))
+        return soap->error;
+    return soap_element_start_end_out(soap, tag);
+  }
+  soap->null = 1;
+  soap->position = 0;
+  soap->mustUnderstand = 0;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_id(struct soap *soap, const char *tag, int id, const void *p, const struct soap_array *a, int n, const char *type, int t) 
+{ if (!p || (a && !a->__ptr))
+  { soap_element_null(soap, tag, id, type);
+    return -1;
+  }
+#ifndef WITH_NOIDREF
+  if (soap->mode & SOAP_XML_TREE)
+    return 0;
+  if (id < 0)
+  { struct soap_plist *pp;
+    if (a)
+      id = soap_array_pointer_lookup(soap, p, a, n, t, &pp);
+    else
+      id = soap_pointer_lookup(soap, p, t, &pp);
+    if (id)
+    { if (soap_is_embedded(soap, pp))
+      { soap_element_ref(soap, tag, 0, id);
+        return -1;
+      }
+      if (soap_is_single(soap, pp))
+        return 0;
+      soap_set_embedded(soap, pp);
+    }
+  }
+  return id;
+#else
+  return 0;
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_result(struct soap *soap, const char *tag)
+{ if (soap->version == 2 && soap->encodingStyle)
+    if (soap_element(soap, "SOAP-RPC:result", 0, NULL)
+     || soap_attribute(soap, "xmlns:SOAP-RPC", soap_rpc)
+     || soap_element_start_end_out(soap, NULL)
+     || soap_string_out(soap, tag, 0)
+     || soap_element_end_out(soap, "SOAP-RPC:result"))
+      return soap->error;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_check_result(struct soap *soap, const char *tag)
+{ if (soap->version == 2 && soap->encodingStyle)
+  { soap_instring(soap, ":result", NULL, NULL, 0, 2, -1, -1);
+    /* should compare tag to element's QName value? */
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_attribute(struct soap *soap, const char *name, const char *value)
+{ 
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && !(soap->mode & SOAP_XML_CANONICAL) && soap->dom)
+  { register struct soap_dom_attribute *a = (struct soap_dom_attribute*)soap_malloc(soap, sizeof(struct soap_dom_attribute));
+    a->next = soap->dom->atts;
+    a->nstr = NULL;
+    a->name = soap_strdup(soap, name);
+    a->data = soap_strdup(soap, value);
+    a->wide = NULL;
+    a->soap = soap;
+    soap->dom->atts = a;
+    return SOAP_OK;
+  }
+#endif
+#ifndef WITH_LEAN
+  if (soap->mode & SOAP_XML_CANONICAL)
+  { /* TODO: consider using this code to handle default namespace bindings
+    if (!strncmp(name, "xmlns", 5) && (name[5] == ':' || name[5] == '\0'))
+    { if (name[5] == ':')
+        soap_push_ns(soap, name + 6, value, 0);
+      else
+        soap_push_ns(soap, "", value, 0);
+    }
+    */
+    if (!strncmp(name, "xmlns:", 6))
+      soap_push_ns(soap, name + 6, value, 0);
+    else if (soap_set_attr(soap, name, value))
+      return soap->error;
+  }
+  else
+#endif
+  { if (soap_send(soap, " ") || soap_send(soap, name))
+      return soap->error;
+    if (value)
+      if (soap_send_raw(soap, "=\"", 2)
+       || soap_string_out(soap, value, 1)
+       || soap_send_raw(soap, "\"", 1))
+        return soap->error;
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_begin_in(struct soap *soap, const char *tag, int nillable, const char *type)
+{ if (!soap_peek_element(soap))
+  { if (soap->other)
+      return soap->error = SOAP_TAG_MISMATCH;
+    if (tag && *tag == '-')
+      return SOAP_OK;
+    if (!(soap->error = soap_match_tag(soap, soap->tag, tag)))
+    { soap->peeked = 0;
+      if (soap->body)
+        soap->level++;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Begin element found (level=%u) '%s'='%s'\n", soap->level, soap->tag, tag?tag:"" ));
+      if (!nillable && soap->null && (soap->mode & SOAP_XML_STRICT))
+        return soap->error = SOAP_NULL;
+      if (type && *soap->type && soap_match_tag(soap, soap->type, type))
+        return soap->error = SOAP_TYPE;
+    }
+  }
+  else if (soap->error == SOAP_NO_TAG && tag && *tag == '-')
+    soap->error = SOAP_OK;
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_element_end_in(struct soap *soap, const char *tag)  
+{ register soap_wchar c;
+  register char *s;
+  register const char *t;
+  register int n = 0;
+  if (tag && *tag == '-')
+    return SOAP_OK;
+  soap->level--;
+  soap_pop_namespace(soap);
+#ifdef WITH_DOM
+  /* this whitespace or mixed content is not insignificant for DOM */
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { if (!soap->peeked && !soap_string_in(soap, 3, -1, -1))
+      return soap->error;
+    if (soap->dom->prnt)
+      soap->dom = soap->dom->prnt;
+  }
+#endif
+  if (soap->peeked)
+  { if (soap->error == SOAP_NO_TAG)
+      soap->error = SOAP_OK;
+    if (*soap->tag)
+      n++;
+    soap->peeked = 0;
+  }
+  do
+  { while (((c = soap_get(soap)) != SOAP_TT))
+    { if ((int)c == EOF)
+        return soap->error = SOAP_EOF;
+      if (c == SOAP_LT)
+        n++;
+      else if (c == '/')
+      { c = soap_get(soap);
+        if (c == SOAP_GT)
+          n--;
+        else
+          soap_unget(soap, c);
+      }
+    }
+  } while (n--);
+  s = soap->tag;
+  n = sizeof(soap->tag);
+  while (soap_notblank(c = soap_get(soap)))
+  { if (--n > 0)
+      *s++ = (char)c;
+  }
+  *s = '\0';
+  if ((int)c == EOF)
+    return soap->error = SOAP_EOF;
+  while (soap_blank(c))
+    c = soap_get(soap);
+  if (c != SOAP_GT)
+    return soap->error = SOAP_SYNTAX_ERROR;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End element found (level=%u) '%s'='%s'\n", soap->level, soap->tag, tag?tag:""));
+  if (!tag || !*tag)
+    return SOAP_OK;
+  if ((s = strchr(soap->tag, ':')))
+    s++;
+  else
+    s = soap->tag;
+  if ((t = strchr(tag, ':')))
+    t++;
+  else
+    t = tag;
+  if (!SOAP_STRCMP(s, t))
+    return SOAP_OK;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End element tag name does not match\n"));
+  return soap->error = SOAP_SYNTAX_ERROR;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char *
+SOAP_FMAC2
+soap_attr_value(struct soap *soap, const char *name, int flag)
+{ register struct soap_attribute *tp;
+  for (tp = soap->attributes; tp; tp = tp->next)
+  { if (tp->visible && !soap_match_tag(soap, tp->name, name))
+      break;
+  }
+  if (tp)
+  { if (flag == 2 && (soap->mode & SOAP_XML_STRICT))
+      soap->error = SOAP_PROHIBITED;
+    else
+      return tp->value;
+  }
+  else if (flag == 1 && (soap->mode & SOAP_XML_STRICT))
+    soap->error = SOAP_REQUIRED;
+  return NULL;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_attr(struct soap *soap, const char *name, const char *value)
+{ register struct soap_attribute *tp;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set attribute %s='%s'\n", name, value?value:""));
+  for (tp = soap->attributes; tp; tp = tp->next)
+  { if (!strcmp(tp->name, name))
+      break;
+  }
+  if (!tp)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Allocate attribute %s\n", name));
+    if (!(tp = (struct soap_attribute*)SOAP_MALLOC(soap, sizeof(struct soap_attribute) + strlen(name))))
+      return soap->error = SOAP_EOM;
+    tp->ns = NULL;
+#ifndef WITH_LEAN
+    if (soap->mode & SOAP_XML_CANONICAL)
+    { struct soap_attribute **tpp = &soap->attributes;
+      const char *s = strchr(name, ':');
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inserting attribute %s for c14n\n", name))
+      if (!strncmp(name, "xmlns", 5))
+      { for (; *tpp; tpp = &(*tpp)->next)
+          if (strncmp((*tpp)->name, "xmlns", 5) || strcmp((*tpp)->name + 5, name + 5) > 0)
+            break;
+      }
+      else if (!s)
+      { for (; *tpp; tpp = &(*tpp)->next)
+          if (strncmp((*tpp)->name, "xmlns", 5) && ((*tpp)->ns || strcmp((*tpp)->name, name) > 0))
+            break;
+      }
+      else
+      { int k;
+        for (; *tpp; tpp = &(*tpp)->next)
+        { if (!strncmp((*tpp)->name, "xmlns:", 6) && !strncmp((*tpp)->name + 6, name, s - name) && !(*tpp)->name[6 + s - name])
+          { if (!tp->ns)
+            { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Canonicalization: prefix %s=%p (%s)\n", name, (*tpp)->ns, (*tpp)->ns));
+              tp->ns = (*tpp)->ns;
+            }
+          }
+          else if (strncmp((*tpp)->name, "xmlns", 5) && (*tpp)->ns && tp->ns && ((k = strcmp((*tpp)->ns, tp->ns)) > 0 || (!k && strcmp((*tpp)->name, name) > 0)))
+            break;
+        }
+      }
+      tp->next = *tpp;
+      *tpp = tp;
+    }
+    else
+#endif
+    { tp->next = soap->attributes;
+      soap->attributes = tp;
+    }
+    strcpy(tp->name, name);
+    tp->value = NULL;
+  }
+  else if (tp->visible)
+  { return SOAP_OK;
+  }
+  else if (value && tp->value && tp->size <= strlen(value))
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free attribute value of %s (free %p)\n", name, tp->value));
+    SOAP_FREE(soap, tp->value);
+    tp->value = NULL;
+    tp->ns = NULL;
+  }
+  if (value)
+  { if (!tp->value)
+    { tp->size = strlen(value) + 1;
+      if (!(tp->value = (char*)SOAP_MALLOC(soap, tp->size)))
+        return soap->error = SOAP_EOM;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Allocate attribute value for %s (%p)\n", tp->name, tp->value));
+    }
+    strcpy(tp->value, value);
+    if (!strncmp(tp->name, "xmlns:", 6))
+      tp->ns = tp->value;
+    tp->visible = 2;
+#ifndef WITH_LEAN
+    if (!strcmp(name, "wsu:Id"))
+    { soap->part = SOAP_BEGIN_SECURITY;
+      strncpy(soap->id, value, sizeof(soap->id));
+      soap->id[sizeof(soap->id)-1] = '\0';
+    }
+#endif
+  }
+  else
+    tp->visible = 1;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_clr_attr(struct soap *soap)
+{ register struct soap_attribute *tp;
+#ifndef WITH_LEAN
+  if ((soap->mode & SOAP_XML_CANONICAL))
+  { while (soap->attributes)
+    { tp = soap->attributes->next;
+      if (soap->attributes->value)
+        SOAP_FREE(soap, soap->attributes->value);
+      SOAP_FREE(soap, soap->attributes);
+      soap->attributes = tp;
+    }
+  }
+  else
+#endif
+  { for (tp = soap->attributes; tp; tp = tp->next)
+      tp->visible = 0;
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+static int
+soap_getattrval(struct soap *soap, char *s, size_t n, soap_wchar d)
+{ register size_t i;
+  for (i = 0; i < n; i++)
+  { register soap_wchar c = soap_get(soap);
+    switch (c)
+    {
+    case SOAP_TT:
+      *s++ = '<';
+      soap_unget(soap, '/');
+      break;
+    case SOAP_LT:
+      *s++ = '<';
+      break;
+    case SOAP_GT:
+      if (d == ' ')
+      { soap_unget(soap, c);
+        *s = '\0';
+        return SOAP_OK;
+      }
+      *s++ = '>';
+      break;
+    case SOAP_QT:
+      if (c == d)
+      { *s = '\0';
+        return SOAP_OK;
+      }
+      *s++ = '"';
+      break;
+    case SOAP_AP:
+      if (c == d)
+      { *s = '\0';
+        return SOAP_OK;
+      }
+      *s++ = '\'';
+      break;
+    case '\t':
+    case '\n':
+    case '\r':
+    case ' ':
+    case '/':
+      if (d == ' ')
+      { soap_unget(soap, c);
+        *s = '\0';
+        return SOAP_OK;
+      }
+    default:
+      if ((int)c == EOF)
+        return soap->error = SOAP_EOF;
+      *s++ = (char)c;
+    }
+  }
+  return soap->error = SOAP_EOM;
+}
+#endif
+
+/******************************************************************************/
+#ifdef WITH_FAST
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_store_lab(struct soap *soap, const char *s, size_t n)
+{ soap->labidx = 0;
+  return soap_append_lab(soap, s, n);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifdef WITH_FAST
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_append_lab(struct soap *soap, const char *s, size_t n)
+{ if (soap->labidx + n >= soap->lablen)
+  { register char *t = soap->labbuf;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Enlarging look-aside buffer to append data, old size=%lu", (unsigned long)soap->lablen));
+    if (soap->lablen == 0)
+      soap->lablen = SOAP_LABLEN;
+    while (soap->labidx + n >= soap->lablen)
+      soap->lablen <<= 1;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, ", new size=%lu\n", (unsigned long)soap->lablen));
+    soap->labbuf = (char*)SOAP_MALLOC(soap, soap->lablen);
+    if (!soap->labbuf)
+    { if (t)
+        SOAP_FREE(soap, t);
+      return soap->error = SOAP_EOM;
+    }
+    if (t)
+    { memcpy(soap->labbuf, t, soap->labidx);
+      SOAP_FREE(soap, t);
+    }
+  }
+  if (s)
+  { memcpy(soap->labbuf + soap->labidx, s, n);
+    soap->labidx += n;
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_peek_element(struct soap *soap)
+{
+#ifdef WITH_DOM
+  register struct soap_dom_attribute **att = NULL;
+  register char *lead = NULL;
+#endif
+  register struct soap_attribute *tp;
+  const char *t;
+  register char *s;
+  register soap_wchar c;
+  register int i;
+  if (soap->peeked)
+  { if (!*soap->tag)
+      return soap->error = SOAP_NO_TAG;
+    return SOAP_OK;
+  }
+  soap->peeked = 1;
+  c = soap_getutf8(soap);
+#ifdef WITH_DOM
+  /* whitespace leading to start tag is not insignificant for DOM */
+  if (soap_blank(c))
+  { soap->labidx = 0;
+    do
+    { if (soap_append_lab(soap, NULL, 0))
+        return SOAP_EOM;
+      s = soap->labbuf + soap->labidx;
+      i = soap->lablen - soap->labidx;
+      soap->labidx = soap->lablen;
+      while (soap_blank(c) && i--)
+      { *s++ = c;
+        c = soap_getutf8(soap);
+      }
+    }
+    while (soap_blank(c));
+    *s = '\0';
+    lead = soap_strdup(soap, soap->labbuf);
+  }
+#else
+  while (soap_blank(c))
+    c = soap_getutf8(soap);
+#endif
+  if (c != SOAP_LT)
+  { *soap->tag = '\0';
+    if ((int)c == EOF)
+      return soap->error = SOAP_EOF;
+    soap_unget(soap, c);
+#ifdef WITH_DOM
+    /* whitespace leading to end tag is not insignificant for DOM */
+    if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+      soap->dom->tail = soap_strdup(soap, lead);
+#endif
+    return soap->error = SOAP_NO_TAG;
+  }
+  s = soap->tag;
+  do c = soap_get1(soap);
+  while (soap_blank(c));
+  i = sizeof(soap->tag);
+  while (c != '>' && c != '/' && soap_notblank(c) && (int)c != EOF)
+  { if (--i > 0)
+      *s++ = (char)c;
+    c = soap_get1(soap);
+  }
+  while (soap_blank(c))
+    c = soap_get1(soap);
+  *s = '\0';
+  soap->id[0] = '\0';
+  soap->href[0] = '\0';
+  soap->type[0] = '\0';
+  soap->arrayType[0] = '\0';
+  soap->arraySize[0] = '\0';
+  soap->arrayOffset[0] = '\0';
+  soap->other = 0;
+  soap->root = -1;
+  soap->position = 0;
+  soap->null = 0;
+  soap->mustUnderstand = 0;
+#ifdef WITH_DOM
+  if (soap->mode & SOAP_XML_DOM)
+  { register struct soap_dom_element *elt;
+    elt = (struct soap_dom_element*)soap_malloc(soap, sizeof(struct soap_dom_element));
+    if (!elt)
+      return soap->error = SOAP_EOM;
+    elt->next = NULL;
+    elt->nstr = NULL;
+    elt->name = soap_strdup(soap, soap->tag);
+    elt->prnt = soap->dom;
+    elt->elts = NULL;
+    elt->atts = NULL;
+    elt->data = NULL;
+    elt->wide = NULL;
+    elt->type = 0;
+    elt->node = NULL;
+    elt->head = lead;
+    elt->tail = NULL;
+    elt->soap = soap;
+    if (soap->dom)
+    { struct soap_dom_element *p = soap->dom->elts;
+      if (p)
+      { while (p->next)
+          p = p->next;
+        p->next = elt;
+      }
+      else
+        soap->dom->elts = elt;
+    }
+    soap->dom = elt;
+    att = &elt->atts;
+  }
+#endif
+  for (tp = soap->attributes; tp; tp = tp->next)
+    tp->visible = 0;
+  while ((int)c != EOF && c != '>' && c != '/')
+  { s = soap->tmpbuf;
+    i = sizeof(soap->tmpbuf);
+    while (c != '=' && c != '>' && c != '/' && soap_notblank(c) && (int)c != EOF)
+    { if (--i > 0)
+        *s++ = (char)c;
+      c = soap_get1(soap);
+    }
+    *s = '\0';
+    if (i == sizeof(soap->tmpbuf))
+      return soap->error = SOAP_SYNTAX_ERROR;
+#ifdef WITH_DOM
+    /* add attribute name to dom */
+    if (att)
+    { *att = (struct soap_dom_attribute*)soap_malloc(soap, sizeof(struct soap_dom_attribute));
+       if (!*att)
+         return soap->error = SOAP_EOM;
+       (*att)->next = NULL;
+       (*att)->nstr = NULL;
+       (*att)->name = soap_strdup(soap, soap->tmpbuf);
+       (*att)->data = NULL;
+       (*att)->wide = NULL;
+       (*att)->soap = soap;
+    }
+#endif
+    if (!strncmp(soap->tmpbuf, "xmlns", 5))
+    { if (soap->tmpbuf[5] == ':')
+      { soap->tmpbuf[5] = '\0';
+        t = soap->tmpbuf + 6;
+      }
+      else if (soap->tmpbuf[5])
+        t = NULL;
+      else
+        t = SOAP_STR_EOS;
+    }
+    else
+      t = NULL;
+    for (tp = soap->attributes; tp; tp = tp->next)
+    { if (!SOAP_STRCMP(tp->name, soap->tmpbuf))
+        break;
+    }
+    if (!tp)
+    { tp = (struct soap_attribute*)SOAP_MALLOC(soap, sizeof(struct soap_attribute) + strlen(soap->tmpbuf));
+      if (!tp)
+        return soap->error = SOAP_EOM;
+      strcpy(tp->name, soap->tmpbuf);
+      tp->value = NULL;
+      tp->size = 0;
+      tp->next = soap->attributes;
+      soap->attributes = tp;
+    }
+    while (soap_blank(c))
+      c = soap_get1(soap);
+    if (c == '=')
+    { do c = soap_getutf8(soap);
+      while (soap_blank(c));
+      if (c != SOAP_QT && c != SOAP_AP)
+      { soap_unget(soap, c);
+        c = ' '; /* blank delimiter */
+      }
+      if (soap_getattrval(soap, tp->value, tp->size, c))
+      {
+#ifdef WITH_FAST
+        if (soap->error != SOAP_EOM)
+          return soap->error;
+        soap->error = SOAP_OK;
+        if (soap_store_lab(soap, tp->value, tp->size))
+          return soap->error;
+        if (tp->value)
+          SOAP_FREE(soap, tp->value);
+        for (;;)
+        { if (soap_getattrval(soap, soap->labbuf + soap->labidx, soap->lablen - soap->labidx, c))
+          { if (soap->error != SOAP_EOM)
+              return soap->error;
+            soap->error = SOAP_OK;
+            soap->labidx = soap->lablen;
+            if (soap_append_lab(soap, NULL, 0))
+              return soap->error;
+          }
+          else
+            break;
+        }
+        if (soap->labidx)
+          tp->size = soap->lablen;
+        else
+        { tp->size = strlen(soap->labbuf) + 1;
+          if (tp->size < SOAP_LABLEN)
+            tp->size = SOAP_LABLEN;
+        }
+        if (!(tp->value = (char*)SOAP_MALLOC(soap, tp->size)))
+          return soap->error = SOAP_EOM;
+        strcpy(tp->value, soap->labbuf);
+#else
+        size_t n;
+        if (soap->error != SOAP_EOM)
+          return soap->error;
+        soap->error = SOAP_OK;
+        if (soap_new_block(soap))
+          return soap->error;
+        for (;;)
+        { if (!(s = (char*)soap_push_block(soap, SOAP_BLKLEN)))
+            return soap->error;
+          if (soap_getattrval(soap, s, SOAP_BLKLEN, c))
+          { if (soap->error != SOAP_EOM)
+              return soap->error;
+            soap->error = SOAP_OK;
+          }
+          else
+            break;
+        }
+        n = tp->size + soap->blist->size;
+        if (!(s = (char*)SOAP_MALLOC(soap, n)))
+          return soap->error = SOAP_EOM;
+        if (tp->value)
+        { memcpy(s, tp->value, tp->size);
+          SOAP_FREE(soap, tp->value);
+        }
+        soap_save_block(soap, s + tp->size, 0);
+        tp->value = s;
+        tp->size = n;
+#endif
+      }
+      do c = soap_get1(soap);
+      while (soap_blank(c));
+      tp->visible = 2; /* seen this attribute w/ value */
+#ifdef WITH_DOM
+      if (att)
+        (*att)->data = soap_strdup(soap, tp->value);
+#endif
+    }
+    else
+      tp->visible = 1; /* seen this attribute w/o value */
+#ifdef WITH_DOM
+    if (att)
+      att = &(*att)->next;
+#endif
+    if (t && tp->value)
+    { if (soap_push_namespace(soap, t, tp->value))
+        return soap->error;
+      tp->visible = 0;
+    }
+  }
+#ifdef WITH_DOM
+  if (att)
+  { soap->dom->nstr = soap_current_namespace(soap, soap->tag);
+    for (att = &soap->dom->atts; *att; att = &(*att)->next)
+      (*att)->nstr = soap_current_namespace(soap, (*att)->name);
+  }
+#endif
+  if ((int)c == EOF)
+    return soap->error = SOAP_EOF;
+  if (!(soap->body = (c != '/')))
+    do c = soap_get1(soap);
+    while (soap_blank(c));
+#ifdef WITH_DOM
+  if (soap->mode & SOAP_XML_DOM)
+  { if (!soap->body && soap->dom->prnt)
+      soap->dom = soap->dom->prnt;
+  }
+#endif
+  for (tp = soap->attributes; tp; tp = tp->next)
+  { if (tp->visible && tp->value)
+    { if (!strcmp(tp->name, "id"))
+      { if (soap->version > 0
+         || (soap->mode & SOAP_XML_GRAPH))
+        { *soap->id = '#';
+          strncpy(soap->id + 1, tp->value, sizeof(soap->id) - 2);
+          soap->id[sizeof(soap->id)-1] = '\0';
+        }
+      }
+      else if (!strcmp(tp->name, "href"))
+      { if (soap->version == 1
+         || (soap->mode & SOAP_XML_GRAPH)
+        || (soap->mode & SOAP_ENC_MTOM))
+        { strncpy(soap->href, tp->value, sizeof(soap->href) - 1);
+          soap->href[sizeof(soap->href)-1] = '\0';
+        }
+      }
+      else if (!soap_match_tag(soap, tp->name, "xsi:type"))
+      { strncpy(soap->type, tp->value, sizeof(soap->type) - 1);
+        soap->type[sizeof(soap->type)-1] = '\0';
+      }
+      else if ((!soap_match_tag(soap, tp->name, "xsi:null")
+             || !soap_match_tag(soap, tp->name, "xsi:nil"))
+            && (!strcmp(tp->value, "1")
+             || !strcmp(tp->value, "true")))
+      { soap->null = 1;
+      }
+      else if (soap->version == 1)
+      { if (!soap_match_tag(soap, tp->name, "SOAP-ENC:arrayType"))
+        { s = soap_strrchr(tp->value, '[');
+          if (s && (size_t)(s - tp->value) < sizeof(soap->arrayType))
+          { strncpy(soap->arrayType, tp->value, s - tp->value);
+            soap->arrayType[s - tp->value] = '\0';
+            strncpy(soap->arraySize, s, sizeof(soap->arraySize) - 1);
+          }
+          else
+            strncpy(soap->arrayType, tp->value, sizeof(soap->arrayType) - 1);
+          soap->arraySize[sizeof(soap->arrayType)-1] = '\0';
+          soap->arrayType[sizeof(soap->arrayType)-1] = '\0';
+        }
+        else if (!soap_match_tag(soap, tp->name, "SOAP-ENC:offset"))
+          strncpy(soap->arrayOffset, tp->value, sizeof(soap->arrayOffset));
+        else if (!soap_match_tag(soap, tp->name, "SOAP-ENC:position"))
+          soap->position = soap_getposition(tp->value, soap->positions);
+        else if (!soap_match_tag(soap, tp->name, "SOAP-ENC:root"))
+          soap->root = ((!strcmp(tp->value, "1") || !strcmp(tp->value, "true")));
+        else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:mustUnderstand")
+              && (!strcmp(tp->value, "1") || !strcmp(tp->value, "true")))
+          soap->mustUnderstand = 1;
+        else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:actor"))
+        { if ((!soap->actor || strcmp(soap->actor, tp->value))
+           && strcmp(tp->value, "http://schemas.xmlsoap.org/soap/actor/next"))
+            soap->other = 1;
+        }
+      }
+      else if (soap->version == 2)
+      { if (!strcmp(tp->name, "ref")
+         || !soap_match_tag(soap, tp->name, "SOAP-ENC:ref"))
+        { *soap->href = '#';
+          strncpy(soap->href + 1, tp->value, sizeof(soap->href) - 2);
+          soap->href[sizeof(soap->href)-1] = '\0';
+        }
+        else if (!soap_match_tag(soap, tp->name, "SOAP-ENC:itemType"))
+          strncpy(soap->arrayType, tp->value, sizeof(soap->arrayType) - 1);
+        else if (!soap_match_tag(soap, tp->name, "SOAP-ENC:arraySize"))
+          strncpy(soap->arraySize, tp->value, sizeof(soap->arraySize) - 1);
+        else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:mustUnderstand")
+              && (!strcmp(tp->value, "1") || !strcmp(tp->value, "true")))
+          soap->mustUnderstand = 1;
+        else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:role"))
+        { if ((!soap->actor || strcmp(soap->actor, tp->value))
+           && strcmp(tp->value, "http://www.w3.org/2003/05/soap-envelope/role/next"))
+            soap->other = 1;
+        }
+      }
+    }
+  }
+  return soap->error = SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_retry(struct soap *soap)
+{ soap->error = SOAP_OK;
+  soap_revert(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_revert(struct soap *soap)
+{ if (!soap->peeked)
+  { soap->peeked = 1;
+    if (soap->body)
+      soap->level--;
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Reverting last element (level=%u)\n", soap->level));
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_string_out(struct soap *soap, const char *s, int flag)
+{ register const char *t;
+  register soap_wchar c;
+  register soap_wchar mask = 0xFFFFFF80UL;
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { soap->dom->data = soap_strdup(soap, s);
+    return SOAP_OK;
+  }
+#endif
+  if (soap->mode & SOAP_C_UTFSTRING)
+    mask = 0;
+  t = s;
+  while ((c = *t++))
+  { switch (c)
+    { 
+    case 0x09:
+      if (flag)
+      { if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&#x9;", 5))
+          return soap->error;
+        s = t;
+      }
+      break;
+    case 0x0A:
+      if (flag || !(soap->mode & SOAP_XML_CANONICAL))
+      { if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&#xA;", 5))
+          return soap->error;
+        s = t;
+      }
+      break;
+    case 0x0D:
+      if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&#xD;", 5))
+        return soap->error;
+      s = t;
+      break;
+    case '&':
+      if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&amp;", 5))
+        return soap->error;
+      s = t;
+      break;
+    case '<':
+      if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&lt;", 4))
+        return soap->error;
+      s = t;
+      break;
+    case '>':
+      if (!flag)
+      { if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&gt;", 4))
+          return soap->error;
+        s = t;
+      }
+      break;
+    case '"':
+      if (flag)
+      { if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&quot;", 6))
+          return soap->error;
+        s = t;
+      }
+      break;
+    default:
+#ifndef WITH_LEANER
+#ifdef HAVE_MBTOWC
+      if (soap->mode & SOAP_C_MBSTRING)
+      { wchar_t wc;
+        register int m = mbtowc(&wc, t - 1, MB_CUR_MAX);
+        if (m > 0 && wc != c)
+        { if (soap_send_raw(soap, s, t - s - 1) || soap_pututf8(soap, wc))
+            return soap->error;
+          s = t += m - 1;
+          continue;
+        }
+      }
+#endif
+#endif
+      if ((c & mask) || !(c & 0xFFFFFFE0UL))
+      { if (soap_send_raw(soap, s, t - s - 1) || soap_pututf8(soap, (unsigned char)c))
+          return soap->error;
+        s = t;
+      }
+    }
+  }
+  return soap_send_raw(soap, s, t - s - 1);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_string_in(struct soap *soap, int flag, long minlen, long maxlen)
+{ register char *s;
+  char *t = NULL;
+  register size_t i;
+  register long l = 0;
+  register int n = 0;
+  register int m = 0;
+  register soap_wchar c;
+#if !defined(WITH_LEANER) && defined(HAVE_WCTOMB)
+  char buf[MB_LEN_MAX > 8 ? MB_LEN_MAX : 8];
+#else
+  char buf[8];
+#endif
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Reading string content\n"));
+  if (soap->peeked)
+  { if (!soap->body)
+      return NULL;
+    if (*soap->tag)
+    { n = 1;
+      soap->peeked = 0;
+#ifndef WITH_LEAN
+      t = soap->tmpbuf;
+      t[0] = '<';
+      strncpy(t + 1, soap->tag, sizeof(soap->tmpbuf) - 1);
+      strncat(t, ">", sizeof(soap->tmpbuf));
+      m = strlen(soap->tag) + 2;
+#endif
+    }
+  }
+#ifdef WITH_CDATA
+  if (!flag)
+  { register int state = 0;
+#ifdef WITH_FAST
+    soap->labidx = 0;                  /* use look-aside buffer */
+#else
+    if (soap_new_block(soap))
+      return NULL;
+#endif
+    for (;;)
+    { 
+#ifdef WITH_FAST
+      register size_t k;
+      if (soap_append_lab(soap, NULL, 0))      /* allocate more space in look-aside buffer if necessary */
+        return NULL;
+      s = soap->labbuf + soap->labidx; /* space to populate */
+      k = soap->lablen - soap->labidx; /* number of bytes available */
+      soap->labidx = soap->lablen;     /* claim this space */
+#else
+      register size_t k = SOAP_BLKLEN;
+      if (!(s = (char*)soap_push_block(soap, k)))
+        return NULL;
+#endif
+      for (i = 0; i < k; i++)
+      { if (m > 0)
+        { *s++ = *t++; /* copy multibyte characters */
+          m--;
+          continue;
+        }
+        c = soap_getchar(soap);
+        if ((int)c == EOF)
+          goto end;
+        if (c >= 0x80 && !(soap->mode & SOAP_ENC_LATIN))
+        { soap_unget(soap, c);
+          c = soap_getutf8(soap);
+          if (soap->mode & SOAP_C_UTFSTRING)
+          { if ((c & 0x80000000) && c >= -0x7FFFFF80 && c < SOAP_AP)
+            { c &= 0x7FFFFFFF;
+              t = buf;
+              if (c < 0x0800)
+                *t++ = (char)(0xC0 | ((c >> 6) & 0x1F));
+              else
+              { if (c < 0x010000)
+                  *t++ = (char)(0xE0 | ((c >> 12) & 0x0F));
+                else
+                { if (c < 0x200000)
+                    *t++ = (char)(0xF0 | ((c >> 18) & 0x07));
+                  else
+                  { if (c < 0x04000000)
+                      *t++ = (char)(0xF8 | ((c >> 24) & 0x03));
+                    else
+                    { *t++ = (char)(0xFC | ((c >> 30) & 0x01));
+                      *t++ = (char)(0x80 | ((c >> 24) & 0x3F));
+                    }
+                    *t++ = (char)(0x80 | ((c >> 18) & 0x3F));
+                  }     
+                  *t++ = (char)(0x80 | ((c >> 12) & 0x3F));
+                }
+                *t++ = (char)(0x80 | ((c >> 6) & 0x3F));
+              }
+              *t++ = (char)(0x80 | (c & 0x3F));
+              m = (int)(t - buf) - 1;
+              t = buf;
+              *s++ = *t++;
+              continue;
+            }
+          }
+        }
+        switch (state)
+        { case 1:
+            if (c == ']')
+              state = 4;
+            *s++ = c;
+            continue;
+          case 2:
+            if (c == '-')
+              state = 6;
+            *s++ = c;
+            continue;
+          case 3:
+            if (c == '?')
+              state = 8;
+            *s++ = c;
+            continue;
+          /* CDATA */
+          case 4:
+            if (c == ']')
+              state = 5;
+            else
+              state = 1;
+            *s++ = c;
+            continue;
+          case 5:
+            if (c == '>')
+              state = 0;
+            else
+              state = 1;
+            *s++ = c;
+            continue;
+          /* comment */
+          case 6:
+            if (c == '-')
+              state = 7;
+            else
+              state = 2;
+            *s++ = c;
+            continue;
+          case 7:
+            if (c == '>')
+              state = 0;
+            else
+              state = 2;
+            *s++ = c;
+            continue;
+          /* PI */
+          case 8:
+            if (c == '>')
+              state = 0;
+            else
+              state = 3;
+            *s++ = c;
+            continue;
+        }
+        switch (c)
+        {
+        case '/':
+          if (n > 0)
+          { c = soap_getchar(soap);
+            if (c == '>')
+              n--;
+            soap_unget(soap, c);
+          }
+          *s++ = '/';
+          break;
+        case '<':
+          c = soap_getchar(soap);
+          if (c == '/')
+          { if (n == 0)
+            { c = SOAP_TT;
+              goto end;
+            }
+            n--;
+          }
+          else if (c == '!')
+          { c = soap_getchar(soap);
+            if (c == '[')
+            { do c = soap_getchar(soap);
+              while ((int)c != EOF && c != '[');
+              if ((int)c == EOF)
+                 goto end;
+              t = (char*)"![CDATA[";
+              m = 8;
+              state = 1;
+            }
+            else if (c == '-')
+            { if ((c = soap_getchar(soap)) == '-')
+                state = 2;
+              t = (char*)"!-";
+              m = 2;
+              soap_unget(soap, c);
+            }
+            else
+            { t = (char*)"!";
+              m = 1;
+              soap_unget(soap, c);
+            }
+            *s++ = '<';
+            break;
+          }
+          else if (c == '?')
+            state = 3;
+          else
+            n++;
+          soap_unget(soap, c);
+          *s++ = '<';
+          break;
+        case '>':
+          *s++ = '>';
+          break;
+        case '"':
+          *s++ = '"';
+          break;
+        default:
+#ifndef WITH_LEANER
+#ifdef HAVE_WCTOMB
+          if (soap->mode & SOAP_C_MBSTRING)
+          { m = wctomb(buf, c & 0x7FFFFFFF);
+            if (m >= 1 && m <= (int)MB_CUR_MAX)
+            { t = buf;
+              *s++ = *t++;
+              m--;
+            }
+            else
+            { *s++ = SOAP_UNKNOWN_CHAR;
+              m = 0;
+            }
+          }
+          else
+#endif
+#endif
+            *s++ = (char)(c & 0xFF);
+        }
+        l++;
+        if ((soap->mode & SOAP_XML_STRICT) && maxlen >= 0 && l > maxlen)
+        { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen));
+          soap->error = SOAP_LENGTH;
+          return NULL;
+        }
+      }
+    }
+  }
+#endif
+#ifdef WITH_FAST
+  soap->labidx = 0;                    /* use look-aside buffer */
+#else
+  if (soap_new_block(soap))
+    return NULL;
+#endif
+  for (;;)
+  { 
+#ifdef WITH_FAST
+    register size_t k;
+    if (soap_append_lab(soap, NULL, 0))        /* allocate more space in look-aside buffer if necessary */
+      return NULL;
+    s = soap->labbuf + soap->labidx;   /* space to populate */
+    k = soap->lablen - soap->labidx;   /* number of bytes available */
+    soap->labidx = soap->lablen;       /* claim this space */
+#else
+    register size_t k = SOAP_BLKLEN;
+    if (!(s = (char*)soap_push_block(soap, k)))
+      return NULL;
+#endif
+    for (i = 0; i < k; i++)
+    { if (m > 0)
+      { *s++ = *t++;   /* copy multibyte characters */
+        m--;
+        continue;
+      }
+      if (soap->mode & SOAP_C_UTFSTRING)
+      { if (((c = soap_get(soap)) & 0x80000000) && c >= -0x7FFFFF80 && c < SOAP_AP)
+        { c &= 0x7FFFFFFF;
+          t = buf;
+          if (c < 0x0800)
+            *t++ = (char)(0xC0 | ((c >> 6) & 0x1F));
+          else
+          { if (c < 0x010000)
+              *t++ = (char)(0xE0 | ((c >> 12) & 0x0F));
+            else
+            { if (c < 0x200000)
+                *t++ = (char)(0xF0 | ((c >> 18) & 0x07));
+              else
+              { if (c < 0x04000000)
+                  *t++ = (char)(0xF8 | ((c >> 24) & 0x03));
+                else
+                { *t++ = (char)(0xFC | ((c >> 30) & 0x01));
+                  *t++ = (char)(0x80 | ((c >> 24) & 0x3F));
+                }
+                *t++ = (char)(0x80 | ((c >> 18) & 0x3F));
+              }     
+              *t++ = (char)(0x80 | ((c >> 12) & 0x3F));
+            }
+            *t++ = (char)(0x80 | ((c >> 6) & 0x3F));
+          }
+          *t++ = (char)(0x80 | (c & 0x3F));
+          m = (int)(t - buf) - 1;
+          t = buf;
+          *s++ = *t++;
+          continue;
+        }
+      }
+      else
+        c = soap_getutf8(soap);
+      switch (c)
+      {
+      case SOAP_TT:
+        if (n == 0)
+          goto end;
+        n--;
+        *s++ = '<';
+        t = (char*)"/";
+        m = 1;
+        break;
+      case SOAP_LT:
+        n++;
+        *s++ = '<';
+        break;
+      case SOAP_GT:
+        *s++ = '>';
+        break;
+      case SOAP_QT:
+        *s++ = '"';
+        break;
+      case SOAP_AP:
+        *s++ = '\'';
+        break;
+      case '/':
+        if (n > 0)
+        { c = soap_get(soap);
+          if (c == SOAP_GT)
+            n--;
+          soap_unget(soap, c);
+        }
+        *s++ = '/';
+        break;
+      case '<' | 0x80000000:
+        if (flag)
+          *s++ = '<';
+        else
+        { *s++ = '&';
+          t = (char*)"lt;";
+          m = 3;
+        }
+        break;
+      case '>' | 0x80000000:
+        if (flag)
+          *s++ = '>';
+        else
+        { *s++ = '&';
+          t = (char*)"gt;";
+          m = 3;
+        }
+        break;
+      case '&' | 0x80000000:
+        if (flag)
+          *s++ = '&';
+        else
+        { *s++ = '&';
+          t = (char*)"amp;";
+          m = 4;
+        }
+        break;
+      case '"' | 0x80000000:
+        if (flag)
+          *s++ = '"';
+        else
+        { *s++ = '&';
+          t = (char*)"quot;";
+          m = 5;
+        }
+        break;
+      case '\'' | 0x80000000:
+        if (flag)
+          *s++ = '\'';
+        else
+        { *s++ = '&';
+          t = (char*)"apos;";
+          m = 5;
+        }
+        break;
+      default:
+        if ((int)c == EOF)
+          goto end;
+#ifndef WITH_LEANER
+#ifdef HAVE_WCTOMB
+        if (soap->mode & SOAP_C_MBSTRING)
+        { m = wctomb(buf, c & 0x7FFFFFFF);
+          if (m >= 1 && m <= (int)MB_CUR_MAX)
+          { t = buf;
+            *s++ = *t++;
+            m--;
+          }
+          else
+          { *s++ = SOAP_UNKNOWN_CHAR;
+            m = 0;
+          }
+        }
+        else
+#endif
+#endif
+          *s++ = (char)(c & 0xFF);
+      }
+      l++;
+      if ((soap->mode & SOAP_XML_STRICT) && maxlen >= 0 && l > maxlen)
+      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen));
+        soap->error = SOAP_LENGTH;
+        return NULL;
+      }
+    }
+  }
+end:
+  soap_unget(soap, c);
+  *s = '\0';
+#ifdef WITH_FAST
+  t = soap_strdup(soap, soap->labbuf);
+#else
+  soap_size_block(soap, i+1);
+  t = soap_save_block(soap, NULL, 0);
+#endif
+  if ((soap->mode & SOAP_XML_STRICT) && l < minlen)
+  { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too short: %ld chars, minlen=%ld\n", l, minlen));
+    soap->error = SOAP_LENGTH;
+    return NULL;
+  }
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { if (flag == 3)
+      soap->dom->tail = t;
+    else
+      soap->dom->data = t;
+  }
+#endif
+  if (flag == 2)
+    if (soap_s2QName(soap, t, &t))
+      return NULL;
+  return t;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_wstring_out(struct soap *soap, const wchar_t *s, int flag)
+{ const char *t;
+  char tmp;
+  register soap_wchar c;
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+  { wchar_t *r = (wchar_t*)s;
+    int n = 1;
+    while (*r++)
+      n++;
+    soap->dom->wide = r = (wchar_t*)soap_malloc(soap, n * sizeof(wchar_t));
+    while (n--)
+      *r++ = *s++;
+    return SOAP_OK;
+  }
+#endif
+  while ((c = *s++))
+  { switch (c)
+    { 
+    case 0x09:
+      if (flag)
+        t = "&#x9;";
+      else
+        t = "\t";
+      break;
+    case 0x0A:
+      if (flag || !(soap->mode & SOAP_XML_CANONICAL))
+        t = "&#xA;";
+      else
+        t = "\n";
+      break;
+    case 0x0D:
+      t = "&#xD;";
+      break;
+    case '&':
+      t = "&amp;";
+      break;
+    case '<':
+      t = "&lt;";
+      break;
+    case '>':
+      if (flag)
+        t = ">";
+      else
+        t = "&gt;";
+      break;
+    case '"':
+      if (flag)
+        t = "&quot;";
+      else
+        t = "\"";
+      break;
+    default:
+      if (c >= 0x20 && c < 0x80)
+      { tmp = (char)c;
+        if (soap_send_raw(soap, &tmp, 1))
+          return soap->error;
+      }
+      else if (soap_pututf8(soap, (unsigned long)c))
+        return soap->error;
+      continue;
+    }
+    if (soap_send(soap, t))
+      return soap->error;
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_2
+SOAP_FMAC1
+wchar_t *
+SOAP_FMAC2
+soap_wstring_in(struct soap *soap, int flag, long minlen, long maxlen)
+{ wchar_t *s;
+  register int i, n = 0;
+  register long l = 0;
+  register soap_wchar c;
+  const char *t = NULL;
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Reading wide string content\n"));
+  if (soap->peeked)
+  { if (!soap->body)
+      return NULL;
+    if (*soap->tag)
+    { n = 1;
+      soap->peeked = 0;
+    }
+  }
+  if (soap_new_block(soap))
+    return NULL;
+  for (;;)
+  { if (!(s = (wchar_t*)soap_push_block(soap, sizeof(wchar_t)*SOAP_BLKLEN)))
+      return NULL;
+    for (i = 0; i < SOAP_BLKLEN; i++)
+    { if (t)
+      { *s++ = (wchar_t)*t++;
+        if (!*t)
+          t = NULL;
+        continue;
+      }
+      c = soap_getutf8(soap);
+      switch (c)
+      {
+      case SOAP_TT:
+        if (n == 0)
+          goto end;
+        n--;
+        *s++ = '<';
+        soap_unget(soap, '/');
+        break;
+      case SOAP_LT:
+        n++;
+        *s++ = '<';
+        break;
+      case SOAP_GT:
+        *s++ = '>';
+        break;
+      case SOAP_QT:
+        *s++ = '"';
+        break;
+      case SOAP_AP:
+        *s++ = '\'';
+        break;
+      case '/':
+        if (n > 0)
+        { c = soap_getutf8(soap);
+          if (c == SOAP_GT)
+            n--;
+          soap_unget(soap, c);
+        }
+        *s++ = '/';
+        break;
+      case '<':
+        if (flag)
+          *s++ = (soap_wchar)'<';
+        else
+        { *s++ = (soap_wchar)'&';
+          t = "lt;";
+        }
+        break;
+      case '>':
+        if (flag)
+          *s++ = (soap_wchar)'>';
+        else
+        { *s++ = (soap_wchar)'&';
+          t = "gt;";
+        }
+        break;
+      case '"':
+        if (flag)
+          *s++ = (soap_wchar)'"';
+        else
+        { *s++ = (soap_wchar)'&';
+          t = "quot;";
+        }
+        break;
+      default:
+        if ((int)c == EOF)
+          goto end;
+        *s++ = (wchar_t)c & 0x7FFFFFFF;
+      }
+      l++;
+      if ((soap->mode & SOAP_XML_STRICT) && maxlen >= 0 && l > maxlen)
+      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen));
+        soap->error = SOAP_LENGTH;
+        return NULL;
+      }
+    }
+  }
+end:
+  soap_unget(soap, c);
+  *s = '\0';
+  soap_size_block(soap, sizeof(wchar_t) * (i + 1));
+  if ((soap->mode & SOAP_XML_STRICT) && l < minlen)
+  { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too short: %ld chars, minlen=%ld\n", l, minlen));
+    soap->error = SOAP_LENGTH;
+    return NULL;
+  }
+  s = (wchar_t*)soap_save_block(soap, NULL, 0);
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+    soap->dom->wide = s;
+#endif
+  return s;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_int2s(struct soap *soap, int n)
+{ return soap_long2s(soap, (long)n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outint(struct soap *soap, const char *tag, int id, const int *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_long2s(soap, (long)*p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2int(struct soap *soap, const char *s, int *p)
+{ if (s)
+  { char *r;
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+    soap_reset_errno;
+#endif
+#endif
+    *p = (int)soap_strtol(s, &r, 10);
+    if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+     || soap_errno == SOAP_ERANGE
+#endif
+#endif
+    )
+      soap->error = SOAP_TYPE;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int *
+SOAP_FMAC2
+soap_inint(struct soap *soap, const char *tag, int *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0, NULL))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":int")
+   && soap_match_tag(soap, soap->type, ":short")
+   && soap_match_tag(soap, soap->type, ":byte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (int*)soap_id_enter(soap, soap->id, p, t, sizeof(int), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (int*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(int), 0, NULL);
+  else if (p)
+  { if (soap_s2int(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_long2s(struct soap *soap, long n)
+{ sprintf(soap->tmpbuf, "%ld", n);
+  return soap->tmpbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outlong(struct soap *soap, const char *tag, int id, const long *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_long2s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2long(struct soap *soap, const char *s, long *p)
+{ if (s)
+  { char *r;
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+    soap_reset_errno;
+#endif
+#endif
+    *p = soap_strtol(s, &r, 10);
+    if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+     || soap_errno == SOAP_ERANGE
+#endif
+#endif
+    )
+      soap->error = SOAP_TYPE;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+long *
+SOAP_FMAC2
+soap_inlong(struct soap *soap, const char *tag, long *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0, NULL))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":int")
+   && soap_match_tag(soap, soap->type, ":short")
+   && soap_match_tag(soap, soap->type, ":byte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (long*)soap_id_enter(soap, soap->id, p, t, sizeof(long), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (long*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(long), 0, NULL);
+  else if (p)
+  { if (soap_s2long(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_LONG642s(struct soap *soap, LONG64 n)
+{ sprintf(soap->tmpbuf, SOAP_LONG_FORMAT, n);
+  return soap->tmpbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outLONG64(struct soap *soap, const char *tag, int id, const LONG64 *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_LONG642s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2LONG64(struct soap *soap, const char *s, LONG64 *p)
+{ if (s)
+  {
+#ifdef HAVE_STRTOLL
+    char *r;
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+    soap_reset_errno;
+#endif
+#endif
+    *p = strtoll(s, &r, 10);
+    if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+       || soap_errno == SOAP_ERANGE
+#endif
+#endif
+      )
+#else
+# ifdef HAVE_SSCANF
+    if (sscanf(s, SOAP_LONG_FORMAT, p) != 1)
+# endif
+#endif
+      soap->error = SOAP_TYPE;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+LONG64 *
+SOAP_FMAC2
+soap_inLONG64(struct soap *soap, const char *tag, LONG64 *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0, NULL))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":integer")
+   && soap_match_tag(soap, soap->type, ":positiveInteger")
+   && soap_match_tag(soap, soap->type, ":negativeInteger")
+   && soap_match_tag(soap, soap->type, ":nonPositiveInteger")
+   && soap_match_tag(soap, soap->type, ":nonNegativeInteger")
+   && soap_match_tag(soap, soap->type, ":long")
+   && soap_match_tag(soap, soap->type, ":int")
+   && soap_match_tag(soap, soap->type, ":short")
+   && soap_match_tag(soap, soap->type, ":byte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (LONG64*)soap_id_enter(soap, soap->id, p, t, sizeof(LONG64), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (LONG64*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(LONG64), 0, NULL);
+  else if (p)
+  { if (soap_s2LONG64(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_byte2s(struct soap *soap, char n)
+{ return soap_long2s(soap, (long)n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outbyte(struct soap *soap, const char *tag, int id, const char *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_long2s(soap, (long)*p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2byte(struct soap *soap, const char *s, char *p)
+{ if (s)
+  { long n;
+    char *r;
+    n = soap_strtol(s, &r, 10);
+    if (s == r || *r || n < -128 || n > 127)
+      soap->error = SOAP_TYPE;
+    *p = (char)n;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_inbyte(struct soap *soap, const char *tag, char *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0, NULL))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":byte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (char*)soap_id_enter(soap, soap->id, p, t, sizeof(char), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (char*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(char), 0, NULL);
+  else if (p)
+  { if (soap_s2byte(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_short2s(struct soap *soap, short n)
+{ return soap_long2s(soap, (long)n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outshort(struct soap *soap, const char *tag, int id, const short *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_long2s(soap, (long)*p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2short(struct soap *soap, const char *s, short *p)
+{ if (s)
+  { long n;
+    char *r;
+    n = soap_strtol(s, &r, 10);
+    if (s == r || *r || n < -32768 || n > 32767)
+      soap->error = SOAP_TYPE;
+    *p = (short)n;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+short *
+SOAP_FMAC2
+soap_inshort(struct soap *soap, const char *tag, short *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0, NULL))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":short")
+   && soap_match_tag(soap, soap->type, ":byte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (short*)soap_id_enter(soap, soap->id, p, t, sizeof(short), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (short*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(short), 0, NULL);
+  else if (p)
+  { if (soap_s2short(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_float2s(struct soap *soap, float n)
+{ char *s;
+  if (soap_isnan((double)n))
+    s = "NaN";
+  else if (soap_ispinff(n))
+    s = "INF";
+  else if (soap_isninff(n))
+    s = "-INF";
+  else
+  { char *t;
+    s = soap->tmpbuf;
+    sprintf(soap->tmpbuf, soap->float_format, n);
+    t = strchr(s, ',');        /* convert decimal comma to DP */
+    if (t)
+      *t = '.';
+  }
+  return s;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outfloat(struct soap *soap, const char *tag, int id, const float *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_float2s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2float(struct soap *soap, const char *s, float *p)
+{ if (s)
+  { if (!*s)
+      return soap->error = SOAP_TYPE;
+    if (!soap_tag_cmp(s, "INF"))
+      *p = FLT_PINFTY;
+    else if (!soap_tag_cmp(s, "+INF"))
+      *p = FLT_PINFTY;
+    else if (!soap_tag_cmp(s, "-INF"))
+      *p = FLT_NINFTY;
+    else if (!soap_tag_cmp(s, "NaN"))
+      *p = FLT_NAN;
+    else
+    {
+/* On some systems, strtof appears to be broken or doesn't link: use with caution */
+#if defined(HAVE_STRTOF)
+      char *r;
+      *p = strtof((char*)s, &r);
+      if (*r)
+#elif defined(HAVE_STRTOD)
+      char *r;
+      *p = (float)strtod(s, &r);
+      if (*r)
+#endif
+#ifdef HAVE_SSCANF
+        if (sscanf(s, "%g", p) != 1)
+          soap->error = SOAP_TYPE;
+#else
+        soap->error = SOAP_TYPE;
+#endif
+    }
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+static int soap_isnumeric(struct soap *soap, const char *type)
+{ if (soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":float")
+   && soap_match_tag(soap, soap->type, ":double")
+   && soap_match_tag(soap, soap->type, ":decimal")
+   && soap_match_tag(soap, soap->type, ":integer")
+   && soap_match_tag(soap, soap->type, ":positiveInteger")
+   && soap_match_tag(soap, soap->type, ":negativeInteger")
+   && soap_match_tag(soap, soap->type, ":nonPositiveInteger")
+   && soap_match_tag(soap, soap->type, ":nonNegativeInteger")
+   && soap_match_tag(soap, soap->type, ":long")
+   && soap_match_tag(soap, soap->type, ":int")
+   && soap_match_tag(soap, soap->type, ":short")
+   && soap_match_tag(soap, soap->type, ":byte")
+   && soap_match_tag(soap, soap->type, ":unsignedLong")
+   && soap_match_tag(soap, soap->type, ":unsignedInt")
+   && soap_match_tag(soap, soap->type, ":unsignedShort")
+   && soap_match_tag(soap, soap->type, ":unsignedByte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return SOAP_ERR;
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+float *
+SOAP_FMAC2
+soap_infloat(struct soap *soap, const char *tag, float *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0, NULL))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type != '\0' && soap_isnumeric(soap, type))
+    return NULL;
+#endif
+  p = (float*)soap_id_enter(soap, soap->id, p, t, sizeof(float), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (float*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(float), 0, NULL);
+  else if (p)
+  { if (soap_s2float(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_double2s(struct soap *soap, double n)
+{ char *s;
+  if (soap_isnan(n))
+    s = "NaN";
+  else if (soap_ispinfd(n))
+    s = "INF";
+  else if (soap_isninfd(n))
+    s = "-INF";
+  else
+  { char *t;
+    s = soap->tmpbuf;
+    sprintf(soap->tmpbuf, soap->double_format, n);
+    t = strchr(s, ',');        /* convert decimal comma to DP */
+    if (t)
+      *t = '.';
+  }
+  return s;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outdouble(struct soap *soap, const char *tag, int id, const double *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_double2s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2double(struct soap *soap, const char *s, double *p)
+{ if (s)
+  { if (!*s)
+      return soap->error = SOAP_TYPE;
+    if (!soap_tag_cmp(s, "INF"))
+      *p = DBL_PINFTY;
+    else if (!soap_tag_cmp(s, "+INF"))
+      *p = DBL_PINFTY;
+    else if (!soap_tag_cmp(s, "-INF"))
+      *p = DBL_NINFTY;
+    else if (!soap_tag_cmp(s, "NaN"))
+      *p = DBL_NAN;
+    else
+    {
+#ifdef HAVE_STRTOD
+      char *r;
+      *p = strtod(s, &r);
+      if (*r)
+#endif
+#ifdef HAVE_SSCANF
+        if (sscanf(s, "%lg", p) != 1)
+          soap->error = SOAP_TYPE;
+#else
+        soap->error = SOAP_TYPE;
+#endif
+    }
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+double *
+SOAP_FMAC2
+soap_indouble(struct soap *soap, const char *tag, double *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0, NULL))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type != '\0' && soap_isnumeric(soap, type))
+    return NULL;
+#endif
+  p = (double*)soap_id_enter(soap, soap->id, p, t, sizeof(double), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (double*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(double), 0, NULL);
+  else if (p)
+  { if (soap_s2double(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_unsignedByte2s(struct soap *soap, unsigned char n)
+{ return soap_unsignedLong2s(soap, (unsigned long)n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outunsignedByte(struct soap *soap, const char *tag, int id, const unsigned char *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_unsignedLong2s(soap, (unsigned long)*p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2unsignedByte(struct soap *soap, const char *s, unsigned char *p)
+{ if (s)
+  { unsigned long n;
+    char *r;
+    n = soap_strtoul(s, &r, 10);
+    if (s == r || *r || n > 255)
+      soap->error = SOAP_TYPE;
+    *p = (unsigned char)n;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+unsigned char *
+SOAP_FMAC2
+soap_inunsignedByte(struct soap *soap, const char *tag, unsigned char *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0, NULL))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":unsignedByte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (unsigned char*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned char), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (unsigned char*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(unsigned char), 0, NULL);
+  else if (p)
+  { if (soap_s2unsignedByte(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_unsignedShort2s(struct soap *soap, unsigned short n)
+{ return soap_unsignedLong2s(soap, (unsigned long)n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outunsignedShort(struct soap *soap, const char *tag, int id, const unsigned short *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_unsignedLong2s(soap, (unsigned long)*p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2unsignedShort(struct soap *soap, const char *s, unsigned short *p)
+{ if (s)
+  { unsigned long n;
+    char *r;
+    n = soap_strtoul(s, &r, 10);
+    if (s == r || *r || n > 65535)
+      soap->error = SOAP_TYPE;
+    *p = (unsigned short)n;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+unsigned short *
+SOAP_FMAC2
+soap_inunsignedShort(struct soap *soap, const char *tag, unsigned short *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0, NULL))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":unsignedShort")
+   && soap_match_tag(soap, soap->type, ":unsignedByte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (unsigned short*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned short), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (unsigned short*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(unsigned short), 0, NULL);
+  else if (p)
+  { if (soap_s2unsignedShort(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_unsignedInt2s(struct soap *soap, unsigned int n)
+{ return soap_unsignedLong2s(soap, (unsigned long)n);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outunsignedInt(struct soap *soap, const char *tag, int id, const unsigned int *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_unsignedLong2s(soap, (unsigned long)*p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2unsignedInt(struct soap *soap, const char *s, unsigned int *p)
+{ if (s)
+  { char *r;
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+    soap_reset_errno;
+#endif
+#endif
+    *p = (unsigned int)soap_strtoul(s, &r, 10);
+    if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+     || soap_errno == SOAP_ERANGE
+#endif
+#endif
+    )
+      soap->error = SOAP_TYPE;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+unsigned int *
+SOAP_FMAC2
+soap_inunsignedInt(struct soap *soap, const char *tag, unsigned int *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0, NULL))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":unsignedInt")
+   && soap_match_tag(soap, soap->type, ":unsignedShort")
+   && soap_match_tag(soap, soap->type, ":unsignedByte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (unsigned int*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned int), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (unsigned int*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(unsigned int), 0, NULL);
+  else if (p)
+  { if (soap_s2unsignedInt(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_unsignedLong2s(struct soap *soap, unsigned long n)
+{ sprintf(soap->tmpbuf, "%lu", n);
+  return soap->tmpbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outunsignedLong(struct soap *soap, const char *tag, int id, const unsigned long *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_unsignedLong2s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2unsignedLong(struct soap *soap, const char *s, unsigned long *p)
+{ if (s)
+  { char *r;
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+    soap_reset_errno;
+#endif
+#endif
+    *p = soap_strtoul(s, &r, 10);
+    if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+     || soap_errno == SOAP_ERANGE
+#endif
+#endif
+    )
+      soap->error = SOAP_TYPE;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+unsigned long *
+SOAP_FMAC2
+soap_inunsignedLong(struct soap *soap, const char *tag, unsigned long *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0, NULL))
+    return NULL;
+#ifndef WITH_LEAN
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":unsignedInt")
+   && soap_match_tag(soap, soap->type, ":unsignedShort")
+   && soap_match_tag(soap, soap->type, ":unsignedByte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+#endif
+  p = (unsigned long*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned long), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (unsigned long*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(unsigned long), 0, NULL);
+  else if (p)
+  { if (soap_s2unsignedLong(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_ULONG642s(struct soap *soap, ULONG64 n)
+{ sprintf(soap->tmpbuf, SOAP_ULONG_FORMAT, n);
+  return soap->tmpbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outULONG64(struct soap *soap, const char *tag, int id, const ULONG64 *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_ULONG642s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2ULONG64(struct soap *soap, const char *s, ULONG64 *p)
+{ if (s)
+  {
+#ifdef HAVE_STRTOULL
+    char *r;
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+    soap_reset_errno;
+#endif
+#endif
+    *p = strtoull(s, &r, 10);
+    if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+       || soap_errno == SOAP_ERANGE
+#endif
+#endif
+      )
+#else
+# ifdef HAVE_SSCANF
+    if (sscanf(s, SOAP_ULONG_FORMAT, p) != 1)
+# endif
+#endif
+      soap->error = SOAP_TYPE;
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+ULONG64 *
+SOAP_FMAC2
+soap_inULONG64(struct soap *soap, const char *tag, ULONG64 *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0, NULL))
+    return NULL;
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":positiveInteger")
+   && soap_match_tag(soap, soap->type, ":nonNegativeInteger")
+   && soap_match_tag(soap, soap->type, ":unsignedLong")
+   && soap_match_tag(soap, soap->type, ":unsignedInt")
+   && soap_match_tag(soap, soap->type, ":unsignedShort")
+   && soap_match_tag(soap, soap->type, ":unsignedByte"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+  p = (ULONG64*)soap_id_enter(soap, soap->id, p, t, sizeof(ULONG64), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (ULONG64*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(ULONG64), 0, NULL);
+  else if (p)
+  { if (soap_s2ULONG64(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2string(struct soap *soap, const char *s, char **t)
+{ *t = NULL;
+  if (s)
+  { if (!(*t = soap_strdup(soap, s)))
+      return soap->error = SOAP_EOM;
+    if (!(soap->mode & (SOAP_ENC_LATIN | SOAP_C_UTFSTRING)))
+    { /* TODO: consider truncating UTF8 to ASCII for regular XML attribute strings? */
+    }
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2QName(struct soap *soap, const char *s, char **t)
+{ if (s)
+  { struct soap_nlist *np = soap->nlist;
+    const char *p;
+    /* if there is no namespace stack, or prefix is "xml" then pass string */
+    if (!np || !strncmp(s, "xml:", 4))
+    { *t = soap_strdup(soap, s);
+      return SOAP_OK;
+    }
+    /* else we normalize the QName by replacing its prefix */
+    p = strchr(s, ':');
+    if (p)
+    { register int n = p - s;
+      while (np && (strncmp(np->id, s, n) || np->id[n]))
+        np = np->next;
+      p++;
+    }
+    else
+    { while (np && *np->id)
+        np = np->next;
+      p = s;
+    }
+    if (np)
+    { if (np->index >= 0 && soap->local_namespaces)
+      { register const char *q = soap->local_namespaces[np->index].id;
+        if (q)
+        { if ((*t = (char*)soap_malloc(soap, strlen(p) + strlen(q) + 2)))
+            sprintf(*t, "%s:%s", q, p);
+          return SOAP_OK;
+        }
+      }
+      if (np->ns)
+      { if ((*t = (char*)soap_malloc(soap, strlen(p) + strlen(np->ns) + 4)))
+          sprintf(*t, "\"%s\":%s", np->ns, p);
+        return SOAP_OK;
+      }
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Namespace prefix of '%s' not defined (index=%d, URI=%s)\n", s, np->index, np->ns?np->ns:""));
+      return soap->error = SOAP_NAMESPACE; 
+    }
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Namespace prefix of '%s' not defined, assuming empty namespace\n", s));
+    if ((*t = (char*)soap_malloc(soap, strlen(p) + 4)))
+      sprintf(*t, "\"\":%s", p);
+  }
+  else
+    *t = NULL;
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_QName2s(struct soap *soap, const char *s)
+{ struct Namespace *p;
+  char *t;
+  int n;
+  if (!s || *s != '"')
+  {
+#ifndef WITH_LEAN
+    if (s && (soap->mode & SOAP_XML_CANONICAL))
+    { t = (char*)strchr(s, ':');
+      if (t)
+        soap_utilize_ns(soap, s, t - s);
+    }
+#endif
+    return s;
+  }
+  s++;
+  if ((p = soap->local_namespaces))
+  { for (; p->id; p++)
+    { if (p->ns)
+        if (!soap_tag_cmp(s, p->ns))
+          break;
+      if (p->in)
+        if (!soap_tag_cmp(s, p->in))
+          break;
+    }
+    if (p && p->id)
+    { s = strchr(s, '"');
+      if (s)
+      { t = (char*)soap_malloc(soap, strlen(p->id) + strlen(s));
+        strcpy(t, p->id);
+        strcat(t, s + 1);
+        return t;
+      }
+    }
+  }
+  t = (char*)strchr(s, '"');
+  if (t)
+    n = t - s;
+  else
+    n = 0;
+  t = soap_strdup(soap, s);
+  t[n] = '\0';
+  sprintf(soap->tmpbuf, "xmlns:_%d", soap->idnum++);
+  soap_set_attr(soap, soap->tmpbuf, t);
+  s = strchr(s, '"');
+  if (s)
+  { t = (char*)soap_malloc(soap, strlen(soap->tmpbuf) + strlen(s) - 6);
+    strcpy(t, soap->tmpbuf + 6);
+    strcat(t, s + 1);
+  }
+  return t;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2wchar(struct soap *soap, const char *s, wchar_t **t)
+{ wchar_t *r;
+  if (!s)
+    *t = NULL;
+  else
+  { *t = r = (wchar_t*)soap_malloc(soap, sizeof(wchar_t) * (strlen(s) + 1));
+    if (!r)
+      return soap->error;
+    if (soap->mode & SOAP_ENC_LATIN)
+    { while (*s)
+        *r++ = (wchar_t)*s++;
+    }
+    else
+    { /* Convert UTF8 to wchar */
+      while (*s)
+      { register soap_wchar c, c1, c2, c3, c4;
+        c = *s++;
+        if (c < 0x80)
+          *r++ = (wchar_t)c;
+        else
+        { c1 = (soap_wchar)*s++ & 0x3F;
+          if (c < 0xE0)
+            *r++ = (wchar_t)(((soap_wchar)(c & 0x1F) << 6) | c1);
+          else
+          { c2 = (soap_wchar)*s++ & 0x3F;
+            if (c < 0xF0)
+              *r++ = (wchar_t)(((soap_wchar)(c & 0x0F) << 12) | (c1 << 6) | c2);
+            else
+            { c3 = (soap_wchar)*s++ & 0x3F;
+              if (c < 0xF8)
+                *r++ = (wchar_t)(((soap_wchar)(c & 0x07) << 18) | (c1 << 12) | (c2 << 6) | c3);
+              else
+              { c4 = (soap_wchar)*s++ & 0x3F;
+                if (c < 0xFC)
+                  *r++ = (wchar_t)(((soap_wchar)(c & 0x03) << 24) | (c1 << 18) | (c2 << 12) | (c3 << 6) | c4);
+                else
+                 *r++ = (wchar_t)(((soap_wchar)(c & 0x01) << 30) | (c1 << 24) | (c2 << 18) | (c3 << 12) | (c4 << 6) | (soap_wchar)(*s++ & 0x3F));
+              }
+            }
+          }
+        }
+      }
+    }
+    *r = L'\0';
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_wchar2s(struct soap *soap, const wchar_t *s)
+{ register soap_wchar c;
+  register char *r, *t;
+  const wchar_t *q = s;
+  size_t n = 0;
+  while ((c = *q++))
+  { if (c > 0 && c < 0x80)
+      n++;
+    else
+      n += 6;
+  }
+  r = t = (char*)soap_malloc(soap, n + 1);
+  if (r)
+  { /* Convert wchar to UTF8 */
+    while ((c = *s++))
+    { if (c > 0 && c < 0x80)
+        *t++ = (char)c;
+      else
+      { if (c < 0x0800)
+          *t++ = (char)(0xC0 | ((c >> 6) & 0x1F));
+        else
+        { if (c < 0x010000)
+            *t++ = (char)(0xE0 | ((c >> 12) & 0x0F));
+          else
+          { if (c < 0x200000)
+              *t++ = (char)(0xF0 | ((c >> 18) & 0x07));
+            else
+            { if (c < 0x04000000)
+                *t++ = (char)(0xF8 | ((c >> 24) & 0x03));
+              else
+              { *t++ = (char)(0xFC | ((c >> 30) & 0x01));
+                *t++ = (char)(0x80 | ((c >> 24) & 0x3F));
+              }
+              *t++ = (char)(0x80 | ((c >> 18) & 0x3F));
+            }     
+            *t++ = (char)(0x80 | ((c >> 12) & 0x3F));
+          }
+          *t++ = (char)(0x80 | ((c >> 6) & 0x3F));
+        }
+        *t++ = (char)(0x80 | (c & 0x3F));
+      }
+    }
+    *t = '\0';
+  }
+  return r;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outstring(struct soap *soap, const char *tag, int id, char *const*p, const char *type, int n) 
+{ id = soap_element_id(soap, tag, id, *p, NULL, 0, type, n);
+  if (id < 0)
+    return soap->error;
+  if (!**p && (soap->mode & SOAP_C_NILSTRING))
+    return soap_element_null(soap, tag, id, type);
+  if (soap_element_begin_out(soap, tag, id, type)
+   || soap_string_out(soap, *p, 0)
+   || soap_element_end_out(soap, tag))
+    return soap->error;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char **
+SOAP_FMAC2
+soap_instring(struct soap *soap, const char *tag, char **p, const char *type, int t, int flag, long minlen, long maxlen)
+{ if (soap_element_begin_in(soap, tag, 1, NULL))
+  { if (!tag || *tag != '-' || soap->error != SOAP_NO_TAG)
+      return NULL;
+    soap->error = SOAP_OK;
+  }
+  if (!p)
+    if (!(p = (char**)soap_malloc(soap, sizeof(char*))))
+      return NULL;
+  if (soap->body)
+  { *p = soap_string_in(soap, flag, minlen, maxlen);
+    if (!*p || !(char*)soap_id_enter(soap, soap->id, *p, t, sizeof(char*), 0, NULL, NULL, NULL))
+      return NULL;
+  }
+  else if (soap->null)
+    *p = NULL;
+  else
+    *p = (char*)SOAP_STR_EOS;
+  if (*soap->href)
+    p = (char**)soap_id_lookup(soap, soap->href, (void**)p, t, sizeof(char**), 0);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outwstring(struct soap *soap, const char *tag, int id, wchar_t *const*p, const char *type, int n) 
+{ id = soap_element_id(soap, tag, id, *p, NULL, 0, type, n);
+  if (id < 0)
+    return soap->error;
+  if (!**p && (soap->mode & SOAP_C_NILSTRING))
+    return soap_element_null(soap, tag, id, type);
+  if (soap_element_begin_out(soap, tag, id, type)
+   || soap_wstring_out(soap, *p, 0)
+   || soap_element_end_out(soap, tag))
+    return soap->error;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_2
+SOAP_FMAC1
+wchar_t **
+SOAP_FMAC2
+soap_inwstring(struct soap *soap, const char *tag, wchar_t **p, const char *type, int t, long minlen, long maxlen)
+{ if (soap_element_begin_in(soap, tag, 1, NULL))
+  { if (!tag || *tag != '-' || soap->error != SOAP_NO_TAG)
+      return NULL;
+    soap->error = SOAP_OK;
+  }
+  if (!p)
+    if (!(p = (wchar_t**)soap_malloc(soap, sizeof(wchar_t*))))
+      return NULL;
+  if (soap->body)
+  { *p = soap_wstring_in(soap, 1, minlen, maxlen);
+    if (!*p || !(wchar_t*)soap_id_enter(soap, soap->id, *p, t, sizeof(wchar_t*), 0, NULL, NULL, NULL))
+      return NULL;
+  }
+  else if (soap->null)
+    *p = NULL;
+  else
+    *p = (wchar_t*)SOAP_STR_EOS;
+  if (*soap->href)
+    p = (wchar_t**)soap_id_lookup(soap, soap->href, (void**)p, t, sizeof(wchar_t**), 0);
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+static time_t
+soap_timegm(struct tm *T)
+{
+#if defined(HAVE_TIMEGM)
+  return timegm(T);
+#else
+  time_t t, g, z;
+#ifdef HAVE_GMTIME_R
+  struct tm tm, *tmp = &tm;
+#else
+  struct tm *tmp;
+#endif
+  t = mktime(T);
+  if (t == -1)
+    return -1;
+#ifdef HAVE_GMTIME_R
+  gmtime_r(&t, tmp);
+#else
+  tmp = gmtime(&t);
+#endif
+  tmp->tm_isdst = 0;
+  g = mktime(tmp);
+  if (g == -1)
+    return -1;
+  z = g - t;
+  return t - z;
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_dateTime2s(struct soap *soap, time_t n)
+{ struct tm T, *pT = &T;
+#if defined(HAVE_GMTIME_R)
+  if (gmtime_r(&n, pT))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%SZ", pT);
+  /* The following defines were added for VxWorks*/
+#elif defined(HAVE_PGMTIME_R)
+  if (gmtime_r(&n, pT))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%SZ", pT);
+#elif defined(HAVE_PGMTIME)
+  if (gmtime(&n, pT))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%SZ", pT);
+#elif defined(HAVE_GMTIME)
+  if ((pT = gmtime(&n)))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%SZ", pT);
+#elif defined(HAVE_GETTIMEOFDAY)
+  struct timezone tz;
+  memset((void*)&tz, 0, sizeof(tz));
+# if defined(HAVE_LOCALTIME_R)
+  if (localtime_r(&n, pT))
+  { struct timeval tv;
+    gettimeofday(&tv, &tz);
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+    sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -tz.tz_minuteswest/60+(pT->tm_isdst!=0), abs(tz.tz_minuteswest)%60);
+  }
+# else
+  if ((pT = localtime(&n)))
+  { struct timeval tv;
+    gettimeofday(&tv, &tz);
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+    sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -tz.tz_minuteswest/60+(pT->tm_isdst!=0), abs(tz.tz_minuteswest)%60);
+  }
+#endif
+#elif defined(HAVE_FTIME)
+  struct timeb t;
+  memset((void*)&t, 0, sizeof(t));
+# if defined(HAVE_LOCALTIME_R)
+  if (localtime_r(&n, pT))
+  {
+#ifdef __BORLANDC__
+    ::ftime(&t);
+#else
+    ftime(&t);
+#endif
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+    sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -t.timezone/60+(pT->tm_isdst!=0), abs(t.timezone)%60);
+  }
+  /* The following defines were added for VxWorks*/
+# elif defined(HAVE_PLOCALTIME_R)
+  if (localtime_r(&n, pT))
+  { strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+    sprintf(soap->tmpbuf+strlen(soap->tmpbuf), "%+03d:%02d", t.timezone/60, abs(t.timezone)%60);
+  }
+# else
+  if ((pT = localtime(&n)))
+  {
+#ifdef __BORLANDC__
+    ::ftime(&t);
+#else
+    ftime(&t);
+#endif
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+    sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -t.timezone/60+(pT->tm_isdst!=0), abs(t.timezone)%60);
+  }
+# endif
+#elif defined(HAVE_LOCALTIME_R)
+  if (localtime_r(&n, pT))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+  /* The following defines were added for VxWorks*/
+#elif defined(HAVE_PLOCALTIME_R)
+  if (localtime_r(&n, pT))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+#else
+  if ((pT = localtime(&n)))
+    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
+#endif
+  else
+    strcpy(soap->tmpbuf, "1969-12-31T23:59:59Z");
+  return soap->tmpbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outdateTime(struct soap *soap, const char *tag, int id, const time_t *p, const char *type, int n)
+{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
+   || soap_string_out(soap, soap_dateTime2s(soap, *p), 0))
+    return soap->error;
+  return soap_element_end_out(soap, tag);
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_s2dateTime(struct soap *soap, const char *s, time_t *p)
+{ if (s)
+  { struct tm T;
+    char zone[32];
+    const char *t;
+    memset((void*)&T, 0, sizeof(T));
+    zone[sizeof(zone)-1] = '\0';
+    if (strchr(s, '-'))
+      t = "%d-%d-%dT%d:%d:%d%31s";
+    else if (strchr(s, ':'))
+      t = "%4d%2d%2dT%d:%d:%d%31s";
+    else /* parse non-XSD-standard alternative ISO 8601 format */
+      t = "%4d%2d%2dT%2d%2d%2d%31s";
+    sscanf(s, t, &T.tm_year, &T.tm_mon, &T.tm_mday, &T.tm_hour, &T.tm_min, &T.tm_sec, zone);
+    if (T.tm_year == 1)
+      T.tm_year = 70;
+    else
+      T.tm_year -= 1900;
+    T.tm_mon--;
+    if (*zone)
+    { if (*zone == '.')
+      { for (s = zone + 1; *s; s++)
+          if (*s < '0' || *s > '9')
+            break;
+      }
+      else
+        s = zone;
+      if (*s == '+' || *s == '-')
+      { int h = 0, m = 0;
+        if (s[3] == ':')
+        { sscanf(s, "%d:%d", &h, &m);
+          if (h < 0)
+            m = -m;
+        }
+        else
+        { m = (int)atol(s);
+          h = m / 100;
+          m = m % 100;
+        }
+        T.tm_hour -= h;
+        T.tm_min -= m;
+      }
+      T.tm_isdst = 0;
+      *p = soap_timegm(&T);
+    }
+    else
+    { T.tm_isdst = -1;
+      *p = mktime(&T); /* no time zone: suppose it is localtime? */
+    }
+  }
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+time_t *
+SOAP_FMAC2
+soap_indateTime(struct soap *soap, const char *tag, time_t *p, const char *type, int t)
+{ if (soap_element_begin_in(soap, tag, 0, NULL))
+    return NULL;
+  if (*soap->type
+   && soap_match_tag(soap, soap->type, type)
+   && soap_match_tag(soap, soap->type, ":dateTime"))
+  { soap->error = SOAP_TYPE;
+    soap_revert(soap);
+    return NULL;
+  }
+  p = (time_t*)soap_id_enter(soap, soap->id, p, t, sizeof(time_t), 0, NULL, NULL, NULL);
+  if (*soap->href)
+    p = (time_t*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(time_t), 0, NULL);
+  else if (p)
+  { if (soap_s2dateTime(soap, soap_value(soap), p))
+      return NULL;
+  }
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outliteral(struct soap *soap, const char *tag, char *const*p, const char *type)
+{ int i;
+  const char *t = NULL;
+  if (tag && *tag != '-')
+  { if (soap->local_namespaces && (t = strchr(tag, ':')))
+    { strncpy(soap->tmpbuf, tag, t-tag);
+      soap->tmpbuf[t-tag] = '\0';
+      for (i = 0; soap->local_namespaces[i].id; i++)
+        if (!strcmp(soap->tmpbuf, soap->local_namespaces[i].id))
+          break;
+      t++;
+      if (soap_element(soap, t, 0, type)
+       || soap_attribute(soap, "xmlns", soap->local_namespaces[i].ns ? soap->local_namespaces[i].ns : SOAP_STR_EOS)
+       || soap_element_start_end_out(soap, NULL))
+        return soap->error;
+    }
+    else
+    { t = tag;
+      if (soap_element_begin_out(soap, t, 0, type))
+        return soap->error;
+    }
+  }
+  if (p && *p)
+  { if (soap_send(soap, *p))
+      return soap->error;
+  }
+  if (t)
+    return soap_element_end_out(soap, t);
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+char **
+SOAP_FMAC2
+soap_inliteral(struct soap *soap, const char *tag, char **p)
+{ if (soap_element_begin_in(soap, tag, 1, NULL))
+  { if (soap->error != SOAP_NO_TAG || soap_unget(soap, soap_get(soap)) == SOAP_TT)
+      return NULL;
+    soap->error = SOAP_OK;
+  }
+  if (!p)
+    if (!(p = (char**)soap_malloc(soap, sizeof(char*))))
+      return NULL;
+  if (soap->body)
+    *p = soap_string_in(soap, 0, -1, -1);
+  else if (soap->null)
+    *p = NULL;
+  else
+    *p = (char*)SOAP_STR_EOS;
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_outwliteral(struct soap *soap, const char *tag, wchar_t *const*p, const char *type)
+{ int i;
+  const char *t = NULL;
+  if (tag && *tag != '-')
+  { if (soap->local_namespaces && (t = strchr(tag, ':')))
+    { strncpy(soap->tmpbuf, tag, t-tag);
+      soap->tmpbuf[t-tag] = '\0';
+      for (i = 0; soap->local_namespaces[i].id; i++)
+        if (!strcmp(soap->tmpbuf, soap->local_namespaces[i].id))
+          break;
+      t++;
+      if (soap_element(soap, t, 0, type)
+       || soap_attribute(soap, "xmlns", soap->local_namespaces[i].ns ? soap->local_namespaces[i].ns : SOAP_STR_EOS)
+       || soap_element_start_end_out(soap, NULL))
+        return soap->error;
+    }
+    else
+    { t = tag;
+      if (soap_element_begin_out(soap, t, 0, type))
+        return soap->error;
+    }
+    if (soap_send(soap, soap->tmpbuf))
+      return soap->error;
+  }
+  if (p)
+  { wchar_t c;
+    const wchar_t *s = *p;
+    while ((c = *s++))
+    { if (soap_pututf8(soap, (unsigned long)c))
+        return soap->error;
+    }
+  }
+  if (t)
+    return soap_element_end_out(soap, t);
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_2
+SOAP_FMAC1
+wchar_t **
+SOAP_FMAC2
+soap_inwliteral(struct soap *soap, const char *tag, wchar_t **p)
+{ if (soap_element_begin_in(soap, tag, 1, NULL))
+  { if (soap->error != SOAP_NO_TAG || soap_unget(soap, soap_get(soap)) == SOAP_TT)
+      return NULL;
+    soap->error = SOAP_OK;
+  }
+  if (!p)
+    if (!(p = (wchar_t**)soap_malloc(soap, sizeof(wchar_t*))))
+      return NULL;
+  if (soap->body)
+    *p = soap_wstring_in(soap, 0, -1, -1);
+  else if (soap->null)
+    *p = NULL;
+  else
+    *p = (wchar_t*)SOAP_STR_EOS;
+  if (soap->body && soap_element_end_in(soap, tag))
+    return NULL;
+  return p;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+const char *
+SOAP_FMAC2
+soap_value(struct soap *soap)
+{ register size_t i;
+  register soap_wchar c = 0;
+  register char *s = soap->tmpbuf;
+  if (!soap->body)
+    return SOAP_STR_EOS;
+  do c = soap_get(soap);
+  while (soap_blank(c));
+  for (i = 0; i < sizeof(soap->tmpbuf) - 1; i++)
+  { if (c == SOAP_TT || (int)c == EOF)
+      break;
+    *s++ = (char)c;
+    c = soap_get(soap);
+  }
+  for (s--; i > 0; i--, s--)
+  { if (!soap_blank(*s))
+      break;
+  }
+  s[1] = '\0';
+  if ((int)c == EOF || c == SOAP_TT)
+    soap_unget(soap, c);
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element content value='%s'\n", soap->tmpbuf));
+#ifdef WITH_DOM
+  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
+    soap->dom->data = soap_strdup(soap, soap->tmpbuf);
+#endif
+  return soap->tmpbuf; /* return non-null pointer */
+}
+#endif
+
+/******************************************************************************/
+#if !defined(WITH_LEANER) || !defined(WITH_NOHTTP)
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getline(struct soap *soap, char *s, int len)
+{ int i = len;
+  soap_wchar c = 0;
+  for (;;)
+  { while (--i > 0)
+    { c = soap_getchar(soap);
+      if (c == '\r' || c == '\n')
+        break;
+      if ((int)c == EOF)
+        return soap->error = SOAP_EOF;
+      *s++ = (char)c;
+    }
+    if (c != '\n')
+      c = soap_getchar(soap); /* got \r, now get \n */
+    if (c == '\n')
+    { *s = '\0';
+      if (i+1 == len) /* empty line: end of HTTP/MIME header */
+        break;
+      c = soap_unget(soap, soap_getchar(soap));
+      if (c != ' ' && c != '\t') /* HTTP line continuation? */
+        break;
+    }
+    else if ((int)c == EOF)
+      return soap->error = SOAP_EOF;
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static size_t
+soap_count_attachments(struct soap *soap)
+{ 
+#ifndef WITH_LEANER
+  register struct soap_multipart *content;
+  register size_t count = soap->count;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Calculating the message size with attachments, current count=%lu\n", (unsigned long)count));
+  if ((soap->mode & SOAP_ENC_DIME) && !(soap->mode & SOAP_ENC_MTOM))
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Calculating the size of DIME attachments\n"));
+    for (content = soap->dime.first; content; content = content->next)
+    { count += 12 + ((content->size+3)&(~3));
+      if (content->id)
+        count += ((strlen(content->id)+3)&(~3));
+      if (content->type)
+        count += ((strlen(content->type)+3)&(~3));
+      if (content->options)
+        count += ((((unsigned char)content->options[2] << 8) | ((unsigned char)content->options[3]))+7)&(~3);
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Size of DIME attachment content is %lu bytes\n", (unsigned long)content->size));
+    }
+  }
+  if ((soap->mode & SOAP_ENC_MIME) && soap->mime.boundary)
+  { register size_t n = strlen(soap->mime.boundary);
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Calculating the size of MIME attachments\n"));
+    for (content = soap->mime.first; content; content = content->next)
+    { register const char *s;
+      /* count \r\n--boundary\r\n */
+      count += 6 + n;
+      /* count Content-Type: ...\r\n */
+      if (content->type)
+        count += 16 + strlen(content->type);
+      /* count Content-Transfer-Encoding: ...\r\n */
+      s = soap_code_str(mime_codes, content->encoding);
+      if (s)
+        count += 29 + strlen(s);
+      /* count Content-ID: ...\r\n */
+      if (content->id)
+        count += 14 + strlen(content->id);
+      /* count Content-Location: ...\r\n */
+      if (content->location)
+        count += 20 + strlen(content->location);
+      /* count Content-Description: ...\r\n */
+      if (content->description)
+        count += 23 + strlen(content->description);
+      /* count \r\n...content */
+      count += 2 + content->size;
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Size of MIME attachment content is %lu bytes\n", (unsigned long)content->size));
+    }
+    /* count \r\n--boundary-- */
+    count += 6 + n;
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New count is %lu bytes\n", (unsigned long)count));
+  return count;
+#else
+  return soap->count;
+#endif
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+static int
+soap_putdimefield(struct soap *soap, const char *s, size_t n)
+{ if (soap_send_raw(soap, s, n))
+    return soap->error;
+  return soap_send_raw(soap, SOAP_STR_PADDING, -(long)n&3);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_dime_option(struct soap *soap, unsigned short optype, const char *option)
+{ size_t n;
+  char *s = NULL;
+  if (option)
+  { n = strlen(option);
+    s = (char*)soap_malloc(soap, n + 5);
+    if (s)
+    { s[0] = optype >> 8;
+      s[1] = optype & 0xFF;
+      s[2] = n >> 8;
+      s[3] = n & 0xFF;
+      strcpy(s + 4, option);
+    }
+  }
+  return s;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putdimehdr(struct soap *soap)
+{ unsigned char tmp[12];
+  size_t optlen = 0, idlen = 0, typelen = 0;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Put DIME header id='%s'\n", soap->dime.id?soap->dime.id:""));
+  if (soap->dime.options)
+    optlen = (((unsigned char)soap->dime.options[2] << 8) | ((unsigned char)soap->dime.options[3])) + 4;
+  if (soap->dime.id)
+    idlen = strlen(soap->dime.id);
+  if (soap->dime.type)
+    typelen = strlen(soap->dime.type);
+  tmp[0] = SOAP_DIME_VERSION | (soap->dime.flags & 0x7);
+  tmp[1] = soap->dime.flags & 0xF0;
+  tmp[2] = optlen >> 8;
+  tmp[3] = optlen & 0xFF;
+  tmp[4] = idlen >> 8;
+  tmp[5] = idlen & 0xFF;
+  tmp[6] = typelen >> 8;
+  tmp[7] = typelen & 0xFF;
+  tmp[8] = soap->dime.size >> 24;
+  tmp[9] = (soap->dime.size >> 16) & 0xFF;
+  tmp[10] = (soap->dime.size >> 8) & 0xFF;
+  tmp[11] = soap->dime.size & 0xFF;
+  if (soap_send_raw(soap, (char*)tmp, 12)
+   || soap_putdimefield(soap, soap->dime.options, optlen)
+   || soap_putdimefield(soap, soap->dime.id, idlen)
+   || soap_putdimefield(soap, soap->dime.type, typelen))
+    return soap->error;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putdime(struct soap *soap)
+{ struct soap_multipart *content;
+  if (!(soap->mode & SOAP_ENC_DIME))
+    return SOAP_OK;
+  for (content = soap->dime.first; content; content = content->next)
+  { void *handle;
+    soap->dime.size = content->size;
+    soap->dime.id = content->id;
+    soap->dime.type = content->type;
+    soap->dime.options = content->options;
+    soap->dime.flags = SOAP_DIME_VERSION | SOAP_DIME_MEDIA;
+    if (soap->fdimereadopen && ((handle = soap->fdimereadopen(soap, (void*)content->ptr, content->id, content->type, content->options)) || soap->error))
+    { size_t size = content->size;
+      if (!handle)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimereadopen failed\n"));
+        return soap->error;
+      }
+      if (!size && ((soap->mode & SOAP_ENC_XML) || (soap->mode & SOAP_IO) == SOAP_IO_CHUNK || (soap->mode & SOAP_IO) == SOAP_IO_STORE))
+      { size_t chunksize = sizeof(soap->tmpbuf);
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked streaming DIME\n"));
+        do 
+        { size = soap->fdimeread(soap, handle, soap->tmpbuf, chunksize);
+          DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimeread returned %lu bytes\n", (unsigned long)size));
+          if (size < chunksize)
+         { soap->dime.flags &= ~SOAP_DIME_CF;
+            if (!content->next)
+              soap->dime.flags |= SOAP_DIME_ME;
+          }
+          else
+            soap->dime.flags |= SOAP_DIME_CF;
+          soap->dime.size = size;
+          if (soap_putdimehdr(soap)
+           || soap_putdimefield(soap, soap->tmpbuf, size))
+            break;
+          if (soap->dime.id)
+         { soap->dime.flags &= ~(SOAP_DIME_MB | SOAP_DIME_MEDIA);
+            soap->dime.id = NULL;
+            soap->dime.type = NULL;
+            soap->dime.options = NULL;
+          }  
+        } while (size >= chunksize);
+      }
+      else
+      { if (!content->next)
+          soap->dime.flags |= SOAP_DIME_ME;
+        if (soap_putdimehdr(soap))
+          return soap->error;
+        do
+        { size_t bufsize;
+          if (size < sizeof(soap->tmpbuf))
+            bufsize = size;
+          else
+            bufsize = sizeof(soap->tmpbuf);
+          if (!(bufsize = soap->fdimeread(soap, handle, soap->tmpbuf, bufsize)))
+          { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimeread failed: insufficient data (%lu bytes remaining from %lu bytes)\n", (unsigned long)size, (unsigned long)content->size));
+            soap->error = SOAP_EOF;
+            break;
+          }
+          if (soap_send_raw(soap, soap->tmpbuf, bufsize))
+            break;
+          size -= bufsize;
+        } while (size);
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimereadclose\n"));
+        soap_send_raw(soap, SOAP_STR_PADDING, -(long)soap->dime.size&3);
+      }
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimereadclose\n"));
+      if (soap->fdimereadclose)
+        soap->fdimereadclose(soap, handle);
+    }
+    else
+    { if (!content->next)
+        soap->dime.flags |= SOAP_DIME_ME;
+      if (soap_putdimehdr(soap)
+       || soap_putdimefield(soap, (char*)content->ptr, content->size))
+        return soap->error;
+    }
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+static char *
+soap_getdimefield(struct soap *soap, size_t n)
+{ register soap_wchar c;
+  register int i;
+  register char *s;
+  char *p = NULL;
+  if (n)
+  { p = (char*)soap_malloc(soap, n + 1);
+    if (p)
+    { s = p;
+      for (i = n; i > 0; i--)
+      { if ((int)(c = soap_get1(soap)) == EOF)
+        { soap->error = SOAP_EOF;
+          return NULL;
+        }
+        *s++ = (char)c;
+      }
+      *s = '\0';
+      if ((soap->error = soap_move(soap, -(long)n&3)))
+        return NULL;
+    }
+    else
+      soap->error = SOAP_EOM;
+  }
+  return p;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getdimehdr(struct soap *soap)
+{ register soap_wchar c;
+  register char *s;
+  register int i;
+  unsigned char tmp[12];
+  size_t optlen, idlen, typelen;
+  if (!(soap->mode & SOAP_ENC_DIME))
+    return soap->error = SOAP_DIME_END;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get DIME header\n"));
+  if (soap->dime.buflen || soap->dime.chunksize)
+  { if (soap_move(soap, (long)(soap->dime.size - soap_tell(soap))))
+      return soap->error = SOAP_EOF;
+    soap_unget(soap, soap_getchar(soap)); /* skip padding and get hdr */
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... From chunked\n"));
+    return SOAP_OK;
+  }
+  s = (char*)tmp;
+  for (i = 12; i > 0; i--)
+  { if ((int)(c = soap_getchar(soap)) == EOF)
+      return soap->error = SOAP_EOF;
+    *s++ = (char)c;
+  }
+  if ((tmp[0] & 0xF8) != SOAP_DIME_VERSION)
+    return soap->error = SOAP_DIME_MISMATCH;
+  soap->dime.flags = (tmp[0] & 0x7) | (tmp[1] & 0xF0);
+  optlen = (tmp[2] << 8) | tmp[3];
+  idlen = (tmp[4] << 8) | tmp[5];
+  typelen = (tmp[6] << 8) | tmp[7];
+  soap->dime.size = (tmp[8] << 24) | (tmp[9] << 16) | (tmp[10] << 8) | tmp[11];
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DIME size=%lu flags=0x%X\n", (unsigned long)soap->dime.size, soap->dime.flags));
+  if (!(soap->dime.options = soap_getdimefield(soap, optlen)) && soap->error)
+    return soap->error;
+  if (!(soap->dime.id = soap_getdimefield(soap, idlen)) && soap->error)
+    return soap->error;
+  if (!(soap->dime.type = soap_getdimefield(soap, typelen)) && soap->error)
+    return soap->error;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DIME id=%s, type=%s, options=%s\n", soap->dime.id?soap->dime.id:"", soap->dime.type?soap->dime.type:"", soap->dime.options?soap->dime.options+4:""));
+  if (soap->dime.flags & SOAP_DIME_ME)
+    soap->mode &= ~SOAP_ENC_DIME;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getdime(struct soap *soap)
+{ while (soap->dime.flags & SOAP_DIME_CF)
+  { if (soap_getdimehdr(soap))
+      return soap->error;
+    if (soap_move(soap, soap->dime.size))
+      return soap->error = SOAP_EOF;
+  }
+  if (soap_move(soap, ((soap->dime.size+3)&(~3))-soap_tell(soap)))
+    return soap->error = SOAP_EOF;
+  for (;;)
+  { register struct soap_multipart *content;
+    if (soap_getdimehdr(soap))
+      break;
+    if (soap->fdimewriteopen && ((soap->dime.ptr = (char*)soap->fdimewriteopen(soap, soap->dime.id, soap->dime.type, soap->dime.options)) || soap->error))
+    { const char *id, *type, *options;
+      size_t size, n;
+      if (!soap->dime.ptr)
+        return soap->error;
+      id = soap->dime.id;
+      type = soap->dime.type;
+      options = soap->dime.options;
+      for (;;)
+      { size = soap->dime.size;
+        for (;;)
+        { n = soap->buflen - soap->bufidx;
+          if (size < n)
+            n = size;
+          if ((soap->error = soap->fdimewrite(soap, (void*)soap->dime.ptr, soap->buf + soap->bufidx, n)))
+            break;
+          size -= n;
+          if (!size)
+          { soap->bufidx += n;
+            break;
+          }
+          if (soap_recv(soap))
+          { soap->error = SOAP_EOF;
+            goto end;
+          }
+        }
+        if (soap_move(soap, -(long)soap->dime.size&3))
+        { soap->error = SOAP_EOF;
+          break;
+        }
+        if (!(soap->dime.flags & SOAP_DIME_CF))
+          break;
+        if (soap_getdimehdr(soap))
+          break;
+      }
+end:
+      if (soap->fdimewriteclose)
+        soap->fdimewriteclose(soap, (void*)soap->dime.ptr);
+      soap->dime.size = 0;
+      soap->dime.id = id;
+      soap->dime.type = type;
+      soap->dime.options = options;
+    }
+    else if (soap->dime.flags & SOAP_DIME_CF)
+    { const char *id, *type, *options;
+      register soap_wchar c;
+      register char *s;
+      register int i;
+      id = soap->dime.id;
+      type = soap->dime.type;
+      options = soap->dime.options;
+      if (soap_new_block(soap))
+        return SOAP_EOM;
+      for (;;)
+      { s = (char*)soap_push_block(soap, soap->dime.size);
+        if (!s)
+          return soap->error = SOAP_EOM;
+        for (i = soap->dime.size; i > 0; i--)
+        { if ((int)(c = soap_get1(soap)) == EOF)
+            return soap->error = SOAP_EOF;
+          *s++ = (char)c;
+        }
+        if (soap_move(soap, -(long)soap->dime.size&3))
+          return soap->error = SOAP_EOF;
+        if (!(soap->dime.flags & SOAP_DIME_CF))
+          break;
+        if (soap_getdimehdr(soap))
+          return soap->error;
+      }
+      soap->dime.size = soap->blist->size++; /* allocate one more for '\0' */
+      if (!(soap->dime.ptr = soap_save_block(soap, NULL, 0)))
+        return soap->error;
+      soap->dime.ptr[soap->dime.size] = '\0'; /* force 0-terminated */
+      soap->dime.id = id;
+      soap->dime.type = type;
+      soap->dime.options = options;
+    }
+    else
+      soap->dime.ptr = soap_getdimefield(soap, soap->dime.size);
+    content = soap_new_multipart(soap, &soap->dime.first, &soap->dime.last, soap->dime.ptr, soap->dime.size);
+    if (!content)
+      return soap->error = SOAP_EOM;
+    content->id = soap->dime.id;
+    content->type = soap->dime.type;
+    content->options = soap->dime.options;
+    if (soap->error)
+      return soap->error;
+    soap_resolve_attachment(soap, content);
+  }
+  if (soap->error != SOAP_DIME_END)
+    return soap->error;
+  return soap->error = SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getmimehdr(struct soap *soap)
+{ struct soap_multipart *content;
+  do
+  { if (soap_getline(soap, soap->msgbuf, sizeof(soap->msgbuf)))
+      return soap->error;
+  }
+  while (!*soap->msgbuf);
+  if (soap->msgbuf[0] == '-' && soap->msgbuf[1] == '-')
+  { char *s = soap->msgbuf + strlen(soap->msgbuf) - 1;
+    /* remove white space */
+    while (soap_blank(*s))
+      s--;
+    s[1] = '\0';
+    if (soap->mime.boundary)
+    { if (strcmp(soap->msgbuf + 2, soap->mime.boundary))
+        return soap->error = SOAP_MIME_ERROR;
+    }
+    else
+      soap->mime.boundary = soap_strdup(soap, soap->msgbuf + 2);
+    if (soap_getline(soap, soap->msgbuf, sizeof(soap->msgbuf)))
+      return soap->error;
+  }
+  if (soap_set_mime_attachment(soap, NULL, 0, SOAP_MIME_NONE, NULL, NULL, NULL, NULL))
+    return soap->error = SOAP_EOM;
+  content = soap->mime.last;
+  for (;;)
+  { register char *key = soap->msgbuf;
+    register char *val;
+    if (!*key)
+      break;
+    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "MIME header: %s\n", key));
+    val = strchr(soap->msgbuf, ':');
+    if (val)
+    { *val = '\0';
+      do val++;
+      while (*val && *val <= 32);
+      if (!soap_tag_cmp(key, "Content-ID"))
+        content->id = soap_strdup(soap, val);
+      else if (!soap_tag_cmp(key, "Content-Location"))
+        content->location = soap_strdup(soap, val);
+      else if (!soap_tag_cmp(key, "Content-Disposition"))
+        content->id = soap_strdup(soap, soap_get_header_attribute(soap, val, "name"));
+      else if (!soap_tag_cmp(key, "Content-Type"))
+        content->type = soap_strdup(soap, val);
+      else if (!soap_tag_cmp(key, "Content-Description"))
+        content->description = soap_strdup(soap, val);
+      else if (!soap_tag_cmp(key, "Content-Transfer-Encoding"))
+        content->encoding = (enum soap_mime_encoding)soap_code_int(mime_codes, val, (long)SOAP_MIME_NONE);
+    }
+    if (soap_getline(soap, key, sizeof(soap->msgbuf)))
+      return soap->error;
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getmime(struct soap *soap)
+{ while (soap_get_mime_attachment(soap, NULL))
+    ;
+  return soap->error;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_post_check_mime_attachments(struct soap *soap)
+{ soap->imode |= SOAP_MIME_POSTCHECK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_check_mime_attachments(struct soap *soap)
+{ if (soap->mode & SOAP_MIME_POSTCHECK)
+    return soap_get_mime_attachment(soap, NULL) != NULL;
+  return 0;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap_multipart *
+SOAP_FMAC2
+soap_get_mime_attachment(struct soap *soap, void *handle)
+{ register soap_wchar c = 0;
+  register size_t i, m = 0;
+  register char *s, *t = NULL;
+  register struct soap_multipart *content;
+  register short flag = 0;
+  if (!(soap->mode & SOAP_ENC_MIME))
+    return NULL;
+  content = soap->mime.last;
+  if (!content)
+  { if (soap_getmimehdr(soap))
+      return NULL;
+    content = soap->mime.last;
+  }
+  else if (content != soap->mime.first)
+  { if (soap->fmimewriteopen && ((content->ptr = (char*)soap->fmimewriteopen(soap, (void*)handle, content->id, content->type, content->description, content->encoding)) || soap->error))
+    { if (!content->ptr)
+        return NULL;
+    }
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Parsing MIME content id=%s type=%s\n", content->id?content->id:"", content->type?content->type:""));
+  if (!content->ptr && soap_new_block(soap))
+  { soap->error = SOAP_EOM;
+    return NULL;
+  }
+  for (;;)
+  { if (content->ptr)
+      s = soap->tmpbuf;
+    else if (!(s = (char*)soap_push_block(soap, sizeof(soap->tmpbuf))))
+    { soap->error = SOAP_EOM;
+      return NULL;
+    }
+    for (i = 0; i < sizeof(soap->tmpbuf); i++)
+    { if (m > 0)
+      { *s++ = *t++;
+        m--;
+      }
+      else
+      { if (!flag)
+        { c = soap_get1(soap);
+          if ((int)c == EOF)
+          { soap->error = SOAP_EOF;
+            return NULL;
+          }
+        }
+        if (flag || c == '\r')
+        { t = soap->msgbuf;
+          memset(t, 0, sizeof(soap->msgbuf));
+          strcpy(t, "\n--");
+          if (soap->mime.boundary)
+            strncat(t, soap->mime.boundary, sizeof(soap->msgbuf)-4);
+          do c = soap_getchar(soap);
+          while (c == *t++);
+          if ((int)c == EOF)
+          { soap->error = SOAP_EOF;
+            return NULL;
+          }
+          if (!*--t)
+            goto end;
+          *t = (char)c;
+          flag = (c == '\r');
+          m = t - soap->msgbuf + 1 - flag;
+          t = soap->msgbuf;
+          c = '\r';
+        }
+        *s++ = (char)c;
+      }
+    }
+    if (content->ptr && soap->fmimewrite)
+    { if ((soap->error = soap->fmimewrite(soap, (void*)content->ptr, soap->tmpbuf, i)))
+        break;
+    }
+  }
+end:
+  *s = '\0'; /* force 0-terminated */
+  if (content->ptr)
+  { if (!soap->error && soap->fmimewrite)
+      soap->error = soap->fmimewrite(soap, (void*)content->ptr, soap->tmpbuf, i);
+    if (soap->fmimewriteclose)
+      soap->fmimewriteclose(soap, (void*)content->ptr);
+    if (soap->error)
+      return NULL;
+  }
+  else
+  { content->size = soap_size_block(soap, i+1)-1;
+    content->ptr = soap_save_block(soap, NULL, 0);
+  }
+  soap_resolve_attachment(soap, content);
+  if (c == '-' && soap_getchar(soap) == '-')
+  { soap->mode &= ~SOAP_ENC_MIME;
+    if ((soap->mode & SOAP_MIME_POSTCHECK) && soap_end_recv(soap))
+      return NULL;
+  }
+  else
+  { while (c != '\r' && (int)c != EOF && soap_blank(c))
+      c = soap_getchar(soap);
+    if (c != '\r' || soap_getchar(soap) != '\n')
+    { soap->error = SOAP_MIME_ERROR;
+      return NULL;
+    }
+    if (soap_getmimehdr(soap))
+      return NULL;
+  }
+  return content;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_match_cid(struct soap *soap, const char *s, const char *t)
+{ register size_t n;
+  if (!s)
+    return 1;
+  if (!strcmp(s, t))
+    return 0;
+  if (!strncmp(s, "cid:", 4))
+    s += 4;
+  n = strlen(t);
+  if (*t == '<')
+  { t++;
+    n -= 2;
+  }
+  if (!strncmp(s, t, n) && !s[n])
+    return 0;
+  soap_decode(soap->tmpbuf, sizeof(soap->tmpbuf), s, SOAP_STR_EOS);
+  if (!strncmp(soap->tmpbuf, t, n) && !soap->tmpbuf[n])
+    return 0;
+  return 1;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+static void
+soap_resolve_attachment(struct soap *soap, struct soap_multipart *content)
+{ if (content->id)
+  { register struct soap_xlist **xp = &soap->xlist;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving attachment data for id=%s\n", content->id));
+    while (*xp)
+    { register struct soap_xlist *xq = *xp;
+      if (!soap_match_cid(soap, xq->id, content->id))
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Found matching attachment %s for content id=%s\n", xq->id, content->id));
+        *xp = xq->next;
+        *xq->ptr = (unsigned char*)content->ptr;
+        *xq->size = (int)content->size;
+        *xq->type = (char*)content->type;
+        if (content->options)
+          *xq->options = (char*)content->options;
+        else
+          *xq->options = (char*)content->description;
+        SOAP_FREE(soap, xq);
+      }
+      else
+        xp = &(*xp)->next;
+    }
+  }
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putmimehdr(struct soap *soap, struct soap_multipart *content)
+{ const char *s;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "MIME attachment type=%s\n", content->type?content->type:""));
+  if (soap_send3(soap, "\r\n--", soap->mime.boundary, "\r\n"))
+    return soap->error;
+  if (content->type && soap_send3(soap, "Content-Type: ", content->type, "\r\n"))
+    return soap->error;
+  s = soap_code_str(mime_codes, content->encoding);
+  if (s && soap_send3(soap, "Content-Transfer-Encoding: ", s, "\r\n"))
+    return soap->error;
+  if (content->id && soap_send3(soap, "Content-ID: ", content->id, "\r\n"))
+    return soap->error;
+  if (content->location && soap_send3(soap, "Content-Location: ", content->location, "\r\n"))
+    return soap->error;
+  if (content->description && soap_send3(soap, "Content-Description: ", content->description, "\r\n"))
+    return soap->error;
+  return soap_send_raw(soap, "\r\n", 2);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putmime(struct soap *soap)
+{ struct soap_multipart *content;
+  if (!(soap->mode & SOAP_ENC_MIME) || !soap->mime.boundary)
+    return SOAP_OK;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending MIME attachments\n"));
+  for (content = soap->mime.first; content; content = content->next)
+  { void *handle;
+    if (soap->fmimereadopen && ((handle = soap->fmimereadopen(soap, (void*)content->ptr, content->id, content->type, content->description)) || soap->error))
+    { size_t size = content->size;
+      if (!handle)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fmimereadopen failed\n"));
+        return soap->error;
+      }
+      if (soap_putmimehdr(soap, content))
+        return soap->error;
+      if (!size)
+      { if ((soap->mode & SOAP_ENC_XML) || (soap->mode & SOAP_IO) == SOAP_IO_CHUNK || (soap->mode & SOAP_IO) == SOAP_IO_STORE)
+        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked streaming MIME\n"));
+          do 
+          { size = soap->fmimeread(soap, handle, soap->tmpbuf, sizeof(soap->tmpbuf));
+            DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fmimeread returned %lu bytes\n", (unsigned long)size));
+            if (soap_send_raw(soap, soap->tmpbuf, size))
+              break;
+          } while (size); 
+        }
+        else
+        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Error: cannot chunk streaming MIME (no HTTP chunking)\n"));
+        }
+      }
+      else
+      { do
+        { size_t bufsize;
+          if (size < sizeof(soap->tmpbuf))
+            bufsize = size;
+          else
+            bufsize = sizeof(soap->tmpbuf);
+          if (!(bufsize = soap->fmimeread(soap, handle, soap->tmpbuf, bufsize)))
+          { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fmimeread failed: insufficient data (%lu bytes remaining from %lu bytes)\n", (unsigned long)size, (unsigned long)content->size));
+            soap->error = SOAP_EOF;
+            break;
+          }
+          if (soap_send_raw(soap, soap->tmpbuf, bufsize))
+            break;
+          size -= bufsize;
+        } while (size);
+      }
+      if (soap->fmimereadclose)
+        soap->fmimereadclose(soap, handle);
+    }
+    else
+    { if (soap_putmimehdr(soap, content)
+       || soap_send_raw(soap, content->ptr, content->size))
+        return soap->error;
+    }
+  }
+  return soap_send3(soap, "\r\n--", soap->mime.boundary, "--");
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_dime(struct soap *soap)
+{ soap->omode |= SOAP_ENC_DIME;
+  soap->dime.first = NULL;
+  soap->dime.last = NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_mime(struct soap *soap, const char *boundary, const char *start)
+{ soap->omode |= SOAP_ENC_MIME;
+  soap->mime.first = NULL;
+  soap->mime.last = NULL;
+  soap->mime.boundary = soap_strdup(soap, boundary);
+  soap->mime.start = soap_strdup(soap, start);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_clr_dime(struct soap *soap)
+{ soap->omode &= ~SOAP_ENC_DIME;
+  soap->dime.first = NULL;
+  soap->dime.last = NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_clr_mime(struct soap *soap)
+{ soap->omode &= ~SOAP_ENC_MIME;
+  soap->mime.first = NULL;
+  soap->mime.last = NULL;
+  soap->mime.boundary = NULL;
+  soap->mime.start = NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+static struct soap_multipart*
+soap_new_multipart(struct soap *soap, struct soap_multipart **first, struct soap_multipart **last, char *ptr, size_t size)
+{ struct soap_multipart *content;
+  content = (struct soap_multipart*)soap_malloc(soap, sizeof(struct soap_multipart));
+  if (content)
+  { content->next = NULL;
+    content->ptr = ptr;
+    content->size = size;
+    content->id = NULL;
+    content->type = NULL;
+    content->options = NULL;
+    content->encoding = SOAP_MIME_NONE;
+    content->location = NULL;
+    content->description = NULL;
+    if (!*first)
+      *first = content;
+    if (*last)
+      (*last)->next = content;
+    *last = content;
+  }
+  return content;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_dime_attachment(struct soap *soap, char *ptr, size_t size, const char *type, const char *id, unsigned short optype, const char *option)
+{ struct soap_multipart *content = soap_new_multipart(soap, &soap->dime.first, &soap->dime.last, ptr, size);
+  if (!content)
+    return SOAP_EOM;
+  content->id = soap_strdup(soap, id);
+  content->type = soap_strdup(soap, type);
+  content->options = soap_dime_option(soap, optype, option);
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_mime_attachment(struct soap *soap, char *ptr, size_t size, enum soap_mime_encoding encoding, const char *type, const char *id, const char *location, const char *description)
+{ struct soap_multipart *content = soap_new_multipart(soap, &soap->mime.first, &soap->mime.last, ptr, size);
+  if (!content)
+    return SOAP_EOM;
+  content->id = soap_strdup(soap, id);
+  content->type = soap_strdup(soap, type);
+  content->encoding = encoding;
+  content->location = soap_strdup(soap, location);
+  content->description = soap_strdup(soap, description);
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+SOAP_FMAC1
+struct soap_multipart*
+SOAP_FMAC2
+soap_next_multipart(struct soap_multipart *content)
+{ if (content)
+    return content->next;
+  return NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+static void
+soap_select_mime_boundary(struct soap *soap)
+{ while (!soap->mime.boundary || soap_valid_mime_boundary(soap))
+  { register char *s = soap->mime.boundary;
+    register size_t n = 0;
+    if (s)
+      n = strlen(s);
+    if (n < 16)
+    { n = 64;
+      s = soap->mime.boundary = (char*)soap_malloc(soap, n + 1);
+      if (!s)
+        return;
+    }
+    strcpy(s, "==");
+    s += 2;
+    n -= 4;
+    while (n)
+    { *s++ = soap_base64o[soap_random & 0x3F];
+      n--;
+    }
+    strcpy(s, "==");
+  }
+  if (!soap->mime.start)
+    soap->mime.start = "<SOAP-ENV:Envelope>";
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEANER
+#ifndef PALM_1
+static int
+soap_valid_mime_boundary(struct soap *soap)
+{ register struct soap_multipart *content;
+  register size_t k;
+  if (soap->fmimeread)
+    return SOAP_OK;
+  k = strlen(soap->mime.boundary);
+  for (content = soap->mime.first; content; content = content->next)
+  { if (content->ptr && content->size >= k)
+    { register const char *p = (const char*)content->ptr; 
+      register size_t i;
+      for (i = 0; i < content->size - k; i++, p++)
+      { if (!strncmp(p, soap->mime.boundary, k))
+          return SOAP_ERR;
+      }
+    }
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************\
+ *
+ *     HTTP cookie handling
+ *
+\******************************************************************************/
+
+#ifdef WITH_COOKIES
+/******************************************************************************/
+SOAP_FMAC1
+size_t
+SOAP_FMAC2
+soap_encode_cookie(const char *s, char *t, size_t len)
+{ register int c;
+  register size_t n = len;
+  while ((c = *s++) && --n > 0)
+  { if (c > ' ' && c < 128 && !strchr("()<>@,;:\\\"/[]?={}", c))
+      *t++ = c;
+    else if (n > 2)
+    { *t++ = '%';
+      *t++ = (c >> 4) + (c > 159 ? '7' : '0');
+      c &= 0xF;
+      *t++ = c + (c > 9 ? '7' : '0');
+      n -= 2;
+    }
+    else
+      break;
+  }
+  *t = '\0';
+  return len - n;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+struct soap_cookie*
+SOAP_FMAC2
+soap_cookie(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  size_t n;
+  if (!domain)
+    domain = soap->cookie_domain;
+  if (!path)
+    path = soap->cookie_path;
+  if (!path)
+    path = SOAP_STR_EOS;
+  else if (*path == '/')
+    path++;
+  n = strlen(path);
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Search cookie %s domain=%s path=%s\n", name, domain?domain:"(null)", path?path:"(null)"));
+  for (p = soap->cookies; p; p = p->next)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Cookie in database: %s=%s domain=%s path=%s env=%hd\n", p->name, p->value?p->value:"(null)", p->domain?p->domain:"(null)", p->path?p->path:"(null)", p->env));
+    if (!strcmp(p->name, name)
+     && p->domain
+     && p->path
+     && !strcmp(p->domain, domain)
+     && !strncmp(p->path, path, n))
+      break;
+  }
+  return p;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+struct soap_cookie*
+SOAP_FMAC2
+soap_set_cookie(struct soap *soap, const char *name, const char *value, const char *domain, const char *path)
+{ struct soap_cookie **p, *q;
+  int n;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set cookie: %s=%s domain=%s path=%s\n", name, value?value:"(null)", domain?domain:"(null)", path?path:"(null)"));
+  if (!domain)
+    domain = soap->cookie_domain;
+  if (!path)
+    path = soap->cookie_path;
+  if (!path)
+    path = SOAP_STR_EOS;
+  else if (*path == '/')
+    path++;
+  q = soap_cookie(soap, name, domain, path);
+  if (!q)
+  { if ((q = (struct soap_cookie*)SOAP_MALLOC(soap, sizeof(struct soap_cookie))))
+    { if ((q->name = (char*)SOAP_MALLOC(soap, strlen(name)+1)))
+        strcpy(q->name, name);
+      q->value = NULL;
+      q->domain = NULL;
+      q->path = NULL;
+      q->expire = -1;
+      q->maxage = -1;
+      q->version = 1;
+      q->secure = 0;
+      q->modified = 0;
+      for (p = &soap->cookies, n = soap->cookie_max; *p && n; p = &(*p)->next, n--)
+        if (!strcmp((*p)->name, name) && (*p)->path && path && strcmp((*p)->path, path) < 0)
+          break;
+      if (n)
+      { q->next = *p;
+        *p = q;
+      }
+      else
+      { SOAP_FREE(soap, q->name);
+        SOAP_FREE(soap, q);
+        q = NULL;
+      }
+    }
+  }
+  else
+    q->modified = 1;
+  if (q)
+  { if (q->value)
+    { SOAP_FREE(soap, q->value);
+      q->value = NULL;
+    }
+    if (q->domain)
+    { SOAP_FREE(soap, q->domain);
+      q->domain = NULL;
+    }
+    if (q->path)
+    { SOAP_FREE(soap, q->path);
+      q->path = NULL;
+    }
+    if (value && *value && (q->value = (char*)SOAP_MALLOC(soap, strlen(value)+1)))
+      strcpy(q->value, value);
+    if (domain && (q->domain = (char*)SOAP_MALLOC(soap, strlen(domain)+1)))
+      strcpy(q->domain, domain);
+    if (path && (q->path = (char*)SOAP_MALLOC(soap, strlen(path)+1)))
+      strcpy(q->path, path);
+    q->session = 1;
+    q->env = 0;
+  }
+  return q;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_clr_cookie(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie **p, *q;
+  if (!domain)
+    domain = soap->cookie_domain;
+  if (!domain)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Error in clear cookie %s: cookie domain not set\n", name?name:"(null)"));
+    return;
+  }
+  if (!path)
+    path = soap->cookie_path;
+  if (!path)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Error in clear cookie %s: cookie path not set\n", name?name:"(null)"));
+    return;
+  }
+  if (*path == '/')
+    path++;
+  for (p = &soap->cookies, q = *p; q; q = *p)
+  { if (!strcmp(q->name, name) && !strcmp(q->domain, domain) && !strncmp(q->path, path, strlen(q->path)))
+    { if (q->value)
+        SOAP_FREE(soap, q->value);
+      if (q->domain)
+        SOAP_FREE(soap, q->domain);
+      if (q->path)
+        SOAP_FREE(soap, q->path);
+      *p = q->next;
+      SOAP_FREE(soap, q);
+    }
+    else
+      p = &q->next;
+  }
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_cookie_value(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  if ((p = soap_cookie(soap, name, domain, path)))
+    return p->value;
+  return NULL;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+char *
+SOAP_FMAC2
+soap_env_cookie_value(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  if ((p = soap_cookie(soap, name, domain, path)) && p->env)
+    return p->value;
+  return NULL;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+time_t
+SOAP_FMAC2
+soap_cookie_expire(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  if ((p = soap_cookie(soap, name, domain, path)))
+    return p->expire;
+  return -1;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_cookie_expire(struct soap *soap, const char *name, long expire, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set cookie expiration max-age %ld: %s domain=%s path=%s\n", expire, name, domain?domain:"(null)", path?path:"(null)"));
+  if ((p = soap_cookie(soap, name, domain, path)))
+  { p->maxage = expire;
+    p->modified = 1;
+    return SOAP_OK;
+  }
+  return SOAP_ERR;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_cookie_session(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  if ((p = soap_cookie(soap, name, domain, path)))
+  { p->session = 1;
+    p->modified = 1;
+    return SOAP_OK;
+  }
+  return SOAP_ERR;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_clr_cookie_session(struct soap *soap, const char *name, const char *domain, const char *path)
+{ struct soap_cookie *p;
+  if ((p = soap_cookie(soap, name, domain, path)))
+  { p->session = 0;
+    p->modified = 1;
+    return SOAP_OK;
+  }
+  return SOAP_ERR;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putsetcookies(struct soap *soap)
+{ struct soap_cookie *p;
+  char *s, tmp[4096];
+  const char *t;
+  for (p = soap->cookies; p; p = p->next)
+  { if (p->modified || !p->env)
+    { s = tmp;
+      if (p->name)
+        s += soap_encode_cookie(p->name, s, tmp-s+4064);
+      if (p->value && *p->value)
+      { *s++ = '=';
+        s += soap_encode_cookie(p->value, s, tmp-s+4064);
+      }
+      if (p->domain && (int)strlen(p->domain) < tmp-s+4064)
+        sprintf(s, ";Domain=\"%s\"", p->domain);
+      else if (soap->cookie_domain && (int)strlen(soap->cookie_domain) < tmp-s+4064)
+        sprintf(s, ";Domain=\"%s\"", soap->cookie_domain);
+      strcat(s, ";Path=/");
+      if (p->path)
+        t = p->path;
+      else
+        t = soap->cookie_path;
+      if (t)
+      { if (*t == '/')
+          t++;
+        if ((int)strlen(t) < tmp-s+4064)
+          strcat(s, t);
+      }
+      s += strlen(s);
+      if (p->version > 0 && s-tmp < 4060)
+      { sprintf(s, ";Version=%u", p->version);
+        s += strlen(s);
+      }
+      if (p->maxage >= 0 && s-tmp < 4060)
+      { sprintf(s, ";Max-Age=%ld", p->maxage);
+        s += strlen(s);
+      }
+      if (p->secure && s-tmp < 4073)
+        strcpy(s, ";Secure");
+      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set-Cookie: %s\n", tmp));
+      if ((soap->error = soap->fposthdr(soap, "Set-Cookie", tmp)))
+        return soap->error;
+    }
+  }
+  return SOAP_OK;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_putcookies(struct soap *soap, const char *domain, const char *path, int secure)
+{ struct soap_cookie **p, *q;
+  unsigned int version = 0;
+  time_t now = time(NULL);
+  char *s, tmp[4096];
+  p = &soap->cookies;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending cookies for domain=%s path=%s\n", domain, path));
+  if (*path == '/')
+    path++;
+  while ((q = *p))
+  { if (q->expire && now > q->expire)
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Cookie %s expired\n", q->name));
+      SOAP_FREE(soap, q->name);
+      if (q->value)
+        SOAP_FREE(soap, q->value);
+      if (q->domain)
+        SOAP_FREE(soap, q->domain);
+      if (q->path)
+        SOAP_FREE(soap, q->path);
+      *p = q->next;
+      SOAP_FREE(soap, q);
+    }
+    else
+    { size_t domlen = 0;
+      if (q->domain)
+      { const char *s = strchr(q->domain, ':');
+        if (s)
+          domlen = s - q->domain;
+        else
+          domlen = strlen(q->domain);
+      }
+      if ((!q->domain || !strncmp(q->domain, domain, domlen))
+          && (!q->path || !strncmp(q->path, path, strlen(q->path)))
+          && (!q->secure || secure))
+      { s = tmp;
+        if (q->version != version)
+        { sprintf(s, "$Version=%u;", q->version);
+          version = q->version;
+        }
+        if (q->name)
+          s += soap_encode_cookie(q->name, s, tmp-s+4080);
+        if (q->value && *q->value)
+        { *s++ = '=';
+          s += soap_encode_cookie(q->value, s, tmp-s+4080);
+        }
+        if (q->path && *q->path && (int)strlen(q->path) < tmp-s+4080)
+        { sprintf(s, ";$Path=\"/%s\"", (*q->path == '/' ? q->path + 1 : q->path));
+          s += strlen(s);
+        }
+        if (q->domain && (int)strlen(q->domain) < tmp-s+4080)
+          sprintf(s, ";$Domain=\"%s\"", q->domain);
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Cookie: %s\n", tmp));
+        if ((soap->error = soap->fposthdr(soap, "Cookie", tmp)))
+          return soap->error;
+      }
+      p = &q->next;
+    }
+  }
+  return SOAP_OK;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_getcookies(struct soap *soap, const char *val)
+{ struct soap_cookie *p = NULL, *q;
+  const char *s;
+  char *t, tmp[4096]; /* cookie size is up to 4096 bytes [RFC2109] */
+  char *domain = NULL;
+  char *path = NULL;
+  unsigned int version = 0;
+  time_t now = time(NULL);
+  if (!val)
+    return;
+  s = val;
+  while (*s)
+  { s = soap_decode_key(tmp, sizeof(tmp), s);
+    if (!soap_tag_cmp(tmp, "$Version"))
+    { if ((s = soap_decode_val(tmp, sizeof(tmp), s)))
+      { if (p)
+          p->version = (int)atol(tmp);
+        else
+          version = (int)atol(tmp);
+      }
+    }
+    else if (!soap_tag_cmp(tmp, "$Path"))
+    { s = soap_decode_val(tmp, sizeof(tmp), s);
+      if (*tmp)
+      { if ((t = (char*)SOAP_MALLOC(soap, strlen(tmp)+1)))
+          strcpy(t, tmp);
+      }
+      else
+        t = NULL;
+      if (p)
+      { if (p->path)
+          SOAP_FREE(soap, p->path);
+        p->path = t;
+      }
+      else
+      { if (path)
+          SOAP_FREE(soap, path);
+        path = t;
+      }
+    }
+    else if (!soap_tag_cmp(tmp, "$Domain"))
+    { s = soap_decode_val(tmp, sizeof(tmp), s);
+      if (*tmp)
+      { if ((t = (char*)SOAP_MALLOC(soap, strlen(tmp)+1)))
+          strcpy(t, tmp);
+      }
+      else
+        t = NULL;
+      if (p)
+      { if (p->domain)
+          SOAP_FREE(soap, p->domain);
+        p->domain = t;
+      }
+      else
+      { if (domain)
+          SOAP_FREE(soap, domain);
+        domain = t;
+      }
+    }
+    else if (p && !soap_tag_cmp(tmp, "Path"))
+    { if (p->path)
+        SOAP_FREE(soap, p->path);
+      s = soap_decode_val(tmp, sizeof(tmp), s);
+      if (*tmp)
+      { if ((p->path = (char*)SOAP_MALLOC(soap, strlen(tmp)+1)))
+          strcpy(p->path, tmp);
+      }
+      else
+        p->path = NULL;
+    }
+    else if (p && !soap_tag_cmp(tmp, "Domain"))
+    { if (p->domain)
+        SOAP_FREE(soap, p->domain);
+      s = soap_decode_val(tmp, sizeof(tmp), s);
+      if (*tmp)
+      { if ((p->domain = (char*)SOAP_MALLOC(soap, strlen(tmp)+1)))
+          strcpy(p->domain, tmp);
+      }
+      else
+        p->domain = NULL;
+    }
+    else if (p && !soap_tag_cmp(tmp, "Version"))
+    { s = soap_decode_val(tmp, sizeof(tmp), s);
+      p->version = (unsigned int)atol(tmp);
+    }
+    else if (p && !soap_tag_cmp(tmp, "Max-Age"))
+    { s = soap_decode_val(tmp, sizeof(tmp), s);
+      p->expire = now + atol(tmp);
+    }
+    else if (p && !soap_tag_cmp(tmp, "Expires"))
+    { struct tm T;
+      char a[3]; 
+      static const char mns[] = "anebarprayunulugepctovec";
+      s = soap_decode_val(tmp, sizeof(tmp), s);
+      if (strlen(tmp) > 20)
+      { memset((void*)&T, 0, sizeof(T));
+        a[0] = tmp[4];
+        a[1] = tmp[5];
+        a[2] = '\0';
+        T.tm_mday = (int)atol(a);
+        a[0] = tmp[8];
+        a[1] = tmp[9];
+        T.tm_mon = (strstr(mns, a) - mns) / 2;
+        a[0] = tmp[11];
+        a[1] = tmp[12];
+        T.tm_year = 100 + (int)atol(a);
+        a[0] = tmp[13];
+        a[1] = tmp[14];
+        T.tm_hour = (int)atol(a);
+        a[0] = tmp[16];
+        a[1] = tmp[17];
+        T.tm_min = (int)atol(a);
+        a[0] = tmp[19];
+        a[1] = tmp[20];
+        T.tm_sec = (int)atol(a);
+        p->expire = soap_timegm(&T);
+      }
+    }
+    else if (p && !soap_tag_cmp(tmp, "Secure"))
+      p->secure = 1;
+    else
+    { if (p)
+      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Got environment cookie %s=%s domain=%s path=%s expire=%ld secure=%d\n", p->name, p->value?p->value:"(null)", p->domain?p->domain:"(null)", p->path?p->path:"(null)", p->expire, p->secure));
+        if ((q = soap_set_cookie(soap, p->name, p->value, p->domain, p->path)))
+        { q->version = p->version;
+          q->expire = p->expire;
+          q->secure = p->secure;
+          q->env = 1;
+        }
+        if (p->name)
+          SOAP_FREE(soap, p->name);
+        if (p->value)
+          SOAP_FREE(soap, p->value);
+        if (p->domain)
+          SOAP_FREE(soap, p->domain);
+        if (p->path)
+          SOAP_FREE(soap, p->path);
+        SOAP_FREE(soap, p);
+      }
+      if ((p = (struct soap_cookie*)SOAP_MALLOC(soap, sizeof(struct soap_cookie))))
+      { p->name = (char*)SOAP_MALLOC(soap, strlen(tmp)+1);
+        strcpy(p->name, tmp);
+        s = soap_decode_val(tmp, sizeof(tmp), s);
+        if (*tmp)
+        { p->value = (char*)SOAP_MALLOC(soap, strlen(tmp)+1);
+          strcpy(p->value, tmp);
+        }
+        else
+          p->value = NULL;
+       if (domain)
+          p->domain = domain;
+       else
+       { p->domain = (char*)SOAP_MALLOC(soap, strlen(soap->host)+1);
+         strcpy(p->domain, soap->host);
+       }
+       if (path)
+          p->path = path;
+       else
+       { p->path = (char*)SOAP_MALLOC(soap, strlen(soap->path)+1);
+         strcpy(p->path, soap->path);
+       }
+        p->expire = 0;
+        p->secure = 0;
+        p->version = version;
+      }
+    }
+  }
+  if (p)
+  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Got environment cookie %s=%s domain=%s path=%s expire=%ld secure=%d\n", p->name, p->value?p->value:"(null)", p->domain?p->domain:"(null)", p->path?p->path:"(null)", p->expire, p->secure));
+    if ((q = soap_set_cookie(soap, p->name, p->value, p->domain, p->path)))
+    { q->version = p->version;
+      q->expire = p->expire;
+      q->secure = p->secure;
+      q->env = 1;
+    }
+    if (p->name)
+      SOAP_FREE(soap, p->name);
+    if (p->value)
+      SOAP_FREE(soap, p->value);
+    if (p->domain)
+      SOAP_FREE(soap, p->domain);
+    if (p->path)
+      SOAP_FREE(soap, p->path);
+    SOAP_FREE(soap, p);
+  }
+  if (domain)
+    SOAP_FREE(soap, domain);
+  if (path)
+    SOAP_FREE(soap, path);
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_getenv_cookies(struct soap *soap)
+{ struct soap_cookie *p;
+  const char *s;
+  char key[4096], val[4096]; /* cookie size is up to 4096 bytes [RFC2109] */
+  if (!(s = getenv("HTTP_COOKIE")))
+    return SOAP_ERR;
+  do
+  { s = soap_decode_key(key, sizeof(key), s);
+    s = soap_decode_val(val, sizeof(val), s);
+    p = soap_set_cookie(soap, key, val, NULL, NULL);
+    if (p)
+      p->env = 1;
+  } while (*s);
+  return SOAP_OK;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+struct soap_cookie*
+SOAP_FMAC2
+soap_copy_cookies(struct soap *copy, struct soap *soap)
+{ struct soap_cookie *p, **q, *r;
+  q = &r;
+  for (p = soap->cookies; p; p = p->next)
+  { if (!(*q = (struct soap_cookie*)SOAP_MALLOC(copy, sizeof(struct soap_cookie))))
+      return r;
+    **q = *p;
+    if (p->name)
+    { if (((*q)->name = (char*)SOAP_MALLOC(copy, strlen(p->name)+1)))
+        strcpy((*q)->name, p->name);
+    }
+    if (p->value)
+    { if (((*q)->value = (char*)SOAP_MALLOC(copy, strlen(p->value)+1)))
+        strcpy((*q)->value, p->value);
+    }
+    if (p->domain)
+    { if (((*q)->domain = (char*)SOAP_MALLOC(copy, strlen(p->domain)+1)))
+        strcpy((*q)->domain, p->domain);
+    }
+    if (p->path)
+    { if (((*q)->path = (char*)SOAP_MALLOC(copy, strlen(p->path)+1)))
+        strcpy((*q)->path, p->path);
+    }
+    q = &(*q)->next;
+  }
+  *q = NULL;
+  return r;
+}
+
+/******************************************************************************/
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_free_cookies(struct soap *soap)
+{ struct soap_cookie *p;
+  for (p = soap->cookies; p; p = soap->cookies)
+  { soap->cookies = p->next;
+    SOAP_FREE(soap, p->name);
+    if (p->value)
+      SOAP_FREE(soap, p->value);
+    if (p->domain)
+      SOAP_FREE(soap, p->domain);
+    if (p->path)
+      SOAP_FREE(soap, p->path);
+    SOAP_FREE(soap, p);
+  }
+}
+
+/******************************************************************************/
+#endif /* WITH_COOKIES */
+
+/******************************************************************************/
+#ifdef WITH_GZIP
+#ifndef PALM_1
+static int
+soap_getgziphdr(struct soap *soap)
+{ int i;
+  soap_wchar c, f = 0;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get gzip header\n"));
+  for (i = 0; i < 9; i++)
+  { if ((int)(c = soap_get1(soap) == EOF))
+      return soap->error = SOAP_EOF;
+    if (i == 2)
+      f = c;
+  }
+  if (f & 0x04) /* FEXTRA */
+  { for (i = soap_get1(soap) | (soap_get1(soap) << 8); i; i--)
+    { if ((int)soap_get1(soap) == EOF)
+        return soap->error = SOAP_EOF;
+    }
+  }
+  if (f & 0x08) /* FNAME */
+  { do
+      c = soap_get1(soap);
+    while (c && (int)c != EOF);
+  }
+  if ((int)c != EOF && (f & 0x10)) /* FCOMMENT */
+  { do
+      c = soap_get1(soap);
+    while (c && (int)c != EOF);
+  }
+  if ((int)c != EOF && (f & 0x01)) /* FHCRC */
+  { if ((int)(c = soap_get1(soap)) != EOF)
+      c = soap_get1(soap);
+  }
+  if ((int)c == EOF)
+    return soap->error = SOAP_EOF;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_begin_recv(struct soap *soap)
+{ soap_wchar c;
+  soap->error = SOAP_OK;
+  soap_free_temp(soap);
+  soap_set_local_namespaces(soap);
+  soap->version = 0;   /* don't assume we're parsing SOAP content by default */
+#ifndef WITH_NOIDREF
+  soap_free_iht(soap);
+#endif
+  if ((soap->imode & SOAP_IO) == SOAP_IO_CHUNK)
+    soap->omode |= SOAP_IO_CHUNK;
+  soap->imode &= ~SOAP_IO;
+  soap->mode = soap->imode;
+  if (!soap->keep_alive)
+  { soap->buflen = 0;
+    soap->bufidx = 0;
+  }
+  if (!(soap->mode & SOAP_IO_KEEPALIVE))
+    soap->keep_alive = 0;
+  soap->ahead = 0;
+  soap->peeked = 0;
+  soap->level = 0;
+  soap->part = SOAP_BEGIN;
+  soap->alloced = 0;
+  soap->count = 0;
+  soap->length = 0;
+  soap->cdata = 0;
+  *soap->endpoint = '\0';
+  soap->action = NULL;
+  soap->status = 0;
+#ifndef WITH_LEANER
+  soap->dom = NULL;
+  soap->dime.chunksize = 0;
+  soap->dime.buflen = 0;
+  soap->dime.list = NULL;
+  soap->dime.first = NULL;
+  soap->dime.last = NULL;
+  soap->mime.list = NULL;
+  soap->mime.first = NULL;
+  soap->mime.last = NULL;
+  soap->mime.boundary = NULL;
+  soap->mime.start = NULL;
+  soap->xlist = NULL;
+#endif
+#ifdef WIN32
+#ifndef UNDER_CE
+#ifndef WITH_FASTCGI
+  if (!soap_valid_socket(soap->socket))
+#ifdef __BORLANDC__
+    setmode((SOAP_SOCKET)soap->recvfd, O_BINARY);
+#else
+    _setmode((SOAP_SOCKET)soap->recvfd, _O_BINARY);
+#endif
+#endif
+#endif
+#endif
+#ifdef WITH_ZLIB
+  soap->mode &= ~SOAP_ENC_ZLIB;
+  soap->zlib_in = SOAP_ZLIB_NONE;
+  soap->zlib_out = SOAP_ZLIB_NONE;
+  soap->d_stream.next_in = Z_NULL;
+  soap->d_stream.avail_in = 0;
+  soap->d_stream.next_out = (Byte*)soap->buf;
+  soap->d_stream.avail_out = SOAP_BUFLEN;
+  soap->z_ratio_in = 1.0;
+#endif
+#ifndef WITH_LEANER
+  if (soap->fprepareinit)
+    soap->fprepareinit(soap);
+#endif
+  c = soap_getchar(soap);
+#ifdef WITH_GZIP
+  if (c == 0x1F)
+  { if (soap_getgziphdr(soap))
+      return soap->error;
+    if (inflateInit2(&soap->d_stream, -MAX_WBITS) != Z_OK)
+      return soap->error = SOAP_ZLIB_ERROR;
+    soap->zlib_state = SOAP_ZLIB_INFLATE;
+    soap->mode |= SOAP_ENC_ZLIB;
+    soap->zlib_in = SOAP_ZLIB_GZIP;
+    soap->z_crc = crc32(0L, NULL, 0);
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "gzip initialized\n"));
+    memcpy(soap->z_buf, soap->buf, SOAP_BUFLEN);
+    /* should not chunk over plain transport, so why bother to check? */
+    /* if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK) */
+    /*   soap->z_buflen = soap->bufidx; */
+    /* else */
+    soap->d_stream.next_in = (Byte*)(soap->z_buf + soap->bufidx);
+    soap->d_stream.avail_in = soap->buflen - soap->bufidx;
+    soap->z_buflen = soap->buflen;
+    soap->buflen = soap->bufidx;
+    c = soap_getchar(soap);
+  }  
+#endif
+#ifndef WITH_LEANER
+  if (c == '-' && soap_get0(soap) == '-')
+    soap->mode |= SOAP_ENC_MIME;
+  else if ((c & 0xFFFC) == (SOAP_DIME_VERSION | SOAP_DIME_MB) && (soap_get0(soap) & 0xFFF0) == 0x20)
+    soap->mode |= SOAP_ENC_DIME;
+  else
+#endif
+  { while (soap_blank(c))
+      c = soap_getchar(soap);
+  }
+  if ((int)c == EOF)
+    return soap->error = SOAP_EOF;
+  soap_unget(soap, c);
+#ifndef WITH_NOHTTP
+  /* if not XML or (start of)BOM or MIME/DIME/ZLIB, assume HTTP header */
+  if (c != '<' && c != 0xEF && !(soap->mode & (SOAP_ENC_MIME | SOAP_ENC_DIME | SOAP_ENC_ZLIB)))
+  { soap->mode &= ~SOAP_IO;
+    soap->error = soap->fparse(soap);
+    if (soap->error && soap->error < SOAP_STOP)
+    { soap->keep_alive = 0; /* force close later */
+      return soap->error;
+    }
+    if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
+    { soap->chunkbuflen = soap->buflen;
+      soap->buflen = soap->bufidx;
+      soap->chunksize = 0;
+    }
+#ifndef WITH_LEANER
+    else if (soap->fpreparerecv && soap->buflen != soap->bufidx)
+      soap->fpreparerecv(soap, soap->buf + soap->bufidx, soap->buflen - soap->bufidx);
+#endif
+    /* Note: fparse should not use soap_unget to push back last char */
+    if (soap_get0(soap) == (int)EOF)
+    { if (soap->status == 200)
+        return soap->error = SOAP_NO_DATA;
+      return soap->error = soap->status;
+    }
+#ifdef WITH_ZLIB
+    if (soap->zlib_in != SOAP_ZLIB_NONE)
+#ifdef WITH_GZIP
+    { c = soap_get1(soap);
+      if (c == 0x1F)
+      { if (soap_getgziphdr(soap))
+          return soap->error;
+        if (inflateInit2(&soap->d_stream, -MAX_WBITS) != Z_OK)
+          return soap->error = SOAP_ZLIB_ERROR;
+        soap->zlib_state = SOAP_ZLIB_INFLATE;
+        soap->z_crc = crc32(0L, NULL, 0);
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "gzip initialized\n"));
+      }
+      else
+      { soap_revget1(soap);
+#else
+      {
+#endif
+        if (inflateInit(&soap->d_stream) != Z_OK)
+          return soap->error = SOAP_ZLIB_ERROR;
+        soap->zlib_state = SOAP_ZLIB_INFLATE;
+        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflate initialized\n"));
+      }
+      soap->mode |= SOAP_ENC_ZLIB;
+      memcpy(soap->z_buf, soap->buf, SOAP_BUFLEN);
+      soap->d_stream.next_in = (Byte*)(soap->z_buf + soap->bufidx);
+      soap->d_stream.avail_in = soap->buflen - soap->bufidx;
+      soap->z_buflen = soap->buflen;
+      soap->buflen = soap->bufidx;
+    }
+#endif
+    if (soap->error)
+    { if (soap->error == SOAP_FORM && soap->fform)
+      { soap->error = soap->fform(soap);
+        if (soap->error == SOAP_OK)
+          soap->error = SOAP_STOP; /* prevents further processing */
+      }
+      return soap->error;
+    }
+  }
+#endif
+#ifndef WITH_LEANER
+  if (soap->mode & SOAP_ENC_MIME)
+  { if (soap_getmimehdr(soap))
+      return soap->error;
+    if (soap->mime.start)
+    { do
+      { if (!soap->mime.last->id)
+          break;
+        if (!soap_match_cid(soap, soap->mime.start, soap->mime.last->id))
+          break;
+      } while (soap_get_mime_attachment(soap, NULL));
+    }
+    if (soap_get_header_attribute(soap, soap->mime.first->type, "application/dime"))
+      soap->mode |= SOAP_ENC_DIME;
+  }
+  if (soap->mode & SOAP_ENC_DIME)
+  { if (soap_getdimehdr(soap))
+      return soap->error;
+    if (soap->dime.flags & SOAP_DIME_CF)
+    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked DIME SOAP message\n"));
+      soap->dime.chunksize = soap->dime.size;
+      if (soap->buflen - soap->bufidx >= soap->dime.chunksize)
+      { soap->dime.buflen = soap->buflen;
+        soap->buflen = soap->bufidx + soap->dime.chunksize;
+      }
+      else
+        soap->dime.chunksize -= soap->buflen - soap->bufidx;
+    }
+    soap->count = soap->buflen - soap->bufidx;
+  }
+#endif
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_parse(struct soap *soap)
+{ char header[SOAP_HDRLEN], *s;
+  unsigned short get = 0, status = 0, k = 0;
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Waiting for HTTP request/response...\n"));
+  *soap->endpoint = '\0';
+  soap->length = 0;
+  soap->userid = NULL;
+  soap->passwd = NULL;
+  soap->action = NULL;
+  soap->authrealm = NULL;
+  do
+  { if (soap_getline(soap, soap->msgbuf, sizeof(soap->msgbuf)))
+      return soap->error;
+    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "HTTP status: %s\n", soap->msgbuf));
+    for (;;)
+    { if (soap_getline(soap, header, SOAP_HDRLEN))
+      { if (soap->error == SOAP_EOF)
+        { soap->error = SOAP_OK;
+          DBGLOG(TEST,SOAP_MESSAGE(fdebug, "EOF in HTTP header, continue anyway\n"));
+          break;
+        }
+        return soap->error;
+      }
+      if (!*header)
+        break;
+      DBGLOG(TEST,SOAP_MESSAGE(fdebug, "HTTP header: %s\n", header));
+      s = strchr(header, ':');
+      if (s)
+      { *s = '\0';
+        do s++;
+        while (*s && *s <= 32);
+        if ((soap->error = soap->fparsehdr(soap, header, s)))
+        { if (soap->error < SOAP_STOP)
+            return soap->error;
+          status = soap->error;
+          soap->error = SOAP_OK;
+        }
+      }
+    }
+    if ((s = strchr(soap->msgbuf, ' ')))
+    { k = (unsigned short)soap_strtoul(s, &s, 10);
+      if (!soap_blank(*s))
+        k = 0;
+    }
+    else
+      k = 0;
+  } while (k == 100);
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Finished HTTP header parsing, status = %d\n", k));
+  s = strstr(soap->msgbuf, "HTTP/");
+  if (s && s[7] != '1')
+  { if (soap->keep_alive == 1)
+      soap->keep_alive = 0;
+    if (k == 0 && (soap->omode & SOAP_IO) == SOAP_IO_CHUNK) /* k == 0 for HTTP request */
+    { soap->imode |= SOAP_IO_CHUNK;
+      soap->omode = (soap->omode & ~SOAP_IO) | SOAP_IO_STORE;
+    }
+  }
+  if (soap->keep_alive < 0)
+    soap->keep_alive = 1;
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Keep alive connection = %d\n", soap->keep_alive));
+  if (s && (((get = !strncmp(soap->msgbuf, "GET ", 4))) || !strncmp(soap->msgbuf, "POST ", 5)))
+  { size_t m = strlen(soap->endpoint);
+    size_t n = m + (s - soap->msgbuf) - 5 - (!get);
+    if (n >= sizeof(soap->endpoint))
+      n = sizeof(soap->endpoint) - 1;
+    strncpy(soap->path, soap->msgbuf + 4 + (!get), n - m);
+    soap->path[n - m] = '\0';
+    strcat(soap->endpoint, soap->path);
+    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Target endpoint='%s'\n", soap->endpoint));
+    if (get)
+    { soap->error = soap->fget(soap);
+      if (soap->error == SOAP_OK)
+        soap->error = SOAP_STOP; /* prevents further processing */
+      return soap->error;
+    }
+    if (status)
+      return soap->error = status;
+  }
+  soap->status = k;
+  if (k == 0 || k == 200 || (((k > 200 && k <= 299) || k == 400 || k == 500) && ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK || soap->length > 0)))
+    return SOAP_OK;
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "HTTP error %d\n", k));
+  return soap_set_receiver_error(soap, "HTTP Error", soap->msgbuf, k);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_parse_header(struct soap *soap, const char *key, const char *val)
+{ if (!soap_tag_cmp(key, "Host"))
+  { 
+#ifdef WITH_OPENSSL
+    if (soap->imode & SOAP_ENC_SSL)
+      strcpy(soap->endpoint, "https://");
+    else
+#endif
+      strcpy(soap->endpoint, "http://");
+    strncat(soap->endpoint, val, sizeof(soap->endpoint) - 8);
+    soap->endpoint[sizeof(soap->endpoint) - 1] = '\0';
+  }
+#ifndef WITH_LEANER
+  else if (!soap_tag_cmp(key, "Content-Type"))
+  { soap->http_content = soap_strdup(soap, val);
+    if (soap_get_header_attribute(soap, val, "application/dime"))
+      soap->mode |= SOAP_ENC_DIME;
+    else if (soap_get_header_attribute(soap, val, "multipart/related")
+          || soap_get_header_attribute(soap, val, "multipart/form-data"))
+    { soap->mime.boundary = soap_strdup(soap, soap_get_header_attribute(soap, val, "boundary"));
+      soap->mime.start = soap_strdup(soap, soap_get_header_attribute(soap, val, "start"));
+      soap->mode |= SOAP_ENC_MIME;
+    }
+  }
+#endif
+  else if (!soap_tag_cmp(key, "Content-Length"))
+    soap->length = soap_strtoul(val, NULL, 10);
+  else if (!soap_tag_cmp(key, "Content-Encoding"))
+  { if (!soap_tag_cmp(val, "deflate"))
+#ifdef WITH_ZLIB
+      soap->zlib_in = SOAP_ZLIB_DEFLATE;
+#else
+      return SOAP_ZLIB_ERROR;
+#endif
+    else if (!soap_tag_cmp(val, "gzip"))
+#ifdef WITH_GZIP
+      soap->zlib_in = SOAP_ZLIB_GZIP;
+#else
+      return SOAP_ZLIB_ERROR;
+#endif
+  }
+#ifdef WITH_ZLIB
+  else if (!soap_tag_cmp(key, "Accept-Encoding"))
+  {
+#ifdef WITH_GZIP
+    if (strchr(val, '*') || soap_get_header_attribute(soap, val, "gzip"))
+      soap->zlib_out = SOAP_ZLIB_GZIP;
+    else
+#endif
+    if (strchr(val, '*') || soap_get_header_attribute(soap, val, "deflate"))
+      soap->zlib_out = SOAP_ZLIB_DEFLATE;
+    else
+      soap->zlib_out = SOAP_ZLIB_NONE;
+  }
+#endif
+  else if (!soap_tag_cmp(key, "Transfer-Encoding"))
+  { soap->mode &= ~SOAP_IO;
+    if (!soap_tag_cmp(val, "chunked"))
+      soap->mode |= SOAP_IO_CHUNK;
+  }
+  else if (!soap_tag_cmp(key, "Connection"))
+  { if (!soap_tag_cmp(val, "keep-alive"))
+      soap->keep_alive = -soap->keep_alive;
+    else if (!soap_tag_cmp(val, "close"))
+      soap->keep_alive = 0;
+  }
+#ifndef WITH_LEAN
+  else if (!soap_tag_cmp(key, "Authorization"))
+  { if (!soap_tag_cmp(val, "Basic *"))
+    { int n;
+      char *s;
+      soap_base642s(soap, val + 6, soap->tmpbuf, sizeof(soap->tmpbuf) - 1, &n);
+      soap->tmpbuf[n] = '\0';
+      if ((s = strchr(soap->tmpbuf, ':')))
+      { *s = '\0';
+        soap->userid = soap_strdup(soap, soap->tmpbuf);
+        soap->passwd = soap_strdup(soap, s + 1);
+      }
+    }
+  }
+  else if (!soap_tag_cmp(key, "WWW-Authenticate"))
+    soap->authrealm = soap_strdup(soap, soap_get_header_attribute(soap, val + 6, "realm"));
+  else if (!soap_tag_cmp(key, "Expect"))
+  { if (!soap_tag_cmp(val, "100-continue"))
+    { if ((soap->error = soap->fposthdr(soap, "HTTP/1.1 100 Continue", NULL))
+       || (soap->error = soap->fposthdr(soap, NULL, NULL)))
+        return soap->error;
+    }
+  }
+#endif
+  else if (!soap_tag_cmp(key, "SOAPAction"))
+  { if (*val == '"')
+    { soap->action = soap_strdup(soap, val + 1);
+      soap->action[strlen(soap->action) - 1] = '\0';
+    }
+  }
+  else if (!soap_tag_cmp(key, "Location"))
+  { strncpy(soap->endpoint, val, sizeof(soap->endpoint));
+    soap->endpoint[sizeof(soap->endpoint) - 1] = '\0';
+  }
+#ifdef WITH_COOKIES
+  else if (!soap_tag_cmp(key, "Cookie")
+   || !soap_tag_cmp(key, "Cookie2")
+   || !soap_tag_cmp(key, "Set-Cookie")
+   || !soap_tag_cmp(key, "Set-Cookie2"))
+    soap_getcookies(soap, val);
+#endif
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
+#ifndef PALM_1
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_get_header_attribute(struct soap *soap, const char *line, const char *key)
+{ register const char *s = line;
+  if (s)
+  { while (*s)
+    { register short flag;
+      s = soap_decode_key(soap->tmpbuf, sizeof(soap->tmpbuf), s);
+      flag = soap_tag_cmp(soap->tmpbuf, key);
+      s = soap_decode_val(soap->tmpbuf, sizeof(soap->tmpbuf), s);
+      if (!flag)
+        return soap->tmpbuf;
+    }
+  }
+  return NULL;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
+#ifndef PALM_1
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_decode_key(char *buf, size_t len, const char *val)
+{ return soap_decode(buf, len, val, "=,;");
+}
+#endif
+#endif
+
+/******************************************************************************/
+#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
+#ifndef PALM_1
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_decode_val(char *buf, size_t len, const char *val)
+{ if (*val != '=')
+  { *buf = '\0';
+    return val;
+  }
+  return soap_decode(buf, len, val + 1, ",;");
+}
+#endif
+#endif
+
+/******************************************************************************/
+#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
+#ifndef PALM_1
+static const char*
+soap_decode(char *buf, size_t len, const char *val, const char *sep)
+{ const char *s;
+  char *t = buf;
+  for (s = val; *s; s++)
+    if (*s != ' ' && *s != '\t' && !strchr(sep, *s))
+      break;
+  if (*s == '"')
+  { s++;
+    while (*s && *s != '"' && --len)
+      *t++ = *s++;
+  }
+  else
+  { while (soap_notblank(*s) && !strchr(sep, *s) && --len)
+    { if (*s == '%')
+      { *t++ = ((s[1] >= 'A' ? (s[1] & 0x7) + 9 : s[1] - '0') << 4)
+              + (s[2] >= 'A' ? (s[2] & 0x7) + 9 : s[2] - '0');
+        s += 3;
+      }
+      else
+        *t++ = *s++;
+    }
+  }
+  *t = '\0';
+  while (*s && !strchr(sep, *s))
+    s++;
+  return s;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_envelope_begin_out(struct soap *soap)
+{
+#ifndef WITH_LEANER
+  size_t n = 0;
+  if ((soap->mode & SOAP_ENC_MIME) && soap->mime.boundary && soap->mime.start && strlen(soap->mime.boundary) + strlen(soap->mime.start) < sizeof(soap->tmpbuf) - 80 )
+  { const char *s;
+    if ((soap->mode & SOAP_ENC_DIME) && !(soap->mode & SOAP_ENC_MTOM))
+      s = "application/dime";
+    else if (soap->version == 2)
+    { if (soap->mode & SOAP_ENC_MTOM)
+        s = "application/xop+xml; charset=utf-8; type=application/soap+xml";
+      else
+        s = "application/soap+xml; charset=utf-8";
+    }
+    else
+      s = "text/xml; charset=utf-8";
+    sprintf(soap->tmpbuf, "--%s\r\nContent-Type: %s\r\nContent-Transfer-Encoding: binary\r\nContent-ID: %s\r\n\r\n", soap->mime.boundary, s, soap->mime.start);
+    n = strlen(soap->tmpbuf);
+    if (soap_send_raw(soap, soap->tmpbuf, n))
+      return soap->error;
+  }
+  if (soap->mode & SOAP_IO_LENGTH)
+    soap->dime.size = soap->count;     /* DIME in MIME correction */
+  if (!(soap->mode & SOAP_IO_LENGTH) && (soap->mode & SOAP_ENC_DIME))
+  { if (soap_putdimehdr(soap))
+      return soap->error;
+  }
+#endif
+  soap->part = SOAP_IN_ENVELOPE;
+  return soap_element_begin_out(soap, "SOAP-ENV:Envelope", 0, NULL);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_envelope_end_out(struct soap *soap)
+{ if (soap_element_end_out(soap, "SOAP-ENV:Envelope"))
+    return soap->error;
+#ifndef WITH_LEANER
+  if ((soap->mode & SOAP_IO_LENGTH) && (soap->mode & SOAP_ENC_DIME) && !(soap->mode & SOAP_ENC_MTOM))
+  { soap->dime.size = soap->count - soap->dime.size;   /* DIME in MIME correction */
+    sprintf(soap->id, soap->dime_id_format, 0);
+    soap->dime.id = soap->id;
+    if (soap->local_namespaces)
+    { if (soap->local_namespaces[0].out)
+        soap->dime.type = (char*)soap->local_namespaces[0].out;
+      else
+        soap->dime.type = (char*)soap->local_namespaces[0].ns;
+    }
+    soap->dime.options = NULL;
+    soap->dime.flags = SOAP_DIME_MB | SOAP_DIME_ABSURI;
+    if (!soap->dime.first)
+      soap->dime.flags |= SOAP_DIME_ME;
+    soap->count += 12 + ((strlen(soap->dime.id)+3)&(~3)) + (soap->dime.type ? ((strlen(soap->dime.type)+3)&(~3)) : 0);
+  }
+  if ((soap->mode & SOAP_ENC_DIME) && !(soap->mode & SOAP_ENC_MTOM))
+    return soap_send_raw(soap, SOAP_STR_PADDING, -(long)soap->dime.size&3);
+#endif
+  soap->part = SOAP_END_ENVELOPE;
+  return SOAP_OK;
+} 
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_envelope_begin_in(struct soap *soap)
+{ register struct Namespace *p;
+  soap->part = SOAP_IN_ENVELOPE;
+  if (soap_element_begin_in(soap, "SOAP-ENV:Envelope", 0, NULL))
+  { 
+#ifndef WITH_LEAN
+    if (!soap_element_begin_in(soap, "html", 0, NULL))
+    { /* get HTML from buffer, stop receiving to avoid HTML parsing issues */
+      char *s;
+#ifndef WITH_NOIO
+      size_t (*f)(struct soap*, char*, size_t) = soap->frecv;
+      soap->frecv = frecv_stop;
+#endif
+      soap_revert(soap);
+      s = soap_string_in(soap, 1, -1, -1);
+#ifndef WITH_NOIO
+      soap->frecv = f;
+#endif
+      return soap_set_receiver_error(soap, "HTTP Error", s, SOAP_HTTP_ERROR);
+    }
+#endif
+    return soap->error = SOAP_VERSIONMISMATCH;
+  }
+  p = soap->local_namespaces;
+  if (p)
+  { const char *ns = p[0].out;
+    if (!ns)
+      ns = p[0].ns;
+    if (!strcmp(ns, soap_env1))
+    { soap->version = 1; /* make sure we use SOAP 1.1 */
+      if (p[1].out)
+        SOAP_FREE(soap, p[1].out);
+      if ((p[1].out = (char*)SOAP_MALLOC(soap, sizeof(soap_enc1))))
+        strcpy(p[1].out, soap_enc1);
+    }
+    else if (!strcmp(ns, soap_env2))
+    { soap->version = 2; /* make sure we use SOAP 1.2 */
+      if (p[1].out)
+        SOAP_FREE(soap, p[1].out);
+      if ((p[1].out = (char*)SOAP_MALLOC(soap, sizeof(soap_enc2))))
+        strcpy(p[1].out, soap_enc2);
+    }
+  }
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_envelope_end_in(struct soap *soap)
+{ soap->part = SOAP_END_ENVELOPE;
+  return soap_element_end_in(soap, "SOAP-ENV:Envelope");
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_body_begin_out(struct soap *soap)
+{ soap->part = SOAP_IN_BODY;
+  if (soap->version == 1)
+    soap->encoding = 1;
+#ifndef WITH_LEAN
+  if ((soap->mode & SOAP_XML_SEC) && soap_set_attr(soap, "wsu:Id", "Body"))
+    return soap->error;
+#endif
+  if (soap_element(soap, "SOAP-ENV:Body", 0, NULL))
+    return soap->error;
+  return soap_element_start_end_out(soap, NULL);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_body_end_out(struct soap *soap)
+{ if (soap_element_end_out(soap, "SOAP-ENV:Body"))
+    return soap->error;
+  soap->part = SOAP_END_BODY;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_body_begin_in(struct soap *soap)
+{ soap->part = SOAP_IN_BODY;
+  if (soap_element_begin_in(soap, "SOAP-ENV:Body", 0, NULL))
+    return soap->error;
+  if (!soap->body)
+    soap->part = SOAP_NO_BODY;
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_body_end_in(struct soap *soap)
+{ if (soap->part == SOAP_NO_BODY)
+    return SOAP_OK;
+  soap->part = SOAP_END_BODY;
+  return soap_element_end_in(soap, "SOAP-ENV:Body");
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_recv_header(struct soap *soap)
+{ if (soap_getheader(soap) && soap->error == SOAP_TAG_MISMATCH)
+    soap->error = SOAP_OK;
+  else if (soap->error == SOAP_OK && soap->fheader)
+    soap->error = soap->fheader(soap);
+  return soap->error;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_endpoint(struct soap *soap, const char *endpoint)
+{ register const char *s;
+  register size_t i, n;
+  soap->endpoint[0] = '\0';
+  soap->host[0] = '\0';
+  soap->path[0] = '/';
+  soap->path[1] = '\0';
+  soap->port = 80;
+  if (!endpoint || !*endpoint)
+    return;
+#ifdef WITH_OPENSSL
+  if (!soap_tag_cmp(endpoint, "https:*"))
+    soap->port = 443;
+#endif
+  strncpy(soap->endpoint, endpoint, sizeof(soap->endpoint) - 1);
+  soap->endpoint[sizeof(soap->endpoint) - 1] = '\0';
+  s = strchr(endpoint, ':');
+  if (s && s[1] == '/' && s[2] == '/')
+    s += 3;
+  else
+    s = endpoint;
+  n = strlen(s);
+  if (n >= sizeof(soap->host))
+    n = sizeof(soap->host) - 1;
+#ifdef WITH_IPV6
+  if (s[0] == '[')
+  { s++;
+    for (i = 0; i < n; i++)
+    { soap->host[i] = s[i];
+      if (s[i] == ']')
+      { s++;
+        break; 
+      }
+    }
+  }
+  else
+  { for (i = 0; i < n; i++)
+    { soap->host[i] = s[i];
+      if (s[i] == '/' || s[i] == ':')
+        break; 
+    }
+  }
+#else
+  for (i = 0; i < n; i++)
+  { soap->host[i] = s[i];
+    if (s[i] == '/' || s[i] == ':')
+      break; 
+  }
+#endif
+  soap->host[i] = '\0';
+  if (s[i] == ':')
+  { soap->port = (int)atol(s + i + 1);
+    for (i++; i < n; i++)
+      if (s[i] == '/')
+        break;
+  }
+  if (s[i])
+  { strncpy(soap->path, s + i, sizeof(soap->path));
+    soap->path[sizeof(soap->path) - 1] = '\0';
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_connect(struct soap *soap, const char *endpoint, const char *action)
+{ return soap_connect_command(soap, SOAP_POST, endpoint, action);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_connect_command(struct soap *soap, int http_command, const char *endpoint, const char *action)
+{ char host[sizeof(soap->host)];
+  int port;
+  size_t count;
+  soap->error = SOAP_OK;
+  strcpy(host, soap->host); /* save to compare */
+  port = soap->port; /* save to compare */
+  soap_set_endpoint(soap, endpoint);
+#ifndef WITH_LEANER
+  if (soap->fconnect)
+  { if ((soap->error = soap->fconnect(soap, endpoint, soap->host, soap->port)))
+      return soap->error;
+  }
+  else
+#endif
+  if (soap->fopen && *soap->host)
+  { soap->status = http_command;
+    if (!soap->keep_alive || !soap_valid_socket(soap->socket) || strcmp(soap->host, host) || soap->port != port || !soap->fpoll || soap->fpoll(soap))
+    { soap->keep_alive = 0; /* to force close */
+      soap->omode &= ~SOAP_IO_UDP; /* to force close */
+      soap_closesock(soap);
+      DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Connect/reconnect to host='%s' path='%s' port=%d\n", soap->host, soap->path, soap->port));
+#ifdef WITH_UDP
+      if (!strncmp(endpoint, "soap.udp:", 9))
+        soap->omode |= SOAP_IO_UDP;
+#endif
+      soap->socket = soap->fopen(soap, endpoint, soap->host, soap->port);
+      if (soap->error)
+        return soap->error;
+      soap->keep_alive = ((soap->omode & SOAP_IO_KEEPALIVE) != 0);
+    }
+  }
+  count = soap_count_attachments(soap);
+  if (soap_begin_send(soap))
+    return soap->error;
+#ifndef WITH_NOHTTP
+  soap->action = soap_strdup(soap, action);
+  if ((soap->mode & SOAP_IO) != SOAP_IO_STORE && !(soap->mode & SOAP_ENC_XML) && endpoint)
+  { unsigned int k = soap->mode;
+    soap->mode &= ~(SOAP_IO | SOAP_ENC_ZLIB);
+    if ((k & SOAP_IO) != SOAP_IO_FLUSH)
+      soap->mode |= SOAP_IO_BUFFER;
+    if ((soap->error = soap->fpost(soap, endpoint, soap->host, soap->port, soap->path, action, count)))
+      return soap->error;
+#ifndef WITH_LEANER
+    if ((k & SOAP_IO) == SOAP_IO_CHUNK)
+    { if (soap_flush(soap))
+        return soap->error;
+    }
+#endif
+    soap->mode = k;
+  }
+  if (http_command != SOAP_POST)
+    return soap_end_send(soap);
+#endif
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+char*
+SOAP_FMAC2
+soap_s2base64(struct soap *soap, const unsigned char *s, char *t, int n)
+{ register int i;
+  register unsigned long m;
+  register char *p;
+  if (!t)
+    t = (char*)soap_malloc(soap, (n + 2) / 3 * 4 + 1);
+  if (!t)
+  { soap->error = SOAP_EOM;
+    return NULL;
+  }
+  p = t;
+  t[0] = '\0';
+  if (!s)
+    return p;
+  for (; n > 2; n -= 3, s += 3)
+  { m = s[0];
+    m = (m << 8) | s[1];
+    m = (m << 8) | s[2];
+    for (i = 4; i > 0; m >>= 6)
+      t[--i] = soap_base64o[m & 0x3F];
+    t += 4;
+  }
+  t[0] = '\0';
+  if (n > 0)
+  { m = 0;
+    for (i = 0; i < n; i++)
+      m = (m << 8) | *s++;
+    for (; i < 3; i++)
+      m <<= 8;
+    for (i++; i > 0; m >>= 6)
+      t[--i] = soap_base64o[m & 0x3F];
+    for (i = 3; i > n; i--)
+      t[i] = '=';
+    t[4] = '\0';
+  }
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_base642s(struct soap *soap, const char *s, char *t, size_t l, int *n)
+{ register int i, j, c;
+  register unsigned long m;
+  register const char *p;
+  if (!s || !*s)
+  { if (n)
+      *n = 0;
+    if (soap->error)
+      return NULL;
+    return SOAP_NON_NULL;
+  }
+  if (!t)
+  { l = (strlen(s) + 3) / 4 * 3;
+    t = (char*)soap_malloc(soap, l);
+  }
+  if (!t)
+  { soap->error = SOAP_EOM;
+    return NULL;
+  }
+  p = t;
+  if (n)
+    *n = 0;
+  for (;;)
+  { for (i = 0; i < SOAP_BLKLEN; i++)
+    { m = 0;
+      j = 0;
+      while (j < 4)
+      { c = *s++;
+        if (c == '=' || !c)
+        { i *= 3;
+          switch (j)
+          { case 2:
+              *t++ = (char)((m >> 4) & 0xFF);
+              i++;
+              break;
+            case 3:
+              *t++ = (char)((m >> 10) & 0xFF);
+              *t++ = (char)((m >> 2) & 0xFF);
+              i += 2;
+          }
+          if (n)
+            *n += i;
+          return p;
+        }
+        c -= '+';
+        if (c >= 0 && c <= 79)
+        { int b = soap_base64i[c];
+         if (b >= 64)
+         { soap->error = SOAP_TYPE;
+           return NULL;  
+          }
+          m = (m << 6) + b;
+          j++;
+        }
+       else if (!soap_blank(c))
+       { soap->error = SOAP_TYPE;
+         return NULL;  
+        }
+      }
+      *t++ = (char)((m >> 16) & 0xFF);
+      *t++ = (char)((m >> 8) & 0xFF);
+      *t++ = (char)(m & 0xFF);
+      if (l < 3)
+      { if (n)
+          *n += i;
+        return p;
+      }
+      l -= 3;
+    }
+    if (n)
+      *n += 3 * SOAP_BLKLEN;
+  }
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+char*
+SOAP_FMAC2
+soap_s2hex(struct soap *soap, const unsigned char *s, char *t, int n)
+{ register char *p;
+  if (!t)
+    t = (char*)soap_malloc(soap, 2 * n + 1);
+  if (!t)
+  { soap->error = SOAP_EOM;
+    return NULL;
+  }
+  p = t;
+  t[0] = '\0';
+  if (s)
+  { for (; n > 0; n--)
+    { register int m = *s++;
+      *t++ = (char)((m >> 4) + (m > 159 ? 'a' - 10 : '0'));
+      m &= 0x0F;
+      *t++ = (char)(m + (m > 9 ? 'a' - 10 : '0'));
+    }
+  }
+  *t++ = '\0';
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+SOAP_FMAC1
+const char*
+SOAP_FMAC2
+soap_hex2s(struct soap *soap, const char *s, char *t, size_t l, int *n)
+{ register const char *p;
+  if (!s || !*s)
+  { if (n)
+      *n = 0;
+    if (soap->error)
+      return NULL;
+    return SOAP_NON_NULL;
+  }
+  if (!t)
+  { l = strlen(s) / 2;
+    t = (char*)soap_malloc(soap, l);
+  }
+  if (!t)
+  { soap->error = SOAP_EOM;
+    return NULL;
+  }
+  p = t;
+  while (l)
+  { register int d1, d2;
+    d1 = *s++;
+    if (!d1)
+      break;
+    d2 = *s++;
+    if (!d2)
+      break;
+    *t++ = ((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0');
+    l--;
+  }
+  if (n)
+    *n = t - p;
+  return p;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_puthttphdr(struct soap *soap, int status, size_t count)
+{ register const char *s = "text/xml; charset=utf-8";
+  register int err = SOAP_OK;
+#ifndef WITH_LEANER
+  register const char *r = NULL;
+#endif
+  if (status == SOAP_FILE && soap->http_content)
+    s = soap->http_content;
+  else if (status == SOAP_HTML)
+    s = "text/html; charset=utf-8";
+  else if (count || ((soap->omode & SOAP_IO) == SOAP_IO_CHUNK))
+  { if (soap->version == 2)
+      s = "application/soap+xml; charset=utf-8";
+  }
+#ifndef WITH_LEANER
+  if (soap->mode & (SOAP_ENC_DIME | SOAP_ENC_MTOM))
+  { if (soap->mode & SOAP_ENC_MTOM)
+    { r = s;
+      s = "application/xop+xml; charset=utf-8";
+    }
+    else
+      s = "application/dime";
+  }
+  if ((soap->mode & SOAP_ENC_MIME) && soap->mime.boundary && soap->status != SOAP_GET && strlen(soap->mime.boundary) + strlen(soap->mime.start ? soap->mime.start : SOAP_STR_EOS) < sizeof(soap->tmpbuf) - 80)
+  { register const char *t = strchr(s, ';');
+    sprintf(soap->tmpbuf, "multipart/related; boundary=\"%s\"; type=\"", soap->mime.boundary);
+    if (t)
+      strncat(soap->tmpbuf, s, t - s);
+    else
+      strcat(soap->tmpbuf, s);
+    if (soap->mime.start)
+    { strcat(soap->tmpbuf, "\"; start=\"");
+      strcat(soap->tmpbuf, soap->mime.start);
+    }
+    strcat(soap->tmpbuf, "\"");
+    if (r)
+    { strcat(soap->tmpbuf, "; start-info=\"");
+      strcat(soap->tmpbuf, r);
+      strcat(soap->tmpbuf, "\"");
+    }
+    s = soap->tmpbuf;
+  }
+#endif
+  if (s && (err = soap->fposthdr(soap, "Content-Type", s)))
+    return err;
+#ifdef WITH_ZLIB
+  if (soap->omode & SOAP_ENC_ZLIB)
+  {
+#ifdef WITH_GZIP
+    err = soap->fposthdr(soap, "Content-Encoding", "gzip");
+#else
+    err = soap->fposthdr(soap, "Content-Encoding", "deflate");
+#endif
+    if (err)
+      return err;
+  }
+#endif
+#ifndef WITH_LEANER
+  if ((soap->omode & SOAP_IO) == SOAP_IO_CHUNK)
+    err = soap->fposthdr(soap, "Transfer-Encoding", "chunked");
+  else
+#endif
+  if (s && soap->status != SOAP_GET)
+  { sprintf(soap->tmpbuf, "%lu", (unsigned long)count);
+    err = soap->fposthdr(soap, "Content-Length", soap->tmpbuf);
+  }
+  if (err)
+    return err;
+  return soap->fposthdr(soap, "Connection", soap->keep_alive ? "keep-alive" : "close");
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_get(struct soap *soap)
+{ return SOAP_GET_METHOD;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_post(struct soap *soap, const char *endpoint, const char *host, int port, const char *path, const char *action, size_t count)
+{ register const char *s;
+  register int err;
+  if (soap->status == SOAP_GET)
+    s = "GET";
+  else
+    s = "POST";
+#ifdef PALM
+  if (!endpoint || (soap_tag_cmp(endpoint, "http:*") && soap_tag_cmp(endpoint, "https:*") && strncmp(endpoint, "httpg:", 6)) && strncmp(endpoint, "_beam:", 6) && strncmp(endpoint, "_local:", 7) && strncmp(endpoint, "_btobex:", 8))
+#else
+  if (!endpoint || (soap_tag_cmp(endpoint, "http:*") && soap_tag_cmp(endpoint, "https:*") && strncmp(endpoint, "httpg:", 6)))
+#endif
+    return SOAP_OK;
+  if (strlen(endpoint) + strlen(soap->http_version) > sizeof(soap->tmpbuf) - 80)
+    return soap->error = SOAP_EOM;
+  if (soap->proxy_host && soap_tag_cmp(endpoint, "https:*"))
+    sprintf(soap->tmpbuf, "%s %s HTTP/%s", s, endpoint, soap->http_version);
+  else
+    sprintf(soap->tmpbuf, "%s /%s HTTP/%s", s, (*path == '/' ? path + 1 : path), soap->http_version);
+  if ((err = soap->fposthdr(soap, soap->tmpbuf, NULL)))
+    return err;
+  if (port != 80)
+    sprintf(soap->tmpbuf, "%s:%d", host, port);
+  else
+    strcpy(soap->tmpbuf, host); 
+  if ((err = soap->fposthdr(soap, "Host", soap->tmpbuf))
+   || (err = soap->fposthdr(soap, "User-Agent", "gSOAP/2.7"))
+   || (err = soap_puthttphdr(soap, SOAP_OK, count)))
+    return err;
+#ifdef WITH_ZLIB
+#ifdef WITH_GZIP
+  if ((err = soap->fposthdr(soap, "Accept-Encoding", "gzip, deflate")))
+#else
+  if ((err = soap->fposthdr(soap, "Accept-Encoding", "deflate")))
+#endif
+    return err;
+#endif
+#ifndef WITH_LEAN
+  if (soap->userid && soap->passwd && strlen(soap->userid) + strlen(soap->passwd) < 761)
+  { sprintf(soap->tmpbuf + 262, "%s:%s", soap->userid, soap->passwd);
+    strcpy(soap->tmpbuf, "Basic ");
+    soap_s2base64(soap, (const unsigned char*)(soap->tmpbuf + 262), soap->tmpbuf + 6, strlen(soap->tmpbuf + 262));
+    if ((err = soap->fposthdr(soap, "Authorization", soap->tmpbuf)))
+      return err;
+  }
+  if (soap->proxy_userid && soap->proxy_passwd && strlen(soap->proxy_userid) + strlen(soap->proxy_passwd) < 761)
+  { sprintf(soap->tmpbuf + 262, "%s:%s", soap->proxy_userid, soap->proxy_passwd);
+    strcpy(soap->tmpbuf, "Basic ");
+    soap_s2base64(soap, (const unsigned char*)(soap->tmpbuf + 262), soap->tmpbuf + 6, strlen(soap->tmpbuf + 262));
+    if ((err = soap->fposthdr(soap, "Proxy-Authorization", soap->tmpbuf)))
+      return err;
+  }
+#endif
+#ifdef WITH_COOKIES
+#ifdef WITH_OPENSSL
+  if (soap_putcookies(soap, host, path, soap->ssl != NULL))
+    return soap->error;
+#else
+  if (soap_putcookies(soap, host, path, 0))
+    return soap->error;
+#endif
+#endif
+  if (soap->version == 1 || (action && *action && strlen(action) < sizeof(soap->tmpbuf) - 2))
+  { sprintf(soap->tmpbuf, "\"%s\"", action?action:"");
+    if ((err = soap->fposthdr(soap, "SOAPAction", soap->tmpbuf)))
+      return err;
+  }
+  return soap->fposthdr(soap, NULL, NULL);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_send_header(struct soap *soap, const char *s)
+{ register const char *t;
+  do
+  { t = strchr(s, '\n'); /* disallow \n in HTTP headers */
+    if (!t)
+      t = s + strlen(s);
+    if (soap_send_raw(soap, s, t - s))
+      return soap->error;
+    s = t + 1;
+  } while (*t);
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_post_header(struct soap *soap, const char *key, const char *val)
+{ if (key)
+  { if (http_send_header(soap, key))
+      return soap->error;
+    if (val && (soap_send_raw(soap, ": ", 2) || http_send_header(soap, val)))
+      return soap->error;
+  }
+  return soap_send_raw(soap, "\r\n", 2);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+static int
+http_response(struct soap *soap, int status, size_t count)
+{ register int err;
+#ifdef WMW_RPM_IO
+  if (soap->rpmreqid)
+    httpOutputEnable(soap->rpmreqid);
+#endif
+  if (strlen(soap->http_version) > 4)
+    return soap->error = SOAP_EOM;
+  if (!status || status == SOAP_HTML || status == SOAP_FILE)
+  { const char *s;
+    if (count || ((soap->omode & SOAP_IO) == SOAP_IO_CHUNK))
+      s = "200 OK";
+    else
+      s = "202 ACCEPTED";
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Status = %s\n", s));
+#ifdef WMW_RPM_IO
+    if (soap->rpmreqid || soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) /* RPM behaves as if standalone */
+#else
+    if (soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) /* standalone application */
+#endif
+    { sprintf(soap->tmpbuf, "HTTP/%s %s", soap->http_version, s);
+      if ((err = soap->fposthdr(soap, soap->tmpbuf, NULL)))
+        return err;
+    }
+    else if ((err = soap->fposthdr(soap, "Status", s)))
+      return err;
+  }
+  else if (status >= 200 && status < 600)
+  { sprintf(soap->tmpbuf, "HTTP/%s %d %s", soap->http_version, status, http_error(soap, status));
+    if ((err = soap->fposthdr(soap, soap->tmpbuf, NULL)))
+      return err;
+#ifndef WITH_LEAN 
+    if (status == 401)
+    { sprintf(soap->tmpbuf, "Basic realm=\"%s\"", strlen(soap->authrealm) < sizeof(soap->tmpbuf) - 14 ? soap->authrealm : "gSOAP Web Service");
+      if ((err = soap->fposthdr(soap, "WWW-Authenticate", soap->tmpbuf)))
+        return err;
+    }
+    else if ((status >= 301 && status <= 303) || status == 307)
+    { if ((err = soap->fposthdr(soap, "Location", soap->endpoint)))
+        return err;
+    }
+#endif
+  }
+  else
+  { const char *s = *soap_faultcode(soap);
+    if (soap->version == 2 && !strcmp(s, "SOAP-ENV:Sender"))
+      s = "400 Bad Request";
+    else
+      s = "500 Internal Server Error";
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Error %s (status=%d)\n", s, status));
+#ifdef WMW_RPM_IO
+    if (soap->rpmreqid || soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) /* RPM behaves as if standalone */
+#else
+    if (soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) /* standalone application */
+#endif
+    { sprintf(soap->tmpbuf, "HTTP/%s %s", soap->http_version, s);
+      if ((err = soap->fposthdr(soap, soap->tmpbuf, NULL)))
+        return err;
+    }
+    else if ((err = soap->fposthdr(soap, "Status", s)))        /* CGI */
+      return err;
+  }
+  if ((err = soap->fposthdr(soap, "Server", "gSOAP/2.7"))
+   || (err = soap_puthttphdr(soap, status, count)))
+    return err;
+#ifdef WITH_COOKIES
+  if (soap_putsetcookies(soap))
+    return soap->error;
+#endif
+  return soap->fposthdr(soap, NULL, NULL);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_response(struct soap *soap, int status)
+{ register size_t count;
+  if (!(soap->omode & (SOAP_ENC_XML | SOAP_IO_STORE /* this tests for chunking too */))
+   && (status == SOAP_HTML || status == SOAP_FILE))
+  { soap->omode &= ~SOAP_IO;
+    soap->omode |= SOAP_IO_STORE;
+  }
+  soap->status = status;
+  count = soap_count_attachments(soap);
+  if (soap_begin_send(soap))
+    return soap->error;
+#ifndef WITH_NOHTTP
+  if ((soap->mode & SOAP_IO) != SOAP_IO_STORE && !(soap->mode & SOAP_ENC_XML))
+  { register int n = soap->mode;
+    soap->mode &= ~(SOAP_IO | SOAP_ENC_ZLIB);
+    if ((n & SOAP_IO) != SOAP_IO_FLUSH)
+      soap->mode |= SOAP_IO_BUFFER;
+    if ((soap->error = soap->fresponse(soap, status, count)))
+      return soap->error;
+#ifndef WITH_LEANER
+    if ((n & SOAP_IO) == SOAP_IO_CHUNK)
+    { if (soap_flush(soap))
+        return soap->error;
+    }
+#endif
+    soap->mode = n;
+  }
+#endif
+  return SOAP_OK;
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_LEAN
+static const char*
+soap_set_validation_fault(struct soap *soap, const char *s, const char *t)
+{ if (*soap->tag)
+    sprintf(soap->msgbuf, "Validation constraint violation: %s%s in element <%s>", s, t?t:SOAP_STR_EOS, soap->tag);
+  else
+    sprintf(soap->msgbuf, "Validation constraint violation: %s%s", s, t?t:SOAP_STR_EOS);
+  return soap->msgbuf;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_set_fault(struct soap *soap)
+{ const char **c = soap_faultcode(soap);
+  const char **s = soap_faultstring(soap);
+  if (soap->fseterror)
+    soap->fseterror(soap, c, s);
+  if (!*c)
+  { if (soap->version == 2)
+      *c = "SOAP-ENV:Sender";
+    else
+      *c = "SOAP-ENV:Client";
+  }
+  if (*s)
+    return;
+  switch (soap->error)
+  {
+#ifndef WITH_LEAN
+    case SOAP_CLI_FAULT:
+      *s = "Client fault";
+      break;
+    case SOAP_SVR_FAULT:
+      *s = "Server fault";
+      break;
+    case SOAP_TAG_MISMATCH:
+      *s = soap_set_validation_fault(soap, "tag name or namespace mismatch", NULL);
+      break;
+    case SOAP_TYPE:
+      *s = soap_set_validation_fault(soap, "data type mismatch ", soap->type);
+      break;
+    case SOAP_SYNTAX_ERROR:
+      *s = "Well-formedness violation";
+      break;
+    case SOAP_NO_TAG:
+      *s = "No XML element tag";
+      break;
+    case SOAP_MUSTUNDERSTAND:
+      *c = "SOAP-ENV:MustUnderstand";
+      sprintf(soap->msgbuf, "The data in element '%s' must be understood but cannot be handled", soap->tag);
+      *s = soap->msgbuf;
+      break;
+    case SOAP_VERSIONMISMATCH:
+      *c = "SOAP-ENV:VersionMismatch";
+      *s = "SOAP version mismatch or invalid SOAP message";
+      break;
+    case SOAP_DATAENCODINGUNKNOWN:
+      *c = "SOAP-ENV:DataEncodingUnknown";
+      *s = "Unsupported SOAP data encoding";
+      break;
+    case SOAP_NAMESPACE:
+      *s = soap_set_validation_fault(soap, "namespace mismatch", NULL);
+      break;
+    case SOAP_USER_ERROR:
+      *s = "User error";
+      break;
+    case SOAP_FATAL_ERROR:
+      *s = "Fatal error";
+      break;
+    case SOAP_NO_METHOD:
+      sprintf(soap->msgbuf, "Method '%s' not implemented: method name or namespace not recognized", soap->tag);
+      *s = soap->msgbuf;
+      break;
+    case SOAP_NO_DATA:
+      *s = "Data required for operation";
+      break;
+    case SOAP_GET_METHOD:
+      *s = "HTTP GET method not implemented";
+      break;
+    case SOAP_EOM:
+      *s = "Out of memory";
+      break;
+    case SOAP_MOE:
+      *s = "Memory overflow or corruption error";
+      break;
+    case SOAP_IOB:
+      *s = "Array index out of bounds";
+      break;
+    case SOAP_NULL:
+      *s = soap_set_validation_fault(soap, "nil not allowed", NULL);
+      break;
+    case SOAP_DUPLICATE_ID:
+      *s = soap_set_validation_fault(soap, "multiple definitions of id ", soap->id);
+      if (soap->version == 2)
+        *soap_faultsubcode(soap) = "SOAP-ENC:DuplicateID";
+      break;
+    case SOAP_MISSING_ID:
+      *s = soap_set_validation_fault(soap, "missing id for ref ", soap->id);
+      if (soap->version == 2)
+        *soap_faultsubcode(soap) = "SOAP-ENC:MissingID";
+      break;
+    case SOAP_HREF:
+      *s = soap_set_validation_fault(soap, "incompatible object ref ", soap->id);
+      break;
+    case SOAP_FAULT:
+      break;
+#ifndef WITH_NOIO
+    case SOAP_UDP_ERROR:
+      *s = "Message too large for UDP packet";
+      break;
+    case SOAP_TCP_ERROR:
+      *s = tcp_error(soap);
+      break;
+#endif
+    case SOAP_HTTP_ERROR:
+      *s = "An HTTP processing error occurred";
+      break;
+    case SOAP_SSL_ERROR:
+#ifdef WITH_OPENSSL
+      *s = "SSL error";
+#else
+      *s = "OpenSSL not installed: recompile with -DWITH_OPENSSL";
+#endif
+      break;
+    case SOAP_PLUGIN_ERROR:
+      *s = "Plugin registry error";
+      break;
+    case SOAP_DIME_ERROR:
+      *s = "DIME format error";
+      break;
+    case SOAP_DIME_HREF:
+      *s = "DIME href to missing attachment";
+      break;
+    case SOAP_DIME_MISMATCH:
+      *s = "DIME version/transmission error";
+      break;
+    case SOAP_DIME_END:
+      *s = "End of DIME error";
+      break;
+    case SOAP_MIME_ERROR:
+      *s = "MIME format error";
+      break;
+    case SOAP_MIME_HREF:
+      *s = "MIME href to missing attachment";
+      break;
+    case SOAP_MIME_END:
+      *s = "End of MIME error";
+      break;
+    case SOAP_ZLIB_ERROR:
+#ifdef WITH_ZLIB
+      sprintf(soap->msgbuf, "Zlib/gzip error: '%s'", soap->d_stream.msg?soap->d_stream.msg:"");
+      *s = soap->msgbuf;
+#else
+      *s = "Zlib/gzip not installed for (de)compression: recompile with -DWITH_GZIP";
+#endif
+      break;
+    case SOAP_REQUIRED:
+      *s = soap_set_validation_fault(soap, "missing required attribute", NULL);
+      break;
+    case SOAP_PROHIBITED:
+      *s = soap_set_validation_fault(soap, "prohibited attribute present", NULL);
+      break;
+    case SOAP_OCCURS:
+      *s = soap_set_validation_fault(soap, "min/maxOccurs violation", NULL);
+      break;
+    case SOAP_LENGTH:
+      *s = soap_set_validation_fault(soap, "content length violation", NULL);
+      break;
+    case SOAP_FD_EXCEEDED:
+      *s = "Maximum number of open connections was reached";
+      break;
+    case SOAP_STOP:
+      *s = "Stopped: no response sent";
+      break;
+#endif
+    case SOAP_EOF:
+#ifndef WITH_NOIO
+      sprintf(soap->msgbuf, "End of file or no input: '%s'", soap_strerror(soap));
+      *s = soap->msgbuf;
+      break;
+#else
+      *s = "End of file or no input";
+      break;
+#endif
+    default:
+#ifndef WITH_NOHTTP
+#ifndef WITH_LEAN
+      if (soap->error > 200 && soap->error < 600)
+      { sprintf(soap->msgbuf, "HTTP Error: %d %s", soap->error, http_error(soap, soap->error));
+        *s = soap->msgbuf;
+      }
+      else
+#endif
+#endif
+      { sprintf(soap->msgbuf, "Error %d", soap->error);
+        *s = soap->msgbuf;
+      }
+    }
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_send_fault(struct soap *soap)
+{ register int status = soap->error;
+  int r = 1;
+  if (status == SOAP_STOP)
+    return status;
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Sending back fault struct for error code %d\n", soap->error));
+  soap->keep_alive = 0; /* to terminate connection */
+  soap_set_fault(soap);
+#ifndef WITH_NOIO
+#ifndef WITH_LEAN
+  if (soap_valid_socket(soap->socket))
+  { struct timeval timeout;
+    fd_set rfd, sfd;
+    timeout.tv_sec = 0;
+    timeout.tv_usec = 0;
+    FD_ZERO(&rfd);
+    FD_ZERO(&sfd);
+    FD_SET((SOAP_SOCKET)soap->socket, &rfd);
+    FD_SET((SOAP_SOCKET)soap->socket, &sfd);
+    r = select((SOAP_SOCKET)(soap->socket + 1), &rfd, &sfd, NULL, &timeout);
+    if (r > 0)
+    { if (!FD_ISSET((SOAP_SOCKET)soap->socket, &sfd)
+       || (FD_ISSET((SOAP_SOCKET)soap->socket, &rfd)
+        && recv((SOAP_SOCKET)soap->socket, soap->tmpbuf, 1, MSG_PEEK) < 0))
+        r = 0;
+    }
+  }
+#endif
+#endif
+  if ((status != SOAP_EOF || (!soap->recv_timeout && !soap->send_timeout)) && r > 0)
+  { soap->error = SOAP_OK;
+    soap_serializeheader(soap);
+    soap_serializefault(soap);
+    soap_begin_count(soap);
+    if (soap->mode & SOAP_IO_LENGTH)
+    { soap_envelope_begin_out(soap);
+      soap_putheader(soap);
+      soap_body_begin_out(soap);
+      soap_putfault(soap);
+      soap_body_end_out(soap);
+      soap_envelope_end_out(soap);
+    }
+    soap_end_count(soap);
+    if (soap_response(soap, status)
+     || soap_envelope_begin_out(soap)
+     || soap_putheader(soap)
+     || soap_body_begin_out(soap)
+     || soap_putfault(soap)
+     || soap_body_end_out(soap)
+     || soap_envelope_end_out(soap))
+      return soap_closesock(soap);
+    soap_end_send(soap);
+  }
+  soap->error = status;
+  return soap_closesock(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_recv_fault(struct soap *soap)
+{ register int status = soap->error;
+  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Receiving SOAP Fault\n"));
+  soap->error = SOAP_OK;
+  if (soap_getfault(soap))
+  { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Error: soap_get_soapfault() failed. Is this a SOAP message at all?\n"));
+    *soap_faultcode(soap) = (soap->version == 2 ? "SOAP-ENV:Sender" : "SOAP-ENV:Client");
+    soap->error = status;
+    soap_set_fault(soap);
+  }
+  else
+  { register const char *s = *soap_faultcode(soap);
+    if (!soap_match_tag(soap, s, "SOAP-ENV:Server") || !soap_match_tag(soap, s, "SOAP-ENV:Receiver"))
+      status = SOAP_SVR_FAULT; 
+    else if (!soap_match_tag(soap, s, "SOAP-ENV:Client") || !soap_match_tag(soap, s, "SOAP-ENV:Sender"))
+      status = SOAP_CLI_FAULT;
+    else if (!soap_match_tag(soap, s, "SOAP-ENV:MustUnderstand"))
+      status = SOAP_MUSTUNDERSTAND;
+    else if (!soap_match_tag(soap, s, "SOAP-ENV:VersionMismatch"))
+      status = SOAP_VERSIONMISMATCH;
+    else
+    { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Fault code %s\n", s));
+      status = SOAP_FAULT;
+    }
+    if (soap_body_end_in(soap)
+     || soap_envelope_end_in(soap)
+     || soap_end_recv(soap))
+      return soap_closesock(soap);
+    soap->error = status;
+  }
+  return soap_closesock(soap);
+}
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_send_empty_response(struct soap *soap, int status)
+{ register soap_mode m = soap->omode;
+  soap->count = 0;
+  if ((m & SOAP_IO) == SOAP_IO_CHUNK)
+  { soap->omode &= ~SOAP_IO_CHUNK;
+    soap->omode |= SOAP_IO_BUFFER;
+  }
+  if (soap_response(soap, status) || soap_end_send(soap))
+  { soap->omode = m;
+    return soap_closesock(soap);
+  }
+  soap->omode = m;
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOHTTP
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_recv_empty_response(struct soap *soap)
+{ if (soap_begin_recv(soap) || soap_end_recv(soap))
+  { if (soap->error != 202)
+      return soap_closesock(soap);
+    soap->error = SOAP_OK;
+  }
+  return SOAP_OK;
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifndef WITH_NOIO
+#ifndef PALM_1
+static const char*
+soap_strerror(struct soap *soap)
+{ register int err = soap->errnum;
+  if (err)
+  {
+#ifndef WIN32
+    return strerror(err);
+#else
+#ifndef UNDER_CE
+    DWORD len;
+    *soap->msgbuf = '\0';
+    len = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)soap->msgbuf, (DWORD)sizeof(soap->msgbuf), NULL);
+#else
+    DWORD i, len;
+    *soap->msgbuf = '\0';
+    len = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, 0, (LPTSTR)soap->msgbuf, (DWORD)(sizeof(soap->msgbuf)/sizeof(TCHAR)), NULL);
+    for (i = 0; i <= len; i++)
+    { if (((TCHAR*)soap->msgbuf)[i] < 0x80)
+        soap->msgbuf[i] = (char)((TCHAR*)soap->msgbuf)[i];
+      else
+        soap->msgbuf[i] = '?';
+    }
+#endif
+    return soap->msgbuf;
+#endif
+  }
+  return "Operation interrupted or timed out";
+}
+#endif
+#endif 
+
+/******************************************************************************/
+#ifndef PALM_2
+static int
+soap_set_error(struct soap *soap, const char *faultcode, const char *faultsubcode, const char *faultstring, const char *faultdetail, int soaperror)
+{ *soap_faultcode(soap) = faultcode;
+  if (faultsubcode)
+    *soap_faultsubcode(soap) = faultsubcode;
+  *soap_faultstring(soap) = faultstring;
+  if (faultdetail && *faultdetail)
+  { register const char **s = soap_faultdetail(soap);
+    if (s)
+      *s = faultdetail;
+  }
+  return soap->error = soaperror;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_sender_error(struct soap *soap, const char *faultstring, const char *faultdetail, int soaperror)
+{ return soap_set_error(soap, soap->version == 2 ? "SOAP-ENV:Sender" : "SOAP-ENV:Client", NULL, faultstring, faultdetail, soaperror);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_set_receiver_error(struct soap *soap, const char *faultstring, const char *faultdetail, int soaperror)
+{ return soap_set_error(soap, soap->version == 2 ? "SOAP-ENV:Receiver" : "SOAP-ENV:Server", NULL, faultstring, faultdetail, soaperror);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+static int
+soap_copy_fault(struct soap *soap, const char *faultcode, const char *faultsubcode, const char *faultstring, const char *faultdetail)
+{ char *r = NULL, *s = NULL, *t = NULL;
+  if (faultsubcode)
+    r = soap_strdup(soap, faultsubcode);
+  if (faultstring)
+    s = soap_strdup(soap, faultstring);
+  if (faultdetail)
+    t = soap_strdup(soap, faultdetail);
+  return soap_set_error(soap, faultcode, r, s, t, SOAP_FAULT);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_sender_fault(struct soap *soap, const char *faultstring, const char *faultdetail)
+{ return soap_sender_fault_subcode(soap, NULL, faultstring, faultdetail);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_sender_fault_subcode(struct soap *soap, const char *faultsubcode, const char *faultstring, const char *faultdetail)
+{ return soap_copy_fault(soap, soap->version == 2 ? "SOAP-ENV:Sender" : "SOAP-ENV:Client", faultsubcode, faultstring, faultdetail);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_receiver_fault(struct soap *soap, const char *faultstring, const char *faultdetail)
+{ return soap_receiver_fault_subcode(soap, NULL, faultstring, faultdetail);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_receiver_fault_subcode(struct soap *soap, const char *faultsubcode, const char *faultstring, const char *faultdetail)
+{ return soap_copy_fault(soap, soap->version == 2 ? "SOAP-ENV:Receiver" : "SOAP-ENV:Server", faultsubcode, faultstring, faultdetail);
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+#ifndef WITH_NOSTDLIB
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_print_fault(struct soap *soap, FILE *fd)
+{ if (soap_check_state(soap))
+    fprintf(fd, "Error: soap struct not initialized\n");
+  else if (soap->error)
+  { const char *c, *v = NULL, *s, **d;
+    d = soap_faultcode(soap);
+    if (!*d)
+      soap_set_fault(soap);
+    c = *d;
+    if (soap->version == 2)
+      v = *soap_faultsubcode(soap);
+    s = *soap_faultstring(soap);
+    d = soap_faultdetail(soap);
+    fprintf(fd, "%s%d fault: %s [%s]\n\"%s\"\nDetail: %s\n", soap->version ? "SOAP 1." : "Error ", soap->version ? (int)soap->version : soap->error, c, v ? v : "no subcode", s ? s : "[no reason]", d && *d ? *d : "[no detail]");
+  }
+}
+#endif
+#endif
+/******************************************************************************/
+#ifndef PALM_1
+#ifndef WITH_NOSTDLIB
+SOAP_FMAC1
+void
+SOAP_FMAC2
+soap_print_fault_location(struct soap *soap, FILE *fd)
+{ 
+#ifndef WITH_LEAN
+  int i, j, c1, c2;
+  if (soap->error && soap->bufidx <= soap->buflen && soap->buflen > 0 && soap->buflen <= SOAP_BUFLEN)
+  { i = (int)soap->bufidx - 1;
+    if (i <= 0)
+      i = 0;
+    c1 = soap->buf[i];
+    soap->buf[i] = '\0';
+    if ((int)soap->buflen >= i + 1024)
+      j = i + 1023;
+    else
+      j = (int)soap->buflen - 1;
+    c2 = soap->buf[j];
+    soap->buf[j] = '\0';
+    fprintf(fd, "%s%c\n<!-- ** HERE ** -->\n", soap->buf, c1);
+    if (soap->bufidx < soap->buflen)
+      fprintf(fd, "%s\n", soap->buf + soap->bufidx);
+    soap->buf[i] = c1;
+    soap->buf[j] = c2;
+  }
+#endif
+}
+#endif
+#endif
+/******************************************************************************/
+#ifndef PALM_1
+SOAP_FMAC1
+int
+SOAP_FMAC2
+soap_register_plugin_arg(struct soap *soap, int (*fcreate)(struct soap*, struct soap_plugin*, void*), void *arg)
+{ register struct soap_plugin *p;
+  register int r;
+  if (!(p = (struct soap_plugin*)SOAP_MALLOC(soap, sizeof(struct soap_plugin))))
+    return soap->error = SOAP_EOM;
+  p->id = NULL;
+  p->data = NULL;
+  p->fcopy = NULL;
+  p->fdelete = NULL;
+  r = fcreate(soap, p, arg);
+  if (!r && p->fdelete)
+  { p->next = soap->plugins;
+    soap->plugins = p;
+    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Registered '%s' plugin\n", p->id));
+    return SOAP_OK;
+  }
+  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not register plugin '%s': plugin returned error %d (or fdelete callback not set)\n", p->id?p->id:"?", r));
+  SOAP_FREE(soap, p);
+  return r;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_1
+static void *
+fplugin(struct soap *soap, const char *id)
+{ register struct soap_plugin *p;
+  for (p = soap->plugins; p; p = p->next)
+    if (p->id == id || !strcmp(p->id, id))
+      return p->data;
+  return NULL;
+}
+#endif
+
+/******************************************************************************/
+#ifndef PALM_2
+SOAP_FMAC1
+void *
+SOAP_FMAC2
+soap_lookup_plugin(struct soap *soap, const char *id)
+{ return soap->fplugin(soap, id);
+}
+#endif
+
+/******************************************************************************/
+#ifdef __cplusplus
+}
+#endif
+
+/******************************************************************************\
+ *
+ *     C++ soap struct methods
+ *
+\******************************************************************************/
+
+#ifdef __cplusplus
+#ifndef WITH_LEAN
+soap::soap()
+{ soap_init(this);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifdef __cplusplus
+#ifndef WITH_LEAN
+soap::soap(soap_mode m)
+{ soap_init1(this, m);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifdef __cplusplus
+#ifndef WITH_LEAN
+soap::soap(soap_mode im, soap_mode om)
+{ soap_init2(this, im, om);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifdef __cplusplus
+#ifndef WITH_LEAN
+soap::soap(struct soap& soap)
+{ soap_copy_context(this, &soap);
+}
+#endif
+#endif
+
+/******************************************************************************/
+#ifdef __cplusplus
+#ifndef WITH_LEAN
+soap::~soap()
+{ soap_destroy(this);
+  soap_end(this);
+  soap_done(this);
+}
+#endif
+#endif
+
+/******************************************************************************/
diff --git a/org.glite.security.gsoap-plugin/src/stdsoap2_2.7.9b.h b/org.glite.security.gsoap-plugin/src/stdsoap2_2.7.9b.h
new file mode 100644 (file)
index 0000000..2a8928b
--- /dev/null
@@ -0,0 +1,2166 @@
+/*
+
+stdsoap2.h 2.7.9b
+
+gSOAP runtime
+
+gSOAP XML Web services tools
+Copyright (C) 2000-2007, Robert van Engelen, Genivia Inc., All Rights Reserved.
+This part of the software is released under one of the following licenses:
+GPL, the gSOAP public license, or Genivia's license for commercial use.
+--------------------------------------------------------------------------------
+Contributors:
+
+Wind River Systems, Inc., for the following additions (marked WR[...]):
+  - vxWorks compatible
+--------------------------------------------------------------------------------
+gSOAP public license.
+
+The contents of this file are subject to the gSOAP Public License Version 1.3
+(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.cs.fsu.edu/~engelen/soaplicense.html
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the License.
+
+The Initial Developer of the Original Code is Robert A. van Engelen.
+Copyright (C) 2000-2007, Robert van Engelen, Genivia Inc., All Rights Reserved.
+--------------------------------------------------------------------------------
+GPL license.
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place, Suite 330, Boston, MA 02111-1307 USA
+
+Author contact information:
+engelen@genivia.com / engelen@acm.org
+--------------------------------------------------------------------------------
+A commercial use license is available from Genivia, Inc., contact@genivia.com
+--------------------------------------------------------------------------------
+*/
+
+#ifdef WITH_SOAPDEFS_H
+# include "soapdefs.h"         /* include user-defined stuff */
+#endif
+
+#ifndef _THREAD_SAFE
+# define _THREAD_SAFE
+#endif
+
+#ifndef OPENSERVER
+# ifndef _REENTRANT
+#  define _REENTRANT
+# endif
+#endif
+
+#ifndef SOAP_FMAC1     /* stdsoap2.h declaration macro */
+# define SOAP_FMAC1
+#endif
+
+#ifndef SOAP_FMAC2     /* stdsoap2.h declaration macro */
+# define SOAP_FMAC2
+#endif
+
+#ifndef SOAP_FMAC3     /* (de)serializer declaration macro */
+# define SOAP_FMAC3
+#endif
+
+#ifndef SOAP_FMAC3S    /* string converter for (de)serializer declaration macro */
+# define SOAP_FMAC3S SOAP_FMAC3
+#endif
+
+#ifndef SOAP_FMAC4     /* (de)serializer declaration macro */
+# define SOAP_FMAC4
+#endif
+
+#ifndef SOAP_FMAC4S    /* string converter for (de)serializer declaration macro */
+# define SOAP_FMAC4S SOAP_FMAC4
+#endif
+
+#ifndef SOAP_FMAC5     /* stub/skeleton declaration macro */
+# define SOAP_FMAC5
+#endif
+
+#ifndef SOAP_FMAC6     /* stub/skeleton declaration macro */
+# define SOAP_FMAC6
+#endif
+
+#ifndef SOAP_CMAC      /* class declaration macro */
+# define SOAP_CMAC
+#endif
+
+#ifndef SOAP_NMAC      /* namespace table declaration macro */
+# define SOAP_NMAC
+#endif
+
+#ifndef SOAP_SOURCE_STAMP
+# define SOAP_SOURCE_STAMP(str)
+#endif
+
+/* gSOAP 2.7.4 and higher: fast look-aside buffering is stable */
+#ifndef WITH_FAST
+# define WITH_FAST
+#endif
+
+#ifdef WITH_LEANER
+# ifndef WITH_LEAN
+#  define WITH_LEAN
+# endif
+#endif
+
+#ifdef WITH_LEAN
+# ifdef WITH_COOKIES
+#  error "Cannot build WITH_LEAN code WITH_COOKIES enabled"
+# endif
+#endif
+
+#ifndef STDSOAP_H
+#define STDSOAP_H
+
+#if defined(__vxworks) || defined(__VXWORKS__)
+# define VXWORKS
+#endif
+
+#ifdef _WIN32
+# ifndef WIN32
+#  define WIN32
+# endif
+#endif
+
+#ifdef _WIN32_WCE
+# ifndef UNDER_CE
+#  define UNDER_CE _WIN32_WCE
+# endif
+#endif
+
+#ifdef UNDER_CE
+# ifndef WIN32
+#  define WIN32
+# endif
+#endif
+
+#ifdef __BORLANDC__
+# ifdef __WIN32__
+#  ifndef WIN32
+#   define WIN32
+#  endif
+# endif
+#endif
+
+#ifdef __CYGWIN__
+# ifndef CYGWIN
+#  define CYGWIN
+# endif
+#endif
+
+#ifdef __SYMBIAN32__ 
+# define SYMBIAN
+# undef WIN32
+#endif
+
+#if defined(__palmos__) || defined(PALM_GCC) || defined(__PALMOS_TRAPS__)
+# ifndef PALM
+#  define PALM
+# endif
+#endif
+
+#if defined(__hpux)
+# ifndef HP_UX
+#  define HP_UX
+# endif
+#endif
+
+#if defined(__alpha) && !defined(__VMS)
+# ifndef TRU64
+#  define TRU64 
+# endif
+#endif
+
+#ifdef __MVS__
+# ifndef OS390
+#  define OS390
+# endif
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+# ifdef WITH_OPENSSL
+#  ifndef HAVE_OPENSSL_SSL_H
+#   undef WITH_OPENSSL
+#  endif
+# endif
+#else
+# if defined(UNDER_CE)
+#  define WITH_LEAN
+#  define HAVE_SSCANF
+# elif defined(WIN32)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+#  define SOAP_LONG_FORMAT "%I64d"
+#  define SOAP_ULONG_FORMAT "%I64u"
+# elif defined(CYGWIN)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(__APPLE__)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_TIMEGM
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(_AIXVERSION_431)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(HP_UX)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(FREEBSD) || defined(__FreeBSD__)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_STRTOLL
+#  define HAVE_STRTOULL
+#  define HAVE_GETTIMEOFDAY
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+#  define SOAP_LONG_FORMAT "%qd"
+#  define SOAP_ULONG_FORMAT "%qu"
+# elif defined(__VMS)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(__GLIBC__) || defined(__GNU__)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_STRTOLL
+#  define HAVE_STRTOULL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_TIMEGM
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+#  define HAVE_ISNAN
+# elif defined(TRU64)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_GETTIMEOFDAY
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define __USE_STD_IOSTREAM
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+#  define SOAP_LONG_FORMAT "%ld"
+#  define SOAP_ULONG_FORMAT "%lu"
+# elif defined(MAC_CARBON)
+#  define WITH_NOIO
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GETHOSTBYNAME_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(PALM)
+#  define WITH_LEAN
+#  define HAVE_STRTOD   /* strtod() is defined in palmFunctions.h */
+#  include <stdlib.h>  /* Needs to be included before unix headers */
+#  include <sys_types.h>
+#  define IGNORE_STDIO_STUBS
+#  include <StdIOPalm.h>
+#  define O_NONBLOCK FNONBIO
+#  include <sys_socket.h>
+#  include "palmFunctions.h"
+# elif defined(SYMBIAN)
+#  define WITH_LEAN
+#  define WITH_NONAMESPACES
+#  define HAVE_STRTOD  /* use STRTOD since sscanf doesn't seem to work */
+#  include <e32def.h>
+#  include <sys/ioctl.h>
+# elif defined(VXWORKS)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_PGMTIME_R
+#  define HAVE_PLOCALTIME_R
+#  define HAVE_MKTIME
+# elif defined(OS390)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(AS400)
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# elif defined(__QNX__) || defined(QNX)
+/* QNX does not have a working version of strtof */
+#  undef HAVE_STRTOF
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GETHOSTBYNAME_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+#  define LONG64 long
+#  define ULONG64 unsigned LONG64
+#  define SOAP_LONG_FORMAT "%ld"
+#  define SOAP_ULONG_FORMAT "%lu"
+# else
+/* Default asumptions on supported functions */
+#  define HAVE_STRRCHR
+#  define HAVE_STRTOD
+#  define HAVE_SSCANF
+#  define HAVE_STRTOL
+#  define HAVE_STRTOUL
+#  define HAVE_SYS_TIMEB_H
+#  define HAVE_FTIME
+#  define HAVE_RAND_R
+#  define HAVE_GETHOSTBYNAME_R
+#  define HAVE_GMTIME_R
+#  define HAVE_LOCALTIME_R
+#  define HAVE_WCTOMB
+#  define HAVE_MBTOWC
+# endif
+#endif
+
+#ifndef SOAP_LONG_FORMAT
+# define SOAP_LONG_FORMAT "%lld"       /* printf format for 64 bit ints */
+#endif
+
+#ifndef SOAP_ULONG_FORMAT
+# define SOAP_ULONG_FORMAT "%llu"      /* printf format for unsigned 64 bit ints */
+#endif
+
+#ifndef WITH_NOSTDLIB
+# include <stdlib.h>
+# ifndef PALM
+#  include <stdio.h>
+#  include <string.h>
+# endif
+# include <ctype.h>
+# include <limits.h>
+#endif
+
+#if defined(__cplusplus) && !defined(WITH_LEAN)
+# include <string>
+# include <iostream>
+#endif
+
+#ifdef WITH_NOHTTP
+# ifndef WITH_NOIO
+#  define WITH_NOIO
+#  undef WITH_COOKIES
+# endif
+#endif
+
+#ifndef UNDER_CE
+# ifndef PALM
+#  ifndef WITH_NOIO
+#   include <errno.h>
+#   include <sys/types.h>
+#  endif
+#  ifndef WITH_LEAN
+#   ifdef HAVE_SYS_TIMEB_H
+#    include <sys/timeb.h>             /* for ftime() */
+#   endif
+#   include <time.h>
+#  endif
+# endif
+#endif
+
+#ifdef OPENSERVER
+# include <sys/socket.h>
+# include <sys/stream.h>
+# include <sys/protosw.h>
+  extern int h_errno;
+#endif
+
+#ifndef WITH_NOIO
+# ifndef WIN32
+#  ifndef PALM
+#   include <sys/socket.h>
+#   ifdef VXWORKS
+#    include <sockLib.h>
+#    include <selectLib.h>
+#   endif
+#   ifndef VXWORKS
+#    ifndef SYMBIAN
+#     include <strings.h>
+#    endif
+#   endif
+#   ifdef SUN_OS
+#    include <sys/stream.h>            /* SUN */
+#    include <sys/socketvar.h>         /* SUN < 2.8 (?) */
+#   endif
+#   ifdef VXWORKS
+#    ifdef _WRS_KERNEL
+#     include <sys/times.h>
+#    endif
+#   else
+#    include <sys/time.h>
+#   endif
+#   include <netinet/in.h>
+#   ifdef OS390
+#    include <netinet/tcp_var.h>
+#   else
+#    include <netinet/tcp.h>          /* TCP_NODELAY */
+#   endif
+#   include <arpa/inet.h>
+#  endif
+# endif
+#endif
+
+#ifdef WITH_FASTCGI
+# include <fcgi_stdio.h>
+#endif
+
+#ifdef WITH_OPENSSL
+# define OPENSSL_NO_KRB5
+# include <openssl/bio.h>
+# include <openssl/err.h>
+# include <openssl/rand.h>
+# include <openssl/ssl.h>
+# include <openssl/x509v3.h>
+# ifndef ALLOW_OLD_VERSIONS
+#  if (OPENSSL_VERSION_NUMBER < 0x00905100L)
+#   error "Must use OpenSSL 0.9.6 or later"
+#  endif
+# endif
+#endif
+
+#ifdef WITH_GZIP
+# ifndef WITH_ZLIB
+#  define WITH_ZLIB
+# endif
+#endif
+
+#ifdef WITH_CASEINSENSITIVETAGS
+# define SOAP_STRCMP soap_tag_cmp      /* case insensitve XML element/attribute names */
+#else
+# define SOAP_STRCMP strcmp            /* case sensitive XML element/attribute names */
+#endif
+
+#ifdef WITH_ZLIB
+# include <zlib.h>
+#endif
+
+#ifndef WITH_NOSTDLIB
+# ifndef PALM
+#  include <math.h>    /* for isnan() */
+# endif
+#endif
+
+/* #define DEBUG */ /* Uncomment to debug sending (in file SENT.log) receiving (in file RECV.log) and messages (in file TEST.log) */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef WIN32
+# ifndef UNDER_CE
+#  include <io.h>
+#  include <fcntl.h>
+# endif
+# include <winsock.h>
+/* # include <winsock2.h> */ /* Alternative: use winsock2 (not available with eVC) */
+# ifdef WITH_IPV6
+#  include <ws2tcpip.h>
+#  include <wspiapi.h>
+# endif
+#else
+# ifdef VXWORKS
+#  include <hostLib.h>
+#  include <ioctl.h>
+#  include <ioLib.h>
+# endif
+# ifndef WITH_NOIO
+#  ifndef PALM
+#   include <netdb.h>
+#   include <netinet/in.h>
+#   include <unistd.h>
+#   include <fcntl.h>
+#  endif
+# endif
+#endif
+
+/* Portability: define SOAP_SOCKLEN_T */
+#if defined(_AIX)
+# define SOAP_SOCKLEN_T socklen_t
+#elif defined(SOCKLEN_T)
+# define SOAP_SOCKLEN_T SOCKLEN_T
+#elif defined(__socklen_t_defined) || defined(_SOCKLEN_T) || defined(CYGWIN) || defined(FREEBSD) || defined(__FreeBSD__) || defined(__QNX__) || defined(QNX)
+# define SOAP_SOCKLEN_T socklen_t
+#elif defined(IRIX) || defined(WIN32) || defined(__APPLE__) || defined(HP_UX) || defined(SUN_OS) || defined(OPENSERVER) || defined(TRU64) || defined(VXWORKS)
+# define SOAP_SOCKLEN_T int
+#else
+# define SOAP_SOCKLEN_T size_t
+#endif
+
+#ifndef SOAP_SOCKET
+# ifdef WIN32
+#  define SOAP_SOCKET SOCKET
+#  define soap_closesocket(n) closesocket(n)
+# else
+#  define SOAP_SOCKET int
+#  define soap_closesocket(n) close(n)
+# endif
+#endif
+
+#define SOAP_INVALID_SOCKET (-1)
+#define soap_valid_socket(n) ((n) != SOAP_INVALID_SOCKET)
+
+#ifndef FD_SETSIZE
+# define FD_SETSIZE (1024)
+#endif
+
+#if defined(SYMBIAN)
+# define LONG64 long
+# define ULONG64 unsigned LONG64
+#elif !defined(WIN32) || defined(CYGWIN) || defined(__GLIBC__) || defined(__GNU__)
+# ifndef LONG64
+#  define LONG64 long long
+#  define ULONG64 unsigned LONG64
+# endif
+#elif defined(UNDER_CE)
+# define LONG64 __int64
+# define ULONG64 unsigned LONG64
+#elif defined(__BORLANDC__)
+# define LONG64 __int64
+# define ULONG64 unsigned LONG64
+#endif
+
+#if defined(WIN32) && !defined(CYGWIN)
+# define soap_int32 __int32
+#elif defined(SYMBIAN)
+# define soap_int32 long
+#elif defined(PALM)
+# define soap_int32 Int32
+#else
+# define soap_int32 int32_t
+#endif
+
+#ifdef WIN32
+# define SOAP_ERANGE ERANGE
+# define SOAP_EINTR WSAEINTR
+# define SOAP_EAGAIN WSAEWOULDBLOCK
+# define SOAP_EWOULDBLOCK WSAEWOULDBLOCK
+# define SOAP_EINPROGRESS WSAEINPROGRESS
+#else
+# define SOAP_ERANGE ERANGE
+# define SOAP_EINTR EINTR
+# define SOAP_EAGAIN EAGAIN
+# ifdef SYMBIAN
+#  define SOAP_EWOULDBLOCK 9898
+#  define SOAP_EINPROGRESS 9899
+# else
+#  define SOAP_EWOULDBLOCK EWOULDBLOCK
+#  define SOAP_EINPROGRESS EINPROGRESS
+# endif
+#endif
+
+#ifdef WIN32
+# ifdef UNDER_CE
+#  define soap_errno GetLastError()
+#  define soap_socket_errno(s) GetLastError()
+#  define soap_reset_errno SetLastError(0)
+# else
+#  define soap_errno GetLastError()
+#  define soap_socket_errno(s) WSAGetLastError()
+#  define soap_reset_errno SetLastError(0)
+# endif
+#else
+# ifndef WITH_NOIO
+#  define soap_errno errno
+#  define soap_socket_errno(s) errno
+#  define soap_reset_errno (errno = 0)
+# else
+#  define soap_errno 0
+#  define soap_socket_errno(s) 0
+#  define soap_reset_errno
+# endif
+#endif
+
+#ifndef SOAP_BUFLEN
+# ifdef WITH_UDP
+#  define SOAP_BUFLEN (65536) /* max UDP packet size */
+# else
+#  ifndef WITH_LEAN
+#   define SOAP_BUFLEN (65536) /* buffer length for socket packets, also used by gethostbyname_r so don't make this too small */
+#  else
+#   define SOAP_BUFLEN  (2048)
+#  endif
+# endif
+#endif
+#ifndef SOAP_LABLEN
+# define SOAP_LABLEN     (256) /* initial look-aside buffer length */
+#endif
+#ifndef SOAP_PTRBLK
+# define SOAP_PTRBLK     (32) /* block allocation for pointer hash table chains */
+#endif
+#ifndef SOAP_PTRHASH
+# ifndef WITH_LEAN
+#  define SOAP_PTRHASH (1024) /* size of pointer analysis hash table (must be power of 2) */
+# else
+#  define SOAP_PTRHASH   (32)
+# endif
+#endif
+#ifndef SOAP_IDHASH
+# ifndef WITH_LEAN
+#  define SOAP_IDHASH  (1999) /* prime size of hash table for parsed id/ref */
+# else
+#  define SOAP_IDHASH    (19) /* 19, 199 */
+# endif
+#endif
+#ifndef SOAP_BLKLEN
+# ifndef WITH_LEAN
+#  define SOAP_BLKLEN   (256) /* size of blocks to collect long strings and XML attributes */
+# else
+#  define SOAP_BLKLEN    (32)
+# endif
+#endif
+#ifndef SOAP_TAGLEN
+# ifndef WITH_LEAN
+#  define SOAP_TAGLEN  (1024) /* maximum length of XML element tag/attribute name or host/path name + 1 */
+# else
+#  define SOAP_TAGLEN    (64)
+# endif
+#endif
+#ifndef SOAP_HDRLEN
+# ifndef WITH_LEAN
+#  define SOAP_HDRLEN  (8192) /* maximum length of HTTP header line (must be >4096 to read cookies) */
+# else
+#  define SOAP_HDRLEN  (1024)
+# endif
+#endif
+#ifndef SOAP_MAXDIMS
+# ifndef WITH_LEAN
+#  define SOAP_MAXDIMS  (16) /* maximum array dimensions (array nestings) must be less than 64 to protect soap->tmpbuf */
+# else
+#  define SOAP_MAXDIMS   (4)
+# endif
+#endif
+
+#ifndef SOAP_MAXLOGS
+# define SOAP_MAXLOGS    (3) /* max number of debug logs per struct soap environment */
+# define SOAP_INDEX_RECV  (0)
+# define SOAP_INDEX_SENT  (1)
+# define SOAP_INDEX_TEST  (2)
+#endif
+
+#ifndef SOAP_MAXKEEPALIVE
+# define SOAP_MAXKEEPALIVE (100) /* max iterations to keep server connection alive */
+#endif
+
+#ifndef SOAP_MAXARRAYSIZE
+# define SOAP_MAXARRAYSIZE (100000) /* "trusted" max size of inbound SOAP array for compound array allocation */
+#endif
+
+#ifdef VXWORKS
+# ifdef __INCmathh 
+#  include <private/mathP.h>
+#  ifndef HAVE_ISNAN
+#   define HAVE_ISNAN
+#  endif
+#  define soap_isnan(num) isNan(num)
+# endif
+#endif
+
+#ifdef WIN32 
+# include <float.h>
+# ifndef HAVE_ISNAN
+#  define HAVE_ISNAN
+# endif
+# define soap_isnan(num) _isnan(num)
+#endif
+
+#ifdef SUN_OS
+# define HAVE_ISNAN
+#endif
+
+#ifdef __APPLE__
+# ifdef __cplusplus
+#  ifndef isnan
+extern "C" int isnan(double);
+#  endif
+# endif
+# define HAVE_ISNAN
+#endif
+
+#if !defined(HAVE_ISNAN) && (defined(_MATH_H) || defined(_MATH_INCLUDED))
+# define HAVE_ISNAN
+#endif
+
+extern const struct soap_double_nan { unsigned int n1, n2; } soap_double_nan;
+
+#ifdef VXWORKS
+# ifndef FLT_MAX
+#  define FLT_MAX _ARCH_FLT_MAX
+# endif
+# ifndef DBL_MAX
+#  define DBL_MAX _ARCH_DBL_MAX
+# endif
+#endif
+
+#ifndef FLT_NAN
+#  define FLT_NAN (*(float*)(void*)&soap_double_nan)
+#endif
+
+#ifndef FLT_PINFTY
+# if defined(FLT_MAX)
+#  define FLT_PINFTY FLT_MAX
+# elif defined(HUGE_VALF)
+#  define FLT_PINFTY (float)HUGE_VALF
+# elif defined(HUGE_VAL)
+#  define FLT_PINFTY (float)HUGE_VAL
+# elif defined(FLOAT_MAX)
+#  define FLT_PINFTY FLOAT_MAX
+# else
+#  define FLT_PINFTY (3.40282347e+38F)
+# endif
+#endif
+
+#ifndef FLT_NINFTY
+# define FLT_NINFTY (-FLT_PINFTY)
+#endif
+
+#ifndef DBL_NAN
+#  define DBL_NAN (*(double*)(void*)&soap_double_nan)
+#endif
+
+#ifndef DBL_PINFTY
+# if defined(DBL_MAX)
+#  define DBL_PINFTY DBL_MAX
+# elif defined(HUGE_VALF)
+#  define DBL_PINFTY (double)HUGE_VALF
+# elif defined(HUGE_VAL)
+#  define DBL_PINFTY (double)HUGE_VAL
+# elif defined(DOUBLE_MAX)
+#  define DBL_PINFTY DOUBLE_MAX
+# else
+#  define DBL_PINFTY (1.7976931348623157e+308)
+# endif
+#endif
+
+#ifndef DBL_NINFTY
+# define DBL_NINFTY (-DBL_PINFTY)
+#endif
+
+#ifndef soap_isnan
+# ifdef HAVE_ISNAN
+#  define soap_isnan(n) isnan(n)
+# else
+#  define soap_isnan(n) (0)
+# endif
+#endif
+
+#define soap_ispinfd(n) ((n) >= DBL_PINFTY)
+#define soap_ispinff(n) ((n) >= FLT_PINFTY)
+#define soap_isninfd(n) ((n) <= DBL_NINFTY)
+#define soap_isninff(n) ((n) <= FLT_NINFTY)
+
+/* gSOAP error codes */
+
+#define SOAP_EOF                       EOF
+#define SOAP_ERR                       EOF
+#define SOAP_OK                                0
+#define SOAP_CLI_FAULT                 1
+#define SOAP_SVR_FAULT                 2
+#define SOAP_TAG_MISMATCH              3
+#define SOAP_TYPE                      4
+#define SOAP_SYNTAX_ERROR              5
+#define SOAP_NO_TAG                    6
+#define SOAP_IOB                       7
+#define SOAP_MUSTUNDERSTAND            8
+#define SOAP_NAMESPACE                 9
+#define SOAP_USER_ERROR                        10
+#define SOAP_FATAL_ERROR               11
+#define SOAP_FAULT                     12
+#define SOAP_NO_METHOD                 13
+#define SOAP_NO_DATA                   14
+#define SOAP_GET_METHOD                        15
+#define SOAP_EOM                       16
+#define SOAP_MOE                       17
+#define SOAP_NULL                      18
+#define SOAP_DUPLICATE_ID              19
+#define SOAP_MISSING_ID                        20
+#define SOAP_HREF                      21
+#define SOAP_UDP_ERROR                 22
+#define SOAP_TCP_ERROR                 23
+#define SOAP_HTTP_ERROR                        24
+#define SOAP_SSL_ERROR                 25
+#define SOAP_ZLIB_ERROR                        26
+#define SOAP_DIME_ERROR                        27
+#define SOAP_DIME_HREF                 28
+#define SOAP_DIME_MISMATCH             29
+#define SOAP_DIME_END                  30
+#define SOAP_MIME_ERROR                        31
+#define SOAP_MIME_HREF                 32
+#define SOAP_MIME_END                  33
+#define SOAP_VERSIONMISMATCH           34
+#define SOAP_PLUGIN_ERROR              35
+#define SOAP_DATAENCODINGUNKNOWN       36
+#define SOAP_REQUIRED                  37
+#define SOAP_PROHIBITED                        38
+#define SOAP_OCCURS                    39
+#define SOAP_LENGTH                    40
+#define SOAP_FD_EXCEEDED               41
+
+#define soap_xml_error_check(e) ((e) == SOAP_TAG_MISMATCH || (e) == SOAP_TAG_END || (e) == SOAP_SYNTAX_ERROR || (e) == SOAP_NAMESPACE || (e) == SOAP_DUPLICATE_ID || (e) == SOAP_MISSING_ID || (e) == SOAP_REQUIRED || (e) == SOAP_PROHIBITED || (e) == SOAP_OCCURS || (e) == SOAP_LENGTH || (e) == SOAP_NULL || (e) == SOAP_HREF)
+#define soap_soap_error_check(e) ((e) == SOAP_CLI_FAULT || (e) == SOAP_SVR_FAULT || (e) == SOAP_VERSIONMISMATCH || (e) == SOAP_MUSTUNDERSTAND || (e) == SOAP_FAULT || (e) == SOAP_NO_METHOD)
+#define soap_tcp_error_check(e) ((e) == SOAP_EOF || (e) == SOAP_TCP_ERROR)
+#define soap_ssl_error_check(e) ((e) == SOAP_SSL_ERROR)
+#define soap_zlib_error_check(e) ((e) == SOAP_ZLIB_ERROR)
+#define soap_http_error_check(e) ((e) == SOAP_HTTP_ERROR || (e) == SOAP_GET_METHOD || (e) == SOAP_NO_DATA || ((e) >= 100 && (e) < 600))
+
+/* gSOAP HTTP response status codes 100 to 599 are reserved */
+
+/* Codes 600 to 999 are user definable */
+
+/* Exceptional gSOAP HTTP response status codes >= 1000 */
+
+#define SOAP_STOP              1000    /* No HTTP response */
+#define SOAP_FORM              1001    /* Form request/response */
+#define SOAP_HTML              1002    /* Custom HTML response */
+#define SOAP_FILE              1003    /* Custom file-based response */
+
+/* gSOAP HTTP method codes */
+
+#define SOAP_POST              2000
+#define SOAP_GET               2001
+
+/* gSOAP DIME */
+
+#define SOAP_DIME_CF           0x01
+#define SOAP_DIME_ME           0x02
+#define SOAP_DIME_MB           0x04
+#define SOAP_DIME_VERSION      0x08 /* DIME version 1 */
+#define SOAP_DIME_MEDIA                0x10
+#define SOAP_DIME_ABSURI       0x20
+
+/* gSOAP ZLIB */
+
+#define SOAP_ZLIB_NONE         0x00
+#define SOAP_ZLIB_DEFLATE      0x01
+#define SOAP_ZLIB_INFLATE      0x02
+#define SOAP_ZLIB_GZIP         0x02
+
+/* gSOAP transport, connection, and content encoding modes */
+
+typedef soap_int32 soap_mode;
+
+#define SOAP_IO                        0x00000003      /* IO mask */
+#define SOAP_IO_FLUSH          0x00000000      /* flush output immediately, no buffering */
+#define SOAP_IO_BUFFER         0x00000001      /* buffer output in packets of size SOAP_BUFLEN */
+#define SOAP_IO_STORE          0x00000002      /* store entire output to determine length for transport */
+#define SOAP_IO_CHUNK          0x00000003      /* use HTTP chunked transfer AND buffer packets */
+
+#define SOAP_IO_UDP            0x00000004      /* TCP or UDP */
+
+#define SOAP_IO_LENGTH         0x00000008      /* calc message length (internal) */
+#define SOAP_IO_KEEPALIVE      0x00000010      /* keep connection alive */
+
+#define SOAP_ENC_LATIN         0x00000020      /* accept iso-8859-1 encoding */
+#define SOAP_ENC_XML           0x00000040      /* plain XML encoding, no HTTP header */
+#define SOAP_ENC_DIME          0x00000080
+#define SOAP_ENC_MIME          0x00000100
+#define SOAP_ENC_MTOM          0x00000200
+#define SOAP_ENC_ZLIB          0x00000400
+#define SOAP_ENC_SSL           0x00000800
+
+#define SOAP_ENC               0x00000FFF      /* IO and ENC mask */
+
+#define SOAP_XML_STRICT                0x00001000      /* apply strict validation */
+#define SOAP_XML_INDENT                0x00002000      /* emit indented XML */
+#define SOAP_XML_CANONICAL     0x00004000      /* EXC C14N canonical XML */
+#define SOAP_XML_TREE          0x00008000      /* emit XML tree (no id/ref) */
+#define SOAP_XML_GRAPH         0x00010000
+#define SOAP_XML_NIL           0x00020000
+#define SOAP_XML_DOM           0x00040000
+#define SOAP_XML_SEC           0x00080000      /* reserved for WS security */
+
+#define SOAP_C_NOIOB           0x00100000      /* don't fault on array index out of bounds (just ignore) */
+#define SOAP_C_UTFSTRING       0x00200000      /* (de)serialize strings with UTF8 content */
+#define SOAP_C_MBSTRING                0x00400000      /* (de)serialize strings with multi-byte content */
+#define SOAP_C_NILSTRING       0x00800000      /* serialize empty strings as nil (omitted) */
+
+#define SOAP_DOM_TREE          0x01000000
+#define SOAP_DOM_NODE          0x02000000
+#define SOAP_DOM_ASIS          0x04000000
+
+#define SOAP_MIME_POSTCHECK    0x10000000      /* MIME flag (internal) */
+
+#define SOAP_IO_DEFAULT                SOAP_IO_FLUSH
+
+/* SSL client/server authentication settings */
+
+#define SOAP_SSL_NO_AUTHENTICATION             0x00    /* for testing purposes */
+#define SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION 0x01    /* client requires server to authenticate */
+#define SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION 0x02    /* server requires client to authenticate */
+#define SOAP_SSL_SKIP_HOST_CHECK               0x04    /* client does not check the common name of the host in certificate */
+#define SOAP_SSL_RSA                           0x06    /* use RSA */
+#define SOAP_SSLv3_TLSv1                       0x00    /* SSL v3 and TLS v1 support by default */
+#define SOAP_SSLv3                             0x10    /* SSL v3 only */
+#define SOAP_TLSv1                             0x20    /* TLS v1 only */
+
+#define SOAP_SSL_DEFAULT                       (SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION | SOAP_SSLv3_TLSv1)
+
+/* state */
+
+#define SOAP_INIT      1
+#define SOAP_COPY      2
+
+#define soap_check_state(soap) (!(soap) || ((soap)->state != SOAP_INIT && (soap)->state != SOAP_COPY))
+
+/* part */
+
+#define SOAP_BEGIN             0
+#define SOAP_IN_ENVELOPE       2
+#define SOAP_IN_HEADER         3
+#define SOAP_END_HEADER                4
+#define SOAP_NO_BODY           5
+#define SOAP_IN_BODY           6
+#define SOAP_END_BODY          7
+#define SOAP_END_ENVELOPE      8
+#define SOAP_END               9
+#define SOAP_BEGIN_SECURITY    10
+#define SOAP_IN_SECURITY       11
+#define SOAP_END_SECURITY      12
+
+/* DEBUG macros */
+
+#ifndef WITH_LEAN
+# ifdef DEBUG
+#  ifndef SOAP_DEBUG
+#   define SOAP_DEBUG
+#  endif
+#  ifndef SOAP_MEM_DEBUG
+#   define SOAP_MEM_DEBUG
+#  endif
+# endif
+#endif
+
+#ifdef SOAP_MEM_DEBUG
+# ifndef SOAP_MALLOC
+#  define SOAP_MALLOC(soap, size) soap_track_malloc(soap, __FILE__, __LINE__, size)
+# endif
+# ifndef SOAP_FREE
+#  define SOAP_FREE(soap, ptr) soap_track_free(soap, __FILE__, __LINE__, ptr)
+# endif
+#endif
+
+#ifndef SOAP_MALLOC                    /* use libc malloc */
+# define SOAP_MALLOC(soap, size) malloc(size)
+#endif
+
+#ifndef SOAP_FREE                      /* use libc free */
+# define SOAP_FREE(soap, ptr) free(ptr)
+#endif
+
+#ifdef SOAP_DEBUG
+# ifndef SOAP_MESSAGE
+#  define SOAP_MESSAGE fprintf
+# endif
+# ifndef DBGLOG
+#  define DBGLOG(DBGFILE, CMD) \
+{ if (soap)\
+  { if (!soap->fdebug[SOAP_INDEX_##DBGFILE])\
+      soap_open_logfile((struct soap*)soap, SOAP_INDEX_##DBGFILE);\
+    if (soap->fdebug[SOAP_INDEX_##DBGFILE])\
+    { FILE *fdebug = soap->fdebug[SOAP_INDEX_##DBGFILE];\
+      CMD;\
+      fflush(fdebug);\
+    }\
+  }\
+}
+# endif
+# ifndef DBGMSG
+#  define DBGMSG(DBGFILE, MSG, LEN) \
+{ if (soap)\
+  { if (!soap->fdebug[SOAP_INDEX_##DBGFILE])\
+      soap_open_logfile((struct soap*)soap, SOAP_INDEX_##DBGFILE);\
+    if (soap->fdebug[SOAP_INDEX_##DBGFILE])\
+    { fwrite((MSG), 1, (LEN), soap->fdebug[SOAP_INDEX_##DBGFILE]);\
+      fflush(soap->fdebug[SOAP_INDEX_##DBGFILE]);\
+    }\
+  }\
+}
+# endif
+# ifndef DGBFUN
+#  define DBGFUN(FNAME) DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): %s()\n", __FILE__, __LINE__, FNAME))
+#  define DBGFUN1(FNAME, FMT, ARG) DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): %s("FMT")\n", __FILE__, __LINE__, FNAME, (ARG)))
+#  define DBGFUN2(FNAME, FMT1, ARG1, FMT2, ARG2) DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): %s("FMT1", "FMT2")\n", __FILE__, __LINE__, FNAME, (ARG1), (ARG2)))
+#  define DBGFUN3(FNAME, FMT1, ARG1, FMT2, ARG2, FMT3, ARG3) DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): %s("FMT1", "FMT2", "FMT3")\n", __FILE__, __LINE__, FNAME, (ARG1), (ARG2), (ARG3)))
+# endif
+# ifndef DBGHEX
+#  define DBGHEX(DBGFILE, MSG, LEN) \
+{ if (soap)\
+  { if (!soap->fdebug[SOAP_INDEX_##DBGFILE])\
+      soap_open_logfile(soap, SOAP_INDEX_##DBGFILE);\
+    if (soap->fdebug[SOAP_INDEX_##DBGFILE])\
+    { int i; char *s;\
+      for (s = (char*)(MSG), i = (LEN); i; i--)\
+        fprintf(soap->fdebug[SOAP_INDEX_##DBGFILE], "%2.2X  ", (int)*s++&0xFF);\
+      fflush(soap->fdebug[SOAP_INDEX_##DBGFILE]);\
+    }\
+  }\
+}
+# endif
+#else
+# define DBGLOG(DBGFILE, CMD)
+# define DBGMSG(DBGFILE, MSG, LEN)
+# define DBGFUN(FNAME)
+# define DBGFUN1(FNAME, FMT, ARG)
+# define DBGFUN2(FNAME, FMT1, ARG1, FMT2, ARG2)
+# define DBGFUN3(FNAME, FMT1, ARG1, FMT2, ARG2, FMT3, ARG3)
+# define DBGHEX(DBGFILE, MSG, LEN)
+#endif
+
+/* UCS-4 requires 32 bits (0-7FFFFFFF, the sign bit is used by gSOAP to distinguish XML entities) */
+typedef soap_int32 soap_wchar;
+
+/* namespace table row */
+struct Namespace
+{ const char *id;
+  const char *ns;
+  const char *in;
+  char *out;
+};
+
+/* namespace stack */
+struct soap_nlist
+{ struct soap_nlist *next;
+  unsigned int level; /* nesting depth level */
+  short index; /* corresponding entry in ns mapping table */
+  char *ns; /* only set when parsed ns URI is not in the ns mapping table */
+  char id[1]; /* the actual string value flows into the allocated region below this struct */
+};
+
+/* block stack for nested block allocations */
+struct soap_blist
+{ struct soap_blist *next;
+  char *ptr;
+  size_t size;
+};
+
+/* array layout */
+struct soap_array
+{ void *__ptr;
+  int __size;
+};
+
+/* pointer serialization management */
+struct soap_plist
+{ struct soap_plist *next;
+  const void *ptr;
+  const struct soap_array *array;
+  int type;
+  int id;
+  char mark1;
+  char mark2;
+};
+
+/* block allocation for pointer serialization management */
+struct soap_pblk
+{ struct soap_pblk *next;
+  struct soap_plist plist[SOAP_PTRBLK];
+};
+
+#ifdef SOAP_MEM_DEBUG
+/* malloc/free tracking for debugging */
+struct soap_mlist
+{ struct soap_mlist *next;
+  const void *ptr;
+  const char *file;
+  int line;
+  short live;
+};
+#endif
+
+/* class allocation list */
+struct soap_clist
+{ struct soap_clist *next;
+  void *ptr;
+  int type;
+  int size;
+  void (*fdelete)(struct soap_clist*);
+};
+
+/* attributes */
+struct soap_attribute
+{ struct soap_attribute *next;
+  char *value;
+  size_t size;
+  char *ns;
+  short visible;
+  char name[1]; /* the actual name string flows into the allocated region below this struct */
+};
+
+#ifndef WITH_LEAN
+struct soap_cookie
+{ struct soap_cookie *next;
+  char *name;
+  char *value;
+  char *domain;
+  char *path;
+  time_t expire;       /* client-side: local time to expire */
+  long maxage;         /* server-side: seconds to expire */
+  unsigned int version;
+  short secure;
+  short session;       /* server-side */
+  short env;           /* server-side: got cookie from client and should not be (re)send */
+  short modified;      /* server-side: client cookie was modified and should be send */
+};
+#endif
+
+#ifdef __cplusplus
+SOAP_FMAC1 struct soap_multipart* SOAP_FMAC2 soap_next_multipart(struct soap_multipart*);
+
+class soap_multipart_iterator
+{ public:
+  struct soap_multipart *content;
+  bool operator==(const soap_multipart_iterator& iter) const
+    { return content == iter.content; }
+  bool operator!=(const soap_multipart_iterator& iter) const
+    { return content != iter.content; }
+  struct soap_multipart &operator*() const
+    { return *content; }
+  soap_multipart_iterator &operator++()
+    { content = soap_next_multipart(content); return *this; }
+  soap_multipart_iterator() : content(NULL)
+    { }
+  soap_multipart_iterator(struct soap_multipart *p) : content(p)
+    { }
+};
+#endif
+
+#ifndef WITH_LEANER
+struct soap_dime
+{ size_t count;
+  size_t size;
+  size_t chunksize;
+  size_t buflen;
+  char flags;
+  char *ptr;
+  const char *id;
+  const char *type;
+  const char *options;
+  struct soap_multipart *list;         /* list of DIME attachments received */
+  struct soap_multipart *first, *last; /* temporary in/out queue */
+#ifdef __cplusplus
+  soap_multipart_iterator begin()
+    { soap_multipart_iterator iter(list); return iter; };
+  soap_multipart_iterator end()
+    { soap_multipart_iterator iter(NULL); return iter; };
+#endif
+};
+#endif
+
+#ifndef WITH_LEANER
+struct soap_mime
+{ char *boundary;                      /* MIME boundary */
+  const char *start;                   /* MIME start ID */
+  struct soap_multipart *list;         /* list of MIME attachments received */
+  struct soap_multipart *first, *last; /* temporary in/out queue */
+#ifdef __cplusplus
+  soap_multipart_iterator begin()
+    { soap_multipart_iterator iter(list); return iter; };
+  soap_multipart_iterator end()
+    { soap_multipart_iterator iter(NULL); return iter; };
+#endif
+};
+#endif
+
+#ifndef WITH_LEANER
+/* RFC2045 MIME content transfer encodings */
+enum soap_mime_encoding
+{ SOAP_MIME_NONE,
+  SOAP_MIME_7BIT,
+  SOAP_MIME_8BIT,
+  SOAP_MIME_BINARY,
+  SOAP_MIME_QUOTED_PRINTABLE,
+  SOAP_MIME_BASE64,
+  SOAP_MIME_IETF_TOKEN,
+  SOAP_MIME_X_TOKEN
+};
+#endif
+
+#ifndef WITH_LEANER
+/* DIME/MIME multipart list */
+struct soap_multipart
+{ struct soap_multipart *next;
+  char *ptr;                           /* points to raw data content */
+  size_t size;                         /* size of data content */
+  const char *id;                      /* DIME/MIME content ID or form data name */
+  const char *type;                    /* DIME/MIME type (MIME type format) */
+  const char *options;                 /* DIME options */
+  enum soap_mime_encoding encoding;    /* MIME Content-Transfer-Encoding */
+  const char *location;                        /* MIME Content-Location (optional) */
+  const char *description;             /* MIME Content-Description (optional) */
+#ifdef __cplusplus
+  typedef soap_multipart_iterator iterator;
+#endif
+};
+#endif
+
+#ifndef WITH_LEANER
+/* attachment DIME and MTOM XOP forwarding */
+struct soap_xlist
+{ struct soap_xlist *next;
+  unsigned char **ptr;
+  int *size;
+  char *id;
+  char **type;
+  char **options;
+};
+#endif
+
+/******************************************************************************/
+
+#ifndef WITH_LEANER
+#ifdef __cplusplus
+class soap_dom_attribute_iterator
+{ public:
+  struct soap_dom_attribute *att;
+  const char *nstr;
+  const char *name;
+  bool operator==(const soap_dom_attribute_iterator&) const;
+  bool operator!=(const soap_dom_attribute_iterator&) const;
+  struct soap_dom_attribute &operator*() const;
+  soap_dom_attribute_iterator &operator++();
+  soap_dom_attribute_iterator();
+  soap_dom_attribute_iterator(struct soap_dom_attribute*);
+  ~soap_dom_attribute_iterator();
+};
+#endif
+#endif
+
+#ifndef WITH_LEANER
+struct soap_dom_attribute
+{ struct soap_dom_attribute *next;
+  const char *nstr;
+  char *name;
+  char *data;
+  wchar_t *wide;
+  struct soap *soap;
+#ifdef __cplusplus
+  typedef soap_dom_attribute_iterator iterator;
+  struct soap_dom_attribute &set(const char *nstr, const char *name);  /* set namespace and name */
+  struct soap_dom_attribute &set(const char *data);            /* set data */
+  soap_dom_attribute_iterator begin();
+  soap_dom_attribute_iterator end();
+  soap_dom_attribute_iterator find(const char *nstr, const char *name);
+  void unlink();
+  soap_dom_attribute();
+  soap_dom_attribute(struct soap *soap);
+  soap_dom_attribute(struct soap *soap, const char *nstr, const char *name, const char *data);
+  ~soap_dom_attribute();
+#endif
+};
+#endif
+
+#ifndef WITH_LEANER
+#ifdef __cplusplus
+class soap_dom_element_iterator
+{ public:
+  struct soap_dom_element *elt;
+  const char *nstr;
+  const char *name;
+  int type;
+  bool operator==(const soap_dom_element_iterator&) const;
+  bool operator!=(const soap_dom_element_iterator&) const;
+  struct soap_dom_element &operator*() const;
+  soap_dom_element_iterator &operator++();
+  soap_dom_element_iterator();
+  soap_dom_element_iterator(struct soap_dom_element*);
+  ~soap_dom_element_iterator();
+};
+#endif
+#endif
+
+#ifndef WITH_LEANER
+struct soap_dom_element
+{ struct soap_dom_element *next;       /* next sibling */
+  struct soap_dom_element *prnt;       /* parent */
+  struct soap_dom_element *elts;       /* list of child elements */
+  struct soap_dom_attribute *atts;     /* list of attributes */
+  const char *nstr;                    /* namespace string */
+  char *name;                          /* element tag name */
+  char *data;                          /* element content data (with SOAP_C_UTFSTRING flag set) */
+  wchar_t *wide;                       /* element content data */
+  int type;                            /* optional: serialized C/C++ data type */
+  void *node;                          /* optional: pointer to serialized C/C++ data */
+  char *head;                          /* leading whitespace to start tag */
+  char *tail;                          /* leading whitespace to end tag */
+  struct soap *soap;                   /* soap context that manages this node */
+#ifdef __cplusplus
+  typedef soap_dom_element_iterator iterator;
+  struct soap_dom_element &set(const char *nstr, const char *name);
+  struct soap_dom_element &set(const char *data);
+  struct soap_dom_element &set(void *node, int type);
+  struct soap_dom_element &add(struct soap_dom_element*);
+  struct soap_dom_element &add(struct soap_dom_element&);
+  struct soap_dom_element &add(struct soap_dom_attribute*);
+  struct soap_dom_element &add(struct soap_dom_attribute&);
+  soap_dom_element_iterator begin();
+  soap_dom_element_iterator end();
+  soap_dom_element_iterator find(const char *nstr, const char *name);
+  soap_dom_element_iterator find(int type);
+  void unlink();
+  soap_dom_element();
+  soap_dom_element(struct soap *soap);
+  soap_dom_element(struct soap *soap, const char *nstr, const char *name);
+  soap_dom_element(struct soap *soap, const char *nstr, const char *name, const char *data);
+  soap_dom_element(struct soap *soap, const char *nstr, const char *name, void *node, int type);
+  ~soap_dom_element();
+#endif
+};
+SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_dom_next_element(struct soap_dom_element *elt);
+SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_dom_next_attribute(struct soap_dom_attribute *att);
+#endif
+
+#if defined(__cplusplus) && !defined(WITH_LEAN)
+}
+extern std::ostream &operator<<(std::ostream&, const struct soap_dom_element&);
+extern std::istream &operator>>(std::istream&, struct soap_dom_element&);
+extern "C" {
+#endif
+
+/******************************************************************************/
+
+#ifdef WIN32
+# ifdef SOAP_STD_EXPORTS
+#  define SOAP_STD_API __declspec(dllexport)
+# else
+#  define SOAP_STD_API
+# endif
+#else
+# define SOAP_STD_API
+#endif
+
+struct SOAP_STD_API soap
+{ short state;                 /* 0 = uninitialized, 1 = initialized, 2 = copy of another soap struct */
+  short version;               /* 1 = SOAP1.1 and 2 = SOAP1.2 (set automatically from namespace URI in nsmap table) */
+  soap_mode mode;
+  soap_mode imode;
+  soap_mode omode;
+  const char *float_format;    /* user-definable format string for floats (<1024 chars) */
+  const char *double_format;   /* user-definable format string for doubles (<1024 chars) */
+  const char *dime_id_format;  /* user-definable format string for integer DIME id (<SOAP_TAGLEN chars) */
+  const char *http_version;    /* HTTP version used "1.0" or "1.1" */
+  const char *http_content;    /* optional custom response content type (with SOAP_FILE) */
+  const char *encodingStyle;   /* default = NULL which means that SOAP encoding is used */
+  const char *actor;           /* SOAP-ENV:actor or role attribute value */
+  int recv_timeout;            /* when > 0, gives socket recv timeout in seconds, < 0 in usec */
+  int send_timeout;            /* when > 0, gives socket send timeout in seconds, < 0 in usec */
+  int connect_timeout;         /* when > 0, gives socket connect() timeout in seconds, < 0 in usec */
+  int accept_timeout;          /* when > 0, gives socket accept() timeout in seconds, < 0 in usec */
+  int socket_flags;            /* socket recv() and send() flags, e.g. set to MSG_NOSIGNAL to disable sigpipe */
+  int connect_flags;           /* connect() SOL_SOCKET sockopt flags, e.g. set to SO_DEBUG to debug socket */
+  int bind_flags;              /* bind() SOL_SOCKET sockopt flags, e.g. set to SO_REUSEADDR to enable reuse */
+  int accept_flags;            /* accept() SOL_SOCKET sockopt flags */
+  const struct Namespace *namespaces;  /* Pointer to global namespace mapping table */
+  struct Namespace *local_namespaces;  /* Local namespace mapping table */
+  struct soap_nlist *nlist;    /* namespace stack */
+  struct soap_blist *blist;    /* block allocation stack */
+  struct soap_clist *clist;    /* class instance allocation list */
+  void *alist;                 /* memory allocation (malloc) list */
+  struct soap_ilist *iht[SOAP_IDHASH];
+  struct soap_plist *pht[SOAP_PTRHASH];
+  struct soap_pblk *pblk;      /* plist block allocation */
+  short pidx;                  /* plist block allocation */
+  struct SOAP_ENV__Header *header;
+  struct SOAP_ENV__Fault *fault;
+  int idnum;
+  void *user;                  /* to pass user-defined data */
+  struct soap_plugin *plugins; /* linked list of plug-in data */
+  char *userid;                        /* HTTP Basic authorization userid */
+  char *passwd;                        /* HTTP Basic authorization passwd */
+  int (*fpost)(struct soap*, const char*, const char*, int, const char*, const char*, size_t);
+  int (*fget)(struct soap*);
+  int (*fform)(struct soap*);
+  int (*fposthdr)(struct soap*, const char*, const char*);
+  int (*fresponse)(struct soap*, int, size_t);
+  int (*fparse)(struct soap*);
+  int (*fparsehdr)(struct soap*, const char*, const char*);
+  int (*fheader)(struct soap*);
+  int (*fresolve)(struct soap*, const char*, struct in_addr* inaddr);
+  int (*fconnect)(struct soap*, const char*, const char*, int);
+  int (*fdisconnect)(struct soap*);
+  int (*fclosesocket)(struct soap*, SOAP_SOCKET);
+  int (*fshutdownsocket)(struct soap*, SOAP_SOCKET, int);
+  int (*fopen)(struct soap*, const char*, const char*, int);
+  int (*faccept)(struct soap*, int, struct sockaddr*, int *n);
+  int (*fclose)(struct soap*);
+  int (*fsend)(struct soap*, const char*, size_t);
+  size_t (*frecv)(struct soap*, char*, size_t);
+  int (*fpoll)(struct soap*);
+  void (*fseterror)(struct soap*, const char **c, const char **s);
+  int (*fignore)(struct soap*, const char*);
+  int (*fserveloop)(struct soap*);
+  void *(*fplugin)(struct soap*, const char*);
+  void *(*fmalloc)(struct soap*, size_t);
+#ifndef WITH_LEANER
+  int (*fprepareinit)(struct soap*);
+  int (*fpreparesend)(struct soap*, const char*, size_t);
+  int (*fpreparerecv)(struct soap*, const char*, size_t);
+  int (*fpreparefinal)(struct soap*);
+  void *(*fdimereadopen)(struct soap*, void*, const char*, const char*, const char*);
+  void *(*fdimewriteopen)(struct soap*, const char*, const char*, const char*);
+  void (*fdimereadclose)(struct soap*, void*);
+  void (*fdimewriteclose)(struct soap*, void*);
+  size_t (*fdimeread)(struct soap*, void*, char*, size_t);
+  int (*fdimewrite)(struct soap*, void*, const char*, size_t);
+  void *(*fmimereadopen)(struct soap*, void*, const char*, const char*, const char*);
+  void *(*fmimewriteopen)(struct soap*, void*, const char*, const char*, const char*, enum soap_mime_encoding);
+  void (*fmimereadclose)(struct soap*, void*);
+  void (*fmimewriteclose)(struct soap*, void*);
+  size_t (*fmimeread)(struct soap*, void*, char*, size_t);
+  int (*fmimewrite)(struct soap*, void*, const char*, size_t);
+#endif
+  int master;
+  int socket;
+#if defined(__cplusplus) && !defined(WITH_LEAN)
+  std::ostream *os;
+  std::istream *is;
+#else
+  void *os;    /* preserve alignment */
+  void *is;    /* preserve alignment */
+#endif
+#ifndef UNDER_CE
+  int sendfd;
+  int recvfd;
+#else
+  FILE *sendfd;
+  FILE *recvfd;
+#endif
+  size_t bufidx;       /* index in soap.buf[] */
+  size_t buflen;       /* length of soap.buf[] content */
+  soap_wchar ahead;    /* parser lookahead */
+  short cdata;         /* CDATA parser state */
+  short body;          /* parsed XML element has a body or not */
+  unsigned int level;  /* XML nesting level */
+  size_t count;                /* message length counter */
+  size_t length;       /* message length as set by HTTP header */
+  char *labbuf;                /* look-aside buffer */
+  size_t lablen;       /* look-aside buffer allocated length */
+  size_t labidx;       /* look-aside buffer index to available part */
+  char buf[SOAP_BUFLEN];/* send and receive buffer */
+  char tmpbuf[1024];   /* in/output buffer for HTTP/MIME headers, simpleType values, attribute names, and DIME must be >=1024 bytes */
+  char msgbuf[1024];   /* in/output buffer for messages >=1024 bytes */
+  char tag[SOAP_TAGLEN];
+  char id[SOAP_TAGLEN];
+  char href[SOAP_TAGLEN];
+  char type[SOAP_TAGLEN];
+  char arrayType[SOAP_TAGLEN];
+  char arraySize[SOAP_TAGLEN];
+  char arrayOffset[SOAP_TAGLEN];
+  short other;
+  short position;
+  int positions[SOAP_MAXDIMS];
+  short root;
+  struct soap_attribute *attributes;   /* attribute list */
+  short encoding;      /* when set, output encodingStyle */
+  short mustUnderstand;        /* a mustUnderstand element was parsed or is output */
+  short keep_alive;    /* connection should be kept open */
+  short null;          /* parsed XML is xsi:nil */
+  short ns;            /* when not set, output full xmlns bindings */
+  short part;          /* parsing state */
+  short alloced;
+  short peeked;
+  size_t chunksize;
+  size_t chunkbuflen;
+  char endpoint[SOAP_TAGLEN];
+  char path[SOAP_TAGLEN];
+  char host[SOAP_TAGLEN];
+  char *action;
+  char *authrealm;             /* HTTP authentication realm */
+  char *prolog;                        /* XML declaration prolog */
+  unsigned long ip;            /* IP number */
+  int port;                    /* port number */
+  unsigned int max_keep_alive;
+  const char *proxy_http_version;/* HTTP version of proxy "1.0" or "1.1" */
+  const char *proxy_host;      /* Proxy Server host name */
+  int proxy_port;              /* Proxy Server port (default = 8080) */
+  const char *proxy_userid;    /* Proxy Authorization user name */
+  const char *proxy_passwd;    /* Proxy Authorization password */
+  int status;                  /* -1 when request, else error code to be returned by server */
+  int error;
+  int errmode;
+  int errnum;
+#ifndef WITH_LEANER
+  struct soap_dom_element *dom;
+  struct soap_dime dime;
+  struct soap_mime mime;
+  struct soap_xlist *xlist;
+#endif
+#if !defined(WITH_LEAN) || defined(SOAP_DEBUG)
+  const char *logfile[SOAP_MAXLOGS];
+  FILE *fdebug[SOAP_MAXLOGS];
+  struct soap_mlist *mht[SOAP_PTRHASH];
+#endif
+#ifndef WITH_LEAN
+  const char *c14ninclude;
+  const char *c14nexclude;
+  struct soap_cookie *cookies;
+  const char *cookie_domain;
+  const char *cookie_path;
+  int cookie_max;
+#endif
+#ifndef WITH_NOIO
+#ifdef WITH_IPV6
+  struct sockaddr_storage peer;        /* IPv6: set by soap_accept and by UDP recv */
+#else
+  struct sockaddr_in peer;     /* IPv4: set by soap_connect/soap_accept and by UDP recv */
+#endif
+#endif
+  size_t peerlen;
+#ifdef WITH_OPENSSL
+  int (*fsslauth)(struct soap*);
+  int (*fsslverify)(int, X509_STORE_CTX*);
+  BIO *bio;
+  SSL *ssl;
+  SSL_CTX *ctx;
+  unsigned short ssl_flags;
+  const char *keyfile;
+  const char *password;
+  const char *dhfile;
+  const char *cafile;
+  const char *capath;
+  const char *crlfile;
+  const char *randfile;
+  SSL_SESSION *session;
+  char session_host[SOAP_TAGLEN];
+  int session_port;
+#endif
+#ifdef WITH_ZLIB
+  short zlib_state;            /* SOAP_ZLIB_NONE, SOAP_ZLIB_DEFLATE, or SOAP_ZLIB_INFLATE */
+  short zlib_in;               /* SOAP_ZLIB_NONE, SOAP_ZLIB_DEFLATE, or SOAP_ZLIB_GZIP */
+  short zlib_out;              /* SOAP_ZLIB_NONE, SOAP_ZLIB_DEFLATE, or SOAP_ZLIB_GZIP */
+  z_stream d_stream;           /* decompression stream */
+  char z_buf[SOAP_BUFLEN];     /* buffer */
+  size_t z_buflen;
+  unsigned short z_level;      /* compression level to be used (0=none, 1=fast to 9=best) */
+  uLong z_crc;                 /* internal gzip crc */
+  float z_ratio_in;            /* detected compression ratio compressed_length/length of inbound message */
+  float z_ratio_out;           /* detected compression ratio compressed_length/length of outbound message */
+#endif
+#ifdef WMW_RPM_IO
+  void *rpmreqid;
+#endif
+#ifndef WITH_LEAN
+#ifdef __cplusplus
+  soap();
+  soap(soap_mode);
+  soap(soap_mode, soap_mode);
+  soap(struct soap&);
+  ~soap();
+#endif
+#endif
+};
+
+struct soap_code_map
+{ long code;
+  const char *string;
+};
+
+/* forwarding list */
+struct soap_flist
+{ struct soap_flist *next;
+  int type;
+  void *ptr;
+  unsigned int level;
+  size_t len;
+  void (*fcopy)(struct soap*, int, int, void*, size_t, const void*, size_t);
+};
+
+/* id-ref forwarding list */
+struct soap_ilist
+{ struct soap_ilist *next;
+  int type;
+  size_t size;
+  void *link;
+  void *copy;
+  struct soap_flist *flist;
+  void *ptr;
+  unsigned int level;
+  char id[1]; /* the actual id string value flows into the allocated region below this struct */
+};
+
+struct soap_plugin
+{ struct soap_plugin *next;
+  const char *id;
+  void *data;
+  int (*fcopy)(struct soap *soap, struct soap_plugin *dst, struct soap_plugin *src);
+  void (*fdelete)(struct soap *soap, struct soap_plugin *p); /* should delete fields of plugin only and not free(p) */
+};
+
+#ifndef WITH_NONAMESPACES
+extern SOAP_NMAC struct Namespace namespaces[];
+#endif
+
+#ifndef WITH_LEAN
+# define soap_get0(soap) (((soap)->bufidx>=(soap)->buflen && soap_recv(soap)) ? EOF : (unsigned char)(soap)->buf[(soap)->bufidx])
+# define soap_get1(soap) (((soap)->bufidx>=(soap)->buflen && soap_recv(soap)) ? EOF : (unsigned char)(soap)->buf[(soap)->bufidx++])
+#else
+soap_wchar soap_get0(struct soap*);
+soap_wchar soap_get1(struct soap*);
+#endif
+
+#define soap_revget1(soap) ((soap)->bufidx--)
+#define soap_unget(soap, c) ((soap)->ahead = c)
+#define soap_register_plugin(soap, plugin) soap_register_plugin_arg(soap, plugin, NULL)
+#define soap_imode(soap, n) ((soap)->mode = (soap)->imode = (n))
+#define soap_set_imode(soap, n) ((soap)->imode |= (n))
+#define soap_clr_imode(soap, n) ((soap)->imode &= ~(n))
+#define soap_omode(soap, n) ((soap)->mode = (soap)->omode = (n))
+#define soap_set_omode(soap, n) ((soap)->omode |= (n))
+#define soap_clr_omode(soap, n) ((soap)->omode &= ~(n))
+#define soap_set_mode(soap, n) ((soap)->imode |= (n), (soap)->omode |= (n))
+#define soap_clr_mode(soap, n) ((soap)->imode &= ~(n), (soap)->omode &= ~(n))
+#define soap_destroy(soap) soap_delete((soap), NULL)
+
+#ifdef HAVE_STRRCHR
+# define soap_strrchr(s, t) strrchr(s, t)
+#else
+ SOAP_FMAC1 char* SOAP_FMAC2 soap_strrchr(const char *s, int t);
+#endif
+
+#ifdef HAVE_STRTOL
+# define soap_strtol(s, t, b) strtol(s, t, b)
+#else
+ SOAP_FMAC1 long SOAP_FMAC2 soap_strtol(const char *s, char **t, int b);
+#endif
+
+#ifdef HAVE_STRTOUL
+# define soap_strtoul(s, t, b) strtoul(s, t, b)
+#else
+ SOAP_FMAC1 unsigned long SOAP_FMAC2 soap_strtoul(const char *s, char **t, int b);
+#endif
+
+#if defined(WITH_OPENSSL)
+# define soap_random soap_rand()
+SOAP_FMAC1 int SOAP_FMAC2 soap_rand(void);
+#elif defined(HAVE_RANDOM)
+# define soap_random (int)random()
+#else
+# define soap_random rand()
+#endif
+
+#ifdef WITH_NOIDREF
+# define soap_embedded(s, p, t) (0)
+# define soap_id_lookup(s, i, p, t, n, k) (p)
+# define soap_id_forward(s, h, p, len, st, tt, n, k, fc) (p)
+# define soap_reference(s, a, t) (1)
+# define soap_array_reference(s, p, a, n, t) (1)
+# define soap_embed(s, p, a, n, t, pp) (0)
+# define soap_embedded_id(s, i, p, t) (i)
+# define soap_is_embedded(s, p) (0)
+# define soap_is_single(s, p) (1)
+# define soap_lookup_type(s, i) (0)
+# define soap_getindependent(s) (0)
+# define soap_putindependent(s) (0)
+# define soap_getelement(s, n) (n)
+# define soap_putelement(s, p, t, i, n) (0)
+# define soap_markelement(s, p, n) (0)
+#endif
+
+SOAP_FMAC1 void SOAP_FMAC2 soap_fault(struct soap*);
+SOAP_FMAC1 const char** SOAP_FMAC2 soap_faultcode(struct soap*);
+SOAP_FMAC1 const char** SOAP_FMAC2 soap_faultsubcode(struct soap*);
+SOAP_FMAC1 const char** SOAP_FMAC2 soap_faultstring(struct soap*);
+SOAP_FMAC1 const char** SOAP_FMAC2 soap_faultdetail(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_serializeheader(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_putheader(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getheader(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_serializefault(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_putfault(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getfault(struct soap*);
+
+SOAP_FMAC1 void SOAP_FMAC2 soap_ssl_init(void);
+SOAP_FMAC1 int SOAP_FMAC2 soap_poll(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_connect_command(struct soap*, int, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_connect(struct soap*, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_bind(struct soap*, const char*, int, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_accept(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_accept(struct soap*);
+SOAP_FMAC1 const char * SOAP_FMAC2 soap_ssl_error(struct soap*, int);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_server_context(struct soap*, unsigned short, const char*, const char*, const char*, const char*, const char*, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_client_context(struct soap*, unsigned short, const char*, const char*, const char*, const char*, const char*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_puthttphdr(struct soap*, int status, size_t count);
+
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_get_header_attribute(struct soap*, const char*, const char*);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_decode_key(char*, size_t, const char*);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_decode_val(char*, size_t, const char*);
+
+SOAP_FMAC1 size_t SOAP_FMAC2 soap_hash(const char*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_endpoint(struct soap*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_flush_raw(struct soap*, const char*, size_t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_flush(struct soap*);
+SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_get(struct soap*);
+SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_getchar(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_tag_cmp(const char*, const char*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_fault(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_sender_fault(struct soap*, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_sender_fault_subcode(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_receiver_fault(struct soap*, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_receiver_fault_subcode(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_set_sender_error(struct soap*, const char*, const char*, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_set_receiver_error(struct soap*, const char*, const char*, int);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_send_raw(struct soap*, const char*, size_t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_recv_raw(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_recv(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_send(struct soap*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_send2(struct soap*, const char*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_send3(struct soap*, const char*, const char*, const char*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_pututf8(struct soap*, unsigned long);
+SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_getutf8(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_putbase64(struct soap*, const unsigned char*, int);
+SOAP_FMAC1 unsigned char* SOAP_FMAC2 soap_getbase64(struct soap*, int*, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_puthex(struct soap*, const unsigned char*, int);
+SOAP_FMAC1 unsigned char* SOAP_FMAC2 soap_gethex(struct soap*, int*);
+
+#ifndef WITH_LEANER
+SOAP_FMAC1 int SOAP_FMAC2 soap_xop_forward(struct soap*, unsigned char**, int*, char**, char**, char**);
+SOAP_FMAC1 int SOAP_FMAC2 soap_dime_forward(struct soap*, unsigned char**, int*, char**, char**, char**);
+#endif
+
+#ifndef WITH_NOIDREF
+SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_lookup_id(struct soap*, void *p, int t, struct soap_plist**);
+SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_lookup(struct soap*, const void *p, int t, struct soap_plist**);
+SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_enter(struct soap*, const void *p, const struct soap_array *a, int n, int t, struct soap_plist**);
+SOAP_FMAC1 int SOAP_FMAC2 soap_array_pointer_lookup(struct soap*, const void *p, const struct soap_array *a, int n, int t, struct soap_plist**);
+SOAP_FMAC1 int SOAP_FMAC2 soap_embed(struct soap *soap, const void *p, const struct soap_array *a, int n, const char *tag, int type);
+SOAP_FMAC1 struct soap_ilist* SOAP_FMAC2 soap_lookup(struct soap*, const char*);
+SOAP_FMAC1 struct soap_ilist* SOAP_FMAC2 soap_enter(struct soap*, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_resolve(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_embedded(struct soap*, const void *p, int t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_reference(struct soap*, const void *p, int t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_array_reference(struct soap*, const void *p, const struct soap_array *a, int n, int t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_embedded_id(struct soap*, int id, const void *p, int t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_is_embedded(struct soap*, struct soap_plist*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_is_single(struct soap*, struct soap_plist*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_embedded(struct soap*, struct soap_plist*);
+#endif
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_begin_count(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_end_count(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_begin_send(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_end_send(struct soap*);
+
+SOAP_FMAC1 const struct soap_code_map* SOAP_FMAC2 soap_code(const struct soap_code_map*, const char*);
+SOAP_FMAC1 long SOAP_FMAC2 soap_code_int(const struct soap_code_map*, const char*, long);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_code_str(const struct soap_code_map*, long);
+SOAP_FMAC1 long SOAP_FMAC2 soap_code_bits(const struct soap_code_map*, const char*);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_code_list(struct soap*, const struct soap_code_map*, long);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_getline(struct soap*, char*, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_begin_recv(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_end_recv(struct soap*);
+
+SOAP_FMAC1 void* SOAP_FMAC2 soap_malloc(struct soap*, size_t);
+SOAP_FMAC1 void SOAP_FMAC2 soap_dealloc(struct soap*, void*);
+SOAP_FMAC1 struct soap_clist * SOAP_FMAC2 soap_link(struct soap*, void*, int, int, void (*fdelete)(struct soap_clist*));
+SOAP_FMAC1 void SOAP_FMAC2 soap_unlink(struct soap*, const void*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_free_temp(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_del(struct soap*);
+
+SOAP_FMAC1 void* SOAP_FMAC2 soap_track_malloc(struct soap*, const char*, int, size_t);
+SOAP_FMAC1 void SOAP_FMAC2 soap_track_free(struct soap*, const char*, int, void*);
+
+#ifndef WITH_NOIDREF
+SOAP_FMAC1 int SOAP_FMAC2 soap_lookup_type(struct soap*, const char *id);
+SOAP_FMAC1 void* SOAP_FMAC2 soap_id_lookup(struct soap*, const char *id, void **p, int t, size_t n, unsigned int k);
+SOAP_FMAC1 void* SOAP_FMAC2 soap_id_forward(struct soap*, const char *id, void *p, size_t len, int st, int tt, size_t n, unsigned int k, void(*fcopy)(struct soap*, int, int, void*, size_t, const void*, size_t));
+#endif
+SOAP_FMAC1 void* SOAP_FMAC2 soap_id_enter(struct soap*, const char *id, void *p, int t, size_t n, unsigned int k, const char *type, const char *arrayType, void *(*finstantiate)(struct soap*, int, const char*, const char*, size_t*));
+SOAP_FMAC1 void SOAP_FMAC2 soap_fcopy(struct soap *soap, int st, int tt, void *p, size_t, const void *q, size_t n);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_size(const int *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getoffsets(const char *, const int *, int *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getsize(const char *, const char *, int *);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getsizes(const char *, int *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getposition(const char *, int *);
+
+SOAP_FMAC1 char* SOAP_FMAC2 soap_putsize(struct soap*, const char *, int);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_putsizesoffsets(struct soap*, const char *, const int *, const int *, int);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_putsizes(struct soap*, const char *, const int *, int);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_putoffset(struct soap*, int);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_putoffsets(struct soap*, const int *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_closesock(struct soap*);
+
+SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_new(void);
+SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_new1(soap_mode);
+SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_new2(soap_mode, soap_mode);
+SOAP_FMAC1 void SOAP_FMAC2 soap_free(struct soap*);
+SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_copy(struct soap*);
+SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_copy_context(struct soap*, struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_copy_stream(struct soap*, struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_init(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_init1(struct soap*, soap_mode);
+SOAP_FMAC1 void SOAP_FMAC2 soap_init2(struct soap*, soap_mode, soap_mode);
+SOAP_FMAC1 void SOAP_FMAC2 soap_done(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_cleanup(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_begin(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_end(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_delete(struct soap*, void*);
+
+#ifdef SOAP_DEBUG
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_recv_logfile(struct soap*, const char*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_sent_logfile(struct soap*, const char*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_test_logfile(struct soap*, const char*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_close_logfiles(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_open_logfile(struct soap*, int);
+#endif
+
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_value(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_match_tag(struct soap*, const char*, const char *);
+SOAP_FMAC1 int SOAP_FMAC2 soap_match_array(struct soap*, const char*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_element(struct soap*, const char*, int, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_begin_out(struct soap*, const char *tag, int id, const char *type);
+SOAP_FMAC1 int SOAP_FMAC2 soap_array_begin_out(struct soap*, const char *tag, int id, const char *type, const char *offset);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_ref(struct soap*, const char *tag, int id, int href);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_href(struct soap*, const char *tag, int id, const char *ref, const char *val);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_null(struct soap*, const char *tag, int id, const char *type);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_id(struct soap*, const char *tag, int id, const void *p, const struct soap_array *a, int d, const char *type, int n);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_result(struct soap*, const char *tag);
+SOAP_FMAC1 void SOAP_FMAC2 soap_check_result(struct soap*, const char *tag);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_end_out(struct soap*, const char *tag);
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_start_end_out(struct soap*, const char *tag);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_attribute(struct soap*, const char*, const char*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_begin_in(struct soap*, const char *tag, int nillable, const char *type);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_element_end_in(struct soap*, const char *tag);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_peek_element(struct soap*);
+
+SOAP_FMAC1 void SOAP_FMAC2 soap_retry(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_revert(struct soap*);
+
+SOAP_FMAC1 char* SOAP_FMAC2 soap_strdup(struct soap*, const char*);
+SOAP_FMAC1 const char * SOAP_FMAC2 soap_strsearch(const char *big, const char *little);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_string_out(struct soap*, const char *s, int flag);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_string_in(struct soap*, int, long, long);
+
+#ifndef WITH_LEANER
+SOAP_FMAC1 int SOAP_FMAC2 soap_wstring_out(struct soap*, const wchar_t *s, int flag);
+SOAP_FMAC1 wchar_t* SOAP_FMAC2 soap_wstring_in(struct soap*, int, long, long);
+#endif
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_match_namespace(struct soap*, const char *, const char*, int n1, int n2);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_set_namespaces(struct soap*, const struct Namespace*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_local_namespaces(struct soap*);
+
+SOAP_FMAC1 void SOAP_FMAC2 soap_pop_namespace(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_push_namespace(struct soap*, const char *,const char *);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_current_namespace(struct soap *soap, const char *tag);
+
+SOAP_FMAC1 struct soap_nlist* SOAP_FMAC2 soap_lookup_ns(struct soap *soap, const char *tag, size_t n);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_store_lab(struct soap*, const char*, size_t);
+SOAP_FMAC1 int SOAP_FMAC2 soap_append_lab(struct soap*, const char*, size_t);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_new_block(struct soap*);
+SOAP_FMAC1 void* SOAP_FMAC2 soap_push_block(struct soap*, size_t);
+SOAP_FMAC1 void SOAP_FMAC2 soap_pop_block(struct soap*);
+SOAP_FMAC1 size_t SOAP_FMAC2 soap_size_block(struct soap*, size_t);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_first_block(struct soap*);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_next_block(struct soap*);
+SOAP_FMAC1 size_t SOAP_FMAC2 soap_block_size(struct soap*);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_save_block(struct soap*, char*, int);
+SOAP_FMAC1 void SOAP_FMAC2 soap_end_block(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_begin_out(struct soap*);
+SOAP_FMAC1 int soap_envelope_end_out(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_begin_in(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_end_in(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_body_begin_out(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_body_end_out(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_body_begin_in(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_body_end_in(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_recv_header(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_response(struct soap*, int);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_send_empty_response(struct soap*, int status);
+SOAP_FMAC1 int SOAP_FMAC2 soap_recv_empty_response(struct soap*);
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_send_fault(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_recv_fault(struct soap*);
+
+#ifndef WITH_NOSTDLIB
+SOAP_FMAC1 void SOAP_FMAC2 soap_print_fault(struct soap*, FILE*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_print_fault_location(struct soap*, FILE*);
+#endif
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2byte(struct soap*, const char*, char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2short(struct soap*, const char*, short*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2int(struct soap*, const char*, int*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2long(struct soap*, const char*, long*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2LONG64(struct soap*, const char*, LONG64*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2float(struct soap*, const char*, float*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2double(struct soap*, const char*, double*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedByte(struct soap*, const char*, unsigned char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedShort(struct soap*, const char*, unsigned short*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedInt(struct soap*, const char*, unsigned int*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedLong(struct soap*, const char*, unsigned long*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2ULONG64(struct soap*, const char*, ULONG64*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2string(struct soap*, const char*, char**);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2QName(struct soap*, const char*, char**);
+
+#ifndef WITH_LEAN
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2wchar(struct soap*, const char*, wchar_t**);
+SOAP_FMAC1 int SOAP_FMAC2 soap_s2dateTime(struct soap*, const char*, time_t*);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_s2base64(struct soap*, const unsigned char*, char*, int);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_s2hex(struct soap*, const unsigned char*, char*, int);
+#endif
+
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_byte2s(struct soap*, char);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_short2s(struct soap*, short);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_int2s(struct soap*, int);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_long2s(struct soap*, long);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_LONG642s(struct soap*, LONG64);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_float2s(struct soap*, float);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_double2s(struct soap*, double);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedByte2s(struct soap*, unsigned char);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedShort2s(struct soap*, unsigned short);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedInt2s(struct soap*, unsigned int);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedLong2s(struct soap*, unsigned long);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_ULONG642s(struct soap*, ULONG64);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_QName2s(struct soap*, const char*);
+
+#ifndef WITH_LEAN
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_wchar2s(struct soap*, const wchar_t*);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_dateTime2s(struct soap*, time_t);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_base642s(struct soap*, const char*, char*, size_t, int*);
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_hex2s(struct soap*, const char*, char*, size_t, int*);
+#endif
+
+
+SOAP_FMAC1 int* SOAP_FMAC2 soap_inint(struct soap*, const char *tag, int *p, const char *, int);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_inbyte(struct soap*, const char *tag, char *p, const char *, int);
+SOAP_FMAC1 long* SOAP_FMAC2 soap_inlong(struct soap*, const char *tag, long *p, const char *, int);
+SOAP_FMAC1 LONG64* SOAP_FMAC2 soap_inLONG64(struct soap*, const char *tag, LONG64 *p, const char *, int);
+SOAP_FMAC1 short* SOAP_FMAC2 soap_inshort(struct soap*, const char *tag, short *p, const char *, int);
+SOAP_FMAC1 float* SOAP_FMAC2 soap_infloat(struct soap*, const char *tag, float *p, const char *, int);
+SOAP_FMAC1 double* SOAP_FMAC2 soap_indouble(struct soap*, const char *tag, double *p, const char *, int);
+SOAP_FMAC1 unsigned char* SOAP_FMAC2 soap_inunsignedByte(struct soap*, const char *tag, unsigned char *p, const char *, int);
+SOAP_FMAC1 unsigned short* SOAP_FMAC2 soap_inunsignedShort(struct soap*, const char *tag, unsigned short *p, const char *, int);
+SOAP_FMAC1 unsigned int* SOAP_FMAC2 soap_inunsignedInt(struct soap*, const char *tag, unsigned int *p, const char *, int);
+SOAP_FMAC1 unsigned long* SOAP_FMAC2 soap_inunsignedLong(struct soap*, const char *tag, unsigned long *p, const char *, int);
+SOAP_FMAC1 ULONG64* SOAP_FMAC2 soap_inULONG64(struct soap*, const char *tag, ULONG64 *p, const char *, int);
+SOAP_FMAC1 char** SOAP_FMAC2 soap_instring(struct soap*, const char *tag, char **p, const char *, int, int, long, long);
+SOAP_FMAC1 char** SOAP_FMAC2 soap_inliteral(struct soap*, const char *tag, char **p);
+
+#ifndef WITH_LEAN
+SOAP_FMAC1 time_t* SOAP_FMAC2 soap_indateTime(struct soap*, const char *tag, time_t *p, const char *, int);
+#endif
+
+#ifndef WITH_LEANER
+SOAP_FMAC1 wchar_t** SOAP_FMAC2 soap_inwstring(struct soap*, const char *tag, wchar_t **p, const char *, int, long, long);
+SOAP_FMAC1 wchar_t** SOAP_FMAC2 soap_inwliteral(struct soap*, const char *tag, wchar_t **p);
+#endif
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_outbyte(struct soap*, const char *tag, int id, const char *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outshort(struct soap*, const char *tag, int id, const short *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outint(struct soap*, const char *tag, int id, const int *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outlong(struct soap*, const char *tag, int id, const long *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outLONG64(struct soap*, const char *tag, int id, const LONG64 *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outfloat(struct soap*, const char *tag, int id, const float *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outdouble(struct soap*, const char *tag, int id, const double *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedByte(struct soap*, const char *tag, int id, const unsigned char *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedShort(struct soap*, const char *tag, int id, const unsigned short *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedInt(struct soap*, const char *tag, int id, const unsigned int *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedLong(struct soap*, const char *tag, int id, const unsigned long *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outULONG64(struct soap*, const char *tag, int id, const ULONG64 *p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outstring(struct soap*, const char *tag, int id, char *const*p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outliteral(struct soap*, const char *tag, char *const*p, const char *type);
+
+#ifndef WITH_LEAN
+SOAP_FMAC1 int SOAP_FMAC2 soap_outdateTime(struct soap*, const char *tag, int id, const time_t *p, const char *, int);
+#endif
+
+#ifndef WITH_LEANER
+SOAP_FMAC1 int SOAP_FMAC2 soap_outwstring(struct soap*, const char *tag, int id, wchar_t *const*p, const char *, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_outwliteral(struct soap*, const char *tag, wchar_t *const*p, const char *type);
+#endif
+
+#ifndef WITH_LEANER
+SOAP_FMAC1 int SOAP_FMAC2 soap_attachment(struct soap *, const char*, int, const void*, const struct soap_array*, const char*, const char*, const char*, int, const char*, int);
+SOAP_FMAC1 int SOAP_FMAC2 soap_move(struct soap*, long);
+SOAP_FMAC1 size_t SOAP_FMAC2 soap_tell(struct soap*);
+SOAP_FMAC1 char* SOAP_FMAC2 soap_dime_option(struct soap*, unsigned short, const char*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getdimehdr(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getdime(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_putdimehdr(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_putdime(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getmimehdr(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_getmime(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_putmimehdr(struct soap*, struct soap_multipart*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_putmime(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_dime(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_set_mime(struct soap*, const char *boundary, const char *start);
+SOAP_FMAC1 void SOAP_FMAC2 soap_clr_dime(struct soap*);
+SOAP_FMAC1 void SOAP_FMAC2 soap_clr_mime(struct soap*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_set_dime_attachment(struct soap*, char *ptr, size_t size, const char *type, const char *id, unsigned short optype, const char *option);
+SOAP_FMAC1 int SOAP_FMAC2 soap_set_mime_attachment(struct soap*, char *ptr, size_t size, enum soap_mime_encoding encoding, const char *type, const char *id, const char *location, const char *description);
+SOAP_FMAC1 void SOAP_FMAC2 soap_post_check_mime_attachments(struct soap *soap);
+SOAP_FMAC1 int SOAP_FMAC2 soap_check_mime_attachments(struct soap *soap);
+SOAP_FMAC1 struct soap_multipart* SOAP_FMAC2 soap_get_mime_attachment(struct soap *soap, void *handle);
+SOAP_FMAC1 struct soap_multipart* SOAP_FMAC2 soap_next_multipart(struct soap_multipart*);
+SOAP_FMAC1 int SOAP_FMAC2 soap_match_cid(struct soap*, const char*, const char*);
+#endif
+
+SOAP_FMAC1 int SOAP_FMAC2 soap_register_plugin_arg(struct soap*, int (*fcreate)(struct soap*, struct soap_plugin*, void*), void*);
+SOAP_FMAC1 void* SOAP_FMAC2 soap_lookup_plugin(struct soap*, const char*);
+
+SOAP_FMAC1 const char* SOAP_FMAC2 soap_attr_value(struct soap *soap, const char *name, int flag);
+SOAP_FMAC1 int SOAP_FMAC2 soap_set_attr(struct soap *soap, const char *name, const char *value);
+SOAP_FMAC1 void SOAP_FMAC2 soap_clr_attr(struct soap *soap);
+
+#ifdef WITH_COOKIES
+SOAP_FMAC1 void SOAP_FMAC2 soap_getcookies(struct soap *soap, const char *val);
+SOAP_FMAC1 size_t SOAP_FMAC2 soap_encode_cookie(const char*, char*, size_t);
+SOAP_FMAC1 extern struct soap_cookie* SOAP_FMAC2 soap_set_cookie(struct soap*, const char*, const char*, const char*, const char*);
+SOAP_FMAC1 extern struct soap_cookie* SOAP_FMAC2 soap_cookie(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern char* SOAP_FMAC2 soap_cookie_value(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern char* SOAP_FMAC2 soap_env_cookie_value(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern time_t SOAP_FMAC2 soap_cookie_expire(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern int SOAP_FMAC2 soap_set_cookie_expire(struct soap*, const char*, long, const char*, const char*);
+SOAP_FMAC1 extern int SOAP_FMAC2 soap_set_cookie_session(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern int SOAP_FMAC2 soap_clr_cookie_session(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern void SOAP_FMAC2 soap_clr_cookie(struct soap*, const char*, const char*, const char*);
+SOAP_FMAC1 extern int SOAP_FMAC2 soap_getenv_cookies(struct soap*);
+SOAP_FMAC1 extern struct soap_cookie* SOAP_FMAC2 soap_copy_cookies(struct soap*, struct soap*);
+SOAP_FMAC1 extern void SOAP_FMAC2 soap_free_cookies(struct soap*);
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
+
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 24252c7..0000000
+++ /dev/null
@@ -1,167 +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=0.0.0
-PREFIX=/opt/glite
-
-glite_location=$PREFIX
-globus_prefix=/opt/globus
-nothrflavour=gcc32
-thrflavour=gcc32pthr
-myproxy_prefix=$globus_prefix
-
--include Makefile.inc
-
-VPATH:=${top_srcdir}/src:${top_srcdir}/examples
-
-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
-
-CFLAGS:= ${DEBUG} \
-       ${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_NOTHR :=-L${myproxy_prefix}/lib -lmyproxy_${nothrflavour}
-MYPROXY_LIB_THR:=-L${myproxy_prefix}/lib -lmyproxy_${thrflavour}
-
-offset=1
-version_info:=-version-info ${shell \
-       perl -e '$$,=":"; @F=split "\\.","${version}"; print $$F[0]+$$F[1]+${offset},$$F[2],$$F[1]' }
-
-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 voms.o
-LIBOBJ:=api.o common.o
-LIB_CORE_OBJS := renewal_core.o voms.o
-CLIENTOBJ:=client.o
-
-THRLIBOBJ:=${LIBOBJ:.o=.thr.o}
-LIBLOBJ:=${LIBOBJ:.o=.lo}
-THRLIBLOBJ:=${LIBOBJ:.o=.thr.lo}
-
-LIB_CORE_NOTHR_OBJS := ${LIB_CORE_OBJS}
-LIB_CORE_NOTHR_LOBJS := ${LIB_CORE_OBJS:.o=.lo}
-LIB_CORE_THR_OBJS := ${LIB_CORE_OBJS:.o=.thr.o}
-LIB_CORE_THR_LOBJS := ${LIB_CORE_OBJS:.o=.thr.lo}
-
-LIB:=libglite_security_proxyrenewal_${nothrflavour}.la
-THRLIB:=libglite_security_proxyrenewal_${thrflavour}.la
-LIB_CORE_NOTHR := libglite_security_proxyrenewal_core_${nothrflavour}.la
-LIB_CORE_THR := libglite_security_proxyrenewal_core_${thrflavour}.la
-
-VOMS_LIB_NOTHR := -L${glite_location}/lib -lvomsc_${nothrflavour}
-VOMS_LIB_THR := -L${glite_location}/lib -lvomsc_${thrflavour}
-
-DAEMON:=glite-proxy-renewd
-CLIENT:=glite-proxy-renew
-EXAMPLES := renew_core
-
-default: all
-compile all: ${LIB} ${THRLIB} ${LIB_CORE_NOTHR} ${DAEMON} ${CLIENT} 
-
-${LIB}: ${LIBOBJ}
-       ${LINK} ${version_info} -o $@ ${LIBLOBJ} -rpath ${glite_location}/lib
-
-${THRLIB}: ${THRLIBOBJ}
-       ${LINK} ${version_info} -o $@ ${THRLIBLOBJ} -rpath ${glite_location}/lib
-
-${LIB_CORE_NOTHR}: ${LIB_CORE_NOTHR_OBJS}
-       ${LINK} ${version_info} -o $@ ${LIB_CORE_NOTHR_LOBJS} -rpath ${glite_location}/lib ${MYPROXY_LIB_NOTHR} ${VOMS_LIB_NOTHR}
-
-${LIB_CORE_THR}: ${LIB_CORE_THR_OBJS}
-       ${LINK} ${version_info} -o $@ ${LIB_CORE_THR_LOBJS} -rpath ${glite_location}/lib ${MYPROXY_LIB_THR} ${VOMS_LIB_THR}
-
-${DAEMON}: ${DAEMONOBJ} ${LIB_CORE_NOTHR}
-       ${LINK} -o $@ ${DAEMONOBJ} ${LIB_CORE_NOTHR} 
-
-${CLIENT}: ${CLIENTOBJ} ${LIB}
-       ${LINK} -o $@ ${CLIENTOBJ} ${LIB} ${GLOBUS_LIBS}
-
-${THRLIBOBJ} ${LIB_CORE_THR_OBJS}: %.thr.o: %.c
-       ${COMPILE} ${GLOBUSTHRINC} -o $@ -c $<
-
-%.o: %.c
-       ${COMPILE} ${GLOBUSINC} -c $<
-
-${EXAMPLES}: %: %.o
-       ${LINK} -o $@ $< ${LIB_CORE_NOTHR}
-
-stage: compile
-       $(MAKE) install PREFIX=${stagedir}
-
-check:
-       echo No unit tests
-
-examples: ${EXAMPLES}
-
-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} ${LIB_CORE_NOTHR} ${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 renewal_core.h ${PREFIX}/include/glite/security/proxyrenewal
-
-       ${INSTALL} -m 755 ${top_srcdir}/config/startup ${PREFIX}/etc/init.d/glite-proxy-renewald
-
-
-clean:
-       $(RM) $(LIB) ${THRLIB} ${LIB_CORE_NOTHR} ${LIB_CORE_THR} $(DAEMON) $(CLIENT) $(EXAMPLES) *.o *.lo core 
-
-.PHONY: default all compile examples check stage dist distsrc distbin install clean
diff --git a/org.glite.security.proxyrenewal/build.xml b/org.glite.security.proxyrenewal/build.xml
deleted file mode 100755 (executable)
index 2ddf1c0..0000000
+++ /dev/null
@@ -1,128 +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.5  2005/05/26 15:18:36  zurek
-       inserted module.build.file
-       
-       Revision 1.4  2004/11/02 15:10:43  dkouril
-       RPM description
-       
-       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}"/>
-               <property file="${module.build.file}"/>
-       <property file="${module.build.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 26ba757..0000000
+++ /dev/null
@@ -1,80 +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"
-
-unset creds
-
-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="-t $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="-t /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
-
-       # workaround for VOMS_FindByVO that seems to always require user's own VOMS config file (bug #7511)
-       user_voms_config=$HOME/.glite/vomses
-       if [ ! -f "$user_voms_config" ]; then
-               rm -f /tmp/renewal_vomses
-               su - $GLITE_USER -c "touch /tmp/renewal_vomses && chmod 644 /tmp/renewal_vomses"
-               user_voms_config=/tmp/renewal_vomses
-       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 "VOMS_USERCONF=$user_voms_config \
-               $GLITE_LOCATION/bin/glite-proxy-renewd \
-               -r $PROXY_REPOSITORY $creds -A" && echo " done"
-}
-
-stop()
-{
-       echo -n "Stopping ProxyRenewal Daemon: glite-proxy-renewd ..."
-       killall glite-proxy-renewd
-       echo " done"
-}
-
-status()
-{
-       if netstat -an --unix | grep "^unix .* LISTEN.* /tmp/dgpr_renew_" >/dev/null 2>&1 ;then
-               echo glite-proxy-renewd running
-       else
-               echo glite-proxy-renewd 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.security.proxyrenewal/examples/renew_core.c b/org.glite.security.proxyrenewal/examples/renew_core.c
deleted file mode 100644 (file)
index 69518ea..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <getopt.h>
-#include <glite/security/proxyrenewal/renewal_core.h>
-
-static struct option const long_options[] = {
-   { "server",   required_argument, 0, 's' },
-   { "proxy",    required_argument, 0, 'p' },
-   { "help",     no_argument,       0, 'h' },
-   { NULL, 0, NULL, 0}
-};
-
-static char short_options[] = "s:p:h";
-
-int
-main(int argc, char *argv[])
-{
-   char *server = NULL;
-   char *proxy = NULL;
-   char *new_proxy = NULL;
-   extern int optind;
-   char arg;
-   glite_renewal_core_context ctx = NULL;
-   int ret;
-
-   while ((arg = getopt_long(argc, argv, short_options, long_options, NULL)) != EOF) {
-      switch(arg) {
-       case 's':
-          server = optarg; break;
-       case 'p':
-          proxy = optarg; break;
-       case 'h':
-          fprintf(stdout, "Usage: %s --server <myproxy server> --proxy <filename>\n", argv[0]);
-          exit(1);
-      }
-   }
-
-   if (server == NULL || proxy == NULL) {
-      fprintf(stderr, "both server and proxy parameters must be given\n");
-      exit(1);
-   }
-
-   ret = glite_renewal_core_init_ctx(&ctx);
-   if (ret) {
-      fprintf(stderr, "glite_renewal_core_init_ctx() failed\n");
-      exit(1);
-   }
-
-   ctx->log_dst = GLITE_RENEWAL_LOG_NONE;
-
-   ret = glite_renewal_core_renew(ctx, server, 0, proxy, &new_proxy);
-   if (ret) {
-      fprintf(stderr, "%s: glite_renewal_core_renew() failed: %s",
-              argv[0], ctx->err_message);
-      exit(1);
-   }
-
-   ret = glite_renewal_core_destroy_ctx(ctx);
-
-   printf("%s\n", new_proxy);
-
-   return 0;
-}
diff --git a/org.glite.security.proxyrenewal/interface/renewal.h b/org.glite.security.proxyrenewal/interface/renewal.h
deleted file mode 100644 (file)
index cf61a41..0000000
+++ /dev/null
@@ -1,173 +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_ERROR_TIMEOUT,
-    EDG_WLPR_ERROR_ERRNO,
-} 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.
- */
-#ifdef RENEWAL_HAVE_JOBID
-int
-edg_wlpr_RegisterProxyExt(
-      const char * filename,
-      const char * server,
-      unsigned int port,
-      edg_wlc_JobId jobid,
-      int flags,
-      char ** repository_filename
-);
-#endif
-
-int
-glite_renewal_RegisterProxy(
-       const char * filename,
-       const char * server,
-       unsigned int port,
-       const char *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().
- */
-#ifdef RENEWAL_HAVE_JOBID
-int
-edg_wlpr_UnregisterProxy(
-      edg_wlc_JobId jobid,
-      const char * repository_filename
-);
-#endif
-
-int
-glite_renewal_UnregisterProxy(
-       const char * 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().
- */
-#ifdef RENEWAL_HAVE_JOBID
-int
-edg_wlpr_GetProxy(edg_wlc_JobId jobid, char **repository_filename);
-#endif
-
-int
-glite_renewal_GetProxy(
-       const char * jobid,
-       char **repository_filename);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* RENEWAL_H */
diff --git a/org.glite.security.proxyrenewal/interface/renewal_core.h b/org.glite.security.proxyrenewal/interface/renewal_core.h
deleted file mode 100644 (file)
index 8348963..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifndef RENEWAL_CORE_H
-#define RENEWAL_CORE_H
-
-#ident "$Id$"
-
-#include <sys/syslog.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef enum {
-       GLITE_RENEWAL_LOG_NONE,
-       GLITE_RENEWAL_LOG_STDOUT,
-       GLITE_RENEWAL_LOG_SYSLOG,
-} glite_renewal_log_dst;
-
-typedef struct glite_renewal_core_context_data {
-  int log_level;
-  glite_renewal_log_dst log_dst;
-  char *err_message;
-  char *voms_conf;
-} glite_renewal_core_context_data;
-
-typedef struct glite_renewal_core_context_data *glite_renewal_core_context;
-
-/**
- * This cal initializes the context and sets default values
- */
-int
-glite_renewal_core_init_ctx(glite_renewal_core_context *context);
-
-/**
- * This call frees the context and all memory used by the context
- */
-int
-glite_renewal_core_destroy_ctx(glite_renewal_core_context context);
-
-/**
- * This call tries to renew the proxy certificate using the MyProxy
- * repository. If VOMS attributes are present in the proxy they are renewed
- * as well.
- * \param context IN: context with authentication information
- * \param myproxy_server IN: hostname of the myproxy repository
- * \param myproxy_port IN: TCP port of the myproxy repository, if 0 the
- * default value will be used
- * \param current_proxy IN: filename with the proxy to renew
- * \param new_proxy OUT: filename with the renewed proxy, the caller is
- * responsible for removing the file when it's not needed.
- */
-int
-glite_renewal_core_renew(glite_renewal_core_context context,
-                        const char *myproxy_server,
-                        unsigned int myproxy_port,
-                        const char *current_proxy,
-                        char **new_proxy);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* RENEWAL_CORE_H */
diff --git a/org.glite.security.proxyrenewal/project/build.number b/org.glite.security.proxyrenewal/project/build.number
deleted file mode 100644 (file)
index 1936771..0000000
+++ /dev/null
@@ -1 +0,0 @@
-module.build=137
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 3d6914b..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 Security Proxyrenewal module
-       
-       Authors: Ales Krenek <ljocha@ics.muni.cz>
-    Version info: $Id$
-    Release: $Name$
-
-    Revision history:
-    $Log$
-    Revision 1.3  2005/03/08 12:51:23  dkouril
-    - Removed unused code
-    - enabled (and partly rewritten) support for renewal of VOMS attributes
-    - internal VOMS headers added - they are necessary to work with ASN.1 encoded
-      VOMS attribures (hopefully new version of the VOMS API will provide better
-      support)
-
-    Revision 1.2  2004/07/12 16:18:37  dimeglio
-    Modified to use myproxy from the repository if available
-
--->
-
-       <!-- ======================================================
-         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}
-                       </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 1441742..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-module.version=1.3.0
-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 a72d692..0000000
+++ /dev/null
@@ -1,550 +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, struct timeval *timeout, int *sock);
-
-static int
-send_request(int sock, struct timeval *timeout, 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, struct timeval *timeout, int *sock)
-{
-   struct sockaddr_un my_addr;
-   int s;
-   int ret;
-   struct timeval before,after;
-   int sock_err;
-   socklen_t err_len;
-
-   assert(sock != NULL);
-   memset(&my_addr, 0, sizeof(my_addr));
-
-   s = socket(AF_UNIX, SOCK_STREAM, 0);
-   if (s == -1) {
-      return errno;
-   }
-
-   if (timeout) {
-      int flags = fcntl(s, F_GETFL, 0);
-      if (fcntl(s, F_SETFL, flags | O_NONBLOCK) < 0)
-        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) {
-      if (errno == EINPROGRESS) {
-        struct pollfd pollfds[1];
-
-        pollfds[0].fd = s;
-        pollfds[0].events = POLLOUT;
-        
-        gettimeofday(&before,NULL);
-        switch (poll(pollfds, 1, timeout->tv_sec*1000+timeout->tv_usec/1000)) {
-           case -1: close(s);
-                    return errno;
-           case 0: close(s);
-                   return EDG_WLPR_ERROR_TIMEOUT;
-        }
-        gettimeofday(&after,NULL);
-        if (edg_wlpr_DecrementTimeout(timeout, before, after)) {
-           close (s);
-           return EDG_WLPR_ERROR_TIMEOUT;
-        }
-
-        err_len = sizeof sock_err;
-        if (getsockopt(s,SOL_SOCKET,SO_ERROR,&sock_err,&err_len)) {
-           close(s);
-           return errno;
-        }
-        if (sock_err) {
-           close(s);
-           errno = sock_err;
-           return errno;
-        }
-      } else {
-        close(s);
-        return errno;
-      }
-   }
-
-   *sock = s;
-   return 0;
-}
-
-static int
-send_request(int sock, struct timeval *timeout, 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, timeout, buf, strlen(buf) + 1);
-   free(buf);
-   if (ret)
-      return ret;
-
-   ret = edg_wlpr_Read(sock, timeout, &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;
-   struct timeval timeout;
-   const char *s = NULL;
-   double d;
-
-   s = getenv("GLITE_PR_TIMEOUT");
-   d = s ? atof(s) : GLITE_PR_TIMEOUT_DEFAULT;
-   timeout.tv_sec = (long) d;
-   timeout.tv_usec = (long) ((d-timeout.tv_sec) * 1e6);
-
-   snprintf(sockname, sizeof(sockname), "%s%d",
-           DGPR_REG_SOCKET_NAME_ROOT, getuid());
-   ret = do_connect(sockname, &timeout, &sock);
-   if (ret)
-      return ret;
-
-   ret = send_request(sock, &timeout, request, response);
-
-   close(sock);
-   return ret;
-}
-
-int
-glite_renewal_RegisterProxy(const char *filename, const char * server,
-                            unsigned int port,
-                            const char *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));
-
-   if (jobid == NULL)
-      return EINVAL;
-
-   request.command = EDG_WLPR_COMMAND_REG;
-   request.myproxy_server = server;
-   request.proxy_filename = filename;
-   request.jobid = strdup(jobid);
-   if (request.jobid == NULL)
-      return ENOMEM;
-
-   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;
-}
-
-#ifdef RENEWAL_HAVE_JOBID
-int
-edg_wlpr_RegisterProxyExt(const char *filename, const char * server,
-                         unsigned int port,
-                          edg_wlc_JobId jobid, int flags,
-                         char **repository_filename)
-{
-   char *ji;
-   int ret;
-
-   ji = edg_wlc_JobIdUnparse(jobid);
-   if (ji == NULL)
-      return EINVAL;
-
-   ret = glite_renewal_RegisterProxy(filename, server, port, ji, flags,
-                                    repository_filename);
-   free(ji);
-   return ret;
-}
-#endif /* RENEWAL_HAVE_JOBID */
-
-#if 0
-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));
-}
-#endif
-
-int
-glite_renewal_UnregisterProxy(const char *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));
-
-   if (jobid == NULL)
-      return EINVAL;
-
-   request.command = EDG_WLPR_COMMAND_UNREG;
-   request.proxy_filename = repository_filename;
-   request.jobid = strdup(jobid);
-   if (request.jobid == NULL)
-      return ENOMEM;
-
-   ret = edg_wlpr_RequestSend(&request, &response);
-   free(request.jobid);
-   
-   if (ret == 0)
-      ret = response.response_code;
-   edg_wlpr_CleanResponse(&response);
-
-   return ret;
-}
-
-#ifdef RENEWAL_HAVE_JOBID
-int
-edg_wlpr_UnregisterProxy(edg_wlc_JobId jobid, const char *repository_filename)
-{
-   char *ji;
-   int ret;
-
-   ji = edg_wlc_JobIdUnparse(jobid);
-   if (ji == NULL)
-      return EINVAL;
-   ret = glite_renewal_UnregisterProxy(ji, repository_filename);
-   free(ji);
-   return ret;
-}
-#endif /* RENEWAL_HAVE_JOBID */
-
-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",
-   "Operation timed out",
-   "System 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
-glite_renewal_GetProxy(const char *jobid, char **repository_filename)
-{
-   edg_wlpr_Request request;
-   edg_wlpr_Response response;
-   int ret;
-
-   memset(&request, 0, sizeof(request));
-   memset(&response, 0, sizeof(response));
-
-   if (jobid == NULL)
-      return EINVAL;
-
-   request.command = EDG_WLPR_COMMAND_GET;
-   request.jobid = strdup(jobid);
-   if (request.jobid == NULL)
-      return ENOMEM;
-
-   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;
-}
-
-#ifdef RENEWAL_HAVE_JOBID
-int
-edg_wlpr_GetProxy(edg_wlc_JobId jobid, char **repository_filename)
-{
-   char *ji;
-   int ret;
-
-   ji = edg_wlc_JobIdUnparse(jobid);
-   if (ji == NULL)
-      return EINVAL;
-
-   ret = glite_renewal_GetProxy(ji, repository_filename);
-   free(ji);
-   return ret;
-}
-#endif /* RENEWAL_HAVE_JOBID */
diff --git a/org.glite.security.proxyrenewal/src/client.c b/org.glite.security.proxyrenewal/src/client.c
deleted file mode 100644 (file)
index 87efd78..0000000
+++ /dev/null
@@ -1,111 +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;
-   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 (strcmp(argv[optind], "start") == 0) {
-      if (proxyfile == NULL || server == NULL || jobid_str == NULL)
-        usage(1);
-      ret = glite_renewal_RegisterProxy(proxyfile, server, port, jobid_str, 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_str == NULL)
-        usage(1);
-      ret = glite_renewal_UnregisterProxy(jobid_str, 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_str == NULL)
-        usage(1);
-      ret = glite_renewal_GetProxy(jobid_str, &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 abc4809..0000000
+++ /dev/null
@@ -1,1256 +0,0 @@
-#include "renewal_locl.h"
-#include "renewd_locl.h"
-
-#include "glite/security/voms/voms_apic.h"
-
-#ident "$Header$"
-
-#define SEPARATORS ",\n"
-#define RENEWAL_START_FRACTION 0.75 /* XXX */
-#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(glite_renewal_core_context ctx, const char *s, unsigned char *digest);
-
-static int
-get_record_ext(glite_renewal_core_context ctx, FILE *fd, proxy_record *record, int *last_used_suffix);
-
-static int
-get_record(glite_renewal_core_context ctx, FILE *fd, proxy_record *record);
-
-static int
-store_record(glite_renewal_core_context ctx, char *basename, proxy_record *record);
-
-static int
-copy_file_content(glite_renewal_core_context ctx, FILE *in, FILE *out);
-
-static int
-copy_file(glite_renewal_core_context ctx, char *src, char *dst);
-
-static int
-get_base_filename(glite_renewal_core_context ctx, char *proxy_file, char **basefilename);
-
-int
-decode_record(glite_renewal_core_context ctx, char *line, proxy_record *record);
-
-int
-encode_record(glite_renewal_core_context ctx, proxy_record *record, char **line);
-
-static int
-open_metafile(glite_renewal_core_context ctx, char *proxy_file, FILE **fd);
-
-void
-free_record(glite_renewal_core_context ctx, proxy_record *record);
-
-static int
-realloc_prd_list(glite_renewal_core_context ctx, prd_list *list);
-
-/* make public: */
-static int
-edg_wlpr_GetTokenInt(glite_renewal_core_context ctx, const char *msg, const size_t msg_len,
-                     const char *key, const char *separators,
-                     int req_index, int *value);
-
-static void
-record_to_response(glite_renewal_core_context ctx, int status_code, proxy_record *record,
-                   edg_wlpr_Response *response);
-
-static int
-filename_to_response(glite_renewal_core_context ctx, char *filename, edg_wlpr_Response *response);
-
-
-
-
-static char *
-strmd5(glite_renewal_core_context ctx, 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(glite_renewal_core_context ctx, char *proxy_file, char **basefilename)
-{
-   char *subject = NULL;
-   char file[FILENAME_MAX];
-   int ret;
-
-   assert(basefilename != NULL);
-
-   ret = glite_renewal_get_proxy_base_name(ctx, proxy_file, &subject);
-   if (ret)
-      goto end;
-
-   snprintf(file, sizeof(file), "%s/%s", repository, strmd5(ctx, subject, NULL));
-   *basefilename = strdup(file); /* XXX test ENOMEM */
-   ret = 0;
-   
-end:
-   if (subject)
-      free(subject);
-   return ret;
-}
-
-static int
-copy_file_content(glite_renewal_core_context ctx, 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))) {
-        glite_renewal_log(ctx, LOG_ERR, "Reading failed: %s", strerror(errno));
-        return ret;
-      }
-      num = fwrite(buf, sizeof(*buf), num, out);
-      if ((ret = ferror(in))) {
-        glite_renewal_log(ctx, 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(glite_renewal_core_context ctx, time_t current_time, time_t start_time, time_t end_time)
-{
-   time_t remaining_life;
-   time_t life_to_lose;
-   time_t limit;
-   time_t delta;
-
-   if (RENEWAL_MIN_LIFETIME > condor_limit) {
-     limit = RENEWAL_MIN_LIFETIME;
-   } else {
-     limit = condor_limit;
-   }
-
-   limit += RENEWAL_CLOCK_SKEW;
-
-   if (current_time + limit >= end_time) {
-     /* if the proxy is too short, renew it as soon as possible */
-
-     if (current_time + condor_limit > end_time ) {
-       glite_renewal_log(ctx, LOG_ERR, "Remaining proxy lifetime fell below the value of the Condor limit!");
-     }
-
-     return 0;
-   }
-
-   remaining_life = end_time - current_time;
-
-   /* renewal should gain the jobs an extra lifetime of
-      RENEWAL_START_FRACTION (default 3/4) of the new proxy's
-      lifetime. If the time remaining on the current proxy is already
-      small then the jobs may gain an extra lifetime of more than that.
-
-      In any case, a renewal will be scheduled to happen before the
-      lifetime limit.
-
-      'life_to_lose' is the lifetime that will be lost, ie the time that
-      will still remain on the current proxy when it is renewed
-   */
-
-   life_to_lose = (1.0-RENEWAL_START_FRACTION)*60*60*DGPR_RETRIEVE_DEFAULT_HOURS;
-
-   if (life_to_lose < limit) {
-     life_to_lose = limit;
-   }
-
-   delta = life_to_lose - limit;
-
-   while( remaining_life < (limit + delta) ) {
-     delta *= (1.0-RENEWAL_START_FRACTION);
-   }
-
-   life_to_lose = limit + delta;
-
-   return (remaining_life - life_to_lose);
-}
-
-int
-get_times(glite_renewal_core_context ctx, 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) {
-      glite_renewal_log(ctx, 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) {
-      glite_renewal_log(ctx, 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) {
-      glite_renewal_log(ctx, 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;
-        }
-        glite_renewal_log(ctx, 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) {
-        glite_renewal_log(ctx, 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(ctx, 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(glite_renewal_core_context ctx, 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) {
-      glite_renewal_log(ctx, 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) {
-      glite_renewal_log(ctx, LOG_ERR, "Cannot create temporary file (%s)",
-                  strerror(errno));
-      ret = errno;
-      goto end;
-   }
-
-
-   tmp_to = fdopen(tmp_fd, "w");
-   if (tmp_to == NULL) {
-      glite_renewal_log(ctx, LOG_ERR, "Cannot associate stream with temporary file (%s)",
-                  strerror(errno));
-      unlink(tmpfile);
-      ret = errno;
-      goto end;
-   }
-
-   ret = copy_file_content(ctx, from, tmp_to);
-   fclose(tmp_to);
-   if (ret) {
-      goto end;
-   }
-
-   ret = rename(tmpfile, dst);
-   if (ret) {
-      glite_renewal_log(ctx, 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(glite_renewal_core_context ctx, 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(glite_renewal_core_context ctx, 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(glite_renewal_core_context ctx, 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(glite_renewal_core_context ctx, 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(glite_renewal_core_context ctx, 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(ctx, line, len, "suffix=", SEPARATORS, 0,
-                             &record->suffix);
-   if (ret)
-      return ret;
-
-#if 0
-   ret = edg_wlpr_GetTokenInt(ctx, line, len, "counter=", SEPARATORS, 0, 
-                             &record->counter);
-   if (ret)
-      goto end;
-#endif
-
-   ret = edg_wlpr_GetTokenInt(ctx, line, len, "unique=", SEPARATORS, 0,
-                             &record->unique);
-   if (ret)
-      goto end;
-
-   ret = edg_wlpr_GetTokenInt(ctx, 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(ctx, line, len, "next_renewal=", SEPARATORS, 0,
-                             (int *)&record->next_renewal);
-   if (ret)
-      goto end;
-
-   ret = edg_wlpr_GetTokenInt(ctx, line, len, "end_time=", SEPARATORS, 0,
-                             (int *)&record->end_time);
-   if (ret)
-      goto end;
-
-   ret = get_jobids(ctx, line, len, record);
-   if (ret)
-      goto end;
-
-end:
-   if (ret)
-      free_record(ctx, record);
-
-   return ret;
-}
-
-int
-encode_record(glite_renewal_core_context ctx, 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(glite_renewal_core_context ctx, 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;
-   int line_num = 0;
-
-   assert(record != NULL);
-   memset(&tmp_record, 0, sizeof(tmp_record));
-
-   current_time = time(NULL);
-   while (fgets(line, sizeof(line), fd) != NULL) {
-      line_num++;
-      free_record(ctx, &tmp_record);
-      p = strchr(line, '\n');
-      if (p)
-        *p = '\0';
-      ret = decode_record(ctx, line, &tmp_record);
-      if (ret) {
-        glite_renewal_log(ctx, LOG_ERR, "Skipping invalid entry at line %d", line_num);
-        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 */
-        record->suffix = tmp_record.suffix;
-        record->next_renewal = record->end_time = 0;
-        free_record(ctx, &tmp_record);
-        return 0;
-      }
-
-      /* Proxies with VOMS attributes require a separate record, which is not
-       * shared with another proxies. The same applies it the unique flag was
-       * set by the caller */
-      if (record->voms_exts || record->unique)
-        continue;
-
-      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 &&
-          current_time + condor_limit + RENEWAL_CLOCK_SKEW > tmp_record.end_time) {
-
-        /* skip expired proxy (or 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) {
-      glite_renewal_log(ctx, LOG_DEBUG, "Requested suffix %d not found in meta file",
-                  record->suffix);
-   }
-
-   free_record(ctx, &tmp_record);
-
-   return EDG_WLPR_ERROR_PROTO_PARSE_NOT_FOUND;
-}
-
-static int
-get_record(glite_renewal_core_context ctx, FILE *fd, proxy_record *record)
-{
-   return get_record_ext(ctx, fd, record, NULL);
-}
-
-static int
-store_record(glite_renewal_core_context ctx, 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];
-   int line_num = 0;
-
-   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) {
-      line_num++;
-      free_record(ctx, &tmp_record);
-      p = strchr(line, '\n');
-      if (p)
-        *p = '\0';
-      ret = decode_record(ctx, line, &tmp_record);
-      if (ret) {
-        glite_renewal_log(ctx, LOG_ERR, "Removing invalid entry at line %d in %s", line_num, basename);
-        continue;
-      }
-      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(ctx, &tmp_record.jobids);
-           tmp_record.jobids.val[tmp_record.jobids.len - 1] = 
-              strdup(record->jobids.val[i]);
-        }
-        stored = 1;
-      }
-      ret = encode_record(ctx, &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(ctx, 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(ctx, &tmp_record);
-   if (fd)
-      fclose(fd);
-   close(temp);
-   return ret;
-}
-
-static int
-open_metafile(glite_renewal_core_context ctx, 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) {
-      glite_renewal_log(ctx, LOG_ERR, "Opening meta file %s failed (%s)",
-                  meta_filename, strerror(errno));
-      return errno;
-   }
-   rewind(meta_fd);
-   *fd = meta_fd;
-   glite_renewal_log(ctx, LOG_DEBUG, "Using meta file %s", meta_filename);
-   return 0;
-}
-
-static int
-filename_to_response(glite_renewal_core_context ctx, char *filename, edg_wlpr_Response *response)
-{
-   response->filenames = malloc(2 * sizeof(*response->filenames));
-   if (response->filenames == NULL) {
-      glite_renewal_log(ctx, LOG_DEBUG, "Not enough memory");
-      return errno;
-   }
-   response->filenames[0] = strdup(filename);
-   if (response->filenames[0] == NULL) {
-      glite_renewal_log(ctx, LOG_DEBUG, "Not enough memory");
-      free(response->filenames);
-      return errno;
-   }
-   response->filenames[1] = NULL;
-   return 0;
-}
-
-static void
-record_to_response(glite_renewal_core_context ctx, 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(glite_renewal_core_context ctx, 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) {
-      glite_renewal_log(ctx, LOG_ERR, "Cannot open meta file %s (%s)",
-                  datafile, strerror(errno));
-      return errno;
-   }
-
-   while (fgets(line, sizeof(line), meta_fd) != NULL) {
-      free_record(ctx, &record);
-      p = strchr(line, '\n');
-      if (p)
-        *p = '\0';
-      ret = decode_record(ctx, 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(ctx, &record);
-           fclose(meta_fd);
-           return 0;
-        }
-      }
-   }
-   free_record(ctx, &record);
-   fclose(meta_fd);
-   return EDG_WLPR_ERROR_PROTO_PARSE_NOT_FOUND;
-}
-      
-int
-find_proxyname(glite_renewal_core_context ctx, char *jobid, char **filename)
-{
-   DIR *dir = NULL;
-   struct dirent *file;
-   int ret;
-   
-   chdir(repository);
-
-   dir = opendir(repository);
-   if (dir == NULL) {
-      glite_renewal_log(ctx, 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(ctx, file->d_name, jobid, filename);
-      if (ret == 0) {
-        closedir(dir);
-        return 0;
-      }
-   }
-   closedir(dir);
-   glite_renewal_log(ctx, LOG_ERR, "Requested proxy is not registered");
-   return EDG_WLPR_PROXY_NOT_REGISTERED;
-}
-
-#ifdef NOVOMS
-int
-find_voms_cert(glite_renewal_core_context ctx, char *file, int *present)
-{
-       *present = 0;
-       return 0;
-}
-
-#else
-int
-find_voms_cert(glite_renewal_core_context ctx, 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) {
-      glite_renewal_log(ctx, LOG_ERR, "check_voms_cert(): Cannot initialize VOMS context (VOMS_Init() failed, probably voms dir was not specified)");
-      return EDG_WLPR_ERROR_VOMS;
-   }
-
-   ret = glite_renewal_load_proxy(ctx, file, &cert, &privkey, &chain, NULL);
-   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(glite_renewal_core_context ctx, 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));
-   glite_renewal_log(ctx, LOG_DEBUG, "Registration request for %s", request->proxy_filename);
-
-   if (request->proxy_filename == NULL || request->jobid == NULL) {
-      glite_renewal_log(ctx, LOG_ERR, "Registration request doesn't contain registration information");
-      return; /*  EINVAL; */
-   }
-   umask(0177);
-
-   ret = get_base_filename(ctx, request->proxy_filename, &basename);
-   if (ret)
-      goto end;
-
-   ret = open_metafile(ctx, basename, &meta_fd);
-   if (ret)
-      goto end;
-
-   if (voms_enabled)
-     ret = find_voms_cert(ctx, 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(ctx, 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(ctx, request->proxy_filename, filename);
-      if (ret)
-        goto end;
-      ret = get_times(ctx, filename, &record);
-      if (ret)
-        goto end;
-      record.suffix = suffix;
-      ret = realloc_prd_list(ctx, &record.jobids);
-      if (ret)
-        goto end;
-      record.jobids.val[record.jobids.len - 1] = strdup(request->jobid);
-      record.unique = request->unique;
-      glite_renewal_log(ctx, LOG_DEBUG, "Created a new proxy file in repository (%s)",
-                  filename);
-   } else {
-      ret = realloc_prd_list(ctx, &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);
-      glite_renewal_log(ctx, LOG_DEBUG, "Inremented counter on %s", filename);
-   }
-
-   ret = store_record(ctx, basename, &record);
-
-end:
-   if (meta_fd) {
-      fclose(meta_fd);
-   }
-
-   if (basename)
-      free(basename);
-
-   if (ret == 0)
-      ret = filename_to_response(ctx, filename, response);
-   record_to_response(ctx, ret, &record, response);
-   free_record(ctx, &record);
-}
-
-void
-unregister_proxy(glite_renewal_core_context ctx, 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));
-   glite_renewal_log(ctx, LOG_DEBUG, "Unregistration request for %s", request->jobid);
-
-   if (request->jobid == NULL) {
-      glite_renewal_log(ctx, LOG_ERR, "Unregistration request doesn't contain needed information");
-      ret = EINVAL;
-      goto end;
-   }
-
-   if (request->proxy_filename == NULL) {
-      ret = find_proxyname(ctx, request->jobid, &request->proxy_filename);
-      if (ret)
-        goto end;
-   }
-
-   ret = get_base_filename(ctx, request->proxy_filename, &basename);
-   if (ret) {
-      goto end;
-   }
-
-   if (strncmp(request->proxy_filename, basename, strlen(basename) != 0)) {
-      glite_renewal_log(ctx, 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) {
-      glite_renewal_log(ctx, 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) {
-      glite_renewal_log(ctx, LOG_DEBUG, "Requested proxy %s is not from repository",
-                 request->proxy_filename);
-      ret = EDG_WLPR_PROXY_NOT_REGISTERED;
-      goto end;
-   }
-
-   ret = open_metafile(ctx, basename, &meta_fd);
-   if (ret) {
-      /* fill in error response */
-      return;
-   }
-
-   ret = get_record(ctx, 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) {
-      glite_renewal_log(ctx, 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) {
-      glite_renewal_log(ctx, LOG_DEBUG, "Cannot stat file %s: (%s)",
-                  request->proxy_filename, strerror(errno));
-      ret = errno;
-      goto end;
-   }
-
-   ret = store_record(ctx, 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(ctx, request->proxy_filename, response);
-   record_to_response(ctx, ret, &record, response);
-   free_record(ctx, &record);
-}
-
-void
-get_proxy(glite_renewal_core_context ctx, edg_wlpr_Request *request, edg_wlpr_Response *response)
-{
-   char *filename = NULL;
-   int ret;
-
-   memset(response, 0, sizeof(*response));
-
-   glite_renewal_log(ctx, LOG_DEBUG, "GET request for %s", request->jobid);
-   
-   if (request->jobid == NULL) {
-      glite_renewal_log(ctx, LOG_ERR, "GET request doesn't contain jobid specification");
-      ret = EINVAL;
-      goto end;
-   }
-
-   ret = find_proxyname(ctx, request->jobid, &filename);
-
-end:
-   if (ret == 0)
-      ret = filename_to_response(ctx, filename, response);
-   if (filename)
-      free(filename);
-   response->response_code = ret;
-}
-
-void
-update_db(glite_renewal_core_context ctx, 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));
-
-   glite_renewal_log(ctx, 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) {
-      glite_renewal_log(ctx, 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) {
-      glite_renewal_log(ctx, 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(ctx, &record);
-      p = strchr(line, '\n');
-      if (p)
-        *p = '\0';
-      ret = decode_record(ctx, 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(ctx, &record);
-              record.suffix = suffix;
-              record.myproxy_server = server;
-              glite_renewal_log(ctx, LOG_WARNING, "Removed expired proxy %s", cur_proxy);
-           } else
-              get_times(ctx, cur_proxy, &record);
-        } else {
-           ret = get_times(ctx, proxy, &record);
-           (ret == 0) ? rename(proxy, cur_proxy) : unlink(proxy);
-        }
-      }
-      
-      ret = encode_record(ctx, &record, &new_line);
-      if (ret)
-        goto end;
-
-      dprintf(tmp_fd, "%s\n", new_line);
-      free(new_line);
-      new_line = NULL;
-   }
-   free_record(ctx, &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(ctx, &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 206bc2f..0000000
+++ /dev/null
@@ -1,322 +0,0 @@
-#include "renewal_locl.h"
-
-#ident "$Header$"
-
-/* nread() and nwrite() never return partial data */
-static int
-nread(int sock, struct timeval *to, char *buf, size_t buf_len, size_t *read_len)
-{
-   int count;
-   size_t remain = buf_len;
-   char *cbuf = buf;
-   struct pollfd pollfds[1];
-   struct timeval before,after;
-   int ret;
-
-   if (to) {
-      gettimeofday(&before,NULL);
-   }
-
-   while (remain > 0) {
-      pollfds[0].fd = sock;
-      pollfds[0].events = POLLIN;
-      switch (poll(pollfds, 1, to ? (to->tv_sec*1000+to->tv_usec/1000) : INFTIM)) {
-        case 0:
-           ret = EDG_WLPR_ERROR_TIMEOUT;
-           goto end;
-        case -1:
-           ret = EDG_WLPR_ERROR_ERRNO;
-           goto end;
-      }
-      
-      count = read(sock, cbuf, remain);
-      if (count < 0) {
-        if (errno == EINTR)
-           continue;
-        else {
-           ret = EDG_WLPR_ERROR_ERRNO;
-           goto end;
-        }
-      } else
-        if (count == 0) {
-           *read_len = 0;
-           return 0;
-        }
-      cbuf += count;
-      remain -= count;
-   }
-   *read_len = buf_len;
-   ret = 0;
-
-end:
-   if (to) {
-      gettimeofday(&after,NULL);
-      edg_wlpr_DecrementTimeout(to, before, after);
-      if (to->tv_sec < 0) {
-        to->tv_sec = 0;
-        to->tv_usec = 0;
-      }
-   }
-
-   return ret;
-}
-
-static int
-nwrite(int sock, struct timeval *to, const char *buf, size_t buf_len)
-{
-   const char *cbuf = buf;
-   int count;
-   size_t remain = buf_len;
-   struct pollfd pollfds[1];
-   struct timeval before,after;
-   int ret;
-
-   if (to) {
-      gettimeofday(&before,NULL);
-   }
-
-   while (remain > 0) {
-      pollfds[0].fd = sock;
-      pollfds[0].events = POLLOUT;
-      switch (poll(pollfds, 1, to ? (to->tv_sec*1000+to->tv_usec/1000) : INFTIM)) {
-        case 0: ret = EDG_WLPR_ERROR_TIMEOUT;
-                goto end;
-        case -1: ret = EDG_WLPR_ERROR_ERRNO;
-                 goto end;
-      }
-                
-      count = write(sock, cbuf, remain);
-      if (count < 0) {
-        if (errno == EINTR)
-           continue;
-        else {
-           ret = EDG_WLPR_ERROR_ERRNO;
-           goto end;
-        }
-      }
-      cbuf += count;
-      remain -= count;
-   }
-   ret = 0;
-
-end:
-   if (to) {
-      gettimeofday(&after,NULL);
-      edg_wlpr_DecrementTimeout(to, before, after);
-      if (to->tv_sec < 0) {
-        to->tv_sec = 0;
-        to->tv_usec = 0;
-      }
-   }
-
-   return ret;
-}
-
-int
-edg_wlpr_Read(int sock, struct timeval *timeout, char **buf, size_t *buf_len)
-{
-   int ret;
-   unsigned char length[4];
-   size_t len;
-
-   ret = nread(sock, timeout, length, 4, &len);
-   if (ret) {
-      *buf_len = 0;
-      return ret;
-   }
-   if (len != 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, timeout, *buf, *buf_len, &len);
-   if (ret)
-      return ret;
-
-   if (len != *buf_len) {
-      free(*buf);
-      *buf_len = 0;
-      return EDG_WLPR_ERROR_UNEXPECTED_EOF; /* XXX */
-   }
-
-   return 0;
-}
-
-int
-edg_wlpr_Write(int sock, struct timeval *timeout, char *buf, size_t buf_len)
-{
-   unsigned char length[4];
-   int ret;
-
-   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 ((ret = nwrite(sock, timeout, length, 4)) != 0 ||
-       (ret = nwrite(sock, timeout, buf, buf_len)) != 0) 
-       return ret;
-   
-   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;
-}
-
-int
-edg_wlpr_DecrementTimeout(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);
-}
diff --git a/org.glite.security.proxyrenewal/src/renew.c b/org.glite.security.proxyrenewal/src/renew.c
deleted file mode 100644 (file)
index 29105d2..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-#include "renewal_locl.h"
-#include "renewd_locl.h"
-
-#include "glite/security/voms/voms_apic.h"
-
-#ident "$Header$"
-
-#define RENEWAL_COUNTS_MAX     1000    /* the slave daemon exits after that many attemtps */
-
-extern char *repository;
-extern char *cadir;
-extern char *vomsdir;
-extern int voms_enabled;
-static int received_signal = -1, die = 0;
-
-static void
-check_renewal(glite_renewal_core_context ctx, char *datafile, int force_renew, int *num_renewed);
-
-static int
-renew_proxy(glite_renewal_core_context ctx, proxy_record *record, char *basename, char **new_proxy);
-
-static void
-register_signal(int signal);
-
-static void
-register_signal(int signal)
-{
-      received_signal = signal;
-      switch ((received_signal = signal)) {
-        case SIGINT:
-        case SIGTERM:
-        case SIGQUIT:
-           die = signal;
-           break;
-        default:
-           break;
-      }
-}
-
-static int
-renew_proxy(glite_renewal_core_context ctx, proxy_record *record, char *basename, char **new_proxy)
-{
-   char repository_file[FILENAME_MAX];
-   int ret = -1;
-   char *p = NULL;
-   char *server = NULL;
-   unsigned int port = 0;
-
-   snprintf(repository_file, sizeof(repository_file),"%s.%d",
-           basename, record->suffix);
-
-   if (record->myproxy_server)
-      server = strdup(record->myproxy_server);
-
-   if (server && (p = strchr(server, ':'))) {
-      *p++ = '\0';
-      ret = edg_wlpr_DecodeInt(p, &port);
-   }
-
-   ret = glite_renewal_core_renew(ctx, server, port, repository_file, new_proxy);
-   if (ret)
-      goto end;
-
-   ret = 0;
-
-end:
-   if (server)
-      free(server);
-
-   return ret;
-}
-
-static void
-check_renewal(glite_renewal_core_context ctx, char *datafile, int force_renew, int *num_renewed)
-{
-   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);
-
-   *num_renewed = 0;
-
-   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) {
-      glite_renewal_log(ctx, 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) {
-      glite_renewal_log(ctx, LOG_ERR, "Cannot open meta file %s (%s)",
-                  datafile, strerror(errno));
-      return;
-   }
-
-   current_time = time(NULL);
-   glite_renewal_log(ctx, LOG_DEBUG, "Reading metafile %s", datafile);
-
-   while (fgets(line, sizeof(line), meta_fd) != NULL) {
-      free_record(ctx, &record);
-      p = strchr(line, '\n');
-      if (p)
-        *p = '\0';
-      ret = decode_record(ctx, line, &record);
-      if (ret)
-        continue; /* XXX exit? */
-      if (record.jobids.len == 0) /* no jobid registered for this proxy */
-        continue;
-      if (current_time + RENEWAL_CLOCK_SKEW >= record.end_time ||
-         record.next_renewal <= current_time ||
-         force_renew) {
-        ret = EDG_WLPR_PROXY_EXPIRED;
-        if ( record.end_time + RENEWAL_CLOCK_SKEW >= current_time) {
-           /* only try renewal if the proxy hasn't already expired */
-           ret = renew_proxy(ctx, &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(ctx, &record);
-           return;
-        }
-        request.entries = tmp;
-        request.entries[num] = entry;
-        request.entries[num+1] = NULL;
-        num++;
-      }
-   }
-   free_record(ctx, &record);
-
-   if (num > 0) {
-      ret = edg_wlpr_RequestSend(&request, &response);
-      if (ret != 0)
-        glite_renewal_log(ctx, LOG_ERR,
-                     "Failed to send update request to master (%d)", ret);
-      else if (response.response_code != 0)
-        glite_renewal_log(ctx, 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);
-
-   *num_renewed = num;
-
-   return;
-}
-
-int renewal(glite_renewal_core_context ctx, int force_renew, int *num_renewed)
-{
-   DIR *dir = NULL;
-   struct dirent *file;
-   FILE *fd;
-   int num = 0;
-
-   glite_renewal_log(ctx, LOG_DEBUG, "Starting renewal process");
-
-   *num_renewed = 0;
-
-   if (chdir(repository)) {
-      glite_renewal_log(ctx, LOG_ERR, "Cannot access repository directory %s (%s)",
-                  repository, strerror(errno));
-      return errno;
-   }
-
-   dir = opendir(repository);
-   if (dir == NULL) {
-      glite_renewal_log(ctx, 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) {
-        glite_renewal_log(ctx, LOG_ERR, "Cannot open meta file %s (%s)",
-                     file->d_name, strerror(errno));
-        continue;
-      }
-      check_renewal(ctx, file->d_name, force_renew, &num);
-      *num_renewed += num;
-      fclose(fd);
-   }
-   closedir(dir);
-   glite_renewal_log(ctx, LOG_DEBUG, "Finishing renewal process");
-   return 0;
-}
-
-void
-watchdog_start(glite_renewal_core_context ctx)
-{
-   struct sigaction sa;
-   int force_renewal;
-   int count = 0, num;
-   
-   memset(&sa,0,sizeof(sa));
-   sa.sa_handler = register_signal;
-   sigaction(SIGUSR1, &sa, NULL);
-   sigaction(SIGINT,&sa,NULL);
-   sigaction(SIGQUIT,&sa,NULL);
-   sigaction(SIGTERM,&sa,NULL);
-   sigaction(SIGPIPE,&sa,NULL);
-
-   while (count < RENEWAL_COUNTS_MAX && !die) {
-       received_signal = -1;
-       sleep(60 * 5);
-       force_renewal = (received_signal == SIGUSR1) ? 1 : 0;
-       if (die)
-         break;
-       /* XXX uninstall signal handler ? */
-       renewal(ctx, force_renewal, &num);
-       count += num;
-   }
-   glite_renewal_log(ctx, LOG_DEBUG, "Terminating after %d renewal attempts", count);
-   exit(0);
-}
diff --git a/org.glite.security.proxyrenewal/src/renewal_core.c b/org.glite.security.proxyrenewal/src/renewal_core.c
deleted file mode 100644 (file)
index 3bd2d1d..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-#include <myproxy.h>
-#include <myproxy_delegation.h>
-
-#include "renewal_core.h"
-#include "renewal_locl.h"
-#include "renewd_locl.h"
-
-static const char rcsid[] = "$Id$";
-
-int
-glite_renewal_load_proxy(glite_renewal_core_context ctx, const char *cur_file, X509 **cert, EVP_PKEY **priv_key,
-           STACK_OF(X509) **chain, globus_gsi_cred_handle_t *cur_proxy)
-{
-   globus_result_t result;
-   globus_gsi_cred_handle_t proxy = NULL;
-   int ret;
-
-   result = globus_gsi_cred_handle_init(&proxy, NULL);
-   if (result) {
-      fprintf(stderr, "globus_gsi_cred_handle_init() failed\n");
-      goto end;
-   }
-
-   result = globus_gsi_cred_read_proxy(proxy, (char *) cur_file);
-   if (result) {
-      fprintf(stderr, "globus_gsi_cred_read_proxy() failed\n");
-      goto end;
-   }
-
-   if (cert) {
-      result = globus_gsi_cred_get_cert(proxy, cert);
-      if (result) {
-        fprintf(stderr, "globus_gsi_cred_get_cert() failed\n");
-        goto end;
-      }
-   }
-
-   if (priv_key) {
-      result = globus_gsi_cred_get_key(proxy, priv_key);
-      if (result) {
-        fprintf(stderr, "globus_gsi_cred_get_key() failed\n");
-        goto end;
-      }
-   }
-
-   if (chain) {
-      result = globus_gsi_cred_get_cert_chain(proxy, chain);
-      if (result) {
-        fprintf(stderr, "globus_gsi_cred_get_cert_chain() failed\n");
-        goto end;
-      }
-   }
-
-   if (cur_proxy) {
-      *cur_proxy = proxy;
-      proxy = NULL;
-   }
-
-   ret = 0;
-   
-end:
-   if (proxy)
-      globus_gsi_cred_handle_destroy(proxy);
-   if (result)
-      ret = EDG_WLPR_ERROR_GENERIC;
-
-   return ret;
-}
-
-int
-glite_renewal_get_proxy_base_name(glite_renewal_core_context ctx, const char *file, char **name)
-{
-   X509 *cert = NULL;
-   EVP_PKEY *key = NULL;
-   STACK_OF(X509) *chain = NULL;
-   X509_NAME *subject = NULL;
-   int ret;
-   globus_result_t result;
-
-   ret = glite_renewal_load_proxy(ctx, file, &cert, &key, &chain, NULL);
-   if (ret)
-      return ret;
-
-   subject = X509_NAME_dup(X509_get_subject_name(cert));
-
-   sk_X509_insert(chain, cert, 0);
-   cert = NULL;
-
-   result = globus_gsi_cert_utils_get_base_name(subject, chain);
-   if (result) {
-      glite_renewal_log(ctx, 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;
-}
-
-int
-glite_renewal_core_renew(glite_renewal_core_context ctx,
-                         const char * myproxy_server,
-                        unsigned int myproxy_port,
-                         const char *current_proxy,
-                         char **new_proxy)
-{
-   char tmp_proxy[FILENAME_MAX];
-   int tmp_fd;
-   int ret = -1;
-   char *p;
-   const char *server = NULL;
-   myproxy_socket_attrs_t *socket_attrs;
-   myproxy_request_t      *client_request;
-   myproxy_response_t     *server_response;
-   char *renewed_proxy;
-   int voms_exts;
-
-   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);
-
-   glite_renewal_log(ctx, LOG_DEBUG, "Trying to renew proxy in %s", current_proxy);
-
-   snprintf(tmp_proxy, sizeof(tmp_proxy), "%s.myproxy.XXXXXX", current_proxy);
-   tmp_fd = mkstemp(tmp_proxy);
-   if (tmp_fd == -1) {
-      glite_renewal_log(ctx, LOG_ERR, "Cannot create temporary file (%s)",
-                   strerror(errno));
-      return errno;
-   }
-
-   ret = glite_renewal_get_proxy_base_name(ctx, current_proxy, &client_request->username);
-   if (ret)
-      goto end;
-
-   voms_exts = glite_renewal_check_voms_attrs(ctx, current_proxy);
-
-   client_request->proxy_lifetime = 60 * 60 * DGPR_RETRIEVE_DEFAULT_HOURS;
-
-   server = (myproxy_server) ? myproxy_server : socket_attrs->pshost;
-   if (server == NULL) {
-      glite_renewal_log(ctx, LOG_ERR, "No myproxy server specified");
-      ret = EINVAL;
-      goto end;
-   }
-   socket_attrs->pshost = strdup(server);
-
-   socket_attrs->psport = (myproxy_port) ? myproxy_port : MYPROXY_SERVER_PORT;
-
-   verror_clear();
-   ret = myproxy_get_delegation(socket_attrs, client_request, (char *) current_proxy,
-                               server_response, tmp_proxy);
-   if (ret == 1) {
-      ret = EDG_WLPR_ERROR_MYPROXY;
-      glite_renewal_log(ctx, LOG_ERR, "Error contacting MyProxy server for proxy %s: %s",
-                  current_proxy, verror_get_string());
-      verror_clear();
-      goto end;
-   }
-
-   renewed_proxy = tmp_proxy;
-
-   if (voms_exts) {
-      char tmp_voms_proxy[FILENAME_MAX];
-      int tmp_voms_fd;
-      
-      snprintf(tmp_voms_proxy, sizeof(tmp_voms_proxy), "%s.voms.XXXXXX",
-              current_proxy);
-      tmp_voms_fd = mkstemp(tmp_voms_proxy);
-      if (tmp_voms_fd == -1) {
-        glite_renewal_log(ctx, LOG_ERR, "Cannot create temporary file (%s)",
-                     strerror(errno));
-        ret = errno;
-        goto end;
-      }
-
-      ret = glite_renewal_renew_voms_creds(ctx, current_proxy, renewed_proxy, tmp_voms_proxy);
-      close(tmp_voms_fd);
-      if (ret) {
-        unlink(tmp_voms_proxy);
-        goto end;
-      }
-
-      renewed_proxy = tmp_voms_proxy;
-      unlink(tmp_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;
-}
-
-int
-glite_renewal_core_init_ctx(glite_renewal_core_context *context)
-{
-   glite_renewal_core_context p = NULL;
-
-   *context = NULL;
-
-   p = calloc(1, sizeof(*p));
-   if (p == NULL)
-      return ENOMEM;
-
-   p->log_level = LOG_ERR;
-   p->log_dst = GLITE_RENEWAL_LOG_SYSLOG;
-
-   *context = p;
-   return 0;
-}
-
-int
-glite_renewal_core_destroy_ctx(glite_renewal_core_context context)
-{
-   if (context == NULL)
-      return 0;
-   if (context->err_message);
-      free(context->err_message);
-   free(context);
-   return 0;
-}
-
-void
-glite_renewal_log(glite_renewal_core_context context, int dbg_level, const char *format, ...)
-{
-   va_list ap;
-
-   if (context->err_message) {
-      free(context->err_message);
-      context->err_message = NULL;
-   }
-   
-   /* cannot handle the %m format argument specific for syslog() */
-   va_start(ap, format);
-   vasprintf(&context->err_message, format, ap);
-   va_end(ap);
-
-   if (dbg_level > context->log_level)
-      return;
-
-   switch (context->log_dst) {
-      case GLITE_RENEWAL_LOG_STDOUT:
-        printf("%s\n", context->err_message);
-        break;
-      case GLITE_RENEWAL_LOG_SYSLOG:
-        syslog(dbg_level, "%s", context->err_message);
-        break;
-      case GLITE_RENEWAL_LOG_NONE:
-      default:
-        break;
-   }
-
-   return;
-}
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 256eb26..0000000
+++ /dev/null
@@ -1,148 +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 <sys/wait.h>
-#include <poll.h>
-#ifndef INFTIM
-#define INFTIM (-1)
-#endif
-
-#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 */
-
-#define RENEWAL_CLOCK_SKEW (5 * 60)
-
-#define DGPR_RETRIEVE_DEFAULT_HOURS 10
-
-#define GLITE_PR_TIMEOUT_DEFAULT       120
-
-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, struct timeval *timeout, char **buf, size_t *buf_len);
-
-int
-edg_wlpr_Write(int sock, struct timeval *timeout, 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);
-
-int
-edg_wlpr_DecrementTimeout(struct timeval *timeout, struct timeval before, struct timeval after);
-
-#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 3c8512c..0000000
+++ /dev/null
@@ -1,609 +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 *cert = NULL;
-char *key = NULL;
-char *vomsconf = NULL;
-
-static volatile int die = 0, child_died = 0;
-double default_timeout = 0;
-
-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' },
-   { "cert",        required_argument, NULL, 't' },
-   { "key",         required_argument, NULL, 'k' },
-   { NULL, 0, NULL, 0 }
-};
-
-typedef struct {
-   edg_wlpr_Command code;
-   void (*handler) (glite_renewal_core_context ctx, 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(glite_renewal_core_context ctx, char *progname);
-
-static int
-do_listen(glite_renewal_core_context ctx, char *socket_name, int *sock);
-
-static int
-encode_response(glite_renewal_core_context ctx, edg_wlpr_Response *response, char **msg);
-
-static command_table *
-find_command(glite_renewal_core_context ctx, edg_wlpr_Command code);
-
-static int
-proto(glite_renewal_core_context ctx, int sock);
-
-static int
-doit(glite_renewal_core_context ctx, int sock);
-
-static int
-decode_request(glite_renewal_core_context ctx, const char *msg, const size_t msg_len, edg_wlpr_Request *request);
-
-int
-start_watchdog(glite_renewal_core_context ctx, pid_t *pid);
-
-static void
-catchsig(int sig)
-{
-   switch (sig) {
-      case SIGINT:
-      case SIGTERM:
-      case SIGQUIT:
-        die = sig;
-        break;
-      case SIGCHLD:
-        child_died = 1;
-        break;
-      default:
-        break;
-   }
-}
-
-static command_table *
-find_command(glite_renewal_core_context ctx, edg_wlpr_Command code)
-{
-   command_table *c;
-
-   for (c = commands; c->code; c++) {
-      if (c->code == code)
-          return c;
-   }
-   return NULL;
-}
-
-static int
-proto(glite_renewal_core_context ctx, int sock)
-{
-   char  *buf = NULL;
-   size_t  buf_len;
-   int  ret;
-   edg_wlpr_Response  response;
-   edg_wlpr_Request  request;
-   command_table  *command;
-   struct timeval timeout;
-
-   memset(&request, 0, sizeof(request));
-   memset(&response, 0, sizeof(response));
-
-   timeout.tv_sec = (long) default_timeout;
-   timeout.tv_usec = (long) ((default_timeout - timeout.tv_sec) * 1e6);
-
-   ret = edg_wlpr_Read(sock, &timeout, &buf, &buf_len);
-   if (ret) {
-      glite_renewal_log(ctx, LOG_ERR, "Error reading from client: %s",
-                   edg_wlpr_GetErrorString(ret));
-      return ret;
-   }
-
-   ret = decode_request(ctx, buf, buf_len, &request);
-   free(buf);
-   if (ret)
-      goto end;
-
-   /* XXX check request (protocol version, ...) */
-
-   command = find_command(ctx, request.command);
-   if (command == NULL) {
-      ret = EDG_WLPR_ERROR_UNKNOWN_COMMAND;
-      glite_renewal_log(ctx, LOG_ERR, "Received unknown command (%d)", request.command);
-      goto end;
-   }
-
-   glite_renewal_log(ctx, LOG_INFO, "Received command code %d for proxy %s and jobid %s",
-                request.command,
-               request.proxy_filename ? request.proxy_filename : "(unspecified)",
-               request.jobid ? request.jobid : "(unspecified)");
-
-   command->handler(ctx, &request, &response);
-
-   ret = encode_response(ctx, &response, &buf);
-   if (ret)
-      goto end;
-
-   ret = edg_wlpr_Write(sock, &timeout, buf, strlen(buf) + 1);
-   free(buf);
-   if (ret) {
-      glite_renewal_log(ctx, 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(glite_renewal_core_context ctx, int sock)
-{
-   int newsock;
-   struct sockaddr_un client_addr;
-   int client_addr_len = sizeof(client_addr);
-   int flags;
-
-   while (!die) {
-
-      if (child_died) {
-        int pid, newpid, ret;
-
-        while ((pid=waitpid(-1,NULL,WNOHANG))>0)
-           ;
-        ret = start_watchdog(ctx, &newpid);
-        if (ret)
-           return ret;
-        glite_renewal_log(ctx, LOG_DEBUG, "Renewal slave process re-started");
-        child_died = 0;
-        continue;
-      }
-
-      newsock = accept(sock, (struct sockaddr *) &client_addr, &client_addr_len);
-      if (newsock == -1) {
-        if (errno != EINTR)
-           glite_renewal_log(ctx, LOG_ERR, "accept() failed");
-         continue;
-      }
-      glite_renewal_log(ctx, LOG_DEBUG, "Got connection");
-
-      flags = fcntl(newsock, F_GETFL, 0);
-      if (fcntl(newsock, F_SETFL, flags | O_NONBLOCK) < 0) {
-        glite_renewal_log(ctx, LOG_ERR, "Can't set O_NONBLOCK mode (%s), closing.\n",
-                     strerror(errno));
-        close(newsock);
-        continue;
-      }
-        
-      proto(ctx, newsock);
-
-      glite_renewal_log(ctx, LOG_DEBUG, "Connection closed");
-      close(newsock);
-   }
-   glite_renewal_log(ctx, LOG_DEBUG, "Terminating on signal %d\n",die);
-   return 0;
-}
-
-static int
-decode_request(glite_renewal_core_context ctx, 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) {
-      glite_renewal_log(ctx, 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) {
-      glite_renewal_log(ctx, LOG_ERR, "Protocol error reading command specification: %s",
-                   edg_wlpr_GetErrorString(ret));
-      goto err;
-   }
-
-   ret = edg_wlpr_DecodeInt(value, (int *)(&request->command));
-   if (ret) {
-      glite_renewal_log(ctx, LOG_ERR, "Received non-numeric command specification (%s)",
-                   value);
-      free(value);
-      goto err;
-   }
-   free(value);
-
-   if (find_command(ctx, request->command) == NULL) {
-      glite_renewal_log(ctx, 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) {
-      glite_renewal_log(ctx, 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) {
-      glite_renewal_log(ctx, 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) {
-      glite_renewal_log(ctx, 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(glite_renewal_core_context ctx, 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(glite_renewal_core_context ctx, 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(glite_renewal_core_context ctx, 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) {
-      glite_renewal_log(ctx, LOG_ERR, "socket(): %s", strerror(errno));
-      return errno;
-   }
-
-   ret = bind(s, (struct sockaddr *)&my_addr, sizeof(my_addr));
-   if (ret == -1) {
-      glite_renewal_log(ctx, LOG_ERR, "bind(): %s", strerror(errno));
-      close(s);
-      return errno;
-   }
-
-   ret = listen(s, 50);
-   if (ret == -1) {
-      glite_renewal_log(ctx, LOG_ERR, "listen(): %s", strerror(errno));
-      close(s);
-      return errno;
-   }
-
-   *sock = s;
-   return 0;
-}
-
-int
-start_watchdog(glite_renewal_core_context ctx, pid_t *pid)
-{
-   pid_t p;
-
-   switch ((p = fork())) {
-      case -1:
-        glite_renewal_log(ctx, LOG_ERR, "fork() failed: %s",
-                     strerror(errno));
-        return errno;
-      case 0:
-        watchdog_start(ctx);
-        exit(0); 
-        break;
-      default:
-        *pid = p;
-        return 0;
-   }
-   /* not reachable */
-   exit(0);
-}
-
-int main(int argc, char *argv[])
-{
-   int   sock;
-   char  *progname;
-   int   opt;
-   int   fd;
-   char  sockname[PATH_MAX];
-   int   ret;
-   pid_t pid;
-   struct sigaction    sa;
-   const char *s = NULL;
-   glite_renewal_core_context ctx = NULL;
-
-   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:t:k:", opts, NULL)) != EOF)
-      switch (opt) {
-        case 'h': usage(ctx, 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 't': cert = optarg; break;
-        case 'k': key = optarg; break;
-        case '?': usage(ctx, progname); return 1;
-      }
-
-   if (optind < argc) {
-      usage(ctx, progname);
-      exit(1);
-   }
-
-   ret = glite_renewal_core_init_ctx(&ctx);
-   if (ret) {
-      fprintf(stderr, "Cannot initialize context\n");
-      exit(1);
-   }
-   if (debug) {
-      ctx->log_level = LOG_DEBUG;
-      ctx->log_dst = GLITE_RENEWAL_LOG_STDOUT;
-   }
-   ctx->voms_conf = vomsconf;
-
-   if (chdir(repository)) {
-      glite_renewal_log(ctx, LOG_ERR, "Cannot access repository directory %s (%s)",
-                  repository, strerror(errno));
-      exit(1);
-   }
-
-   globus_module_activate(GLOBUS_GSI_CERT_UTILS_MODULE);
-   globus_module_activate(GLOBUS_GSI_PROXY_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 (cert)
-      setenv("X509_USER_CERT", cert, 1);
-
-   if (key)
-      setenv("X509_USER_KEY", key, 1);
-
-   if (cadir)
-      setenv("X509_CERT_DIR", cadir, 1);
-
-   s = getenv("GLITE_PR_TIMEOUT");
-   default_timeout = s ? atof(s) : GLITE_PR_TIMEOUT_DEFAULT;
-
-   memset(&sa,0,sizeof(sa));
-   sa.sa_handler = catchsig;
-   sigaction(SIGINT,&sa,NULL);
-   sigaction(SIGQUIT,&sa,NULL);
-   sigaction(SIGTERM,&sa,NULL);
-   sigaction(SIGCHLD,&sa,NULL);
-   sigaction(SIGPIPE,&sa,NULL);
-
-   ret = start_watchdog(ctx, &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(ctx, sockname, &sock);
-   if (ret)
-      return 1;
-   glite_renewal_log(ctx, LOG_DEBUG, "Listening at %s", sockname);
-
-   ret = doit(ctx, sock);
-
-   close(sock);
-   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 489e909..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-#ifndef RENEWALD_LOCL_H
-#define RENEWALD_LOCL_H
-
-#ident "$Header$"
-
-#include <globus_gsi_credential.h>
-#include <globus_gsi_proxy.h>
-#include <globus_gsi_cert_utils_constants.h>
-
-#include "renewal.h"
-#include "renewal_core.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;
-
-/* commands */
-void
-register_proxy(glite_renewal_core_context ctx, edg_wlpr_Request *request, edg_wlpr_Response *response);
-
-void
-unregister_proxy(glite_renewal_core_context ctx, edg_wlpr_Request *request, edg_wlpr_Response *response);
-
-void
-get_proxy(glite_renewal_core_context ctx, edg_wlpr_Request *request, edg_wlpr_Response *response);
-
-void
-update_db(glite_renewal_core_context ctx, edg_wlpr_Request *request, edg_wlpr_Response *response);
-
-int
-get_times(glite_renewal_core_context ctx, char *proxy_file, proxy_record *record);
-
-void
-watchdog_start(glite_renewal_core_context ctx);
-
-void
-glite_renewal_log(glite_renewal_core_context ctx, int dbg_level, const char *format, ...);
-
-int
-decode_record(glite_renewal_core_context ctx, char *line, proxy_record *record);
-
-int
-encode_record(glite_renewal_core_context ctx, proxy_record *record, char **line);
-
-void
-free_record(glite_renewal_core_context ctx, proxy_record *record);
-
-int
-glite_renewal_load_proxy(glite_renewal_core_context ctx, const char *filename, X509 **cert, EVP_PKEY **privkey,
-           STACK_OF(X509) **chain, globus_gsi_cred_handle_t *proxy);
-
-int
-glite_renewal_get_proxy_base_name(glite_renewal_core_context ctx, const char *file, char **subject);
-
-int
-glite_renewal_renew_voms_creds(glite_renewal_core_context ctx, const char *cur_file, const char *renewed_file, const char *new_file);
-
-int
-glite_renewal_check_voms_attrs(glite_renewal_core_context ctx, const char *proxy);
-
-#endif /* RENEWALD_LOCL_H */
diff --git a/org.glite.security.proxyrenewal/src/voms.c b/org.glite.security.proxyrenewal/src/voms.c
deleted file mode 100644 (file)
index 687d93b..0000000
+++ /dev/null
@@ -1,356 +0,0 @@
-#include "renewal_locl.h"
-#include "renewd_locl.h"
-
-#include <string.h>
-#include <openssl/x509.h>
-
-#include "glite/security/voms/voms_apic.h"
-
-#include "glite/security/voms/newformat.h"
-
-char * Decode(const char *, int, int *);
-char **listadd(char **, char *, int);
-
-static int
-generate_proxy(glite_renewal_core_context ctx, globus_gsi_cred_handle_t cur_proxy,
-               X509_EXTENSION *voms_extension, const char *new_file)
-{
-   globus_result_t result;
-   globus_gsi_proxy_handle_t proxy_handle = NULL;
-   globus_gsi_cred_handle_t proxy = NULL;
-   EVP_PKEY *cur_proxy_priv_key = NULL;
-   X509 *new_cert = NULL;
-   X509 *voms_cert = NULL;
-   globus_gsi_cert_utils_cert_type_t proxy_type;
-
-   result = globus_gsi_proxy_handle_init(&proxy_handle, NULL);
-   if (result) {
-      glite_renewal_log(ctx, LOG_ERR, "globus_gsi_proxy_handle_init() failed\n");
-      goto end;
-   }
-
-   result = globus_gsi_cred_get_key(cur_proxy, &cur_proxy_priv_key);
-   if (result) {
-      glite_renewal_log(ctx, LOG_ERR, "globus_gsi_cred_get_key() failed\n");
-      goto end;
-   }
-
-   /* Create and sign a new proxy */
-   result = globus_gsi_cred_get_cert_type(cur_proxy, &proxy_type);
-   if (result) {
-      glite_renewal_log(ctx, LOG_ERR, "globus_gsi_cred_get_cert_type() failed\n");
-      goto end;
-   }
-
-   result = globus_gsi_proxy_handle_set_type(proxy_handle, proxy_type);
-   if (result) {
-      glite_renewal_log(ctx, LOG_ERR, "globus_gsi_proxy_handle_set_type() failed\n");
-      goto end;
-   }
-
-   result = globus_gsi_proxy_create_signed(proxy_handle, cur_proxy, &proxy);
-   if (result) {
-      glite_renewal_log(ctx, LOG_ERR, "globus_gsi_proxy_handle_init() failed\n");
-      goto end;
-   }
-
-   /* Get the new proxy */
-   result = globus_gsi_cred_get_cert(proxy, &new_cert);
-   if (result) {
-      glite_renewal_log(ctx, LOG_ERR, "globus_gsi_cred_get_cert() failed\n");
-      goto end;
-   }
-
-   /* The Globus API doesn't allow to store custom X.509 extensions */
-   voms_cert = X509_dup(new_cert);
-   if (voms_cert->cert_info->extensions == NULL)
-      voms_cert->cert_info->extensions = sk_X509_EXTENSION_new_null();
-   sk_X509_EXTENSION_push(voms_cert->cert_info->extensions, voms_extension);
-
-   /* Openssl ensures that memory containing old signature structures is unallocated */
-#if 0
-   X509_sign(voms_cert, cur_proxy_priv_key, proxy_handle->attrs->signing_algorithm);
-#else
-   X509_sign(voms_cert, cur_proxy_priv_key, EVP_md5());
-#endif
-
-   /* And put the cert back, older one is unallocated by the function */
-   result = globus_gsi_cred_set_cert(proxy, voms_cert);
-   if (result) {
-      glite_renewal_log(ctx, LOG_ERR, "globus_gsi_cred_set_cert() failed\n");
-      goto end;
-   }
-
-   result = globus_gsi_cred_write_proxy(proxy, (char *)new_file);
-
-end:
-
-   return 0;
-}
-
-static int
-my_VOMS_Export(glite_renewal_core_context ctx, void *buf, int buf_len, X509_EXTENSION **extension)
-{
-   AC *ac = NULL;
-   unsigned char *p, *pp;
-   AC **voms_attrs = NULL;
-
-   p = pp = buf;
-   ac = d2i_AC(NULL, &p, buf_len+1);
-   if (ac == NULL) {
-      glite_renewal_log(ctx, LOG_ERR, "d2i_AC() failed\n");
-      return 1;
-   }
-
-   voms_attrs = (AC **)listadd((char **)voms_attrs, (char *)ac, sizeof(AC *));
-
-   *extension = X509V3_EXT_conf_nid(NULL, NULL, OBJ_txt2nid("acseq"),
-                                  (char*)voms_attrs);
-   return 0;
-}
-
-static int
-create_voms_command(glite_renewal_core_context ctx, struct vomsdata *vd, struct voms **voms_cert, char **command)
-{
-   int voms_error, ret;
-   struct data **attribs;
-
-#if 0
-   VOMS_ResetOrder(vd, &voms_error);
-   for (i = 2; i < argc; i++) {
-      ret = VOMS_Ordering(argv[i], vd, &voms_error);
-      if (ret == 0) {
-        glite_renewal_log(ctx, LOG_ERR, "VOMS_Ordering() failed\n"); 
-        return 1;
-      }
-   }
-#endif
-
-   if (voms_cert == NULL || *voms_cert == NULL || (*voms_cert)->std == NULL) {
-      glite_renewal_log(ctx, LOG_ERR, "Invalid VOMS certificate\n");
-      return 1;
-   }
-
-   attribs = (*voms_cert)->std;
-
-   if (strcmp (attribs[0]->role, "NULL") == 0 )
-      ret = asprintf(command, "G%s", attribs[0]->group);
-   else
-      ret = asprintf(command, "B%s:%s", attribs[0]->group, attribs[0]->role);
-
-end:
-
-   return 0;
-}
-
-static int
-renew_voms_cert(glite_renewal_core_context ctx, struct vomsdata *vd, struct voms **voms_cert, 
-                char **buf, size_t *buf_len)
-{
-   int voms_error = 0, i, ret, voms_version;
-   struct contactdata **voms_contacts = NULL;
-   char *command = NULL;
-
-   voms_contacts = VOMS_FindByVO(vd, (*voms_cert)->voname, ctx->voms_conf, NULL, &voms_error);
-
-   if (voms_contacts == NULL) {
-      glite_renewal_log(ctx, LOG_ERR, "VOMS_FindByVO() failed\n");
-      return 1;
-   }
-
-   ret = create_voms_command(ctx, vd, voms_cert, &command);
-
-   /* XXX the lifetime should be taken from the older proxy */
-   ret = VOMS_SetLifetime(60*60*12, vd, &voms_error);
-
-   /* XXX iterate over all servers on the list on errors */
-   ret = VOMS_ContactRaw(voms_contacts[0]->host, voms_contacts[0]->port,
-                        voms_contacts[0]->contact, command, 
-                        (void**) buf, buf_len, &voms_version,
-                        vd, &voms_error);
-   if (ret == 0) {
-      glite_renewal_log(ctx, LOG_ERR, "VOMS_Contact() failed\n");
-      return 1;
-   }
-
-   VOMS_DeleteContacts(voms_contacts);
-
-   if (command)
-      free(command);
-
-   return 0;
-}
-
-static int
-renew_voms_certs(glite_renewal_core_context ctx, const char *cur_file, const char *renewed_file, const char *new_file)
-{
-   globus_gsi_cred_handle_t cur_proxy = NULL;
-   globus_gsi_cred_handle_t new_proxy = NULL;
-   struct vomsdata *vd = NULL;
-   struct voms **voms_cert = NULL;
-   int voms_err, ret;
-   X509 *cert = NULL;
-   STACK_OF(X509) *chain = NULL;
-   char *buf = NULL;
-   size_t buf_len = 0;
-   X509_EXTENSION *extension = NULL;
-   char *old_env_proxy = getenv("X509_USER_PROXY");
-   char *old_env_cert = getenv("X509_USER_CERT");
-   char *old_env_key = getenv("X509_USER_KEY");
-
-   setenv("X509_USER_PROXY", cur_file, 1);
-   setenv("X509_USER_CERT", renewed_file, 1);
-   setenv("X509_USER_KEY", renewed_file, 1);
-
-   ret = glite_renewal_load_proxy(ctx, cur_file, &cert, NULL, &chain, &cur_proxy);
-   if (ret)
-      goto end;
-
-   vd = VOMS_Init(NULL, NULL);
-   if (vd == NULL) {
-      glite_renewal_log(ctx, LOG_ERR, "VOMS_Init() failed\n");
-      return 1;
-   }
-
-   ret = VOMS_Retrieve(cert, chain, RECURSE_CHAIN, vd, &voms_err);
-   if (ret == 0) {
-      if (voms_err == VERR_NOEXT) {
-        /* no VOMS cred, no problem; continue */
-        /* XXX this part shouldn't be reachable, this call is only called
-         * if the proxy does contain VOMS attributes */
-        glite_renewal_log(ctx, LOG_ERR, "No VOMS attributes found in proxy %s\n", cur_file);
-        ret = 0;
-        goto end;
-      } else {
-        glite_renewal_log(ctx, LOG_ERR, "Cannot get VOMS certificate(s) from proxy");
-        ret = 1;
-        goto end;
-      }
-   }
-
-   /* XXX make sure this loop can really work for multiple voms certificates
-    * embedded in the proxy */
-   for (voms_cert = vd->data; voms_cert && *voms_cert; voms_cert++) {
-      char *tmp, *ptr;
-      size_t tmp_len;
-
-      ret = renew_voms_cert(ctx, vd, voms_cert, &tmp, &tmp_len);
-      if (ret)
-        goto end;
-      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 = my_VOMS_Export(ctx, buf, buf_len, &extension);
-   if (ret)
-      goto end;
-
-   ret = glite_renewal_load_proxy(ctx, renewed_file, NULL, NULL, NULL, &new_proxy);
-   if (ret)
-      goto end;
-
-   ret = generate_proxy(ctx, new_proxy, extension, new_file);
-
-end:
-   (old_env_proxy) ? setenv("X509_USER_PROXY", old_env_proxy, 1) :
-                    unsetenv("X509_USER_PROXY");
-   (old_env_cert) ? setenv("X509_USER_CERT", old_env_cert, 1) :
-                    unsetenv("X509_USER_CERT");
-   (old_env_key) ? setenv("X509_USER_KEY", old_env_key, 1) :
-                   unsetenv("X509_USER_KEY");
-
-   if (cert)
-      X509_free(cert);
-   if (chain)
-      sk_X509_pop_free(chain, X509_free);
-   if (vd)
-      VOMS_Destroy(vd);
-   if (cur_proxy)
-      globus_gsi_cred_handle_destroy(cur_proxy);
-   if (new_proxy)
-      globus_gsi_cred_handle_destroy(new_proxy);
-   if (buf)
-      free(buf);
-
-   return ret;
-}
-
-int
-glite_renewal_renew_voms_creds(glite_renewal_core_context ctx, const char *cur_file, const char *renewed_file, const char *new_file)
-{
-   return renew_voms_certs(ctx, cur_file, renewed_file, new_file);
-}
-
-int
-glite_renewal_check_voms_attrs(glite_renewal_core_context ctx, const char *proxy)
-{
-   int ret, voms_err, present;
-   X509 *cert = NULL;
-   STACK_OF(X509) *chain = NULL;
-   struct vomsdata *vd = NULL;
-
-   ret = glite_renewal_load_proxy(ctx, proxy, &cert, NULL, &chain, NULL);
-   if (ret)
-      return 0;
-
-   vd = VOMS_Init(NULL, NULL);
-   if (vd == NULL) {
-      present = 0;
-      goto end;
-   }
-
-   ret = VOMS_Retrieve(cert, chain, RECURSE_CHAIN, vd, &voms_err);
-   if (ret == 0) {
-      present = 0;
-      goto end;
-   }
-
-   present = 1;
-
-end:
-   if (cert)
-      X509_free(cert);
-   if (chain)
-      sk_X509_pop_free(chain, X509_free);
-   if (vd)
-      VOMS_Destroy(vd);
-
-   return present;
-}
-
-#if 0
-int
-main(int argc, char *argv[])
-{
-   int ret;
-   const char *current_proxy = "/tmp/x509up_u11930";
-   const char *renewed_proxy = "/tmp/proxy";
-
-   if (argc > 1)
-      current_proxy = argv[1];
-   if (argc > 2)
-      renewed_proxy = argv[2];
-
-   if (globus_module_activate(GLOBUS_GSI_PROXY_MODULE) != GLOBUS_SUCCESS ||
-       globus_module_activate(GLOBUS_GSI_CERT_UTILS_MODULE) != GLOBUS_SUCCESS) {
-       glite_renewal_log(ctx, LOG_ERR, "[%d]: Unable to initialize Globus modules\n", getpid());
-       return 1;
-   }
-
-   ret = renew_voms_certs(current_proxy, renewed_proxy);
-
-   return 0;
-}
-#endif
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 d12e8c2..0000000
+++ /dev/null
@@ -1,104 +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$
-       Revision 1.1.1.1  2004/07/21 18:16:57  eronchie
-       Moved out exception from org.glite.wms.common/src/utilitiesY
-       
-
--->
-
-<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}"/>
-       <property file="${module.build.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 398817a..0000000
+++ /dev/null
@@ -1,127 +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.13  2006/03/20 15:29:52  eronchie
-#       Increased version
-#
-#       Revision 1.12  2005/10/15 07:54:17  eronchie
-#       Increased version
-#
-#       Revision 1.11  2005/09/20 10:20:52  eronchie
-#       Started merged with 1.4
-#
-#       Revision 1.10  2004/12/10 07:31:35  eronchie
-#       Increased version
-#
-#       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], [3.1.1])
-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 19ca7c7..0000000
+++ /dev/null
@@ -1,138 +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 ;  } catch (std::exception &ex){ glite::wmsutils::exception::Exception exc( __FILE__ , LINE,  METHOD, 0, "Standard exception: " + std::string(ex.what()) ); 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) */
-       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:
-               /** Empty constructor*/
-               Exception();
-               /**  integer error code representing the cause of the error */
-               int                   error_code;
-               /**  string exception message representation*/
-               std::string          error_message ;
-               /**  line number where the exception was raised */
-               int                   line;
-               /** The name of the file where the exception was raised */
-               std::string          source_file;
-               /** the name of the exception */
-               std::string          exception_name;
-               /** the name of the method where the expceiton was raised */
-               std::string          method_name ;
-               /** a string representation of the stacktrace */
-               std::string          stack;
-               /** the actual internal stacktrace representation */
-               std::vector< std::string> stack_strings ;
-               /** the name of the ancestor exception */
-               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.number b/org.glite.wms-utils.exception/project/build.number
deleted file mode 100644 (file)
index 95bc38e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#Sat Oct 15 02:08:14 CEST 2005
-module.build=154
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 f4aef51..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-build.package.summary="files for gLite wms utils exception"
-build.package.description="exception api"
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 40c3916..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-module.version=3.1.1
-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 546f253..0000000
+++ /dev/null
@@ -1,124 +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();
-
-  return error_message.c_str();
-};
-
-string Exception::getExceptionName(){
-   return exception_name;
-};
-
-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
-   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.exception/test/Makefile.am b/org.glite.wms-utils.exception/test/Makefile.am
deleted file mode 100755 (executable)
index a972450..0000000
+++ /dev/null
@@ -1,33 +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
-## *
-## *********************************************************************
-
-EXCEPTION_LIBS = $(top_builddir)/src/libglite_wmsutils_exception.la
-
-TESTS = glite-wmsutils-exception
-
-check_PROGRAMS = $(TESTS)
-
-glite_wmsutils_exception_SOURCES = exception_cu_suite.cpp \
-       exception_cu_suite.h \
-       exception_cu_main.cpp
-       
-glite_wmsutils_exception_LDADD =  \
-       $(GLITE_WMSUTILS_EXCEPTION_LIBS) \
-       $(GLOBUS_GSS_THR_LIBS) \
-       $(EXCEPTION_LIBS) \
-       $(CPPUNIT_LIBS) 
-
-AM_CPPFLAGS =  \
-       -I$(top_srcdir)/src \
-       -I$(top_srcdir)/test \
-       $(GLITE_CFLAGS) \
-       $(GLOBUS_THR_CFLAGS) \
-       $(CPPUNIT_CFLAGS)
-
-MAINTAINERCLEANFILES = Makefile.in *~
-
diff --git a/org.glite.wms-utils.exception/test/exception_cu_main.cpp b/org.glite.wms-utils.exception/test/exception_cu_main.cpp
deleted file mode 100644 (file)
index 182df4c..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <iostream>
-#include <fstream>
-
-#include "exception_cu_suite.h"
-
-#include <cppunit/TestResult.h>
-#include <cppunit/TestRunner.h>
-#include <cppunit/TestResultCollector.h>
-#include <cppunit/TextOutputter.h>
-#include <cppunit/XmlOutputter.h>
-
-using namespace CppUnit;
-using namespace std;
-
-int main (int argc , char** argv)
-{
-       std::ofstream xml("./cppUnit_output.xml",ios::app);
-       
-       CppUnit::TestResult controller;
-       CppUnit::TestResultCollector result;
-       controller.addListener( &result );
-       
-       TestRunner runner;
-       runner.addTest(Exception_test::suite());
-       runner.run(controller);
-       
-       CppUnit::XmlOutputter outputter( &result, xml );
-       CppUnit::TextOutputter outputter2( &result, std::cerr );
-       outputter.write();
-       outputter2.write();
-       
-       return result.wasSuccessful() ? 0 : 1 ;
-}
diff --git a/org.glite.wms-utils.exception/test/exception_cu_suite.cpp b/org.glite.wms-utils.exception/test/exception_cu_suite.cpp
deleted file mode 100644 (file)
index f749af9..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-#include "exception_cu_suite.h"
-#include "glite/wmsutils/exception/Exception.h"
-#include <string>
-#include <vector>
-
-using namespace CppUnit;
-using namespace std;
-using namespace glite::wmsutils::exception;
-
-void Exception_test::setUp()
-{}
-
-void Exception_test::tearDown()
-{}
-
-
-void Exception_test::constructor_case()
-{
-  
-  //constructor class name, line number, method name, code, exception name
-  glite::wmsutils::exception::Exception exc_5("TEST_Class", 3, "test_method", 1, "exception_test");
-  
-  //constructor class name, method name, code, exception name
-  glite::wmsutils::exception::Exception exc_4("TEST_Class", "test_method", 1, "exception_test");
-  
-  CPPUNIT_ASSERT(exc_5.getExceptionName() == "exception_test");
-  CPPUNIT_ASSERT(exc_5.getCode() == 1);
-}
-
-void Exception_test::tostring_case()
-{
-   cout<<"TEST TO STRING METHODS"<<endl;
-   glite::wmsutils::exception::Exception exc_5("TEST_Class", 3, "test_method", 1, "exception_test");
-   cout << exc_5.dbgMessage() << endl;
-   cout << exc_5.printStackTrace() << endl;
-   exc_5.log("exception_file");
-
-   cout<<"END TEST TO STRING"<<endl;
-}
-
-void Exception_test::stackTrace_case()
-{
-   glite::wmsutils::exception::Exception exc_5("TEST_Class", 3, "test_method", 1, "exception_test");
-   
-   exc_5.push_back("Second_Class", 5, "second_method");
-   
-   vector<string> msgvec = exc_5.getStackTrace();
-   
-   for (int i=0; i<msgvec.size(); i++)
-   {
-       cout << msgvec[i] << endl;
-   }
-   
-}
-
-
diff --git a/org.glite.wms-utils.exception/test/exception_cu_suite.h b/org.glite.wms-utils.exception/test/exception_cu_suite.h
deleted file mode 100644 (file)
index 7eb7da6..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#include<iostream>
-#include<string>
-#include<pthread.h>
-                                   
-#include <cppunit/extensions/HelperMacros.h>
-
-
-class Exception_test : public CppUnit::TestFixture {
-
-  CPPUNIT_TEST_SUITE(Exception_test);
-    CPPUNIT_TEST(constructor_case);
-    CPPUNIT_TEST(tostring_case);
-    CPPUNIT_TEST(stackTrace_case);     
-  CPPUNIT_TEST_SUITE_END();
-
-
-public:
-
-       void setUp();
-       void tearDown();
-  
-    void constructor_case();
-    void tostring_case();
-    void stackTrace_case();
-
-};
-
-
-
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 44c110c..0000000
+++ /dev/null
@@ -1,104 +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$
-       Revision 1.4  2004/07/21 17:53:36  eronchie
-       Moved out org.glite.wms.jobid from org.glite.wms and put in org.glite.wms-utils
-       
-
--->
-
-<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}"/>
-       <property file="${module.build.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 e255849..0000000
+++ /dev/null
@@ -1,147 +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.19  2006/03/20 15:30:43  eronchie
-#       Increased version
-#
-#       Revision 1.18  2005/10/15 07:55:00  eronchie
-#       Increased version
-#
-#       Revision 1.17  2005/09/20 10:41:49  eronchie
-#       Started merging with rc1.4
-#
-#       Revision 1.16  2004/12/10 07:33:42  eronchie
-#       Increased version
-#
-#       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], [3.1.1])
-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"])
-
-if test "$have_globus" = "no"; then
-  AC_MSG_RESULT(["Please verify GLOBUS package"])
-fi
-
-if test "$have_globus" = "no"; then
-  AC_MSG_ERROR([Cannot continue building])
-fi                                                                                
-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 8d0b7b4..0000000
+++ /dev/null
@@ -1,126 +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;
-    /** casting operator */
-    operator const edg_wlc_JobId() const { return m_JobId; }
-    /** Operator "=" create a deep copy of the JobId instance*/
-    JobId & operator=(JobId const &);
-    /** Operator "=" create a deep copy of the JobId instance*/
-    JobId & operator=(const edg_wlc_JobId &);
-    /** Retrieve the internal id reference 
-    *@return the JobId internal reference used by some LB methods */
-    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;
-    /** Operator "<"*/
-    friend bool operator<(JobId const& lhs, JobId const& rhs);
-    /** Operator "=="*/
-    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.number b/org.glite.wms-utils.jobid/project/build.number
deleted file mode 100644 (file)
index 1acc27a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#Sat Oct 15 02:12:40 CEST 2005
-module.build=152
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 f5a9095..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-build.package.summary="files for gLite wms utils jobid"
-build.package.description="jobid api"
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 40c3916..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-module.version=3.1.1
-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.glite.wms-utils.jobid/test/Makefile.am b/org.glite.wms-utils.jobid/test/Makefile.am
deleted file mode 100755 (executable)
index 5111c30..0000000
+++ /dev/null
@@ -1,48 +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
-## *
-## *********************************************************************
-
-JOBID_LIBS = $(top_builddir)/src/jobid/libglite_wmsutils_jobid.la 
-CJOBID_LIBS = $(top_builddir)/src/jobid/libglite_wmsutils_cjobid.la
-
-TESTS = glite-wmsutils-jobid \
-               glite-wmsutils-manipulation
-
-check_PROGRAMS = $(TESTS)
-
-glite_wmsutils_jobid_SOURCES = jobid_cu_suite.cpp \
-       jobid_cu_suite.h \
-       jobid_cu_main.cpp
-       
-glite_wmsutils_jobid_LDADD =  \
-       $(GLITE_WMSUTILS_EXCEPTION_LIBS) \
-       $(GLOBUS_GSS_THR_LIBS) \
-       $(CPPUNIT_LIBS) \
-       $(JOBID_LIBS) \
-       $(CJOBID_LIBS)
-       
-glite_wmsutils_manipulation_SOURCES = manipulation_cu_suite.cpp \
-       manipulation_cu_suite.h \
-       manipulation_cu_main.cpp
-       
-glite_wmsutils_manipulation_LDADD =  \
-       $(GLITE_WMSUTILS_EXCEPTION_LIBS) \
-       $(GLOBUS_GSS_THR_LIBS) \
-       $(CPPUNIT_LIBS) \
-       $(JOBID_LIBS) \
-       $(CJOBID_LIBS)
-
-
-AM_CPPFLAGS = -I$(top_srcdir)/interface \
-       -I$(top_srcdir)/src \
-       -I$(top_srcdir)/test \
-       $(GLITE_CFLAGS) \
-       $(GLOBUS_THR_CFLAGS) \
-       $(CPPUNIT_CFLAGS)
-
-MAINTAINERCLEANFILES = Makefile.in *~
-
diff --git a/org.glite.wms-utils.jobid/test/jobid_cu_main.cpp b/org.glite.wms-utils.jobid/test/jobid_cu_main.cpp
deleted file mode 100644 (file)
index 770e306..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <iostream>
-#include <fstream>
-
-#include "jobid_cu_suite.h"
-
-#include <cppunit/TestResult.h>
-#include <cppunit/TestRunner.h>
-#include <cppunit/TestResultCollector.h>
-#include <cppunit/TextOutputter.h>
-#include <cppunit/XmlOutputter.h>
-
-using namespace CppUnit;
-using namespace std;
-
-int main (int argc , char** argv)
-{
-       std::ofstream xml("./cppUnit_output.xml",ios::app);
-       
-       CppUnit::TestResult controller;
-       CppUnit::TestResultCollector result;
-       controller.addListener( &result );
-       
-       TestRunner runner;
-       runner.addTest(Jobid_test::suite());
-       runner.run(controller);
-       
-       CppUnit::XmlOutputter outputter( &result, xml );
-       CppUnit::TextOutputter outputter2( &result, std::cerr );
-       outputter.write();
-       outputter2.write();
-       
-       return result.wasSuccessful() ? 0 : 1 ;
-}
diff --git a/org.glite.wms-utils.jobid/test/jobid_cu_suite.cpp b/org.glite.wms-utils.jobid/test/jobid_cu_suite.cpp
deleted file mode 100644 (file)
index ebe04da..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-#include "jobid_cu_suite.h"
-
-
-using namespace CppUnit;
-using namespace std;
-using namespace glite::wmsutils::jobid;
-
-
-void Jobid_test::setUp()
-{}
-
-void Jobid_test::tearDown()
-{}
-
-void Jobid_test::Constructor_case()
-{
-       //EMPTY CONSTRUCTOR
-       JobId empty;
-       
-       CPPUNIT_ASSERT(empty.isSet()==false);
-       
-       //create a string with cjobid
-       string bkserver="grid012g.cnaf.infn.it";
-       edg_wlc_JobId jobid;
-       int bkport=6000;
-       int ok=edg_wlc_JobIdCreate(bkserver.c_str(), bkport, &jobid);
-       CPPUNIT_ASSERT(ok == 0);
-   if (ok==0) 
-       { 
-               string jobstring=edg_wlc_JobIdUnparse(jobid);
-               
-       //STRING CONSTRUCTOR
-       JobId stringCons(jobstring);
-       
-       //EDG_WLC CONSTRUCTOR
-       JobId edg_wlc_Cons(jobid);
-       
-       //test copy constructor 
-       JobId copycon(stringCons);
-       
-       CPPUNIT_ASSERT(stringCons.isSet());
-               CPPUNIT_ASSERT(edg_wlc_Cons.isSet());
-               CPPUNIT_ASSERT(copycon.isSet());
-               
-               //test =
-               JobId testequal;
-               testequal=stringCons;
-               CPPUNIT_ASSERT(testequal.isSet());
-               
-               JobId testoperator;
-               testoperator=jobid;
-               CPPUNIT_ASSERT(testoperator.isSet());
-                       
-               edg_wlc_JobId testget = edg_wlc_Cons.getId();
-               char *server;
-               unsigned int port;
-               edg_wlc_JobIdGetServerParts(testget, &server, &port);
-               string serverstring = server;
-               CPPUNIT_ASSERT(port==bkport);
-               CPPUNIT_ASSERT(serverstring==bkserver);
-       } 
-       
-       CPPUNIT_ASSERT_THROW( JobId stringwrong("grid012"), WrongIdException);
-}
-
-void Jobid_test::Clear_case()
-{
-       JobId *element;
-       string jobstring="https://grid012g.cnaf.infn.it:6000/qaKyEoV3G144rmoyXeW6QA";
-       CPPUNIT_ASSERT_NO_THROW(element= new JobId(jobstring));
-
-       CPPUNIT_ASSERT(element->isSet());
-       element->clear();
-       CPPUNIT_ASSERT(element->isSet()==false);
-       delete element;
-}
-
-void Jobid_test::SetandGet_case()
-{
-       JobId element;
-       string lbserver="grid012g.cnaf.infn.it";
-       int port=6000;
-       string unique ="qaKyEoV3G144rmoyXeW6QA";
-       element.setJobId(lbserver, port, unique);
-       
-       string server=element.getServer();
-       lbserver=lbserver+":6000";
-       
-       CPPUNIT_ASSERT(server==lbserver);
-       string lonely=element.getUnique();
-       CPPUNIT_ASSERT(lonely==unique);
-       
-       string descr=element.toString();
-       cout << "!!! BEGIN TEST toString() METHOD!!!"<< endl;
-       cout << descr <<endl;
-       cout << "!!! END TEST toString() METHOD!!!"<< endl;
-       
-       JobId wrongelement;
-       CPPUNIT_ASSERT_THROW(string server=wrongelement.getServer(), EmptyIdException);
-       CPPUNIT_ASSERT_THROW(string server=wrongelement.getUnique(), EmptyIdException);
-       
-}
diff --git a/org.glite.wms-utils.jobid/test/jobid_cu_suite.h b/org.glite.wms-utils.jobid/test/jobid_cu_suite.h
deleted file mode 100644 (file)
index 526fe6f..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#include<iostream>
-#include<string>
-#include<pthread.h>
-                                   
-#include <cppunit/extensions/HelperMacros.h>
-
-#include "glite/wmsutils/jobid/JobId.h"
-#include "glite/wmsutils/jobid/cjobid.h"
-#include "glite/wmsutils/jobid/JobIdExceptions.h"
-
-class Jobid_test : public CppUnit::TestFixture {
-
-  CPPUNIT_TEST_SUITE(Jobid_test);
-       
-       CPPUNIT_TEST(Constructor_case);
-       CPPUNIT_TEST(Clear_case);
-       CPPUNIT_TEST(SetandGet_case);
-       
-  CPPUNIT_TEST_SUITE_END();
-
-
-public:
-
-       void setUp();
-       void tearDown();
-
-       void Constructor_case();
-       void Clear_case();
-       void SetandGet_case();
-
-};
-
-
-
diff --git a/org.glite.wms-utils.jobid/test/manipulation_cu_main.cpp b/org.glite.wms-utils.jobid/test/manipulation_cu_main.cpp
deleted file mode 100644 (file)
index 07d2914..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <iostream>
-#include <fstream>
-
-#include "manipulation_cu_suite.h"
-
-#include <cppunit/TestResult.h>
-#include <cppunit/TestRunner.h>
-#include <cppunit/TestResultCollector.h>
-#include <cppunit/TextOutputter.h>
-#include <cppunit/XmlOutputter.h>
-
-using namespace CppUnit;
-using namespace std;
-
-int main (int argc , char** argv)
-{
-       std::ofstream xml("./cppUnit_output.xml",ios::app);
-       
-       CppUnit::TestResult controller;
-       CppUnit::TestResultCollector result;
-       controller.addListener( &result );
-       
-       TestRunner runner;
-       runner.addTest(Manipulation_test::suite());
-       runner.run(controller);
-       
-       CppUnit::XmlOutputter outputter( &result, xml );
-       CppUnit::TextOutputter outputter2( &result, std::cerr );
-       outputter.write();
-       outputter2.write();
-       
-       return result.wasSuccessful() ? 0 : 1 ;
-}
diff --git a/org.glite.wms-utils.jobid/test/manipulation_cu_suite.cpp b/org.glite.wms-utils.jobid/test/manipulation_cu_suite.cpp
deleted file mode 100644 (file)
index a6a69d8..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#include "manipulation_cu_suite.h"
-
-
-using namespace CppUnit;
-using namespace std;
-using namespace glite::wmsutils::jobid;
-
-
-void Manipulation_test::setUp()
-{}
-
-void Manipulation_test::tearDown()
-{}
-
-void Manipulation_test::to_fromfile_case()
-{
-       JobId element;
-       
-       string lbserver="grid012g.cnaf.infn.it";
-       int port=6000;
-       string unique ="qaKyEoV3G144rmoyXeW6QA";
-       element.setJobId(lbserver, port, unique);
-       
-       string filename=to_filename(element);
-       
-       JobId newelement = from_filename(filename);
-       
-       string reduced = get_reduced_part(element, 7);
-
-       string newreduced = get_reduced_part(newelement, 7);
-       
-       CPPUNIT_ASSERT(reduced==newreduced);
-}
-
diff --git a/org.glite.wms-utils.jobid/test/manipulation_cu_suite.h b/org.glite.wms-utils.jobid/test/manipulation_cu_suite.h
deleted file mode 100644 (file)
index 287b902..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#include<iostream>
-#include<string>
-#include<pthread.h>
-                                   
-#include <cppunit/extensions/HelperMacros.h>
-
-#include "glite/wmsutils/jobid/JobId.h"
-#include "glite/wmsutils/jobid/manipulation.h"
-
-class Manipulation_test : public CppUnit::TestFixture {
-
-  CPPUNIT_TEST_SUITE(Manipulation_test);
-       
-       CPPUNIT_TEST(to_fromfile_case);
-       
-  CPPUNIT_TEST_SUITE_END();
-
-
-public:
-
-       void setUp();
-       void tearDown();
-
-       void to_fromfile_case();
-
-};
-
-
-
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 28c8d2c..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-* Wed Aug  6 2006 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.3.4 ====
-* Mon Jul 17 2006 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Add Shibboleth handling from Joseph Dada's branch to
-  mod_gridsite in main GridSite tree.
-* Tue Jun 27 2006 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Merge delegation services back into core.
-- Add OCSP options
-* Thu Jun 22 2006 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Lots of additions to SiteCast/SlashGrid, including
-  /grid/local/ filesystem with DNs from gridmapdir
-- GridSiteCastAlias now allows any URL scheme (gsiftp,
-  xrootd, ...) not just HTTP(S).
-- Replace static gridsite.spec with make-gridsite-spec
-* Fri Jun  9 2006 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Add patch from Jan Pospisil <honik@kma.zcu.cz> to
-  Makefile, to allow standalone building of libraries.
-- Include code for June 2006 version of delegation
-  protocol (ie userproxy.pem rather than usercert.pem
-  and userkey.pem)
-* Thu Jun  8 2006 Andrew McNab <Andrew.McNab@man.ac.uk>
-- SiteCast support in SlashGrid
-* Mon Jun  5 2006 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.3.1 ====
-* Sun May 26 2006 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Include SlashGrid code, and in gridsite.spec etc
-- Add sample fuse.spec to docs for use with SlashGrid
-* Fri May 26 2006 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.3.0 ====
-* Mon Apr 24 2006 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Reworked SSL session caching: passcodes directory now
-  because /var/www/sessions by default, and also used
-  to cache credentials according to SSL Session ID.
-* Mon Apr 10 2006 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Patch from Alberto di Meglio <alberto.di.meglio@cern.ch>
-  to allow use of relocated httpd include files.
-* Mon Apr  3 2006 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Use dist for building tar balls
-* Mon Apr  3 2006 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.1.19 ====
-* Fri Mar 31 2006 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Final tidy up for gLite 3.1
-* Fri Mar 31 2006 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.1.18 ====
-* Wed Mar 29 2006 Andrew McNab <Andrew.McNab@man.ac.uk>
-- New proxy destroy and time functions. 
-* Tue Mar 28 2006 Shiv Kaushal <shiv@hep.man.ac.uk>
-- Fixed bug in GACL admin interface that would cause
-  internal server erorr sometimes when adding new 
-  entries to and ACL.
-* Sat Mar 25 2006 Shiv Kaushal <shiv@hep.man.ac.uk>
-- Change delegation header to Proxy-Delegation-Service
-  instead of Grst-
-* Wed Mar 22 2006 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Add GRSTx509MakeDelegationID() to grst_x509.c
-- Include code for new style delegation proxy storage
-* Fri Mar 17 2006 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Associate ldconfig %post in spec with -shared RPM
-* Thu Mar 16 2006 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Fixes for 200/201 error pages produced by Apache
-- Fixes for onetime passcode non-removal if HTTPS
-- Include new multi-RPM spec file: gridsite-shared,
-  gridsite-devel, gridsite-apache, gridsite-commands
-  (replacing htcp) and gridsite-gsexec
-* Fri Mar 03 2006 Shiv Kaushal <shiv@hep.man.ac.uk>
-- Modify GridSiteDelegationURI directive to insert HTTP 
-  headers instead of modifying HTML
-* Mon Feb 6 2006 Shiv Kaushal <shiv@hep.man.ac.uk>
-- Add GridSiteDelegationURI directive to mod_gridsite
-  to allow Firefox extension to locate delegation service
-* ==== GridSite version 1.1.17 ====
-* Thu Jan 12 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Add 5 minute window for VOMS attributes valid slightly
-  in the future.
-- Include Content-Range PUT support in mod_gridsite,
-  adapted from mod_dav by David O Callaghan
-- Return 201 Created when PUT creates a file
-* Mon Dec 5 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Change GRIDHTTP_ONETIME to GRIDHTTP_PASSCODE 
-- Remove onetime=yes default from mod_gridsite
-- Update gridsite.spec and Makefile for gridsite-copy.cgi
-* Wed Nov 16 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.1.16 ====
-* Wed Nov 16 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Add -fPIC option to Makefile for IA64, as suggested
-  by Andreas Unterkircher.
-* Wed Oct 12 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.1.15 ====
-* Wed Oct 12 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Fix for older OpenSSL to grst_x509.c from
-  Zoltan.Farkas <Zoltan.Farkas@cern.ch>
-* Wed Oct 12 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.1.14 ====
-* Tue Oct 11 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Modify VOMS AC parsing to handle multiple ACs inside
-  the same X.509 AC extension.
-* Mon Oct 10 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.1.13 ====
-* Mon Oct 10 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Add target_gname patch to gsexec from
-  Gerben Venekamp <venekamp@nikhef.nl>
-* Thu Oct 6 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Fix session reuse with Shared-Memory SSL Session
-  Cache bug #8856 in mod_gridsite.
-- Add SiteCast support to file copying in htcp.
-* Tue Oct 4 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Move User, Config, Admin and Install guides from 
-  doc directory into GridSite Wiki.
-- Create/update man pages for htcp, mod_gridsite and
-  gsexec to be distributed with source/binaries.
-* Mon Oct 3 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Fix to gsexec GRST_CRED_0/SSL_CLIENT_S_DN bug found
-  by Ian Stokes-Rees <i.stokes-rees1@PHYSICS.OX.AC.UK>
-* Fri Sep 30 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Add SiteCast ping (NOP) support to htcp
-* Thu Sep 29 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Add SiteCast support to mod_gridsite (file location
-  discovery via UDP multicast of HTCP messages.)
-* Wed Sep 21 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Add ports 777 and 488 to example httpd.conf files in
-  docs. See http://www.gridsite.org/wiki/IP_Ports
-* Tue Sep 13 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.1.12 ====
-* Tue Sep 13 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Fix bug #10031 submitted by Fabrizio Pacini 
-  <fabrizio.pacini@cern.ch> (invalid free in 
-  GRSTgaclAclLoadFile if ACL format not valid.)
-* Mon Sep 12 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Accept GRIDHTTP_ONETIME when passed in HTTP query
-  (still overridden by a GRIDHTTP_ONETIME in a cookie.)
-* Sat Sep 10 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Fix problem with attempted upgrades to GridHTTP when
-  already on the HTTP virtual server.
-* Fri Sep 9 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- GRST_DESTINATION_TRANSLATED and GRST_DESTINATION_PERM
-  environment variables, for use with CGI-based COPY.
-- Rework GridHTTP (ex-Downgrade) code to store method
-  and URI with permission, rather than credentials.
-- Restrict use of GridSiteOnetimesDir to main server.
-* Fri Aug 26 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Fix for HTTP PUT lack-of-truncation bug found by 
-  Mike Jones, and support for HTTP/WebDAV MOVE.
-- Add MOVE support to htcp and update htcp manpage.
-- Unset CURLOPT_SSL_VERIFYPEER in htcp etc when using
-  --noverify option.
-* Fri Jun 10 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.1.11 ====
-* Fri Jun 10 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Tidy up gsexec vs GridSiteDiskMode
-* Fri Jun 10 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.1.10 ====
-* Wed Jun 8 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Add GridSiteDiskMode Apache directive to set file
-  permissions.
-- Add GridSiteExecMethod and GridSiteUserGroup to 
-  configure suexec or extended gsexec functionality.
-* Thu Jun 2 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- HTML improvements for Bug #4083
-- Note that GridSite currently doesn't work with SHM
-  SSL session cache, in httpd-*.conf and config guide.
-- Add GridSiteExecMethod for use with gsexec
-* Thu May 26 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Include gsexec, a drop-in replacement for suexec,
-  which can do suexec execution of CGI programs or
-  pool-account mapping based on client DN.
-* Tue May 24 2005 Shiv Kaushal <shiv@hep.man.ac.uk>
-- Add XACML support to GACL code in libgridsite.
-* Tue May 24 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.1.9 ====
-* Mon Apr 25 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Avoid build problems when using pre-0.9.7 OpenSSL
-  (ie with Globus compatibility.)
-* Mon Apr 25 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.1.8 ====
-* Mon Feb 28 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Fix to GRSTgaclUndenyPerm in gridsite.h (bug #7135)
-  from Marco Sottilaro <marco.sottilaro@datamat.it>
-* Mon Feb 28 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.1.7 ====
-* Thu Feb 24 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Add more sanity checking (signatures, dates, issuer,)
-  holder) to VOMS attribute parser.
-* Mon Feb 21 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Add bugfix for Bug #6357 from Fabrizio Pacini 
-  <fabrizio.pacini@cern.ch> to fix delegation proxy
-  cache names in OpenSSL 0.9.7.
-* Sun Feb 20 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Add basic VOMS support (signature checking not yet
-  in) for X.509 Attribute Certificates.
-* Tue Feb 8 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.1.6 ====
-* Tue Feb 8 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Include GRSTx509MakeProxyFileName() and 
-  GRSTx509StringToChain() (code to used hashes in cached
-  proxy file names.) Bug #6357
-- Change ordering of output proxy file produced by 
-  GRSTx509CacheProxy so proxy private key is the 2nd PEM
-  encoded block (rather than at the end.) Bug #6365
-- Add libgridsite_globus[.so|.a] in preparation for
-  separate Globus OpenSSL and system OpenSSL versions
-* Tue Feb 8 2005 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.1.5 ====
-* Tue Dec 14 2004 Andrew McNab <Andrew.McNab@man.ac.uk>
-- Patch from Daniel Kouril <kouril@ics.muni.cz> to allow
-  switching Globus vs system OpenSSL libraries/headers.
-* Tue Dec 14 2004 Andrew McNab <Andrew.McNab@man.ac.uk>
-- ==== GridSite version 1.1.4 ====
-* 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 4943047..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-BUILDING/INSTALLING GRIDSITE
-============================
-
-For more detailed instructions, see the Installation and Build 
-pages in the GridSite Wiki http://www.gridsite.org/wiki/
-
-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 befd74b..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-Copyright (c) 2002-5, 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-2005 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 df81f32..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-See INSTALL for build and installation instructions, and the
-man pages for reference information.
-
-The GridSite Wiki at http://www.gridsite.org/wiki/ has guides
-( http://www.gridsite.org/wiki/Category:Guides ) and cookbook 
-examples ( http://www.gridsite.org/wiki/Category:Cookbooks )
diff --git a/org.gridsite.core/VERSION b/org.gridsite.core/VERSION
deleted file mode 100644 (file)
index 907cf98..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-MAJOR_VERSION=1
-MINOR_VERSION=1.3
-PATCH_VERSION=1.3.4
-VERSION=$(PATCH_VERSION)
diff --git a/org.gridsite.core/build.xml b/org.gridsite.core/build.xml
deleted file mode 100644 (file)
index 0f47b59..0000000
+++ /dev/null
@@ -1,294 +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.12  2005/05/23 13:54:53  dimeglio
-       Added load of build.number file
-
-       Revision 1.11  2005/02/16 14:14:39  dimeglio
-       Added patch to use globus compilation flags also in the RPMS
-       
-       Revision 1.10  2004/12/17 09:11:43  dimeglio
-       Added local tag targets (because of special naming rules here)
-       
-       Revision 1.9  2004/12/17 09:02:49  dimeglio
-       Removed redefinition of global.prefix
-       
-       Revision 1.8  2004/12/17 00:32:50  dimeglio
-       Fixed global.prefix
-       
-       Revision 1.7  2004/12/03 14:49:59  dimeglio
-       Added OPENSSL_FLAGS and _LIBS options
-       
-       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}"/>
-       <property file="${module.build.file}"/>
-       
-       <!-- ===============================================
-                 Public common targets
-            =============================================== -->
-       
-       <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="libonly"/>
-                       <then>
-                               <property name="buildtarget" value="build-lib"/>
-                       </then>
-                       <else>
-                               <property name="buildtarget" value="build"/>
-                       </else>
-               </if>
-               <if>
-                       <isset property="build.make.arguments"/>         
-                       <then>
-                               <!-- Call make default compile target -->       
-                               <make target="${buildtarget}" dir="${module.src.dir}" failonerror="${failonerror}" args="${build.make.arguments}"/>
-                       </then>          
-                       <else>   
-                               <!-- Call make default compile target -->       
-                               <make target="${buildtarget}" 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="libonly"/>
-                       <then>
-                               <property name="installtarget" value="install-lib"/>
-                       </then>
-                       <else>
-                               <property name="installtarget" value="install"/>
-                       </else>
-               </if>
-               <if>
-                       <isset property="build.make.arguments"/>         
-                       <then>
-                               <!-- Call make default compile target -->       
-                               <make target="${installtarget}" dir="${module.src.dir}" failonerror="${failonerror}" args="${build.make.arguments}"/>
-                       </then>          
-                       <else>   
-                               <!-- Call make default compile target -->       
-                               <make target="${installtarget}" dir="${module.src.dir}" failonerror="${failonerror}"/>
-                       </else>          
-               </if>    
-    </target>
-
-       <target name="dist" depends="stage">
-               <make target="rpm" dir="${module.src.dir}" failonerror="${failonerror}" args="${build.make.arguments}"/>
-               <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
-            =============================================== -->
-       
-       <!-- ========================================================
-              tag: Tag module     
-            ======================================================== -->
-       <target name="tag" description="Apply tag.">
-
-               <property name="tag.type" value="B"/>
-               <!-- Set module CVS Label -->
-               <exec executable="tr" inputstring="${module.version}" outputproperty="cvs.module.version">
-                       <arg line=". _"/>
-               </exec>
-               <property name="cvs.label" value="gridsite-core_${tag.type}_${cvs.module.version}_${module.build}" />
-               <echo>New tag is ${cvs.label}</echo>
-               
-               <!-- Apply tag -->
-               <property name="failonerror" value="true"/>
-               <property name="tag.switch" value="-FR"/>
-               <exec dir="${workspace.abs.dir}" executable="cvs" failonerror="${failonerror}">
-                       <arg line="tag ${tag.switch} ${cvs.label} ${module.name}" />
-               </exec>
-
-       </target>
-
-       <target name="component_release_tag">
-
-               <!-- Set module CVS Label -->
-               <exec executable="tr" inputstring="${module.version}" outputproperty="cvs.module.version">
-                       <arg line=". _"/>
-               </exec>
-               <property name="cvs.label" value="gridsite-core_R_${cvs.module.version}" />
-               <echo>New tag is ${cvs.label}</echo>
-               
-               <!-- Apply tag -->
-               <exec dir="${workspace.abs.dir}" executable="cvs" failonerror="true">
-                       <arg line="tag -R ${cvs.label} ${module.name}" />
-               </exec>
-
-       </target>
-
-       <!-- ===============================================
-                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/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/delegation-1.1.0.wsdl b/org.gridsite.core/doc/delegation-1.1.0.wsdl
deleted file mode 100644 (file)
index df7e1f2..0000000
+++ /dev/null
@@ -1,459 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<wsdl:definitions 
-    targetNamespace="http://www.gridsite.org/namespaces/delegation-1" 
-    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
-    xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" 
-    xmlns:tns="http://www.gridsite.org/namespaces/delegation-1" 
-    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <wsdl:types>
-  <xsd:schema targetNamespace="http://www.gridsite.org/namespaces/delegation-1">
-   <xsd:complexType name="DelegationExceptionType">
-    <xsd:sequence>
-     <xsd:element name="message" type="xsd:string" nillable="true">
-        <xsd:annotation>
-            <xsd:documentation>
-                The cause of the delegation exception on the server side.
-            </xsd:documentation>
-        </xsd:annotation>
-     </xsd:element>
-    </xsd:sequence>
-   </xsd:complexType>
-   <xsd:element name="DelegationException" type="tns:DelegationExceptionType"/>
-   <xsd:complexType name="NewProxyReq">
-    <xsd:annotation>
-        <xsd:documentation>
-            New proxy certificate request, containing the certificate
-            request and a generated delegation ID.
-        </xsd:documentation>
-    </xsd:annotation>
-    <xsd:sequence>
-     <xsd:element name="proxyRequest" nillable="true" type="xsd:string">
-        <xsd:annotation>
-            <xsd:documentation>
-                The new RFC 3280 style proxy certificate request 
-                in PEM format with Base64 encoding.
-            </xsd:documentation>
-        </xsd:annotation>
-     </xsd:element>
-     <xsd:element name="delegationID" nillable="true" type="xsd:string">
-        <xsd:annotation>
-            <xsd:documentation>
-                The ID associated with the new delegation session.
-            </xsd:documentation>
-        </xsd:annotation>
-     </xsd:element>
-    </xsd:sequence>
-   </xsd:complexType>
-  </xsd:schema>
- </wsdl:types>
-
-   <wsdl:message name="getProxyReqRequest">
-      <wsdl:part name="delegationID" type="xsd:string">
-        <wsdl:documentation>
-            The ID of the new delegation session, specified by the client.
-            The ID can be empty.
-        </wsdl:documentation>
-      </wsdl:part>
-   </wsdl:message>
-   <wsdl:message name="getProxyReqResponse">
-      <wsdl:part name="getProxyReqReturn" type="xsd:string">
-        <wsdl:documentation>
-            The new RFC 3280 style proxy certificate request 
-            in PEM format with Base64 encoding.
-        </wsdl:documentation>
-      </wsdl:part>
-   </wsdl:message>
-
-   <wsdl:message name="putProxyRequest">
-      <wsdl:part name="delegationID" type="xsd:string">
-        <wsdl:documentation>
-            The ID of an already existing delegation session, 
-            initiated by getProxyReq() or getNewProxyReq().
-        </wsdl:documentation>
-      </wsdl:part>
-      <wsdl:part name="proxy" type="xsd:string">
-        <wsdl:documentation>
-            RFC 3280 style proxy certificate, signed by the
-            client, in PEM format with Base64 encoding.
-        </wsdl:documentation>
-      </wsdl:part>
-   </wsdl:message>
-   <wsdl:message name="putProxyResponse"/>
-
-   <wsdl:message name="renewProxyReqRequest">
-      <wsdl:part name="delegationID" type="xsd:string">
-        <wsdl:documentation>
-            The ID of an already existing delegation session,
-            where the client wants to renew the delegated 
-            credential.
-        </wsdl:documentation>
-      </wsdl:part>
-   </wsdl:message>
-   <wsdl:message name="renewProxyReqResponse">
-      <wsdl:part name="renewProxyReqReturn" type="xsd:string">
-        <wsdl:documentation>
-            The new RFC 3280 style proxy certificate request,
-            which is to replace the existing one,
-            in PEM format with Base64 encoding.
-        </wsdl:documentation>
-      </wsdl:part>
-   </wsdl:message>
-
-   <wsdl:message name="getNewProxyReqRequest"/>
-   <wsdl:message name="getNewProxyReqResponse">
-      <wsdl:part name="getNewProxyReqReturn" type="tns:NewProxyReq">
-        <wsdl:documentation>
-            The server side generated ID of the new delegation
-            session and the new RFC 3280 style proxy certificate 
-            request in PEM format with Base64 encoding.
-        </wsdl:documentation>
-      </wsdl:part>
-   </wsdl:message>
-
-   <wsdl:message name="getTerminationTimeRequest">
-      <wsdl:part name="delegationID" type="xsd:string">
-        <wsdl:documentation>
-            The ID of an already existing delegation session to be queried.
-        </wsdl:documentation>
-      </wsdl:part>
-   </wsdl:message>
-   <wsdl:message name="getTerminationTimeResponse">
-      <wsdl:part name="getTerminationTimeReturn" type="xsd:dateTime">
-        <wsdl:documentation>
-            The date and time when the delegated credentials will expire.
-        </wsdl:documentation>
-      </wsdl:part>
-   </wsdl:message>
-
-   <wsdl:message name="destroyRequest">
-      <wsdl:part name="delegationID" type="xsd:string">
-        <wsdl:documentation>
-            The ID of an already existing delegation session to be destroyed.
-        </wsdl:documentation>
-      </wsdl:part>
-   </wsdl:message>
-   <wsdl:message name="destroyResponse"/>
-
-   <wsdl:message name="DelegationException">
-      <wsdl:part name="fault" element="tns:DelegationException"/>
-   </wsdl:message>
-
-   <wsdl:portType name="Delegation">
-      <wsdl:documentation>
-        Delegation interface.
-      </wsdl:documentation>
-
-      <wsdl:operation name="getProxyReq" parameterOrder="delegationID">
-         <wsdl:documentation>
-            <para>
-                Starts the delegation procedure by asking for a certificate 
-                signing request from the server. The server answers with a
-                certificate signing request which includes the public key 
-                for the new delegated credentials. putProxy() has to be
-                called to finish the procedure.
-            </para>
-            <orderedlist>
-                <listitem><para>
-                    Check if a delegation ID was provided.  If not, generate a delegation
-                    id by hashing the client DN and client VOMS attributes.
-                </para></listitem>
-                <listitem><para>
-                    Check if the delegation ID already exists in the
-                    <emphasis>storage-area</emphasis>.  If it does 
-                    (a credential renewal is happening), check
-                    existing info (DN and VOMS attributes) against client info.
-                    Throw exception if they do not match.
-                </para></listitem>
-                <listitem><para>
-                    Create a new private/public key-pair (see also <emphasis>Key
-                    Generation Semantics</emphasis>).
-                </para></listitem>
-                <listitem><para>
-                    Generate a new proxy certificate request.
-                </para></listitem>
-                <listitem><para>
-                    Store private key and cert request in
-                    <emphasis>storage-cache-area</emphasis>, along with the
-                    requesting DN and VOMS attributes.
-                </para></listitem>
-            </orderedlist>
-         </wsdl:documentation>
-         <wsdl:input message="tns:getProxyReqRequest" name="getProxyReqRequest"/>
-         <wsdl:output message="tns:getProxyReqResponse" name="getProxyReqResponse"/>
-         <wsdl:fault message="tns:DelegationException" name="DelegationException">
-           <wsdl:documentation>
-                The client's DN and VOMS attributes do not match the stored ones, 
-                i.e. the client is not authorized.
-           </wsdl:documentation>
-         </wsdl:fault>
-      </wsdl:operation>
-
-      <wsdl:operation name="getNewProxyReq">
-         <wsdl:documentation>
-            <para>
-                Starts the delegation procedure by asking for a certificate
-                signing request from the server. The server answers with a
-                certificate signing request which includes the public key
-                for the new delegated credentials. putProxy() has to be
-                called to finish the procedure.
-            </para>
-            <orderedlist>
-                <listitem><para>
-                    Generate a delegation
-                    ID by hashing the client DN and client VOMS attributes.
-                </para></listitem>
-                <listitem><para>
-                    Check if the delegation ID already exists in the
-                    <emphasis>storage-area</emphasis>.  If it does, check
-                    existing info (DN and VOMS attributes) against client info.
-                    Throw exception if they do not match, because then this is 
-                    the rare case of hash collision, i.e. two different clients 
-                    are mapped to the same delegation ID.
-                </para></listitem>
-                <listitem><para>
-                    Create a new private/public key-pair (see also <emphasis>Key
-                    Generation Semantics</emphasis>).
-                </para></listitem>
-                <listitem><para>
-                    Generate a new certificate request.
-                </para></listitem>
-                <listitem><para>
-                    Store private key and cert request in
-                    <emphasis>storage-cache-area</emphasis>, along with the
-                    requesting DN and VOMS attributes.
-                </para></listitem>
-            </orderedlist>
-         </wsdl:documentation>
-         <wsdl:input message="tns:getNewProxyReqRequest" name="getNewProxyReqRequest"/>
-         <wsdl:output message="tns:getNewProxyReqResponse" name="getNewProxyReqResponse"/>
-         <wsdl:fault message="tns:DelegationException" name="DelegationException">
-            <wsdl:documentation>
-                There were already credentials associated to the delegation ID.
-            </wsdl:documentation>
-         </wsdl:fault>
-      </wsdl:operation>
-
-      <wsdl:operation name="putProxy" parameterOrder="delegationID proxy">
-         <wsdl:documentation>
-            <para>
-            Finishes the delegation procedure by sending the signed 
-            proxy certificate to the server.
-            </para>
-            <orderedlist>
-                <listitem><para>
-                    Check if a delegation ID was provided.  If not, generate a
-                    delegation id by hashing the client DN and client VOMS
-                    attributes.
-                </para></listitem>
-                <listitem><para>
-                    Check if the delegation ID already exists in the
-                    <emphasis>storage-area</emphasis>.  If it does, check
-                    existing info (DN and VOMS attributes) against client info.
-                    Throw exception if it does not match.
-                </para></listitem>
-                <listitem><para>
-                    Check, if client information matches proxy information.
-                </para></listitem>
-                <listitem><para>
-                    Check given proxy against private key of delegation ID in
-                    <emphasis>storage-cache-area</emphasis>.  If they do not
-                    match, throw exception.
-                </para></listitem>
-                <listitem><para>
-                    Store proxy in <emphasis>storage-area</emphasis>
-                    and clean up the <emphasis>storage-cache-area</emphasis>.
-                </para></listitem>
-            </orderedlist>
-         </wsdl:documentation>
-         <wsdl:input message="tns:putProxyRequest" name="putProxyRequest"/>
-         <wsdl:output message="tns:putProxyResponse" name="putProxyResponse"/>
-         <wsdl:fault message="tns:DelegationException" name="DelegationException">
-            <wsdl:documentation>
-                <para>
-                    There were no cached credentials associated to the delegation ID
-                    (neither <link linkend="Delegation.getNewProxyReq">
-                     getNewProxyReq()</link> nor 
-                     <link linkend="Delegation.renewProxyReq">
-                     renewProxyReq()</link> was called previously), 
-                    or the client's DN and VOMS attributes do not match the stored ones, 
-                    i.e. the client is not authorized.
-                </para>
-            </wsdl:documentation>
-         </wsdl:fault>
-      </wsdl:operation>
-
-      <wsdl:operation name="renewProxyReq" parameterOrder="delegationID">
-         <wsdl:documentation>
-            <para>
-            Restarts the delegation procedure by asking for a certificate
-            signing request from the server for an already existing delegation ID.
-            The server answers with a certificate signing request which includes 
-            the public key for new delegated credentials. putProxy() has to be
-            called to finish the procedure.
-            </para>
-            <orderedlist>
-                <listitem><para>
-                    Check if a delegation ID was provided. If not, generate a delegation
-                    id by hashing the client DN and client VOMS attributes.
-                </para></listitem>
-                <listitem><para>
-                    Check if the delegation ID already exists in the
-                    <emphasis>storage-area</emphasis>. If it does
-                    not, then throw an exception.
-                </para></listitem>
-                <listitem><para>
-                    Check if the existing info (DN and VOMS attributes) against client info.
-                    Throw exception if they do not match.
-                </para></listitem>
-                <listitem><para>
-                    Create a new private/public key-pair (see also <emphasis>Key
-                    Generation Semantics</emphasis>).
-                </para></listitem>
-                <listitem><para>
-                    Generate a new certificate request.
-                </para></listitem>
-                <listitem><para>
-                    Store private key and cert request in
-                    <emphasis>storage-cache-area</emphasis>, along with the
-                    requesting DN and VOMS attributes.
-                </para></listitem>
-            </orderedlist>
-         </wsdl:documentation>
-         <wsdl:input message="tns:renewProxyReqRequest" name="renewProxyReqRequest"/>
-         <wsdl:output message="tns:renewProxyReqResponse" name="renewProxyReqResponse"/>
-         <wsdl:fault message="tns:DelegationException" name="DelegationException">
-            <wsdl:documentation>
-                There were no credentials associated to the delegation ID, or the
-                client's DN and VOMS attributes do not match the stored ones, i.e.
-                the client is not authorized.
-            </wsdl:documentation>
-         </wsdl:fault>
-      </wsdl:operation>
-
-      <wsdl:operation name="getTerminationTime" parameterOrder="delegationID">
-         <wsdl:documentation>
-            Returns the termination (expiration) date and time of the credential,
-            associated with the given delegaion ID. If there was no delegation ID, 
-            then generate one by hashing the client DN and client VOMS attributes.
-         </wsdl:documentation>
-         <wsdl:input message="tns:getTerminationTimeRequest" name="getTerminationTimeRequest"/>
-         <wsdl:output message="tns:getTerminationTimeResponse" name="getTerminationTimeResponse"/>
-         <wsdl:fault message="tns:DelegationException" name="DelegationException">
-            <wsdl:documentation>
-                There were no credentials associated to the delegation ID, or the
-                client's DN and VOMS attributes do not match the stored ones, i.e.
-                the client is not authorized.
-            </wsdl:documentation>
-         </wsdl:fault>
-      </wsdl:operation>
-
-
-      <wsdl:operation name="destroy" parameterOrder="delegationID">
-         <wsdl:documentation>
-            Destroys the delegated credentials associated with the
-            given delegation ID immediately. If there was no delegation ID, 
-            then generate one by hashing the client DN and client VOMS attributes.
-         </wsdl:documentation>
-         <wsdl:input message="tns:destroyRequest" name="destroyRequest"/>
-         <wsdl:output message="tns:destroyResponse" name="destroyResponse"/>
-         <wsdl:fault message="tns:DelegationException" name="DelegationException">
-            <wsdl:documentation>
-                There were no credentials associated to the delegation ID, or the
-                client's DN and VOMS attributes do not match the stored ones, i.e.
-                the client is not authorized.
-            </wsdl:documentation>
-         </wsdl:fault>
-      </wsdl:operation>
-
-   </wsdl:portType>
-
-   <wsdl:binding name="DelegationSoapBinding" type="tns:Delegation">
-      <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
-
-      <wsdl:operation name="getProxyReq">
-         <wsdlsoap:operation soapAction=""/>
-         <wsdl:input name="getProxyReqRequest">
-            <wsdlsoap:body namespace="http://www.gridsite.org/namespaces/delegation-1" use="literal"/>
-         </wsdl:input>
-         <wsdl:output name="getProxyReqResponse">
-            <wsdlsoap:body namespace="http://www.gridsite.org/namespaces/delegation-1" use="literal"/>
-         </wsdl:output>
-         <wsdl:fault name="DelegationException">
-            <wsdlsoap:fault name="DelegationException" use="literal"/>
-         </wsdl:fault>
-      </wsdl:operation>
-
-      <wsdl:operation name="getNewProxyReq">
-         <wsdlsoap:operation soapAction=""/>
-         <wsdl:input name="getNewProxyReqRequest">
-            <wsdlsoap:body namespace="http://www.gridsite.org/namespaces/delegation-1" use="literal"/>
-         </wsdl:input>
-         <wsdl:output name="getNewProxyReqResponse">
-            <wsdlsoap:body namespace="http://www.gridsite.org/namespaces/delegation-1" use="literal"/>
-         </wsdl:output>
-         <wsdl:fault name="DelegationException">
-            <wsdlsoap:fault name="DelegationException" use="literal"/>
-         </wsdl:fault>
-      </wsdl:operation>
-
-      <wsdl:operation name="renewProxyReq">
-         <wsdlsoap:operation soapAction=""/>
-         <wsdl:input name="renewProxyReqRequest">
-            <wsdlsoap:body namespace="http://www.gridsite.org/namespaces/delegation-1" use="literal"/>
-         </wsdl:input>
-         <wsdl:output name="renewProxyReqResponse">
-            <wsdlsoap:body namespace="http://www.gridsite.org/namespaces/delegation-1" use="literal"/>
-         </wsdl:output>
-         <wsdl:fault name="DelegationException">
-            <wsdlsoap:fault name="DelegationException" use="literal"/>
-         </wsdl:fault>
-      </wsdl:operation>
-
-      <wsdl:operation name="putProxy">
-         <wsdlsoap:operation soapAction=""/>
-         <wsdl:input name="putProxyRequest">
-            <wsdlsoap:body namespace="http://www.gridsite.org/namespaces/delegation-1" use="literal"/>
-         </wsdl:input>
-         <wsdl:output name="putProxyResponse">
-            <wsdlsoap:body namespace="http://www.gridsite.org/namespaces/delegation-1" use="literal"/>
-         </wsdl:output>
-         <wsdl:fault name="DelegationException">
-            <wsdlsoap:fault name="DelegationException" use="literal"/>
-         </wsdl:fault>
-      </wsdl:operation>
-
-      <wsdl:operation name="getTerminationTime">
-         <wsdlsoap:operation soapAction=""/>
-         <wsdl:input name="getTerminationTimeRequest">
-            <wsdlsoap:body namespace="http://www.gridsite.org/namespaces/delegation-1" use="literal"/>
-         </wsdl:input>
-         <wsdl:output name="getTerminationTimeResponse">
-            <wsdlsoap:body namespace="http://www.gridsite.org/namespaces/delegation-1" use="literal"/>
-         </wsdl:output>
-         <wsdl:fault name="DelegationException">
-            <wsdlsoap:fault name="DelegationException" use="literal"/>
-         </wsdl:fault>
-      </wsdl:operation>
-
-      <wsdl:operation name="destroy">
-         <wsdlsoap:operation soapAction=""/>
-         <wsdl:input name="destroyRequest">
-            <wsdlsoap:body namespace="http://www.gridsite.org/namespaces/delegation-1" use="literal"/>
-         </wsdl:input>
-         <wsdl:output name="destroyResponse">
-            <wsdlsoap:body namespace="http://www.gridsite.org/namespaces/delegation-1" use="literal"/>
-         </wsdl:output>
-         <wsdl:fault name="DelegationException">
-            <wsdlsoap:fault name="DelegationException" use="literal"/>
-         </wsdl:fault>
-      </wsdl:operation>
-
-   </wsdl:binding>
-
-   <wsdl:service name="DelegationService">
-      <wsdl:port binding="tns:DelegationSoapBinding" name="gridsite-delegation">
-         <wsdlsoap:address location="https://localhost:8443/glite-security-delegation"/>
-      </wsdl:port>
-   </wsdl:service>
-
-</wsdl:definitions>
diff --git a/org.gridsite.core/doc/findproxyfile.1 b/org.gridsite.core/doc/findproxyfile.1
deleted file mode 100644 (file)
index 9de4d47..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-.TH findproxyfile 1 "October 2004" "findproxyfile" "GridSite 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/fuse.spec b/org.gridsite.core/doc/fuse.spec
deleted file mode 100644 (file)
index ac785a2..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-#
-# You should be able to build your own FUSE RPMs for use with SlashGrid
-# by fetching an up-to-date stable FUSE tar file from SourceForge,
-# putting it in /usr/src/redhat/SOURCES, updating the Version: header in
-# this file, and then executing  rpmbuild -ba fuse.spec
-#
-Name:           fuse
-Version:        2.5.3
-URL:            http://fuse.sourceforge.net
-Source:         %{name}-%{version}.tar.gz
-Release:        3%(sed 's/^\([A-Z]\)[^ ]* \([A-Z]\)[^0-9]*\([0-9][^ ]*\).*/\1\2\3/g' /etc/redhat-release | sed 's/[^A-Z,a-z,0-9]//g')_%(uname -r | sed 's/-/_/g')
-Summary:        File System in Userspace (FUSE) utilities
-Group:          System Environment/Base
-License:        GPL
-Packager:      Andrew McNab <Andrew.McNab@manchester.ac.uk>
-BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-
-%description
-With FUSE it is possible to implement a fully functional filesystem in a 
-userspace program. This package contains the FUSE userspace tools to 
-mount a FUSE filesystem.
-
-(This version is designed for use with the SlashGrid daemon:
- http://www.gridsite.org/slashgrid/ )
-
-%package libs
-Summary:        File System in Userspace (FUSE) libraries
-Group:          System Environment/Libraries
-License:        LGPL
-
-%description libs
-Devel With FUSE it is possible to implement a fully functional filesystem in a 
-userspace program. This package contains the FUSE libraries. 
-
-%package devel
-Summary:        File System in Userspace (FUSE) devel files
-Group:          Development/Libraries
-Requires:      %{name}-libs = %{version}-%{release}
-Requires:      pkgconfig
-License:        LGPL
-
-%description devel
-With FUSE it is possible to implement a fully functional filesystem in a 
-userspace program. This package contains development files (headers, 
-pgk-config) to develop FUSE based applications/filesystems.
-
-%prep
-%setup -q
-#disable device creation during build/install
-sed -i 's|mknod|echo Disabled: mknod |g' util/Makefile.in
-sed -i 's|install-data-local | |g' util/Makefile.in
-sed -i 's| install-data-local| |g' util/Makefile.in
-
-%build
-%configure --disable-static 
-make %{?_smp_mflags}
-
-%install
-rm -rf $RPM_BUILD_ROOT
-make install DESTDIR=$RPM_BUILD_ROOT
-find $RPM_BUILD_ROOT -type f -name "*.la" -exec rm -f {} ';'
-
-# change from 4755 to 0755 to allow stripping (setuid not needed by SlashGrid)
-chmod 0755 $RPM_BUILD_ROOT/%{_bindir}/fusermount
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%post
-mknod --mode=0660 /dev/fuse c 10 229
-chown root.root /dev/fuse
-depmod
-
-%postun 
-
-%post libs -p /sbin/ldconfig
-
-%postun libs -p /sbin/ldconfig
-
-%files
-%doc AUTHORS ChangeLog COPYING FAQ Filesystems NEWS README README.NFS
-/sbin/mount.fuse
-%attr(0755,root,root) %{_bindir}/fusermount
-/lib/modules/%(uname -r)/kernel/fs/fuse/fuse.*o
-
-%files libs
-%doc COPYING.LIB
-%{_libdir}/libfuse.so.*
-
-%files devel
-%defattr(-,root,root,-)
-%{_libdir}/libfuse.so
-%{_libdir}/pkgconfig/*.pc
-%{_includedir}/fuse.h
-%{_includedir}/fuse
-
-%changelog
-
-* Sun May 28 2006 Andrew McNab <Andrew.McNab@manchester.ac.uk> 2.5.3-3
-- Simplify for use with SlashGrid daemon (which only runs as root) on
-  Scientific Linux 3.*/4.* too
-
-* Wed May 03 2006 Peter Lemenkov <lemenkov@newmail.ru> 2.5.3-1%{?dist}
-- Update to 2.5.3
-
-* Thu Mar 30 2006 Peter Lemenkov <lemenkov@newmail.ru> 2.5.2-4%{?dist}
-- rebuild
-
-* Mon Feb 13 2006 Peter Lemenkov <lemenkov@newmail.ru> - 2.5.2-3
-- Proper udev rule
-
-* Mon Feb 13 2006 Peter Lemenkov <lemenkov@newmail.ru> - 2.5.2-2
-- Added missing requires
-
-* Tue Feb 07 2006 Peter Lemenkov <lemenkov@newmail.ru> - 2.5.2-1
-- Update to 2.5.2
-- Dropped fuse-mount.fuse.patch
-
-* Wed Nov 23 2005 Thorsten Leemhuis <fedora[AT]leemhuis[DOT]info> - 2.4.2-1
-- Use dist
-
-* Wed Nov 23 2005 Thorsten Leemhuis <fedora[AT]leemhuis[DOT]info> - 2.4.2-1
-- Update to 2.4.2 (solves CVE-2005-3531)
-- Update README.fedora
-
-* Sat Nov 12 2005 Thorsten Leemhuis <fedora[AT]leemhuis[DOT]info> - 2.4.1-3
-- Add README.fedora
-- Add hint to README.fedora and that you have to be member of the group "fuse"
-  in the description
-- Use groupadd instead of fedora-groupadd
-
-* Fri Nov 04 2005 Thorsten Leemhuis <fedora[AT]leemhuis[DOT]info> - 2.4.1-2
-- Rename packages a bit
-- use makedev.d/40-fuse.nodes
-- fix /sbin/mount.fuse
-- Use a fuse group to restict access to fuse-filesystems
-
-* Fri Oct 28 2005 Thorsten Leemhuis <fedora[AT]leemhuis[DOT]info> - 2.4.1-1
-- Initial RPM release.
diff --git a/org.gridsite.core/doc/gridsite-delegation.8 b/org.gridsite.core/doc/gridsite-delegation.8
deleted file mode 100644 (file)
index 41ce1e3..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-.TH gridsite-delegation 8 "March 2006" "gridsite-delegation" "GridSite Manual"
-.SH NAME
-.B gridsite-delegation.cgi
-\- CGI implementation of GridSite/gLite GSI delegation Web Service
-.SH SYNOPSIS
-.B gridsite-delegation.cgi
-
-.SH DESCRIPTION
-.B gridsite-delegation.cgi
-is a server-side implementation of the GridSite/gLite GSI delegation Web
-Service
-
-.SH AUTHOR
-Andrew McNab <Andrew.McNab@manchester.ac.uk>
-
-gridsite-delegation.cgi is part of GridSite: http://www.gridsite.org/
-
-.SH "SEE ALSO"
-.BR htproxyput(1)
diff --git a/org.gridsite.core/doc/gsexec.8 b/org.gridsite.core/doc/gsexec.8
deleted file mode 100644 (file)
index e229663..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-.TH GSEXEC 8 "October 2005" "gsexec" "GridSite Manual"
-.SH NAME
-.B gsexec 
-\- Switch user before executing external programs
-
-.SH "SYNOPSIS"
-.BR gsexec 
-[-V]
-.SH "SUMMARY"
-
-gsexec is used by the Apache HTTP Server to switch to another user before 
-executing CGI programs\&. In order to achieve this, it must run as root\&. 
-Since the HTTP daemon normally doesn't run as root, the gsexec executable 
-needs the setuid bit set and must be owned by root\&. It should never be 
-writable for any other person than root\&.
-gsexec is based on Apache's suexec, and its behaviour is controlled with
-the Apache configuration file directives 
-.BR GridSiteExecMethod 
-and 
-.BR GridSiteUserGroup
-added to Apache by 
-.BR mod_gridsite(8)
-Four execution methods are supported: nosetuid, suexec, X509DN and directory,
-and these may be set on a per-directory basis within the Apache configuration
-file.
-
-.SH "NOSETUID METHOD"
-
-This is the default behaviour, but can also be produced by giving
-.BR "GridSiteExecMethod nosetuid"
-
-CGI programs will then be executed without using gsexec, and will
-run as the Unix user given by the User and Group Apache directives (normally
-apache.apache on Red Hat derived systems.)
-
-.SH "SUEXEC METHOD"
-
-If
-.BR "GridSiteExecMethod suexec"
-is given for this virtual host or directory, then CGI programs will be 
-executed using the user and group given by the
-.BR "GridSiteUserGroup user group"
-directive, which may also be set on a per-directory basis (unlike suexec's
-.BR SuexecUserGroup 
-which is per-server only.) The CGI program must either be owned by root,
-the Apache user
-and group specified at gsexec build-time (normally apache.apache) or by
-the user and group given with the 
-.BR GridSiteUserGroup
-directive.
-
-.SH "X509DN METHOD"
-
-If
-.BR "GridSiteExecMethod X509DN"
-is given, then the CGI program runs as a pool user, detemined using lock
-files in the exec mapping directory chosen as build time of gsexec.
-The pool user is chosen according
-to the client's full certificate X.509 DN (ie with any trailing GSI proxy
-name components stripped off.) Subsequent requests by the same X.509
-identity will be mapped to the same pool user. The CGI program must either be
-owned by root, the Apache user
-and group specified at gsexec build-time (normally apache.apache) or by
-the pool user selected.
-
-.SH "DIRECTORY METHOD"
-
-If
-.BR "GridSiteExecMethod directory"
-is given, then the CGI program runs as a pool user chosen according
-to the directory in which the CGI is located: all CGIs in that directory
-run as the same pool user. The CGI program must either be
-owned by root, the Apache user
-and group specified at gsexec build-time (normally apache.apache) or by
-the pool user selected.
-
-
-.SH "EXECMAPDIR"
-
-The default exec mapping directory is /var/www/execmapdir and this is fixed
-when the gsexec executable is built. The exec mapping directory and all
-of its lock files must be owned and only writable by root. To initialise the
-lock files, create an empty lock file for each pool user, with the pool
-username as the filename (eg user0001, user0002, ...) As the pool users are
-leased to X.509 identities or directories, they will become hard linked to
-lock files with the URL-encoded X.509 DN or full directory path. 
-
-You can recycle pool users by removing the corresponding URL-encoded
-hard link. 
-.BR stat(1)
-and
-.BR "ls(1)"
-with option 
-.BR "-i"
-can be used to print the inodes of lock files to match up the hard links.
-
-.BR "However, you must ensure that all files and processes owned by the pool"
-.BR "user are deleted before recycling!"
-
-.SH "OPTIONS"
-.TP
--V
-If you are root, this option displays the compile options of gsexec\&. 
-For security reasons all configuration options are changeable only at 
-compile time\&.  
-.SH "MORE INFORMATION"
-For further information about the concepts and the security model of 
-the original Apache suexec 
-please refer to the suexec documentation: 
-
-http://httpd\&.apache\&.org/docs-2\&.0/suexec\&.html
-
-For examples using the gsexec extensions, please see the GridSite gsexec
-page:
-
-http://www.gridsite.org/wiki/Gsexec
-
-.SH AUTHORS
-
-Apache project, for original suexec
-
-Andrew McNab <Andrew.McNab@manchester.ac.uk> for gsexec modifications.
-
-gsexec is part of GridSite: http://www.gridsite.org/
-
-.SH "SEE ALSO"
-.BR httpd(8),
-.BR suexec(8),
-.BR mod_gridsite(8)
diff --git a/org.gridsite.core/doc/htcp.1 b/org.gridsite.core/doc/htcp.1
deleted file mode 100644 (file)
index 0731d33..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-.TH HTCP 1 "October 2005" "htcp" "GridSite Manual"
-.SH NAME
-.B htcp, htmv, htrm, htls, htll, htmkdir, htfind, htping
-\- file transfers and queries via HTTP/HTTPS/SiteCast
-.SH SYNOPSIS
-.B htcp, htmv
-[options] Source-URL[s] Destination-URL
-
-.B htrm, htls, htll, htmkir, htfind
-[options] Target-URL[s]
-
-.B htping
-[options]
-.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. htcp can also use the HTCP protocol to query
-HTTP(S) fileservers via SiteCast. 
-
-When talking to a fileserver with HTTPS, 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 during a copy, 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"
-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 "--move"
-Move/rename files on a single remote server, given the two, absolute URLs
-of the remote file names. Server must support HTTP/WebDAV MOVE. Calling the
-program as htmv has the same effect.
-
-.IP "--ping"
-Query specified multicast groups with the HTCP NOP ("No Operation") code.
-SiteCast enabled servers will respond immediately with a NOP reply, and all
-of the responses will be listed, with the round trip time in milliseconds. 
-Any waiting times specified in the --groups option will be ignored. Calling
-the program as htping has the same effect.
-(--groups must be used for this option to work.)
-
-.IP "--find"
-Query specified multicast groups with the HTCP TST code. SiteCast enabled
-servers will respond with TST replies if they have the files corresponding
-to the given SiteCast target URL(s). All of the transfer URLs returned
-will be listed. Waiting times specified in the --groups option will be used
-to space out the multicast queries, but the program listens for responses
-continuously. Calling the program as htfind has the same effect.
-(--groups must be used for this option to work.)
-
-.IP "--groups <IP Groups>"
-IP multicast groups to use for SiteCast queries. IP Groups is a comma
-separated list of groups, in the format: nnn.nnn.nnn.nnn:port[:ttl[:seconds]]
-The IP number and port must be specified. The IP time-to-live, ttl, controls 
-how many networks the multicast packets may pass through - the default, 1, 
-limits packets to the local network. Multiple groups may be specified, 
-separated by commas. If multiple groups are specified, then seconds is the 
-time to wait before making the next multicast - 1 second is the default.
-
-.IP "--timeout <seconds>"
-A request timeout used for multicast ping.
-
-.IP "--anon"
-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 "--grid-http"
-Try to use GridHTTP redirection 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_PASSCODE single-use passcode obtained via HTTPS. The --grid-http
-option will be ignored for directory operations or HTTP URLs. If a redirected
-transfer isn't possible, a normal HTTPS data transfer will be attempted.
-
-.IP "--sitecast"
-Try to use SiteCast to locate remote files which are to be copied (currently
-only for the
-.BR fetching
-of remote files.) If no location is found via SiteCast, then a direct request
-for the given URL is tried. (--groups must be used for this option to work.)
-
-.IP "--domain <SiteCast domain>"
-Try to use SiteCast to locate remote files which are to be copied (currently
-only for the
-.BR fetching
-of remote files) 
-.BR "if the domain component of the URL matches"
-the SiteCast domain given.
-If no location is found via SiteCast, then a direct request
-for the given URL is tried. (--groups must be used for this option to work.)
-
-.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. Better error
-recovery.
-
-.SH AUTHOR
-Andrew McNab <Andrew.McNab@manchester.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/htfind.1 b/org.gridsite.core/doc/htfind.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/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/htmv.1 b/org.gridsite.core/doc/htmv.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/htping.1 b/org.gridsite.core/doc/htping.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/htproxydestroy.1 b/org.gridsite.core/doc/htproxydestroy.1
deleted file mode 100644 (file)
index 57f80ce..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.so man1/htproxyput.1
diff --git a/org.gridsite.core/doc/htproxyput.1 b/org.gridsite.core/doc/htproxyput.1
deleted file mode 100644 (file)
index 3d2bf04..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-.TH HTPROXYPUT 1 "March 2006" "htproxyput" "GridSite Manual"
-.SH NAME
-.B htproxyput, htproxydestroy, htproxytime, htproxyunixtime, htproxyrenew
-\- GSI proxy delegations and querying, using GridSite/gLite delegation API
-.SH SYNOPSIS
-.B htproxyput, htproxydestroy, htproxytime, htproxyunixtime, htproxyrenew
-[options] Service-URL
-
-.SH DESCRIPTION
-.B htproxyput
-is a client to perform GSI proxy delegations using the GridSite/gLite
-delegation Web Service portType. The gridsite-delegation(8) CGI program is
-the complementary server-side implementation. 
-
-.SH OPTIONS
-.IP "-v/--verbose"
-Turn on debugging information.
-
-.IP "--delegation-id <ID>"
-Explicitly specify the Delegation ID to use.
-
-.IP "--destroy"
-Instead of delegating a proxy, delete the proxy from the service's proxy
-cache. Calling the program as htproxydestroy has the same effect.
-
-.IP "--time"
-Instead of delegating a proxy, report the expiration time of the proxy,
-in the local time of the client. Calling the program as htproxytime has the
-same effect.
-
-.IP "--unixtime"
-Instead of delegating a proxy, report the expiration time of the proxy, as
-the number of seconds since 00:00:00 1970-01-01 UTC. Calling the program as 
-htproxyunixtime has the same effect.
-
-.IP "--renew"
-Delegate an updated version of an existing proxy. The Delegation ID 
-.B must
-be given when using this option. Calling the program as htproxyrenew has the
-same effect.
-
-.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.
-
-.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, htproxyput 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, and non-zero on error.
-
-.SH TO DO
-Better error recovery.
-
-.SH AUTHOR
-Andrew McNab <Andrew.McNab@manchester.ac.uk>
-
-htproxyput is part of GridSite: http://www.gridsite.org/
-.SH "SEE ALSO"
-.BR htcp(1),
-.BR gridsite-delegation(8)
diff --git a/org.gridsite.core/doc/htproxyrenew.1 b/org.gridsite.core/doc/htproxyrenew.1
deleted file mode 100644 (file)
index 57f80ce..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.so man1/htproxyput.1
diff --git a/org.gridsite.core/doc/htproxytime.1 b/org.gridsite.core/doc/htproxytime.1
deleted file mode 100644 (file)
index 57f80ce..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.so man1/htproxyput.1
diff --git a/org.gridsite.core/doc/htproxyunixtime.1 b/org.gridsite.core/doc/htproxyunixtime.1
deleted file mode 100644 (file)
index 57f80ce..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.so man1/htproxyput.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 fbc170c..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-##############################################################################
-## GridSite httpd-fileserver.conf - Andrew McNab <Andrew.McNab@man.ac.uk>
-##
-## For GridSite documentation, see http://www.gridsite.org/
-##
-## Example configuration file for GridSite as an HTTP(S) fileserver,
-## listening on ports 80/777 (HTTP) and 443/488 (HTTPS) 
-##
-## (777/488 is to allow firewalls to distinguish between Grid and 
-## Web HTTP(S) traffic. See http://www.gridsite.org/wiki/IP_Ports )
-##
-## 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
-## apache.apache, 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 MOVE
-##
-## 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  apache
-Group apache
-
-DocumentRoot "/var/www/htdocs"
-
-<Directory />
-    AllowOverride None
-</Directory>
-
-LogLevel debug
-LogFormat "%h \"%{SSL_CLIENT_S_DN}x\" %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 ports 80 and 777
-######################################################################
-
-Listen 80
-Listen 777
-<VirtualHost *:80 *:777>
-
-<Directory "/var/www/htdocs">
- GridSiteIndexes       on
- GridSiteAuth          on
- GridSiteDNlists       /etc/grid-security/dn-lists/
-</Directory>
-
-</VirtualHost>
-
-######################################################################
-# Secured and possibly authenticated HTTPS on ports 443 and 488
-######################################################################
-Listen 443
-Listen 488
-SSLSessionCacheTimeout  300
-SSLSessionCache         shm:/var/cache/mod_ssl/shm_cache
-
-<VirtualHost *:443 *:488>
-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
-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 MOVE
-</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 710bb12..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-##############################################################################
-## GridSite httpd-webserver.conf - Andrew McNab <Andrew.McNab@man.ac.uk>
-##
-## For GridSite documentation, see http://www.gridsite.org/
-##
-## Example configuration file for GridSite as a Web Server 
-## (that is, primarily for interactive use with a browser.)
-## Listening is on ports 80/777 (HTTP) and 443/488 (HTTPS).
-##
-## (777/488 is to allow firewalls to distinguish between Grid and
-## Web HTTP(S) traffic. See http://www.gridsite.org/wiki/IP_Ports )
-##
-## 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
-## apache.apache, 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 MOVE
-##
-## 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  apache
-Group apache
-
-DocumentRoot "/var/www/htdocs"
-
-<Directory />
-    AllowOverride None
-</Directory>
-
-LogLevel debug
-LogFormat "%h \"%{SSL_CLIENT_S_DN}x\" %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 ports 80 and 777
-######################################################################
-
-Listen 80
-Listen 777
-<VirtualHost *:80 *:777>
-
-## 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 ports 443 and 488
-######################################################################
-Listen 443
-Listen 488
-SSLSessionCacheTimeout  300
-SSLSessionCache         shm:/var/cache/mod_ssl/shm_cache
-
-<VirtualHost *:443 *:488>
-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
-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 MOVE
-
- ## 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 21c702c..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-<title>GridSite 1.3.x Documentation</title>
-<body>
-<h1 align=center>GridSite 1.3.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.
-
-<p>    
-The <a href="http://www.gridsite.org/wiki/">GridSite Wiki</a> includes
-guides and cookbook examples about using GridSite, along with up to date
-information about the APIs.
-
-<h2>Reference</h2>
-
-<p>
-The following reference documents and man pages are put in
-/usr/share/doc/gridsite-VERSION when GridSite is installed.
-
-<p>
-<dl>
-
-<dt><b><a href="htcp.1.html">htcp(1)</a></b>
-<dd>A command line tool for copying files to or from HTTP(S) servers.
-<p>
-
-<dt><b><a href="mod_gridsite.8.html">mod_gridsite(8)</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="gsexec.8.html">gsexec(8)</a></b>
-<dd>A modified version of suexec(8), for use with mod_gridsite(8). gsexec
-    allows CGI programs to be run as pool users, depending on the client's
-    X.509 identity or the directory in which the CGI is located.
-<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>
-
-<dt><b><a href="urlencode.1.html">urlencode(1)</a></b>
-<dd>A command for URL-encoding strings. 
-<p>
-
-<dt><b><a href="findproxyfile.1.html">findproxyfile(1)</a></b>
-<dd>The findproxyfile command 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.       
-<p>
-
-<!--
-<dt><b><a href="delegation-1.wsdl">delegation-1.wsdl</a></b>
-<dd>A WSDL description of a delegation Web Service including the Delegation
-    portType.
-<p>
--->
-
-<dt><b><a href="fuse.spec">fuse.spec</a></b>
-<dd>An RPM SPEC file which can be used to build the 
-    <a href="http://www.gridsite.org/wiki/FUSE">FUSE</a> kernel module,
-    library and commands on Linux 2.4.x and 2.6.x systems, for use with
-    <a href="http://www.gridsite.org/slashgrid/">SlashGrid</a>.
-<p>
-
-<dt><b><a href="doxygen/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/mod_gridsite.8 b/org.gridsite.core/doc/mod_gridsite.8
deleted file mode 100644 (file)
index cfbea3f..0000000
+++ /dev/null
@@ -1,313 +0,0 @@
-.TH MOD_GRIDSITE 8 "October 2005" "mod_gridsite" "GridSite Manual"
-.SH NAME
-.B mod_gridsite
-\- Grid extensions to Apache httpd
-.SH SYNOPSIS
-.B LoadModule gridsite_module mod_gridsite.so 
-.SH DESCRIPTION
-.B 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.
-
-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.
-
-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:
-
-LoadModule gridsite_module /PATH/TO/MODULES/mod_gridsite.so
-
-The module's behaviour is then controlled by GridSite... directives within
-Apache <Directory ...> sections, allowing different directories to use
-GridSite features in different ways.
-
-.SH DIRECTIVES
-
-.IP "GridSiteIndexes on|off"
-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. 
-(Default: GridSiteIndexes off)
-
-.IP "GridSiteIndexHeader file"
-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.) 
-(Default: none)
-
-.IP "GridSiteHtmlFormat on|off"
-Determines where HTML pages receive additional formatting before being
-sent to the client. This includes the "Last modified",
-"View page history", "Switch to HTTP(S)",
-"Print View" and "Built with GridSite" footer
-elements. If header and footer files are found, they will be used too.
-(Default: GridSiteHtmlFormat off)
-
-.IP "GridSiteHeadFile file"
-.IP "GridSiteFootFile file"
-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
-<body[ ...]> tags; footer files in place of </body>. (These
-standard files should each include the appropriate body tag as a
-replacement.)
-(Defaults: GridSiteHeadFile gridsitehead.txt, 
-GridSiteFootFile gridsitefoot.txt)
-
-.IP "GridSiteAuth on|off"
-Enables GridSite access control features, using 
-GACL 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. 
-(Default: GridSiteAuth off)
-
-.IP "GridSiteAdminList uri"
-All members of the DN List with name "uri" receive the full set
-of permissions, irrespective of per-directory .gacl files. People in
-this group have full control over the whole site.
-(Default: none)
-
-.IP "GridSiteGSIProxyLimit limit"
-When using GSI Proxy credentials,
-proxies with delegation depth greater than "limit" 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.
-(Default: GridSiteGSIProxyLimit 1)
-
-.IP "GridSiteMethods [GET] [PUT] [DELETE] [MOVE]"
-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.
-(Default: GridSite GET)
-
-.IP "GridSiteDNlists directory1[:directory2[:directory3]...]"
-Sets up the DN List path used by GACL for
-evaluating <dn-list> 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.
-(Default: none)
-
-.IP "GridSiteDNlistsURI uri"
-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.    
-(Default: none)
-<p>
-
-.IP "GridSiteAdminURI uri"
-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:
-
-ScriptAlias /real-gridsite-admin.cgi /PATH/TO/real-gridsite-admin.cgi
-
-This URI is always reached by an internal redirection from the value
-set by GridSiteAdminFile, and is never visible to users.
-(Default: none)
-
-.IP "GridSiteAdminFile cgifilename"
-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. (Default: GridSiteAdminFile gridsite-admin.cgi)
-
-.IP "GridSiteEnvs on|off"
-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.
-(Default: GridSiteEnvs on)
-
-.IP "GridSiteEditable [ext1 [ext2 [ext3] ...]]]"
-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.
-(Default: GridSiteEditable txt shtml html htm css js php jsp)
-
-.IP "GridSiteHelpURI uri"
-If set, gives the URI to use for "Website Help" links in HTML
-page footers. (Default: none)
-
-.IP "GridSiteLink on|off"
-Turns off the link in the HTML page footers which gives credit to GridSite.
-(Default: GridSiteLink on)
-
-.IP "GridSiteUnzip path"
-If "path" 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 unzip binary. (Default: none)
-
-.IP "GridSiteGridHTTP on|off"
-Enable GridHTTP for this server, virtual server or directory:
-HTTPS requests made with the header 
-.BR "Upgrade: GridHTTP/1.0"
-will be redirected to an HTTP version of the file. (Default: off)
-
-.IP "GridSiteGridHTTPport port"
-Sets the port to use for the unencrypted HTTP component of GridHTTP 
-HTTPS->HTTP transfers. The same setting will be used for all virtual hosts
-which support GridHTTP. (Default: 777)
-
-.IP "GridSiteSessionsDir path"
-Location of authentication cookies and SSL session credentials directory,
-relative to ServerRoot. Used by GridHTTP to record the credentials obtained
-via HTTPS, and available to the corresponding HTTP request or subsequent
-HTTPS requests following a session restart.
-(Default: /var/www/sessions)
-
-.IP "GridSiteACLFormat GACL|XACML"
-Format to use when writing .gacl files. (Both formats are automatically
-recognised when reading.) (Default: GACL)
-
-.IP "GridSiteExecMethod nosetuid|suexec|X509DN|directory"
-Execution strategy for CGI scripts and executables. For options other
-than nosetuid, suexec (or gsexec renamed suexec) must installed. For
-X509DN and directory, gsexec must be installed, as suexec. See 
-.BR "gsexec(8)"
-for an explanation of the different execution strategies. 
-(Default: nosetuid)
-
-.IP "GridSiteUserGroup user group"
-Unix user and group when using suexec (or gsexec as suexec.) This
-is equivalent to the suexec SuexecUserGroup directive, but can be
-specified on a per-directory basis. (Default: none)
-
-.IP "GridSiteDiskMode GroupNone|GroupRead|GroupWrite WorldNone|WorldRead"
-The file creation permissions mode, taking two arguments to specify
-the group and other permissions. The mode always includes read and write
-permission for the CGI user itself.
-(Default: GroupNone WorldNone)
-
-.IP "GridSiteCastUniPort port"
-The 
-.BR UDP 
-unicast port to listen on for HTCP queries, and from which to 
-send replies to HTCP unicast and multicast queries. Ideally, this should be
-a privileged port below 1024. This directive may not appear within a virtual
-server. (Default: 777)
-
-.IP "GridSiteCastGroup group[:port]"
-A UDP multicast group on which to listen for HTCP queries, plus an optional
-port. If no port is given, then 777 is used. Multiple GridSiteCastGroup 
-directives can be given to cause the UDP responder to listen to more than
-one multicast group. This directive may not appear within a virtual server.
-
-.IP "GridSiteCastAlias URL-prefix path-prefix"
-Maps SiteCast generic URLs to the local filesystem. When processing
-HTCP queries, matching SiteCast URLs will have URL-prefix stripped off
-and the remaining portion of the URL added to path-prefix to construct a
-local path and filename. If a file is found with that name, a SiteCast HTCP
-response will be returned to the querying host. Otherwise the queries are
-ignored.
-This directive may appear within virtual servers, and the virtual server's
-servername and first port will determine the host and port name used to
-construct the transfer URL.
-
-.SH ENVIRONMENT
-
-The following variables are present in the environment of CGI programs and
-other dynamic content systems if the 
-.BR "GridSiteEnvs on"
-directive is in effect.
-
-.IP GRST_PERM
-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.)
-
-.IP GRST_ADMIN_LIST
-URI of the DN List, listing people with full admin and write access
-to the whole site.
-
-.IP GRST_GSIPROXY_LIMIT
-Maximum valid delegation level for GSI Proxies.
-
-.IP GRST_DIR_PATH
-Absolute path in the local filesystem to the directory holding the
-file being requested.
-
-.IP GRST_DESTINATION_TRANSLATED
-Present if a WebDAV 
-.BR "Destination:"
-header was given in the request with a local URL. Contains the translation of
-the URL given into an absolute path in the local filesystem.
-
-.IP GRST_HELP_URI
-URI of website help pages set by GridSiteHelpURI directive.
-
-.IP GRST_ADMIN_FILE
-Filename of per-directory ghost gridsite-admin.cgi program. (This is
-used by real-gridsite-admin.cgi to construct links in its pages.)
-
-.IP GRST_EDITABLE
-Space-separated list of extensions which can safely be edited with a
-Text/HTML editor.
-
-.IP "GRST_HEAD_FILE and GRST_FOOT_FILE"
-Filenames of standard header and footer files.
-
-.IP GRST_DN_LISTS
-DN lists search path.
-
-.IP GRST_DN_LISTS_URI
-Directory of virtual URIs used to publish this site's DN Lists.
-
-.IP GRST_UNZIP
-Full path to the 
-.BR "unzip(1)"
-binary, used to list and unpack .zip files.
-
-.IP GRST_NO_LINK
-If set, do not include credit links to GridSite in page footers.
-
-.IP GRST_ACL_FORMAT
-Format to use when writing .gacl files: either GACL or XACML.
-
-.IP GRST_EXEC_METHOD
-Specified by 
-.BR GridSiteExecMethod
-either suexec, X509DN or directory.
-
-.IP GRST_EXEC_DIRECTORY
-The directory containing the CGI script or executable (used by gsexec
-to determine which pool account to use in directory mapping mode.)
-
-.IP GRST_DISK_MODE
-The 
-.BR Apache
-disk permission modes bit pattern, in hexadecimal, starting with 0x. 
-(Similar to the Unix bit pattern, except with hexadecimal rather than
-octal values: eg 0x600 [Apache] vs 0600 [Unix] 
-are both read/write for user only.)
-
-.SH AUTHOR
-Andrew McNab <Andrew.McNab@manchester.ac.uk>
-
-mod_gridsite is part of GridSite: http://www.gridsite.org/
-.SH "SEE ALSO"
-.BR htcp(1),
-.BR httpd(8),
-.BR gsexec(8)
diff --git a/org.gridsite.core/doc/urlencode.1 b/org.gridsite.core/doc/urlencode.1
deleted file mode 100644 (file)
index 7cdfbc3..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-.TH URLENCODE 1 "November 2003" "urlencode" "GridSite 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 AUTHOR
-Andrew McNab <Andrew.McNab@manchester.ac.uk>
-
-urlencode is part of GridSite: http://www.gridsite.org/
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 ab150b1..0000000
+++ /dev/null
@@ -1,379 +0,0 @@
-/*
-   Copyright (c) 2002-6, 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 GRSTerrorLog(GRSTerrorLevel, GRSTerrorFmt, ...) if (GRSTerrorLogFunc != NULL) (GRSTerrorLogFunc)(__FILE__, __LINE__, GRSTerrorLevel, GRSTerrorFmt, __VA_ARGS__)
-
-#define GRSTerrorLog(GRSTerrorLevel, ...) if (GRSTerrorLogFunc != NULL) (GRSTerrorLogFunc)(__FILE__, __LINE__, GRSTerrorLevel, __VA_ARGS__)
-
-void (*GRSTerrorLogFunc)(char *, int, int, char *, ...);
-
-/* these levels are the same as Unix syslog() and Apache ap_log_error() */
-
-#define GRST_LOG_EMERG   0
-#define GRST_LOG_ALERT   1
-#define GRST_LOG_CRIT    2
-#define GRST_LOG_ERR     3
-#define GRST_LOG_WARNING 4
-#define GRST_LOG_NOTICE  5
-#define GRST_LOG_INFO    6
-#define GRST_LOG_DEBUG   7
-
-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
-
-#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.5"
-#define GRST_VOMS_DIR          "/etc/grid-security/vomsdir"
-
-#define GRST_ASN1_MAXCOORDLEN  50
-#define GRST_ASN1_MAXTAGS      500
-
-struct GRSTasn1TagList { char treecoords[GRST_ASN1_MAXCOORDLEN+1];
-                         int  start;
-                         int  headerlength;
-                         int  length;
-                         int  tag; } ;
-
-typedef struct { int    type;          /* CA, user, proxy, VOMS, ... */
-                 int    errors;                /* unchecked, bad sig, bad time */
-                 char   *ca;           /* Cert CA DN, or VOMS issuer CA */
-                 char   *dn;           /* Cert DN, or VOMS issuer DN */
-                 char   *value;                /* VOMS FQAN or NULL */
-                 time_t start;
-                 time_t finish;
-                 int    serial;
-                 char   *ocsp;         /* accessLocation field */
-                 void   *raw;          /* X509 or VOMS Extension object */
-                 void   *next; } GRSTx509Cert;
-
-#define GRST_CERT_BAD_FORMAT 1
-#define GRST_CERT_BAD_CHAIN  2
-#define GRST_CERT_BAD_SIG    4
-#define GRST_CERT_BAD_TIME   8
-#define GRST_CERT_BAD_OCSP  16
-
-#define GRST_CERT_TYPE_CA    1
-#define GRST_CERT_TYPE_EEC   2
-#define GRST_CERT_TYPE_PROXY 3
-#define GRST_CERT_TYPE_VOMS  4
-
-/* a chain of certs, starting from the first CA */
-typedef struct { GRSTx509Cert *firstcert; } GRSTx509Chain;
-
-int GRSTx509CertLoad(GRSTx509Cert *, X509 *);
-int GRSTx509ChainLoadCheck(GRSTx509Chain **, STACK_OF(X509) *, X509 *, char *);
-int GRSTx509ChainFree(GRSTx509Chain *);
-
-#define GRST_HTTP_PORT         777
-#define GRST_HTTPS_PORT                488
-#define GRST_HTCP_PORT         777
-#define GRST_GSIFTP_PORT       2811
-                         
-#define GRSThtcpNOPop 0
-#define GRSThtcpTSTop 1
-
-typedef struct { unsigned char length_msb;
-                 unsigned char length_lsb;
-                 char text[1]; } GRSThtcpCountstr;
-
-#define GRSThtcpCountstrLen(string) (256*((string)->length_msb) + (string)->length_lsb)
-
-typedef struct { unsigned char total_length_msb;
-                 unsigned char total_length_lsb;
-                 unsigned char version_msb;
-                 unsigned char version_lsb;
-                 unsigned char data_length_msb;
-                 unsigned char data_length_lsb;
-                 unsigned int  response : 4;
-                 unsigned int  opcode   : 4;
-                 unsigned int  rr       : 1;                 
-                 unsigned int  f1       : 1;
-                 unsigned int  reserved : 6;
-                 unsigned int  trans_id;       /* must be 4 bytes */
-                 GRSThtcpCountstr *method;
-                 GRSThtcpCountstr *uri;
-                 GRSThtcpCountstr *version;
-                 GRSThtcpCountstr *req_hdrs;
-                 GRSThtcpCountstr *resp_hdrs;
-                 GRSThtcpCountstr *entity_hdrs;
-                 GRSThtcpCountstr *cache_hdrs;   } GRSThtcpMessage;
-
-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        GRSTgaclEntryUndenyPerm(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 *);
-
-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 *, X509 *);
-char *GRSTx509CachedProxyFind(char *, char *, char *);
-char *GRSTx509FindProxyFileName(void);
-int GRSTx509MakeProxyCert(char **, FILE *, char *, char *, char *, int);
-char *GRSTx509CachedProxyKeyFind(char *, char *, char *);
-int GRSTx509ProxyDestroy(char *, char *, char *);
-int GRSTx509ProxyGetTimes(char *, char *, char *, time_t *, time_t *);
-int GRSTx509CreateProxyRequest(char **, char **, char *);
-int GRSTx509MakeProxyRequest(char **, char *, char *, char *);
-int GRSTx509StringToChain(STACK_OF(X509) **, char *);
-char *GRSTx509MakeDelegationID(void);
-char *GRSTx509MakeProxyFileName(char *, STACK_OF(X509) *);
-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 *);
-
-time_t GRSTasn1TimeToTimeT(char *, size_t);
-int    GRSTasn1SearchTaglist(struct GRSTasn1TagList taglist[], int, char *);
-int    GRSTasn1ParseDump(BIO *, unsigned char *, long,
-                         struct GRSTasn1TagList taglist[], int, int *);
-int    GRSTasn1GetX509Name(char *, int, char *, char *,
-                           struct GRSTasn1TagList taglist[], int);
-
-int    GRSThtcpNOPrequestMake(char **, int *, unsigned int);
-int    GRSThtcpNOPresponseMake(char **, int *, unsigned int);
-int    GRSThtcpTSTrequestMake(char **, int *, unsigned int, char *, char *, char *);
-int    GRSThtcpTSTresponseMake(char **, int *, unsigned int, char *, char *, char *);
-int    GRSThtcpMessageParse(GRSThtcpMessage *, char *, int);
diff --git a/org.gridsite.core/project/build.number b/org.gridsite.core/project/build.number
deleted file mode 100644 (file)
index e3c0104..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#Wed Feb 23 03:19:54 CET 2005
-module.build=141
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 c4067ab..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} STDSOAP2=${with.gsoap.prefix}/src/stdsoap2.c GSOAPDIR=${with.gsoap.prefix} OPENSSL_GLOBUS_FLAGS=-I${with.globus.prefix}/include/${with.globus.dbg.nothr.flavor} OPENSSL_GLOBUS_LIBS=-L${with.globus.prefix}/lib/ FLAVOR_GLOBUS_EXT=_${with.globus.dbg.nothr.flavor} HTTPD_FLAGS="-I${with.httpd.prefix:-/usr}/include/httpd"' />
-       </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 3a10dac..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-module.version=1.3.4
-module.age=1
diff --git a/org.gridsite.core/src/Doxyfile b/org.gridsite.core/src/Doxyfile
deleted file mode 100644 (file)
index 14f88e0..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                  = . ../interface
-
-# 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 8339bc5..0000000
+++ /dev/null
@@ -1,480 +0,0 @@
-#
-#   Andrew McNab and Shiv Kaushal, University of Manchester.
-#   Copyright (c) 2002-6. 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 $(HTTPD_FLAGS) -I/usr/include/httpd -I/usr/include/apr-0 -I/opt/glite/include -fPIC
-endif
-
-ifndef MYLDFLAGS
-export MYLDFLAGS=-L.
-endif
-
-
-
-#
-# Build
-#
-
-build: apidoc build-lib \
-       htcp gridsite-copy.cgi mod_gridsite.so \
-       urlencode findproxyfile real-gridsite-admin.cgi gsexec
-
-build-lib: libgridsite_globus.so.$(VERSION) libgridsite_globus.a \
-           libgridsite.so.$(VERSION) libgridsite.a 
-
-# First, normal versions using system OpenSSL rather than Globus OpenSSL
-
-libgridsite.so.$(VERSION): grst_err.o grst_x509.o grst_gacl.o grst_xacml.o \
-                           grst_http.o grst_asn1.o grst_htcp.o
-       gcc -shared -Wl,-soname,libgridsite.so.$(MINOR_VERSION) \
-         -o libgridsite.so.$(PATCH_VERSION) -lcrypto `xml2-config --libs` \
-         grst_err.o grst_x509.o grst_gacl.o grst_xacml.o grst_http.o \
-         grst_asn1.o grst_htcp.o 
-       ln -sf libgridsite.so.$(VERSION) libgridsite.so
-       ln -sf libgridsite.so.$(VERSION) libgridsite.so.$(MINOR_VERSION)
-
-libgridsite.a: grst_err.o grst_x509.o grst_gacl.o grst_xacml.o grst_http.o grst_asn1.o grst_htcp.o
-       ar src libgridsite.a grst_err.o grst_x509.o grst_gacl.o grst_xacml.o grst_http.o grst_asn1.o grst_htcp.o
-
-grst_err.o: grst_err.c ../interface/gridsite.h
-       gcc -g $(MYCFLAGS) \
-           -I/usr/kerberos/include \
-           -c grst_err.c
-
-grst_x509.o: grst_x509.c ../interface/gridsite.h
-       gcc -g $(MYCFLAGS) \
-            -I/usr/kerberos/include -c grst_x509.c
-
-grst_gacl.o: grst_gacl.c ../interface/gridsite.h
-       gcc -g $(MYCFLAGS) \
-            -I/usr/kerberos/include `xml2-config --cflags` -c grst_gacl.c
-
-grst_xacml.o: grst_xacml.c ../interface/gridsite.h
-       gcc -g $(MYCFLAGS) \
-            -I/usr/kerberos/include `xml2-config --cflags` -c grst_xacml.c
-
-grst_http.o: grst_http.c ../interface/gridsite.h
-       gcc -g $(MYCFLAGS) \
-                        -I/usr/kerberos/include -c grst_http.c
-
-grst_asn1.o: grst_asn1.c ../interface/gridsite.h
-       gcc -g $(MYCFLAGS) \
-            -I/usr/kerberos/include -c grst_asn1.c
-
-grst_htcp.o: grst_htcp.c ../interface/gridsite.h
-       gcc -g $(MYCFLAGS) \
-            -I/usr/kerberos/include -c grst_htcp.c
-
-# Then build versions using Globus OpenSSL if configured
-
-ifdef OPENSSL_GLOBUS_LIBS
-
-libgridsite_globus.so.$(VERSION): grst_err_globus.o \
-               grst_x509_globus.o grst_gacl_globus.o grst_http_globus.o \
-               grst_asn1_globus.o grst_xacml_globus.o grst_htcp_globus.o 
-       gcc -shared -Wl,-soname,libgridsite_globus.so.$(MINOR_VERSION) \
-         -o libgridsite_globus.so.$(PATCH_VERSION) \
-         grst_err_globus.o grst_x509_globus.o grst_gacl_globus.o grst_xacml_globus.o \
-         grst_http_globus.o grst_asn1_globus.o
-       ln -sf libgridsite_globus.so.$(VERSION) libgridsite_globus.so
-
-libgridsite_globus.a: grst_err_globus.o grst_x509_globus.o grst_gacl_globus.o grst_http_globus.o grst_asn1_globus.o
-       ar src libgridsite_globus.a \
-               grst_err_globus.o grst_x509_globus.o grst_gacl_globus.o grst_http_globus.o grst_asn1_globus.o
-
-grst_err_globus.o: grst_err.c ../interface/gridsite.h
-       gcc -g $(MYCFLAGS) $(OPENSSL_GLOBUS_FLAGS) \
-           -I/usr/kerberos/include \
-           -c grst_err.c \
-           -o grst_err_globus.o
-
-grst_x509_globus.o: grst_x509.c ../interface/gridsite.h
-       gcc -g $(MYCFLAGS) $(OPENSSL_GLOBUS_FLAGS) \
-            -I/usr/kerberos/include -c grst_x509.c \
-            -o grst_x509_globus.o
-
-grst_gacl_globus.o: grst_gacl.c ../interface/gridsite.h
-       gcc -g $(MYCFLAGS) $(OPENSSL_GLOBUS_FLAGS) \
-            -I/usr/kerberos/include `xml2-config --cflags` -c grst_gacl.c \
-            -o grst_gacl_globus.o
-
-grst_xacml_globus.o: grst_xacml.c ../interface/gridsite.h
-       gcc -g $(MYCFLAGS) $(OPENSSL_GLOBUS_FLAGS) \
-            -I/usr/kerberos/include `xml2-config --cflags` -c grst_xacml.c \
-            -o grst_xacml_globus.o
-
-grst_http_globus.o: grst_http.c ../interface/gridsite.h
-       gcc -g $(MYCFLAGS) $(OPENSSL_GLOBUS_FLAGS) \
-            -I/usr/kerberos/include -c grst_http.c \
-            -o grst_http_globus.o
-
-grst_asn1_globus.o: grst_asn1.c ../interface/gridsite.h
-       gcc -g $(MYCFLAGS) $(OPENSSL_GLOBUS_FLAGS) \
-            -I/usr/kerberos/include -c grst_asn1.c \
-            -o grst_asn1_globus.o
-
-grst_htcp_globus.o: grst_htcp.c ../interface/gridsite.h
-       gcc -g $(MYCFLAGS) $(OPENSSL_GLOBUS_FLAGS) \
-            -I/usr/kerberos/include -c grst_htcp.c \
-            -o grst_htcp_globus.o
-
-else
-
-libgridsite_globus.so.$(VERSION): libgridsite.so.$(VERSION)
-       cp -f libgridsite.so.$(VERSION) libgridsite_globus.so.$(VERSION)
-
-libgridsite_globus.a: libgridsite.a
-       cp -f libgridsite.a libgridsite_globus.a
-
-endif
-
-gsexec:        gsexec.c gsexec.h
-       gcc -g -DVERSION=\"$(PATCH_VERSION)\" $(MYCFLAGS) \
-           -o gsexec gsexec.c
-
-urlencode: urlencode.c libgridsite.so.$(VERSION)
-       gcc -g -DVERSION=\"$(PATCH_VERSION)\" $(MYCFLAGS) \
-            -o urlencode urlencode.c -L. \
-            -I/usr/kerberos/include \
-            -lgridsite
-
-htcp: htcp.c libgridsite.so.$(VERSION)
-       gcc -g -DVERSION=\"$(PATCH_VERSION)\" $(MYCFLAGS) \
-           -o htcp htcp.c -L. \
-           -I/usr/kerberos/include \
-            `curl-config --cflags` `curl-config --libs` \
-            -lgridsite
-
-gridsite-copy.cgi: gridsite-copy.c libgridsite.so.$(VERSION)
-       gcc -g -DVERSION=\"$(PATCH_VERSION)\" $(MYCFLAGS) \
-           -o gridsite-copy.cgi gridsite-copy.c -L. \
-           -I/usr/kerberos/include \
-            `curl-config --cflags` `curl-config --libs` \
-            -lgridsite
-
-mod_gridsite.so: mod_gridsite.c mod_ssl-private.h libgridsite.so.$(VERSION)
-       gcc -g $(MYCFLAGS) -shared -Wl,-soname=gridsite_module \
-           -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 -g $(MYCFLAGS) $(MYLDFLAGS) -o real-gridsite-admin.cgi \
-            grst_admin_main.c \
-            grst_admin_gacl.c \
-            grst_admin_file.c \
-            -I/usr/kerberos/include \
-            -DVERSION=\"$(VERSION)\" -lgridsite -lssl -lcrypto -lxml2 -lz -lm
-
-findproxyfile: findproxyfile.c libgridsite.so.$(VERSION)
-       gcc -g -DVERSION=\"$(PATCH_VERSION)\" $(MYCFLAGS) $(MYLDFLAGS) \
-            -o findproxyfile findproxyfile.c -L. \
-            -I/usr/kerberos/include -lgridsite \
-            -lssl -lcrypto -lxml2 -lz -lm
-
-showx509exts: showx509exts.c libgridsite.so.$(VERSION)
-       gcc -g -DVERSION=\"$(PATCH_VERSION)\" $(MYCFLAGS) $(MYLDFLAGS) \
-            -o showx509exts showx509exts.c -L. \
-            -I/usr/kerberos/include \
-            -lgridsite \
-            -lssl -lcrypto -lxml2 -lz -lm
-slashgrid: slashgrid.c libgridsite.so.$(VERSION)
-       gcc -g -o slashgrid -lfuse -lpthread slashgrid.c \
-          $(MYCFLAGS) $(MYLDFLAGS) `xml2-config --cflags` \
-          -D_FILE_OFFSET_BITS=64 -D_REENTRANT -DFUSE_USE_VERSION=22 \
-          -I/usr/kerberos/include `curl-config --cflags` \
-          -L. `curl-config --libs` -lgridsite
-
-# This target is used by make-gridsite-spec to test for FUSE include+libs
-fuse-test: fuse-test.c
-       gcc -g -lfuse fuse-test.c \
-          $(MYCFLAGS) $(MYLDFLAGS) `xml2-config --cflags` \
-          -D_FILE_OFFSET_BITS=64 -D_REENTRANT -DFUSE_USE_VERSION=22
-
-apidoc:
-       date
-       doxygen Doxyfile
-       mkdir -p ../doc/doxygen
-       cp -f doxygen/*.html doxygen/*.css doxygen/*.png ../doc/doxygen
-       cd ../doc ; for i in *.1 *.8 ; do ../src/roffit < $$i \
-          > $$i.html ; done
-
-gaclexample: gaclexample.c libgridsite.a
-       gcc -g -o gaclexample gaclexample.c -I. -L. \
-            -I/usr/kerberos/include -lgridsite \
-            -lssl -lcrypto -lxml2 -lz -lm
-           
-xacmlexample: xacmlexample.c libgridsite.a
-       gcc -g -o xacmlexample xacmlexample.c -I. -L. \
-            -I/usr/kerberos/include -lgridsite \
-            -lssl -lcrypto -lxml2 -lz -lm
-#
-# Delegation machinery, including SOAP delegation portType. To build this
-# you either need to use the gLite build environment and set REPOSITORY
-# or install gSOAP and set GSOAPDIR to the directory containing
-# soapcpp2 and stdsoap2.h (unless GSOAPDIR is set already)
-#
-
-ifndef GSOAPDIR
- export GSOAPDIR=/usr
-endif
-
-ifndef GRIDSITEDIR
- export GRIDSITEDIR=/usr
-endif
-
-
-DelegationService.wsdl: delegation.h
-       $(GSOAPDIR)/bin/soapcpp2 -c delegation.h
-
-gridsite-delegation.cgi: grst-delegation.c delegation.h \
-                         DelegationService.wsdl libgridsite.so.$(VERSION)
-       gcc -g $(MYCFLAGS) $(MYLDFLAGS) -o gridsite-delegation.cgi \
-            grst-delegation.c \
-            -I/usr/kerberos/include -I. -I$(GSOAPDIR)/include \
-            -I$(GRIDSITEDIR)/include \
-            -DVERSION=\"$(VERSION)\" -L. -L$(GSOAPDIR)/lib \
-            -L$(GRIDSITEDIR)/lib \
-            soapC.c soapServer.c -lgsoap \
-            -lgridsite -lcurl -lz -lssl -lcrypto -lxml2 -lm
-
-htproxyput: htproxyput.c delegation.h DelegationService.wsdl libgridsite.so.$(VERSION)
-       gcc -g $(MYCFLAGS) $(MYLDFLAGS) -o htproxyput \
-            htproxyput.c \
-            -I/usr/kerberos/include -I. \
-            -g -DVERSION=\"$(VERSION)\" \
-            -I$(GSOAPDIR)/include \
-            -I$(GRIDSITEDIR)/include \
-            -DWITH_OPENSSL -L. -L$(GSOAPDIR)/lib \
-            $(STDSOAP2) \
-            soapC.c soapClient.c -lgsoapssl \
-            -lgridsite -lcurl -lz -lssl -lcrypto -lxml2 -lm
-        
-# This target is used by make-gridsite-spec to test for gSOAP include+libs
-gsoap-test: gsoap-test.c 
-       gcc -g $(MYCFLAGS) $(MYLDFLAGS) -o gsoap-test \
-            gsoap-test.c \
-            -I/usr/kerberos/include -I. \
-            -g -DVERSION=\"$(VERSION)\" \
-            -I$(GSOAPDIR)/include \
-            -I$(GRIDSITEDIR)/include \
-            -DWITH_OPENSSL -L$(GSOAPDIR)/lib \
-            $(STDSOAP2) -L$(GRIDSITEDIR)/lib \
-            -lgsoapssl -lz -lssl -lcrypto -lxml2 -lm
-        
-clean:
-
-#
-# Install
-#
-
-install: apidoc install-lib
-       mkdir -p $(prefix)/include \
-                 $(prefix)/lib \
-                 $(prefix)/bin \
-                 $(prefix)/sbin \
-                 $(prefix)/share/man/man1 \
-                 $(prefix)/share/man/man8 \
-                 $(prefix)/lib/httpd/modules \
-                 $(prefix)/share/doc/gridsite-$(MINOR_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 real-gridsite-admin.cgi $(prefix)/sbin
-       cp -f gridsite-copy.cgi $(prefix)/sbin
-       cp -f ../CHANGES ../README ../INSTALL ../LICENSE ../VERSION \
-               $(prefix)/share/doc/gridsite-$(MINOR_VERSION)
-       cp -f ../doc/index.html ../doc/*.conf ../doc/*.sh ../doc/*.spec \
-               $(prefix)/share/doc/gridsite-$(MINOR_VERSION)
-       for i in htcp.1 htfind.1 htll.1 htls.1 htmkdir.1 htmv.1 htping.1 \
-        htrm.1 urlencode.1 findproxyfile.1 ; do \
-        cp -f ../doc/$$i.html $(prefix)/share/doc/gridsite-$(MINOR_VERSION) ; \
-         cp -f ../doc/$$i $(prefix)/share/doc/gridsite-$(MINOR_VERSION) ; \
-         cp -f ../doc/$$i $(prefix)/share/man/man1 ; \
-         gzip -f $(prefix)/share/man/man1/$$i ; done
-       for i in mod_gridsite.8 gsexec.8 ; do \
-        cp -f ../doc/$$i.html $(prefix)/share/doc/gridsite-$(MINOR_VERSION) ; \
-         cp -f ../doc/$$i $(prefix)/share/doc/gridsite-$(MINOR_VERSION) ; \
-         cp -f ../doc/$$i $(prefix)/share/man/man8 ; \
-         gzip -f $(prefix)/share/man/man8/$$i ; 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
-       ln -sf htcp $(prefix)/bin/htmv
-       ln -sf htcp $(prefix)/bin/htping
-       ln -sf htcp $(prefix)/bin/htfind
-       cp -f gsexec $(prefix)/sbin
-       cp -f mod_gridsite.so $(prefix)/lib/httpd/modules
-
-install-lib:
-       mkdir -p $(prefix)/lib
-       cp -f  libgridsite.a $(prefix)/lib
-       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  libgridsite_globus.a $(prefix)/lib
-       cp -f  libgridsite_globus.so.$(PATCH_VERSION) $(prefix)/lib
-       ln -sf libgridsite_globus.so.$(PATCH_VERSION) \
-                                 $(prefix)/lib/libgridsite_globus.so
-       ln -sf libgridsite_globus.so.$(PATCH_VERSION) \
-                                 $(prefix)/lib/libgridsite_globus.so.$(MAJOR_VERSION)
-       ln -sf libgridsite_globus.so.$(PATCH_VERSION) \
-                                 $(prefix)/lib/libgridsite_globus.so.$(MINOR_VERSION)
-
-install-slashgrid: slashgrid
-       cp -f slashgrid $(prefix)/sbin
-       cp -f slashgrid.init $(RPM_BUILD_ROOT)/etc/rc.d/init.d/slashgrid
-       mkdir -p $(RPM_BUILD_ROOT)/var/spool/slashgrid/headers
-       mkdir -p $(RPM_BUILD_ROOT)/var/spool/slashgrid/blocks
-       mkdir -p $(RPM_BUILD_ROOT)/var/spool/slashgrid/tmp
-
-install-ws: gridsite-delegation.cgi htproxyput
-       mkdir -p $(prefix)/include \
-                 $(prefix)/lib \
-                 $(prefix)/bin \
-                 $(prefix)/sbin \
-                 $(prefix)/share/man/man1 \
-                 $(prefix)/share/man/man8 \
-                 $(prefix)/share/doc/gridsite-$(MINOR_VERSION)
-       cp -f ../doc/*.wsdl $(prefix)/share/doc/gridsite-$(MINOR_VERSION)
-       for i in htproxyput.1 htproxytime.1 htproxyrenew.1 htproxydestroy.1 \
-        htproxyunixtime.1 ; do \
-        cp -f ../doc/$$i.html $(prefix)/share/doc/gridsite-$(MINOR_VERSION) ; \
-         cp -f ../doc/$$i $(prefix)/share/doc/gridsite-$(MINOR_VERSION) ; \
-         cp -f ../doc/$$i $(prefix)/share/man/man1 ; \
-         gzip -f $(prefix)/share/man/man1/$$i ; done
-       for i in gridsite-delegation.8 ; do \
-        cp -f ../doc/$$i.html $(prefix)/share/doc/gridsite-$(MINOR_VERSION) ; \
-         cp -f ../doc/$$i $(prefix)/share/doc/gridsite-$(MINOR_VERSION) ; \
-         cp -f ../doc/$$i $(prefix)/share/man/man8 ; \
-         gzip -f $(prefix)/share/man/man8/$$i ; done
-       cp -f htproxyput $(prefix)/bin
-       ln -sf htproxyput $(prefix)/bin/htproxydestroy
-       ln -sf htproxyput $(prefix)/bin/htproxytime
-       ln -sf htproxyput $(prefix)/bin/htproxyunixtime
-       ln -sf htproxyput $(prefix)/bin/htproxyrenew
-       cp -f gridsite-delegation.cgi $(prefix)/sbin
-          
-#
-# Distributions
-#
-
-# source files tarball
-dist:
-       mkdir -p ../dist/gridsite-$(PATCH_VERSION)/src \
-                 ../dist/gridsite-$(PATCH_VERSION)/doc \
-                 ../dist/gridsite-$(PATCH_VERSION)/interface
-       cp -f ../VERSION ../README ../LICENSE ../CHANGES ../INSTALL \
-                 ../dist/gridsite-$(PATCH_VERSION)
-       cp -f Makefile grst*.c htcp.c slashgrid.c slashgrid.init \
-                 urlencode.c findproxyfile.c gaclexample.c mod_gridsite.c \
-                 htproxyput.c grst_admin.h mod_ssl-private.h \
-                 gsexec.c gsexec.h gridsite-copy.c delegation.h \
-                 roffit make-gridsite-spec \
-                 Doxyfile doxygen.css doxyheader.html \
-                 ../dist/gridsite-$(PATCH_VERSION)/src
-       cp -f ../doc/*.html ../doc/*.1 ../doc/*.8 ../doc/*.conf ../doc/*.sh \
-              ../doc/*.spec ../doc/*.wsdl \
-               ../dist/gridsite-$(PATCH_VERSION)/doc
-       cp -f ../interface/*.h \
-                 ../dist/gridsite-$(PATCH_VERSION)/interface
-       cd ../dist ; tar zcvf ../gridsite-$(PATCH_VERSION).src.tar.gz \
-                 gridsite-$(PATCH_VERSION)
-       rm -Rf ../dist/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/htmkdir.1 \
-              ../doc/htll.1 ../doc/htmv.1 ../doc/htping.1 ../doc/htfind.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
-       ln -sf htcp ../htcp-bin-$(PATCH_VERSION)/bin/htmv
-       ln -sf htcp ../htcp-bin-$(PATCH_VERSION)/bin/htping
-       ln -sf htcp ../htcp-bin-$(PATCH_VERSION)/bin/htfind
-       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
-       export PATCH_VERSION=$(PATCH_VERSION) ; \
-        export MINOR_VERSION=$(MINOR_VERSION) ; \
-        export MYPREFIX=/usr ; \
-        ./make-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
-       $(RPMCMD) --define "_topdir $(MYRPMDIR)" \
-                  -ba --buildroot $(MYRPMDIR)/BUILDROOT gridsite.spec
-
-
-wtf: 
-       pwd
-       printenv
-       ls -l
-       ls -lR /usr/local/
-       ls -lR $(GSOAPDIR)
-
-
diff --git a/org.gridsite.core/src/delegation.h b/org.gridsite.core/src/delegation.h
deleted file mode 100644 (file)
index 01b462f..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-//gsoap ns schema namespace:   http://www.gridsite.org/namespaces/delegation-1
-
-struct ns__DelegationExceptionType
-{
-   char *message;      //nillable
-};
-    
-struct ns__NewProxyReq
-{
-   char *proxyRequest; //nillable
-   char *delegationID; //nillable
-};
-
-struct _DelegationException
-{
-   struct ns__DelegationExceptionType *ns__DelegationException;
-};
-
-//gsoap ns service name:       DelegationSoapBinding
-//gsoap ns service type:       Delegation
-//gsoap ns service port:       https://localhost/gridsite-delegation.cgi
-//gsoap ns service namespace:  http://www.gridsite.org/namespaces/delegation-1
-
-/* *** getProxyReq method *** */
-
-//gsoap ns service method-style:       rpc
-//gsoap ns service method-encoding:    literal
-//gsoap ns service method-action:      ""
-//gsoap ns service method-fault:       getProxyReq _DelegationException
-
-int ns__getProxyReq(char *_delegationID, 
-                    struct ns__getProxyReqResponse {
-                                    char *getProxyReqReturn; } *);
-
-/* *** getNewProxyReq method *** */
-
-//gsoap ns service method-style:       getNewProxyReq rpc
-//gsoap ns service method-encoding:    getNewProxyReq literal
-//gsoap ns service method-action:      getNewProxyReq ""
-//gsoap ns service method-fault:       getNewProxyReq _DelegationException
-
-int ns__getNewProxyReq(struct ns__getNewProxyReqResponse {
-                         struct ns__NewProxyReq *getNewProxyReqReturn; } *);
-  
-/* *** renewProxyReq method *** */
-
-//gsoap ns service method-style:       renewProxyReq rpc
-//gsoap ns service method-encoding:    renewProxyReq literal
-//gsoap ns service method-action:      renewProxyReq ""
-//gsoap ns service method-fault:       renewProxyReq _DelegationException
-
-int ns__renewProxyReq(char *_delegationID,
-                      struct ns__renewProxyReqResponse {
-                                          char *_renewProxyReqReturn; } *);
-
-/* *** putProxy method *** */
-
-//gsoap ns service method-style:       putProxy rpc
-//gsoap ns service method-encoding:    putProxy literal
-//gsoap ns service method-action:      putProxy ""
-//gsoap ns service method-fault:       putProxy _DelegationException
-
-int ns__putProxy(char *_delegationID, 
-                 char *_proxy,
-                 struct ns__putProxyResponse { } *);
-
-/* *** getTerminationTime method *** */
-
-//gsoap ns service method-style:       getTerminationTime rpc
-//gsoap ns service method-encoding:    getTerminationTime literal
-//gsoap ns service method-action:      getTerminationTime ""
-//gsoap ns service method-fault:       getTerminationTime _DelegationException
-
-int ns__getTerminationTime(char *_delegationID,
-                           struct ns__getTerminationTimeResponse {
-                                     time_t _getTerminationTimeReturn; } *);
-                                     
-/* *** destroy method *** */
-
-//gsoap ns service method-style:       destroy rpc
-//gsoap ns service method-encoding:    destroy literal
-//gsoap ns service method-action:      destroy ""
-//gsoap ns service method-fault:       destroy _DelegationException
-
-int ns__destroy(char *_delegationID,
-                struct ns__destroyResponse { } *);
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 423ffa2..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
-   Copyright (c) 2002-6, 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-copy.c b/org.gridsite.core/src/gridsite-copy.c
deleted file mode 100644 (file)
index d59231f..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
-   Copyright (c) 2005, Yibiao Li, 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.
-*/
-
-///////////////////////////////////////////////////////////////////
-//
-// compile: gcc -lcurl gridsite-copy.c -o gridsite-copy.cgi
-// usage: cp gridsite-copy.cgi to the cgi-bin directory
-//        and map the COPY method to gridsite-copy.cgi
-//        by adding a line in httpd.conf:
-//        script COPY /cgi-bin/gridsite-copy.cgi
-//
-///////////////////////////////////////////////////////////////////
-#include <stdio.h>
-#include <time.h>
-#include <string.h>
-#include <stdlib.h>
-#include <curl/curl.h>
-#include <sys/types.h>
-#include <sys/times.h>
-
-extern char **environ;
-
-size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
-{
-  int written = fwrite(ptr, size, nmemb, (FILE *)stream);
-  return written;
-}
-
-int main( int argn, char **argv )
-{
-       char *getenv();
-
-       CURL *curl;
-       CURLcode res;
-       struct tms s_time, e_time;
-       FILE *fout;
-
-       char *requestURI;
-       int grstPerm, srcsecure;
-       char passcode[100];
-       char destination[500], destDir[400], destName[100];
-       char *ptr, *ptr1;
-
-       times(&s_time);
-       passcode[0]='\0';
-       char *capath="/etc/grid-security/certificates";
-
-               printf("Content-type: text/html\n\n");
-               printf("<html><head><title>HTTP COPY</title></head>\n");
-               printf("<body><h1>HTTP FILE COPY</h1>\n");
-
-       curl = curl_easy_init();
-       printf("Server: Initialized!\n");
-       if(curl) {
-         //get the request URI
-         requestURI = curl_getenv("REQUEST_URI");
-         if( strncmp( requestURI, "https://", 8 )==0 )srcsecure=1;
-         else srcsecure=0;
-         printf("The request URL is %s\n", requestURI);
-
-         //get the destination directory and file name
-         strcpy(destination, getenv("HTTP_DESTINATION"));
-         ptr=destination;
-         ptr1 = strrchr(ptr, '/');
-         ptr1+=1;
-         strcpy( destName, ptr1 );
-         *ptr1 = '\0';
-         strcpy( destDir, ptr );
-
-         // get the one time passcode from cookie string.
-         // the segmenty of code is tested on 19th sep. 2005
-         if( (ptr=curl_getenv("HTTP_COOKIE")) != NULL)
-           {
-             ptr += 17;
-             strcpy( passcode, ptr );
-           }
-
-         //get permision attributes
-         grstPerm = atoi(curl_getenv("GRST_DESTINATION_PERM"));
-
-                 if( grstPerm & 8 )  // write right
-           {
-             curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
-
-             if( srcsecure == 1 )
-               {
-                 curl_easy_setopt(curl, CURLOPT_COOKIE, passcode );
-                 curl_easy_setopt(curl, CURLOPT_CAPATH, capath );
-               }
-
-             curl_easy_setopt(curl, CURLOPT_URL, requestURI );
-
-             strcpy( destination, getenv("GRST_DESTINATION_TRANSLATED"));
-             fout = fopen( destination, "w" );
-             if( fout == NULL ){
-               printf("cannot open file to write,");
-               printf(" maybe you have no right to write in the directory.\n");
-               exit(-1);
-             }
-             curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
-             curl_easy_setopt(curl, CURLOPT_WRITEDATA, fout );
-             res = curl_easy_perform(curl);
-             if( res!=0 )
-               {
-                 printf("Server: There are some things wrong with OPT parameters.%d \n", res);
-               }
-             else printf("Server: The file has been successfully copied.\n");
-             fclose(fout);
-           }
-         else
-           {
-             printf("You have no permission to write in the destination directory.\n");
-           }
-
-         curl_easy_cleanup(curl);
-       }
-       else{
-         printf("Server: cannot initialize CURL!\n");
-       }
-
-       curl_global_cleanup();
-
-       times(&e_time);
-       printf("Server: copying time %ld seconds\n", e_time.tms_utime-s_time.tms_utime);
-               printf("</body></html>\n");
-       return 0;
-}
diff --git a/org.gridsite.core/src/grst-delegation.c b/org.gridsite.core/src/grst-delegation.c
deleted file mode 100644 (file)
index 87f2278..0000000
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
-   Copyright (c) 2002-6, 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 <gridsite.h>
-
-#include "soapH.h"
-#include "DelegationSoapBinding.nsmap"
-
-#define GRST_PROXYCACHE    "/../proxycache/"
-
-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;
-    }    
-
-  puts("Status: 501 Method Not Implemented\n");
-  return 0;
-}
-
-char *get_dn(void)
-{
-  int   i;
-  char *p, *s, *dn;
-  GRSTgaclCred *cred = NULL;
-   
-  for (i=0; ; ++i)
-     {  
-       asprintf(&p, "GRST_CRED_%d", i);
-       s = getenv(p);
-       free(p);
-       
-       if (s == NULL) break;
-       
-       if ((cred = GRSTx509CompactToCred(s)) == NULL) break;
-       
-       if ((strcmp(cred->type, "person") == 0) &&
-           (cred->firstname != NULL) &&
-           (cred->firstname->name != NULL) &&
-           (strcmp(cred->firstname->name, "dn") == 0) &&
-           (cred->firstname->value != NULL))
-         {
-           dn = strdup(cred->firstname->value);
-           GRSTgaclCredFree(cred);
-           return dn;
-         }
-       
-       GRSTgaclCredFree(cred);
-     }
-  
-  return NULL;  
-}
-
-int ns__getProxyReq(struct soap *soap, 
-                    char *delegation_id,
-                    struct ns__getProxyReqResponse *response)
-{ 
-  int   i;
-  char *p, *user_dn, *docroot, *proxydir, *request;
-  
-  if ((user_dn = get_dn()) == NULL) return SOAP_ERR;
-
-  if ((delegation_id == NULL) || (*delegation_id == '\0')) 
-                               delegation_id = GRSTx509MakeDelegationID();
-  else for (i=0; delegation_id[i] != '\0'; ++i)
-          {
-            if (!isalnum(delegation_id[i]) && 
-                (delegation_id[i] != '.') &&
-                (delegation_id[i] != ',') &&
-                (delegation_id[i] != '_')) 
-              {
-                delegation_id = NULL;
-                break;
-              }
-          }
-  
-  docroot = getenv("DOCUMENT_ROOT");
-  asprintf(&proxydir, "%s/%s", docroot, GRST_PROXYCACHE);
-
-  if ((user_dn != NULL) && 
-      (user_dn[0] != '\0') && 
-      (delegation_id != NULL) &&
-      (GRSTx509MakeProxyRequest(&request, proxydir,
-                                delegation_id, user_dn) == 0))
-    {
-      response->getProxyReqReturn = request;
-    
-      free(user_dn);
-      return SOAP_OK;
-    }
-      
-  free(user_dn);
-  return SOAP_ERR;
-} 
-
-int ns__getNewProxyReq(struct soap *soap, 
-                       struct ns__getNewProxyReqResponse *response)
-{
-  char *p, *user_dn, *docroot, *proxydir, *request, *delegation_id;
-
-  if ((user_dn = get_dn()) == NULL) return SOAP_ERR;
-
-  delegation_id = GRSTx509MakeDelegationID();
-  
-  docroot = getenv("DOCUMENT_ROOT");
-  asprintf(&proxydir, "%s/%s", docroot, GRST_PROXYCACHE);
-
-  if ((user_dn != NULL) && 
-      (user_dn[0] != '\0') && 
-      (delegation_id != NULL) &&
-      (GRSTx509MakeProxyRequest(&request, proxydir,
-                                delegation_id, user_dn) == 0))
-    {
-      response->getNewProxyReqReturn = malloc(sizeof(struct ns__NewProxyReq));      
-      response->getNewProxyReqReturn->proxyRequest = request;
-      response->getNewProxyReqReturn->delegationID = delegation_id;
-    
-      free(user_dn);
-      return SOAP_OK;
-    }
-
-  free(user_dn);
-  return SOAP_ERR;
-} 
-                                 
-int ns__putProxy(struct soap *soap, char *delegation_id, 
-                                    char *proxy,
-                                    struct ns__putProxyResponse *response)
-{ 
-  int   fd, c, len = 0, i;
-  char *docroot, *proxydir, *p, *user_dn;
-  
-  if ((user_dn = get_dn()) == NULL) return SOAP_ERR;
-  
-  if ((delegation_id == NULL) || (*delegation_id == '\0')) 
-                               delegation_id = GRSTx509MakeDelegationID();
-  else for (i=0; delegation_id[i] != '\0'; ++i)
-          {
-            if (!isalnum(delegation_id[i]) && 
-                (delegation_id[i] != '.') &&
-                (delegation_id[i] != ',') &&
-                (delegation_id[i] != '_')) 
-              {
-                delegation_id = NULL;
-                break;
-              }
-          }
-  
-  docroot = getenv("DOCUMENT_ROOT");
-  asprintf(&proxydir, "%s/%s", docroot, GRST_PROXYCACHE);
-
-  if ((user_dn == NULL) || 
-      (user_dn[0] == '\0') ||
-      (delegation_id == NULL) ||  
-      (GRSTx509CacheProxy(proxydir, delegation_id, user_dn, proxy) 
-                                                      != GRST_RET_OK))
-    {
-      free(proxydir);
-      free(user_dn);
-      return SOAP_ERR;
-    }
-      
-  free(proxydir);
-  free(user_dn);
-  return SOAP_OK;
-} 
-
-int ns__renewProxyReq(struct soap *soap, 
-                      char *delegation_id, 
-                      struct ns__renewProxyReqResponse *response)
-{ 
-  int   i;
-  char *p, *user_dn, *docroot, *proxydir, *request;
-  
-  if ((user_dn = get_dn()) == NULL) return SOAP_ERR;
-  
-  if (delegation_id == NULL)
-    {
-      free(user_dn);
-      return SOAP_ERR;
-    }
-    
-  for (i=0; delegation_id[i] != '\0'; ++i)
-          {
-            if (!isalnum(delegation_id[i]) && 
-                (delegation_id[i] != '.') &&
-                (delegation_id[i] != ',') &&
-                (delegation_id[i] != '_')) 
-              {
-                delegation_id = NULL;
-                break;
-              }
-          }
-  
-  if (*delegation_id == '\0')
-    {
-      free(user_dn);
-      return SOAP_ERR;
-    }
-    
-  docroot = getenv("DOCUMENT_ROOT");
-  asprintf(&proxydir, "%s/%s", docroot, GRST_PROXYCACHE);
-
-  if ((user_dn != NULL) && 
-      (user_dn[0] != '\0') && 
-      (delegation_id != NULL) &&
-      (GRSTx509MakeProxyRequest(&request, proxydir,
-                                delegation_id, user_dn) == 0))
-    {
-      response->_renewProxyReqReturn = request;
-    
-      free(user_dn);
-      return SOAP_OK;
-    }
-
-  free(user_dn);      
-  return SOAP_ERR;
-} 
-
-int ns__getTerminationTime(struct soap *soap, 
-                           char *delegation_id, 
-                           struct ns__getTerminationTimeResponse *response)
-{
-  char *p, *user_dn, *docroot, *proxydir;
-  time_t start, finish;
-
-  if ((user_dn = get_dn()) == NULL) return SOAP_ERR;  
-
-  delegation_id = GRSTx509MakeDelegationID();
-  
-  docroot = getenv("DOCUMENT_ROOT");
-  asprintf(&proxydir, "%s/%s", docroot, GRST_PROXYCACHE);
-
-  if ((user_dn != NULL) && 
-      (user_dn[0] != '\0') && 
-      (delegation_id != NULL) &&
-      (GRSTx509ProxyGetTimes(proxydir, delegation_id, user_dn,
-                             &start, &finish) == 0))
-    {
-      response->_getTerminationTimeReturn = finish;
-    
-      free(user_dn);
-      return SOAP_OK;
-    }
-
-  free(user_dn);
-  return SOAP_ERR;
-}
-
-int ns__destroy(struct soap *soap, 
-                char *delegation_id, 
-                struct ns__destroyResponse *response)
-{
-  int   fd, c, len = 0, i;
-  char *docroot, *proxydir, *p, *client_dn, *user_dn;
-  
-  if ((user_dn = get_dn()) == NULL) return SOAP_ERR;  
-  
-  if ((delegation_id == NULL) || (*delegation_id == '\0')) 
-                               delegation_id = GRSTx509MakeDelegationID();
-  else for (i=0; delegation_id[i] != '\0'; ++i)
-          {
-            if (!isalnum(delegation_id[i]) && 
-                (delegation_id[i] != '.') &&
-                (delegation_id[i] != ',') &&
-                (delegation_id[i] != '_')) 
-              {
-                delegation_id = NULL;
-                break;
-              }
-          }
-  
-  docroot = getenv("DOCUMENT_ROOT");
-  asprintf(&proxydir, "%s/%s", docroot, GRST_PROXYCACHE);
-
-  if ((user_dn == NULL) || 
-      (user_dn[0] == '\0') ||
-      (delegation_id == NULL) ||  
-      (GRSTx509ProxyDestroy(proxydir, delegation_id, user_dn) 
-                                                      != GRST_RET_OK))
-    {
-      free(proxydir);
-      free(user_dn);
-      return SOAP_ERR;
-    }
-      
-  free(proxydir);
-  free(user_dn);
-  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 b4d47f5..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&amp;dir_uri=%s&amp;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&amp;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&amp;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&amp;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&amp;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&amp;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&amp;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&amp;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&amp;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 bdcccbd..0000000
+++ /dev/null
@@ -1,981 +0,0 @@
-/*
-  Copyright (c) 2003-5, 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");
-  entry = GRSTgaclEntryNew(); 
-  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==1)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);
-
-
-  // save the new ACL to the temporary file in the correct format using the GridsiteACLFormat directive
-
-  if (strcasecmp(getenv("REDIRECT_GRST_ACL_FORMAT"), "XACML") ==0) GRSTxacmlAclSave(acl, dir_path_vfile);
-  else if (strcasecmp(getenv("REDIRECT_GRST_ACL_FORMAT"), "GACL") ==0) GRSTgaclAclSave(acl, dir_path_vfile);
-  else
-  {
-    GRSThttpPrintf (bp, "ERROR: ACL type not correctly specified");
-    admin_continue(dn, perm, help_uri, dir_path, file, dir_uri, admin_file, bp);
-    return;
-  }
-
-
-  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 a9e9f0e..0000000
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
-   Andrew McNab and Shiv Kaushal, University of Manchester. 
-   Copyright (c) 2002-5. 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           i, 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, buf[12];
-  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];
-        }
-             /* User has a cert so check for voms attributes */
-      for(i=1; ; i++)
-        {
-          sprintf (buf, "GRST_CRED_%d", i);
-
-
-          grst_cred_0 = getenv(buf);
-          if (grst_cred_0==NULL) break;
-
-           if (cred=GRSTx509CompactToCred(grst_cred_0))
-                     GRSTgaclUserAddCred(user, cred);
-        }
-      /* no more voms attributes found found */
-    }
-  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_asn1.c b/org.gridsite.core/src/grst_asn1.c
deleted file mode 100644 (file)
index bc92a87..0000000
+++ /dev/null
@@ -1,506 +0,0 @@
-
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <string.h>
-
-#include <openssl/x509_vfy.h>
-#include <openssl/err.h>
-#include <openssl/pem.h>
-
-#include <openssl/buffer.h>
-#include <openssl/objects.h>
-#include <openssl/asn1.h>
-
-#include "gridsite.h"
-
-/// 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, size_t len)
-{
-   char   zone;
-   struct tm time_tm;
-   
-   if (len == 0) len = strlen(asn1time);
-                                                                                
-   if ((len != 13) && (len != 15)) return 0; /* dont understand */
-                                                                                
-   if ((len == 13) &&
-       ((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 */
-                                                                                
-   if ((len == 15) &&
-       ((sscanf(asn1time, "20%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);
-}
-
-/* this function is taken from OpenSSL without modification */
-
-static int asn1_print_info(BIO *bp, int tag, int xclass, int constructed,
-            int indent)
-       {
-       static const char fmt[]="%-18s";
-       static const char fmt2[]="%2d %-15s";
-       char str[128];
-       const char *p,*p2=NULL;
-
-       if (constructed & V_ASN1_CONSTRUCTED)
-               p="cons: ";
-       else
-               p="prim: ";
-       if (BIO_write(bp,p,6) < 6) goto err;
-#if OPENSSL_VERSION_NUMBER >= 0x0090701fL
-       BIO_indent(bp,indent,128);
-#endif
-
-       p=str;
-       if ((xclass & V_ASN1_PRIVATE) == V_ASN1_PRIVATE)
-                       sprintf(str,"priv [ %d ] ",tag);
-       else if ((xclass & V_ASN1_CONTEXT_SPECIFIC) == V_ASN1_CONTEXT_SPECIFIC)
-               sprintf(str,"cont [ %d ]",tag);
-       else if ((xclass & V_ASN1_APPLICATION) == V_ASN1_APPLICATION)
-               sprintf(str,"appl [ %d ]",tag);
-       else p = ASN1_tag2str(tag);
-
-       if (p2 != NULL)
-               {
-               if (BIO_printf(bp,fmt2,tag,p2) <= 0) goto err;
-               }
-       else
-               {
-               if (BIO_printf(bp,fmt,p) <= 0) goto err;
-               }
-       return(1);
-err:
-       return(0);
-       }
-
-static void GRSTasn1AddToTaglist(struct GRSTasn1TagList taglist[], 
-                           int maxtag, int *lasttag,
-                           char *treecoords, int start, int headerlength,
-                           int length, int tag)
-{
-   if ((strlen(treecoords) > GRST_ASN1_MAXCOORDLEN) ||
-       (*lasttag + 1 > maxtag)) return;
-   
-   ++(*lasttag);
-   
-   strncpy(taglist[*lasttag].treecoords, treecoords, GRST_ASN1_MAXCOORDLEN+1);
-   taglist[*lasttag].start = start;
-   taglist[*lasttag].headerlength = headerlength;
-   taglist[*lasttag].length = length;
-   taglist[*lasttag].tag = tag;
-}
-
-int GRSTasn1SearchTaglist(struct GRSTasn1TagList taglist[], 
-                                 int lasttag, char *treecoords)
-{
-   int i;
-   
-   for (i=0; i <= lasttag; ++i)
-      {
-        if (strcmp(treecoords, taglist[i].treecoords) == 0) return i;
-      }
-      
-   return -1;
-}
-
-static int GRSTasn1PrintPrintable(BIO *bp, char *str, int length)
-{
-   int   ret = 0;
-   char *dup, *p;
-   
-   dup = strndup(str, length);
-
-   for (p=dup; *p != '\0'; ++p) if ((*p < ' ') || (*p > '~')) *p = '.';
-
-   if (bp != NULL) ret = BIO_write(bp, dup, strlen(dup));
-
-   free(dup);
-   
-   return ret;
-}
-
-static int GRSTasn1Parse2(BIO *bp, unsigned char **pp, long length, int offset,
-            int depth, int indent, int dump, char *treecoords,
-            struct GRSTasn1TagList taglist[], int maxtag, int *lasttag)
-       {
-        int sibling = 0;
-        char sibtreecoords[512];
-
-       unsigned char *p,*ep,*tot,*op,*opp;
-       long len;
-       int tag,xclass,ret=0;
-       int nl,hl,j,r;
-       ASN1_OBJECT *o=NULL;
-       ASN1_OCTET_STRING *os=NULL;
-       int dump_indent;
-
-
-       dump_indent = 6;        /* Because we know BIO_dump_indent() */
-       p= *pp;
-       tot=p+length;
-       op=p-1;
-       while ((p < tot) && (op < p))
-               {
-               op=p;
-               j=ASN1_get_object(&p,&len,&tag,&xclass,length);
-
-               if (j & 0x80)
-                       {
-                       if ((bp != NULL) && 
-                           (BIO_write(bp,"Error in encoding\n",18) <= 0))
-                               goto end;
-                       ret=0;
-                       goto end;
-                       }
-               hl=(p-op);
-               length-=hl;
-
-               ++sibling;
-               sprintf(sibtreecoords, "%s-%d", treecoords, sibling);
-
-                GRSTasn1AddToTaglist(taglist, maxtag, lasttag, sibtreecoords,
-                               (int)offset+(int)(op - *pp),
-                               (int) hl, len, tag);
-                               
-               if (bp != NULL)
-                 {
-                   BIO_printf(bp, "  %s %ld %ld %d %d ", sibtreecoords,
-                          (long)offset+(long)(op - *pp), hl, len, tag);
-
-                   GRSTasn1PrintPrintable(bp, p,
-//                                &((*pp)[(long)offset+(long)(op - *pp)+hl]),
-                                          (len > 30) ? 30 : len);
-
-                   BIO_printf(bp, "\n");
-                }
-
-
-               /* if j == 0x21 it is a constructed indefinite length object */
-               if ((bp != NULL) &&
-                   (BIO_printf(bp,"%5ld:",(long)offset+(long)(op- *pp))
-                       <= 0)) goto end;
-
-               if (j != (V_ASN1_CONSTRUCTED | 1))
-                       {
-                       if ((bp != NULL) && 
-                           (BIO_printf(bp,"d=%-2d hl=%ld l=%4ld ",
-                               depth,(long)hl,len) <= 0))
-                               goto end;
-                       }
-               else
-                       {
-                       if ((bp != NULL) &&
-                           (BIO_printf(bp,"d=%-2d hl=%ld l=inf  ",
-                               depth,(long)hl) <= 0))
-                               goto end;
-                       }
-               if ((bp != NULL) && 
-                   !asn1_print_info(bp,tag,xclass,j,(indent)?depth:0))
-                       goto end;
-               if (j & V_ASN1_CONSTRUCTED)
-                       {
-                       ep=p+len;
-                       if ((bp != NULL) &&
-                           (BIO_write(bp,"\n",1) <= 0)) goto end;
-                       if (len > length)
-                               {
-                               if (bp != NULL) BIO_printf(bp,
-                                       "length is greater than %ld\n",length);
-                               ret=0;
-                               goto end;
-                               }
-                       if ((j == 0x21) && (len == 0))
-                               {
-                               for (;;)
-                                       {
-                                       r=GRSTasn1Parse2(bp,&p,(long)(tot-p),
-                                               offset+(p - *pp),depth+1,
-                                               indent,dump,sibtreecoords,
-                                               taglist, maxtag, lasttag);
-                                       if (r == 0) { ret=0; goto end; }
-                                       if ((r == 2) || (p >= tot)) break;
-                                       }
-                               }
-                       else
-                               while (p < ep)
-                                       {
-                                       r=GRSTasn1Parse2(bp,&p,(long)len,
-                                               offset+(p - *pp),depth+1,
-                                               indent,dump,sibtreecoords,
-                                               taglist, maxtag, lasttag);
-                                       if (r == 0) { ret=0; goto end; }
-                                       }
-                       }
-               else if (xclass != 0)
-                       {
-                       p+=len;
-                       if ((bp != NULL) && 
-                           (BIO_write(bp,"\n",1) <= 0)) goto end;
-                       }
-               else
-                       {
-                       nl=0;
-                       if (    (tag == V_ASN1_PRINTABLESTRING) ||
-                               (tag == V_ASN1_T61STRING) ||
-                               (tag == V_ASN1_IA5STRING) ||
-                               (tag == V_ASN1_VISIBLESTRING) ||
-                               (tag == V_ASN1_UTCTIME) ||
-                               (tag == V_ASN1_GENERALIZEDTIME))
-                               {
-                               if ((bp != NULL) &&
-                                   (BIO_write(bp,":",1) <= 0)) goto end;
-                               if ((len > 0) && (bp != NULL) &&
-                                       BIO_write(bp,(char *)p,(int)len)
-                                       != (int)len)
-                                       goto end;
-                               }
-                       else if (tag == V_ASN1_OBJECT)
-                               {
-                               opp=op;
-                               if (d2i_ASN1_OBJECT(&o,&opp,len+hl) != NULL)
-                                       {
-                                       if (bp != NULL)
-                                         {
-                                           if (BIO_write(bp,":",1) <= 0) goto end;
-                                           i2a_ASN1_OBJECT(bp,o);
-                                         }
-                                       }
-                               else
-                                       {
-                                       if ((bp != NULL) && 
-                                           (BIO_write(bp,":BAD OBJECT",11) <= 0))
-                                               goto end;
-                                       }
-                               }
-                       else if (tag == V_ASN1_BOOLEAN)
-                               {
-                               int ii;
-
-                               opp=op;
-                               ii=d2i_ASN1_BOOLEAN(NULL,&opp,len+hl);
-                               if (ii < 0)
-                               {
-                                 if ((bp != NULL) &&
-                                     (BIO_write(bp,"Bad boolean\n",12)))
-                                               goto end;
-                               }
-                               if (bp != NULL) BIO_printf(bp,":%d",ii);
-                               }
-                       else if (tag == V_ASN1_BMPSTRING)
-                               {
-                               /* do the BMP thang */
-                               }
-                       else if (tag == V_ASN1_OCTET_STRING)
-                               {
-                               int i;
-
-                               opp=op;
-                               os=d2i_ASN1_OCTET_STRING(NULL,&opp,len+hl);
-                               if (os != NULL)
-                                       {
-                                       opp=os->data;
-
-                                       if (os->length > 0)
-                                         {
-                                           if ((bp != NULL) &&
-                                                   (BIO_write(bp,":",1) <= 0))
-                                                       goto end;
-                                           if ((bp != NULL) &&
-                                               (GRSTasn1PrintPrintable(bp,
-                                                       opp,
-                                                       os->length) <= 0))
-                                                       goto end;
-                                         }
-
-                                       M_ASN1_OCTET_STRING_free(os);
-                                       os=NULL;
-                                       }
-                               }
-                       else if (tag == V_ASN1_INTEGER)
-                               {
-                               ASN1_INTEGER *bs;
-                               int i;
-
-                               opp=op;
-                               bs=d2i_ASN1_INTEGER(NULL,&opp,len+hl);
-                               if (bs != NULL)
-                                       {
-                                       if ((bp != NULL) &&
-                                           (BIO_write(bp,":",1) <= 0)) goto end;
-                                       if (bs->type == V_ASN1_NEG_INTEGER)
-                                               if ((bp != NULL) &&
-                                                   (BIO_write(bp,"-",1) <= 0))
-                                                       goto end;
-                                       for (i=0; i<bs->length; i++)
-                                               {
-                                               if ((bp != NULL) &&
-                                                   (BIO_printf(bp,"%02X",
-                                                       bs->data[i]) <= 0))
-                                                       goto end;
-                                               }
-                                       if (bs->length == 0)
-                                               {
-                                               if ((bp != NULL) && 
-                                                   (BIO_write(bp,"00",2) <= 0))
-                                                       goto end;
-                                               }
-                                       }
-                               else
-                                       {
-                                       if ((bp != NULL) && 
-                                           (BIO_write(bp,"BAD INTEGER",11) <= 0))
-                                               goto end;
-                                       }
-                               M_ASN1_INTEGER_free(bs);
-                               }
-                       else if (tag == V_ASN1_ENUMERATED)
-                               {
-                               ASN1_ENUMERATED *bs;
-                               int i;
-
-                               opp=op;
-                               bs=d2i_ASN1_ENUMERATED(NULL,&opp,len+hl);
-                               if (bs != NULL)
-                                       {
-                                       if ((bp != NULL) &&
-                                           (BIO_write(bp,":",1) <= 0)) goto end;
-                                       if (bs->type == V_ASN1_NEG_ENUMERATED)
-                                               if ((bp != NULL) &&
-                                                   (BIO_write(bp,"-",1) <= 0))
-                                                       goto end;
-                                       for (i=0; i<bs->length; i++)
-                                               {
-                                               if ((bp != NULL) &&
-                                                   (BIO_printf(bp,"%02X",
-                                                       bs->data[i]) <= 0))
-                                                       goto end;
-                                               }
-                                       if (bs->length == 0)
-                                               {
-                                               if ((bp != NULL) &&
-                                                   (BIO_write(bp,"00",2) <= 0))
-                                                       goto end;
-                                               }
-                                       }
-                               else
-                                       {
-                                       if ((bp != NULL) &&
-                                           (BIO_write(bp,"BAD ENUMERATED",11) <= 0))
-                                               goto end;
-                                       }
-                               M_ASN1_ENUMERATED_free(bs);
-                               }
-                       else if (len > 0 && dump)
-                               {
-                               if (!nl) 
-                                       {
-                                       if ((bp != NULL) &&
-                                           (BIO_write(bp,"\n",1) <= 0))
-                                               goto end;
-                                       }
-                               if ((bp != NULL) &&
-                                   (BIO_dump_indent(bp,(char *)p,
-                                       ((dump == -1 || dump > len)?len:dump),
-                                       dump_indent) <= 0))
-                                       goto end;
-                               nl=1;
-                               }
-
-                       if (!nl) 
-                               {
-                               if ((bp != NULL) &&
-                                   (BIO_write(bp,"\n",1) <= 0)) goto end;
-                               }
-                       p+=len;
-                       if ((tag == V_ASN1_EOC) && (xclass == 0))
-                               {
-                               ret=2; /* End of sequence */
-                               goto end;
-                               }
-                       }
-
-               length-=len;
-               }
-       ret=1;
-end:
-       if (o != NULL) ASN1_OBJECT_free(o);
-       if (os != NULL) M_ASN1_OCTET_STRING_free(os);
-       *pp=p;
-       return(ret);
-       }
-
-int GRSTasn1ParseDump(BIO *bp, unsigned char *pp, long len,
-                      struct GRSTasn1TagList taglist[], 
-                      int maxtag, int *lasttag)
-        {
-           return(GRSTasn1Parse2(bp,&pp,len,0,0,0,0,"",
-                                 taglist, maxtag, lasttag));
-        }                        
-
-int GRSTasn1GetX509Name(char *x509name, int maxlength, char *coords,
-                        char *asn1string,
-                        struct GRSTasn1TagList taglist[], int lasttag)                        
-{
-   int i, iobj, istr, n, len = 0;
-   ASN1_OBJECT *obj = NULL;
-   unsigned char coordstmp[81], *q;
-   const unsigned char *shortname;
-
-   for (i=1; ; ++i)
-      {
-        snprintf(coordstmp, sizeof(coordstmp), coords, i, 1);
-        iobj = GRSTasn1SearchTaglist(taglist, lasttag, coordstmp);
-        if (iobj < 0) break;
-        
-        snprintf(coordstmp, sizeof(coordstmp), coords, i, 2);
-        istr = GRSTasn1SearchTaglist(taglist, lasttag, coordstmp);
-        if (istr < 0) break;
-        
-        q = &asn1string[taglist[iobj].start];
-        d2i_ASN1_OBJECT(&obj, &q, taglist[iobj].length +
-                                  taglist[iobj].headerlength);
-
-        n = OBJ_obj2nid(obj);
-// free obj now?
-        shortname = OBJ_nid2sn(n);
-        
-        if (len + 2 + strlen(shortname) + taglist[istr].length >= maxlength)
-          {
-            x509name[0] = '\0';
-            return GRST_RET_FAILED;          
-          }
-        
-        sprintf(&x509name[len], "/%s=%.*s", shortname, 
-                                taglist[istr].length, 
-               &asn1string[taglist[istr].start+taglist[istr].headerlength]);
-        len += 2 + strlen(shortname) + taglist[istr].length;
-      }
-      
-   x509name[len] = '\0';
-   
-   return (x509name[0] != '\0') ? GRST_RET_OK : GRST_RET_FAILED;
-}
diff --git a/org.gridsite.core/src/grst_err.c b/org.gridsite.core/src/grst_err.c
deleted file mode 100644 (file)
index 8d1e2cb..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-   Copyright (c) 2002-6, 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 "gridsite.h"
-
-void (*GRSTerrorLogFunc)(char *, int, int, char *, ...) = NULL;
-
diff --git a/org.gridsite.core/src/grst_gacl.c b/org.gridsite.core/src/grst_gacl.c
deleted file mode 100644 (file)
index db1dbdb..0000000
+++ /dev/null
@@ -1,1212 +0,0 @@
-/*
-   Copyright (c) 2002-6, 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 but 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;
-}                             
-
-/* declare these two private functions at the start */
-
-GRSTgaclAcl *GRSTgaclAclParse(xmlDocPtr, xmlNodePtr, GRSTgaclAcl *);
-GRSTgaclAcl *GRSTxacmlAclParse(xmlDocPtr, xmlNodePtr, GRSTgaclAcl *);
-
-/*                                             *
- * 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)
-     {
-       if (!xmlIsBlankNode(cur2))
-        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 (xmlIsBlankNode(cur))
-           {
-             cur=cur->next;
-             continue;
-           }
-         else if (xmlStrcmp(cur->name, (const xmlChar *) "allow") == 0)
-           {
-             for (cur2 = cur->xmlChildrenNode; cur2 != NULL; cur2=cur2->next)
-                if (!xmlIsBlankNode(cur2))
-                  {                
-                    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)
-                if (!xmlIsBlankNode(cur2))
-                  {
-                    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;
-
-  GRSTerrorLog(GRST_LOG_DEBUG, "GRSTgaclAclLoadFile() starting");
-
-  if (filename == NULL) 
-    {
-      GRSTerrorLog(GRST_LOG_DEBUG, "GRSTgaclAclLoadFile() cannot open a NULL filename");
-      return NULL;
-    }
-
-  doc = xmlParseFile(filename);
-  if (doc == NULL) 
-    {
-      GRSTerrorLog(GRST_LOG_DEBUG, "GRSTgaclAclLoadFile failed to open ACL file %s", filename);
-      return NULL;
-    }
-
-  cur = xmlDocGetRootElement(doc);
-  if (cur == NULL) 
-    {
-      xmlFreeDoc(doc);
-      GRSTerrorLog(GRST_LOG_DEBUG, "GRSTgaclAclLoadFile failed to parse root of ACL file %s", filename);
-      return NULL;
-    }
-
-  if (!xmlStrcmp(cur->name, (const xmlChar *) "Policy")) 
-    { 
-      GRSTerrorLog(GRST_LOG_DEBUG, "GRSTgaclAclLoadFile parsing XACML");
-      acl=GRSTxacmlAclParse(doc, cur, acl);
-    }
-  else if (!xmlStrcmp(cur->name, (const xmlChar *) "gacl")) 
-    {
-      GRSTerrorLog(GRST_LOG_DEBUG, "GRSTgaclAclLoadFile parsing GACL");
-      acl=GRSTgaclAclParse(doc, cur, acl);
-    }
-  else /* ACL format not recognised */
-    {
-      xmlFreeDoc(doc);
-      return NULL;
-    }
-    
-  xmlFreeDoc(doc);
-  return acl;
-}
-
-GRSTgaclAcl *GRSTgaclAclParse(xmlDocPtr doc, xmlNodePtr cur, GRSTgaclAcl *acl)
-{
-  GRSTgaclEntry  *entry;
-
-  cur = cur->xmlChildrenNode;
-
-  acl = GRSTgaclAclNew();
-
-  while (cur != NULL)
-       {
-         if (!xmlIsBlankNode(cur))
-           {
-             entry = GRSTgaclEntryParse(cur);
-             if (entry == NULL)
-               {
-                 GRSTgaclAclFree(acl);
-
-                 return NULL;
-               }
-
-             GRSTgaclAclAddEntry(acl, entry);
-           }
-
-         cur=cur->next;
-       }
-
-  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(cred->type, "level") == 0)
-                {
-                  if (atoi(usernamevalue->value) 
-                        < atoi(crednamevalue->value)) 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_htcp.c b/org.gridsite.core/src/grst_htcp.c
deleted file mode 100644 (file)
index ec9672a..0000000
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
-   Copyright (c) 2002-5, 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 <string.h> 
-#include <sys/types.h> 
-#include <sys/socket.h> 
-#include <netinet/in.h> 
-#include <arpa/inet.h> 
-
-#include "gridsite.h"
-
-int GRSThtcpNOPrequestMake(char **request, int *request_length,
-                           unsigned int trans_id)
-/* 
-    Make a complete HTCP NOP request and return a pointer to malloc'd
-    memory pointing to it.
-*/
-{
-   *request_length = 
-     asprintf(request,"%c%c"           /* place holder for total length */
-                      "%c%c"           /* HTCP version 0.0 */
-                      "%c%c"           /* DATA length place holder */
-                      "%c%c"           /* OPCODE,RESPONSE,RESERVED,F1,RR */
-                      "%c%c%c%c"       /* TRANS-ID placeholder */
-                      "%c%c",          /* AUTH (LENGTH=2 means no AUTH) */
-                     0, 0,
-                     0, 0,
-                     0, 0,
-                     GRSThtcpNOPop * 16, 2,
-                     0, 0, 0, 0,
-                     0, 2);
-
-   if (*request_length < 0) return GRST_RET_FAILED;
-   
-   (*request)[0] = *request_length / 256;
-   (*request)[1] = *request_length % 256;
-
-   (*request)[4] = (*request_length - 6) / 256;
-   (*request)[5] = (*request_length - 6) % 256;
-   
-   memcpy(&((*request)[8]), &trans_id, 4);
-
-   return GRST_RET_OK;
-}
-
-int GRSThtcpNOPresponseMake(char **message, int *message_length,
-                            unsigned int trans_id)
-/* 
-    Make a complete HTCP NOP response for a found file and return a pointer
-    to malloc'd memory pointing to it.
-*/
-{
-   *message_length = 
-        asprintf(message, 
-                       "%c%c"          /* place holder for total length */
-                       "%c%c"          /* HTCP version 0.0 */
-                       "%c%c"          /* DATA length place holder */
-                       "%c%c"          /* OPCODE,RESPONSE,RESERVED,F1,RR */
-                       "%c%c%c%c"      /* TRANS-ID place holder */
-                       "%c%c",         /* AUTH (LENGTH=2 means no AUTH) */
-            0, 0,
-            0, 0,
-            0, 0,
-            GRSThtcpNOPop * 16, 1, /* RR=1, MO=0, RESPONSE=0 (ie found) */
-            0, 0, 0, 0,
-            0, 2);
-
-   if (*message_length < 0) return GRST_RET_FAILED;
-   
-   (*message)[0] = *message_length / 256;
-   (*message)[1] = *message_length % 256;
-
-   (*message)[4] = (*message_length - 6) / 256;
-   (*message)[5] = (*message_length - 6) % 256;
-
-   memcpy(&((*message)[8]), &trans_id, 4);
-
-   return GRST_RET_OK;
-}
-
-int GRSThtcpTSTrequestMake(char **request, int *request_length,
-                           unsigned int trans_id,
-                           char *method, char *uri, char *req_hdrs)
-/* 
-    Make a complete HTCP TST request and return a pointer to malloc'd
-    memory pointing to it.
-*/
-{
-   if ((method == NULL) || (uri == NULL) || (req_hdrs == NULL)) 
-                                               return GRST_RET_FAILED;
-
-   *request_length = 
-     asprintf(request,"%c%c"           /* place holder for total length */
-                      "%c%c"           /* HTCP version 0.0 */
-                      "%c%c"           /* DATA length place holder */
-                      "%c%c"           /* OPCODE,RESPONSE,RESERVED,F1,RR */
-                      "%c%c%c%c"       /* TRANS-ID placeholder */                    
-                      "%c%c%s"         /* OP-DATA: METHOD */
-                      "%c%c%s"         /* OP-DATA: URI */
-                      "%c%c%s"         /* OP-DATA: VERSION */
-                      "%c%c%s"         /* OP-DATA: REQ-HDRS */
-                      "%c%c",          /* AUTH (LENGTH=2 means no AUTH) */
-                     0, 0, 
-                     0, 0, 
-                     0, 0,       
-                     GRSThtcpTSTop * 16, 2,
-                     0, 0, 0, 0,
-                     strlen(method) / 256, strlen(method) % 256, method,
-                     strlen(uri)    / 256, strlen(uri) % 256,    uri,
-                     0,                    8,                    "HTTP/1.1",
-                     strlen(req_hdrs)/256, strlen(req_hdrs) % 256, req_hdrs,
-                     0, 2);
-
-   if (*request_length < 0) return GRST_RET_FAILED;
-   
-   (*request)[0] = *request_length / 256;
-   (*request)[1] = *request_length % 256;
-
-   (*request)[4] = (*request_length - 6) / 256;
-   (*request)[5] = (*request_length - 6) % 256;
-   
-   memcpy(&((*request)[8]), &trans_id, 4);
-
-   return GRST_RET_OK;
-}
-
-int GRSThtcpTSTresponseMake(char **message, int *message_length,
-                            unsigned int trans_id,
-                            char *resp_hdrs, char *entity_hdrs, 
-                            char *cache_hdrs)
-/* 
-    Make a complete HTCP TST response for a found file and return a pointer
-    to malloc'd memory pointing to it.
-*/
-{
-   if ((resp_hdrs != NULL) && (entity_hdrs != NULL) && (cache_hdrs != NULL)) 
-      /* found file response */
-      *message_length = 
-        asprintf(message, 
-                       "%c%c"          /* place holder for total length */
-                       "%c%c"          /* HTCP version 0.0 */
-                       "%c%c"          /* DATA length place holder */
-                       "%c%c"          /* OPCODE,RESPONSE,RESERVED,F1,RR */
-                       "%c%c%c%c"      /* TRANS-ID place holder */
-                       "%c%c%s"                /* OP-DATA: RESP-HDRS */
-                       "%c%c%s"                /* OP-DATA: ENTITY-HDRS */
-                       "%c%c%s"                /* OP-DATA: CACHE-HDRS */
-                       "%c%c",         /* AUTH (LENGTH=2 means no AUTH) */
-            0, 0, 
-            0, 0, 
-            0, 0,       
-            GRSThtcpTSTop * 16, 1, /* RR=1, MO=0, RESPONSE=0 (ie found) */
-            0, 0, 0, 0,
-            strlen(resp_hdrs) / 256,   strlen(resp_hdrs) % 256,   resp_hdrs,
-            strlen(entity_hdrs) / 256, strlen(entity_hdrs) % 256, entity_hdrs,
-            strlen(cache_hdrs) / 256,  strlen(cache_hdrs) % 256,  cache_hdrs,
-            0, 2);
-   else if (cache_hdrs != NULL) 
-      /* not found file response, just cache_hdrs given */
-      *message_length = 
-        asprintf(message, 
-                       "%c%c"          /* place holder for total length */
-                       "%c%c"          /* HTCP version 0.0 */
-                       "%c%c"          /* DATA length place holder */
-                       "%c%c"          /* OPCODE,RESPONSE,RESERVED,F1,RR */
-                       "%c%c%c%c"      /* TRANS-ID */                
-                       "%c%c%s"                /* OP-DATA: CACHE-HDRS */
-                       "%c%c",         /* AUTH (LENGTH=2 means no AUTH) */
-            0, 0, 
-            0, 0, 
-            0, 0,       
-            GRSThtcpTSTop * 16 + 1, 1, /* RR=1, MO=0, RESPONSE=1 (missing) */
-            0, 0, 0, 0,
-            strlen(cache_hdrs) / 256,  strlen(cache_hdrs) % 256,  cache_hdrs,
-            0, 2);
-   else return GRST_RET_FAILED;
-
-   if (*message_length < 0) return GRST_RET_FAILED;
-   
-   (*message)[0] = *message_length / 256;
-   (*message)[1] = *message_length % 256;
-
-   (*message)[4] = (*message_length - 6) / 256;
-   (*message)[5] = (*message_length - 6) % 256;
-
-   memcpy(&((*message)[8]), &trans_id, 4);
-
-   return GRST_RET_OK;
-}
-
-int GRSThtcpMessageParse(GRSThtcpMessage *parsed, char *raw, int length)
-{
-   GRSThtcpCountstr *s;
-   
-   bzero(parsed, sizeof(GRSThtcpMessage));
-   
-   if (length < (void *) &(parsed->method) 
-                - (void *) &(parsed->total_length_msb) + 2) 
-           return GRST_RET_FAILED;
-
-   memcpy(parsed, raw, (void *) &(parsed->method) 
-                       - (void *) &(parsed->total_length_msb));
-   
-   if (parsed->opcode == GRSThtcpNOPop) return GRST_RET_OK;
-
-   if ((parsed->opcode == GRSThtcpTSTop) && (parsed->rr == 0))
-     {
-       /* a TST request */
-
-       /* point to start of data/auth in raw */
-       s = (GRSThtcpCountstr *) &(((GRSThtcpMessage *) raw)->method); 
-
-       /* METHOD string */
-
-       if ((void *) s + 2 + GRSThtcpCountstrLen(s) > (void *) raw + length)
-                                                   return GRST_RET_FAILED;
-       parsed->method = s;
-       s = (GRSThtcpCountstr *) ((void *) s + 2 + GRSThtcpCountstrLen(s));
-       
-       /* URI string */
-
-       if ((void *) s + 2 + GRSThtcpCountstrLen(s) > (void *) raw + length)
-                                                   return GRST_RET_FAILED;
-       parsed->uri = s;
-       s = (GRSThtcpCountstr *) ((void *) s + 2 + GRSThtcpCountstrLen(s));
-
-       /* VERSION string */
-           
-       if ((void *) s + 2 + GRSThtcpCountstrLen(s) > (void *) raw + length)
-                                                   return GRST_RET_FAILED;
-       parsed->version = s;
-       s = (GRSThtcpCountstr *) ((void *) s + 2 + GRSThtcpCountstrLen(s));
-
-       /* REQ-HDRS string */
-           
-       if ((void *) s + 2 + GRSThtcpCountstrLen(s) > (void *) raw + length)
-                                                   return GRST_RET_FAILED;
-       parsed->req_hdrs = s;
-       s = (GRSThtcpCountstr *) ((void *) s + 2 + GRSThtcpCountstrLen(s));
-                  
-       return GRST_RET_OK;
-     }   
-
-   if ((parsed->opcode == GRSThtcpTSTop) && (parsed->rr == 1))
-     {
-       /* a TST response */
-
-       /* point to start of data/auth in raw */
-       s = (GRSThtcpCountstr *) &(((GRSThtcpMessage *) raw)->method); 
-
-       /* RESP-HDRS string */
-
-       if ((void *) s + 2 + GRSThtcpCountstrLen(s) > (void *) raw + length)
-                                                   return GRST_RET_FAILED;
-       parsed->resp_hdrs = s;
-       s = (GRSThtcpCountstr *) ((void *) s + 2 + GRSThtcpCountstrLen(s));
-       
-       /* ENTITY-HDRS string */
-
-       if ((void *) s + 2 + GRSThtcpCountstrLen(s) > (void *) raw + length)
-                                                   return GRST_RET_FAILED;
-       parsed->entity_hdrs = s;
-       s = (GRSThtcpCountstr *) ((void *) s + 2 + GRSThtcpCountstrLen(s));
-
-       /* CACHE-HDRS string */
-           
-       if ((void *) s + 2 + GRSThtcpCountstrLen(s) > (void *) raw + length)
-                                                   return GRST_RET_FAILED;
-       parsed->cache_hdrs = s;
-       s = (GRSThtcpCountstr *) ((void *) s + 2 + GRSThtcpCountstrLen(s));
-                  
-       return GRST_RET_OK;
-     }   
-
-   return GRST_RET_FAILED; 
-}
diff --git a/org.gridsite.core/src/grst_http.c b/org.gridsite.core/src/grst_http.c
deleted file mode 100644 (file)
index c933ca0..0000000
+++ /dev/null
@@ -1,443 +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;
-}
-
-/// Return a one-time passcode string, for use with GridHTTP
-/**
- *  Returns
- *
- *  String is timestamp+SHA1_HASH(timestamp+":"+method+":"+URL)
- *  Timestamps and hashes are in lowercase hexadecimal. Timestamps are
- *  seconds since 00:00:00 on January 1, 1970 UTC.
- */
-
-/*
-char *GRSThttpMakeOneTimePasscode(time_t timestamp, char *method, char *url)
-{
-  int    len, i;
-  char  *stringtohash, hashedstring[EVP_MAX_MD_SIZE], *returnstring;
-  const EVP_MD *m;
-  EVP_MD_CTX ctx;
-
-  m = EVP_sha1();
-  if (m == NULL) return NULL;
-
-  asprintf(&stringtohash, "%08x:%s:%s", timestamp, method, url);
-  EVP_DigestInit(&ctx, m);
-  EVP_DigestUpdate(&ctx, stringtohash, strlen(stringtohash));
-  EVP_DigestFinal(&ctx, hashedstring, &len);
-
-  returnstring = malloc(9 + len * 2);
-
-  sprintf(returnstring, "%08x", timestamp);
-
-  for (i=0; 
-
-  return returnstring;
-}
-*/
diff --git a/org.gridsite.core/src/grst_x509.c b/org.gridsite.core/src/grst_x509.c
deleted file mode 100644 (file)
index c93564e..0000000
+++ /dev/null
@@ -1,1854 +0,0 @@
-/*
-   Copyright (c) 2002-6, 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 <stdarg.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>
-
-#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 strcasecmp(3)
- *  (for consistency with EDG/LCG/EGEE gridmapdir case insensitivity.)
- */
-{
-   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 = strcasecmp(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
-}
-
-/// 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;
-}   
-
-int GRSTx509ChainFree(GRSTx509Chain *chain)
-{
-   GRSTx509Cert *grst_cert;
-
-   if (chain == NULL) return GRST_RET_OK;
-   
-// delete the various stuff in the chain members....      
-
-   return GRST_RET_OK;
-}
-
-/// Check certificate chain for GSI proxy acceptability.
-/**
- *  Returns GRST_RET_OK if valid; OpenSSL X509 errors otherwise.
- *
- *  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)
- *
- *  TODO: we do not yet check ProxyCertInfo and ProxyCertPolicy extensions
- *        (although via GRSTx509KnownCriticalExts() we can accept them.)
- */
-
-int GRSTx509ChainLoadCheck(GRSTx509Chain **chain, 
-                           STACK_OF(X509) *certstack, X509 *lastcert,
-                           char *capath)
-{
-   X509 *cert;                  /* Points to the current cert in the loop */
-   int depth = 0;               /* Depth of cert chain */
-   int chain_errors = 0;       /* records previous errors */
-   int first_non_ca;
-   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;
-   GRSTx509Cert *grst_cert, *new_grst_cert;
-   
-   GRSTerrorLog(GRST_LOG_DEBUG, "GRSTx509ChainLoadCheck() starts");
-printf("GRSTx509ChainLoadCheck() starts");
-
-   time(&now);
-
-   first_non_ca = 0; /* set to something predictable if things fail */
-   /* Set necessary preliminary values */
-   IsCA          = TRUE;           /* =prevIsCA - start from a CA */
-   prevIsLimited = 0;
-
-   /* Get the client cert chain */
-   if (certstack != NULL) 
-     depth = sk_X509_num(certstack); /* How deep is that chain? */
-   
-printf("depth=%d\n", depth);
-
-   if ((depth == 0) && (lastcert == NULL)) 
-     {
-       *chain = NULL;
-       return GRST_RET_FAILED;
-     }
-
-   *chain = malloc(sizeof(GRSTx509Chain));
-   bzero(*chain, sizeof(GRSTx509Chain));
-       
-   /* Check the client chain */
-   for (i = depth - 1; i >= (lastcert == NULL) ? 0 : -1; --i) 
-      /* loop through client-presented chain starting at CA end */
-      {
-        prevIsCA=IsCA;
-
-        new_grst_cert = malloc(sizeof(GRSTx509Cert));
-        bzero(new_grst_cert, sizeof(GRSTx509Cert));
-        new_grst_cert->errors = chain_errors;
-        
-        if (i == depth - 1) (*chain)->firstcert = new_grst_cert;
-        else grst_cert->next = new_grst_cert;
-
-        /* Check for X509 certificate and point to it with 'cert' */
-        if (i < 0) cert = lastcert;
-        else cert = sk_X509_value(certstack, i);
-
-        if (cert != NULL)
-          {
-            /* we check times and record if invalid */
-          
-            if (now <
-           GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(cert)),0))
-                new_grst_cert->errors |= GRST_CERT_BAD_TIME;
-                
-            if (now > 
-           GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(cert)),0))
-                new_grst_cert->errors |= GRST_CERT_BAD_TIME;
-
-            /* 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);
-
-            if (!prevIsCA)
-              {
-                /* issuer didn't have CA status, so this is (at best) a proxy:
-                   check for bad proxy extension*/
-
-                if (prevIsLimited) /* we reject proxies of limited proxies! */
-                  {
-                    new_grst_cert->errors  |= GRST_CERT_BAD_CHAIN;
-                    chain_errors |= GRST_CERT_BAD_CHAIN;
-                  }
-              
-                /* User not allowed to sign shortened DN */
-                if (len2 > len) 
-                  {
-                    new_grst_cert->errors  |= GRST_CERT_BAD_CHAIN;
-                    chain_errors |= GRST_CERT_BAD_CHAIN;
-                  }
-                  
-                /* Proxy subject must begin with issuer. */
-                if (strncmp(cert_DN, issuer_DN, len2) != 0) 
-                  {
-                    new_grst_cert->errors  |= GRST_CERT_BAD_CHAIN;
-                    chain_errors |= GRST_CERT_BAD_CHAIN;
-                  }
-
-                /* 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)
-                  {
-                    new_grst_cert->errors  |= GRST_CERT_BAD_CHAIN;
-                    chain_errors |= GRST_CERT_BAD_CHAIN;
-                  }
-                                         
-                if (strncmp(proxy_part_DN, "/CN=limited proxy", 17) == 0)
-                        prevIsLimited = 1; /* ready for next cert ... */
-              } 
-          }
-      }
-
-   return GRST_RET_OK; /* this is also GRST_RET_OK, of course - by choice */
-}
-
-/// 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)),0))
-                  return X509_V_ERR_INVALID_CA;
-                
-            if (now > 
-           GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(cert)),0))
-                  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;
-}
-
-/// Check the signature of the VOMS attributes
-/*
- *  Returns GRST_RET_OK if signature is ok, other values if not.
- */
-
-static int GRSTx509VerifyVomsSig(time_t *time1_time, time_t *time2_time,
-                                 unsigned char *asn1string, 
-                                 struct GRSTasn1TagList taglist[], 
-                                 int lasttag,
-                                 char *vomsdir, int acnumber)
-{   
-#define GRST_ASN1_COORDS_VOMS_DN   "-1-1-%d-1-3-1-1-1-%%d-1-%%d"
-#define GRST_ASN1_COORDS_VOMS_INFO "-1-1-%d-1"
-#define GRST_ASN1_COORDS_VOMS_SIG  "-1-1-%d-3"
-   int            ret, isig, iinfo;
-   char          *certpath, acvomsdn[200], dn_coords[200],
-                  info_coords[200], sig_coords[200];
-   unsigned char *q;
-   DIR           *vomsDIR;
-   struct dirent *vomsdirent;
-   X509          *cert;
-   EVP_PKEY      *prvkey;
-   FILE          *fp;
-   EVP_MD_CTX     ctx;
-   time_t         voms_service_time1, voms_service_time2;
-
-   if ((vomsdir == NULL) || (vomsdir[0] == '\0')) return GRST_RET_FAILED;
-
-   snprintf(dn_coords, sizeof(dn_coords), 
-            GRST_ASN1_COORDS_VOMS_DN, acnumber);
-   
-   if (GRSTasn1GetX509Name(acvomsdn, sizeof(acvomsdn), dn_coords,
-         asn1string, taglist, lasttag) != GRST_RET_OK) return GRST_RET_FAILED;
-         
-   snprintf(info_coords, sizeof(info_coords), 
-            GRST_ASN1_COORDS_VOMS_INFO, acnumber);
-   iinfo = GRSTasn1SearchTaglist(taglist, lasttag, info_coords);
-
-   snprintf(sig_coords, sizeof(sig_coords), 
-            GRST_ASN1_COORDS_VOMS_SIG, acnumber);
-   isig  = GRSTasn1SearchTaglist(taglist, lasttag, sig_coords);
-
-   if ((iinfo < 0) || (isig < 0)) return GRST_RET_FAILED;
-
-   vomsDIR = opendir(vomsdir);
-   if (vomsDIR == NULL) return GRST_RET_FAILED;
-   
-   while ((vomsdirent = readdir(vomsDIR)) != NULL)
-        {        
-          asprintf(&certpath, "%s/%s", vomsdir, vomsdirent->d_name);
-          fp = fopen(certpath, "r");
-          free(certpath);
-          if (fp == NULL) continue;
-
-          cert = PEM_read_X509(fp, NULL, NULL, NULL);
-          fclose(fp);
-          if (cert == NULL) continue;
-
-          if (GRSTx509NameCmp(acvomsdn, 
-                   X509_NAME_oneline(X509_get_subject_name(cert),NULL,0)) != 0)
-            {
-              X509_free(cert);
-              continue;
-            }
-
-          prvkey = X509_extract_key(cert);
-          if (prvkey == NULL)
-            {
-              X509_free(cert);
-              continue;
-            }
-            
-          OpenSSL_add_all_digests();
-#if OPENSSL_VERSION_NUMBER >= 0x0090701fL
-          EVP_MD_CTX_init(&ctx);
-          EVP_VerifyInit_ex(&ctx, EVP_md5(), NULL);
-#else
-          EVP_VerifyInit(&ctx, EVP_md5());
-#endif
-          
-          EVP_VerifyUpdate(&ctx, 
-                           &asn1string[taglist[iinfo].start+
-                                       0*taglist[iinfo].headerlength], 
-                           taglist[iinfo].length+taglist[iinfo].headerlength);
-
-          ret = EVP_VerifyFinal(&ctx, 
-                                &asn1string[taglist[isig].start+
-                                            taglist[isig].headerlength]+1, 
-                                taglist[isig].length - 1, 
-                                prvkey);
-
-#if OPENSSL_VERSION_NUMBER >= 0x0090701fL
-          EVP_MD_CTX_cleanup(&ctx);      
-#endif
-          EVP_PKEY_free(prvkey);
-
-          if (ret != 1) /* signature doesnt match, look for more */
-            {
-              continue;
-              X509_free(cert);
-            }
-
-          voms_service_time1 = 
-           GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(cert)),0);
-          if (voms_service_time1 > *time1_time) 
-                             *time1_time = voms_service_time1; 
-           
-          voms_service_time2 = 
-           GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(cert)),0);
-          if (voms_service_time2 < *time1_time) 
-                             *time2_time = voms_service_time2; 
-            
-          X509_free(cert);
-          closedir(vomsDIR);
-          return GRST_RET_OK ; /* verified */
-        }
-
-   closedir(vomsDIR);   
-   return GRST_RET_FAILED;
-}
-
-/// Get the VOMS attributes in the given extension
-/*
- *  Puts any VOMS credentials found into the Compact Creds string array
- *  starting at *creds. Always returns GRST_RET_OK - even for invalid
- *  credentials, which are just ignored.
- */
-
-int GRSTx509ParseVomsExt(int *lastcred, int maxcreds, size_t credlen, 
-                         char *creds, time_t time1_time, time_t time2_time,
-                         X509_EXTENSION *ex, char *ucuserdn, char *vomsdir)
-{
-#define MAXTAG 500
-#define GRST_ASN1_COORDS_FQAN    "-1-1-%d-1-7-1-2-1-2-%d"
-#define GRST_ASN1_COORDS_USER_DN "-1-1-%d-1-2-1-1-1-1-%%d-1-%%d"
-#define GRST_ASN1_COORDS_TIME1   "-1-1-%d-1-6-1"
-#define GRST_ASN1_COORDS_TIME2   "-1-1-%d-1-6-2"
-   ASN1_OCTET_STRING *asn1data;
-   char              *asn1string, acuserdn[200], acvomsdn[200],
-                      dn_coords[200], fqan_coords[200], time1_coords[200],
-                      time2_coords[200];
-   long               asn1length;
-   int                lasttag=-1, itag, i, acnumber = 1;
-   struct GRSTasn1TagList taglist[MAXTAG+1];
-   time_t             actime1, actime2, time_now;
-
-   asn1data   = X509_EXTENSION_get_data(ex);
-   asn1string = ASN1_STRING_data(asn1data);
-   asn1length = ASN1_STRING_length(asn1data);
-
-   GRSTasn1ParseDump(NULL, asn1string, asn1length, taglist, MAXTAG, &lasttag);
-
-   for (acnumber = 1; ; ++acnumber) /* go through ACs one by one */
-      {
-        snprintf(dn_coords, sizeof(dn_coords), GRST_ASN1_COORDS_USER_DN, acnumber);
-        if (GRSTasn1GetX509Name(acuserdn, sizeof(acuserdn), dn_coords,
-                       asn1string, taglist, lasttag) != GRST_RET_OK) break;
-
-        if (GRSTx509NameCmp(ucuserdn, acuserdn) != 0) continue;
-
-        if (GRSTx509VerifyVomsSig(&time1_time, &time2_time,
-                             asn1string, taglist, lasttag, vomsdir, acnumber)
-                             != GRST_RET_OK) continue;
-
-        snprintf(time1_coords, sizeof(time1_coords), GRST_ASN1_COORDS_TIME1, acnumber);
-        itag = GRSTasn1SearchTaglist(taglist, lasttag, time1_coords);
-        actime1 = GRSTasn1TimeToTimeT(&asn1string[taglist[itag].start+
-                                             taglist[itag].headerlength],
-                                 taglist[itag].length);
-        if (actime1 > time1_time) time1_time = actime1;
-
-        snprintf(time2_coords, sizeof(time2_coords), GRST_ASN1_COORDS_TIME2, acnumber);
-        itag = GRSTasn1SearchTaglist(taglist, lasttag, time2_coords);
-        actime2 = GRSTasn1TimeToTimeT(&asn1string[taglist[itag].start+
-                                             taglist[itag].headerlength],
-                                             taglist[itag].length);
-        if (actime2 < time2_time) time2_time = actime2;
-
-        time(&time_now);
-        if ((time1_time > time_now + 300) || (time2_time < time_now))
-               continue; /* expiration isnt invalidity ...? */
-
-        for (i=1; ; ++i)
-           {
-             snprintf(fqan_coords, sizeof(fqan_coords), GRST_ASN1_COORDS_FQAN, acnumber, i);
-             itag = GRSTasn1SearchTaglist(taglist, lasttag, fqan_coords);
-
-             if (itag > -1)
-               {
-                 if (*lastcred < maxcreds - 1)
-                   {
-                     ++(*lastcred);
-                     snprintf(&creds[*lastcred * (credlen + 1)], credlen+1,
-                           "VOMS %010lu %010lu 0 %.*s", 
-                           time1_time, time2_time, 
-                           taglist[itag].length,
-                           &asn1string[taglist[itag].start+
-                                       taglist[itag].headerlength]);
-                   }            
-               }
-             else break;
-           }
-      }
-      
-   return GRST_RET_OK;
-}
-
-/// Get the VOMS attributes in the extensions to the given cert stack
-/*
- *  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 *usercert, STACK_OF(X509) *certstack,
-                         char *vomsdir)
-{
-   int  i, j;
-   char s[80];
-   unsigned char  *ucuser;
-   X509_EXTENSION *ex;
-   ASN1_STRING    *asn1str;
-   X509           *cert;
-   time_t          time1_time = 0, time2_time = 0, uctime1_time, uctime2_time;
-
-   uctime1_time = 
-        GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(usercert)),0);
-   uctime2_time =       
-        GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(usercert)),0);
-   ucuser =
-        X509_NAME_oneline(X509_get_subject_name(usercert), NULL, 0);
-
-   for (j=sk_X509_num(certstack)-1; j >= 0; --j)
-    {
-      cert = sk_X509_value(certstack, j);
-
-      time1_time =
-          GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(cert)),0);
-      uctime1_time = (time1_time > uctime1_time) ? time1_time:uctime1_time;
-
-      time2_time =
-          GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(cert)),0);
-      uctime2_time = (time2_time < uctime2_time) ? time2_time:uctime2_time;
-
-      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 */
-             {
-               GRSTx509ParseVomsExt(lastcred, maxcreds, credlen, creds,
-                                 uctime1_time, uctime2_time,
-                                 ex, ucuser, vomsdir);
-             }
-         }
-    }
-
-   return GRST_RET_OK;
-}
-
-/// 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 %d",
-                              &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[1] != '/') return NULL; /* must begin with / */
-
-           cred = GRSTgaclCredNew("voms");
-           GRSTgaclCredSetDelegation(cred, delegation);
-           GRSTgaclCredAddValue(cred, "fqan", &p[1]);
-         }
-
-       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, 
-                         X509 *peercert)
-{   
-   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 (peercert != NULL)
-     {
-       if (usercert != NULL) /* found a (GSI proxy) cert after user cert */
-         {
-           gsiproxycert = peercert;
-           ++delegation;
-         }
-
-       if ((usercert == NULL) && 
-           (GRSTx509IsCA(peercert) != GRST_RET_OK)) usercert = peercert;
-                                          /* 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)),0),
-          GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(usercert)),0),
-          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)),0), 
-     GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(gsiproxycert)),0),
-     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, 
-                            usercert, 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 = 2796, 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;
-  time_t notAfter;
-
-  /* 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;
-    }    
-
-  /* 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;
-    }
-    
-  /* go through chain making sure this proxy is not longer lived */
-
-  notAfter = 
-     GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(certs[0])), 0);
-
-  for (i=1; i < ncerts; ++i)
-       if (notAfter > 
-           GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(certs[i])),
-                               0))
-         {
-           notAfter = 
-            GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(certs[i])),
-                                0);
-            
-           ASN1_UTCTIME_set(X509_get_notAfter(certs[0]), notAfter);
-         }
-
-  /* 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.
-*/
-{
-  char *user_dn_enc, *proxyfile;
-  struct stat statbuf;
-
-  user_dn_enc = GRSThttpUrlEncode(user_dn);
-
-  asprintf(&proxyfile, "%s/%s/%s/userproxy.pem",
-           proxydir, user_dn_enc, delegation_id);
-           
-  free(user_dn_enc);
-
-  if ((stat(proxyfile, &statbuf) != 0) || !S_ISREG(statbuf.st_mode))
-    {
-      free(proxyfile);
-      return NULL;
-    }
-    
-  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.
-*/
-{
-  char *user_dn_enc, *prvkeyfile;
-  struct stat statbuf;
-
-  user_dn_enc = GRSThttpUrlEncode(user_dn);
-
-  asprintf(&prvkeyfile, "%s/cache/%s/%s/userkey.pem",
-           proxydir, user_dn_enc, delegation_id);
-           
-  free(user_dn_enc);
-
-  if ((stat(prvkeyfile, &statbuf) != 0) || !S_ISREG(statbuf.st_mode))
-    {
-      free(prvkeyfile);
-      return NULL;
-    }
-    
-  return prvkeyfile;
-}
-
-static void mkdir_printf(mode_t mode, char *fmt, ...)
-{
-  int   ret;
-  char *path;
-  va_list ap;
-  
-  va_start(ap, fmt);
-  vasprintf(&path, fmt, ap);
-  va_end(ap);
-
-  ret = mkdir(path, mode);
-
-  free(path);
-}
-
-/// Create a X.509 request for a GSI proxy and its private key
-/**
- *  Returns GRST_RET_OK on success, non-zero otherwise. Request string
- *  and private key are PEM encoded strings
- */ 
-int GRSTx509CreateProxyRequest(char **reqtxt, char **keytxt, char *ocspurl)
-{
-  int              i;
-  char            *ptr;
-  size_t           ptrlen;
-  RSA             *keypair;
-  X509_NAME       *subject;
-  X509_NAME_ENTRY *ent;
-  EVP_PKEY        *pkey;
-  X509_REQ        *certreq;
-  BIO             *reqmem, *keymem;
-  const EVP_MD    *digest;
-  struct stat      statbuf;
-
-  /* create key pair and put it in a PEM string */
-
-  if ((keypair = RSA_generate_key(GRST_KEYSIZE, 65537, NULL, NULL)) == NULL)
-                                                               return 1;
-
-  keymem = BIO_new(BIO_s_mem());
-  if (!PEM_write_bio_RSAPrivateKey(keymem, keypair, NULL, NULL, 0, NULL, NULL))
-    {
-      BIO_free(keymem);
-      return 3;
-    }
-
-  ptrlen = BIO_get_mem_data(keymem, &ptr);
-  
-  *keytxt = malloc(ptrlen + 1);
-  memcpy(*keytxt, ptr, ptrlen);
-  (*keytxt)[ptrlen] = '\0';
-
-  BIO_free(keymem);
-  
-  /* now create the certificate request */
-
-  certreq = X509_REQ_new();
-
-  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;
-}
-
-/// 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 the temporary cache under
- *  proxydir
- */ 
-int GRSTx509MakeProxyRequest(char **reqtxt, char *proxydir, 
-                             char *delegation_id, char *user_dn)
-{
-  int              i;
-  char            *docroot, *prvkeyfile, *ptr, *user_dn_enc;
-  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 (strcmp(user_dn, "cache") == 0) return GRST_RET_FAILED;
-    
-  user_dn_enc = GRSThttpUrlEncode(user_dn);
-
-  /* create directories if necessary */
-
-  mkdir_printf(S_IRUSR | S_IWUSR | S_IXUSR, 
-               "%s/cache",       proxydir);
-  mkdir_printf(S_IRUSR | S_IWUSR | S_IXUSR, 
-               "%s/cache/%s",    proxydir, user_dn_enc);
-  mkdir_printf(S_IRUSR | S_IWUSR | S_IXUSR, 
-               "%s/cache/%s/%s", proxydir, user_dn_enc, delegation_id);
-
-  /* make the new proxy private key */
-
-  asprintf(&prvkeyfile, "%s/cache/%s/%s/userkey.pem",
-           proxydir, user_dn_enc, delegation_id);
-
-  if (prvkeyfile == NULL)  
-    {
-      free(user_dn_enc);
-      return GRST_RET_FAILED;
-    }
-        
-  if ((keypair = RSA_generate_key(GRST_KEYSIZE, 65537, NULL, NULL)) == NULL)
-                                                               return 1;
-          
-  if ((fp = fopen(prvkeyfile, "w")) == NULL) return 2;
-  
-  chmod(prvkeyfile, S_IRUSR | S_IWUSR);
-  free(prvkeyfile);
-  free(user_dn_enc);
-
-  if (!PEM_write_RSAPrivateKey(fp, keypair, NULL, NULL, 0, NULL, NULL))
-                               return 3;
-  
-  if (fclose(fp) != 0) return 4;
-  
-  /* now create the certificate request */
-
-  certreq = X509_REQ_new();
-  if (certreq == NULL) return 5;
-
-  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;
-}
-
-/// Destroy stored GSI proxy files
-/**
- *  Returns GRST_RET_OK on success, non-zero otherwise.
- *  (Including GRST_RET_NO_SUCH_FILE if the private key or cert chain
- *   were not found.)
- */ 
-
-int GRSTx509ProxyDestroy(char *proxydir, char *delegation_id, char *user_dn)
-{
-  int              ret = GRST_RET_OK;
-  char            *docroot, *filename, *user_dn_enc;
-
-  if (strcmp(user_dn, "cache") == 0) return GRST_RET_FAILED;
-    
-  user_dn_enc = GRSThttpUrlEncode(user_dn);
-
-  /* proxy file */
-  
-  asprintf(&filename, "%s/%s/%s/userproxy.pem",
-           proxydir, user_dn_enc, delegation_id);
-
-  if (filename == NULL)  
-    {
-      free(user_dn_enc);
-      return GRST_RET_FAILED;
-    }
-
-  if (unlink(filename) != 0) ret = GRST_RET_NO_SUCH_FILE;  
-  free(filename);
-
-  /* voms file */
-  
-  asprintf(&filename, "%s/%s/%s/voms.attributes",
-           proxydir, user_dn_enc, delegation_id);
-
-  if (filename == NULL)  
-    {
-      free(user_dn_enc);
-      return GRST_RET_FAILED;
-    }
-
-  unlink(filename);
-  free(filename);
-  
-  return ret;
-}
-
-/// Get start and finish validity times of stored GSI proxy file
-/**
- *  Returns GRST_RET_OK on success, non-zero otherwise.
- *  (Including GRST_RET_NO_SUCH_FILE if the cert chain was not found.)
- */ 
-
-int GRSTx509ProxyGetTimes(char *proxydir, char *delegation_id, char *user_dn, 
-                          time_t *start, time_t *finish)
-{
-  char  *docroot, *filename, *user_dn_enc;
-  FILE  *fp;
-  X509  *cert;
-
-  if (strcmp(user_dn, "cache") == 0) return GRST_RET_FAILED;
-    
-  user_dn_enc = GRSThttpUrlEncode(user_dn);
-  
-  asprintf(&filename, "%s/%s/%s/userproxy.pem",
-           proxydir, user_dn_enc, delegation_id);
-           
-  free(user_dn_enc);
-
-  if (filename == NULL) return GRST_RET_FAILED;
-
-  fp = fopen(filename, "r");
-  free(filename);
-  
-  if (fp == NULL) return GRST_RET_NO_SUCH_FILE;
-
-  cert = PEM_read_X509(fp, NULL, NULL, NULL); /* first cert is X.509 PC */
-
-  fclose(fp);
-  
-  *start  = GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(cert)),0);
-  *finish = GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(cert)),0);
-
-  X509_free(cert);
-  
-  return GRST_RET_OK;
-}
-
-/// Create a stack of X509 certificate from a PEM-encoded string
-/**
- *  Creates a dynamically allocated stack of X509 certificate objects
- *  by walking through the PEM-encoded X509 certificates.
- *
- *  Returns GRST_RET_OK on success, non-zero otherwise.
- *
- */
-
-int GRSTx509StringToChain(STACK_OF(X509) **certstack, char *certstring)
-{   
-  STACK_OF(X509_INFO) *sk=NULL;
-  BIO *certbio;
-  X509_INFO *xi;
-
-  *certstack = sk_X509_new_null();
-  if (*certstack == NULL) return GRST_RET_FAILED;
-
-  certbio = BIO_new_mem_buf(certstring, -1);
-  
-  if (!(sk=PEM_X509_INFO_read_bio(certbio, NULL, NULL, NULL)))
-    {
-      BIO_free(certbio);
-      sk_X509_INFO_free(sk);
-      sk_X509_free(*certstack);
-      return GRST_RET_FAILED;
-    }
-      
-  while (sk_X509_INFO_num(sk))
-       {
-         xi=sk_X509_INFO_shift(sk);
-         if (xi->x509 != NULL)
-           {
-             sk_X509_push(*certstack, xi->x509);
-             xi->x509=NULL;
-           }
-         X509_INFO_free(xi);
-       }
-       
-   if (!sk_X509_num(*certstack))
-     {
-       BIO_free(certbio);
-       sk_X509_INFO_free(sk);
-       sk_X509_free(*certstack);
-       return GRST_RET_FAILED;
-     }
-
-   BIO_free(certbio);
-   sk_X509_INFO_free(sk);
-   
-   return GRST_RET_OK;
-}
-
-/// Returns a Delegation ID based on hash of GRST_CRED_0, ...
-/**
- *  Returns a malloc'd string with Delegation ID made by SHA1-hashing the
- *  values of the compact credentials exported by mod_gridsite
- */
-
-char *GRSTx509MakeDelegationID(void)
-{ 
-  unsigned char hash_delegation_id[EVP_MAX_MD_SIZE];        
-  int  size_needed = 0, i, delegation_id_len;
-  char cred_name[14], *cred_value, *delegation_id;
-  const EVP_MD *m;
-  EVP_MD_CTX ctx;
-
-  OpenSSL_add_all_digests();
-
-  m = EVP_sha1();
-  if (m == NULL) return NULL;
-
-  EVP_DigestInit(&ctx, m);
-
-  for (i=0; i <= 999; ++i)
-     {
-       snprintf(cred_name, sizeof(cred_name), "GRST_CRED_%d", i);       
-       if ((cred_value = getenv(cred_name)) == NULL) break;
-       
-       EVP_DigestUpdate(&ctx, cred_value, strlen(cred_value));
-     }
-     
-  EVP_DigestFinal(&ctx, hash_delegation_id, &delegation_id_len);
-
-  delegation_id = malloc(17);
-
-  for (i=0; i <=7; ++i)
-   sprintf(&delegation_id[i*2], "%02x", hash_delegation_id[i]);
-
-  delegation_id[16] = '\0';
-
-  return delegation_id;
-}
-
-#if 0
-/// Return the short file name for the given delegation_id and user_dn
-/**
- *  Returns a malloc'd string with the short file name (no paths) that
- *  derived from the hashed delegation_id and user_dn
- *
- *  File name is SHA1_HASH(DelegationID)+"-"+SHA1_HASH(DN) where DN
- *  is DER encoded version of user_dn with any trailing CN=proxy removed
- *  Hashes are the most significant 8 bytes, in lowercase hexadecimal.
- */
-
-char *GRSTx509MakeProxyFileName(char *delegation_id,
-                                STACK_OF(X509) *certstack)
-{ 
-  int        i, depth, prevIsCA = 1, IsCA, hash_name_len, delegation_id_len,
-                 der_name_len;
-  unsigned char *der_name, *buf, hash_name[EVP_MAX_MD_SIZE],
-                 hash_delegation_id[EVP_MAX_MD_SIZE],
-                 filename[34];
-  X509_NAME *subject_name;
-  X509      *cert;
-  const EVP_MD *m;
-  EVP_MD_CTX ctx;
-
-  depth = sk_X509_num(certstack);  
-  
-  for (i=depth-1; i >= 0; --i)
-        /* loop through the proxy chain starting at CA end */
-     {
-       if (cert = sk_X509_value(certstack, i))
-         {
-           IsCA = (GRSTx509IsCA(cert) == GRST_RET_OK);
-
-           if (prevIsCA && !IsCA) /* the full certificate of the user */
-             {
-               break;
-             }
-         }
-     }
-
-  if (i < 0) return NULL; /* not found: something wrong with the chain */
-
-  if ((subject_name = X509_get_subject_name(cert)) == NULL) return NULL;
-  
-  der_name_len = i2d_X509_NAME(X509_get_subject_name(cert), NULL);
-  if (der_name_len == 0) return NULL;
-  
-  buf = OPENSSL_malloc(der_name_len);
-  der_name = buf;
-
-
-  if (!i2d_X509_NAME(X509_get_subject_name(cert), &der_name))
-    {
-      OPENSSL_free(der_name);
-      return NULL;
-    }
-
-  OpenSSL_add_all_digests();
-
-  m = EVP_sha1();
-  if (m == NULL)
-    {
-      OPENSSL_free(der_name);
-      return NULL;
-    }
-
-
-  EVP_DigestInit(&ctx, m);
-  EVP_DigestUpdate(&ctx, delegation_id, strlen(delegation_id));
-  EVP_DigestFinal(&ctx, hash_delegation_id, &delegation_id_len);
-
-  /* lots of nasty hard coded numbers: 
-     "8bytes/16chars delegation ID" + "-" + "8bytes/16chars DN" */
-
-  for (i=0; i <=7; ++i)
-   sprintf(&filename[i*2], "%02x", hash_delegation_id[i]);
-
-  filename[16] = '-';
-
-  EVP_DigestInit(&ctx, m);
-  EVP_DigestUpdate(&ctx, buf, der_name_len);
-  EVP_DigestFinal(&ctx, hash_name, &hash_name_len);
-
-  for (i=0; i <=7; ++i)
-   sprintf(&filename[17 + i*2], "%02x", hash_name[i]);
-
-  return strdup(filename);
-}
-#endif
-
-/// 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 moved out of
- *  the temporary cache.
- */
-
-int GRSTx509CacheProxy(char *proxydir, char *delegation_id, 
-                                       char *user_dn, char *proxychain)
-{
-  int   c, len = 0, i, ret;
-  char *user_dn_enc, *p, *ptr, *prvkeyfile, *proxyfile;
-  STACK_OF(X509) *certstack;
-  BIO  *certmem;
-  X509 *cert;
-  long  ptrlen;        
-  FILE *ifp, *ofp;
-
-  if (strcmp(user_dn, "cache") == 0) return GRST_RET_FAILED;
-    
-  /* find the existing private key file */
-
-  prvkeyfile = GRSTx509CachedProxyKeyFind(proxydir, delegation_id, user_dn);
-
-  if (prvkeyfile == NULL)
-    {
-      return GRST_RET_FAILED;
-    }
-
-  /* open it ready for later */
-
-  if ((ifp = fopen(prvkeyfile, "r")) == NULL)
-    {
-      free(prvkeyfile);
-      return GRST_RET_FAILED;
-    }
-
-  /* get the X509 stack */
-
-  if (GRSTx509StringToChain(&certstack, proxychain) != GRST_RET_OK)
-    {
-      fclose(ifp);
-      free(prvkeyfile);
-      return GRST_RET_FAILED;
-    }
-
-  /* create directories if necessary, and set proxy filename */
-
-  user_dn_enc = GRSThttpUrlEncode(user_dn);
-
-  mkdir_printf(S_IRUSR | S_IWUSR | S_IXUSR, 
-               "%s/%s",    proxydir, user_dn_enc);
-  mkdir_printf(S_IRUSR | S_IWUSR | S_IXUSR, 
-               "%s/%s/%s", proxydir, user_dn_enc, delegation_id);
-
-  asprintf(&proxyfile, "%s/%s/%s/userproxy.pem",
-           proxydir, user_dn_enc, delegation_id);
-           
-  free(user_dn_enc);
-
-  /* set up to write proxy file */
-
-  ofp = fopen(proxyfile, "w");
-  chmod(proxyfile, S_IRUSR | S_IWUSR);
-  free(proxyfile);
-
-  if (ofp == NULL)
-    {
-      fclose(ifp);
-      free(prvkeyfile);
-      return GRST_RET_FAILED;
-    }
-
-  /* write out the most recent proxy by itself */
-
-  if (cert = sk_X509_value(certstack, 0))
-    {
-      certmem = BIO_new(BIO_s_mem());
-      if (PEM_write_bio_X509(certmem, cert) == 1)
-        {
-          ptrlen = BIO_get_mem_data(certmem, &ptr);
-          fwrite(ptr, 1, ptrlen, ofp);
-        }
-
-      BIO_free(certmem);
-    }
-
-  /* insert proxy private key, read from private key file */
-
-  while ((c = fgetc(ifp)) != EOF) fputc(c, ofp);
-  unlink(prvkeyfile);
-  free(prvkeyfile);
-
-  for (i=1; i <= sk_X509_num(certstack) - 1; ++i)
-        /* loop through the proxy chain starting at 2nd most recent proxy */
-     {
-       if (cert = sk_X509_value(certstack, i))
-         {
-           certmem = BIO_new(BIO_s_mem());
-           if (PEM_write_bio_X509(certmem, cert) == 1)
-             {
-               ptrlen = BIO_get_mem_data(certmem, &ptr);
-               fwrite(ptr, 1, ptrlen, ofp);
-             }
-
-           BIO_free(certmem);
-         }
-     }
-
-  sk_X509_free(certstack);
-
-  if (fclose(ifp) != 0) return GRST_RET_FAILED;
-  if (fclose(ofp) != 0) return GRST_RET_FAILED;
-
-  return GRST_RET_OK;
-}
diff --git a/org.gridsite.core/src/grst_xacml.c b/org.gridsite.core/src/grst_xacml.c
deleted file mode 100644 (file)
index c4c88ee..0000000
+++ /dev/null
@@ -1,576 +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.
-*/
-/*------------------------------------------------------------------------*
- * For more information about GridSite: http://www.gridpp.ac.uk/gridsite/ *
- *------------------------------------------------------------------------*/
-
-#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"
-
-//#define XACML_DEBUG
-
-#ifdef XACML_DEBUG
-  #define XACML_DEBUG_FILE "/tmp/grstxacmldebug.out"
-#endif
-
-
-/*                                                                      *
- * Global variables, shared by all GACL functions by private to libgacl *
- *                                                                      */
-
-extern char     *grst_perm_syms[];
-extern GRSTgaclPerm grst_perm_vals[];
-
-
-FILE* debugfile;
-
-GRSTgaclAcl *GRSTgaclAclParse(xmlDocPtr, xmlNodePtr, GRSTgaclAcl *);
-GRSTgaclAcl *GRSTxacmlAclParse(xmlDocPtr, xmlNodePtr, GRSTgaclAcl *);
-
-/*                                                     *
- * Functions to read in XACML 1.1 compliant format ACL *
- * Functions based on method for opening GACL format   *
- *                                                     */
-
-// need to check these for libxml memory leaks? - what needs to be freed?
-
-
-static GRSTgaclCred *GRSTxacmlCredParse(xmlNodePtr cur)
-/*
-    GRSTxacmlCredParse - parse a credential stored in the libxml structure cur,
-    returning it as a pointer or NULL on error.
-*/
-{
-  xmlNodePtr  attr_val;
-  xmlNodePtr  attr_des;
-  GRSTgaclCred   *cred;
-
-  // cur points to <Subject> or <AnySubjects/>, loop done outside this function.
-
-  if ( (xmlStrcmp(cur->name, (const xmlChar *) "AnySubject") == 0)) cred = GRSTgaclCredNew("any-user");
-
-  else{
-
-  attr_val=cur->xmlChildrenNode->xmlChildrenNode;
-  attr_des=attr_val->next;
-
-  cred = GRSTgaclCredNew((char *) xmlNodeGetContent(attr_des->properties->children));
-
-  cred->firstname = NULL;
-  cred->next      = NULL;
-
-  //Assumed that there is only one name/value pair per credential
-  GRSTgaclCredAddValue(cred, (char *) xmlNodeGetContent(attr_des->properties->next->children),
-                             (char *) xmlNodeGetContent(attr_val));
-  }
-
-  return cred;
-}
-
-static GRSTgaclEntry *GRSTxacmlEntryParse(xmlNodePtr cur)
-/*
-    GRSTxacmlEntryParse - parse an entry stored in the libxml structure cur,
-    returning it as a pointer or NULL on error. Also checks to see if the following
-    <Rule> tag refers to the same <Target> by checking the <RuleId> of both
-*/
-{
-  int        i, check=0;
-  xmlDocPtr  doc=cur->doc;
-  xmlNodePtr cur2;
-  xmlNodePtr rule_root=cur;
-  GRSTgaclEntry *entry;
-  GRSTgaclCred  *cred;
-  GRSTgaclPerm  perm;
-
-
-  // Next line not needed as function only called if <Rule> tag found
-  // if (xmlStrcmp(cur->name, (const xmlChar *) "Rule") != 0) return NULL;
-  // cur and rule_root point to the <Rule> tag
-
-  cur = cur->xmlChildrenNode->xmlChildrenNode;
-  // cur should now be pointing at <Subjects> tag
-#ifdef XACML_DEBUG
-  fprintf (debugfile, "Starting to Parse Entry\n");
-#endif
-  entry = GRSTgaclEntryNew();
-
-  while (cur!=NULL){
-
-    if (xmlStrcmp(cur->name, (const xmlChar *) "Subjects") == 0){
-#ifdef XACML_DEBUG
-      fprintf (debugfile, "Starting to Parse Credentials\n");
-#endif
-      if (check==0){
-        // cur still pointing at <Subjects> tag make cur2 point to <Subject> and loop over them.
-       cur2=cur->xmlChildrenNode;
-       while (cur2!=NULL){
-          if ( ((cred = GRSTxacmlCredParse(cur2)) != NULL) && (!GRSTgaclEntryAddCred(entry, cred))){
-            GRSTgaclCredFree(cred);
-            GRSTgaclEntryFree(entry);
-            return NULL;
-         }
-         cur2=cur2->next;
-        }
-      }
-    }
-
-    else if (xmlStrcmp(cur->name, (const xmlChar *) "Actions") == 0){
-#ifdef XACML_DEBUG
-      fprintf (debugfile, "Starting to Parse Permissions\n");
-#endif
-      if (xmlStrcmp(xmlNodeGetContent(rule_root->properties->next->children), (const xmlChar *) "Permit") == 0 ){
-#ifdef XACML_DEBUG
-       fprintf (debugfile, "\tPermit-ed actions: ");
-#endif
-        for (cur2 = cur->xmlChildrenNode; cur2 != NULL; cur2=cur2->next) //cur2-><Action>
-          for (i=0; grst_perm_syms[i] != NULL; ++i)
-            if (xmlStrcmp(xmlNodeGetContent(cur2->xmlChildrenNode->xmlChildrenNode), (const xmlChar *) grst_perm_syms[i]) == 0)
-            {
-#ifdef XACML_DEBUG
-              fprintf (debugfile, "%s ", grst_perm_syms[i]);
-#endif
-             GRSTgaclEntryAllowPerm(entry, grst_perm_vals[i]);
-           }
-      }
-
-      if (xmlStrcmp(xmlNodeGetContent(rule_root->properties->next->children), (const xmlChar *) "Deny") == 0 ) {
-#ifdef XACML_DEBUG
-       fprintf (debugfile, "\tDeny-ed actions: ");
-#endif
-        for (cur2 = cur->xmlChildrenNode; cur2 != NULL; cur2=cur2->next) //cur2-><Action>
-          for (i=0; grst_perm_syms[i] != NULL; ++i)
-            if (xmlStrcmp(xmlNodeGetContent(cur2->xmlChildrenNode->xmlChildrenNode), (const xmlChar *) grst_perm_syms[i]) == 0)
-            {
-              
-#ifdef XACML_DEBUG
-             fprintf (debugfile, "%s ", grst_perm_syms[i]);
-#endif
-             GRSTgaclEntryDenyPerm(entry, grst_perm_vals[i]);
-           }
-      }
-
-    }
-    else{ // I cannot parse this - give up rather than get it wrong
-#ifdef XACML_DEBUG
-      fprintf (debugfile, "OOOPSIE\n");
-#endif
-      GRSTgaclEntryFree(entry);
-      return NULL;
-    }
-
-    cur=cur->next;
-
-    // Check if next Rule should be included when end of current rule reached
-    // If RuleId are from the same entry (eg Entry1A and Entry1D)
-    // make cur point to the next Rule's <Subjects> tag
-    if (cur==NULL)
-      if (check==0)
-        if (rule_root->next!=NULL)
-         if ( strncmp(xmlNodeGetContent(rule_root->properties->children), // RuleId of this Rule
-                xmlNodeGetContent(rule_root->next->properties->children), // RuleId of next Rule
-                6) == 0){
-#ifdef XACML_DEBUG
-           fprintf (debugfile, "End of perms and creds, next is %s \n", xmlNodeGetContent(rule_root->next->properties->children));
-#endif
-           rule_root=rule_root->next;
-           cur=rule_root->xmlChildrenNode->xmlChildrenNode;
-#ifdef XACML_DEBUG
-           fprintf (debugfile, "skipped to <%s> tag of next Rule\n", cur->name);
-#endif
-           check++;
-         }
-  }
-
-  return entry;
-}
-
-GRSTgaclAcl *GRSTxacmlAclLoadFile(char *filename)
-{
-  xmlDocPtr   doc;
-  xmlNodePtr  cur;
-  GRSTgaclAcl    *acl;
-
-  doc = xmlParseFile(filename);
-  if (doc == NULL) return NULL;
-
-  cur = xmlDocGetRootElement(doc);
-  if (cur == NULL) return NULL;
-
-  if (!xmlStrcmp(cur->name, (const xmlChar *) "Policy")) { acl=GRSTxacmlAclParse(doc, cur, acl);}
-  else if (!xmlStrcmp(cur->name, (const xmlChar *) "gacl")) {acl=GRSTgaclAclParse(doc, cur, acl);}
-  else /* ACL format not recognised */
-    {
-      xmlFreeDoc(doc);
-      free(cur);
-      return NULL;
-    }
-
-  xmlFreeDoc(doc);
-  return acl;
-}
-
-GRSTgaclAcl *GRSTxacmlAclParse(xmlDocPtr doc, xmlNodePtr cur, GRSTgaclAcl *acl)
-{
-  GRSTgaclEntry  *entry;
-
-  #ifdef XACML_DEBUG
-  debugfile=fopen(XACML_DEBUG_FILE, "w");
-  fprintf (debugfile, "ACL loaded..\n");
-  fprintf (debugfile, "Parsing XACML\n");
-  #endif
-
-  // Have an XACML policy file.
-  // Skip <Target> tag and set cur to first <Rule> tag
-  cur = cur->xmlChildrenNode->next;
-
-  acl = GRSTgaclAclNew();
-
-  while (cur != NULL){
-
-    if ( !xmlStrcmp(cur->name, (const xmlChar *)"Rule") )
-    { // IF statement not needed?
-      #ifdef XACML_DEBUG
-      fprintf (debugfile, "Rule %s found\n", xmlNodeGetContent(cur->properties->children) );
-      fprintf (debugfile, "Parsing Entry for this rule\n");
-      #endif
-      entry = GRSTxacmlEntryParse(cur);
-
-      if (entry == NULL)
-      {
-        GRSTgaclAclFree(acl);
-        return NULL;
-      }
-      else GRSTgaclAclAddEntry(acl, entry);
-
-      #ifdef XACML_DEBUG
-      fprintf (debugfile, "Entry read in\n\n");
-      #endif
-    }
-
-    // If the current and next Rules are part of the same entry then advance two Rules
-    // If not then advance 1
-    if (cur->next != NULL)
-    {
-      if ( strncmp(xmlNodeGetContent(cur->properties->children),       // RuleId of this Rule
-                   xmlNodeGetContent(cur->next->properties->children), // RuleId of next Rule
-                   6) == 0)
-      {
-        #ifdef XACML_DEBUG
-       fprintf (debugfile, "skipping next rule %s, should have been caught previously\n\n", xmlNodeGetContent(cur->next->properties->children) );
-       #endif
-       cur=cur->next;
-      } // Check first 6 characters i.e. Entry1**/
-    }
-
-    cur=cur->next;
-
-  }
-
-  #ifdef XACML_DEBUG
-  fprintf (debugfile, "Finished loading ACL - Fanfare!\n");
-  fclose(debugfile);
-  #endif
-
-  return acl;
-}
-
-
-int GRSTxacmlFileIsAcl(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 *GRSTxacmlFileFindAclname(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. */
-{
-  char        *path, *p;
-  struct stat  statbuf;
-
-  path = malloc(strlen(pathandfile) + sizeof(GRST_ACL_FILE) + 1);
-  strcpy(path, pathandfile);
-
-  if (stat(path, &statbuf) == 0)
-    {
-      if (!S_ISDIR(statbuf.st_mode)) /* can strip this / off straightaway */
-        {
-          p = rindex(path, '/');
-          if (p != NULL) *p = '\0';
-        }
-    }
-
-  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 *GRSTxacmlAclLoadforFile(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 = GRSTxacmlFileFindAclname(pathandfile);
-  
-  if (path != NULL)
-    {
-      acl = GRSTxacmlAclLoadFile(path);
-      free(path);
-      return acl;
-    }
-
-  return NULL;
-}
-
-
-
-/*                                                     *
- * Functions to save ACL in XACML 1.1 compliant format *
- * Functions based on method for saving to GACL format *
- *                                                     */
-
-
-int GRSTxacmlCredPrint(GRSTgaclCred *cred, FILE *fp)
-/*
-   GRSTxacmlCredPrint - print a credential and any name-value pairs is contains in XACML form
-*/
-{
-  char              *q;
-  GRSTgaclNamevalue *p;
-
-  if (cred->firstname != NULL)
-    {
-
-      p = cred->firstname;
-
-      do {
-
-          fputs("\t\t\t\t<Subject>\n", fp);
-          fputs("\t\t\t\t\t<SubjectMatch MatchId=\"urn:oasis:names:tc:xacml:1.0:function:string-equal\">\n", fp);
-          fputs("\t\t\t\t\t\t<AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">", fp);
-           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);
-
-
-          fputs("</AttributeValue>\n", fp);
-
-          fputs("\t\t\t\t\t\t<SubjectAttributeDesignator\n", fp);
-          fputs("\t\t\t\t\t\t\tAttributeId=", fp);
-          fprintf(fp, "\"%s\"\n", cred->type);
-          fputs("\t\t\t\t\t\t\tDataType=", fp);
-           fprintf(fp, "\"%s\"/>\n", p->name);
-          fputs("\t\t\t\t\t</SubjectMatch>\n", fp);
-          fputs("\t\t\t\t</Subject>\n", fp);
-           p = (GRSTgaclNamevalue *) p->next;
-         } while (p != NULL);
-
-    }
-    else fputs("\t\t\t\t<AnySubject/>\n", fp);
-
-  return 1;
-}
-
-
-int GRSTxacmlEntryPrint(GRSTgaclEntry *entry, FILE *fp, int rule_number)
-{
-  GRSTgaclCred  *cred;
-  GRSTgaclPerm  i;
-
-  if (entry->allowed){
-
-  fprintf(fp, "\t<Rule RuleId=\"Entry%dA\" Effect=\"Permit\">\n", rule_number);
-  fputs("\t\t<Target>\n", fp);
-  fputs("\t\t\t<Subjects>\n", fp);
-
-  for (cred = entry->firstcred; cred != NULL; cred = cred->next)
-                                            GRSTxacmlCredPrint(cred, fp);
-
-  fputs("\t\t\t</Subjects>\n", fp);
-  fputs("\t\t\t<Actions>\n", fp);
-
-      for (i=GRST_PERM_READ; i <= GRST_PERM_ADMIN; ++i)
-       if ((entry->allowed) & i) GRSTxacmlPermPrint(i, fp);
-
-  fputs("\t\t\t</Actions>\n", fp);
-  fputs("\t\t</Target>\n", fp);
-  fputs("\t</Rule>\n", fp);
-  }
-
-  if (entry->denied){
-
-  fprintf(fp, "\t<Rule RuleId=\"Entry%dD\" Effect=\"Deny\">\n", rule_number);
-  fputs("\t\t<Target>\n", fp);
-  fputs("\t\t\t<Subjects>\n", fp);
-
-  for (cred = entry->firstcred; cred != NULL; cred = cred->next)
-                                            GRSTxacmlCredPrint(cred, fp);
-
-  fputs("\t\t\t</Subjects>\n", fp);
-  fputs("\t\t\t<Actions>\n", fp);
-
-      for (i=GRST_PERM_READ; i <= GRST_PERM_ADMIN; ++i)
-       if (entry->denied & i) GRSTxacmlPermPrint(i, fp);
-
-  fputs("\t\t\t</Actions>\n", fp);
-  fputs("\t\t</Target>\n", fp);
-  fputs("\t</Rule>\n", fp);
-  }
-  return 1;
-}
-
-
-int GRSTxacmlPermPrint(GRSTgaclPerm perm, FILE *fp)
-{
-  GRSTgaclPerm i;
-
-  for (i=GRST_PERM_READ; grst_perm_syms[i] != NULL; ++i)
-       if (perm == grst_perm_vals[i])
-         {
-
-          fputs("\t\t\t\t<Action>\n", fp);
-          fputs("\t\t\t\t\t<ActionMatch MatchId=\"urn:oasis:names:tc:xacml:1.0:function:string-equal\">\n", fp);
-          fputs("\t\t\t\t\t\t<AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">", fp);
-          fprintf(fp, "%s", grst_perm_syms[i]);
-          fputs("</AttributeValue>\n", fp);
-          fputs("\t\t\t\t\t\t<ActionAttributeDesignator\n", fp);
-          fputs("\t\t\t\t\t\t\tAttributeId=\"urn:oasis:names:tc:xacml:1.0:action:action-id\"\n", fp);
-          fputs("\t\t\t\t\t\t\tDataType=\"http://www.w3.org/2001/XMLSchema#string\"/>\n", fp);
-          fputs("\t\t\t\t\t</ActionMatch>\n", fp);
-          fputs("\t\t\t\t</Action>\n",fp);
-
-           return 1;
-         }
-
-  return 0;
-}
-
-int GRSTxacmlAclPrint(GRSTgaclAcl *acl, FILE *fp, char* dir_uri)
-{
-  GRSTgaclEntry *entry;
-  int rule_number=1;
-
-  fputs("<Policy", fp);
-  fputs("\txmlns=\"urn:oasis:names:tc:xacml:1.0:policy\"\n", fp);
-  fputs("\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n", fp);
-  fputs("\txsi:schemaLocation=\"urn:oasis:names:tc:xacml:1.0:policy cs-xacml-schema-policy-01.xsd\"\n", fp);
-  fputs("\tPolicyId=\"GridSitePolicy\"\n", fp);
-  fputs("\tRuleCombiningAlgId=\"urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:deny-overrides\">\n\n", fp);
-
-  fputs("\t<Target>\n\t\t<Resources>\n\t\t\t<Resource>\n", fp);
-  fputs("\t\t\t\t<ResourceMatch MatchId=\"urn:oasis:names:tc:xacml:1.0:function:string-equal\">\n", fp);
-  fputs("\t\t\t\t\t<AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">", fp);
-  fprintf(fp, "%s", dir_uri);
-  fputs("</AttributeValue>\n", fp);
-  fputs("\t\t\t\t\t<ResourceAttributeDesignator\n", fp);
-  fputs("\t\t\t\t\t\tAttributeId=\"urn:oasis:names:tc:xacml:1.0:resource:resource-id\"\n", fp);
-  fputs("\t\t\t\t\t\tDataType=\"http://www.w3.org/2001/XMLSchema#string\"/>\n", fp);
-
-  fputs("\t\t\t\t</ResourceMatch>\n\t\t\t</Resource>\n\t\t</Resources>\n\t\t<Subjects>\n\t\t\t<AnySubject/>\n\t\t</Subjects>", fp);
-  fputs("\n\t\t<Actions>\n\t\t\t<AnyAction/>\n\t\t</Actions>\n\t</Target>\n\n", fp);
-
-  for (entry = acl->firstentry; entry != NULL; entry = entry->next){
-
-       GRSTxacmlEntryPrint(entry, fp, rule_number);
-       rule_number++;
-  }
-
-  fputs("</Policy>\n", fp);
-
-  return 1;
-}
-
-int GRSTxacmlAclSave(GRSTgaclAcl *acl, char *filename, char* dir_uri)
-{
-  int   ret;
-  FILE *fp;
-
-  fp = fopen(filename, "w");
-  if (fp == NULL) return 0;
-
-  fprintf(fp,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
-
-  ret = GRSTxacmlAclPrint(acl, fp, dir_uri);
-
-  fclose(fp);
-
-  return ret;
-}
-
-
-
-
diff --git a/org.gridsite.core/src/gsexec.c b/org.gridsite.core/src/gsexec.c
deleted file mode 100644 (file)
index 4278c77..0000000
+++ /dev/null
@@ -1,1104 +0,0 @@
-/* Copyright 1999-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.
- */
-
-/*
- * suexec.c -- "Wrapper" support program for suEXEC behaviour for Apache
- *
- ***********************************************************************
- *
- * NOTE! : DO NOT edit this code!!!  Unless you know what you are doing,
- *         editing this code might open up your system in unexpected 
- *         ways to would-be crackers.  Every precaution has been taken 
- *         to make this code as safe as possible; alter it at your own
- *         risk.
- *
- ***********************************************************************
- *
- *
- */
-
-#include "apr.h"
-#include "apr_file_io.h"
-#include "ap_config.h"
-#include "gsexec.h"
-
-#include <sys/param.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <string.h>
-#include <time.h>
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdlib.h>
-
-#ifdef HAVE_PWD_H
-#include <pwd.h>
-#endif
-
-#ifdef HAVE_GRP_H
-#include <grp.h>
-#endif
-
-/*
- ***********************************************************************
- * There is no initgroups() in QNX, so I believe this is safe :-)
- * Use cc -osuexec -3 -O -mf -DQNX suexec.c to compile.
- *
- * May 17, 1997.
- * Igor N. Kovalenko -- infoh mail.wplus.net
- ***********************************************************************
- */
-
-#if defined(NEED_INITGROUPS)
-int initgroups(const char *name, gid_t basegid)
-{
-    /* QNX and MPE do not appear to support supplementary groups. */
-    return 0;
-}
-#endif
-
-#if defined(SUNOS4)
-extern char *sys_errlist[];
-#define strerror(x) sys_errlist[(x)]
-#endif
-
-#if defined(PATH_MAX)
-#define AP_MAXPATH PATH_MAX
-#elif defined(MAXPATHLEN)
-#define AP_MAXPATH MAXPATHLEN
-#else
-#define AP_MAXPATH 8192
-#endif
-
-#define AP_ENVBUF 256
-
-extern char **environ;
-static FILE *log = NULL;
-
-char *safe_env_lst[] =
-{
-    /* variable name starts with */
-    "HTTP_",
-    "SSL_",
-    "GRST_",
-
-    /* variable name is */
-    "AUTH_TYPE=",
-    "CONTENT_LENGTH=",
-    "CONTENT_TYPE=",
-    "DATE_GMT=",
-    "DATE_LOCAL=",
-    "DOCUMENT_NAME=",
-    "DOCUMENT_PATH_INFO=",
-    "DOCUMENT_ROOT=",
-    "DOCUMENT_URI=",
-    "GATEWAY_INTERFACE=",
-    "HTTPS=",
-    "LAST_MODIFIED=",
-    "PATH_INFO=",
-    "PATH_TRANSLATED=",
-    "QUERY_STRING=",
-    "QUERY_STRING_UNESCAPED=",
-    "REMOTE_ADDR=",
-    "REMOTE_HOST=",
-    "REMOTE_IDENT=",
-    "REMOTE_PORT=",
-    "REMOTE_USER=",
-    "REDIRECT_HANDLER=",
-    "REDIRECT_QUERY_STRING=",
-    "REDIRECT_REMOTE_USER=",
-    "REDIRECT_STATUS=",
-    "REDIRECT_URL=",
-    "REQUEST_METHOD=",
-    "REQUEST_URI=",
-    "SCRIPT_FILENAME=",
-    "SCRIPT_NAME=",
-    "SCRIPT_URI=",
-    "SCRIPT_URL=",
-    "SERVER_ADMIN=",
-    "SERVER_NAME=",
-    "SERVER_ADDR=",
-    "SERVER_PORT=",
-    "SERVER_PROTOCOL=",
-    "SERVER_SIGNATURE=",
-    "SERVER_SOFTWARE=",
-    "UNIQUE_ID=",
-    "USER_NAME=",
-    "TZ=",
-    NULL
-};
-
-
-static void err_output(int is_error, const char *fmt, va_list ap)
-{
-#ifdef AP_LOG_EXEC
-    time_t timevar;
-    struct tm *lt;
-
-    if (!log) {
-        if ((log = fopen(AP_LOG_EXEC, "a")) == NULL) {
-            fprintf(stderr, "suexec failure: could not open log file\n");
-            perror("fopen");
-            exit(1);
-        }
-    }
-
-    if (is_error) {
-        fprintf(stderr, "suexec policy violation: see suexec log for more "
-                        "details\n");
-    }
-
-    time(&timevar);
-    lt = localtime(&timevar);
-
-    fprintf(log, "[%d-%.2d-%.2d %.2d:%.2d:%.2d]: ",
-            lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday,
-            lt->tm_hour, lt->tm_min, lt->tm_sec);
-
-    vfprintf(log, fmt, ap);
-
-    fflush(log);
-#endif /* AP_LOG_EXEC */
-    return;
-}
-
-static void log_err(const char *fmt,...)
-{
-#ifdef AP_LOG_EXEC
-    va_list ap;
-
-    va_start(ap, fmt);
-    err_output(1, fmt, ap); /* 1 == is_error */
-    va_end(ap);
-#endif /* AP_LOG_EXEC */
-    return;
-}
-
-static void log_no_err(const char *fmt,...)
-{
-#ifdef AP_LOG_EXEC
-    va_list ap;
-
-    va_start(ap, fmt);
-    err_output(0, fmt, ap); /* 0 == !is_error */
-    va_end(ap);
-#endif /* AP_LOG_EXEC */
-    return;
-}
-
-static void clean_env(void)
-{
-    char pathbuf[512];
-    char **cleanenv;
-    char **ep;
-    int cidx = 0;
-    int idx;
-
-    /* While cleaning the environment, the environment should be clean.
-     * (e.g. malloc() may get the name of a file for writing debugging info.
-     * Bad news if MALLOC_DEBUG_FILE is set to /etc/passwd.  Sprintf() may be
-     * susceptible to bad locale settings....)
-     * (from PR 2790)
-     */
-    char **envp = environ;
-    char *empty_ptr = NULL;
-    environ = &empty_ptr; /* VERY safe environment */
-    
-    if ((cleanenv = (char **) calloc(AP_ENVBUF, sizeof(char *))) == NULL) {
-        log_err("failed to malloc memory for environment\n");
-        exit(120);
-    }
-
-    sprintf(pathbuf, "PATH=%s", AP_SAFE_PATH);
-    cleanenv[cidx] = strdup(pathbuf);
-    cidx++;
-
-    for (ep = envp; *ep && cidx < AP_ENVBUF-1; ep++) {
-        for (idx = 0; safe_env_lst[idx]; idx++) {
-            if (!strncmp(*ep, safe_env_lst[idx],
-                         strlen(safe_env_lst[idx]))) {
-                cleanenv[cidx] = *ep;
-                cidx++;
-                break;
-            }
-        }
-    }
-
-    cleanenv[cidx] = NULL;
-
-    environ = cleanenv;
-}
-
-/* Pool account functions */
-
-
-#include <utime.h>
-#include <errno.h>
-#include <dirent.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <pwd.h>
-#include <sys/types.h>
-
-/******************************************************************************
-Function:   mapdir_otherlink
-Description:
-        find another link in map directory to the same inode as firstlink
-        and change the modification time of firstlink to now (so that we
-        always know when this pair was last used)
-        
-Parameters:
-        firstlink, the filename of the link we already know
-
-Returns:
-        a pointer to the other link's filename (without path) or NULL if none
-        found (this is malloc'd and will need freeing)
-
-******************************************************************************/
-static char *mapdir_otherlink(char *mapdir, char *firstlink)
-{
-     int            ret;
-     char           *firstlinkpath, *otherlinkdup, *otherlinkpath;
-     struct dirent  *mapdirentry;
-     DIR            *mapdirstream;
-     struct stat    statbuf;
-     ino_t          firstinode;
-
-     firstlinkpath = malloc(strlen(mapdir) + 2 + strlen(firstlink));
-     sprintf(firstlinkpath, "%s/%s", mapdir, firstlink);     
-     ret = stat(firstlinkpath, &statbuf);
-     free(firstlinkpath);   
-     if (ret != 0) return NULL;
-     if (statbuf.st_nlink != 2) return NULL;
-     
-     firstinode = statbuf.st_ino; /* save for comparisons */
-          
-     mapdirstream = opendir(mapdir);
-
-     if (mapdirstream != NULL)
-       {
-         while ((mapdirentry = readdir(mapdirstream)) != NULL)
-              {       
-                 if (strcmp(mapdirentry->d_name, firstlink) == 0) continue;
-           
-                 otherlinkpath = malloc(strlen(mapdir) + 2 + 
-                                        strlen(mapdirentry->d_name));
-                 sprintf(otherlinkpath, "%s/%s", mapdir, 
-                                            mapdirentry->d_name);
-
-                 ret = stat(otherlinkpath, &statbuf);     
-                 if ((ret == 0) && (statbuf.st_ino == firstinode))
-                   {
-                      utime(otherlinkpath, (struct utimbuf *) NULL);
-                      free(otherlinkpath);
-                      otherlinkdup = strdup(mapdirentry->d_name);
-                      closedir(mapdirstream);     
-                      return otherlinkdup;
-                   }
-                 else free(otherlinkpath);
-              }
-         
-         closedir(mapdirstream);     
-       }
-
-     return NULL;
-}
-
-/******************************************************************************
-Function:   mapdir_urlencode
-Description:
-        Convert string to URL encoded and return pointer to the encoded
-        version, obtained through malloc. Calling routine must free
-        this. Here "URL encoded" means anything other than an isalnum()
-        goes to %HH where HH is its ascii value in hex; also A-Z => a-z 
-        This name is suitable for filenames since no / or spaces.
-
-Parameters:
-        rawstring, the string to be converted
-
-Returns:
-        a pointer to the encoded string or NULL if the malloc failed
-
-******************************************************************************/
-static char *mapdir_urlencode(char *rawstring)
-{
-     int          encodedchar = 0, rawchar = 0;
-     char *       encodedstring;
-     
-     encodedstring = (char *) malloc(3 * strlen(rawstring) + 1);
-     
-     if (encodedstring == NULL) return (char *) NULL;
-
-     while (rawstring[rawchar] != '\0')
-          {
-            if (isalnum(rawstring[rawchar]))
-              {
-                encodedstring[encodedchar] = tolower(rawstring[rawchar]);
-                ++rawchar;
-                ++encodedchar;
-              }
-            else
-              {
-                sprintf(&encodedstring[encodedchar], "%%%02x", 
-                                               rawstring[rawchar]);
-                ++rawchar;
-                encodedchar = encodedchar + 3;
-              }         
-          }
-
-     encodedstring[encodedchar] = '\0';
-     
-     return encodedstring;
-}
-
-/******************************************************************************
-Function:   mapdir_newlease
-Description:
-        Search for an unleased local username to give to the X.509 DN or
-        directory key corresponding to encodedfilename, and then lease it.
-
-Parameters: 
-        encodedfilename, URL-encoded X.509 DN or directory key to associate
-         with an unlease pool username
-
-Returns:
-        no return value
-******************************************************************************/
-
-void mapdir_newlease(char *mapdir, char *encodedkey)
-{
-     int            ret;
-     char           *userfilename, *encodedfilename;
-     struct dirent  *mapdirentry;
-     DIR            *mapdirstream;
-     struct stat    statbuf;
-     
-     encodedfilename = malloc(strlen(mapdir) + (size_t) 2 + 
-                              strlen(encodedkey));
-     sprintf(encodedfilename, "%s/%s", mapdir, encodedkey);
-
-     mapdirstream = opendir(mapdir);
-
-     while ((mapdirentry = readdir(mapdirstream)) != NULL)
-     {
-       /* we dont want any files that dont look like acceptable usernames */
-       if ((*(mapdirentry->d_name) == '%') || 
-           (strcmp(mapdirentry->d_name, "root") == 0))   continue;
-       else if (*(mapdirentry->d_name) == '.')           continue;
-       else if (index(mapdirentry->d_name, '~') != NULL) continue;
-
-       userfilename = malloc(strlen(mapdir) + (size_t) 2 + 
-                             strlen(mapdirentry->d_name));
-       sprintf(userfilename, "%s/%s", mapdir, mapdirentry->d_name);
-       stat(userfilename, &statbuf);
-       
-       if (statbuf.st_nlink == 1) /* this one isnt leased yet */
-       {   
-           ret = link(userfilename, encodedfilename);
-           free(userfilename);
-           if (ret != 0) 
-           {
-               /* link failed: this is probably because a VERY lucky
-                  other process has obtained a lease for encodedfilename 
-                  while we were faffing around */
-               closedir(mapdirstream);
-               free(encodedfilename);
-               return;
-           }
-     
-           stat(encodedfilename, &statbuf);
-           if (statbuf.st_nlink > 2) 
-           {
-              /* two keys have grabbed the same username: back off */
-              unlink(encodedfilename);
-              continue;
-           }
-
-           closedir(mapdirstream);
-           free(encodedfilename);
-           return; /* link worked ok, so return */
-       }
-       else free(userfilename); /* already in use, try next one */
-     }
-     
-     closedir(mapdirstream);
-     free(encodedfilename);
-     return; /* no unleased names left: give up */     
-}
-     
-/******************************************************************************
-Based on gridmapdir_userid:
-
-Function:   gridmapdir_userid
-Description:
-        This is equivalent to globus_gss_assist_gridmap but for the dynamic
-        user ids in the gridmapdir: maps a globusID to a local unix user id,
-        either one already leased, or calls gridmapdir_newlease() to obtain 
-        a new lease. This is called by globus_gss_assist_gridmap if the 
-        local user id in the static gridmap file begins . (for a dynamic id)
-
-Parameters: 
-        globusidp, globus client name who requested authentication 
-        usernameprefix, prefix of the local usernames which would 
-               be acceptable (or "\0" )
-        *userid returned userid name for local system. 
-
-Returns:
-       
-        0 on success
-        !=0 on failure
-
-******************************************************************************/
-
-
-
-int GRSTexecGetMapping(char **target_uname, char **target_gname, 
-                       char *mapdir, char *key) 
-{
-    char          *encodedkey;
-    struct passwd *pw = NULL;
-    
-    if (key[0] != '/') return 1; /* must be a proper X.509 DN or path */
-     
-    encodedkey = mapdir_urlencode(key);
-    *target_uname = mapdir_otherlink(mapdir, encodedkey);
-
-    if (*target_uname == NULL) /* maybe no lease yet */
-      {
-         mapdir_newlease(mapdir, encodedkey);
-         /* try making a lease */
-         
-         *target_uname = mapdir_otherlink(mapdir, encodedkey); 
-         /* check if there is a now a lease - possibly made by someone else */
-
-         if (*target_uname == NULL) 
-           {
-             free(encodedkey);
-             return 1; /* still no good */
-           }
-      }
-
-    free(encodedkey);
-    
-    /*
-     *  Get the group name of target user. 
-        (Contributed by Gerben Venekamp venekamp@nikhef.nl )
-     */
-    if ((pw = getpwnam(*target_uname)) != NULL) 
-      {
-        struct group grp = { NULL, NULL, -1, NULL };
-        struct group *tst = NULL;
-        char tmp_buf[100];
-
-    /*
-     *  NOTE: Do not use the getgrgid() function call! Calling this function
-     *  will overwrite the contents of the internal buffer associated with
-     *  this call. Hence, further down the execution path we will run into
-     *  a wall, head first; simply because the guid has changed to that of
-     *  the targer uid. The only solution out of the situation is avoiding
-     *  the function call and manage the needed buffers ourselves.
-     */
-
-        switch (getgrgid_r(pw->pw_gid, &grp, tmp_buf, sizeof(tmp_buf), &tst)) 
-              {
-                case 0:      /*  no error  */
-                  *target_gname = strdup(grp.gr_name);
-                  break;
-                case ERANGE:
-                  log_err("The buffer for holding strings is too small "
-                          "(%d byte now)\n", sizeof(tmp_buf));
-                  break;
-                default:
-                  log_err("Could not get group name for user (%s)\n", 
-                          *target_uname);
-              }
-
-        /*  Test if all was well.  */
-
-        if (target_gname == NULL) 
-          {
-            exit(102);
-          }
-      } 
-    else 
-      {
-        log_err("Could not get info for the target user (%s)\n",*target_uname);
-        exit(102);
-      }
-    log_no_err("target group name determined (%s -> %s)\n",
-               *target_uname, *target_gname);
-
-    return 0;
-}
-
-void internal_server_error(void)
-{
-    /* use this when its probably an httpd.conf configuration error */
-
-    puts("Status: 500 Internal Server Error\n"
-         "Content-Type: text/html\n\n"
-         "<html><head><title>500 Internal Server Error</title></head>\n"
-         "<body><h1>Internal Server Error</h1></body></html>");
-}
-
-void forbidden_error(void)
-{
-    /* use this when unix file permissions/ownerships are probably wrong */
-
-    puts("Status: 403 Forbidden\n"
-         "Content-Type: text/html\n\n"
-         "<html><head><title>403 Forbidden</title></head>\n"
-         "<body><h1>Forbidden</h1></body></html>");
-}
-
-int main(int argc, char *argv[])
-{
-    int userdir = 0;        /* ~userdir flag             */
-    uid_t uid;              /* user information          */
-    gid_t gid;              /* target group placeholder  */
-    uid_t httpd_uid;       /* uid for AP_HTTPD_USER     */
-    gid_t httpd_gid;       /* uid for AP_HTTPD_GROUP    */
-    char *mapping_type;            /* suexec / X509DN / directory */
-    char *grst_cred_0;     /* GRST_CRED_0 */
-    char *map_x509dn;      /* DN to use as pool acct. key */
-    char *map_directory;    /* directory as pool acct. key */
-
-    char *diskmode_env;                  /* GRST_DISK_MODE as a string     */
-    apr_fileperms_t diskmode_apr; /* GRST_DISK_MODE as Apache perms */
-    mode_t diskmode_t;            /* GRST_DISK_MODE as mode_t       */
-
-    char *target_uname;     /* target user name          */
-    char *target_gname;     /* target group name         */
-    char *target_homedir;   /* target home directory     */
-    char *actual_uname;     /* actual user name          */
-    char *actual_gname;     /* actual group name         */
-    char *prog;             /* name of this program      */
-    char *cmd;              /* command to be executed    */
-    char cwd[AP_MAXPATH];   /* current working directory */
-    char dwd[AP_MAXPATH];   /* docroot working directory */
-    struct passwd *pw;      /* password entry holder     */
-    struct group *gr;       /* group entry holder        */
-    struct stat dir_info;   /* directory info holder     */
-    struct stat prg_info;   /* program info holder       */
-
-    /*
-     * Start with a "clean" environment
-     */
-    clean_env();
-
-    prog = argv[0];
-    /*
-     * Check existence/validity of the UID of the user
-     * running this program.  Error out if invalid.
-     */
-    uid = getuid();
-    if ((pw = getpwuid(uid)) == NULL) {
-        log_err("crit: invalid uid: (%ld)\n", uid);
-        internal_server_error();
-        exit(102);
-    }
-    /*
-     * Check existence/validity of the GID of the user
-     * running this program.  Error out if invalid.
-     */
-    gid = getgid();
-    if ((gr = getgrgid(gid)) == NULL) {
-        log_err("crit: invalid gid: (%ld)\n", gid);
-        internal_server_error();
-        exit(102);
-    }
-    /*
-     * See if this is a 'how were you compiled' request, and
-     * comply if so.
-     */
-    if ((argc > 1)
-        && (! strcmp(argv[1], "-V"))
-        && ((uid == 0)
-#ifdef _OSD_POSIX
-        /* User name comparisons are case insensitive on BS2000/OSD */
-            || (! strcasecmp(AP_HTTPD_USER, pw->pw_name)))
-#else  /* _OSD_POSIX */
-            || (! strcmp(AP_HTTPD_USER, pw->pw_name)))
-#endif /* _OSD_POSIX */
-        ) {
-#ifdef AP_DOC_ROOT
-        fprintf(stderr, " -D AP_DOC_ROOT=\"%s\"\n", AP_DOC_ROOT);
-#endif
-#ifdef AP_GID_MIN
-        fprintf(stderr, " -D AP_GID_MIN=%d\n", AP_GID_MIN);
-#endif
-#ifdef AP_HTTPD_USER
-        fprintf(stderr, " -D AP_HTTPD_USER=\"%s\"\n", AP_HTTPD_USER);
-#endif
-#ifdef AP_LOG_EXEC
-        fprintf(stderr, " -D AP_LOG_EXEC=\"%s\"\n", AP_LOG_EXEC);
-#endif
-#ifdef AP_SAFE_PATH
-        fprintf(stderr, " -D AP_SAFE_PATH=\"%s\"\n", AP_SAFE_PATH);
-#endif
-#ifdef AP_SUEXEC_UMASK
-        fprintf(stderr, " -D AP_SUEXEC_UMASK=%03o\n", AP_SUEXEC_UMASK);
-#endif
-#ifdef AP_UID_MIN
-        fprintf(stderr, " -D AP_UID_MIN=%d\n", AP_UID_MIN);
-#endif
-#ifdef AP_USERDIR_SUFFIX
-        fprintf(stderr, " -D AP_USERDIR_SUFFIX=\"%s\"\n", AP_USERDIR_SUFFIX);
-#endif
-        exit(0);
-    }
-    /*
-     * If there are a proper number of arguments, set
-     * all of them to variables.  Otherwise, error out.
-     */
-    if (argc < 4) {
-        log_err("too few arguments\n");
-        internal_server_error();
-        exit(101);
-    }
-    
-    mapping_type = getenv("GRST_EXEC_METHOD");
-    if ((mapping_type    == NULL) ||
-        (mapping_type[0] == '\0') ||
-        (strcasecmp(mapping_type, "suexec") == 0))
-      {
-        target_uname = argv[1];
-        target_gname = argv[2];
-        mapping_type = NULL;
-      }
-    else if (strcasecmp(mapping_type, "X509DN") == 0)
-      {
-        if ((grst_cred_0 = getenv("GRST_CRED_0")) == NULL)
-                            map_x509dn = getenv("SSL_CLIENT_S_DN");
-        else map_x509dn = index(grst_cred_0, '/');
-
-        if ((map_x509dn == NULL) || (map_x509dn[0] == '\0'))
-          {
-            log_err("No GRST_CRED_0/SSL_CLIENT_S_DN despite X509DN mapping\n");
-            forbidden_error();
-            exit(151);
-          }
-
-        if (GRSTexecGetMapping(&target_uname, &target_gname,
-                               GRST_EXECMAPDIR, map_x509dn)
-            != 0)
-          {
-            log_err("GRSTexecGetMapping() failed mapping \"%s\"\n", 
-                    map_x509dn);
-            forbidden_error();
-            exit(152);          
-          }
-      }
-    else if (strcasecmp(mapping_type, "directory") == 0)
-      {
-        map_directory = getenv("GRST_EXEC_DIRECTORY");
-        if (map_directory == NULL)
-          {
-            log_err("No GRST_EXEC_DIRECTORY despite directory mapping\n");
-            internal_server_error();
-            exit(153);
-          }
-
-        if (GRSTexecGetMapping(&target_uname, &target_gname, 
-                               GRST_EXECMAPDIR, map_directory) 
-            != 0)
-          {
-            log_err("GRSTexecGetMapping() failed mapping \"%s\"\n", 
-                    map_directory);
-            internal_server_error();
-            exit(154);          
-          }
-      }
-    else 
-      {
-        log_err("mapping type \"%s\" not recognised\n", mapping_type);
-        internal_server_error();
-        exit(155);
-      }
-
-    cmd = argv[3];
-
-    /*
-     * Check to see if the user running this program
-     * is the user allowed to do so as defined in
-     * suexec.h.  If not the allowed user, error out.
-     */
-#ifdef _OSD_POSIX
-    /* User name comparisons are case insensitive on BS2000/OSD */
-    if (strcasecmp(AP_HTTPD_USER, pw->pw_name)) {
-        log_err("user mismatch (%s instead of %s)\n", pw->pw_name, AP_HTTPD_USER);
-        internal_server_error();
-        exit(103);
-    }
-    /* User name comparisons are case insensitive on BS2000/OSD */
-    if (strcasecmp(AP_HTTPD_GROUP, gr->gr_name)) {
-        log_err("group mismatch (%s instead of %s)\n", gr->gr_name, AP_HTTPD_GROUP);
-        internal_server_error();
-        exit(103);
-    }
-#else  /*_OSD_POSIX*/
-    if (strcmp(AP_HTTPD_USER, pw->pw_name)) {
-        log_err("user mismatch (%s instead of %s)\n", pw->pw_name, AP_HTTPD_USER);
-        internal_server_error();
-        exit(103);
-    }
-    if (strcmp(AP_HTTPD_GROUP, gr->gr_name)) {
-        log_err("group mismatch (%s instead of %s)\n", gr->gr_name, AP_HTTPD_GROUP);
-        internal_server_error();
-        exit(103);
-    }
-#endif /*_OSD_POSIX*/
-
-    /* Since they match (via name) save these for later */
-
-    httpd_uid = uid;
-    httpd_gid = gid;
-
-    /*
-     * Check for a leading '/' (absolute path) in the command to be executed,
-     * or attempts to back up out of the current directory,
-     * to protect against attacks.  If any are
-     * found, error out.  Naughty naughty crackers.
-     */
-    if ((cmd[0] == '/') || (!strncmp(cmd, "../", 3))
-        || (strstr(cmd, "/../") != NULL)) {
-        log_err("invalid command (%s)\n", cmd);
-        internal_server_error();
-        exit(104);
-    }
-
-    /*
-     * Check to see if this is a ~userdir request.  If
-     * so, set the flag, and remove the '~' from the
-     * target username.
-     */
-    if (!strncmp("~", target_uname, 1)) {
-        target_uname++;
-        userdir = 1;
-    }
-
-    /*
-     * Error out if the target username is invalid.
-     */
-    if (strspn(target_uname, "1234567890") != strlen(target_uname)) {
-        if ((pw = getpwnam(target_uname)) == NULL) {
-            log_err("invalid target user name: (%s)\n", target_uname);
-            internal_server_error();
-            exit(105);
-        }
-    }
-    else {
-        if ((pw = getpwuid(atoi(target_uname))) == NULL) {
-            log_err("invalid target user id: (%s)\n", target_uname);
-            internal_server_error();
-            exit(121);
-        }
-    }
-
-    /*
-     * Error out if the target group name is invalid.
-     */
-    if (strspn(target_gname, "1234567890") != strlen(target_gname)) {
-        if ((gr = getgrnam(target_gname)) == NULL) {
-            log_err("invalid target group name: (%s)\n", target_gname);
-            internal_server_error();
-            exit(106);
-        }
-        gid = gr->gr_gid;
-        actual_gname = strdup(gr->gr_name);
-    }
-    else {
-        gid = atoi(target_gname);
-        actual_gname = strdup(target_gname);
-    }
-
-#ifdef _OSD_POSIX
-    /*
-     * Initialize BS2000 user environment
-     */
-    {
-        pid_t pid;
-        int status;
-
-        switch (pid = ufork(target_uname)) {
-        case -1:    /* Error */
-            log_err("failed to setup bs2000 environment for user %s: %s\n",
-                    target_uname, strerror(errno));
-            internal_server_error();
-            exit(150);
-        case 0:     /* Child */
-            break;
-        default:    /* Father */
-            while (pid != waitpid(pid, &status, 0))
-                ;
-            /* @@@ FIXME: should we deal with STOP signals as well? */
-            if (WIFSIGNALED(status)) {
-                kill (getpid(), WTERMSIG(status));
-            }
-            internal_server_error();
-            exit(WEXITSTATUS(status));
-        }
-    }
-#endif /*_OSD_POSIX*/
-    
-    /*
-     * Save these for later since initgroups will hose the struct
-     */
-    uid = pw->pw_uid;
-    actual_uname = strdup(pw->pw_name);
-    target_homedir = strdup(pw->pw_dir);
-
-    /*
-     * Log the transaction here to be sure we have an open log 
-     * before we setuid().
-     */
-    log_no_err("uid: (%s/%s) gid: (%s/%s) cmd: %s\n",
-               target_uname, actual_uname,
-               target_gname, actual_gname,
-               cmd);
-
-    /*
-     * Error out if attempt is made to execute as root or as
-     * a UID less than AP_UID_MIN.  Tsk tsk.
-     */
-    if ((uid == 0) || (uid < AP_UID_MIN)) {
-        log_err("cannot run as forbidden uid (%d/%s)\n", uid, cmd);
-        internal_server_error();
-        exit(107);
-    }
-
-    /*
-     * Error out if attempt is made to execute as root group
-     * or as a GID less than AP_GID_MIN.  Tsk tsk.
-     */
-    if ((gid == 0) || (gid < AP_GID_MIN)) {
-        log_err("cannot run as forbidden gid (%d/%s)\n", gid, cmd);
-        internal_server_error();
-        exit(108);
-    }
-
-    /*
-     * Change UID/GID here so that the following tests work over NFS.
-     *
-     * Initialize the group access list for the target user,
-     * and setgid() to the target group. If unsuccessful, error out.
-     */
-    if (((setgid(gid)) != 0) || (initgroups(actual_uname, gid) != 0)) {
-        log_err("failed to setgid (%ld: %s)\n", gid, cmd);
-        internal_server_error();
-        exit(109);
-    }
-
-    /*
-     * setuid() to the target user.  Error out on fail.
-     */
-    if ((setuid(uid)) != 0) {
-        log_err("failed to setuid (%ld: %s)\n", uid, cmd);
-        internal_server_error();
-        exit(110);
-    }
-
-    /*
-     * Get the current working directory, as well as the proper
-     * document root (dependant upon whether or not it is a
-     * ~userdir request).  Error out if we cannot get either one,
-     * or if the current working directory is not in the docroot.
-     * Use chdir()s and getcwd()s to avoid problems with symlinked
-     * directories.  Yuck.
-     */
-    if (getcwd(cwd, AP_MAXPATH) == NULL) {
-        log_err("cannot get current working directory\n");
-        internal_server_error();
-        exit(111);
-    }
-
-#if 0
-    if (userdir) {
-        if (((chdir(target_homedir)) != 0) ||
-            ((chdir(AP_USERDIR_SUFFIX)) != 0) ||
-            ((getcwd(dwd, AP_MAXPATH)) == NULL) ||
-            ((chdir(cwd)) != 0)) {
-            log_err("cannot get docroot information (%s)\n", target_homedir);
-            internal_server_error();
-            exit(112);
-        }
-    }
-    else {
-        if (((chdir(AP_DOC_ROOT)) != 0) ||
-            ((getcwd(dwd, AP_MAXPATH)) == NULL) ||
-            ((chdir(cwd)) != 0)) {
-            log_err("cannot get docroot information (%s)\n", AP_DOC_ROOT);
-            internal_server_error();
-            exit(113);
-        }
-    }
-
-    if ((strncmp(cwd, dwd, strlen(dwd))) != 0) {
-        log_err("command not in docroot (%s/%s)\n", cwd, cmd);
-        internal_server_error();
-        exit(114);
-    }
-#endif
-
-    /*
-     * Stat the cwd and verify it is a directory, or error out.
-     */
-    if (((lstat(cwd, &dir_info)) != 0) || !(S_ISDIR(dir_info.st_mode))) {
-        log_err("cannot stat directory: (%s)\n", cwd);
-        internal_server_error();
-        exit(115);
-    }
-
-    /*
-     * Error out if cwd is writable by others.
-     */
-    if ((dir_info.st_mode & S_IWOTH) || (dir_info.st_mode & S_IWGRP)) {
-        log_err("directory is writable by others: (%s)\n", cwd);
-        forbidden_error();
-        exit(116);
-    }
-
-    /*
-     * Error out if we cannot stat the program.
-     */
-    if (((lstat(cmd, &prg_info)) != 0) || (S_ISLNK(prg_info.st_mode))) {
-        log_err("cannot stat program: (%s)\n", cmd);
-        forbidden_error();
-        exit(117);
-    }
-
-    /*
-     * Error out if the program is writable by others.
-     */
-    if (prg_info.st_mode & S_IWOTH) {
-        log_err("file is writable by others: (%s/%s)\n", cwd, cmd);
-        forbidden_error();
-        exit(118);
-    }
-
-    /*
-     * Error out if the file is setuid or setgid.
-     */
-    if ((prg_info.st_mode & S_ISUID) || (prg_info.st_mode & S_ISGID)) {
-        log_err("file is either setuid or setgid: (%s/%s)\n", cwd, cmd);
-        forbidden_error();
-        exit(119);
-    }
-
-    /*
-     * Error out if the target name/group is different from
-     * the name/group of the cwd or the program AND the name/group 
-     * of the cwd and program are not the AP_HTTPD_USER/AP_HTTPD_GROUP
-     * AND the name/group of the cwd and program are not root
-     */
-    if (((uid != dir_info.st_uid) && (httpd_uid != dir_info.st_uid)
-                                  && (0 != dir_info.st_uid)) ||
-        ((gid != dir_info.st_gid) && (httpd_gid != dir_info.st_gid)
-                                  && (0 != dir_info.st_gid)) ||
-        ((uid != prg_info.st_uid) && (httpd_uid != prg_info.st_uid)
-                                  && (0 != prg_info.st_uid)) ||
-        ((gid != prg_info.st_gid) && (httpd_gid != prg_info.st_gid)
-                                  && (0 != prg_info.st_gid)))
-      {
-        log_err("target (%ld/%ld) or %s (%ld/%ld) or root (0/0) uid/gid "
-                "mismatch with directory (%ld/%ld) or program (%ld/%ld)\n",
-                uid, gid, AP_HTTPD_USER, httpd_uid, httpd_gid,
-                dir_info.st_uid, dir_info.st_gid,
-                prg_info.st_uid, prg_info.st_gid);
-        forbidden_error();
-        exit(120);
-      }
-    /*
-     * Error out if the program is not executable for the user.
-     * Otherwise, she won't find any error in the logs except for
-     * "[error] Premature end of script headers: ..."
-     */
-    if (!(prg_info.st_mode & S_IXUSR)) {
-        log_err("file has no execute permission: (%s/%s)\n", cwd, cmd);
-        forbidden_error();
-        exit(121);
-    }
-
-    diskmode_env = getenv("GRST_DISK_MODE");
-    if (diskmode_env != NULL)
-      {
-        diskmode_apr = 0;
-        sscanf(diskmode_env, "%i", &diskmode_apr);
-      
-        diskmode_t = S_IRUSR | S_IWUSR;
-        
-        if (diskmode_apr & APR_GREAD ) diskmode_t |= S_IRGRP;
-        if (diskmode_apr & APR_GWRITE) diskmode_t |= S_IWGRP;
-        if (diskmode_apr & APR_WREAD ) diskmode_t |= S_IROTH;
-        
-        diskmode_t &= (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
-
-// log_err("diskmode_env=%s diskmode_apr=%x diskmode_t=%o ~diskmode_t=%o\n", diskmode_env, diskmode_apr, diskmode_t, ~diskmode_t);  
-              
-        umask(~diskmode_t);
-      }
-#ifdef AP_SUEXEC_UMASK
-    else umask(AP_SUEXEC_UMASK);
-#else
-    else umask(~(S_IRUSR | S_IWUSR));
-#endif /* AP_SUEXEC_UMASK */
-    
-    /* 
-     * Be sure to close the log file so the CGI can't
-     * mess with it.  If the exec fails, it will be reopened 
-     * automatically when log_err is called.  Note that the log
-     * might not actually be open if AP_LOG_EXEC isn't defined.
-     * However, the "log" cell isn't ifdef'd so let's be defensive
-     * and assume someone might have done something with it
-     * outside an ifdef'd AP_LOG_EXEC block.
-     */
-    if (log != NULL) {
-        fclose(log);
-        log = NULL;
-    }
-
-    /*
-     * Execute the command, replacing our image with its own.
-     */
-#ifdef NEED_HASHBANG_EMUL
-    /* We need the #! emulation when we want to execute scripts */
-    {
-        extern char **environ;
-
-        ap_execve(cmd, &argv[3], environ);
-    }
-#else /*NEED_HASHBANG_EMUL*/
-   execv(cmd, &argv[3]);
-#endif /*NEED_HASHBANG_EMUL*/
-
-    /*
-     * (I can't help myself...sorry.)
-     *
-     * Uh oh.  Still here.  Where's the kaboom?  There was supposed to be an
-     * EARTH-shattering kaboom!
-     *
-     * Oh well, log the failure and error out.
-     */
-    log_err("(%d)%s: exec failed (%s)\n", errno, strerror(errno), cmd);
-    internal_server_error();
-    exit(255);
-}
diff --git a/org.gridsite.core/src/gsexec.h b/org.gridsite.core/src/gsexec.h
deleted file mode 100644 (file)
index b777421..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/* Copyright 1999-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.
- */
-
-/*
- * suexec.h -- user-definable variables for the suexec wrapper code.
- *             (See README.configure on how to customize these variables.)
- */
-
-
-#ifndef _SUEXEC_H
-#define _SUEXEC_H
-
-/*
- * Include ap_config_layout so we can work out where the default htdocsdir
- * and logsdir are.
- */
-#include "ap_config_layout.h"
-
-/*
- * HTTPD_USER -- Define as the username under which Apache normally
- *               runs.  This is the only user allowed to execute
- *               this program.
- */
-#ifndef AP_HTTPD_USER
-#define AP_HTTPD_USER "apache"
-#endif
-
-/*
- * HTTPD_GROUP -- Define as the group under which Apache normally
- *                runs.  This is the only user allowed to execute
- *                this program.
- */
-#ifndef AP_HTTPD_GROUP
-#define AP_HTTPD_GROUP "apache"
-#endif
-
-/*
- * UID_MIN -- Define this as the lowest UID allowed to be a target user
- *            for suEXEC.  For most systems, 500 or 100 is common, but
- *            99 will include user nobody on RedHat Linux systems.
- */
-#ifdef AP_UID_MIN
-#undef AP_UID_MIN
-#endif
-#define AP_UID_MIN 99
-
-/*
- * GID_MIN -- Define this as the lowest GID allowed to be a target group
- *            for suEXEC.  For most systems, 100 is common, but 99 will
- *            include group nobody on RedHat Linux systems.
- */
-#ifdef AP_GID_MIN
-#undef AP_GID_MIN
-#endif
-#define AP_GID_MIN 99
-
-/*
- * USERDIR_SUFFIX -- Define to be the subdirectory under users' 
- *                   home directories where suEXEC access should
- *                   be allowed.  All executables under this directory
- *                   will be executable by suEXEC as the user so 
- *                   they should be "safe" programs.  If you are 
- *                   using a "simple" UserDir directive (ie. one 
- *                   without a "*" in it) this should be set to 
- *                   the same value.  suEXEC will not work properly
- *                   in cases where the UserDir directive points to 
- *                   a location that is not the same as the user's
- *                   home directory as referenced in the passwd file.
- *
- *                   If you have VirtualHosts with a different
- *                   UserDir for each, you will need to define them to
- *                   all reside in one parent directory; then name that
- *                   parent directory here.  IF THIS IS NOT DEFINED
- *                   PROPERLY, ~USERDIR CGI REQUESTS WILL NOT WORK!
- *                   See the suEXEC documentation for more detailed
- *                   information.
- */
-#ifndef AP_USERDIR_SUFFIX
-#define AP_USERDIR_SUFFIX "public_html"
-#endif
-
-/*
- * LOG_EXEC -- Define this as a filename if you want all suEXEC
- *             transactions and errors logged for auditing and
- *             debugging purposes.
- */
-#ifndef AP_LOG_EXEC
-#define AP_LOG_EXEC DEFAULT_EXP_LOGFILEDIR "/suexec_log" /* Need me? */
-#endif
-
-/*
- * DOC_ROOT -- Define as the DocumentRoot set for Apache.  This
- *             will be the only hierarchy (aside from UserDirs)
- *             that can be used for suEXEC behavior.
- */
-#ifndef AP_DOC_ROOT
-#define AP_DOC_ROOT DEFAULT_EXP_HTDOCSDIR
-#endif
-
-/*
- * SAFE_PATH -- Define a safe PATH environment to pass to CGI executables.
- *
- */
-#ifndef AP_SAFE_PATH
-#define AP_SAFE_PATH "/usr/local/bin:/usr/bin:/bin"
-#endif
-
-/*
- * GRST_EXECMAPDIR -- Location of the gridmapdir-style directory of lock files
- *
- */
-#define GRST_EXECMAPDIR "/var/www/execmapdir"
-
-#endif /* _SUEXEC_H */
diff --git a/org.gridsite.core/src/htcp.c b/org.gridsite.core/src/htcp.c
deleted file mode 100644 (file)
index b682d17..0000000
+++ /dev/null
@@ -1,2032 +0,0 @@
-/*
-   Copyright (c) 2002-6, 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/socket.h>
-#include <netinet/in.h>
-#include <sys/time.h>
-#include <sys/select.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <curl/curl.h>
-
-#include "gridsite.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
-#define HTCP_MOVE      7
-#define HTCP_PING      8
-#define HTCP_FIND      9
-#define HTCP_RMTCP     10
-
-#define HTCP_SITECAST_GROUPS 32
-
-#define HTCP_HOST_CONF       "/etc/htcp.conf"
-#define HTCP_USER_CONF       ".htcp.conf"
-
-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;
-                          int   gridhttp;
-                          int   verbose;       
-                          int   timeout;
-                          char *groups;
-                          int   sitecast;
-                          char *domain;    } ;
-                          
-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  *gridhttppasscode;
-                          size_t length;
-                          int    length_set;
-                          time_t modified;                           
-                          int    modified_set;
-                          struct grst_stream_data *common_data; } ;
-
-struct grst_sitecast_group { unsigned char quad1; unsigned char quad2; 
-                             unsigned char quad3; unsigned char quad4;
-                             int port; int timewait; int ttl; };
-
-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]);
-        
-        for (q=header_data->location; *q != '\0'; ++q)
-         if ((*q == '\r') || (*q == '\n')) *q = '\0';
-         
-        if (header_data->common_data->verbose > 0)
-             fprintf(stderr, "Received Location: %s\n", header_data->location);
-      }
-  else if (strncmp(s, "Set-Cookie: GRIDHTTP_PASSCODE=", 29) == 0) 
-      {
-        header_data->gridhttppasscode = strdup(&s[12]);
-        q = index(header_data->gridhttppasscode, ';');
-        if (q != NULL) *q = '\0';       
-
-        if (header_data->common_data->verbose > 0)
-             fprintf(stderr, "Received GridHTTP Auth Cookie: %s\n", 
-                             header_data->gridhttppasscode);
-      }
-  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_VERIFYPEER, 0);
-      curl_easy_setopt(easyhandle, CURLOPT_SSL_VERIFYHOST, 0);
-    }      
-  else 
-    {
-      curl_easy_setopt(easyhandle, CURLOPT_SSL_VERIFYPEER, 2);
-      curl_easy_setopt(easyhandle, CURLOPT_SSL_VERIFYHOST, 2);
-    }
-  
-  return 1;
-}
-
-int do_rmtcp(char *sources[], char *destination,
-            struct grst_stream_data *common_data)
-{
-  CURL *easyhandle;
-  char        *p, *thisdestination;
-  int          isrc, anyerror = 0, thiserror, isdirdest;
-  struct       grst_header_data header_data;
-  struct curl_slist *gh_header_slist=NULL, *nogh_header_slist=NULL;
-  char remoteserver[255];
-
-  easyhandle = curl_easy_init();
-  if( !easyhandle )
-    {
-      fprintf(stderr, "Cannot initialize CURL handle while preparing to copy file.\n");
-      exit(-1);
-    }
-
-  common_data->gridhttp = 1; // for debug purpose
-  if (common_data->gridhttp)
-    {               
-      asprintf(&p, "Upgrade: GridHTTP/1.0");
-      gh_header_slist = curl_slist_append(gh_header_slist, p);
-      free(p);
-      
-      nogh_header_slist = curl_slist_append(nogh_header_slist, "Upgrade:");
-    }
-  
-  //  common_data->verbose = 1;   //for debug purpose
-  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( strncmp(sources[isrc], "https://", 8) == 0 ){
-        if (common_data->verbose > 0)
-          fprintf(stderr, "%s -> %s\n", sources[isrc], thisdestination);
-
-        curl_easy_setopt(easyhandle, CURLOPT_URL,       sources[isrc]);
-           
-        if ((common_data->gridhttp) &&
-            (strncmp(sources[isrc], "https://", 8) == 0))
-          {
-             if (common_data->verbose > 0)
-              fprintf(stderr, "Add  Upgrade: GridHTTP/1.0\n");
-             curl_easy_setopt(easyhandle,CURLOPT_HTTPHEADER,gh_header_slist);
-          }
-        else 
-          curl_easy_setopt(easyhandle,CURLOPT_HTTPHEADER,nogh_header_slist);
-
-        header_data.retcode  = 0;
-        header_data.location = NULL;
-        header_data.gridhttppasscode = NULL;
-        header_data.common_data = common_data;
-        thiserror = curl_easy_perform(easyhandle);
-
-       }
-
-        asprintf(&p, "Destination: %s", thisdestination);
-        nogh_header_slist=NULL;
-        nogh_header_slist = curl_slist_append(nogh_header_slist,p);
-        //       fprintf(stdout, "complete destination file: %s\n", p);
-        free(p);
-
-       // send request to destination server, 
-       // to ask it to download file from source server
-       strcpy( remoteserver, destination);
-       while( (p=strrchr(remoteserver, '/')) !=NULL)
-        {
-          if( *(p-1) == '/' )break;
-          else *p = '\0';
-        }
-
-       common_data->source = sources[isrc];
-       common_data->destination = remoteserver;
-       set_std_opts(easyhandle, common_data);
-       // send copy request to copy server (destination)
-       asprintf(&p, "COPY %s", sources[isrc]);
-       curl_easy_setopt(easyhandle, CURLOPT_CUSTOMREQUEST, p);//"COPY");//gh_header_slist);
-       curl_easy_setopt(easyhandle, CURLOPT_URL, remoteserver);
-       curl_easy_setopt(easyhandle, CURLOPT_COOKIE, header_data.gridhttppasscode);
-
-       curl_easy_setopt(easyhandle, CURLOPT_USERAGENT, common_data->useragent);
-       curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, nogh_header_slist);
-
-       curl_easy_setopt(easyhandle, CURLOPT_ERRORBUFFER, common_data->errorbuf);
-       thiserror = curl_easy_perform(easyhandle);
-       free(p);
-     }
-
-  curl_easy_cleanup(easyhandle);
-     
-  return anyerror;
-
-}
-
-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 *gh_header_slist = NULL, *nogh_header_slist = NULL;
-  
-  easyhandle = curl_easy_init();
-  
-  if (common_data->gridhttp)
-    {               
-      asprintf(&p, "Upgrade: GridHTTP/1.0");
-      gh_header_slist = curl_slist_append(gh_header_slist, p);
-      free(p);
-      
-      nogh_header_slist = curl_slist_append(nogh_header_slist, "Upgrade:");
-    }
-  
-  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, "Copy %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->gridhttp) &&
-               (strncmp(sources[isrc], "https://", 8) == 0))
-             {
-               if (common_data->verbose > 0)
-                 fprintf(stderr, "Add  Upgrade: GridHTTP/1.0\n");
-                 
-               curl_easy_setopt(easyhandle,CURLOPT_HTTPHEADER,gh_header_slist);
-             }
-           else 
-             curl_easy_setopt(easyhandle,CURLOPT_HTTPHEADER,nogh_header_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 ((common_data->gridhttp) &&
-               (strncmp(thisdestination, "https://", 8) == 0))
-               curl_easy_setopt(easyhandle,CURLOPT_HTTPHEADER,gh_header_slist);
-           else 
-             curl_easy_setopt(easyhandle,CURLOPT_HTTPHEADER,nogh_header_slist);
-         }
-
-       header_data.retcode  = 0;
-       header_data.location = NULL;
-       header_data.gridhttppasscode = NULL;
-       header_data.common_data = common_data;
-       thiserror = curl_easy_perform(easyhandle);
-       
-       fclose(common_data->fp);
-
-       if ((common_data->gridhttp) &&
-           (thiserror == 0) &&
-           (header_data.retcode == 302) &&
-           (header_data.location != NULL) &&
-           (strncmp(header_data.location, "http://", 7) == 0) &&
-           (header_data.gridhttppasscode != NULL))
-         {
-           if (common_data->verbose > 0)
-             fprintf(stderr, "... Found (%d)\nGridHTTP redirect 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, nogh_header_slist);
-           curl_easy_setopt(easyhandle, CURLOPT_COOKIE, 
-                                                  header_data.gridhttppasscode);
-           thiserror = curl_easy_perform(easyhandle);
-
-           fclose(common_data->fp);
-         }
-
-       if ((thiserror != 0) ||
-           (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 >= 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_move(char *source, char *destination, 
-            struct grst_stream_data *common_data)
-{
-  int    anyerror = 0, thiserror;
-  char  *destination_header;
-  CURL  *easyhandle;
-  struct grst_header_data header_data;
-  struct curl_slist *header_slist = NULL;
-  
-  easyhandle = curl_easy_init();
-  
-  header_data.common_data = common_data;
-
-  easyhandle = curl_easy_init();
-  
-  asprintf(&destination_header, "Destination: %s", destination);
-  header_slist = curl_slist_append(header_slist, destination_header);
-  curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, header_slist);
-
-  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, "MOVE");
-  curl_easy_setopt(easyhandle, CURLOPT_NOBODY,        1);
-
-  set_std_opts(easyhandle, common_data);
-
-  if (common_data->verbose > 0)
-            fprintf(stderr, "Moving %s to %s\n", source, destination);
-
-  curl_easy_setopt(easyhandle, CURLOPT_URL, source);
-
-  header_data.retcode = 0;
-  thiserror = curl_easy_perform(easyhandle);
-       
-  if ((thiserror != 0) ||
-           (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 >= 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_ping(struct grst_stream_data *common_data_ptr)
-{
-  int request_length, response_length, i, ret, s, igroup;
-  struct sockaddr_in srv, from;
-  socklen_t fromlen;
-#define MAXBUF 8192  
-  char *request, response[MAXBUF], *p;
-  GRSThtcpMessage msg;
-  struct timeval start_timeval, wait_timeval, response_timeval;
-  struct grst_sitecast_group sitecast_groups[HTCP_SITECAST_GROUPS];
-  fd_set readsckts;
-
-  /* parse common_data_ptr->groups */ 
-
-  p = common_data_ptr->groups;
-  igroup = -1;
-
-  for (igroup=-1; igroup+1 < HTCP_SITECAST_GROUPS; ++igroup)
-     {  
-       sitecast_groups[igroup+1].port     = GRST_HTCP_PORT;
-       sitecast_groups[igroup+1].timewait = 1;
-       sitecast_groups[igroup+1].ttl      = 1;
-       
-       ret = sscanf(p, "%d.%d.%d.%d:%d:%d:%d", 
-                 &(sitecast_groups[igroup+1].quad1),
-                 &(sitecast_groups[igroup+1].quad2),    
-                 &(sitecast_groups[igroup+1].quad3),
-                 &(sitecast_groups[igroup+1].quad4),    
-                 &(sitecast_groups[igroup+1].port),
-                 &(sitecast_groups[igroup+1].ttl),
-                 &(sitecast_groups[igroup+1].timewait));
-
-       if (ret == 0) break; /* end of list ? */
-         
-       if (ret < 5)
-         {
-           fprintf(stderr, "Failed to parse multicast group "
-                     "parameter %s\n", p);
-           return CURLE_FAILED_INIT;
-         }
-           
-       ++igroup;
-       
-       if ((p = index(p, ',')) == NULL) break;       
-       ++p;
-     }
-
-  if (igroup == -1)
-    {
-      fprintf(stderr, "Failed to parse multicast group parameter %s\n", p);
-      return CURLE_FAILED_INIT;
-    }
-
-  if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) 
-    {
-      fprintf(stderr, "Failed to open UDP socket\n");
-      return CURLE_FAILED_INIT;
-    }
-
-  /* loop through multicast groups and send off the NOP pings */
-
-  gettimeofday(&start_timeval, NULL);
-
-  for (i=0; i <= igroup; ++i)
-     {
-       bzero(&srv, sizeof(srv));
-       srv.sin_family = AF_INET;
-       srv.sin_port = htons(sitecast_groups[i].port);
-       srv.sin_addr.s_addr = htonl(sitecast_groups[i].quad1*0x1000000
-                                 + sitecast_groups[i].quad2*0x10000
-                                 + sitecast_groups[i].quad3*0x100
-                                 + sitecast_groups[i].quad4);
-
-       GRSThtcpNOPrequestMake(&request, &request_length, 
-                              (int) (start_timeval.tv_usec + i));
-     
-       sendto(s, request, request_length, 0, (struct sockaddr *) &srv,
-                                                    sizeof(srv));
-       free(request);
-
-       if (common_data_ptr->verbose > 0)
-         fprintf(stderr, "UDP/HTCP NOP ping to %d:%d:%d:%d %d\n",
-                         sitecast_groups[i].quad1,
-                         sitecast_groups[i].quad2,
-                         sitecast_groups[i].quad3,
-                         sitecast_groups[i].quad4,
-                         sitecast_groups[i].port);
-     }
-
-  /* reusing wait_timeval is a Linux-specific feature of select() */
-  wait_timeval.tv_sec = common_data_ptr->timeout 
-                                 ? common_data_ptr->timeout : 60;
-  wait_timeval.tv_usec = 0;
-
-  while ((wait_timeval.tv_sec > 0) || (wait_timeval.tv_usec > 0))
-       {
-         FD_ZERO(&readsckts);
-         FD_SET(s, &readsckts);
-  
-         ret = select(s + 1, &readsckts, NULL, NULL, &wait_timeval);
-         gettimeofday(&response_timeval, NULL);
-
-         if (ret > 0)
-           {
-             response_length = recvfrom(s, response, MAXBUF,
-                                        0, &from, &fromlen);
-  
-             if (common_data_ptr->verbose > 0)
-              fprintf(stderr, "UDP mesg from %s:%d\n",
-                              inet_ntoa(from.sin_addr), ntohs(from.sin_port));
-
-             if ((GRSThtcpMessageParse(&msg, response, response_length) 
-                                                      == GRST_RET_OK) &&
-                 (msg.opcode == GRSThtcpNOPop) && (msg.rr == 1) && 
-                 (msg.trans_id >= (int) start_timeval.tv_usec) &&
-                 (msg.trans_id <= (int) (start_timeval.tv_usec + igroup)))
-               {
-                 printf("%s:%d %.3fms\n", 
-                          inet_ntoa(from.sin_addr),
-                          ntohs(from.sin_port), 
-                          (((long) 1000000 * response_timeval.tv_sec) +
-                           ((long) response_timeval.tv_usec) -
-                           ((long) 1000000 * start_timeval.tv_sec) -
-                           ((long) start_timeval.tv_usec)) / 1000.0);
-               }
-           }
-       }
-       
-   return GRST_RET_OK;
-}
-
-int do_finds(char *sources[], 
-             struct grst_stream_data *common_data_ptr, int num)
-{
-  int          isrc;
-
-  int request_length, response_length, i, ret, s, igroup;
-  struct sockaddr_in srv, from;
-  socklen_t fromlen;
-#define MAXBUF 8192  
-  char *request, response[MAXBUF], *p;
-  GRSThtcpMessage msg;
-  struct timeval start_timeval, wait_timeval;
-  struct grst_sitecast_group sitecast_groups[HTCP_SITECAST_GROUPS];
-  fd_set readsckts;
-
-  /* parse common_data_ptr->groups */ 
-
-  if (common_data_ptr->groups == NULL)
-    {
-      fprintf(stderr, "No multicast groups given\n");
-      return CURLE_FAILED_INIT;
-    }
-
-  p = common_data_ptr->groups;
-  igroup = -1;
-
-  for (igroup=-1; igroup+1 < HTCP_SITECAST_GROUPS;)
-     {  
-       sitecast_groups[igroup+1].port     = GRST_HTCP_PORT;
-       sitecast_groups[igroup+1].timewait = 1;
-       sitecast_groups[igroup+1].ttl      = 1;
-       
-       ret = sscanf(p, "%d.%d.%d.%d:%d:%d:%d", 
-                 &(sitecast_groups[igroup+1].quad1),
-                 &(sitecast_groups[igroup+1].quad2),    
-                 &(sitecast_groups[igroup+1].quad3),
-                 &(sitecast_groups[igroup+1].quad4),    
-                 &(sitecast_groups[igroup+1].port),
-                 &(sitecast_groups[igroup+1].ttl),
-                 &(sitecast_groups[igroup+1].timewait));
-
-       if (ret == 0) break; /* end of list ? */
-         
-       if (ret < 5)
-         {
-           fprintf(stderr, "Failed to parse multicast group "
-                     "parameter %s\n", p);
-           return CURLE_FAILED_INIT;
-         }
-           
-       ++igroup;
-       
-       if ((p = index(p, ',')) == NULL) break;       
-       ++p;
-     }
-
-  if (igroup == -1)
-    {
-      fprintf(stderr, "Failed to parse multicast group parameter %s\n", p);
-      return CURLE_FAILED_INIT;
-    }
-
-  if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) 
-    {
-      fprintf(stderr, "Failed to open UDP socket\n");
-      return CURLE_FAILED_INIT;
-    }
-
-  /* loop through multicast groups since we need to take each 
-     ones timewait into account */
-
-  gettimeofday(&start_timeval, NULL);
-
-  for (i=0; i <= igroup; ++i)
-     {
-       if (common_data_ptr->verbose)
-        fprintf(stderr, "Querying multicast group %d.%d.%d.%d:%d:%d:%d\n",
-                sitecast_groups[i].quad1, sitecast_groups[i].quad2,
-                sitecast_groups[i].quad3, sitecast_groups[i].quad4,
-                sitecast_groups[i].port, sitecast_groups[i].ttl,
-                sitecast_groups[i].timewait);
-        
-       bzero(&srv, sizeof(srv));
-       srv.sin_family = AF_INET;
-       srv.sin_port = htons(sitecast_groups[i].port);
-       srv.sin_addr.s_addr = htonl(sitecast_groups[i].quad1*0x1000000
-                                 + sitecast_groups[i].quad2*0x10000
-                                 + sitecast_groups[i].quad3*0x100
-                                 + sitecast_groups[i].quad4);
-
-       /* send off queries, one for each source file */
-
-       for (isrc=0; sources[isrc] != NULL; ++isrc)
-          {
-            GRSThtcpTSTrequestMake(&request, &request_length, 
-                                   (int) (start_timeval.tv_usec + isrc),
-                                   "GET", sources[isrc], "");
-
-            sendto(s, request, request_length, 0, 
-                       (struct sockaddr *) &srv, sizeof(srv));
-
-            free(request);
-          }
-          
-       /* reusing wait_timeval is a Linux-specific feature of select() */
-       wait_timeval.tv_usec = 0;
-       wait_timeval.tv_sec  = sitecast_groups[i].timewait;
-
-       while ((wait_timeval.tv_sec > 0) || (wait_timeval.tv_usec > 0))
-            {
-              FD_ZERO(&readsckts);
-              FD_SET(s, &readsckts);
-  
-              ret = select(s + 1, &readsckts, NULL, NULL, &wait_timeval);
-
-              if (ret > 0)
-                {
-                  response_length = recvfrom(s, response, MAXBUF,
-                                             0, &from, &fromlen);
-  
-                  if ((GRSThtcpMessageParse(&msg, response, response_length) 
-                                                      == GRST_RET_OK) &&
-                      (msg.opcode == GRSThtcpTSTop) && (msg.rr == 1) && 
-                      (msg.trans_id >= (int) start_timeval.tv_usec) &&
-                      (msg.trans_id < (int) (start_timeval.tv_usec + num)) &&
-                      (msg.resp_hdrs != NULL) &&
-                      (GRSThtcpCountstrLen(msg.resp_hdrs) > 12))
-                    {                      
-                      if (num > 1) printf("%s -> %.*s\n",
-                          sources[msg.trans_id - (int) start_timeval.tv_usec],
-                          GRSThtcpCountstrLen(msg.resp_hdrs) - 12, 
-                          &(msg.resp_hdrs->text[10]));
-                      else printf("%.*s\n",
-                          GRSThtcpCountstrLen(msg.resp_hdrs) - 12, 
-                          &(msg.resp_hdrs->text[10]));
-                    }
-                }
-            }
-
-     }
-
-   return GRST_RET_OK;
-}
-
-int translate_sitecast_url(char **source_ptr,
-                           struct grst_stream_data *common_data_ptr)
-{
-  int request_length, response_length, i, ret, s, igroup;
-  struct sockaddr_in srv, from;
-  socklen_t fromlen;
-#define MAXBUF 8192  
-  char *request, response[MAXBUF], *p;
-  GRSThtcpMessage msg;
-  struct timeval start_timeval, wait_timeval;
-  struct grst_sitecast_group sitecast_groups[HTCP_SITECAST_GROUPS];
-  fd_set readsckts;
-
-  /* parse common_data_ptr->groups */ 
-
-  if (common_data_ptr->groups == NULL)
-    {
-      fprintf(stderr, "No multicast groups given\n");
-      return CURLE_FAILED_INIT;
-    }
-
-  p = common_data_ptr->groups;
-  igroup = -1;
-  
-  for (igroup=-1; igroup+1 < HTCP_SITECAST_GROUPS;)
-     {  
-       sitecast_groups[igroup+1].port     = GRST_HTCP_PORT;
-       sitecast_groups[igroup+1].timewait = 1;
-       sitecast_groups[igroup+1].ttl      = 1;
-       
-       ret = sscanf(p, "%d.%d.%d.%d:%d:%d:%d", 
-                 &(sitecast_groups[igroup+1].quad1),
-                 &(sitecast_groups[igroup+1].quad2),    
-                 &(sitecast_groups[igroup+1].quad3),
-                 &(sitecast_groups[igroup+1].quad4),    
-                 &(sitecast_groups[igroup+1].port),
-                 &(sitecast_groups[igroup+1].ttl),
-                 &(sitecast_groups[igroup+1].timewait));
-
-       if (ret == 0) break; /* end of list ? */
-         
-       if (ret < 5)
-         {
-           fprintf(stderr, "Failed to parse multicast group "
-                     "parameter %s\n", p);
-           return CURLE_FAILED_INIT;
-         }
-         
-       ++igroup;  
-       
-       if ((p = index(p, ',')) == NULL) break;       
-       ++p;
-     }
-
-  if (igroup == -1)
-    {
-      fprintf(stderr, "Failed to parse multicast group parameter %s\n", p);
-      return CURLE_FAILED_INIT;
-    }
-
-  if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) 
-    {
-      fprintf(stderr, "Failed to open UDP socket\n");
-      return CURLE_FAILED_INIT;
-    }
-
-  /* loop through multicast groups since we need to take each 
-     ones timewait into account */
-
-  gettimeofday(&start_timeval, NULL);
-
-  for (i=0; i <= igroup; ++i)
-     {
-       if (common_data_ptr->verbose)
-        fprintf(stderr, "Querying multicast group %d.%d.%d.%d:%d:%d:%d\n",
-                sitecast_groups[i].quad1, sitecast_groups[i].quad2,
-                sitecast_groups[i].quad3, sitecast_groups[i].quad4,
-                sitecast_groups[i].port, sitecast_groups[i].ttl,
-                sitecast_groups[i].timewait);
-        
-       bzero(&srv, sizeof(srv));
-       srv.sin_family = AF_INET;
-       srv.sin_port = htons(sitecast_groups[i].port);
-       srv.sin_addr.s_addr = htonl(sitecast_groups[i].quad1*0x1000000
-                                 + sitecast_groups[i].quad2*0x10000
-                                 + sitecast_groups[i].quad3*0x100
-                                 + sitecast_groups[i].quad4);
-
-       /* send off queries, one for each source file */
-
-       GRSThtcpTSTrequestMake(&request, &request_length, 
-                                   (int) (start_timeval.tv_usec),
-                                   "GET", *source_ptr, "");
-
-       sendto(s, request, request_length, 0, 
-                       (struct sockaddr *) &srv, sizeof(srv));
-
-       free(request);
-          
-       /* reusing wait_timeval is a Linux-specific feature of select() */
-       wait_timeval.tv_usec = 0;
-       wait_timeval.tv_sec  = sitecast_groups[i].timewait;
-
-       while ((wait_timeval.tv_sec > 0) || (wait_timeval.tv_usec > 0))
-            {
-              FD_ZERO(&readsckts);
-              FD_SET(s, &readsckts);
-  
-              ret = select(s + 1, &readsckts, NULL, NULL, &wait_timeval);
-
-              if (ret > 0)
-                {
-                  response_length = recvfrom(s, response, MAXBUF,
-                                             0, &from, &fromlen);
-  
-                  if ((GRSThtcpMessageParse(&msg, response, response_length) 
-                                                      == GRST_RET_OK) &&
-                      (msg.opcode == GRSThtcpTSTop) && (msg.rr == 1) && 
-                      (msg.trans_id == (int) start_timeval.tv_usec) &&
-                      (msg.resp_hdrs != NULL) &&
-                      (GRSThtcpCountstrLen(msg.resp_hdrs) > 12))
-                    { 
-                      /* found one */ 
-
-                      if (common_data_ptr->verbose > 0)
-                        fprintf(stderr, "Sitecast %s -> %.*s\n",
-                                *source_ptr, 
-                                GRSThtcpCountstrLen(msg.resp_hdrs) - 12,
-                                &(msg.resp_hdrs->text[10]));
-
-                      free(*source_ptr);
-                      
-                      asprintf(source_ptr, "%.*s",
-                          GRSThtcpCountstrLen(msg.resp_hdrs) - 12, 
-                          &(msg.resp_hdrs->text[10]));
-                          
-                      return GRST_RET_OK;
-                    }
-                }
-            }
-
-     }
-     
-  return GRST_RET_OK;
-}
-
-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.gridhttppasscode = 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 >= 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.gridhttppasscode = 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);
-}
-
-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},
-                                       {"grid-http",           0, 0, 0},
-                                       {"move",                0, 0, 0},
-                                       {"ping",                0, 0, 0},
-                                       {"groups",              1, 0, 0},
-                                       {"timeout",             1, 0, 0},
-                                       {"sitecast",            0, 0, 0},
-                                       {"domain",              1, 0, 0},
-                                       {"find",                0, 0, 0},
-                                       {"rmtcp",               0, 0, 0},
-                                       {"conf",                1, 0, 0},
-                                       {0, 0, 0, 0}  };
-
-int update_common_data(struct grst_stream_data *, int, char *);
-
-void parse_conf(struct grst_stream_data *common_data_ptr, char *conf_file)
-{
-  int   option_index;
-  char  line[1001], *p;
-  FILE *fp;
-  
-  fp = fopen(conf_file, "r");
-  if (fp == NULL)
-    {
-      if (common_data_ptr->verbose)
-        fprintf(stderr, "Failed to open configuration file %s\n", conf_file);
-      return;
-    }
-    
-  if (common_data_ptr->verbose)
-      fprintf(stderr, "Opened configuration file %s\n", conf_file);
-
-  while (fgets(line, sizeof(line), fp) != NULL)
-       {
-         if ((p = index(line, '\n')) != NULL) *p = '\0';
-       
-         for (option_index=0; 
-              long_options[option_index].name != NULL; ++option_index)
-            {
-              if (long_options[option_index].has_arg &&
-                  (strncmp(line, long_options[option_index].name, 
-                          strlen(long_options[option_index].name)) == 0) &&
-                  (line[strlen(long_options[option_index].name)] == '='))
-                {
-                  update_common_data(common_data_ptr, option_index,
-                   strdup(&line[strlen(long_options[option_index].name) + 1]));
-                  break;
-                }              
-
-              if (!long_options[option_index].has_arg &&
-                  (strcmp(line, long_options[option_index].name) == 0))
-                {
-                  update_common_data(common_data_ptr, option_index, "");
-                  break;
-                }              
-            }
-       }  
-    
-  fclose(fp);
-}
-
-int update_common_data(struct grst_stream_data *common_data_ptr,
-                        int option_index, char *optarg)
-{
-  if      (option_index == 1) common_data_ptr->cert       = optarg;
-  else if (option_index == 2) common_data_ptr->key        = optarg; 
-  else if (option_index == 3) common_data_ptr->capath     = optarg;
-  else if (option_index == 4) common_data_ptr->method     = HTCP_DELETE;
-  else if (option_index == 5) common_data_ptr->method     = HTCP_LIST;
-  else if (option_index == 6) common_data_ptr->method     = HTCP_LONGLIST;
-  else if (option_index == 7) common_data_ptr->method     = HTCP_MKDIR;
-  else if (option_index == 8) common_data_ptr->noverify   = 1;
-  else if (option_index == 9) common_data_ptr->anonymous  = 1;
-  else if (option_index ==10) common_data_ptr->gridhttp   = 1;
-  else if (option_index ==11) common_data_ptr->method     = HTCP_MOVE;
-  else if (option_index ==12) common_data_ptr->method     = HTCP_PING;
-  else if (option_index ==13) common_data_ptr->groups     = optarg;
-  else if (option_index ==14) common_data_ptr->timeout    = atoi(optarg);
-  else if (option_index ==15) common_data_ptr->sitecast   = 1;
-  else if (option_index ==16) { common_data_ptr->sitecast = 1;
-                                common_data_ptr->domain   = optarg; }
-  else if (option_index ==17) common_data_ptr->method     = HTCP_FIND;
-  else if (option_index ==18) { printf("OK\n");common_data_ptr->method   = HTCP_RMTCP;}
-  /* option_index == 19 is used by the --conf command line-only option */
-  else return GRST_RET_FAILED;
-  
-  return GRST_RET_OK;
-}
-
-int main(int argc, char *argv[])
-{
-  char **sources, *destination = NULL, *executable, *p, *htcp_conf;
-  int    c, i, option_index, anyerror;
-  struct stat statbuf;
-  struct grst_stream_data common_data;
-  struct passwd *userpasswd;
-
-#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.gridhttp  = 0;
-  
-  common_data.groups    = NULL;
-  common_data.timeout   = 0;
-  common_data.sitecast  = 0;
-  common_data.domain    = NULL;
-
-  if ((argc > 1) && ((strcmp(argv[1], "--verbose") == 0) || 
-                     (strcmp(argv[1], "-v") == 0))) common_data.verbose = 1;
-    
-  /* examine any configuration files */
-    
-  parse_conf(&common_data, HTCP_HOST_CONF);  
-  
-  userpasswd = getpwuid(geteuid());
-  asprintf(&htcp_conf, "%s/%s", userpasswd->pw_dir, HTCP_USER_CONF);
-  parse_conf(&common_data, htcp_conf);
-  free(htcp_conf);
-
-  htcp_conf = getenv("HTCP_CONF");
-  if (htcp_conf != NULL) parse_conf(&common_data, htcp_conf);
-
-  common_data.verbose = 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 == 19) parse_conf(&common_data, optarg);
-             else update_common_data(&common_data, option_index, 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");
-              
-              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;
-      else if (strcmp(executable,"htmv")==0) common_data.method=HTCP_MOVE;
-      else if (strcmp(executable,"htping")==0) common_data.method=HTCP_PING;
-      else if (strcmp(executable,"htfind")==0) common_data.method=HTCP_FIND;
-      else if (strcmp(executable,"htrmtcp")==0) common_data.method=HTCP_RMTCP;
-    }
-    
-  if (common_data.method == HTCP_PING)
-    {
-      if (common_data.groups != NULL) return do_ping(&common_data);
-
-      fprintf(stderr, "Must specify at least one multicast group\n\n"); 
-      printsyntax(argv[0]);      
-      return CURLE_FAILED_INIT;      
-    }
-
-  if ((common_data.method == HTCP_DELETE) || 
-      (common_data.method == HTCP_LIST)   ||
-      (common_data.method == HTCP_FIND)   ||
-      (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_FIND) 
-                   anyerror = do_finds(sources, &common_data, argc - optind);
-      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 (common_data.method == HTCP_MOVE)
-    {
-      if (optind >= argc - 1)
-        {
-          fputs("Must give exactly 2 non-option arguments\n\n", stderr);
-          printsyntax(argv[0]);
-          return CURLE_URL_MALFORMAT;
-        }
-      
-      anyerror = do_move(argv[optind], argv[optind + 1], &common_data);
-
-      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] = strdup(&argv[optind + i][5]);
-       else sources[i] = strdup(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)
-    {
-      if ((argv[optind+i][strlen(argv[optind+i]) - 1] != '/') &&
-          (stat(&argv[optind + i][5], &statbuf) == 0) &&
-          S_ISDIR(statbuf.st_mode))
-                         asprintf(&destination, "%s/", &argv[optind + i][5]);
-      else destination = strdup(&argv[optind + i][5]);
-    }
-  else if ((strncmp(argv[optind+i], "http://",  7) != 0) &&
-           (strncmp(argv[optind+i], "https://", 8) != 0)) 
-    {
-      if ((argv[optind+i][strlen(argv[optind+i]) - 1] != '/') &&
-          (stat(argv[optind+i], &statbuf) == 0) &&
-          S_ISDIR(statbuf.st_mode))
-                         asprintf(&destination, "%s/", argv[optind+i]);
-      else destination = strdup(argv[optind+i]);
-    }
-  else destination = strdup(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;
-    }
-  
-  // remote file copy  
-  if ( common_data.method == HTCP_RMTCP )
-    {
-      anyerror = do_rmtcp(sources, destination, &common_data);
-      fprintf(stdout, "The file has been moved!\n");
-      //      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)
-             {
-               if ((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;
-                 }
-
-               if ((common_data.sitecast) && 
-                   ((common_data.domain == NULL) ||
-
-                    ((strncmp(sources[i], "http://", 7) == 0) &&
-                     (strncmp(&sources[i][7], common_data.domain, 
-                                 strlen(common_data.domain)) == 0) &&
-                     ((sources[i][7+strlen(common_data.domain)] == ':') ||
-                      (sources[i][7+strlen(common_data.domain)] == '/'))) ||
-
-                    ((strncmp(sources[i], "https://", 8) == 0) &&
-                     (strncmp(&sources[i][8], common_data.domain, 
-                                 strlen(common_data.domain)) == 0) &&
-                     ((sources[i][8+strlen(common_data.domain)] == ':') ||
-                      (sources[i][8+strlen(common_data.domain)] == '/')))))
-                 {
-                   translate_sitecast_url(&sources[i], &common_data);
-                 }
-             }
-         }
-         
-  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 b6dd179..0000000
+++ /dev/null
@@ -1,606 +0,0 @@
-/*
-   Copyright (c) 2002-6, 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 <time.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#include <openssl/x509.h>
-#include <openssl/x509v3.h>
-#include <openssl/pem.h>
-
-#include <getopt.h>
-
-#include <gridsite.h>
-
-#include <stdsoap2.h>
-
-#include "DelegationSoapBinding.nsmap"
-
-#define HTPROXY_PUT            0
-#define HTPROXY_RENEW          1
-#define HTPROXY_DESTROY                2
-#define HTPROXY_TIME           3
-#define HTPROXY_UNIXTIME       4
-#define HTPROXY_MAKE           5
-#define HTPROXY_INFO           6
-
-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);
-}
-
-void htproxy_logfunc(char *file, int line, int level, char *fmt, ...)
-{
-  char *mesg;
-  va_list ap;
-
-  va_start(ap, fmt);
-  vasprintf(&mesg, fmt, ap);
-  va_end(ap);
-
-  fprintf(stderr, "%s(%d) %s\n", file, line, mesg);
-
-  free(mesg);
-}
-  
-int main(int argc, char *argv[])
-{
-  char  *delegation_id = "", *reqtxt, *certtxt, *valid = NULL, 
-        *cert = NULL, *key = NULL, *capath = NULL, *keycert, timestr[81],
-        *executable, *keytxt, *proxychain, *ptr;
-  struct ns__putProxyResponse *unused;
-  struct tm *finish_tm;
-  int    option_index, c, noverify = 0, i, ret,
-         method = HTPROXY_PUT, verbose = 0, fd, minutes;
-  struct soap soap_get, soap_put;
-  struct ns__getProxyReqResponse        getProxyReqResponse;
-  struct ns__getNewProxyReqResponse     getNewProxyReqResponse;
-  struct ns__renewProxyReqResponse      renewProxyReqResponse;
-  struct ns__destroyResponse            destroyResponse;
-  struct ns__getTerminationTimeResponse getTerminationTimeResponse;
-  FILE   *ifp, *ofp;
-  STACK_OF(X509) *x509_certstack;
-  X509   *x509_cert;
-  BIO    *certmem;
-  GRSTx509Chain *grst_chain = NULL;
-  GRSTx509Cert  *grst_cert = NULL;
-  long   ptrlen;
-  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},
-                                        {"destroy",     0, 0, 0},
-                                        {"time",        0, 0, 0},
-                                        {"no-verify",   0, 0, 0},
-                                        {"valid",       1, 0, 0},
-                                        {"delegation-id",1, 0, 0},
-                                        {"put",         0, 0, 0},
-                                        {"renew",       0, 0, 0},
-                                        {"unixtime",   0, 0, 0},
-                                        {"make",       0, 0, 0},
-                                        {"info",       0, 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) cert            = optarg;
-             else if (option_index ==  2) key             = optarg;
-             else if (option_index ==  3) capath          = optarg;
-             else if (option_index ==  4) method          = HTPROXY_DESTROY;
-             else if (option_index ==  5) method          = HTPROXY_TIME;
-             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 (option_index == 10) method          = HTPROXY_RENEW;
-             else if (option_index == 11) method          = HTPROXY_UNIXTIME;
-             else if (option_index == 12) method          = HTPROXY_MAKE;
-             else if (option_index == 13) method          = HTPROXY_INFO;
-           }
-         else if (c == 'v') 
-                {
-                  GRSTerrorLogFunc = htproxy_logfunc;
-                  ++verbose;
-                }
-       }
-
-  executable = rindex(argv[0], '/');
-  if (executable != NULL) executable++;
-  else                    executable = argv[0];
-  
-  if    (strcmp(executable, "htproxydestroy") == 0) method = HTPROXY_DESTROY;
-  else if (strcmp(executable, "htproxyrenew") == 0) method = HTPROXY_RENEW;
-  else if (strcmp(executable, "htproxytime") == 0)  method = HTPROXY_TIME;
-  else if (strcmp(executable, "htproxyunixtime") == 0) 
-                                                    method = HTPROXY_UNIXTIME;
-  else if (strcmp(executable, "htproxymake") == 0)  method = HTPROXY_MAKE;
-  else if (strcmp(executable, "htproxyinfo") == 0)  method = HTPROXY_INFO;
-
-  if ((method != HTPROXY_MAKE) && 
-      (method != HTPROXY_INFO) && (optind + 1 != argc))
-    {
-      fprintf(stderr, "Must specify a delegation service URL!\n");
-      return 1;
-    }
-
-  if ((method == HTPROXY_RENEW) && (delegation_id[0] == '\0'))
-    {
-      fprintf(stderr, "Must give a Delegation ID when renewing\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))
-    {
-      if (method != HTPROXY_MAKE) cert = getenv("X509_USER_PROXY");
-
-      if (cert != NULL) key = cert;
-      else
-        {
-          if (method != HTPROXY_MAKE) 
-               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 if (method != HTPROXY_INFO)
-            {
-              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 ((key != NULL) && (cert != NULL) &&
-      (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 ((method == HTPROXY_PUT) || (method == HTPROXY_RENEW))
-    {
-      if (verbose) 
-        {
-          fprintf(stderr, "Using SOAP delegation protocol\n");
-          fprintf(stderr, "Delegation-ID: %s\n", delegation_id);
-        }
-
-      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;
-        } 
-
-      if ((method == HTPROXY_RENEW) && (delegation_id[0] != '\0'))
-        {
-          if (verbose) fprintf(stderr, "Send renewProxyReq to service\n");
-
-          soap_call_ns__renewProxyReq(&soap_get, 
-                                argv[optind],  /* HTTPS url of service */
-                                "http://www.gridsite.org/namespaces/delegation-1",
-                                delegation_id, 
-                                &renewProxyReqResponse);
-      
-          if (soap_get.error)
-            {
-              soap_print_fault(&soap_get, stderr);
-              return 1;        
-            }
-       
-          reqtxt = renewProxyReqResponse._renewProxyReqReturn;
-        }
-      else
-        {
-          if (verbose) fprintf(stderr, "Send getNewProxyReq to service\n");
-
-          soap_call_ns__getNewProxyReq(&soap_get,
-                            argv[optind],      /* HTTPS url of service */
-                            "http://www.gridsite.org/namespaces/delegation-1",
-                            &getNewProxyReqResponse);
-
-          if (soap_get.error)
-            {
-              soap_print_fault(&soap_get, stderr);
-              return 1;        
-            }
-
-          reqtxt = getNewProxyReqResponse.getNewProxyReqReturn->proxyRequest;
-          delegation_id = 
-                   getNewProxyReqResponse.getNewProxyReqReturn->delegationID;
-        }
-      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],
-                             "http://www.gridsite.org/namespaces/delegation-1",
-                             delegation_id, 
-                             certtxt, unused);      
-      if (soap_put.error)
-        {
-          soap_print_fault(&soap_put, stderr);
-          return 1;        
-        }
-
-      puts(delegation_id);
-
-      return 0;
-    }  
-  else if (method == HTPROXY_DESTROY)
-    {
-      if (verbose) 
-        {
-          fprintf(stderr, "Using SOAP proxy destroy protocol\n");
-          fprintf(stderr, "Delegation-ID: %s\n", delegation_id);
-        }
-
-      soap_init(&soap_put);
-  
-      if (verbose) fprintf(stderr, "Send destroy to service:\n");
-
-      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__destroy(&soap_put, argv[optind],
-                             "http://www.gridsite.org/namespaces/delegation-1",
-                             delegation_id, 
-                             &destroyResponse);
-      if (soap_put.error)
-        {
-          soap_print_fault(&soap_put, stderr);
-          return 1;        
-        }
-
-      return 0;
-    }  
-  else if ((method == HTPROXY_TIME) || (method == HTPROXY_UNIXTIME))
-    {
-      if (verbose) 
-        {
-          fprintf(stderr, "Using SOAP proxy get expiration time protocol\n");
-          fprintf(stderr, "Delegation-ID: %s\n", delegation_id);
-        }
-
-      soap_init(&soap_put);
-  
-      if (verbose) fprintf(stderr, "Send get time to service:\n");
-
-      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__getTerminationTime(&soap_put, argv[optind],
-                             "http://www.gridsite.org/namespaces/delegation-1",
-                             delegation_id, 
-                             &getTerminationTimeResponse);
-      if (soap_put.error)
-        {
-          soap_print_fault(&soap_put, stderr);
-          return 1;        
-        }
-
-
-      if (method == HTPROXY_UNIXTIME)
-       printf("%ld\n", getTerminationTimeResponse._getTerminationTimeReturn);
-      else
-        {
-          finish_tm = 
-           localtime(&(getTerminationTimeResponse._getTerminationTimeReturn));
-
-          strftime(timestr, sizeof(timestr),
-                       "%a %b %e %H:%M:%S %Z %Y\n", finish_tm);
-                       
-          fputs(timestr, stdout);
-        }
-        
-      return 0;
-    }  
-  else if (method == HTPROXY_MAKE)
-    {
-      if (GRSTx509CreateProxyRequest(&reqtxt, &keytxt, NULL) != GRST_RET_OK)
-        {
-          fprintf(stderr, "Failed to create internal proxy cert request\n");
-          return 1;
-        }
-      
-      if (GRSTx509MakeProxyCert(&proxychain, NULL, reqtxt, cert, key, minutes)
-            != GRST_RET_OK)
-        {
-          fprintf(stderr, "Failed to sign internal proxy cert request\n");
-          return 2;
-        }
-        
-      if (GRSTx509StringToChain(&x509_certstack, proxychain) != GRST_RET_OK)
-        {
-          fprintf(stderr, "Failed to convert internal proxy chain\n");
-          return 3;
-        }
-                                
-      if (x509_cert = sk_X509_value(x509_certstack, 0))
-        {
-          certmem = BIO_new(BIO_s_mem());
-          if (PEM_write_bio_X509(certmem, x509_cert) == 1)
-            {
-              ptrlen = BIO_get_mem_data(certmem, &ptr);
-              fwrite(ptr, 1, ptrlen, stdout);
-            }
-                                                          
-          BIO_free(certmem);
-        }
-                                                                    
-      fputs(keytxt, stdout);
-
-      for (i=1; i <= sk_X509_num(x509_certstack) - 1; ++i)
-        /* loop through the proxy chain starting at 2nd most recent proxy */
-         {
-           if (x509_cert = sk_X509_value(x509_certstack, i))
-             {
-               certmem = BIO_new(BIO_s_mem());
-               if (PEM_write_bio_X509(certmem, x509_cert) == 1)
-                 {
-                   ptrlen = BIO_get_mem_data(certmem, &ptr);
-                   fwrite(ptr, 1, ptrlen, stdout);
-                 }
-
-               BIO_free(certmem);
-             }
-         }
-
-      sk_X509_free(x509_certstack);
-      
-      return 0;
-    }
-  else if (method == HTPROXY_INFO)
-    {
-      if (cert != NULL) 
-        {
-          if (verbose) fprintf(stderr, "Getting proxy info from %s\n", cert);
-    
-          ifp = fopen(cert, "r");
-          if (ifp == NULL)
-            {
-              fprintf(stderr, "Failed to open proxy file\n");
-              return 2;              
-            }
-        }
-      else  
-        {
-          if (verbose) fprintf(stderr, "Getting proxy info from stdin\n");
-          ifp = stdin;
-        }
-      
-      ptrlen = 4096;
-      ptr = malloc(ptrlen);
-      i = 0;
-      
-      while ((c = fgetc(ifp)) != EOF)
-           {
-             ptr[i] = c;
-             ++i;
-             
-             if (i >= ptrlen) 
-               {
-                 ptrlen += 4096;
-                 ptr = realloc(ptr, ptrlen);
-               }
-           }
-           
-      ptr[i] = '\0';
-      if (cert != NULL) fclose(ifp);
-      
-      if ((GRSTx509StringToChain(&x509_certstack, ptr) != GRST_RET_OK) ||
-          (x509_certstack == NULL))
-        {
-          fprintf(stderr, "Failed to parse proxy file for certificate chain\n");
-          free(ptr);
-          return 2;
-        }
-        
-// fprintf(stderr, "%s\n", ptr);
-
-      free(ptr);
-
-      if (verbose) fprintf(stderr, "Parsing certificate chain\n");
-      
-      ret = GRSTx509ChainLoadCheck(&grst_chain, x509_certstack, NULL, capath);
-      
-      if ((ret != GRST_RET_OK) || 
-          (grst_chain == NULL) || (grst_chain->firstcert == NULL))
-        {
-          fprintf(stderr, "Failed parsing certificate chain\n");
-          return 3;
-        }
-      
-      grst_cert = grst_chain->firstcert;
-
-// printf("%lu\n", grst_cert);
-// printf("%lu\n", grst_cert->type);
-// printf("%lu\n", grst_cert->dn);
-// printf("%lu\n", grst_cert->next);
-       
-// printf("before for\n");      
-      for (i=0; 
-      grst_cert != NULL; 
-      grst_cert = grst_cert->next)
-         {
-// printf("inside for %i\n", grst_cert == NULL);         
-
-           printf("%d %d %s\n", i, grst_cert->type, grst_cert->dn);
-           printf("%lu\n", grst_cert->next);
-
-           grst_cert = grst_cert->next;
-           ++i;             
-         }
-      
-
-      GRSTx509ChainFree(grst_chain);
-    }
-  /* weirdness */
-}
-
diff --git a/org.gridsite.core/src/make-gridsite-spec b/org.gridsite.core/src/make-gridsite-spec
deleted file mode 100755 (executable)
index 11aed3b..0000000
+++ /dev/null
@@ -1,297 +0,0 @@
-#!/bin/sh
-
-# test to see if fuse-devel (or fuse.h and libfuse) is installed
-#
-cat <<EOF >fuse-test.c
-#include <fuse.h>
-int main() { struct fuse_context ctx;
-return fuse_main(0, (char **) 0, (struct fuse_operations *) 0); }
-EOF
-make fuse-test
-if [ $? = 0 ] ; then have_fuse=1 ; fi
-
-# test to see if gsoap-devel (or stdsoap2.h and libgsoapssl) is installed
-#
-cat <<EOF >gsoap-test.c
-#include <stdsoap2.h>
-#ifdef SOAP_BEGIN  
-main() { return; }
-#endif
-EOF
-make GSOAPDIR=$GSOAPDIR gsoap-test
-if [ $? = 0 ] ; then have_gsoap=1 ; fi
-
-cat <<EOF >gridsite.spec
-#
-# Autogenerated by make-gridsite-spec 
-#
-# You should modify  make-gridsite-spec  and rebuild RPM with  make rpm
-# rather than editing this spec file
-#
-Name: gridsite
-Version: ${PATCH_VERSION:-1.x.x}
-# This next piece of .spec/sed magic puts the build OS version in the release
-Release: 1%(sed 's/^\([A-Z]\)[^ ]* \([A-Z]\)[^0-9]*\([0-9][^ ]*\).*/\1\2\3/g' /etc/redhat-release | sed 's/[^A-Z,a-z,0-9]//g')
-Summary: GridSite
-License: Modified BSD
-Group: System Environment/Daemons
-Source: %{name}-%{version}.src.tar.gz
-Prefix: ${MYPREFIX:-/usr}
-URL: http://www.gridsite.org/
-Vendor: GridPP
-Requires: libxml2
-#Buildrequires: libxml2-devel,curl-ssl-devel,httpd-devel
-Packager: Andrew McNab <Andrew.McNab@manchester.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 http://www.gridsite.org/ for details.
-
-%package shared
-Group: Development/Libraries
-Summary: GridSite shared library and core documentation
-
-%description shared
-GridSite shared library and core documentation
-
-See http://www.gridsite.org/ for details.
-
-%package devel
-Group: Development/Libraries
-Summary: GridSite .a libraries and .h headers
-
-%description devel
-GridSite development libraries
-
-See http://www.gridsite.org/ for details.
-
-%package apache
-Group: System Environment/Daemons
-Summary: GridSite mod_gridsite module for Apache httpd
-Requires: gridsite-shared
-
-%description apache
-GridSite Apache module and CGI binaries
-
-See http://www.gridsite.org/ for details.
-
-%package commands
-Group: Applications/Internet
-Summary: HTTP(S) read/write client and other GridSite commands
-Requires: curl, gridsite-shared
-
-%description commands
-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.
-
-See http://www.gridsite.org/ for details.
-
-%package gsexec
-Group: Applications/Internet
-Summary: gsexec binary for the Apache HTTP server
-
-%description gsexec
-This package includes the /usr/sbin/gsexec binary which can be installed
-to allow the Apache HTTP server to run CGI programs (and any programs
-executed by SSI pages) as a user other than the 'apache' user. gsexec
-is a drop-in replacement for suexec, with extended functionality for use
-with GridSite and Grid Security credentials.
-
-See http://www.gridsite.org/ for details.
-
-%prep
-
-%setup
-
-%build
-cd src
-make prefix=\$RPM_BUILD_ROOT/%{prefix} \
- GSOAPDIR=\$GSOAPDIR OPENSSL_FLAGS=\$OPENSSL_FLAGS \
- OPENSSL_LIBS=\$OPENSSL_LIBS FLAVOR_EXT=\$FLAVOR_EXT
-
-EOF
-
-if [ $have_fuse ] ; then
-cat <<EOF >>gridsite.spec
-make prefix=\$RPM_BUILD_ROOT/%{prefix} \
- GSOAPDIR=\$GSOAPDIR OPENSSL_FLAGS=\$OPENSSL_FLAGS \
- OPENSSL_LIBS=\$OPENSSL_LIBS FLAVOR_EXT=\$FLAVOR_EXT \
- slashgrid
-
-EOF
-fi
-
-if [ $have_gsoap ] ; then
-cat <<EOF >>gridsite.spec
-make prefix=\$RPM_BUILD_ROOT/%{prefix} \
- GSOAPDIR=\$GSOAPDIR OPENSSL_FLAGS=\$OPENSSL_FLAGS \
- OPENSSL_LIBS=\$OPENSSL_LIBS FLAVOR_EXT=\$FLAVOR_EXT \
- gridsite-delegation.cgi htproxyput
-
-EOF
-fi
-
-cat <<EOF >>gridsite.spec
-
-%install
-cd src
-make install prefix=\$RPM_BUILD_ROOT/%{prefix} \
-GSOAPDIR=\$GSOAPDIR OPENSSL_FLAGS=\$OPENSSL_FLAGS \
-OPENSSL_LIBS=\$OPENSSL_LIBS FLAVOR_EXT=\$FLAVOR_EXT
-EOF
-
-if [ $have_fuse ] ; then
-
-cat <<EOF >>gridsite.spec
-
-mkdir -p \$RPM_BUILD_ROOT/etc/rc.d/init.d
-make install-slashgrid prefix=\$RPM_BUILD_ROOT/%{prefix} \
-  GSOAPDIR=\$GSOAPDIR OPENSSL_FLAGS=\$OPENSSL_FLAGS \
-  OPENSSL_LIBS=\$OPENSSL_LIBS FLAVOR_EXT=\$FLAVOR_EXT
-EOF
-fi
-
-if [ $have_gsoap ] ; then
-
-cat <<EOF >>gridsite.spec
-
-make install-ws prefix=\$RPM_BUILD_ROOT/%{prefix} \
-  GSOAPDIR=$GSOAPDIR OPENSSL_FLAGS=\$OPENSSL_FLAGS \
-  OPENSSL_LIBS=\$OPENSSL_LIBS FLAVOR_EXT=\$FLAVOR_EXT
-EOF
-fi
-
-cat <<EOF >>gridsite.spec
-
-%post shared
-if [ "\$UID" = "0" ] ; then
- /sbin/ldconfig
-fi
-
-%postun
-if [ "\$UID" = "0" ] ; then
- /sbin/ldconfig
-fi
-
-%files shared
-%attr(-, root, root) %{prefix}/lib/libgridsite.so.%{version}
-%attr(-, root, root) %{prefix}/lib/libgridsite.so
-%attr(-, root, root) %{prefix}/lib/libgridsite_globus.so.%{version}
-%attr(-, root, root) %{prefix}/lib/libgridsite_globus.so
-%attr(-, root, root) %{prefix}/share/doc/gridsite-${MINOR_VERSION:-1.x}
-
-%files devel
-%attr(-, root, root) %{prefix}/include/gridsite.h
-%attr(-, root, root) %{prefix}/include/gridsite-gacl.h
-%attr(-, root, root) %{prefix}/lib/libgridsite.a
-%attr(-, root, root) %{prefix}/lib/libgridsite_globus.a
-
-%files apache
-%attr(-, root, root) %{prefix}/share/man/man8/mod_gridsite.8.gz
-%attr(-, root, root) %{prefix}/lib/httpd/modules/mod_gridsite.so
-%attr(-, root, root) %{prefix}/sbin/real-gridsite-admin.cgi
-%attr(-, root, root) %{prefix}/sbin/gridsite-copy.cgi
-
-%files commands
-%attr(-, root, root) %{prefix}/bin/htcp
-%attr(-, root, root) %{prefix}/bin/htls
-%attr(-, root, root) %{prefix}/bin/htll
-%attr(-, root, root) %{prefix}/bin/htrm
-%attr(-, root, root) %{prefix}/bin/htmkdir
-%attr(-, root, root) %{prefix}/bin/htmv
-%attr(-, root, root) %{prefix}/bin/htping
-%attr(-, root, root) %{prefix}/bin/htfind
-%attr(-, root, root) %{prefix}/bin/urlencode
-%attr(-, root, root) %{prefix}/bin/findproxyfile
-%attr(-, root, root) %{prefix}/share/man/man1/htcp.1.gz
-%attr(-, root, root) %{prefix}/share/man/man1/htrm.1.gz
-%attr(-, root, root) %{prefix}/share/man/man1/htls.1.gz
-%attr(-, root, root) %{prefix}/share/man/man1/htll.1.gz
-%attr(-, root, root) %{prefix}/share/man/man1/htmkdir.1.gz
-%attr(-, root, root) %{prefix}/share/man/man1/htmv.1.gz
-%attr(-, root, root) %{prefix}/share/man/man1/htping.1.gz
-%attr(-, root, root) %{prefix}/share/man/man1/htfind.1.gz
-%attr(-, root, root) %{prefix}/share/man/man1/urlencode.1.gz
-%attr(-, root, root) %{prefix}/share/man/man1/findproxyfile.1.gz
-
-%files gsexec
-%attr(4510, root, apache) %{prefix}/sbin/gsexec
-%attr(-, root, root) %{prefix}/share/man/man8/gsexec.8.gz
-EOF
-
-if [ $have_fuse ] ; then
-
-cat <<EOF >>gridsite.spec
-%package slashgrid
-Group: Applications/Internet
-Summary: slashgrid daemon
-Requires: curl,fuse,fuse-libs
-
-%description slashgrid
-SlashGrid daemon
-
-%post slashgrid
-mkdir -p /grid
-
-%preun slashgrid
-/sbin/service slashgrid stop ; :
-
-%files slashgrid
-%attr(0744, root, root) %{prefix}/sbin/slashgrid
-%attr(0744, root, root) /etc/rc.d/init.d/slashgrid
-%attr(0700, root, root) /var/spool/slashgrid
-EOF
-
-fi
-
-if [ $have_gsoap ] ; then
-
-cat <<EOF >>gridsite.spec
-%package services
-Group: Applications/Internet
-Summary: GridSite WS gridsite-delegation.cgi
-
-%description services
-GridSite WS delegation service, gridsite-delegation.cgi
-
-%files services
-%attr(-, root, root) %{prefix}/sbin/gridsite-delegation.cgi
-%attr(-, root, root) %{prefix}/share/man/man8/gridsite-delegation.8.gz
-%attr(-, root, root) %{prefix}/share/doc/gridsite-${MINOR_VERSION:-1.x}/delegation-1.1.0.wsdl
-%attr(-, root, root) %{prefix}/share/doc/gridsite-${MINOR_VERSION:-1.x}/gridsite-delegation.8
-
-%package service-clients
-Group: Applications/Internet
-Summary: GridSite WS htproxyput
-Requires: curl, gridsite-shared
-
-%description service-clients
-GridSite WS delegation client, htproxyput
-
-See http://www.gridsite.org/ for details.
-
-%files service-clients
-%attr(-, root, root) %{prefix}/bin/htproxyput
-%attr(-, root, root) %{prefix}/bin/htproxydestroy
-%attr(-, root, root) %{prefix}/bin/htproxytime
-%attr(-, root, root) %{prefix}/bin/htproxyunixtime
-%attr(-, root, root) %{prefix}/bin/htproxyrenew
-%attr(-, root, root) %{prefix}/share/man/man1/htproxyput.1.gz
-%attr(-, root, root) %{prefix}/share/man/man1/htproxydestroy.1.gz
-%attr(-, root, root) %{prefix}/share/man/man1/htproxytime.1.gz
-%attr(-, root, root) %{prefix}/share/man/man1/htproxyunixtime.1.gz
-%attr(-, root, root) %{prefix}/share/man/man1/htproxyrenew.1.gz
-%attr(-, root, root) %{prefix}/share/doc/gridsite-${MINOR_VERSION:-1.x}/htproxyput.1
-%attr(-, root, root) %{prefix}/share/doc/gridsite-${MINOR_VERSION:-1.x}/htproxydestroy.1
-%attr(-, root, root) %{prefix}/share/doc/gridsite-${MINOR_VERSION:-1.x}/htproxytime.1
-%attr(-, root, root) %{prefix}/share/doc/gridsite-${MINOR_VERSION:-1.x}/htproxyunixtime.1
-%attr(-, root, root) %{prefix}/share/doc/gridsite-${MINOR_VERSION:-1.x}/htproxyrenew.1
-EOF
-
-fi
-
diff --git a/org.gridsite.core/src/mod_gridsite.c b/org.gridsite.core/src/mod_gridsite.c
deleted file mode 100644 (file)
index 1927a0a..0000000
+++ /dev/null
@@ -1,3432 +0,0 @@
-/*
-   Copyright (c) 2003-6, Andrew McNab, Shiv Kaushal, Joseph Dada,
-   and Yibiao Li, 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 includes code from dav_parse_range() from Apache mod_dav.c,
-   and associated code contributed by  David O Callaghan
-   
-   Copyright 2000-2005 The Apache Software Foundation or its licensors, as
-   applicable.
-   
-   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/       *
- *------------------------------------------------------------------*/
-
-#ifndef VERSION
-#define VERSION "x.x.x"
-#endif
-
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
-#include <apr_strings.h>
-#include <apr_tables.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 <unixd.h>
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>              
-#include <netdb.h>
-#include <malloc.h>
-#include <stdlib.h>
-#include <string.h>
-#include <dirent.h>
-#include <ctype.h>
-#include <time.h>
-
-#include <sys/select.h> 
-#include <sys/socket.h> 
-#include <netinet/in.h> 
-#include <arpa/inet.h> 
-
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-
-#include "mod_ssl-private.h"
-
-#include "gridsite.h"
-
-#ifndef UNSET
-#define UNSET -1
-#endif
-
-#define GRST_SESSIONS_DIR "/var/www/sessions"
-
-module AP_MODULE_DECLARE_DATA gridsite_module;
-
-#define GRST_SITECAST_GROUPS 32
-
-struct sitecast_group
-   { int socket; int quad1; int quad2; int quad3; int quad4; int port; };
-
-#define GRST_SITECAST_ALIASES 32
-   
-struct sitecast_alias
-   { const char *sitecast_url; const char *scheme; int port; 
-     const char *local_path; const char *local_hostname; };
-
-/* Globals, defined by main server directives in httpd.conf  
-   These are assigned default values in create_gridsite_srv_config() */
-
-int gridhttpport = 0; /* set by create_gridsite_srv_config, used as flag */
-char                    *sessionsdir = NULL;
-char                   *sitecastdnlists = NULL;
-char                   *ocspmodes = NULL;
-struct sitecast_group  sitecastgroups[GRST_SITECAST_GROUPS+1];
-struct sitecast_alias  sitecastaliases[GRST_SITECAST_ALIASES];
-
-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                 gridhttp;
-   char                        *aclformat;
-   char                        *execmethod;
-   char                        *delegationuri;
-   ap_unix_identity_t  execugid;
-   apr_fileperms_t     diskmode;
-}  mod_gridsite_dir_cfg; /* per-directory config choices */
-
-
-/*
- *   parse_content_range() is loosely 
- *   based on modules/dav/main/mod_dav.c from Apache
- */
-
-int parse_content_range(request_rec *r, apr_off_t *range_start, 
-                        apr_off_t *range_end, apr_off_t *range_length)
-{
-// this all needs verifying to be ok for large (>2GB, >4GB) files 
-
-    const char *range_c;
-    char *range;
-    char *dash;
-    char *slash;
-
-    range_c = apr_table_get(r->headers_in, "content-range");
-    if (range_c == NULL) return 0;
-    
-    range = apr_pstrdup(r->pool, range_c);
-
-    if ((strncasecmp(range, "bytes ", 6) != 0) ||
-        ((dash = ap_strchr(range, '-')) == NULL) ||
-        ((slash = ap_strchr(range, '/')) == NULL)) 
-      {        
-        return 0; /* malformed header. ignore it (per S14.16 of RFC2616) */
-      }
-
-    *dash = *slash = '\0';
-    
-    // Check for GridSite-specific Content-Range: bytes *-*/LENGTH form
-    
-    if ((range[6] == '*') && (dash[1] == '*'))
-      {
-        if (slash[1] == '*') return 0; /* invalid truncation length */
-        
-        *range_length = apr_atoi64(&slash[1]);
-        *range_start  = 0;
-        *range_end    = 0;
-        
-        return 1; /* a valid (truncation) length */
-      }          
-    
-    *range_length = 0;
-    *range_start  = apr_atoi64(&range[6]);
-    *range_end    = apr_atoi64(&dash[1]);
-
-    if ((*range_end < *range_start) || 
-        ((slash[1] != '*') && (apr_atoi64(&slash[1]) <= *range_end)))
-            return 0; /* ignore invalid ranges */
-
-    /* we now have a valid range */
-    return 1;
-}
-
-char *make_admin_footer(request_rec *r, mod_gridsite_dir_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>\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><small>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&amp;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, "</small>", NULL);
-      }
-
-    out = apr_pstrcat(r->pool, out, "<hr><small>", 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&amp;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&amp;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;
-}
-
-void delegation_header(request_rec *r, mod_gridsite_dir_cfg *conf){
-
-  apr_table_add(r->headers_out,
-                apr_pstrdup(r->pool, "Proxy-Delegation-Service"),
-                apr_psprintf(r->pool,"https://%s%s", r->hostname, conf->delegationuri));
-  return;
-
-}
-
-int html_format(request_rec *r, mod_gridsite_dir_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;
-
-
-    /* Put in Delegation service header if required */
-    if (conf->delegationuri) delegation_header(r, conf);
-
-    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 = apr_palloc(r->pool, 
-                       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';
-       }
-
-    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 = apr_palloc(r->pool, 
-                       strlen(r->filename) + strlen(conf->footfile) + 1);
-    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';
-       }
-
-    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_dir_cfg *conf)
-/* 
-    output HTML directory listing, with level of formatting controlled
-    by GridSiteHtmlFormat/conf->format
-*/
-{
-    int    i, fd, n, nn;
-    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;
-
-    /* Put in Delegation service header if required */
-    if (conf->delegationuri) delegation_header(r, conf);
-
-    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 = apr_palloc(r->pool, 
-                       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';
-           }
-            
-        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);
-      
-    nn = scandir(r->filename, &namelist, 0, versionsort);
-    for (n=0; n < nn; ++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 = apr_palloc(r->pool, 
-                       strlen(r->filename) + strlen(conf->footfile) + 1);
-        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';
-           }
-            
-        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_gridhttp(request_rec *r, mod_gridsite_dir_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;
-    
-    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
-               "Generated GridHTTP passcode %016llx", gridauthcookie);
-
-    filetemplate = apr_psprintf(r->pool, "%s/passcode-%016llxXXXXXX", 
-     ap_server_root_relative(r->pool,
-     sessionsdir),
-     gridauthcookie);
-
-    if (apr_file_mktemp(&fp, 
-                        filetemplate, 
-                        APR_CREATE | APR_WRITE | APR_EXCL,
-                        r->pool)
-                      != APR_SUCCESS) return HTTP_INTERNAL_SERVER_ERROR;
-                      
-    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
-               "Created passcode file %s", filetemplate);
-
-    expires_time = apr_time_now() + apr_time_from_sec(300);
-    /* passcode cookies are valid for only 5 mins! */
-
-    apr_file_printf(fp,
-              "expires=%lu\ndomain=%s\npath=%s\nonetime=yes\nmethod=%s\n",
-              (time_t) apr_time_sec(expires_time),
-              r->hostname, r->uri, r->method);
-    /* above variables are evaluated in order and method= MUST be last! */
-
-    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, 
-                  "GRIDHTTP_PASSCODE=%s; "
-                  "expires=%s; "
-                  "domain=%s; "
-                  "path=%s",
-                  cookievalue, expires_str, r->hostname, r->uri));
-
-    if (gridhttpport != DEFAULT_HTTP_PORT)
-         httpurl = apr_psprintf(r->pool, "http://%s:%d%s", r->hostname,
-                                gridhttpport, ap_escape_uri(r->pool, r->uri));
-    else 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_dir_cfg *conf)
-{
-  char        buf[2048], *filename, *dirname, *basename;
-  const char  *p;
-  size_t      block_length, length_sent;
-  int         retcode, stat_ret;
-  apr_file_t *fp;
-  struct stat statbuf;
-  int       has_range = 0, is_done = 0;
-  apr_off_t range_start, range_end, range_length, length_to_send, length = 0;
-  
-  /* ***  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, 
-                       conf->diskmode 
-                       | APR_UEXECUTE | APR_GEXECUTE | APR_WEXECUTE, 
-                       r->pool) != 0) return HTTP_INTERNAL_SERVER_ERROR;
-
-      /* we force the permissions, rather than accept any existing ones */
-
-      apr_file_perms_set(r->filename, conf->diskmode
-                             | APR_UEXECUTE | APR_GEXECUTE | APR_WEXECUTE);
-                             
-      ap_set_content_length(r, 0);
-      ap_set_content_type(r, "text/html");
-      return OK;
-    }
-
-  /* ***  otherwise assume trying to create a regular file *** */
-
-  stat_ret = stat(r->filename, &statbuf);
-
-  /* find if a range is specified */
-
-  has_range = parse_content_range(r, &range_start, &range_end, &range_length);
-
-  if (has_range)
-    {
-       if ((range_start == 0) && (range_end == 0)) /* truncate? */
-         {
-           if (stat_ret != 0) return HTTP_NOT_FOUND;
-          
-           if (truncate(r->filename, range_length) != 0)
-                return HTTP_INTERNAL_SERVER_ERROR;
-           else return OK;
-         }
-    
-       filename = r->filename;
-
-       if (apr_file_open(&fp, filename, APR_WRITE | APR_CREATE | APR_BUFFERED,
-            conf->diskmode, r->pool) != 0) return HTTP_INTERNAL_SERVER_ERROR;
-    }
-  else /* use temporary file if not a partial transfer */ 
-    {
-      dirname = apr_pstrdup(r->pool, r->filename);
-      basename = rindex(dirname, '/');
-      if (basename == NULL) return HTTP_INTERNAL_SERVER_ERROR;
-        
-      *basename = '\0';
-      ++basename;
-
-      filename = apr_psprintf(r->pool,
-                             "%s/.grsttmp-%s-XXXXXX", dirname, basename);
-
-      if (apr_file_mktemp(&fp, filename,
-                    APR_CREATE | APR_WRITE | APR_BUFFERED | APR_EXCL, r->pool)
-                    != APR_SUCCESS) return HTTP_INTERNAL_SERVER_ERROR;
-/*
-      p = apr_table_get(r->headers_in, "Content-Length");
-      if (p != NULL) 
-        {
-          length = (apr_off_t) atol(p);
-          if (length > 16384)
-            {
-              if (apr_file_seek(fp, APR_SET, &length) == 0)
-                {
-                  block_length = 1;
-                  apr_file_write(fp, "0", &block_length);
-                }
-
-              apr_file_seek(fp, APR_SET, 0);
-            }
-        }
-*/
-    }
-
-  /* we force the permissions, rather than accept any existing ones */
-
-  apr_file_perms_set(filename, conf->diskmode);
-
-  if (has_range)
-    {
-      if (apr_file_seek(fp, APR_SET, &range_start) != 0) 
-        {
-          retcode = HTTP_INTERNAL_SERVER_ERROR;
-          return retcode;
-        }
-
-      length_to_send = range_end - range_start + 1;
-    }
-
-  retcode = ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK);
-  if (retcode == OK)
-    {
-      if (has_range) length_sent = 0;
-
-      if (ap_should_client_block(r))
-          while ((block_length = ap_get_client_block(r, buf, sizeof(buf))) > 0)
-            {
-              if (has_range && (length_sent + block_length > length_to_send))
-                {
-                  block_length = length_to_send - length_sent;
-                  is_done = 1;
-                }
-
-              if (apr_file_write(fp, buf, &block_length) != 0) 
-                {
-                  retcode = HTTP_INTERNAL_SERVER_ERROR;
-                  break;
-                }
-
-              if (has_range)
-                {
-                  if (is_done) break;
-                  else length_sent += block_length;
-                }
-            }
-      ap_set_content_length(r, 0);
-      ap_set_content_type(r, "text/html");
-    }
-
-  if ((apr_file_close(fp) != 0) || (retcode == HTTP_INTERNAL_SERVER_ERROR))
-    {
-      if (strcmp(filename, r->filename) != 0) remove(filename);
-      return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-  if ((strcmp(filename, r->filename) != 0) &&
-      (apr_file_rename(filename, r->filename, r->pool) != 0))
-      return HTTP_FORBIDDEN; /* best guess as to the problem ... */
-
-  if ((retcode == OK) && (stat_ret != 0))
-    {
-      retcode = HTTP_CREATED;
-      ap_custom_response(r, HTTP_CREATED, "");
-    }
-
-  return retcode;
-}
-
-int http_delete_method(request_rec *r, mod_gridsite_dir_cfg *conf)
-{
-  ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
-               "Try remove(%s)", r->filename);
-
-  if (remove(r->filename) != 0) return HTTP_FORBIDDEN;
-       
-  ap_set_content_length(r, 0);
-  ap_set_content_type(r, "text/html");
-
-  return OK;
-}
-
-int http_move_method(request_rec *r, mod_gridsite_dir_cfg *conf)
-{
-  char *destination_translated = NULL;
-  
-  if (r->notes != NULL) destination_translated = 
-            (char *) apr_table_get(r->notes, "GRST_DESTINATION_TRANSLATED");
-
-  if (destination_translated == NULL) return HTTP_BAD_REQUEST;
-  
-  if (strcmp(r->filename, destination_translated) == 0)
-                                      return HTTP_FORBIDDEN;
-  
-  if (apr_file_rename(r->filename, destination_translated, r->pool) != 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_dir_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_dir_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 *upgradeheader, *upgradespaced, *p;
-    const char *https_env;
-
-    /* *** is this a write method or GridHTTP HTTPS->HTTP redirection? 
-           only possible if  GridSiteAuth on *** */
-    
-    if (conf->auth)
-      {
-        if ((conf->gridhttp) &&
-            ((r->method_number == M_GET) || 
-             ((r->method_number == M_PUT) && 
-              (strstr(conf->methods, " PUT ") != NULL))) &&
-            ((upgradeheader = (char *) apr_table_get(r->headers_in,
-                                                     "Upgrade")) != NULL) &&
-            ((https_env=apr_table_get(r->subprocess_env,"HTTPS")) != NULL) &&
-            (strcasecmp(https_env, "on") == 0))
-          {
-            upgradespaced = apr_psprintf(r->pool, " %s ", upgradeheader);
-
-            for (p=upgradespaced; *p != '\0'; ++p)
-             if ((*p == ',') || (*p == '\t')) *p = ' ';
-
-// TODO: what if we're pointing at a CGI or some dynamic content???
-            if (strstr(upgradespaced, " GridHTTP/1.0 ") != NULL)
-                                            return http_gridhttp(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);
-
-        if ((r->method_number == M_MOVE) &&
-            (conf->methods != NULL) &&
-            (strstr(conf->methods, " MOVE ") != NULL)) 
-                                           return http_move_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_dir_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_dir_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_srv_config(apr_pool_t *p, server_rec *s)
-{
-    int i;
-
-    /* only run once (in base server) */
-    if (!(s->is_virtual) && (gridhttpport == 0))
-      {
-        gridhttpport = GRST_HTTP_PORT;
-      
-        sessionsdir = apr_pstrdup(p, GRST_SESSIONS_DIR);
-                                      /* GridSiteSessionsDir dir-path   */
-
-        sitecastdnlists = NULL;
-
-        sitecastgroups[0].quad1 = 0;
-        sitecastgroups[0].quad2 = 0;
-        sitecastgroups[0].quad3 = 0;
-        sitecastgroups[0].quad4 = 0;
-        sitecastgroups[0].port  = GRST_HTCP_PORT;
-                                      /* GridSiteCastUniPort udp-port */
-
-        for (i=1; i <= GRST_SITECAST_GROUPS; ++i)
-           {
-             sitecastgroups[i].port = 0; /* GridSiteCastGroup mcast-list */
-           }
-
-        for (i=1; i <= GRST_SITECAST_ALIASES; ++i)
-           {
-             sitecastaliases[i].sitecast_url   = NULL;
-             sitecastaliases[i].port           = 0;
-             sitecastaliases[i].scheme         = NULL;
-             sitecastaliases[i].local_path     = NULL;
-             sitecastaliases[i].local_hostname = NULL;
-           }                              /* GridSiteCastAlias url path */
-      }
-
-    return NULL;
-}
-
-static void *create_gridsite_dir_config(apr_pool_t *p, char *path)
-{
-    mod_gridsite_dir_cfg *conf = apr_palloc(p, sizeof(*conf));
-
-    if (path == NULL) /* set up document root 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->gridhttp      = 0;     /* GridSiteGridHTTP      on/off       */
-       conf->aclformat     = apr_pstrdup(p, "GACL");
-                                     /* GridSiteACLFormat     gacl/xacml   */
-       conf->delegationuri = NULL;  /* GridSiteDelegationURI URI-value    */
-       conf->execmethod    = NULL;
-               /* GridSiteExecMethod  nosetuid/suexec/X509DN/directory */
-               
-        conf->execugid.uid     = 0;    /* GridSiteUserGroup User Group */
-        conf->execugid.gid     = 0;    /* ditto */
-        conf->execugid.userdir = 0;    /* ditto */
-        
-        conf->diskmode = APR_UREAD | APR_UWRITE; 
-              /* GridSiteDiskMode group-mode world-mode
-                 GroupNone | GroupRead | GroupWrite   WorldNone | WorldRead */
-      }
-    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->gridhttp      = UNSET; /* GridSiteGridHTTP      on/off       */
-       conf->aclformat     = NULL;  /* GridSiteACLFormat     gacl/xacml   */
-       conf->delegationuri = NULL;  /* GridSiteDelegationURI URI-value    */
-       conf->execmethod    = NULL;  /* GridSiteExecMethod */
-        conf->execugid.uid     = UNSET;        /* GridSiteUserGroup User Group */
-        conf->execugid.gid     = UNSET; /* ditto */
-        conf->execugid.userdir = UNSET; /* ditto */
-        conf->diskmode     = UNSET; /* GridSiteDiskMode group world */
-      }
-
-    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_dir_cfg *conf, *server, *direct;
-
-    server = (mod_gridsite_dir_cfg *) vserver;
-    direct = (mod_gridsite_dir_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->gridhttp != UNSET) conf->gridhttp = direct->gridhttp;
-    else                           conf->gridhttp = server->gridhttp;
-        
-    if (direct->aclformat != NULL) conf->aclformat = direct->aclformat;
-    else                           conf->aclformat = server->aclformat;
-
-    if (direct->delegationuri != NULL) conf->delegationuri = direct->delegationuri;
-    else                               conf->delegationuri = server->delegationuri;
-
-    if (direct->execmethod != NULL) conf->execmethod = direct->execmethod;
-    else                            conf->execmethod = server->execmethod;
-
-    if (direct->execugid.uid != UNSET)
-      { conf->execugid.uid = direct->execugid.uid;
-        conf->execugid.gid = direct->execugid.gid;
-        conf->execugid.userdir = direct->execugid.userdir; }
-    else
-      { conf->execugid.uid = server->execugid.uid;
-        conf->execugid.gid = server->execugid.gid;
-        conf->execugid.userdir = server->execugid.userdir; }
-
-    if (direct->diskmode != UNSET) conf->diskmode = direct->diskmode;
-    else                            conf->diskmode = server->diskmode;
-        
-    return conf;
-}
-
-static const char *mod_gridsite_take1_cmds(cmd_parms *a, void *cfg,
-                                           const char *parm)
-{
-    int   n, i;
-    char *p;
-  
-    if (strcasecmp(a->cmd->name, "GridSiteSessionsDir") == 0)
-    {
-      if (a->server->is_virtual)
-       return "GridSiteSessionsDir cannot be used inside a virtual server";
-    
-      sessionsdir = apr_pstrdup(a->pool, parm);
-    }
-/* GridSiteOnetimesDir is deprecated in favour of GridSiteSessionsDir */
-    else if (strcasecmp(a->cmd->name, "GridSiteOnetimesDir") == 0)
-    {
-      if (a->server->is_virtual)
-       return "GridSiteOnetimesDir cannot be used inside a virtual server";
-    
-      sessionsdir = apr_pstrdup(a->pool, parm);
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteGridHTTPport") == 0)
-    {
-      gridhttpport = atoi(parm);
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteCastDNlists") == 0)
-    {
-      if (a->server->is_virtual)
-       return "GridSiteDNlists cannot be used inside a virtual server";
-    
-      sitecastdnlists = apr_pstrdup(a->pool, parm);
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteCastUniPort") == 0)
-    {
-      if (a->server->is_virtual)
-       return "GridSiteCastUniPort cannot be used inside a virtual server";
-
-      if (sscanf(parm, "%d", &(sitecastgroups[0].port)) != 1)
-        return "Failed parsing GridSiteCastUniPort numeric value";
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteCastGroup") == 0)
-    {
-      if (a->server->is_virtual)
-       return "GridSiteCastGroup cannot be used inside a virtual server";
-
-      for (i=1; i <= GRST_SITECAST_GROUPS; ++i)
-         {
-           if (sitecastgroups[i].port == 0) /* a free slot */
-             {
-               sitecastgroups[i].port = GRST_HTCP_PORT;
-             
-               if (sscanf(parm, "%d.%d.%d.%d:%d",
-                          &(sitecastgroups[i].quad1), 
-                          &(sitecastgroups[i].quad2), 
-                          &(sitecastgroups[i].quad3), 
-                          &(sitecastgroups[i].quad4), 
-                          &(sitecastgroups[i].port)) < 4)
-                 return "Failed parsing GridSiteCastGroup nnn.nnn.nnn.nnn[:port]";
-                 
-               break;
-             }
-         }
-         
-      if (i > GRST_SITECAST_GROUPS)
-                     return "Maximum GridSiteCastGroup groups reached";
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteAdminFile") == 0)
-    {
-      if (index(parm, '/') != NULL) 
-           return "/ not permitted in GridSiteAdminFile";
-     
-      ((mod_gridsite_dir_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_dir_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_dir_cfg *) cfg)->helpuri =
-        apr_pstrdup(a->pool, parm);
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteDNlists") == 0)
-    {
-      ((mod_gridsite_dir_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_dir_cfg *) cfg)->dnlistsuri =
-        apr_pstrdup(a->pool, parm);
-      else
-       ((mod_gridsite_dir_cfg *) cfg)->dnlistsuri =
-        apr_pstrcat(a->pool, parm, "/", NULL);
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteAdminList") == 0)
-    {
-      ((mod_gridsite_dir_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_dir_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_dir_cfg *) cfg)->unzip =
-        apr_pstrdup(a->pool, parm);
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteMethods") == 0)
-    {
-      ((mod_gridsite_dir_cfg *) cfg)->methods =
-        apr_psprintf(a->pool, " %s ", parm);
-       
-      for (p = ((mod_gridsite_dir_cfg *) cfg)->methods;
-           *p != '\0';
-           ++p) if (*p == '\t') *p = ' ';
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteOCSP") == 0)
-    {
-      ocspmodes = apr_psprintf(a->pool, " %s ", parm);
-       
-      for (p = ocspmodes; *p != '\0'; ++p)
-               if (*p == '\t') *p = ' ';
-               else *p = tolower(*p);
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteEditable") == 0)
-    {
-      ((mod_gridsite_dir_cfg *) cfg)->editable =
-        apr_psprintf(a->pool, " %s ", parm);
-     
-      for (p = ((mod_gridsite_dir_cfg *) cfg)->editable;
-           *p != '\0';
-           ++p) if (*p == '\t') *p = ' ';
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteHeadFile") == 0)
-    {
-      ((mod_gridsite_dir_cfg *) cfg)->headfile =
-        apr_pstrdup(a->pool, parm);
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteFootFile") == 0)
-    {
-      ((mod_gridsite_dir_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_dir_cfg *) cfg)->indexheader =
-        apr_pstrdup(a->pool, parm);
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteACLFormat") == 0)
-    {
-      if ((strcasecmp(parm,"GACL") != 0) &&
-          (strcasecmp(parm,"XACML") != 0))
-          return "GridsiteACLFormat must be either GACL or XACML";
-      
-      ((mod_gridsite_dir_cfg *) cfg)->aclformat = apr_pstrdup(a->pool, parm);
-    }
-
-    else if (strcasecmp(a->cmd->name, "GridSiteDelegationURI") == 0)
-    {
-      if (*parm != '/') return "GridSiteDelegationURI must begin with /";
-
-      if (*parm != '\0')
-       ((mod_gridsite_dir_cfg *) cfg)->delegationuri =
-        apr_pstrdup(a->pool, parm);
-
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteExecMethod") == 0)
-    {
-      if (strcasecmp(parm, "nosetuid") == 0)
-        {
-          ((mod_gridsite_dir_cfg *) cfg)->execmethod = NULL;
-          return NULL;
-        }
-
-      if ((strcasecmp(parm, "suexec")    != 0) &&
-          (strcasecmp(parm, "X509DN")    != 0) &&
-          (strcasecmp(parm, "directory") != 0))
-          return "GridsiteExecMethod must be nosetuid, suexec, X509DN or directory";
-
-      ((mod_gridsite_dir_cfg *) cfg)->execmethod = apr_pstrdup(a->pool, parm);
-    }
-
-    return NULL;
-}
-
-static const char *mod_gridsite_take2_cmds(cmd_parms *a, void *cfg,
-                                       const char *parm1, const char *parm2)
-{
-    int   i;
-    char *p, *q;
-    
-    if (strcasecmp(a->cmd->name, "GridSiteUserGroup") == 0)
-    {
-      if (!(unixd_config.suexec_enabled))
-          return "Using GridSiteUserGroup will "
-                 "require rebuilding Apache with suexec support!";
-    
-      /* NB ap_uname2id/ap_gname2id are NOT thread safe - but OK
-         as long as not used in .htaccess, just at server start time */
-
-      ((mod_gridsite_dir_cfg *) cfg)->execugid.uid = ap_uname2id(parm1);
-      ((mod_gridsite_dir_cfg *) cfg)->execugid.gid = ap_gname2id(parm2);
-      ((mod_gridsite_dir_cfg *) cfg)->execugid.userdir = 0;
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteDiskMode") == 0)
-    {
-      if ((strcasecmp(parm1, "GroupNone" ) != 0) &&
-          (strcasecmp(parm1, "GroupRead" ) != 0) &&
-          (strcasecmp(parm1, "GroupWrite") != 0))
-        return "First parameter of GridSiteDiskMode must be "
-               "GroupNone, GroupRead or GroupWrite!";
-          
-      if ((strcasecmp(parm2, "WorldNone" ) != 0) &&
-          (strcasecmp(parm2, "WorldRead" ) != 0))
-        return "Second parameter of GridSiteDiskMode must be "
-               "WorldNone or WorldRead!";
-          
-      ((mod_gridsite_dir_cfg *) cfg)->diskmode = 
-       APR_UREAD | APR_UWRITE 
-       | ( APR_GREAD               * (strcasecmp(parm1, "GroupRead") == 0))
-       | ((APR_GREAD | APR_GWRITE) * (strcasecmp(parm1, "GroupWrite") == 0))
-       | ((APR_GREAD | APR_WREAD)  * (strcasecmp(parm2, "WorldRead") == 0));
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteCastAlias") == 0)
-    {
-      for (i=0; i < GRST_SITECAST_ALIASES; ++i) /* look for free slot */
-         {
-           if (sitecastaliases[i].sitecast_url == NULL)
-             {
-               sitecastaliases[i].scheme = apr_pstrdup(a->pool, parm1);
-
-               if (((p = index(sitecastaliases[i].scheme, ':')) == NULL)
-                   || (p[1] != '/') || (p[2] != '/'))
-                 return "GridSiteCastAlias URL must begin with scheme (http/https/gsiftp/...) and ://";
-
-               *p = '\0';
-               ++p;
-               while (*p == '/') ++p;
-             
-               if ((q = index(p, '/')) == NULL)
-                return "GridSiteCastAlias URL must be of form scheme://domain:port/dirs";
-
-               *q = '\0';
-
-               p = index(p, ':');
-               if (p == NULL)
-                 {
-                   return "GridSiteCastAlias URL must include the port number";
-                 }
-
-               if (sscanf(p, ":%d", &(sitecastaliases[i].port)) != 1)
-                 return "Unable to parse numeric port number in GridSiteCastAlias";
-
-               sitecastaliases[i].sitecast_url   = apr_pstrdup(a->pool, parm1);
-               sitecastaliases[i].local_path     = apr_pstrdup(a->pool, parm2);
-               sitecastaliases[i].local_hostname = apr_pstrdup(a->pool, 
-                                                   a->server->server_hostname);
-
-               break;
-             }
-         }
-    }
-    
-    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_dir_cfg *) cfg)->auth = flag;
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteEnvs") == 0)
-    {
-      ((mod_gridsite_dir_cfg *) cfg)->envs = flag;
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteHtmlFormat") == 0)
-    {
-      ((mod_gridsite_dir_cfg *) cfg)->format = flag;
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteIndexes") == 0)
-    {
-      ((mod_gridsite_dir_cfg *) cfg)->indexes = flag;
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteLink") == 0)
-    {
-      ((mod_gridsite_dir_cfg *) cfg)->gridsitelink = flag;
-    }
-    else if (strcasecmp(a->cmd->name, "GridSiteGridHTTP") == 0)
-    {
-// TODO: return error if try this on non-HTTPS virtual server
-
-      ((mod_gridsite_dir_cfg *) cfg)->gridhttp = 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("GridSiteOCSP", mod_gridsite_take1_cmds,
-                 NULL, RSRC_CONF, "Set OCSP lookups"),
-    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("GridSiteGridHTTP", mod_gridsite_flag_cmds,
-                 NULL, OR_FILEINFO, "on or off"),
-    AP_INIT_TAKE1("GridSiteGridHTTPport", mod_gridsite_take1_cmds,
-                   NULL, RSRC_CONF, "GridHTTP port"),
-    AP_INIT_TAKE1("GridSiteSessionsDir", mod_gridsite_take1_cmds,
-                 NULL, RSRC_CONF, "directory with GridHTTP passcodes and SSL session creds"),
-/* GridSiteOnetimesDir is deprecated in favour of GridSiteSessionsDir */
-    AP_INIT_TAKE1("GridSiteOnetimesDir", mod_gridsite_take1_cmds,
-                 NULL, RSRC_CONF, "directory with GridHTTP passcodes"),
-
-    AP_INIT_TAKE1("GridSiteCastDNlists", mod_gridsite_take1_cmds,
-                 NULL, RSRC_CONF, "DN Lists directories search path for SiteCast"),
-    AP_INIT_TAKE1("GridSiteCastUniPort", mod_gridsite_take1_cmds,
-                 NULL, RSRC_CONF, "UDP port for unicast/replies"),
-    AP_INIT_TAKE1("GridSiteCastGroup", mod_gridsite_take1_cmds,
-                 NULL, RSRC_CONF, "multicast group[:port] to listen for HTCP on"),
-    AP_INIT_TAKE2("GridSiteCastAlias", mod_gridsite_take2_cmds,
-                 NULL, RSRC_CONF, "URL and local path mapping"),
-
-    AP_INIT_TAKE1("GridSiteACLFormat", mod_gridsite_take1_cmds,
-                 NULL, OR_FILEINFO, "format to save access control lists in"),
-
-    AP_INIT_TAKE1("GridSiteDelegationURI", mod_gridsite_take1_cmds,
-                 NULL, OR_FILEINFO, "URI of the delegation service CGI"),
-
-    AP_INIT_TAKE1("GridSiteExecMethod", mod_gridsite_take1_cmds,
-                 NULL, OR_FILEINFO, "execution strategy used by gsexec"),
-                 
-    AP_INIT_TAKE2("GridSiteUserGroup", mod_gridsite_take2_cmds, 
-                  NULL, OR_FILEINFO,
-                  "user and group of gsexec processes in suexec mode"),
-          
-    AP_INIT_TAKE2("GridSiteDiskMode", mod_gridsite_take2_cmds, 
-                  NULL, OR_FILEINFO,
-                  "group and world file modes for new files/directories"),
-          
-    {NULL}
-};
-
-/*  Blank unset these HTTP headers, to prevent injection attacks.
-    This is run before mod_shib's check_user_id hook, which may
-    legitimately create such headers.                           */
-
-static int mod_gridsite_check_user_id(request_rec *r)
-{
-    apr_table_unset(r->headers_in, "User-Distinguished-Name");
-    apr_table_unset(r->headers_in, "Nist-LoA");
-    apr_table_unset(r->headers_in, "VOMS-Attribute");
-
-    return DECLINED; /* ie carry on processing request */
-}
-
-static int mod_gridsite_first_fixups(request_rec *r)
-{
-    mod_gridsite_dir_cfg *conf;
-
-    if (r->finfo.filetype != APR_DIR) return DECLINED;
-
-    conf = (mod_gridsite_dir_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;
-}  
-
-
-int GRST_get_session_id(SSL *ssl, char *session_id, size_t len)
-{
-   int          i;
-   SSL_SESSION *session;
-
-   if (((session = SSL_get_session(ssl)) == NULL) ||
-       (session->session_id_length == 0)) return GRST_RET_FAILED;
-   
-   if (2 * session->session_id_length + 1 > len) return GRST_RET_FAILED;
-
-   for (i=0; i < (int) session->session_id_length; ++i)
-    sprintf(&(session_id[i*2]), "%02X", (unsigned char) session->session_id[i]);
-
-   session_id[i*2] = '\0';
-   
-   return GRST_RET_OK;
-}
-
-int GRST_load_ssl_creds(SSL *ssl, conn_rec *conn)
-{
-   char session_id[(SSL_MAX_SSL_SESSION_ID_LENGTH+1)*2], *sessionfile = NULL,
-        line[512], *p;
-   apr_file_t  *fp = NULL;
-   int i;
-      
-   if (GRST_get_session_id(ssl, session_id, sizeof(session_id)) != GRST_RET_OK)
-     return GRST_RET_FAILED;
-   
-   sessionfile = apr_psprintf(conn->pool, "%s/sslcreds-%s",
-                         ap_server_root_relative(conn->pool, sessionsdir),
-                         session_id);
-
-   if (apr_file_open(&fp, sessionfile, APR_READ, 0, conn->pool) != APR_SUCCESS)
-       return GRST_RET_FAILED;
-   
-   while (apr_file_gets(line, sizeof(line), fp) == APR_SUCCESS)
-        {
-          if (sscanf(line, "GRST_CRED_%d=", &i) == 1)
-            {
-              p = index(line, '=');
-
-              apr_table_setn(conn->notes,
-                         apr_psprintf(conn->pool, "GRST_CRED_%d", i),
-                         apr_pstrdup(conn->pool, &p[1]));
-            }
-          else if (sscanf(line, "GRST_OCSP_URL_%d=", &i) == 1)
-            {
-              p = index(line, '=');
-
-              apr_table_setn(conn->notes,
-                         apr_psprintf(conn->pool, "GRST_OCSP_URL_%d", i),
-                         apr_pstrdup(conn->pool, &p[1]));
-            }
-        }
-        
-   apr_file_close(fp);
-
-   /* connection notes created by GRST_save_ssl_creds() are now reloaded */
-   apr_table_set(conn->notes, "GRST_save_ssl_creds", "yes");
-
-   return GRST_RET_OK;
-}
-
-/*
-    Save result of GRSTx509CompactCreds() into connection notes, and
-    write out in an SSL session creds file.
-*/
-
-void GRST_save_ssl_creds(conn_rec *conn, 
-                        STACK_OF(X509) *certstack, X509 *peercert)
-{
-   int          i, lastcred;
-   const int    maxcreds = 99;
-   const size_t credlen = 1024;
-   char         creds[maxcreds][credlen+1], envname[14], *tempfile = NULL,
-               *sessionfile, session_id[(SSL_MAX_SSL_SESSION_ID_LENGTH+1)*2];
-   apr_file_t  *fp = NULL;
-   SSL         *ssl;
-   SSLConnRec  *sslconn;
-
-   /* check if already done */
-
-   if ((certstack != NULL) && (conn->notes != NULL) &&
-       (apr_table_get(conn->notes, "GRST_save_ssl_creds") != NULL)) return;
-
-   /* we at least need to say we've been run */
-
-   apr_table_set(conn->notes, "GRST_save_ssl_creds", "yes");
-   ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, conn->base_server,
-                                            "set GRST_save_ssl_creds");
-
-   sslconn = (SSLConnRec *)ap_get_module_config(conn->conn_config,&ssl_module);
-
-   if ((sslconn != NULL) && 
-       ((ssl = sslconn->ssl) != NULL) &&
-       (GRST_get_session_id(ssl,session_id,sizeof(session_id)) == GRST_RET_OK))
-     {
-       sessionfile = apr_psprintf(conn->pool, "%s/sslcreds-%s",
-                         ap_server_root_relative(conn->pool, sessionsdir),
-                         session_id);
-
-       tempfile = apr_pstrcat(conn->pool, 
-                          ap_server_root_relative(conn->pool, sessionsdir), 
-                          "/tmp-XXXXXX", NULL);
-   
-       if ((tempfile != NULL) && (tempfile[0] != '\0'))
-               apr_file_mktemp(&fp, tempfile, 
-                               APR_CREATE | APR_WRITE | APR_EXCL, conn->pool);
-     }
-
-   if (GRSTx509CompactCreds(&lastcred, maxcreds, credlen, (char *) creds,
-                          certstack, GRST_VOMS_DIR, peercert) == 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, conn->base_server,
-                                      "store GRST_CRED_%d=%s", i, creds[i]);
-
-            if (fp != NULL) apr_file_printf(fp, "GRST_CRED_%d=%s\n",
-                                                i, creds[i]);
-          }
-                                   
-       /* free remaining dup'd certs? */
-     }
-
-   /* this needs to be merged into compactcreds in grst_x509? */
-
-   if (ocspmodes != NULL)
-   {
-     int   j;
-     const char *ex_sn;
-     char s[80];
-     X509 *cert;     
-     X509_EXTENSION *ex;
-     
-     for (j=sk_X509_num(certstack)-1; j >= 0; --j)
-        {
-          cert = sk_X509_value(certstack, j);
-          
-          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), 0);
-
-               if (strcmp(s, "authorityInfoAccess") == 0) /* OCSP */
-                 {
-                   apr_table_setn(conn->notes, "GRST_OCSP_URL",
-                                  (const char *) X509_EXTENSION_get_data(ex));
-
-                   /* strategy is to remove what has been checked, 
-                      for this connnection */
-                   apr_table_set(conn->notes, "GRST_OCSP_UNCHECKED",
-                                 ocspmodes);
-
-                   ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, conn->base_server,
-                "store GRST_OCSP_URL_%d=%s", i, X509_EXTENSION_get_data(ex));
-
-                   if (fp != NULL) apr_file_printf(fp, "GRST_OCSP_URL_%d=%s\n",
-                                             i, X509_EXTENSION_get_data(ex));
-                 }
-             }
-        }   
-   }
-         
-   /* end of bit that needs to go into grst_x509 */
-     
-   if (fp != NULL)
-     {
-       apr_file_close(fp);
-       apr_file_rename(tempfile, sessionfile, conn->pool);
-     }
-}
-
-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, file_is_acl = 0,
-                 destination_is_acl = 0, proxylevel, ishttps = 0;
-    char        *dn, *p, envname[14], *grst_cred_0 = NULL, *dir_path, 
-                *remotehost, s[99], *grst_cred_i, *cookies, *file, *https,
-                *gridauthpasscode = NULL, *cookiefile, oneline[1025], *key_i,
-                *destination = NULL, *destination_uri = NULL, *querytmp, 
-                *destination_prefix = NULL, *destination_translated = NULL;
-    char        *vomsAttribute, *loa;
-    const char  *content_type;
-    time_t       now, notbefore, notafter;
-    apr_table_t *env;
-    apr_finfo_t  cookiefile_info;
-    apr_file_t  *fp;
-    request_rec *destreq;
-    GRSTgaclCred    *cred = NULL, *cred_0 = NULL;
-    GRSTgaclUser    *user = NULL;
-    GRSTgaclPerm     perm = GRST_PERM_NONE, destination_perm = GRST_PERM_NONE;
-    GRSTgaclAcl     *acl = NULL;
-    mod_gridsite_dir_cfg *cfg;
-    SSLConnRec      *sslconn;
-    STACK_OF(X509)  *certstack;
-    X509           *peercert;
-
-    cfg = (mod_gridsite_dir_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;
-    
-    /* Get the user's attributes from Shibboleth and set up user credential
-       based on the attributes if authentication has been carried out using
-       a Shibboleth Identity Provider.*/
-
-    /* Get DN from a Shibboleth attribute */
-    if (vomsAttribute == NULL)
-      {
-        dn = (char *) apr_table_get(r->headers_in, "User-Distinguished-Name");
-        ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, "DN: %s", dn);
-      }                                            
-#if 0                                                                    
-    /* Get the NIST LoA attribute */
-    loa = (char *) apr_table_get(r->headers_in, "nist-loa");
-    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, "Nist-LoA: %d", loa);
-#endif
-    /* Set up user credential based on the DN and LoA attributes */
-                                  
-    if (dn != NULL)
-      {
-        cred = GRSTgaclCredNew("person");
-        GRSTgaclCredAddValue(cred, "dn", dn);
-        user = GRSTgaclUserNew(cred);
-        cred = GRSTgaclCredNew("level");
-#if 0
-        GRSTgaclCredAddValue(cred, "nist-loa", loa);
-#endif
-        GRSTgaclCredAddValue(cred, "nist-loa", "2"); /* hardcoded for now */
-        GRSTgaclUserAddCred(user, cred);
-      }
-
-    vomsAttribute = (char *) apr_table_get(r->headers_in, "VOMS-Attribute");
-    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, 
-                 "VOMS-Attribute: %s", vomsAttribute);
-            
-    /* Set up user credential based on VOMS Attribute */
-    if (vomsAttribute != NULL)
-      {
-        cred = GRSTgaclCredNew("voms");
-        GRSTgaclCredAddValue(cred, "fqan", vomsAttribute);
-        if (user == NULL) user = GRSTgaclUserNew(cred);
-        else GRSTgaclUserAddCred(user, cred);
-      }
-
-    p = (char *) apr_table_get(r->subprocess_env, "HTTPS");
-    if ((p != NULL) && (strcmp(p, "on") == 0)) ishttps = 1;
-
-    /* reload per-connection (SSL) cred variables? */
-
-    sslconn = (SSLConnRec *) ap_get_module_config(r->connection->conn_config, 
-                                                  &ssl_module);
-    if ((sslconn != NULL) && 
-        (sslconn->ssl != NULL) &&
-        (sslconn->ssl->session != NULL) &&
-        (r->connection->notes != NULL) &&
-        (apr_table_get(r->connection->notes, "GRST_save_ssl_creds") == NULL))
-      {
-        if (GRST_load_ssl_creds(sslconn->ssl, r->connection) == GRST_RET_OK)        
-            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
-                         "Restored SSL session data from session cache file");
-      }
-
-    proxylevel = ((mod_gridsite_dir_cfg *) cfg)->gsiproxylimit + 1;
-    
-    if ((user == NULL) && 
-        (r->connection->notes != NULL) &&
-        ((grst_cred_0 = (char *) 
-            apr_table_get(r->connection->notes, "GRST_CRED_0")) != NULL) &&
-        (sscanf(grst_cred_0, "X509USER %*d %*d %d ", &proxylevel) == 1) &&
-        (proxylevel <= ((mod_gridsite_dir_cfg *) cfg)->gsiproxylimit))
-      {
-        apr_table_setn(env, "GRST_CRED_0", grst_cred_0);
-                                    
-        cred_0 = GRSTx509CompactToCred(grst_cred_0);
-        if (cred_0 != NULL)
-          {
-            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_dir_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 */
-               }
-
-            cred = GRSTgaclCredNew("level");
-            if (proxylevel == 0) GRSTgaclCredAddValue(cred, "nist-loa", "3");
-            else                 GRSTgaclCredAddValue(cred, "nist-loa", "2");
-            GRSTgaclUserAddCred(user, cred);
-          }
-      }
-
-    if ((user != NULL) && ((mod_gridsite_dir_cfg *) cfg)->dnlists)
-          GRSTgaclUserSetDNlists(user, ((mod_gridsite_dir_cfg *) cfg)->dnlists);
-
-    /* add DNS credential */
-    
-    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);
-      }
-
-    /* check for Destination: header and evaluate if present */
-
-    if ((destination = (char *) apr_table_get(r->headers_in,
-                                              "Destination")) != NULL)
-      {
-        destination_prefix = apr_psprintf(r->pool, "https://%s:%d/", 
-                         r->server->server_hostname, (int) r->server->port);
-
-        if (strncmp(destination_prefix, destination,
-                    strlen(destination_prefix)) == 0) 
-           destination_uri = &destination[strlen(destination_prefix)-1];
-        else if ((int) r->server->port == 443)
-          {
-            destination_prefix = apr_psprintf(r->pool, "https://%s/", 
-                                              r->server->server_hostname);
-
-            if (strncmp(destination_prefix, destination,
-                                strlen(destination_prefix)) == 0)
-              destination_uri = &destination[strlen(destination_prefix)-1];
-          }
-          
-        if (destination_uri != NULL)
-          {
-            destreq = ap_sub_req_method_uri("GET", destination_uri, r, NULL);
-
-            if ((destreq != NULL) && (destreq->filename != NULL) 
-                                  && (destreq->path_info != NULL))
-              {
-                destination_translated = apr_pstrcat(r->pool, 
-                               destreq->filename, destreq->path_info, NULL);
-
-                apr_table_setn(r->notes, "GRST_DESTINATION_TRANSLATED", 
-                               destination_translated);
-                             
-                if (((mod_gridsite_dir_cfg *) cfg)->envs)
-                        apr_table_setn(env, "GRST_DESTINATION_TRANSLATED", 
-                                                  destination_translated);
-                                                  
-                 p = rindex(destination_translated, '/');
-                 if ((p != NULL) && (strcmp(&p[1], GRST_ACL_FILE) == 0))
-                                                    destination_is_acl = 1;
-              }
-          }
-      }
-    
-    /* this checks for NULL arguments itself */
-    if (GRSTgaclDNlistHasUser(((mod_gridsite_dir_cfg *) cfg)->adminlist, user))
-      {
-        perm = GRST_PERM_ALL;
-        if (destination_translated != NULL) destination_perm = GRST_PERM_ALL;
-      }
-    else
-      {
-        acl = GRSTgaclAclLoadforFile(r->filename);
-        if (acl != NULL) perm = GRSTgaclAclTestUser(acl, user);
-        GRSTgaclAclFree(acl);
-        
-        if (destination_translated != NULL)
-          {
-            acl = GRSTgaclAclLoadforFile(destination_translated);
-            if (acl != NULL) destination_perm = GRSTgaclAclTestUser(acl, user);
-            GRSTgaclAclFree(acl);
-
-            apr_table_setn(r->notes, "GRST_DESTINATION_PERM",
-                              apr_psprintf(r->pool, "%d", destination_perm));
-          
-            if (((mod_gridsite_dir_cfg *) cfg)->envs)
-              apr_table_setn(env, "GRST_DESTINATION_PERM",
-                              apr_psprintf(r->pool, "%d", destination_perm));
-          }
-      }
-      
-    /* first look for GRIDHTTP_PASSCODE cookie */
-      
-    if ((p = (char *) apr_table_get(r->headers_in, "Cookie")) != NULL)
-      {
-        cookies = apr_pstrcat(r->pool, " ", p, NULL);
-        gridauthpasscode = strstr(cookies, " GRIDHTTP_PASSCODE=");
-                
-        if (gridauthpasscode != NULL)
-          {
-            gridauthpasscode = &gridauthpasscode[19];
-          
-            for (p = gridauthpasscode; 
-                 (*p != '\0') && (*p != ';'); ++p)
-                                      if (!isalnum(*p)) *p = '\0';
-          }
-      }
-
-    /* then look for GRIDHTTP_PASSCODE in QUERY_STRING ie after ? */
-      
-    if (gridauthpasscode == NULL)
-      {
-        if ((r->parsed_uri.query != NULL) && (r->parsed_uri.query[0] != '\0'))
-          {
-            querytmp = apr_pstrcat(r->pool,"&",r->parsed_uri.query,"&",NULL);
-            
-            gridauthpasscode = strstr(querytmp, "&GRIDHTTP_PASSCODE=");
-            
-            if (gridauthpasscode != NULL)                         
-              {
-                gridauthpasscode = &gridauthpasscode[19];
-              
-                for (p = gridauthpasscode; 
-                     (*p != '\0') && (*p != '&'); ++p)
-                                          if (!isalnum(*p)) *p = '\0';
-              }            
-          }
-      }
-
-    if ((gridauthpasscode != NULL) && (gridauthpasscode[0] != '\0')) 
-      {
-        cookiefile = apr_psprintf(r->pool, "%s/passcode-%s",
-                 ap_server_root_relative(r->pool,
-                 sessionsdir),
-                 gridauthpasscode);
-                                      
-        ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
-                             "Opening GridHTTP passcode file %s", cookiefile);
-              
-        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,
-                             "Reading GridHTTP passcode 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)
-                                 && !ishttps)
-                                  apr_file_remove(cookiefile, r->pool);
-                       else if  (strncmp(oneline, "method=PUT", 10) == 0)
-                                  perm |= GRST_PERM_WRITE;
-                       else if  (strncmp(oneline, "method=GET", 10) == 0)
-                                  perm |= GRST_PERM_READ;
-                     }
-
-                apr_file_close(fp);
-              }
-      }
-    
-    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
-                 "After GACL/Onetime evaluation, GRST_PERM=%d", perm);
-
-    /* set permission and GACL environment variables */
-    
-    apr_table_setn(r->notes, "GRST_PERM", apr_psprintf(r->pool, "%d", perm));
-
-    if (((mod_gridsite_dir_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_dir_cfg *) cfg)->helpuri != NULL)
-                  apr_table_setn(env, "GRST_HELP_URI",
-                              ((mod_gridsite_dir_cfg *) cfg)->helpuri);
-
-        if (((mod_gridsite_dir_cfg *) cfg)->adminfile != NULL)
-                  apr_table_setn(env, "GRST_ADMIN_FILE",
-                              ((mod_gridsite_dir_cfg *) cfg)->adminfile);
-
-        if (((mod_gridsite_dir_cfg *) cfg)->editable != NULL)
-                 apr_table_setn(env, "GRST_EDITABLE",
-                              ((mod_gridsite_dir_cfg *) cfg)->editable);
-
-        if (((mod_gridsite_dir_cfg *) cfg)->headfile != NULL)
-                 apr_table_setn(env, "GRST_HEAD_FILE",
-                              ((mod_gridsite_dir_cfg *) cfg)->headfile);
-
-        if (((mod_gridsite_dir_cfg *) cfg)->footfile != NULL)
-                 apr_table_setn(env, "GRST_FOOT_FILE",
-                              ((mod_gridsite_dir_cfg *) cfg)->footfile);
-
-        if (((mod_gridsite_dir_cfg *) cfg)->dnlists != NULL)
-                 apr_table_setn(env, "GRST_DN_LISTS",
-                              ((mod_gridsite_dir_cfg *) cfg)->dnlists);
-
-        if (((mod_gridsite_dir_cfg *) cfg)->dnlistsuri != NULL)
-                 apr_table_setn(env, "GRST_DN_LISTS_URI",
-                              ((mod_gridsite_dir_cfg *) cfg)->dnlistsuri);
-
-        if (((mod_gridsite_dir_cfg *) cfg)->adminlist != NULL)
-                 apr_table_setn(env, "GRST_ADMIN_LIST",
-                              ((mod_gridsite_dir_cfg *) cfg)->adminlist);
-
-       apr_table_setn(env, "GRST_GSIPROXY_LIMIT",
-                            apr_psprintf(r->pool, "%d",
-                                  ((mod_gridsite_dir_cfg *)cfg)->gsiproxylimit));
-
-        if (((mod_gridsite_dir_cfg *) cfg)->unzip != NULL)
-                 apr_table_setn(env, "GRST_UNZIP",
-                              ((mod_gridsite_dir_cfg *) cfg)->unzip);
-
-        if (!(((mod_gridsite_dir_cfg *) cfg)->gridsitelink))
-                  apr_table_setn(env, "GRST_NO_LINK", "1");
-
-        if (((mod_gridsite_dir_cfg *) cfg)->aclformat != NULL)
-                 apr_table_setn(env, "GRST_ACL_FORMAT",
-                              ((mod_gridsite_dir_cfg *) cfg)->aclformat);
-
-       if (((mod_gridsite_dir_cfg *) cfg)->delegationuri != NULL)
-                 apr_table_setn(env, "GRST_DELEGATION_URI",
-                              ((mod_gridsite_dir_cfg *) cfg)->delegationuri);
-
-
-        if (((mod_gridsite_dir_cfg *) cfg)->execmethod != NULL)
-          {
-           apr_table_setn(env, "GRST_EXEC_METHOD",
-                              ((mod_gridsite_dir_cfg *) cfg)->execmethod);
-                              
-            if ((strcasecmp(((mod_gridsite_dir_cfg *) cfg)->execmethod,  
-                           "directory") == 0) && (r->filename != NULL))
-              {
-                if ((r->content_type != NULL) && 
-                    (strcmp(r->content_type, DIR_MAGIC_TYPE) == 0))
-                  apr_table_setn(env, "GRST_EXEC_DIRECTORY", r->filename);
-                else
-                  {
-                    file = apr_pstrdup(r->pool, r->filename);
-                    p = rindex(file, '/');
-                    if (p != NULL)
-                      {
-                        *p = '\0';
-                        apr_table_setn(env, "GRST_EXEC_DIRECTORY", file);
-                      }                    
-                  }                 
-              }
-          }
-
-        apr_table_setn(env, "GRST_DISK_MODE",
-                            apr_psprintf(r->pool, "0x%04x",
-                             ((mod_gridsite_dir_cfg *)cfg)->diskmode));
-      }
-
-    if (((mod_gridsite_dir_cfg *) cfg)->auth)
-      {
-        /* *** Check HTTP method to decide which perm bits to check *** */
-
-        if ((r->filename != NULL) && 
-            ((p = rindex(r->filename, '/')) != NULL) &&
-            (strcmp(&p[1], GRST_ACL_FILE) == 0)) file_is_acl = 1;
-
-        content_type = r->content_type;
-        if ((content_type != NULL) &&
-            (strcmp(content_type, DIR_MAGIC_TYPE) == 0) &&
-            (((mod_gridsite_dir_cfg *) cfg)->dnlistsuri != NULL) &&
-            (strncmp(r->uri,
-                     ((mod_gridsite_dir_cfg *) cfg)->dnlistsuri,
-                     strlen(((mod_gridsite_dir_cfg *) cfg)->dnlistsuri)) == 0) &&
-            (strlen(r->uri) > strlen(((mod_gridsite_dir_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_is_acl) ||
-
-            ((r->method_number == M_MOVE) &&
-             ((!GRSTgaclPermHasWrite(perm) && !file_is_acl) || 
-              (!GRSTgaclPermHasAdmin(perm) && file_is_acl)  ||
-              (!GRSTgaclPermHasWrite(destination_perm) 
-                                    && !destination_is_acl) || 
-              (!GRSTgaclPermHasAdmin(destination_perm) 
-                                     && destination_is_acl)) ) ||
-
-            (((r->method_number == M_PUT) || 
-              (r->method_number == M_DELETE)) &&
-             !GRSTgaclPermHasAdmin(perm) && file_is_acl) 
-             
-             ) 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;
-   STACK_OF(X509) *certstack;
-
-   /*
-    * 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 
-          {
-            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, "Valid certificate"
-                                   " chain reported by GRSTx509CheckChain()");
-
-            /* Put result of GRSTx509CompactCreds() into connection notes */
-            if ((certstack = 
-                  (STACK_OF(X509) *) X509_STORE_CTX_get_chain(ctx)) != NULL)
-             GRST_save_ssl_creds(conn, certstack, NULL);
-          }
-     }
-
-   return returned_ok;
-}
-
-void sitecast_handle_NOP_request(server_rec *main_server, 
-                                 GRSThtcpMessage *htcp_mesg, int igroup,
-                                 struct sockaddr_in *client_addr_ptr)
-{
-  int  outbuf_len;
-  char *outbuf;
-  
-  if (GRSThtcpNOPresponseMake(&outbuf, &outbuf_len,
-                              htcp_mesg->trans_id) == GRST_RET_OK)
-    {
-      ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, main_server,
-            "SiteCast sends NOP response from port %d to %s:%d",
-            sitecastgroups[0].port, inet_ntoa(client_addr_ptr->sin_addr),
-            ntohs(client_addr_ptr->sin_port));
-
-      sendto(sitecastgroups[0].socket, outbuf, outbuf_len, 0,
-                 client_addr_ptr, sizeof(struct sockaddr_in));
-                 
-      free(outbuf);
-    }
-}
-
-void sitecast_handle_TST_GET(server_rec *main_server, 
-                             GRSThtcpMessage *htcp_mesg, int igroup,
-                             struct sockaddr_in *client_addr_ptr)
-{
-  int             i, outbuf_len, ialias;
-  char            *filename, *outbuf, *location, *local_uri = NULL;
-  struct stat     statbuf;
-  
-  ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, main_server,
-        "SiteCast responder received TST GET with uri %s", 
-        htcp_mesg->uri->text, GRSThtcpCountstrLen(htcp_mesg->uri));
-
-  /* find if any GridSiteCastAlias lines match */
-
-  for (ialias=0; ialias < GRST_SITECAST_ALIASES ; ++ialias)
-     {
-       if (sitecastaliases[ialias].sitecast_url == NULL) return; /* no match */
-                             
-       if ((strlen(sitecastaliases[ialias].sitecast_url)
-                                <= GRSThtcpCountstrLen(htcp_mesg->uri)) &&
-           (strncmp(sitecastaliases[ialias].sitecast_url,
-                    htcp_mesg->uri->text,
-                    strlen(sitecastaliases[ialias].sitecast_url))==0)) break;
-     }
-
-  if (ialias == GRST_SITECAST_ALIASES) 
-    {
-      ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, main_server,
-              "SiteCast responder does not handle %*s requested by %s:%d",
-                        GRSThtcpCountstrLen(htcp_mesg->uri),
-                        htcp_mesg->uri->text,
-                        inet_ntoa(client_addr_ptr->sin_addr),
-                        ntohs(client_addr_ptr->sin_port));
-      
-      return; /* no match */
-    }
-    
-  /* convert URL to filename, using alias mapping */
-
-  asprintf(&filename, "%s%*s", 
-           sitecastaliases[ialias].local_path,
-           GRSThtcpCountstrLen(htcp_mesg->uri) 
-                        - strlen(sitecastaliases[ialias].sitecast_url),
-           &(htcp_mesg->uri->text[strlen(sitecastaliases[ialias].sitecast_url)]) );
-
-  if (stat(filename, &statbuf) == 0) /* found file */
-    {
-      asprintf(&location, "Location: %s://%s:%d/%s\r\n",
-                  sitecastaliases[ialias].scheme,
-                  sitecastaliases[ialias].local_hostname,
-                  sitecastaliases[ialias].port,
-      &(htcp_mesg->uri->text[strlen(sitecastaliases[ialias].sitecast_url)]) );
-
-      ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, main_server,
-            "SiteCast finds %*s at %s, redirects with %s",
-            GRSThtcpCountstrLen(htcp_mesg->uri),
-            htcp_mesg->uri->text, filename, location);
-
-      if (GRSThtcpTSTresponseMake(&outbuf, &outbuf_len,
-                                  htcp_mesg->trans_id,
-                                  location, "", "") == GRST_RET_OK)
-        {
-          ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, main_server,
-            "SiteCast sends TST response from port %d to %s:%d",
-            sitecastgroups[0].port, inet_ntoa(client_addr_ptr->sin_addr),
-            ntohs(client_addr_ptr->sin_port));
-
-          sendto(sitecastgroups[0].socket, outbuf, outbuf_len, 0,
-                 client_addr_ptr, sizeof(struct sockaddr_in));
-                 
-          free(outbuf);
-        }
-
-      free(location);
-    }
-
-  free(filename);                      
-}
-
-void sitecast_handle_request(server_rec *main_server, 
-                             char *reqbuf, int reqbuf_len, int igroup,
-                             struct sockaddr_in *client_addr_ptr)
-{
-  GRSThtcpMessage htcp_mesg;
-
-  if (GRSThtcpMessageParse(&htcp_mesg,reqbuf,reqbuf_len) != GRST_RET_OK)
-    {
-      ap_log_error(APLOG_MARK, APLOG_ERR, 0, main_server,
-              "SiteCast responder rejects format of UDP message from %s:%d",
-                        inet_ntoa(client_addr_ptr->sin_addr),
-                        ntohs(client_addr_ptr->sin_port));
-      return;
-    }
-
-  if (htcp_mesg.rr != 0) /* ignore HTCP responses: we just do requests */
-    {
-      ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, main_server,
-              "SiteCast responder ignores HTCP response from %s:%d",
-                        inet_ntoa(client_addr_ptr->sin_addr),
-                        ntohs(client_addr_ptr->sin_port));
-      return;
-    }
-
-  if (htcp_mesg.opcode == GRSThtcpNOPop)
-    {
-      sitecast_handle_NOP_request(main_server, &htcp_mesg, 
-                                  igroup, client_addr_ptr);
-      return;
-    }
-
-  if (htcp_mesg.opcode == GRSThtcpTSTop)
-    {
-      if (((GRSThtcpCountstrLen(htcp_mesg.method) == 3) &&
-           (strncmp(htcp_mesg.method->text, "GET", 3) == 0)) ||
-          ((GRSThtcpCountstrLen(htcp_mesg.method) == 4) &&
-           (strncmp(htcp_mesg.method->text, "HEAD", 4) == 0)))
-        {
-          sitecast_handle_TST_GET(main_server, &htcp_mesg, 
-                                  igroup, client_addr_ptr);
-          return;
-        }
-        
-      ap_log_error(APLOG_MARK, APLOG_ERR, 0, main_server,
-          "SiteCast responder rejects method %*s in TST message from %s:%d",
-          GRSThtcpCountstrLen(htcp_mesg.method), htcp_mesg.method->text,
-          inet_ntoa(client_addr_ptr->sin_addr),
-          ntohs(client_addr_ptr->sin_port));
-      return;
-    }
-
-  ap_log_error(APLOG_MARK, APLOG_ERR, 0, main_server,
-          "SiteCast does not implement HTCP op-code %d in message from %s:%d",
-          htcp_mesg.opcode,
-          inet_ntoa(client_addr_ptr->sin_addr),
-          ntohs(client_addr_ptr->sin_port));
-}
-
-void sitecast_responder(server_rec *main_server)
-{
-#define GRST_SITECAST_MAXBUF 8192
-  char   reqbuf[GRST_SITECAST_MAXBUF], *p;
-  int    n, reqbuf_len, i, j, igroup,
-         quad1, quad2, quad3, quad4, port, retval, client_addr_len;
-  struct sockaddr_in srv, client_addr;
-  struct ip_mreq mreq;
-  fd_set readsckts;
-  struct hostent *server_hostent;
-
-  strcpy((char *) main_server->process->argv[0], "GridSiteCast UDP responder");
-
-  /* initialise unicast/replies socket first */
-
-  bzero(&srv, sizeof(srv));
-  srv.sin_family = AF_INET;
-  srv.sin_port = htons(sitecastgroups[0].port);
-
-  if ((server_hostent = gethostbyname(main_server->server_hostname)) == NULL)
-    {
-      ap_log_error(APLOG_MARK, APLOG_ERR, 0, main_server,
-              "SiteCast UDP Responder fails to look up servername %s",
-              main_server->server_hostname);
-      return;
-    }
-
-  srv.sin_addr.s_addr = (u_int32_t) (server_hostent->h_addr_list[0][0]);
-  
-  if (((sitecastgroups[0].socket 
-                                = socket(AF_INET, SOCK_DGRAM, 0)) < 0) ||
-       (bind(sitecastgroups[0].socket, 
-                                (struct sockaddr *) &srv, sizeof(srv)) < 0))
-    {
-      ap_log_error(APLOG_MARK, APLOG_ERR, 0, main_server,
-              "mod_gridsite: sitecast responder fails on unicast bind (%s)",
-              strerror(errno));
-      return;
-    }
-
-  ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, main_server,
-                "SiteCast UDP unicast/replies on %d.%d.%d.%d:%d",
-                   server_hostent->h_addr_list[0][0],
-                   server_hostent->h_addr_list[0][1],
-                   server_hostent->h_addr_list[0][2],
-                   server_hostent->h_addr_list[0][3],
-                   sitecastgroups[0].port);
-
-  /* initialise multicast listener sockets next */
-
-  for (i=1; (i <= GRST_SITECAST_GROUPS) && 
-            (sitecastgroups[i].port != 0); ++i)
-     {
-       bzero(&srv, sizeof(srv));
-       srv.sin_family = AF_INET;
-       srv.sin_port = htons(sitecastgroups[i].port);
-       srv.sin_addr.s_addr = htonl(sitecastgroups[i].quad1*0x1000000
-                                 + sitecastgroups[i].quad2*0x10000
-                                 + sitecastgroups[i].quad3*0x100 
-                                 + sitecastgroups[i].quad4);
-
-       if (((sitecastgroups[i].socket 
-                                     = socket(AF_INET, SOCK_DGRAM, 0)) < 0) ||
-               (bind(sitecastgroups[i].socket, 
-                                  (struct sockaddr *) &srv, sizeof(srv)) < 0))
-         {
-           ap_log_error(APLOG_MARK, APLOG_ERR, 0, main_server,
-                "SiteCast UDP Responder fails on multicast bind (%s)",
-                strerror(errno));
-           return;
-         }
-     
-       bzero(&mreq, sizeof(mreq));
-       mreq.imr_multiaddr.s_addr = srv.sin_addr.s_addr;
-       mreq.imr_interface.s_addr = htonl(INADDR_ANY);
-
-       if (setsockopt(sitecastgroups[i].socket, IPPROTO_IP,
-                      IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0) 
-         { 
-           ap_log_error(APLOG_MARK, APLOG_ERR, 0, main_server,
-                "SiteCast UDP Responder fails on setting multicast (%s)",
-                strerror(errno));
-           return; 
-         }
-         
-       ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, main_server,
-        "SiteCast UDP Responder listening on %d.%d.%d.%d:%d",
-        sitecastgroups[i].quad1, sitecastgroups[i].quad2,
-        sitecastgroups[i].quad3, sitecastgroups[i].quad4, 
-        sitecastgroups[i].port);
-     }
-
-  for (i=0; (i < GRST_SITECAST_ALIASES) &&
-            (sitecastaliases[i].sitecast_url != NULL) ; ++i)
-     {
-       ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, main_server,
-                          "SiteCast alias for %s (%s,%d) to %s (%s)",
-                          sitecastaliases[i].sitecast_url,
-                          sitecastaliases[i].scheme,
-                          sitecastaliases[i].port,
-                          sitecastaliases[i].local_path,
-                          sitecastaliases[i].local_hostname);
-     }
-
-  while (1) /* **** main listening loop **** */
-       {
-         /* set up bitmasks for select */
-       
-         FD_ZERO(&readsckts);
-         
-         n = 0;
-         for (i=0; (i <= GRST_SITECAST_GROUPS) && 
-                   (sitecastgroups[i].port != 0); ++i) /* reset bitmask */
-            {
-              FD_SET(sitecastgroups[i].socket, &readsckts);
-              if (sitecastgroups[i].socket > n) n = sitecastgroups[i].socket;
-            }
-
-         ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, main_server,
-                      "SiteCast UDP Responder waiting for requests");
-
-         if ((retval = select(n + 1, &readsckts, NULL, NULL, NULL)) < 1)
-                                   continue; /* < 1 on timeout or error */
-
-         for (igroup=0; (igroup <= GRST_SITECAST_GROUPS) && 
-                   (sitecastgroups[igroup].port != 0); ++igroup)
-            {
-              if (FD_ISSET(sitecastgroups[igroup].socket, &readsckts))
-                {
-                  client_addr_len = sizeof(client_addr);
-
-                  if ((reqbuf_len = recvfrom(sitecastgroups[igroup].socket, 
-                                             reqbuf, GRST_SITECAST_MAXBUF, 0,
-                     (struct sockaddr *) &client_addr, &client_addr_len)) >= 0)
-                    {
-                      ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, main_server,
-                        "SiteCast receives UDP message from %s:%d "
-                        "to %d.%d.%d.%d:%d",
-                        inet_ntoa(client_addr.sin_addr),
-                        ntohs(client_addr.sin_port),
-                        sitecastgroups[igroup].quad1,
-                        sitecastgroups[igroup].quad2,
-                        sitecastgroups[igroup].quad3,
-                        sitecastgroups[igroup].quad4,
-                        sitecastgroups[igroup].port);
-
-                      sitecast_handle_request(main_server, reqbuf, 
-                                              reqbuf_len, igroup,
-                                              &client_addr);
-                    }
-                }
-            }
-            
-       } /* **** end of main listening loop **** */
-}
-
-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;
-   apr_proc_t      *procnew = NULL;
-   apr_status_t     status;
-   char            *path;
-   const char *userdata_key = "sitecast_init";
-
-   apr_pool_userdata_get((void **) &procnew, userdata_key, 
-                         main_server->process->pool);
-
-   /* we only fork responder if one not already forked and we have at
-      least one GridSiteCastAlias defined. This means it is possible
-      to run a responder with no groups - listening on unicast only! */
-
-   if ((procnew == NULL) &&
-       (sitecastaliases[0].sitecast_url != NULL))
-     {
-       /* UDP multicast responder required but not yet started */
-
-       procnew = apr_pcalloc(main_server->process->pool, sizeof(*procnew));
-       apr_pool_userdata_set((const void *) procnew, userdata_key,
-                     apr_pool_cleanup_null, main_server->process->pool);
-
-       status = apr_proc_fork(procnew, pPool);
-
-       if (status < 0)
-         {
-           ap_log_error(APLOG_MARK, APLOG_CRIT, status, main_server,
-              "mod_gridsite: Failed to spawn SiteCast responder process");
-           return HTTP_INTERNAL_SERVER_ERROR;
-         }
-       else if (status == APR_INCHILD)
-         {
-           ap_log_error(APLOG_MARK, APLOG_NOTICE, status, main_server,
-              "mod_gridsite: Spawning SiteCast responder process");
-           sitecast_responder(main_server);
-           exit(-1);
-         }
-
-       apr_pool_note_subprocess(main_server->process->pool,
-                                procnew, APR_KILL_AFTER_TIMEOUT);
-     }
-
-   /* continue with normal HTTP/HTTPS servers */
-
-   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)
-      {
-        /* we do some GridSite OpenSSL magic for HTTPS servers */
-      
-        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");
-          }
-      }
-
-   /* create sessions directory if necessary */
-
-   path = ap_server_root_relative(pPool, sessionsdir);
-   apr_dir_make_recursive(path, APR_UREAD | APR_UWRITE | APR_UEXECUTE, pPool);
-   chown(path, unixd_config.user_id, unixd_config.group_id);
-
-   return OK;
-}
-      
-static void mod_gridsite_child_init(apr_pool_t *pPool, server_rec *pServer)
-{
-   apr_time_t cutoff_time;
-   apr_dir_t *dir;
-   char *filename;
-   apr_finfo_t finfo;
-   SSLSrvConfigRec *sc = ap_get_module_config(pServer->module_config, 
-                                                        &ssl_module);          
-   GRSTgaclInit();
-
-   /* expire old ssl creds files */
-                                    
-   if (sc != NULL)
-     {
-       cutoff_time = apr_time_now() 
-                      - apr_time_from_sec(sc->session_cache_timeout);
-
-       ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, pServer,
-                        "Cutoff time for ssl creds cache: %ld", 
-                        (long) apr_time_sec(cutoff_time));
-
-       if (apr_dir_open(&dir, 
-           ap_server_root_relative(pPool, sessionsdir), pPool) == APR_SUCCESS)
-         {
-           while (apr_dir_read(&finfo, 
-                        APR_FINFO_CTIME | APR_FINFO_NAME, dir) == APR_SUCCESS)
-                {
-                  if ((finfo.ctime < cutoff_time) &&
-                      (strncmp(finfo.name, "sslcreds-", 9) == 0))
-                    {
-                      filename = apr_pstrcat(pPool, 
-                                   ap_server_root_relative(pPool, sessionsdir),
-                                   "/", finfo.name, NULL);
-                    
-                      ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, pServer,
-                        "Remove %s from ssl creds cache", filename);
-
-                      apr_file_remove(filename, pPool);
-                    }
-                }
-
-           apr_dir_close(dir);
-         }       
-     }
-}
-
-static int mod_gridsite_handler(request_rec *r)
-{
-   mod_gridsite_dir_cfg *conf;
-    
-   conf = (mod_gridsite_dir_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 ap_unix_identity_t *mod_gridsite_get_suexec_id_doer(const request_rec *r)
-{
-   mod_gridsite_dir_cfg *conf;
-    
-   conf = (mod_gridsite_dir_cfg *)
-                    ap_get_module_config(r->per_dir_config, &gridsite_module);
-
-   if ((conf->execugid.uid != UNSET) && 
-       (conf->execmethod != NULL)) 
-     {
-     
-     /* also push GRST_EXEC_DIRECTORY into request environment here too */
-     
-       return &(conf->execugid);
-     }
-              
-   return NULL;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    /* 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_check_user_id(mod_gridsite_check_user_id, NULL, NULL, 
-                                                      APR_HOOK_REALLY_FIRST);
-
-    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);    
-    
-    ap_hook_get_suexec_identity(mod_gridsite_get_suexec_id_doer,
-                                NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA gridsite_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_gridsite_dir_config, /* dir config creater */
-    merge_gridsite_dir_config,  /* dir merger */
-    create_gridsite_srv_config, /* create 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/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/showx509exts.c b/org.gridsite.core/src/showx509exts.c
deleted file mode 100644 (file)
index 86f0290..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-
-#include <stdio.h>
-#include <openssl/x509.h>
-#include <openssl/x509_vfy.h>
-#include <openssl/err.h>
-#include <openssl/pem.h>
-
-#include <openssl/buffer.h>
-#include <openssl/objects.h>
-#include <openssl/asn1.h>
-#include <openssl/evp.h>
-#include <openssl/bio.h>
-
-#include "gridsite.h"
-
-#define MAXTAG 500
-                                 
-main()
-{
-   X509   *cert, *tmpcert;
-   STACK_OF(X509) *certstack = sk_X509_new_null();
-   FILE   *fp;
-   struct vomsdata *vd;
-   int    i, j, vomserror, i1, i2, j1, j2, lastobject;
-   X509_EXTENSION *ex;
-   ASN1_OBJECT *asnobject;
-   char s[80], *t;
-   ASN1_OCTET_STRING *asndata;
-   BIO *out;
-   unsigned char *p, *op, *tot, *p1, *p2, *q, *oq;
-   long len1, length1, len2, length2;
-   int tag,xclass,ret=0;
-   struct GRSTasn1TagList taglist[MAXTAG+1];
-   int lasttag=-1, itag;
-   
-   OpenSSL_add_all_algorithms();
-   ERR_load_crypto_strings();
-//   seed_prng();
-   
-//   fp = fopen("proxy-with-voms", "r");
-   fp = fopen("/tmp/x509up_u300", "r");
-   
-   cert = PEM_read_X509(fp, NULL, NULL, NULL);
-      
-   fclose(fp);
-
-   out=BIO_new(BIO_s_file());                                                                                        
-   BIO_set_fp(out,stdout,BIO_NOCLOSE|BIO_FP_TEXT);
-        
-   for (i = 0; i < X509_get_ext_count(cert); ++i)
-      {
-        lasttag=-1;
-      
-        ex = X509_get_ext(cert, i);
-
-        OBJ_obj2txt(s, sizeof(s), X509_EXTENSION_get_object(ex), 1);        
-        printf("%d OID=%s\n", i, s);
-        
-        asnobject = X509_EXTENSION_get_object(ex);
-        asndata = X509_EXTENSION_get_data(ex);
-
-        p1 = ASN1_STRING_data(asndata);
-        p = p1;
-        length1 = ASN1_STRING_length(asndata);
-              
-        GRSTasn1ParseDump(out, p1, length1, taglist, MAXTAG, &lasttag);
-
-{
-        int n, tag, xclass;
-        unsigned char *q, buf[100];
-        const unsigned char *dn, hash[EVP_MAX_MD_SIZE];
-        ASN1_OBJECT *obj = NULL;
-        const EVP_MD *m;
-        EVP_MD_CTX ctx;
-        char creds[501][101];
-        int lastcred = -1;
-   
-        itag = GRSTasn1SearchTaglist(taglist, lasttag, 
-               "-1-1-1-1-2-1-1-1-1-1-1-1");
-               
-        X509_NAME *xname;
-        
-        q = &p[taglist[itag].start];
-        
-        d2i_ASN1_OBJECT(&obj, &q, taglist[itag].length + 
-                                  taglist[itag].headerlength);
-
-        n  = OBJ_obj2nid(obj);
-        dn = OBJ_nid2sn(n);
-                         
-//        dn = X509_NAME_oneline(xname,NULL,0);
-        
-        printf("n=%d dn=%s obj2txt=%s\n", n, dn, OBJ_obj2txt(NULL,0,obj,1));
-
-        GRSTasn1GetX509Name(buf, 99, "-1-1-1-1-2-1-1-1-1-%d-1-%d", 
-                            p1, taglist, lasttag);
-        printf("%s\n", buf);
-        GRSTasn1GetX509Name(buf, 99, "-1-1-1-1-3-1-1-1-%d-1-%d", 
-                            p1, taglist, lasttag);
-        printf("%s\n", buf);
-
-        lastcred = -1;        
-        ret = GRSTx509ParseVomsExt(&lastcred, 500, 100, creds, 0, 2000040861,
-                             ex, 
-                  "/C=UK/O=eScience/OU=Manchester/L=HEP/CN=Andrew McNab",
-                  "/etc/grid-security/vomsdir");
-                  
-                  
-        printf("GRSTx509ParseVomsExt() returns %d, %d\n", ret, lastcred);
-                  
-        for (j=0; j <= lastcred;  ++j)
-         printf("cred=%d %s\n", j, creds[j]);
-        
-/*        
-        m = EVP_md5();
-        EVP_DigestInit(&ctx, m); 
-        EVP_DigestUpdate(&ctx, delegation_id, strlen(delegation_id));
-        EVP_DigestFinal(&ctx, hash, &delegation_id_len);
- */      
-}              
-
-/*       
-        itag = GRSTasn1SearchTaglist(taglist, &lasttag,
-                                     "1-1-1-1-1-7-1-2-1-2-1");
-                                    
-        printf("tag=%d %s %d %.*s\n",
-               itag, taglist[itag].treecoords, taglist[itag].tag,
-               taglist[itag].length, 
-               &p[taglist[itag].start+taglist[itag].headerlength]);
-*/
-      }
-}
diff --git a/org.gridsite.core/src/slashgrid.c b/org.gridsite.core/src/slashgrid.c
deleted file mode 100644 (file)
index de86328..0000000
+++ /dev/null
@@ -1,2475 +0,0 @@
-/*
-   Copyright (c) 2003-6, 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/       *
- *------------------------------------------------------------------*/
-
-#define _GNU_SOURCE
-#define _XOPEN_SOURCE
-
-#include <stdio.h>
-#include <string.h>
-#include <sys/mount.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <time.h>
-#include <syslog.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <sys/stat.h>
-#include <sys/vfs.h>
-#include <unistd.h>              
-#include <dirent.h>
-#include <malloc.h>
-#include <curl/curl.h>
-#include <pthread.h>
-#include <pwd.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-
-#include <fuse.h>
-
-#include "gridsite.h"
-
-#define GRST_SLASH_PIDFILE "/var/run/slashgrid.pid"
-
-#define GRST_SLASH_HEADERS "/var/spool/slashgrid/headers"
-#define GRST_SLASH_BLOCKS  "/var/spool/slashgrid/blocks"
-#define GRST_SLASH_TMP     "/var/spool/slashgrid/tmp"
-#define GRST_SLASH_DIRFILE "::DIR::"
-
-#define GRST_SLASH_HEAD   0
-#define GRST_SLASH_GET    1
-#define GRST_SLASH_PUT    2
-#define GRST_SLASH_DELETE 3
-#define GRST_SLASH_MOVE   4
-#define GRST_SLASH_TRUNC  5
-
-#define GRST_SLASH_HEADERS_EXPIRE      60
-#define GRST_SLASH_BLOCK_SIZE          4096
-#define GRST_SLASH_MAX_HANDLES         16
-
-#define GRST_SLASH_MAX_LOCATION                1024
-
-/* maximum number of SiteCast groups */
-#define GRST_SLASH_MAX_GROUPS          10
-
-#define GRST_SLASH_HTCP_PORT           777
-
-#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
-
-struct grst_body_text { char   *text;
-                        size_t  used;
-                        size_t  allocated; } ;
-
-struct grst_read_data { const char  *buf;
-                        off_t sent; 
-                        off_t maxsent; };
-
-struct grst_dir_list { char   *filename;
-                       off_t   length;
-                       int     length_set;
-                       time_t  modified;
-                       int     modified_set; } ;
-
-struct grst_request { int     retcode;                         
-                      char    location[GRST_SLASH_MAX_LOCATION+1];
-                      size_t  length;
-                      int     length_set;
-                      time_t  modified;                           
-                      int     modified_set; 
-                      void   *readfunction;
-                      void   *readdata;
-                      void   *writefunction;
-                      void   *writedata;
-                      size_t  infilesize;
-                      char   *errorbuffer;
-                      char   *url;
-                      int     method;
-                      char   *destination;
-                      off_t   start;
-                      off_t   finish; } ;
-
-struct grst_handle { pthread_mutex_t   mutex;
-                     CURL              *curl_handle;
-                     uid_t             uid;
-                     char              *proxyfile;
-                     time_t            last_used;
-                   }  handles[GRST_SLASH_MAX_HANDLES];
-int debugmode         = 0;
-int number_of_tries   = 1, sitecast_domain_len = 0;
-char *sitecast_domain = NULL, *sitecast_groups = NULL, *local_root = NULL,
-     *gridmapdir = NULL;
-uid_t local_uid = 0;
-gid_t local_gid = 0;
-
-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_request *request_data = (struct grst_request *) p;
-
-  realsize = size * nmemb;
-  s = malloc(realsize + 1);
-  memcpy(s, ptr, realsize);
-  s[realsize] = '\0';
-
-  if      (sscanf(s, "Content-Length: %d", &(request_data->length)) == 1) 
-            request_data->length_set = 1;
-  else if (sscanf(s, "HTTP/%f %d ", &f, &(request_data->retcode)) == 2) ;
-  else if (strncmp(s, "Location: ", 10) == 0) 
-      {
-        strncpy(request_data->location, &s[10], GRST_SLASH_MAX_LOCATION);
-        /* the location string is 1 byte longer and zeroed before use */
-        
-        for (q=request_data->location; *q != '\0'; ++q)
-         if ((*q == '\r') || (*q == '\n')) *q = '\0';
-      }
-  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)
-          {
-            request_data->modified = mktime(&modified_tm);
-            request_data->modified_set = 1;
-          }
-        else if (strptime(&s[15], "%a, %d-%b-%y %T GMT", &modified_tm) != NULL)
-          {
-            request_data->modified = mktime(&modified_tm);
-            request_data->modified_set = 1;
-          }
-        else if (strptime(&s[15], "%a %b %d %T %Y", &modified_tm) != NULL)
-          {
-            request_data->modified = mktime(&modified_tm);
-            request_data->modified_set = 1;
-          }
-      }
-    
-  free(s);
-  return realsize;
-}
-
-int debug_callback(CURL *handle, curl_infotype infotype, 
-                   char *rawmesg, size_t size, void *i)
-{
-  int   n;
-  char *mesg;
-
-  if ((infotype == CURLINFO_DATA_IN) ||
-      (infotype == CURLINFO_DATA_OUT)) return 0;
-
-  mesg = malloc(size + 1);
-  
-  for (n=0; n < size; ++n)
-     {
-       if ((rawmesg[n] == '\r') && (n >= size - 2)) mesg[n] = '\0';
-       else if (((rawmesg[n] == '\r') || (rawmesg[n] == '\n')) && 
-                (infotype == CURLINFO_HEADER_IN)) mesg[n] = '<';
-       else if (((rawmesg[n] == '\r') || (rawmesg[n] == '\n')) && 
-                (infotype == CURLINFO_HEADER_OUT)) mesg[n] = '>';
-       else if ((rawmesg[n] < ' ') || (rawmesg[n] >= 127)) mesg[n] = '.';
-       else mesg[n] = rawmesg[n];
-     }
-     
-  mesg[n] = '\0';
-
-  syslog(LOG_DEBUG, "%d %s%s%s%s", 
-                    *((int *) i), 
-                    (infotype == CURLINFO_HEADER_IN ) ? "<<" : "",
-                    (infotype == CURLINFO_HEADER_OUT) ? ">>" : "",
-                    (infotype == CURLINFO_TEXT      ) ? "**" : "",
-                    mesg);
-
-  free(mesg);  
-  return 0;
-}                  
-
-
-int translate_sitecast_url(char **sitecast_url, char *raw_url)
-{
-  int request_length, response_length, i, ret, s, igroup;
-  struct sockaddr_in srv, from;
-  socklen_t fromlen;
-#define MAXBUF 8192  
-  char *request, response[MAXBUF], *p;
-  GRSThtcpMessage msg;
-  struct timeval start_timeval, wait_timeval;
-  struct grst_sitecast_group 
-   { unsigned char quad1; unsigned char quad2;
-     unsigned char quad3; unsigned char quad4;
-     int port; int timewait; int ttl; } groups[GRST_SLASH_MAX_GROUPS];
-  fd_set readsckts;
-
-  p = sitecast_groups;
-  igroup = -1;
-
-  for (igroup=-1; igroup+1 < GRST_SLASH_MAX_GROUPS;)
-     {  
-       /* defaults for when sscanf fails to find all parameters */
-
-       groups[igroup+1].port     = GRST_SLASH_HTCP_PORT;
-       groups[igroup+1].timewait = 1;
-       groups[igroup+1].ttl      = 1;
-       
-       ret = sscanf(p, "%d.%d.%d.%d:%d:%d:%d", 
-                 &(groups[igroup+1].quad1),
-                 &(groups[igroup+1].quad2),    
-                 &(groups[igroup+1].quad3),
-                 &(groups[igroup+1].quad4),    
-                 &(groups[igroup+1].port),
-                 &(groups[igroup+1].ttl),
-                 &(groups[igroup+1].timewait));
-
-       if (ret == 0) break; /* end of list ? */
-         
-       if (ret < 5)
-         {
-           syslog(LOG_WARNING,
-                  "Failed parsing multicast group parameter %s\n", p);
-           return GRST_RET_FAILED;
-         }
-         
-       ++igroup;  
-       
-       if ((p = index(p, ',')) == NULL) break;       
-       ++p;
-     }
-
-  if (igroup == -1)
-    {
-      syslog(LOG_WARNING, "Failed parsing multicast group parameter %s\n", p);
-      return GRST_RET_FAILED;
-    }
-
-  if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) 
-    {
-      syslog(LOG_WARNING, "Failed to open SiteCast UDP socket\n");
-      return GRST_RET_FAILED;
-    }
-
-  /* loop through multicast groups since we need to take each 
-     ones timewait into account */
-
-  gettimeofday(&start_timeval, NULL);
-
-  for (i=0; i <= igroup; ++i)
-     {
-       if (debugmode)
-        syslog(LOG_DEBUG, "Querying multicast group %d.%d.%d.%d:%d:%d:%d\n",
-                groups[i].quad1, groups[i].quad2,
-                groups[i].quad3, groups[i].quad4,
-                groups[i].port, groups[i].ttl,
-                groups[i].timewait);
-        
-       bzero(&srv, sizeof(srv));
-       srv.sin_family = AF_INET;
-       srv.sin_port = htons(groups[i].port);
-       srv.sin_addr.s_addr = htonl(groups[i].quad1*0x1000000
-                                 + groups[i].quad2*0x10000
-                                 + groups[i].quad3*0x100
-                                 + groups[i].quad4);
-
-       /* send off queries, one for each source file */
-
-       GRSThtcpTSTrequestMake(&request, &request_length, 
-                                   (int) (start_timeval.tv_usec),
-                                   "GET", raw_url, "");
-
-       sendto(s, request, request_length, 0, 
-                       (struct sockaddr *) &srv, sizeof(srv));
-
-       free(request);
-          
-       /* reusing wait_timeval is a Linux-specific feature of select() */
-       wait_timeval.tv_usec = 0;
-       wait_timeval.tv_sec  = groups[i].timewait;
-
-       while ((wait_timeval.tv_sec > 0) || (wait_timeval.tv_usec > 0))
-            {
-              FD_ZERO(&readsckts);
-              FD_SET(s, &readsckts);
-  
-              ret = select(s + 1, &readsckts, NULL, NULL, &wait_timeval);
-
-              if (ret > 0)
-                {
-                  response_length = recvfrom(s, response, MAXBUF,
-                                             0, &from, &fromlen);
-  
-                  if ((GRSThtcpMessageParse(&msg, response, response_length) 
-                                                      == GRST_RET_OK) &&
-                      (msg.opcode == GRSThtcpTSTop) && (msg.rr == 1) && 
-                      (msg.trans_id == (int) start_timeval.tv_usec) &&
-                      (msg.resp_hdrs != NULL) &&
-                      (GRSThtcpCountstrLen(msg.resp_hdrs) > 12))
-                    { 
-                      /* found one */ 
-
-                      if (debugmode)
-                        syslog(LOG_DEBUG, "Sitecast %s -> %.*s\n",
-                                raw_url, 
-                                GRSThtcpCountstrLen(msg.resp_hdrs) - 12,
-                                &(msg.resp_hdrs->text[10]));
-                      
-                      asprintf(sitecast_url, "%.*s",
-                          GRSThtcpCountstrLen(msg.resp_hdrs) - 12, 
-                          &(msg.resp_hdrs->text[10]));
-                          
-                      return GRST_RET_OK;
-                    }
-                }
-            }
-     }
-     
-  return GRST_RET_FAILED;
-}
-
-char *check_x509_user_proxy(pid_t pid)
-{
-  int fd;
-  char file[80], *proxyfile = NULL, *pid_environ, *p;
-  struct stat statbuf1, statbuf2;
-  
-  snprintf(file, sizeof(file), "/proc/%d/environ", (int) pid);
-  
-  if ((fd = open(file, O_RDONLY)) == -1) return NULL;
-
-  if (debugmode) syslog(LOG_DEBUG, "Opened for %d environ in %s", (int) pid, file);
-  
-  fstat(fd, &statbuf1);
-  
-  pid_environ = malloc(statbuf1.st_size + 1);
-  
-  read(fd, pid_environ, statbuf1.st_size);
-  
-  close(fd);
-  
-  pid_environ[statbuf1.st_size] = '\0';
-    
-  for (p = pid_environ; p < pid_environ + statbuf1.st_size; p += (strlen(p) + 1))
-     {
-       if (debugmode) syslog(LOG_DEBUG, "Examine %s in environ", p);
-  
-       if (strncmp(p, "X509_USER_PROXY=", 16) == 0)
-         {
-           if ((p[16] != '\0') &&
-               (stat(&p[16], &statbuf2) == 0)) proxyfile = strdup(&p[16]);
-           break;
-         }
-     }
-  
-  free(pid_environ);
-
-  return proxyfile;    
-}
-
-char *mapdir_uid_to_dn(uid_t uid)
-{
-     int            ret;
-     char           *firstlinkpath, *otherlinkpath, *dn, *buf = NULL;
-     struct dirent  *mapdirentry;
-     DIR            *mapdirstream;
-     ino_t          firstinode;
-     long           buflen;
-     struct stat    statbuf;
-     struct passwd  pw, *pwp;
-     
-     if (gridmapdir == NULL) return NULL;
-
-     buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
-     buf = malloc(buflen);
-
-     if ((buflen <= 0) ||
-         (getpwuid_r(uid, &pw, buf, buflen, &pwp) != 0) ||
-         (pw.pw_name == NULL))
-       {
-         if (buf != NULL) free(buf);
-         return NULL;
-       }
-
-     asprintf(&firstlinkpath, "%s/%s", gridmapdir, pw.pw_name);
-     ret = stat(firstlinkpath, &statbuf);
-
-     free(firstlinkpath);
-
-     if ((ret != 0) || (statbuf.st_nlink != 2))
-       {
-         free(buf);
-         return NULL;
-       }
-
-     firstinode = statbuf.st_ino; /* save for comparisons */
-
-     mapdirstream = opendir(gridmapdir);
-
-     if (mapdirstream != NULL)
-       {
-         while ((mapdirentry = readdir(mapdirstream)) != NULL)
-              {
-                 if (strcmp(mapdirentry->d_name, pw.pw_name) == 0) continue;
-
-                 if (mapdirentry->d_ino == firstinode)
-                   {
-                      asprintf(&otherlinkpath, "%s/%s", gridmapdir,
-                                            mapdirentry->d_name);
-
-                      utime(otherlinkpath, (struct utimbuf *) NULL);
-                      free(otherlinkpath);
-                      
-                      dn = GRSThttpUrlDecode(mapdirentry->d_name);
-            
-                      if (debugmode) syslog(LOG_DEBUG, "mapdir_uid_to_dn "
-                                  "maps %s(%d) to %s", pw.pw_name, uid, dn);
-
-                      closedir(mapdirstream);
-                      free(buf);
-                      return dn;
-                   }
-              }
-
-         closedir(mapdirstream);
-       }
-
-     free(buf);
-     return NULL;
-}
-
-
-int perform_request(struct grst_request *request_data,
-                    struct fuse_context *fuse_ctx)
-{
-  int                ret, i, j, itry, ishttps = 0;
-  char              *proxyfile = NULL, *range_header = NULL, *url;
-  struct stat        statbuf;
-  struct curl_slist *headers_list = NULL;
-
-  if (strncmp(request_data->url, "https://", 8) == 0) /* HTTPS options */
-    {
-// check for X509_USER_PROXY in that PID's environ too
-      ishttps = 1;
-
-      if ((proxyfile = check_x509_user_proxy(fuse_ctx->pid)) == NULL)
-        {
-          asprintf(&proxyfile, "/tmp/x509up_u%d", fuse_ctx->uid);
-          /* if proxyfile is used, it will be referenced by handles[].proxyfile
-             and freed when this handle is eventually freed */
-
-          if ((stat(proxyfile, &statbuf) != 0) ||
-              (statbuf.st_uid != fuse_ctx->uid))
-            {
-              free(proxyfile);
-              proxyfile = NULL;
-            }
-        }
-    }
-
-  if (debugmode && (proxyfile != NULL))
-       syslog(LOG_DEBUG, "Using proxy file %s", proxyfile);
-
-  /* try to find an existing handle for this uid/proxyfile */
-
-  for (i=0; i < GRST_SLASH_MAX_HANDLES; ++i)
-     {
-       if ((handles[i].curl_handle != NULL)  &&
-           (handles[i].uid == fuse_ctx->uid) &&
-           (((handles[i].proxyfile == NULL) && (proxyfile == NULL)) ||
-            ((handles[i].proxyfile != NULL) && (proxyfile != NULL) &&
-             (strcmp(handles[i].proxyfile, proxyfile) == 0))))
-         {
-           break;
-         }
-     }
-     
-  if (i >= GRST_SLASH_MAX_HANDLES) /* no existing match found */
-    {
-      i=0;
-    
-      for (j=0; j < GRST_SLASH_MAX_HANDLES; ++j)
-         {
-           if (handles[j].curl_handle == NULL) /* unused slot */
-             {
-               i = j;
-               break;
-             }
-             
-           if (handles[j].last_used < handles[i].last_used) i = j;
-         }
-    }
-
-  /* now lock this handle and recheck settings inside the mutex lock */
-
-  pthread_mutex_lock(&(handles[i].mutex)); /* unlock just before return */
-
-  if ((handles[i].curl_handle == NULL)  ||
-      (handles[i].uid != fuse_ctx->uid) ||
-      (((handles[i].proxyfile != NULL) || (proxyfile != NULL)) &&
-       ((handles[i].proxyfile == NULL) || (proxyfile == NULL) ||
-        (strcmp(handles[i].proxyfile, proxyfile) != 0))))
-    {
-      /* we do need to initialise this handle */
-      
-      handles[i].uid = fuse_ctx->uid;
-
-      if (handles[i].curl_handle != NULL)
-                              curl_easy_cleanup(handles[i].curl_handle);
-      handles[i].curl_handle = curl_easy_init();
-      
-      if (handles[i].proxyfile != NULL) free(handles[i].proxyfile);
-      handles[i].proxyfile = proxyfile; /* proxyfile might be NULL itself */
-      
-      if (handles[i].proxyfile != NULL)
-        {
-          curl_easy_setopt(handles[i].curl_handle, CURLOPT_SSLCERTTYPE, "PEM");
-          curl_easy_setopt(handles[i].curl_handle, CURLOPT_SSLCERT,
-                                                    handles[i].proxyfile);
-          curl_easy_setopt(handles[i].curl_handle, CURLOPT_SSLKEYTYPE, "PEM");
-          curl_easy_setopt(handles[i].curl_handle, CURLOPT_SSLKEY,  
-                                                    handles[i].proxyfile);
-        }
-      else
-        {
-          curl_easy_setopt(handles[i].curl_handle, CURLOPT_SSLKEYTYPE,  "ENG");
-          curl_easy_setopt(handles[i].curl_handle, CURLOPT_SSLCERTTYPE, "ENG");
-          curl_easy_setopt(handles[i].curl_handle, CURLOPT_SSLCERT,     NULL);
-        }
-
-      if (debugmode)
-        {
-          curl_easy_setopt(handles[i].curl_handle, CURLOPT_VERBOSE, 1);
-          curl_easy_setopt(handles[i].curl_handle, CURLOPT_DEBUGFUNCTION,
-                                                          debug_callback);
-        }
-
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_USERAGENT, 
-                       "SlashGrid http://www.gridsite.org/slashgrid/");
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_FOLLOWLOCATION, 0);
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_HEADERFUNCTION, headers_callback);
-
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_CAPATH, 
-                                        "/etc/grid-security/certificates");
-
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_SSL_VERIFYPEER, 2);
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_SSL_VERIFYHOST, 2);
-    }   
-
-  if (request_data->method == GRST_SLASH_GET)
-    {
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_CUSTOMREQUEST, NULL);
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_NOBODY,  0);
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_HTTPGET, 1);
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_UPLOAD,  0);
-    }
-  else if ((request_data->method == GRST_SLASH_PUT) || 
-           (request_data->method == GRST_SLASH_TRUNC))
-    {
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_CUSTOMREQUEST, NULL);
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_NOBODY,  0);
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_HTTPGET, 0);
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_UPLOAD,  1);
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_INFILESIZE,  
-                                            (long) request_data->infilesize);
-    }
-  else if (request_data->method == GRST_SLASH_DELETE)
-    {
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_NOBODY,  0);
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_HTTPGET, 0);
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_UPLOAD,  0);
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_CUSTOMREQUEST, "DELETE");
-    }
-  else if (request_data->method == GRST_SLASH_MOVE)
-    {
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_NOBODY,  0);
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_HTTPGET, 0);
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_UPLOAD,  0);
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_CUSTOMREQUEST, "MOVE");
-    }
-  else /* default or GRST_SLASH_HEAD */
-    {
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_CUSTOMREQUEST, NULL);
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_NOBODY,  1);
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_HTTPGET, 0);
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_UPLOAD,  0);
-    }
-
-  curl_easy_setopt(handles[i].curl_handle, CURLOPT_WRITEHEADER, request_data);
-  
-  if (request_data->errorbuffer != NULL)
-        curl_easy_setopt(handles[i].curl_handle, CURLOPT_ERRORBUFFER,
-                                      request_data->errorbuffer);
-
-  if (debugmode)
-        curl_easy_setopt(handles[i].curl_handle, CURLOPT_DEBUGDATA, &i);
-
-  curl_easy_setopt(handles[i].curl_handle, CURLOPT_READFUNCTION, request_data->readfunction);
-  curl_easy_setopt(handles[i].curl_handle, CURLOPT_READDATA, request_data->readdata);
-  curl_easy_setopt(handles[i].curl_handle, CURLOPT_WRITEFUNCTION, request_data->writefunction);
-  curl_easy_setopt(handles[i].curl_handle, CURLOPT_WRITEDATA, request_data->writedata);
-
-  if ((request_data->start >= 0) && 
-      (request_data->finish >= request_data->start))
-    {
-      if (request_data->method == GRST_SLASH_PUT)
-           asprintf(&range_header, "Content-Range: bytes %ld-%ld/*", 
-               (long) request_data->start, (long) request_data->finish);
-      else if (request_data->method == GRST_SLASH_TRUNC)
-           asprintf(&range_header, "Content-Range: bytes *-*/%ld", 
-               (long) request_data->finish);
-      else asprintf(&range_header, "Range: bytes=%ld-%ld", 
-               (long) request_data->start, (long) request_data->finish);
-
-      headers_list = curl_slist_append(headers_list, range_header);
-      curl_easy_setopt(handles[i].curl_handle, CURLOPT_HTTPHEADER, headers_list);
-    }
-  else curl_easy_setopt(handles[i].curl_handle, CURLOPT_HTTPHEADER, NULL);
-
-  /* retry loop */
-
-  for (itry=1; itry <= number_of_tries; ++itry)
-     {
-       request_data->length_set   = 0;
-       request_data->modified_set = 0;
-       request_data->retcode      = 0;
-       request_data->location[0]  = '\0';
-    
-       if ((sitecast_domain != NULL) &&
-           (sitecast_groups != NULL) &&
-
-           ((request_data->method == GRST_SLASH_HEAD) ||
-            (request_data->method == GRST_SLASH_GET)) &&
-
-           ((!ishttps && 
-             (strncmp(&(request_data->url[7]), sitecast_domain, 
-                                   sitecast_domain_len) == 0) &&
-             ((request_data->url[7+sitecast_domain_len] == ':') ||
-              (request_data->url[7+sitecast_domain_len] == '/')) )
-                                                                   ||
-            (ishttps &&
-             (strncmp(&(request_data->url[8]), sitecast_domain, 
-                                    sitecast_domain_len) == 0) &&
-             ((request_data->url[8+sitecast_domain_len] == ':') ||
-              (request_data->url[8+sitecast_domain_len] == '/')) ) ) )
-         {
-           if (debugmode)
-             syslog(LOG_DEBUG, "Apply SiteCast to URL %s", request_data->url);
-
-           if (translate_sitecast_url(&url, request_data->url) ==
-                GRST_RET_OK)
-             {
-               curl_easy_setopt(handles[i].curl_handle,
-                                            CURLOPT_URL, url);
-               ret = curl_easy_perform(handles[i].curl_handle);
-
-               free(url);               
-             }
-           else
-             {
-               ret = 1;
-               request_data->retcode = 404; /* HTTP not found */
-             }
-         }
-       else
-         {
-           curl_easy_setopt(handles[i].curl_handle,
-                                            CURLOPT_URL, request_data->url);
-           ret = curl_easy_perform(handles[i].curl_handle);
-         }
-
-// tests on whether to retry due to server error / timeout go here...
-       break;
-     }
-
-  if (headers_list != NULL) curl_slist_free_all(headers_list);
-  if (range_header != NULL) free(range_header);
-
-  pthread_mutex_unlock(&(handles[i].mutex));
-  
-  return ret;
-}
-
-size_t rawbody_callback(void *ptr, size_t size, size_t nmemb, void *data)
-{
-  if ( ((struct grst_body_text *) data)->used + size * nmemb >=
-                             ((struct grst_body_text *) data)->allocated )
-    {
-      ((struct grst_body_text *) data)->allocated = 
-        ((struct grst_body_text *) data)->used + size * nmemb + 4096;
-
-      ((struct grst_body_text *) data)->text = 
-         realloc( ((struct grst_body_text *) data)->text,
-                  ((struct grst_body_text *) data)->allocated );
-    }
-    
-  memcpy( &( ((struct grst_body_text *) 
-                 data)->text[((struct grst_body_text *) data)->used] ),
-          ptr, size * nmemb);
-          
-  ((struct grst_body_text *) data)->used += size * nmemb;
-  
-  return size * nmemb;
-}
-
-size_t null_callback(void *ptr, size_t size, size_t nmemb, void *data)
-{
-  return size * nmemb;
-}
-
-size_t read_data_callback(void *ptr, size_t size, size_t nmemb, void *data)
-{
-  size_t sent;
-  
-  if (((struct grst_read_data *) data)->sent 
-        >= ((struct grst_read_data *) data)->maxsent) return 0;
-        
-  if (size * nmemb + ((struct grst_read_data *) data)->sent 
-        >= ((struct grst_read_data *) data)->maxsent)
-    {
-      sent = ((struct grst_read_data *) data)->maxsent 
-             - ((struct grst_read_data *) data)->sent;
-    }
-  else sent = size * nmemb;        
-
-  memcpy(ptr, 
-         ((struct grst_read_data *) data)->buf +
-         ((struct grst_read_data *) data)->sent,
-         sent);
-
-  ((struct grst_read_data *) data)->sent += sent;
-  
-  return sent;
-}
-
-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);
-                   
-                   if ((list[used].filename != NULL) &&
-                       ((list[used].filename[0] == '\0') ||
-                        (strcmp(list[used].filename, "/") == 0)))
-                     {
-                       free(list[used].filename);
-                       list[used].filename = NULL;
-                     }
-                 }
-                 
-               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;  
-}
-
-#if 0
-static 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;
-}
-#endif
-
-GRSTgaclPerm get_gaclPerm(struct fuse_context *fuse_ctx, char *path)
-{
-  GRSTgaclPerm perm = GRST_PERM_NONE; 
-  GRSTgaclCred *cred;
-  GRSTgaclUser *user = NULL;
-  GRSTgaclAcl  *acl;
-  char *dn = NULL;
-
-// eventually want a UID cache here...
-
-/*
-// want root to be able to read anything, and to write to anything under
-// local_root - need to test if talking about a symbolic link??
-  if (fuse_ctx->uid == 0) 
-    {
-      if (debugmode) syslog(LOG_DEBUG, 
-              "get_gaclPerm returns perm=%d for root user", GRST_PERM_ALL);
-      return GRST_PERM_ALL;
-    }
-*/
-  dn = mapdir_uid_to_dn(fuse_ctx->uid);
-  
-  if (dn != NULL)
-    {
-      cred = GRSTgaclCredNew("person");
-      GRSTgaclCredAddValue(cred, "dn", dn);
-      user = GRSTgaclUserNew(cred);
-      free(dn);
-    }   
-  
-  acl  = GRSTgaclAclLoadforFile(path); 
-  perm = GRSTgaclAclTestUser(acl, user);
-  GRSTgaclAclFree(acl);
-  GRSTgaclUserFree(user);
-  
-  if (strstr(path, GRST_ACL_FILE) != NULL) perm &= ~GRST_PERM_WRITE;
-
-  if (debugmode) syslog(LOG_DEBUG, "get_gaclPerm returns perm=%d", perm);
-
-  return perm;            
-}
-
-int read_headers_from_cache(struct fuse_context *fuse_ctx, char *filename, 
-                            off_t *length, time_t *modified)
-{
-  char *encoded_filename, *disk_filename;
-  int   len;
-  long  content_length, last_modified;
-  FILE *fp;
-  struct stat statbuf;
-  time_t now;
-  
-  encoded_filename = GRSThttpUrlMildencode(filename);
-  
-  len = strlen(encoded_filename);
-
-  if (encoded_filename[len - 1] == '/') /* a directory */
-       asprintf(&disk_filename, "%s/%d%s%s", 
-                GRST_SLASH_HEADERS, fuse_ctx->uid, encoded_filename, GRST_SLASH_DIRFILE);
-  else asprintf(&disk_filename, "%s/%d%s%s", 
-                GRST_SLASH_HEADERS, fuse_ctx->uid, encoded_filename);
-
-  free(encoded_filename);
-
-// Change to fstat for the benefit of multiple threads:
-
-  if (stat(disk_filename, &statbuf) != 0) /* no cache file to read */
-    {
-      free(disk_filename);
-      return 0;
-    }
-
-  time(&now);
-
-  if (statbuf.st_mtime < now - GRST_SLASH_HEADERS_EXPIRE)
-    {
-      unlink(disk_filename); /* tidy up expired cache file */
-      free(disk_filename);
-      return 0;
-    }      
-
-  last_modified  = 0;
-  content_length = 0;
-
-  if (debugmode) syslog(LOG_DEBUG, "Opening %s from cache", disk_filename);
-
-  fp = fopen(disk_filename, "r");
-  free(disk_filename);
-
-  if (fp != NULL)
-    {
-      fscanf(fp, "content-length=%ld last-modified=%ld ", 
-                 &content_length, &last_modified);
-      fclose(fp);
-
-      if (debugmode) syslog(LOG_DEBUG, "content-length=%ld last-modified=%ld", 
-                            content_length, last_modified);
-
-      *length   = (off_t)  content_length;
-      *modified = (time_t) last_modified;
-
-      return 1;
-    }
-
-  return 0;
-}
-
-int write_headers_to_cache(struct fuse_context *fuse_ctx, char *filename, 
-                           off_t length, time_t modified)
-{
-  int         fd, len;
-  char       *tempfile, *headline, *encoded_filename, *p, *newdir,
-             *new_filename;
-  struct stat statbuf;
-
-  asprintf(&tempfile, "%s/headers-XXXXXX", GRST_SLASH_TMP);
-  fd = mkstemp(tempfile);
-
-  if (fd == -1)
-    {
-      free(tempfile);
-      return 0;
-    }
-
-  asprintf(&headline, "content-length=%ld last-modified=%ld \n", 
-                                (long) length, (long) modified);
-  
-  if ((write(fd, headline, strlen(headline)) == -1) ||
-      (close(fd) == -1))
-    {
-      free(tempfile);
-      free(headline);
-      return 0;
-    }
-
-  free(headline);
-                     
-  encoded_filename = GRSThttpUrlMildencode(filename);
-
-// need to protect against .. ?
-   
-  for (p = encoded_filename; *p != '\0'; ++p)
-     {  
-       if (*p != '/') continue;
-     
-       *p = '\0';
-       asprintf(&newdir, "%s/%d%s", GRST_SLASH_HEADERS, fuse_ctx->uid, encoded_filename);
-       *p = '/';
-           
-       if (stat(newdir, &statbuf) == 0)
-         {
-           if (!S_ISDIR(statbuf.st_mode)) /* exists already - not a directory! */
-             {
-               unlink(newdir);
-               mkdir(newdir, S_IRUSR | S_IWUSR | S_IXUSR);
-             }
-           /* else it already exists as a directory - so ok */
-         }
-       else mkdir(newdir, S_IRUSR | S_IWUSR | S_IXUSR);
-
-       free(newdir);
-     }
-
-  len = strlen(encoded_filename);
-
-  if (encoded_filename[len - 1] == '/') /* a directory */
-       asprintf(&new_filename, "%s/%d%s%s", 
-                GRST_SLASH_HEADERS, fuse_ctx->uid, encoded_filename, GRST_SLASH_DIRFILE);
-  else asprintf(&new_filename, "%s/%d%s", 
-                GRST_SLASH_HEADERS, fuse_ctx->uid, encoded_filename);
-
-  free(encoded_filename);
-  
-  if ((stat(new_filename, &statbuf) == 0) && S_ISDIR(statbuf.st_mode))
-    {
-// need change this to do it recursively in case any files/subdirs too
-      rmdir(new_filename);
-    }
-
-  rename(tempfile, new_filename);
-
-  if (debugmode) syslog(LOG_DEBUG, "Added %s to cache (%ld %ld)\n", 
-                                   new_filename, length, modified);
-
-  free(tempfile);
-  free(new_filename);
-
-  return 1;
-}
-
-static int slashgrid_readdir(const char *path, void *buf, 
-                             fuse_fill_dir_t filler,
-                             off_t offset, struct fuse_file_info *fi)
-{
-  (void) offset;
-  (void) fi;
-
-  int          anyerror = 0, thiserror, i, ilast, len, isdir;
-  const char  *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", 
-                            "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
-  char        *s, *url, errorbuffer[CURL_ERROR_SIZE+1] = "", *dirname, *p;
-  struct       grst_body_text  rawindex;
-  struct       grst_dir_list   *list;
-  struct       grst_request request_data;
-  struct       tm               modified_tm;
-  struct       stat             stat_tmp;
-  time_t                        now;
-  struct fuse_context fuse_ctx;
-  struct dirent **dirlist;
-  GRSTgaclPerm  perm;
-  
-  memcpy(&fuse_ctx, fuse_get_context(), sizeof(struct fuse_context));
-
-  if (debugmode) syslog(LOG_DEBUG, "in slashgrid_readdir");
-
-  if (strcmp(path, "/") == 0)
-    {
-      filler(buf, ".",     NULL, 0);
-      filler(buf, "..",    NULL, 0);
-      filler(buf, "http",  NULL, 0);
-      filler(buf, "https", NULL, 0);
-      return 0;
-    }
-    
-  if ((strcmp(path, "/http") == 0) || (strcmp(path, "/https") == 0))
-    {
-      filler(buf, ".",     NULL, 0);
-      filler(buf, "..",    NULL, 0);
-
-      asprintf(&dirname, "%s/%d%s", GRST_SLASH_HEADERS, fuse_ctx.uid, path);
-      ilast = scandir(dirname, &dirlist, 0, alphasort) - 1;
-
-      for (i=0; i <= ilast; ++i)
-         {
-           if (dirlist[i]->d_name[0] != '.')
-                 filler(buf, dirlist[i]->d_name, NULL, 0);
-           free(dirlist[i]);
-         }
-         
-      if (ilast >= 0) free(dirlist);      
-      free(dirname);
-    
-      return 0;
-    }
-  else if ((local_root != NULL) &&
-           ((strcmp(path, "/local") == 0) || 
-            (strncmp(path, "/local/", 7) == 0)))
-    {
-      asprintf(&dirname, "%s%s/", local_root, &path[6]);
-
-      perm = get_gaclPerm(&fuse_ctx, dirname);
-
-      if (!GRSTgaclPermHasList(perm))
-        {
-          free(dirname);
-          return -EACCES;
-        }
-        
-      ilast = scandir(dirname, &dirlist, 0, alphasort) - 1;
-      free(dirname);
-
-      if (ilast < 0) return -ENOENT;
-              
-//      filler(buf, ".",     NULL, 0);
-//      filler(buf, "..",    NULL, 0);
-
-      for (i=0; i <= ilast; ++i)
-         {
-//           if (dirlist[i]->d_name[0] != '.')
-                 filler(buf, dirlist[i]->d_name, NULL, 0);
-           free(dirlist[i]);
-         }
-         
-      free(dirlist);      
-
-      return 0;
-    }
-  else if (strncmp(path, "/http/", 6) == 0)
-    asprintf(&url, "http://%s/", &path[6]);
-  else if (strncmp(path, "/https/", 7) == 0)
-    asprintf(&url, "https://%s/", &path[7]);
-  else return -ENOENT;
-
-  rawindex.text      = NULL;
-  rawindex.used      = 0;
-  rawindex.allocated = 0;
-
-  bzero(&request_data, sizeof(struct grst_request));
-  request_data.writefunction = rawbody_callback;
-  request_data.writedata     = (void *) &rawindex;
-  request_data.errorbuffer   = errorbuffer;
-  request_data.url           = url;
-  request_data.method        = GRST_SLASH_GET;
-  request_data.start         = -1;
-  request_data.finish        = -1;
-  
-  if (debugmode) syslog(LOG_DEBUG, "Get directory listing from URL %s", url);
-  
-  thiserror = perform_request(&request_data, &fuse_ctx);
-
-  if ((thiserror != 0) ||
-           (request_data.retcode <  200) ||
-           (request_data.retcode >= 300))
-         {
-           if (debugmode)
-                syslog(LOG_DEBUG, "... curl error: %s (%d), HTTP error: %d\n",
-                       errorbuffer, thiserror, request_data.retcode);
-           
-           if (thiserror != 0) anyerror = thiserror;
-           else                anyerror = request_data.retcode;
-
-           if (request_data.retcode == 403) return -EACCES;
-           else return -ENOENT; 
-/* memory clean up still needed here!!!!!! */
-         }
-  else
-         {
-           time(&now);
-
-           filler(buf, ".", NULL, 0);
-           filler(buf, "..", NULL, 0);
-
-           rawindex.text[rawindex.used] = '\0';
-
-// we need to get this out of headers cache instead iff still valid
-
-           list  = index_to_dir_list(rawindex.text, url);
-           ilast = -1;
-
-           for (i=0; list[i].filename != NULL; ++i)
-              {
-                if (debugmode) syslog(LOG_DEBUG, 
-                         "in slashgrid_readdir, list[%d].filename=%s",
-                         i, list[i].filename);
-              
-                if (strncmp(list[i].filename, "mailto:", 7) == 0) continue;
-
-                len = strlen(list[i].filename);
-                if (list[i].filename[len-1] == '/')
-                  {
-                    isdir = 1;
-                    list[i].filename[len-1] = '\0';
-                  }
-                else 
-                  {
-                    isdir = 0;
-                    
-                    if ((p = index(list[i].filename, '?')) != NULL) *p = '\0';
-                  }
-                
-                /* skip over duplicates */
-                
-                if ((ilast >= 0) && 
-                    (strcmp(list[i].filename, list[ilast].filename) == 0))
-                                                                 continue;
-                ilast=i; /* last distinct entry */
-                
-                if (debugmode) syslog(LOG_DEBUG, 
-                         "in slashgrid_readdir, list[%d].filename=%s not dup",
-                         i, list[i].filename);
-
-                asprintf(&s, "%s/%s", path, list[i].filename);
-                write_headers_to_cache(&fuse_ctx, s, list[i].length, 
-                                       list[i].modified);
-                free(s);
-           
-                bzero(&stat_tmp, sizeof(struct stat));
-
-                stat_tmp.st_size  = list[i].length;
-                stat_tmp.st_mtime = list[i].modified;
-                stat_tmp.st_ctime = list[i].modified;
-                stat_tmp.st_atime = now;
-                stat_tmp.st_mode  = isdir ? 0777 : 0666;
-                filler(buf, list[i].filename, &stat_tmp, 0);
-
-                if (debugmode) syslog(LOG_DEBUG, 
-                         "in slashgrid_readdir, filler list[%d].filename=%s %lu %lu",
-                         i, list[i].filename, stat_tmp.st_size, stat_tmp.st_mtime);
-              }
-         }
-     
-  if (debugmode) syslog(LOG_DEBUG, 
-                         "in slashgrid_readdir, return 0");
-  return 0;
-}
-
-static int slashgrid_getattr(const char *rawpath, struct stat *stbuf)
-{
-  int          anyerror = 0, thiserror, i, ilast, len, ret;
-  char        *s, *url, *path, errorbuffer[CURL_ERROR_SIZE+1] = "", *p;
-  struct       grst_dir_list   *list;
-  struct       grst_request request_data;
-  struct       tm               modified_tm;
-  struct       stat             stat_tmp;
-  time_t                        now;
-  GRSTgaclPerm dirperm, perm;
-
-  struct fuse_context fuse_ctx;
-
-  memcpy(&fuse_ctx, fuse_get_context(), sizeof(struct fuse_context));
-
-  if (debugmode) syslog(LOG_DEBUG, 
-                         "in slashgrid_getattr, rawpath=%s, UID=%d\n",
-                         rawpath, fuse_ctx.uid);
-
-  memset(stbuf, 0, sizeof(struct stat));
-  stbuf->st_mode  = S_IFREG | 0755;
-  stbuf->st_nlink = 1;
-  
-  if ((strcmp(rawpath, "/")      == 0) ||
-      (strcmp(rawpath, "/http")  == 0) ||
-      (strcmp(rawpath, "/https") == 0) ||
-      ((local_root != NULL) && (strcmp(rawpath, "/local") == 0)))
-    {
-      stbuf->st_mode = S_IFDIR | 0755;
-              
-      return 0; /* Empty top level directories: OK */
-    }
-  else if (strncmp(rawpath, "/http/", 6) == 0)
-    {
-      if (index(&rawpath[6], '/') == NULL) /* top directory for remote server */
-        {
-          stbuf->st_mode = S_IFDIR | 0755;
-          
-          asprintf(&url, "http://%s/", &rawpath[6]);
-          asprintf(&path, "%s/", rawpath);
-        }
-      else 
-        {
-          asprintf(&url, "http://%s", &rawpath[6]);      
-          path = strdup(rawpath);
-        }
-    }
-  else if (strncmp(rawpath, "/https/", 7) == 0)
-    {
-      if (index(&rawpath[7], '/') == NULL) /* top directory for remote server */
-        {
-          stbuf->st_mode = S_IFDIR | 0755;
-
-          asprintf(&url, "https://%s/", &rawpath[7]);
-          asprintf(&path, "%s/", rawpath);
-        }
-      else 
-        {
-          asprintf(&url, "https://%s", &rawpath[7]);
-          path = strdup(rawpath);
-        }
-    }
-  else if ((local_root != NULL) && (strncmp(rawpath, "/local/", 7) == 0))
-    {      
-      asprintf(&path, "%s/%s", local_root, &rawpath[7]);
-      ret = stat(path, &stat_tmp);
-
-      if (debugmode) syslog(LOG_DEBUG, "path=%s ret=%d", path, ret);
-
-      if ((ret == 0) && S_ISDIR(stat_tmp.st_mode))
-        {
-          dirperm = get_gaclPerm(&fuse_ctx, path);
-        
-          p = rindex(path, '/');
-          if (p != NULL) *p = '\0'; 
-          /* strip off directory name itself if a directory, 
-             so get the GACL of the parent directory */
-
-          perm = get_gaclPerm(&fuse_ctx, path);
-        }
-      else
-        {      
-          perm = get_gaclPerm(&fuse_ctx, path);
-          dirperm = perm;
-        }
-
-      if (!GRSTgaclPermHasRead(perm)) ret = -EACCES;
-      else if (ret == 0)
-        {
-          stbuf->st_nlink   = 1;
-          stbuf->st_uid     = fuse_ctx.uid;
-          stbuf->st_gid     = fuse_ctx.gid;
-          stbuf->st_size    = stat_tmp.st_size;
-          stbuf->st_blksize = stat_tmp.st_blksize;
-          stbuf->st_blocks  = stat_tmp.st_blocks;
-          stbuf->st_atime   = stat_tmp.st_atime;
-          stbuf->st_mtime   = stat_tmp.st_mtime;
-          stbuf->st_ctime   = stat_tmp.st_ctime;
-        
-          if (S_ISDIR(stat_tmp.st_mode))
-            {
-              stbuf->st_mode = S_IFDIR;
-            
-              if (GRSTgaclPermHasWrite(dirperm)) 
-                                        stbuf->st_mode |= S_IWUSR;
-
-              if (GRSTgaclPermHasList(dirperm)) 
-                                        stbuf->st_mode |= S_IRUSR | S_IXUSR;
-            }
-          else
-            {
-              stbuf->st_mode = S_IFREG;
-
-              if (GRSTgaclPermHasWrite(perm)) 
-                                        stbuf->st_mode |= S_IWUSR;
-
-              if (GRSTgaclPermHasRead(perm)) 
-                                        stbuf->st_mode |= S_IRUSR;
-            }          
-            
-          
-        }  
-      else ret = -ENOENT;
-      
-      free(path);
-
-      if (debugmode) syslog(LOG_DEBUG, "slashgrid_getattr returns %d for %s",
-                                       ret, rawpath);
-      return ret;
-    }
-  else return -ENOENT;
-  
-  time(&now);
-
-  if (read_headers_from_cache(&fuse_ctx, path, 
-                              &(stbuf->st_size), &(stbuf->st_mtime)))
-    {
-      if (debugmode) syslog(LOG_DEBUG, 
-          "Retrieving details for %s from cache (%ld %ld)\n", url,
-          (long) stbuf->st_mtime, (long) stbuf->st_size);
-    
-      stbuf->st_ctime = stbuf->st_mtime;
-      stbuf->st_atime = now;
-      
-      free(url);
-      free(path);
-      return 0;    
-    }
-
-  bzero(&request_data, sizeof(struct grst_request));
-  request_data.writefunction = null_callback;
-  request_data.writedata     = NULL;
-  request_data.errorbuffer   = errorbuffer;
-  request_data.url           = url;
-  request_data.method        = GRST_SLASH_HEAD;
-  request_data.start         = -1;
-  request_data.finish        = -1;
-
-  thiserror = perform_request(&request_data, &fuse_ctx);
-
-  if ((thiserror != 0) ||
-           (request_data.retcode < 200) ||
-           (request_data.retcode > 301))
-         {
-           if (debugmode)
-                syslog(LOG_DEBUG, "... curl error: %s (%d), HTTP error: %d\n",
-                       errorbuffer, thiserror, request_data.retcode);
-           
-           if (thiserror != 0) anyerror = thiserror;
-           else                anyerror = request_data.retcode;
-
-           free(url);
-           free(path);
-           
-           if (request_data.retcode == 403) return -EACCES;
-           else return -ENOENT; 
-/* memory clean up still needed here!!!!!! */
-         }
-         
-  if (request_data.retcode == 301)
-    {
-       if (debugmode) syslog(LOG_DEBUG, "301 detected");
-
-       len = strlen(url);
-      
-       if ((request_data.location[0] != '\0') &&
-          (len + 1 == strlen(request_data.location)) &&
-          (request_data.location[len] == '/') &&
-          (strncmp(url, request_data.location, len) == 0))
-        {
-          free(url);
-          url = strdup(request_data.location);
-          request_data.url = url;
-                  
-          thiserror = perform_request(&request_data, &fuse_ctx);
-
-          if ((thiserror != 0) ||
-              (request_data.retcode < 200) ||
-              ((request_data.retcode > 299) && (request_data.retcode != 403)))
-            {
-              if (debugmode)
-                syslog(LOG_DEBUG, "... curl error: %s (%d), HTTP error: %d\n",
-                       errorbuffer, thiserror, request_data.retcode);
-           
-              if (thiserror != 0) anyerror = thiserror;
-              else                anyerror = request_data.retcode;
-
-              free(url);
-              free(path);
-              return -ENOENT; 
-/* memory clean up still needed here!!!!!! */
-            }
-            
-          stbuf->st_mode  = S_IFDIR | 0755;  /* this is a directory */
-
-          free(path);
-          asprintf(&path, "%s/", rawpath);
-        }
-      else 
-        {
-          free(url);
-          free(path);
-          return -ENOENT;
-        }
-    }
-
-  if (request_data.length_set) stbuf->st_size  = request_data.length;
-  else stbuf->st_size = 0;
-  
-  if (request_data.modified_set)
-    {
-      stbuf->st_mtime = request_data.modified;
-      stbuf->st_ctime = request_data.modified;
-    }
-
-  stbuf->st_atime = now;
-
-  write_headers_to_cache(&fuse_ctx, path, stbuf->st_size, stbuf->st_mtime);
-
-  free(url);
-  free(path);
-  return 0;
-}
-
-int write_block_to_cache(struct fuse_context *fuse_ctx, char *filename,  
-                         off_t start, off_t finish)
-{
-  int          anyerror = 0, thiserror, i, fd;
-  char        *s, *url, *tempfile, *encoded_filename, *p,
-              *newdir, *new_filename, errorbuffer[CURL_ERROR_SIZE+1] = "";
-  struct       stat statbuf;
-  struct       grst_request request_data;
-  FILE        *fp;
-
-  asprintf(&tempfile, "%s/blocks-XXXXXX", GRST_SLASH_TMP);
-  fd = mkstemp(tempfile);
-
-  if (fd == -1)
-    {
-      free(tempfile);
-      return -EIO;
-    }
-
-  fp = fdopen(fd, "w");
-
-  if (strncmp(filename, "/http/", 6) == 0)
-    asprintf(&url, "http://%s", &filename[6]);
-  else if (strncmp(filename, "/https/", 7) == 0)
-    asprintf(&url, "https://%s", &filename[7]);
-  else return -ENOENT;
-
-  bzero(&request_data, sizeof(struct grst_request));
-  request_data.writefunction = fwrite;
-  request_data.writedata     = (void *) fp;
-  request_data.errorbuffer   = errorbuffer;
-  request_data.url           = url;
-  request_data.method        = GRST_SLASH_GET;
-  request_data.start         = start;
-  request_data.finish        = finish;
-
-  if (debugmode) syslog(LOG_DEBUG, "Get block %ld-%ld from URL %s\n",
-                                   (long) start, (long) finish, url);
-  
-  thiserror = perform_request(&request_data, fuse_ctx);
-
-  free(url);
-
-  fclose(fp);  
-
-  if ((thiserror != 0) ||
-           (request_data.retcode <  200) ||
-           (request_data.retcode >= 300))
-         {
-           if (debugmode)
-                syslog(LOG_DEBUG, "... curl error: %s (%d), HTTP error: %d\n",
-                       errorbuffer, thiserror, request_data.retcode);
-
-           if (thiserror != 0) anyerror = thiserror;
-           else                anyerror = request_data.retcode;
-
-           if (request_data.retcode == 403) return -EACCES;
-           else return -ENOENT; 
-/* memory clean up still needed here!!!!!! */
-         }
-
-  encoded_filename = GRSThttpUrlMildencode(filename);
-
-// need to protect against .. ?
-// can optimise by checking for existing of filename as a dir at the start
-
-  for (p = encoded_filename; ; ++p)
-     {  
-       if ((*p != '/') && (*p != '\0')) continue;
-     
-       if (*p == '/') 
-         {
-           *p = '\0';
-           asprintf(&newdir, "%s/%d%s", 
-                    GRST_SLASH_BLOCKS, fuse_ctx->uid, encoded_filename);
-           *p = '/';
-         }
-       else asprintf(&newdir, "%s/%d%s", 
-                     GRST_SLASH_BLOCKS, fuse_ctx->uid, encoded_filename);
-           
-       if (stat(newdir, &statbuf) != 0)
-                                   mkdir(newdir, S_IRUSR | S_IWUSR | S_IXUSR);
-       free(newdir);
-       
-       if (*p == '\0') break;
-     }
-
-  asprintf(&new_filename, "%s/%d%s/%ld-%ld", GRST_SLASH_BLOCKS, fuse_ctx->uid,
-                           encoded_filename, (long) start, (long) finish);
-
-  free(encoded_filename);
-  
-  rename(tempfile, new_filename);
-
-  if (debugmode) syslog(LOG_DEBUG, "Added %s to block cache", new_filename);
-
-  free(tempfile);
-  free(new_filename);
-
-  return 0;
-}
-
-int drop_cache_blocks(struct fuse_context *fuse_ctx, char *filename)
-/* drop ALL the blocks cached for this file, and delete the directory in
-   the blocks cache for this file */
-{
-  int   ret;
-  char *encoded_filename, *dirname, *blockname;
-  DIR *blocksDIR;
-  struct dirent *blocks_ent;
-
-  encoded_filename = GRSThttpUrlMildencode(filename);
-  
-  asprintf(&dirname, "%s/%d%s", 
-                     GRST_SLASH_BLOCKS, fuse_ctx->uid, encoded_filename);
-
-  free(encoded_filename);
-
-  blocksDIR = opendir(dirname);
-  
-  if (blocksDIR == NULL) /* no directory to delete (probably) */
-    {
-      free(dirname);
-      return 1;
-    }
-    
-  while ((blocks_ent = readdir(blocksDIR)) != NULL)
-       {
-         asprintf(&blockname, "%s/%s", dirname, blocks_ent->d_name);
-         remove(blockname);
-         free(blockname);
-       }  
-  
-  closedir(blocksDIR);
-    
-  ret = rmdir(dirname);
-  free(dirname);  
-
-  return ret ? 1 : 0; /* return 1 on error, 0 on rmdir() success */
-}
-
-static int slashgrid_read(const char *path, char *buf, 
-                          size_t size, off_t offset,
-                          struct fuse_file_info *fi)
-{
-  (void) offset;
-  (void) fi;
-
-  int          anyerror = 0, thiserror, i, ilast, fd;
-  char        *s, *url, *disk_filename, *encoded_filename, *localpath;
-  off_t        block_start, block_finish, block_i, len;
-  struct       grst_body_text   rawbody;
-  struct       grst_request request_data;
-  struct       tm               modified_tm;
-  struct       stat             statbuf;
-  time_t                        now;
-  GRSTgaclPerm perm;
-  struct fuse_context fuse_ctx;
-
-  memcpy(&fuse_ctx, fuse_get_context(), sizeof(struct fuse_context));
-  
-  if (debugmode) syslog(LOG_DEBUG, "in slashgrid_read size=%ld offset=%ld",
-                                    (long) size, (long) offset);
-
-  if ((local_root != NULL) && (strncmp(path, "/local/", 7) == 0))
-    {
-      asprintf(&localpath, "%s/%s", local_root, &path[7]);
-      
-      perm = get_gaclPerm(&fuse_ctx, localpath);
-      
-      if (GRSTgaclPermHasRead(perm))
-        {
-          fd = open(localpath, O_RDONLY);
-
-          if (lseek(fd, offset, SEEK_SET) < 0) size = -1;
-          else size = read(fd, buf, size);
-
-          close(fd);                  
-        }
-      else size = -1;
-      
-      free(localpath);
-      
-      return size;
-    }
-
-  if ((strncmp(path, "/http/",  6) != 0) &&
-      (strncmp(path, "/https/", 7) != 0)) return -ENOENT;
-
-  block_start  = GRST_SLASH_BLOCK_SIZE * (offset / GRST_SLASH_BLOCK_SIZE);
-  block_finish = GRST_SLASH_BLOCK_SIZE *
-                                ((offset + size - 1) / GRST_SLASH_BLOCK_SIZE);
-
-  encoded_filename = GRSThttpUrlMildencode((char *) path);
-  time(&now);
-  for (block_i = block_start; block_i <= block_finish; block_i += GRST_SLASH_BLOCK_SIZE)
-     {     
-       asprintf(&disk_filename, "%s/%d%s/%ld-%ld", 
-                 GRST_SLASH_BLOCKS, fuse_ctx.uid, encoded_filename, 
-                 (long) block_i, (long) (block_i + GRST_SLASH_BLOCK_SIZE - 1));
-
-       if (debugmode) syslog(LOG_DEBUG, "disk_filename=%s", disk_filename);
-                 
-       if ((stat(disk_filename, &statbuf) != 0) ||
-           (statbuf.st_mtime < now - GRST_SLASH_HEADERS_EXPIRE))
-         {
-           write_block_to_cache(&fuse_ctx, (char *) path, 
-                            block_i, block_i + GRST_SLASH_BLOCK_SIZE - 1);
-         }
-
-// need to worry about cached copy being deleted (invalidated by a writing
-// thread?) between write_block_to_cache() and these reads?
-// maybe return fd from write_block_to_cache() itself???
-// the initial stat() needs to be part of this too
-
-       if ((fd = open(disk_filename, O_RDONLY)) != -1)
-         {
-           if (block_i == block_start)              
-             {
-               lseek(fd, offset - block_start, SEEK_SET);
-               read(fd, buf, 
-                        (offset - block_start + size < GRST_SLASH_BLOCK_SIZE) 
-                       ? size : GRST_SLASH_BLOCK_SIZE - offset + block_start);
-             }
-           else if (block_i == block_finish)
-             {
-               read(fd, buf + (block_i - block_start),
-                        offset + size - block_i);
-             }
-           else 
-             {
-               read(fd, buf + (block_i - block_start), 
-                        GRST_SLASH_BLOCK_SIZE);
-             }
-             
-           close(fd);
-         }        
-       else syslog(LOG_ERR, "Failed to open %s in cache", disk_filename);
-     }
-
-  free(disk_filename);
-  free(encoded_filename);
-
-  return size;
-}
-
-static int slashgrid_write(const char *path, const char *buf, 
-                           size_t size, off_t offset,
-                           struct fuse_file_info *fi)
-{
-  int          anyerror = 0, thiserror, i, fd;
-  char        *s, *url, *p, errorbuffer[CURL_ERROR_SIZE+1] = "", *localpath;
-  GRSTgaclPerm perm;
-
-  struct grst_read_data read_data;
-  struct grst_request request_data;
-  struct fuse_context fuse_ctx;
-  
-  memcpy(&fuse_ctx, fuse_get_context(), sizeof(struct fuse_context));  
-
-  if (debugmode) syslog(LOG_DEBUG, "in slashgrid_write, path=%s, UID=%d\n",
-                                   path, fuse_ctx.uid);
-                         
-  if ((local_root != NULL) && (strncmp(path, "/local/", 7) == 0))
-    {
-      asprintf(&localpath, "%s/%s", local_root, &path[7]);      
-      perm = get_gaclPerm(&fuse_ctx, localpath);
-      
-      if (GRSTgaclPermHasWrite(perm))
-        {
-          fd = open(localpath, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
-
-          if (lseek(fd, offset, SEEK_SET) < 0) size = -1;
-          else size = write(fd, buf, size);
-
-          fchown(fd, local_uid, local_gid);
-          close(fd);                  
-        }
-      else size = -1;
-      
-      free(localpath);
-      
-      return size;
-    }
-
-  if (strncmp(path, "/http/", 6) == 0)
-    asprintf(&url, "http://%s", &path[6]);
-  else if (strncmp(path, "/https/", 7) == 0)
-    asprintf(&url, "https://%s", &path[7]);
-  else return -ENOENT;
-
-  read_data.buf     = buf;
-  read_data.sent    = 0;
-  read_data.maxsent = size;
-
-  if (debugmode) syslog(LOG_DEBUG, "Put block %ld-%ld to URL %s", 
-                                   (long) offset, (long) offset+size-1, url);
-
-  drop_cache_blocks(&fuse_ctx, (char *) path); /* we drop all read-cache blocks first */
-  
-  bzero(&request_data, sizeof(struct grst_request));
-  request_data.writefunction = null_callback;
-  request_data.readfunction  = read_data_callback;
-  request_data.readdata      = &read_data;
-  request_data.infilesize    = size;
-  request_data.errorbuffer   = errorbuffer;
-  request_data.url           = url;
-  request_data.method        = GRST_SLASH_PUT;
-  request_data.start         = offset;
-  request_data.finish        = (off_t) (offset + size - 1);
-
-  thiserror = perform_request(&request_data, &fuse_ctx);
-
-  free(url);
-
-  if ((thiserror != 0) ||
-      (request_data.retcode <  200) ||
-      (request_data.retcode >= 300))
-    {
-           if (debugmode)
-                syslog(LOG_DEBUG, "... curl error: %s (%d), HTTP error: %d\n",
-                       errorbuffer, thiserror, request_data.retcode);
-           
-           if (thiserror != 0) anyerror = thiserror;
-           else                anyerror = request_data.retcode;
-
-           if (request_data.retcode == 403) return -EACCES;
-           else return -ENOENT; 
-/* memory clean up still needed here!!!!!! */
-    }
-
-  return size;
-}
-
-int slashgrid_rename(const char *oldpath, const char *newpath)
-{
-  int          anyerror = 0, thiserror, i, fd, ret;
-  char        *s, *url, *p, *destination, errorbuffer[CURL_ERROR_SIZE+1] = "",
-              *oldlocalpath, *newlocalpath;
-
-  struct grst_read_data read_data;
-  struct fuse_context fuse_ctx;
-  struct grst_request request_data;
-  GRSTgaclPerm oldperm, newperm;
-
-  memcpy(&fuse_ctx, fuse_get_context(), sizeof(struct fuse_context));
-
-  if ((local_root != NULL) && 
-      ((strncmp(oldpath, "/local/", 7) == 0) ||
-       (strncmp(newpath, "/local/", 7) == 0)))
-    {
-      if (strncmp(oldpath, newpath, 7) != 0)
-        {
-          return -EXDEV; /* not on same filesystem */
-        }
-    
-      asprintf(&oldlocalpath, "%s/%s", local_root, &oldpath[7]);
-      asprintf(&newlocalpath, "%s/%s", local_root, &newpath[7]);
-      
-      oldperm = get_gaclPerm(&fuse_ctx, oldlocalpath);
-      newperm = get_gaclPerm(&fuse_ctx, newlocalpath);
-      
-      if (GRSTgaclPermHasWrite(oldperm) &&
-          GRSTgaclPermHasWrite(newperm))
-        {
-          ret = rename(oldlocalpath, newlocalpath);
-          free(oldlocalpath);
-          free(newlocalpath);
-          
-          return (ret == 0) ? 0 : -errno;
-        }
-
-      free(oldlocalpath);
-      free(newlocalpath);
-      return -EACCES;
-    }
-  else if (strncmp(oldpath, "/http/", 6) == 0)
-    {
-      if (strncmp(newpath, "/http/", 6) != 0) return -EXDEV;
-
-      asprintf(&url,         "http://%s", &oldpath[6]);
-      asprintf(&destination, "http://%s", &newpath[6]);
-    }
-  else if (strncmp(oldpath, "/https/", 7) == 0)
-    {
-      if (strncmp(newpath, "/https/", 7) != 0) return -EXDEV;
-
-      asprintf(&url,         "https://%s", &oldpath[7]);
-      asprintf(&destination, "https://%s", &newpath[7]);
-    }
-  else return -ENOENT;
-
-  read_data.buf     = "";
-  read_data.sent    = 0;
-  read_data.maxsent = 0;
-
-  if (debugmode) syslog(LOG_DEBUG, "MOVE URL %s to %s", url, destination);
-  
-  bzero(&request_data, sizeof(struct grst_request));
-  request_data.writefunction = null_callback;
-  request_data.readfunction  = read_data_callback;
-  request_data.readdata      = &read_data;
-  request_data.errorbuffer   = errorbuffer;
-  request_data.url           = url;
-  request_data.method        = GRST_SLASH_MOVE;
-  request_data.destination   = destination;
-
-  thiserror = perform_request(&request_data, &fuse_ctx);
-
-  free(url);
-  free(destination);
-
-  if ((thiserror != 0) ||
-      (request_data.retcode <  200) ||
-      (request_data.retcode >= 300))
-    {
-      if (debugmode)
-                syslog(LOG_DEBUG, "... curl error: %s (%d), HTTP error: %d\n",
-                       errorbuffer, thiserror, request_data.retcode);
-
-      if (thiserror != 0) anyerror = thiserror;
-      else                anyerror = request_data.retcode;
-
-      if (request_data.retcode == 403) return -EACCES;
-      else return -ENOENT; 
-/* memory clean up still needed here!!!!!! */
-    }
-
-  return 0;
-}
-
-int slashgrid_unlink(const char *path)
-{
-  int   anyerror = 0, thiserror, i, fd, ret;
-  char *s, *url, *p, errorbuffer[CURL_ERROR_SIZE+1] = "",
-              *localpath;
-
-  struct grst_read_data read_data;
-  struct fuse_context fuse_ctx;
-  struct grst_request request_data;
-  GRSTgaclPerm perm;
-
-  memcpy(&fuse_ctx, fuse_get_context(), sizeof(struct fuse_context));
-
-  if (debugmode) syslog(LOG_DEBUG, "slashgrid_unlink called for %s", path);
-  
-  if (strncmp(path, "/http/", 6) == 0)
-    asprintf(&url, "http://%s", &path[6]);
-  else if (strncmp(path, "/https/", 7) == 0)
-    asprintf(&url, "https://%s", &path[7]);
-  else if ((local_root != NULL) && (strncmp(path, "/local/", 7) == 0))
-    {
-      asprintf(&localpath, "%s/%s", local_root, &path[7]);
-      
-      perm = get_gaclPerm(&fuse_ctx, localpath);
-      
-      if (GRSTgaclPermHasWrite(perm))
-        {
-          ret = remove(localpath);
-          free(localpath);
-          
-          return (ret == 0) ? 0 : -errno;
-        }
-
-      free(localpath);
-      return -EACCES;
-    }
-  else return -ENOENT;
-
-  read_data.buf     = "";
-  read_data.sent    = 0;
-  read_data.maxsent = 0;
-
-  if (debugmode) syslog(LOG_DEBUG, "DELETE URL %s", url);
-  
-  bzero(&request_data, sizeof(struct grst_request));
-  request_data.writefunction = null_callback;
-  request_data.readfunction  = read_data_callback;
-  request_data.readdata      = &read_data;
-  request_data.errorbuffer   = errorbuffer;
-  request_data.url           = url;
-  request_data.method        = GRST_SLASH_DELETE;
-
-  thiserror = perform_request(&request_data, &fuse_ctx);
-
-  free(url);
-
-  if ((thiserror != 0) ||
-           (request_data.retcode <  200) ||
-           (request_data.retcode >= 300))
-         {
-           if (debugmode)
-                syslog(LOG_DEBUG, "... curl error: %s (%d), HTTP error: %d\n",
-                       errorbuffer, thiserror, request_data.retcode);
-
-           if (thiserror != 0) anyerror = thiserror;
-           else                anyerror = request_data.retcode;
-
-           if (request_data.retcode == 403) return -EACCES;
-           else return -ENOENT; 
-/* memory clean up still needed here!!!!!! */
-         }
-
-  return 0;
-}
-
-int slashgrid_rmdir(const char *path)
-{
-  int   ret;
-  char *pathwithslash, *localpath;
-
-  asprintf(&pathwithslash, "%s/", path);
-  ret = slashgrid_unlink(pathwithslash);  
-  free(pathwithslash);
-
-/* error on GridSite side still??? */
-  
-  return ret;
-}
-
-int slashgrid_mknod(const char *path, mode_t mode, dev_t dev)
-{
-  int ret;
-
-  if (debugmode) syslog(LOG_DEBUG, "slashgrid_mknod called for %s", path);
-  
-  ret = slashgrid_write(path, "", 0, 0, NULL);
-
-  return (ret < 0) ? ret : 0;
-}
-
-int slashgrid_mkdir(const char *path, mode_t mode)
-{
-  int   ret;
-  char *pathwithslash, *localpath;
-  struct fuse_context fuse_ctx;
-  GRSTgaclPerm perm;
-  
-  memcpy(&fuse_ctx, fuse_get_context(), sizeof(struct fuse_context));
-
-  if (debugmode) syslog(LOG_DEBUG, "slashgrid_mkdir, for %s", path);
-                                  
-  if ((local_root != NULL) && (strncmp(path, "/local/", 7) == 0))
-    {
-      asprintf(&localpath, "%s/%s", local_root, &path[7]);
-      
-      perm = get_gaclPerm(&fuse_ctx, localpath);
-      
-      if (GRSTgaclPermHasWrite(perm))
-        {
-          ret = mkdir(localpath, S_IRUSR | S_IWUSR | S_IXUSR);
-          chown(localpath, local_uid, local_gid);
-          free(localpath);
-          
-          return (ret == 0) ? 0 : -errno;
-        }
-
-      free(localpath);
-      return -EACCES;
-    }
-
-  asprintf(&pathwithslash, "%s/", path);
-  ret = slashgrid_write(pathwithslash, "", 0, 0, NULL);
-  free(pathwithslash);
-
-  return (ret < 0) ? ret : 0;
-}
-
-int slashgrid_chown(const char *path, uid_t uid, gid_t gid)
-{
-  if (debugmode) syslog(LOG_DEBUG, "slashgrid_chown - NOP");
-  return 0;
-}
-
-int slashgrid_chmod(const char *path, mode_t mode)
-{
-  if (debugmode) syslog(LOG_DEBUG, "slashgrid_chmod - NOP");
-  return 0;
-}
-
-int slashgrid_truncate(const char *path, off_t offset)
-{
-  int   anyerror = 0, thiserror, i, fd, ret;
-  char *s, *url, *p, errorbuffer[CURL_ERROR_SIZE+1] = "", *localpath;
-  GRSTgaclPerm perm;
-
-  struct grst_read_data read_data;
-  struct fuse_context fuse_ctx;
-  struct grst_request request_data;
-
-  memcpy(&fuse_ctx, fuse_get_context(), sizeof(struct fuse_context));
-
-  if (debugmode) syslog(LOG_DEBUG, "slashgrid_truncate, for %s (%d)",
-                                  path, offset);
-
-  if (strncmp(path, "/http/", 6) == 0)
-    asprintf(&url, "http://%s", &path[6]);
-  else if (strncmp(path, "/https/", 7) == 0)
-    asprintf(&url, "https://%s", &path[7]);
-  else if ((local_root != NULL) && (strncmp(path, "/local/", 7) == 0))
-    {
-      asprintf(&localpath, "%s/%s", local_root, &path[7]);
-      
-      perm = get_gaclPerm(&fuse_ctx, localpath);
-      
-      if (GRSTgaclPermHasWrite(perm))
-        {
-          ret = truncate(localpath, offset);
-          free(localpath);
-          
-          return (ret == 0) ? 0 : -errno;
-        }
-
-      free(localpath);
-      return -EACCES;
-    }
-  else return -ENOENT;
-
-  read_data.buf     = "";
-  read_data.sent    = 0;
-  read_data.maxsent = 0;
-
-  if (debugmode) syslog(LOG_DEBUG, "Truncate URL %s to %ld\n", 
-                                   url, (long) offset);
-  
-  bzero(&request_data, sizeof(struct grst_request));
-  request_data.writefunction = null_callback;
-  request_data.readfunction  = read_data_callback;
-  request_data.readdata      = &read_data;
-  request_data.errorbuffer   = errorbuffer;
-  request_data.url           = url;
-  request_data.method        = GRST_SLASH_TRUNC;
-  request_data.finish        = offset;
-
-  thiserror = perform_request(&request_data, &fuse_ctx);
-
-  free(url);
-
-  if ((thiserror != 0) ||
-           (request_data.retcode <  200) ||
-           (request_data.retcode >= 300))
-         {
-           if (debugmode)
-                syslog(LOG_DEBUG, "... curl error: %s (%d), HTTP error: %d\n",
-                       errorbuffer, thiserror, request_data.retcode);
-
-           if (thiserror != 0) anyerror = thiserror;
-           else                anyerror = request_data.retcode;
-
-           if (request_data.retcode == 403) return -EACCES;
-           else return -ENOENT; 
-/* memory clean up still needed here!!!!!! */
-         }
-
-  return 0;
-}
-
-int slashgrid_statfs(const char *path, struct statfs *fs)
-{
-  /* statfs() on /local not used in practice, since not mounted separately */
-
-  if ((strncmp(path, "/local/", 7) == 0) ||
-      (strcmp(path, "/local") == 0))
-       return statfs(local_root, fs);
-  else return statfs(GRST_SLASH_BLOCKS, fs);
-}
-
-void *slashgrid_init(void)
-{
-  FILE *fp;
-  
-  if ((fp = fopen(GRST_SLASH_PIDFILE, "w")) != NULL)
-    {
-      fprintf(fp, "%d\n", (int) getpid());
-      fclose(fp);
-    }
-
-  return NULL;
-}
-
-void slashgrid_destroy(void *p)
-{
-  unlink(GRST_SLASH_PIDFILE);
-}
-
-static struct fuse_operations slashgrid_oper = {
-  .getattr     = slashgrid_getattr,
-  .chown       = slashgrid_chown,    
-  .chmod       = slashgrid_chmod,
-  .truncate    = slashgrid_truncate,    
-  .readdir     = slashgrid_readdir,
-  .write       = slashgrid_write,
-  .read                = slashgrid_read,
-  .mknod       = slashgrid_mknod,
-  .mkdir       = slashgrid_mkdir,
-  .unlink      = slashgrid_unlink,
-  .rmdir       = slashgrid_rmdir,
-  .rename      = slashgrid_rename,
-  .statfs      = slashgrid_statfs,
-  .init                = slashgrid_init,
-  .destroy     = slashgrid_destroy
-};
-
-void slashgrid_logfunc(char *file, int line, int level, char *fmt, ...)
-{
-  char *mesg;
-  va_list ap;
-
-  va_start(ap, fmt);
-  vasprintf(&mesg, fmt, ap);
-  va_end(ap);
-  
-  syslog(level, "%s(%d) %s", file, line, mesg);
-  
-  free(mesg);
-}
-
-int main(int argc, char *argv[])
-{
-  char *fuse_argv[] = { "slashgrid", "/grid", "-o", "allow_other",
-                        "-s", "-d" };
-  int   i, ret, fuse_argc = 4; /* by default, ignore the final 2 args */
-  struct passwd *pw;
-  struct rlimit unlimited = { RLIM_INFINITY, RLIM_INFINITY };
-  
-  for (i=1; i < argc; ++i)
-     {
-       if (strcmp(argv[i], "--debug") == 0) 
-         {
-           debugmode = 1;
-         }
-       else if (strcmp(argv[i], "--foreground") == 0) 
-         {
-           debugmode = 1;
-           fuse_argc = 6;
-         }
-       else if ((strcmp(argv[i], "--domain") == 0) && (i + 1 < argc))
-         {
-           sitecast_domain = argv[i+1];
-           sitecast_domain_len = strlen(sitecast_domain);
-           ++i;
-         }
-       else if ((strcmp(argv[i], "--groups") == 0) && (i + 1 < argc))
-         {
-           sitecast_groups = argv[i+1];
-           ++i;
-         }          
-       else if ((strcmp(argv[i], "--local-root") == 0) && (i + 1 < argc))
-         {
-           local_root = argv[i+1];
-           ++i;
-         }          
-       else if ((strcmp(argv[i], "--local-user") == 0) && (i + 1 < argc))
-         {
-           if ((pw = getpwnam(argv[i+1])) == NULL)
-             {
-               fprintf(stderr, "unable to find user %s\n", argv[i+1]);
-               return 1;
-             }
-            
-           local_uid = pw->pw_uid;
-           local_gid = pw->pw_gid;
-           ++i;           
-         }
-       else if ((strcmp(argv[i], "--gridmapdir") == 0) && (i + 1 < argc))
-         {
-           gridmapdir = argv[i+1];
-           ++i;
-         }          
-       else
-         {
-           fprintf(stderr, "argument %s not recognised\n", argv[i]);
-           return 1;
-         }
-     }              
-
-  if ((local_root != NULL) && 
-      ((local_uid == 0) || (local_gid == 0)))
-    {
-      fprintf(stderr, "if --local-root is given, "
-                "--local-user must be given too and not be the root user\n");
-      return 1;
-    }
-
-  openlog("slashgrid", 0, LOG_DAEMON);
-    
-  umount("/grid"); /* in case of a crash, but will fail if still busy */
-
-  for (i=0; i < GRST_SLASH_MAX_HANDLES; ++i)
-     {
-       pthread_mutex_init(&(handles[i].mutex), NULL);
-       handles[i].curl_handle = NULL;
-       handles[i].proxyfile   = NULL;
-       handles[i].last_used   = 0;
-     }
-
-  if (debugmode) 
-    {
-      chdir("/var/tmp");
-      setrlimit(RLIMIT_CORE, &unlimited);
-    }
-
-//  GRSTerrorLogFunc = slashgrid_logfunc;
-  GRSTgaclInit();
-  ret = fuse_main(fuse_argc, fuse_argv, &slashgrid_oper);
-
-  return ret;
-}
diff --git a/org.gridsite.core/src/slashgrid.init b/org.gridsite.core/src/slashgrid.init
deleted file mode 100755 (executable)
index f83b43e..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/bin/bash
-#
-# slashgrid        Startup script for the SlashGrid client-side server
-#
-# chkconfig: - 90 10
-# description: Filesystem extension for access to HTTP(S) file servers
-# processname: slashgrid
-# config: /etc/sysconfig/slashgrid
-# pidfile: /var/run/slashgrid.pid
-
-# Source function library.
-. /etc/rc.d/init.d/functions
-
-# Examples of useful overrides of default settings:
-#
-# OPTIONS=--debug                      # to turn on LOG_DEBUG in syslog
-# SLASHGRID=/usr/local/sbin/slashgrid  # if slashgrid not in /usr/sbin
-# PATH=$PATH:/usr/local/bin            # if fusermount not on old $PATH
-#
-if [ -f /etc/sysconfig/slashgrid ] ; then
- . /etc/sysconfig/slashgrid
-fi
-
-slashgrid=${SLASHGRID-/usr/sbin/slashgrid}
-pidfile=${PIDFILE-/var/run/slashgrid.pid}
-lockfile=${LOCKFILE-/var/lock/subsys/slashgrid}
-prog=slashgrid
-RETVAL=0
-
-start() {
-        echo -n $"Starting $prog: "
-        modprobe fuse
-        sleep 1
-        daemon $slashgrid $OPTIONS
-        RETVAL=$?
-        echo
-        [ $RETVAL = 0 ] && touch ${lockfile}
-        return $RETVAL
-}
-
-stop() {
-       echo -n $"Stopping $prog: "
-       killproc $slashgrid
-       RETVAL=$?
-       echo
-       [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
-}
-
-# Invoke the right function
-
-case "$1" in
-  start)
-       start
-       ;;
-  stop)
-       stop
-       ;;
-  restart)
-       stop
-       start
-       ;;
-  *)
-       echo $"Usage: $prog {start|stop|restart|help}"
-       exit 1
-esac
-
-exit $RETVAL
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;
-}
diff --git a/org.gridsite.core/src/xacmlexample.c b/org.gridsite.core/src/xacmlexample.c
deleted file mode 100644 (file)
index af914b9..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
-   Copyright (c) 2005, 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.
-*/
-
-/*---------------------------------------------------------------*
- * For more about GridSite: http://www.gridsite.org/             *
- *---------------------------------------------------------------*/
-
-/*
-   Example program using XACML
-
-   Build with:
-   
-    gcc -o xacmlexample xacmlexample.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 XACML functions */
-
-  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);
-
-  GRSTxacmlAclSave(acl1, "example.xacml");
-
-  puts("gridacl.out saved");
-
-  puts("");
-
-  /* load the ACL back off the disk, print and test it */
-
-  acl2 = GRSTxacmlAclLoadFile("example.xacml");
-
-  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;
-}
-